17 const std::vector<sim::SimChannel>& simch_v)
19 Reset(g4_trackid_v, simch_v);
23 const std::vector<sim::SimChannel>& simch_v)
30 for (
auto const&
id : g4_trackid_v)
37 const std::vector<sim::SimChannel>& simch_v)
44 for (
auto const&
id : g4_trackid_v)
55 for (
auto const& sch : simch_v) {
57 auto const ch = sch.Channel();
62 size_t plane = wireReadoutGeom.ChannelToWire(ch)[0].Plane;
64 for (
auto const& time_ide : sch.TDCIDEMap()) {
66 auto const& time = time_ide.first;
67 auto const& ide_v = time_ide.second;
69 auto& edep_info = ch_info[time];
71 if (!edep_info.size()) edep_info.resize(_num_parts, 0);
73 for (
auto const& ide : ide_v) {
77 if (_num_parts <= index) {
78 (*edep_info.rbegin()) += ide.numElectrons;
79 (*(
_sum_mcq[plane]).rbegin()) += ide.numElectrons;
82 edep_info[index] += ide.numElectrons;
83 _sum_mcq[plane][index] += ide.numElectrons;
93 throw MCBTException(Form(
"Invalid plane requested: %zu", plane_id));
106 auto itlow = ch_info.lower_bound((
unsigned int)(clockData.
TPCTick2TDC(hit.
start)));
107 auto itup = ch_info.upper_bound((
unsigned int)(clockData.
TPCTick2TDC(hit.
end)) + 1);
109 while (itlow != ch_info.end() && itlow != itup) {
111 auto const& edep_info = (*itlow).second;
113 for (
size_t part_index = 0; part_index <
_num_parts; ++part_index)
115 res[part_index] += edep_info[part_index];
125 auto res =
MCQ(clockData, hit);
126 if (!res.size())
return res;
129 for (
auto const& v : res)
131 for (
size_t i = 0; i < (res.size() - 1); ++i)
132 res[i] /= (sum - (*res.rbegin()));
133 (*res.rbegin()) /= sum;
138 const std::vector<WireRange_t>& hit_v)
const 141 for (
auto const& h : hit_v) {
142 auto tmp_res =
MCQ(clockData, h);
143 for (
size_t i = 0; i < res.size(); ++i)
144 res[i] += tmp_res[i];
150 const std::vector<WireRange_t>& hit_v)
const 152 auto res =
MCQ(clockData, hit_v);
153 if (!res.size())
return res;
156 for (
auto const& v : res)
158 for (
size_t i = 0; i < (res.size() - 1); ++i)
159 res[i] /= (sum - (*res.rbegin()));
160 (*res.rbegin()) /= sum;
183 unsigned int max_id = 0;
184 for (
auto const&
id : track_id_v)
185 if (max_id <
id) max_id = id;
188 for (
auto const&
id : track_id_v) {
const std::vector< double > & MCQSum(const size_t plane_id) const
std::vector< std::vector< double > > _sum_mcq
void Reset(const std::vector< unsigned int > &g4_trackid_v, const std::vector< sim::SimChannel > &simch_v)
Class def header for a class MCBTAlg.
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
std::vector<::btutil::ch_info_t > _event_info
pure virtual base interface for detector clocks
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
size_t Index(const unsigned int g4_track_id) const
std::vector< double > MCQ(detinfo::DetectorClocksData const &clockData, const WireRange_t &hit) const
static const size_t kINVALID_INDEX
Signifies invalid MCX index number.
void ProcessSimChannel(const std::vector< sim::SimChannel > &simch_v)
std::vector< size_t > _trkid_to_index
Definition of data types for geometry description.
Detector simulation of raw signals on wires.
Contains all timing reference information for the detector.
std::vector< double > MCQFrac(detinfo::DetectorClocksData const &clockData, const WireRange_t &hit) const
object containing MC truth information necessary for making RawDigits and doing back tracking ...
void Register(const unsigned int &g4_track_id)
double TPCTick2TDC(double const tick) const
Class def header for exception classes in MCComp package.