11 #define BOOST_SYSTEM_NO_DEPRICATED 18 #include "art_root_io/TFileService.h" 22 #include "nurandom/RandomUtils/NuRandomService.h" 31 #include "CLHEP/Random/RandFlat.h" 75 : tick(t), eDep(ed), auxDetID(adid), numHits(1) {
135 produces< std::vector< raw::ExternalTrigger > >();
142 int skippedHitsIneff = 0;
143 int skippedHitsOutRange = 0;
149 std::unique_ptr<std::vector<raw::ExternalTrigger>> trigcol(
new std::vector<raw::ExternalTrigger>);
156 std::vector<const sim::AuxDetSimChannel*> fAuxDetSimChannels;
159 nauxdets = fAuxDetSimChannels.size();
162 for (
size_t i=0; i<fAuxDetSimChannels.size(); ++i) {
167 const std::vector<sim::AuxDetIDE>& setOfIDEs = c->
AuxDetIDEs();
172 for (
size_t j=0; j<setOfIDEs.size(); ++j) {
176 entryx = setOfIDEs[j].entryX;
177 entryy = setOfIDEs[j].entryY;
178 entryz = setOfIDEs[j].entryZ;
179 entryt = setOfIDEs[j].entryT;
180 exitx = setOfIDEs[j].exitX;
181 exity = setOfIDEs[j].exitY;
182 exitz = setOfIDEs[j].exitZ;
183 exitt = setOfIDEs[j].exitT;
184 exitpx = setOfIDEs[j].exitMomentumX;
185 exitpy = setOfIDEs[j].exitMomentumY;
186 exitpz = setOfIDEs[j].exitMomentumZ;
187 energy = setOfIDEs[j].energyDeposited;
188 trackid = setOfIDEs[j].trackID;
192 double randEff =
fFlat.fire();
199 double triggerOffsetTPC = clockData.TriggerOffsetTPC()*1.e3;
200 double readoutWindowSizeTPC = detProp.ReadOutWindowSize();
201 double clockSpeedTPC = clockData.TPCClock().Frequency();
202 double windowLength = readoutWindowSizeTPC/clockSpeedTPC;
206 if (time<0 || time>windowLength*1000) {
207 ++skippedHitsOutRange;
211 double edepIDE = setOfIDEs[j].energyDeposited*1000;
215 for (it =
tickv.begin(); it !=
tickv.end(); ++it) {
224 if (it==
tickv.end()) {
234 std::map<int, int >trigmap;
237 if (
tickv.size()>1) {
239 for (it =
tickv.begin(); it !=
tickv.end(); ++it) {
253 unsigned int iRM=0;
unsigned int iCL=0;
unsigned int iNU=0;
unsigned int iNL=0;
254 unsigned int iSU=0;
unsigned int iSL=0;
unsigned int iWU=0;
unsigned int iEL=0;
266 if (start !=
tickv.end()) {
267 for (it2 = start; it2 !=
tickv.end(); ++it2) {
295 float ttime;
int trigtick;
297 if (iRM>0 && iCL>0) { ttime=0.5*(iRM+iCL)+0.5; trigtick=
int(ttime);
298 if (trigmap[trigtick]==0) {trigmap[trigtick]++;trigmap[trigtick+1]++;
299 trigmap[trigtick+2]++;trigmap[trigtick-1]++;trigmap[trigtick-2]++;
305 if (iEL>0 && iWU>0) { ttime=0.5*(iEL+iWU)+0.5; trigtick=
int(ttime);
306 if (trigmap[trigtick]==0) {trigmap[trigtick]++;trigmap[trigtick+1]++;
307 trigmap[trigtick+2]++;trigmap[trigtick-1]++;trigmap[trigtick-2]++;
313 if (iNU>0 && iSL>0) { ttime=0.5*(iNU+iSL)+0.5; trigtick=
int(ttime);
314 if (trigmap[trigtick]==0) {trigmap[trigtick]++;trigmap[trigtick+1]++;
315 trigmap[trigtick+2]++;trigmap[trigtick-1]++;trigmap[trigtick-2]++;
321 if (iSU>0 && iNL>0) { ttime=0.5*(iSU+iNL)+0.5; trigtick=
int(ttime);
322 if (trigmap[trigtick]==0) {trigmap[trigtick]++;trigmap[trigtick+1]++;
323 trigmap[trigtick+2]++;trigmap[trigtick-1]++;trigmap[trigtick-2]++;
338 std::ostringstream out;
347 out <<
"AuxDet " << ct.
auxDetID <<
" had " << ct.
numHits <<
" hits at readout tick " << ct.
tick <<
". Total eDep = " << ct.
eDep <<
" MeV.\n";
349 if (skippedHitsIneff) out << skippedHitsIneff <<
" hits were skipped due to counter inefficiency.\n";
350 if (skippedHitsOutRange) out << skippedHitsOutRange <<
" hits were skipped for being out of TPC window range.\n";
364 fTree = tfs->make<TTree>(
"SimCounter35t",
"SimCounter35t");
base_engine_t & createEngine(seed_t seed)
SimCounter35t & operator=(SimCounter35t const &)=delete
Utilities related to art service access.
unsigned int fCombinedTimeDelay
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
chanTick(int t, int adid, double ed)
EDProducer(fhicl::ParameterSet const &pset)
Detector simulation of raw signals on wires.
SimCounter35t(fhicl::ParameterSet const &p)
std::vector< chanTick > tickv
double fBSUTriggerThreshold
Collection of particles crossing one auxiliary detector cell.
void produce(art::Event &e) override
object containing MC truth information necessary for making RawDigits and doing back tracking ...
double fTSUTriggerThreshold
uint32_t AuxDetID() const
#define DEFINE_ART_MODULE(klass)
std::string fLArG4ModuleLabel
Collect all the RawData header files together.
std::vector< sim::AuxDetIDE > const & AuxDetIDEs() const
SubRunNumber_t subRun() const
double fClockSpeedCounter
double fTriggerEfficiency
EventNumber_t event() const
std::size_t getView(std::string const &moduleLabel, std::string const &productInstanceName, std::string const &processName, std::vector< ELEMENT const * > &result) const
ProductID put(std::unique_ptr< PROD > &&edp, FullSemantic< Level::Run > const semantic)
Event finding and building.