49 produces< std::vector< sim::MCHitCollection> >();
51 produces< std::vector< sim::MCWireCollection> >();
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;
164 float vtx[3] = {
float(edep.Vertex()[0]),
165 float(edep.Vertex()[1]),
166 float(edep.Vertex()[2])};
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.
EDProducer(fhicl::ParameterSet const &pset)
void SetStartTDC(const unsigned int start)
Setter function for time.
void produce(art::Event &e) override
void SetTrackId(unsigned int id)
art framework interface to geometry description
unsigned int Nchannels() const
Returns the number of TPC readout channels in the detector.
bool isValid() const noexcept
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
#define DEFINE_ART_MODULE(klass)
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
Detector simulation of raw signals on wires.
raw::ChannelID_t Channel() const
Returns the readout channel this object describes.
TDCIDEs_t const & TDCIDEMap() const
Returns all the deposited energy information as stored.
MCHitFinder(fhicl::ParameterSet const &p)
LArSoft geometry interface.
cet::coded_exception< error, detail::translate > exception
QTextStream & endl(QTextStream &s)