59 const unsigned int nch = geo->
Nchannels();
61 std::unique_ptr< std::vector<sim::MCHitCollection> > hits_v (
new std::vector<sim::MCHitCollection>() );
62 std::unique_ptr< std::vector<sim::MCWireCollection> > wires_v (
new std::vector<sim::MCWireCollection>() );
65 wires_v->reserve(nch);
66 for(
size_t ch=0; ch<nch; ++ch) {
80 for(
size_t simch_index=0; simch_index<simchArray->size(); ++simch_index) {
84 size_t ch = simch_ptr->Channel();
86 if(ch >= hits_v->size())
89 <<
"Channel number " << ch <<
" exceeds total # of channels: " << nch <<
std::endl;
91 auto &mchits = hits_v->at(ch);
92 auto &mcwires = wires_v->at(ch);
94 std::map<sim::MCEnDep,sim::MCWire> edep_wire_map;
95 auto tdc_ide_map = simch_ptr->TDCIDEMap();
105 std::cout<<std::endl<<
"Processing Ch: "<<ch<<
std::endl;
107 for(
auto const& tdc_ide_pair : tdc_ide_map) {
109 auto const& tdc = tdc_ide_pair.first;
110 auto const& ide_v = tdc_ide_pair.second;
112 for(
auto const& ide : ide_v) {
121 auto edep_iter = edep_wire_map.insert(std::make_pair(edep,wire));
125 auto last_tdc = (edep_iter).first->second.StartTDC() + (edep_iter).first->second.size() - 1;
129 if( edep_iter.second ) std::cout<<
std::endl;
131 std::cout<<
" Track: "<<ide.trackID
132 <<
" Vtx: " <<ide.x <<
" " << ide.y <<
" " <<ide.z <<
" " <<ide.energy
133 <<
" ... @ TDC = "<<tdc<<
" ... "<<ide.numElectrons <<
std::endl;
136 if( !(edep_iter.second) ) {
138 if( last_tdc+1 != tdc ) {
150 (edep_iter).first->second.push_back(ide.numElectrons);
157 for(
auto const& edep_wire_pair : edep_wire_map) {
159 auto const& edep = edep_wire_pair.first;
160 auto const& wire = edep_wire_pair.second;
172 for(
size_t wire_index=0; wire_index < wire.size(); ++wire_index) {
174 auto q = wire.at(wire_index);
178 if( q > qmax) { qmax = q; max_time = wire.
StartTDC() + wire_index; }
184 mchits.push_back(hit);
188 mcwires.push_back(wire);
194 std::sort((*hits_v).begin(),(*hits_v).end());
198 std::sort((*wires_v).begin(),(*wires_v).end());
void SetCharge(float qsum, float amp)
Setter function for charge/amplitude.
void SetParticleInfo(const float vtx[], const float energy, const int trackId)
Setter function for partile info.
void SetTime(const float peak, const float width)
Setter function for time.
void SetStartTDC(const unsigned int start)
Setter function for time.
void SetTrackId(unsigned int id)
unsigned int Nchannels() const
Returns the number of TPC readout channels in the detector.
bool isValid() const noexcept
unsigned int StartTDC() const
Getter for start time.
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
unsigned int TrackId() const
void SetVertex(float x, float y, float z)
ProductID put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
std::string fLArG4ModuleName
bool removeCachedProduct(Handle< PROD > &) const
LArSoft geometry interface.
cet::coded_exception< error, detail::translate > exception
QTextStream & endl(QTextStream &s)
const std::array< float, 3 > & Vertex() const