13 #include "CLHEP/Random/RandFlat.h" 22 return (h1.
tof() < h2.
tof());
29 theInputTag(pset.getParameter<
edm::InputTag>(
"input")),
30 theNeutronTimeCut(pset.getParameter<double>(
"neutronTimeCut")),
31 theTimeWindow(pset.getParameter<double>(
"timeWindow")),
32 theT0(pset.getParameter<double>(
"t0")),
43 else if (writer ==
"ROOT")
47 else if (writer ==
"EDM")
49 produces<edm::PSimHitContainer>();
57 <<
"SubsystemNeutronWriter requires the RandomNumberGeneratorService\n" 58 "which is not present in the configuration file. You must add the service\n" 59 "in the configuration file or remove the modules that require it.";
77 edm::LogInfo(
"SubsystemNeutronWriter") <<
"SubsystemNeutronWriter Statistics:\n";
80 edm::LogInfo(
"SubsystemNeutronWriter") <<
" theEventOccupancy[" << mapItr->first <<
"] = " 81 << mapItr->second <<
" / " <<
theNEvents <<
" / NCT \n";
87 CLHEP::HepRandomEngine* engine =
nullptr;
98 map<int, edm::PSimHitContainer> hitsByChamber;
99 for(edm::PSimHitContainer::const_iterator hitItr = hits->begin();
100 hitItr != hits->end(); ++hitItr)
102 int chamberIndex =
chamberId(hitItr->detUnitId());
103 hitsByChamber[chamberIndex].push_back(*hitItr);
107 for(map<int, edm::PSimHitContainer>::iterator hitsByChamberItr = hitsByChamber.begin();
108 hitsByChamberItr != hitsByChamber.end(); ++hitsByChamberItr)
110 int chambertype =
chamberType(hitsByChamberItr->first);
111 writeHits(chambertype, hitsByChamberItr->second, engine);
126 CLHEP::HepRandomEngine* engine)
129 sort(chamberHits.begin(), chamberHits.end(),
SortByTime());
131 float startTime = -1000.;
133 for(
size_t i = 0;
i < chamberHits.size(); ++
i) {
135 float tof = hit.
tof();
137 <<
" at tof " << tof <<
" p " << hit.
pabs()
146 smearing += CLHEP::RandFlat::shoot(engine, 25.);
148 if(!cluster.empty()) {
149 LogDebug(
"SubsystemNeutronWriter") <<
"filling old cluster";
153 LogDebug(
"SubsystemNeutronWriter") <<
"starting neutron cluster at time " << startTime
156 adjust(hit, -1.*startTime, smearing);
157 cluster.push_back( hit );
161 if(!cluster.empty()) {
T getParameter(std::string const &) const
float tof() const
deprecated name for timeOfFlight()
virtual ~SubsystemNeutronWriter()
destructor prints statistics on number of events written
void initialize(int chamberType)
good practice to do once for each chamber type
LocalVector momentumAtEntry() const
The momentum of the track that produced the hit, at entry point.
Geom::Phi< T > phi() const
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
virtual void beginEvent(edm::Event &e, const edm::EventSetup &es)
virtual bool accept(const edm::PSimHitContainer &cluster) const =0
decides whether this cluster is good enough to be included
void adjust(PSimHit &h, float timeOffset, float smearing)
helper to add time offsets and local det ID
Geom::Theta< T > theta() const
Local3DPoint exitPoint() const
Exit point in the local Det frame.
float timeOfFlight() const
virtual void writeHits(int chamberType, edm::PSimHitContainer &chamberHits, CLHEP::HepRandomEngine *)
edm::InputTag theInputTag
bool operator()(const PSimHit &h1, const PSimHit &h2)
std::map< int, int > theCountPerChamberType
virtual void writeCluster(int detType, const edm::PSimHitContainer &simHits)=0
writes out a list of SimHits.
float pabs() const
fast and more accurate access to momentumAtEntry().mag()
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
virtual void initialize(int detType)
SubsystemNeutronWriter(edm::ParameterSet const &pset)
void updateCount(int chamberType)
updates the counter
void writeCluster(int chamberType, const edm::PSimHitContainer &cluster)
NeutronWriter * theHitWriter
virtual int chamberId(int globalDetId) const =0
float energyLoss() const
The energy deposit in the PSimHit, in ???.
StreamID streamID() const
unsigned int trackId() const
virtual void produce(edm::Event &e, edm::EventSetup const &c)
std::vector< PSimHit > PSimHitContainer
virtual int chamberType(int globalDetId) const =0
Local3DPoint entryPoint() const
Entry point in the local Det frame.
virtual int localDetId(int globalDetId) const =0
unsigned int detUnitId() const