9void TrigScintDigiProducer::configure(
12 stripsPerArray_ = parameters.getParameter<
int>(
"number_of_strips");
13 numberOfArrays_ = parameters.getParameter<
int>(
"number_of_arrays");
14 meanNoise_ = parameters.getParameter<
double>(
"mean_noise");
15 mevPerMip_ = parameters.getParameter<
double>(
"mev_per_mip");
16 pePerMip_ = parameters.getParameter<
double>(
"pe_per_mip");
17 inputCollection_ = parameters.getParameter<std::string>(
"input_collection");
18 inputPassName_ = parameters.getParameter<std::string>(
"input_pass_name");
19 outputCollection_ = parameters.getParameter<std::string>(
"output_collection");
20 verbose_ = parameters.getParameter<
bool>(
"verbose");
48 std::map<ldmx::TrigScintID, int> cellPEs, cellMinPEs;
49 std::map<ldmx::TrigScintID, float> Xpos, Ypos, Zpos, Edep, Time, beamFrac;
50 std::set<ldmx::TrigScintID> noiseHitIDs;
56 inputCollection_, inputPassName_)};
60 for (
const auto &simHit : simHits) {
67 std::vector<float> position = simHit.getPosition();
70 std::cout <<
id << std::endl;
74 for (
int i = 0; i < simHit.getNumberOfContribs(); i++) {
75 auto contrib = simHit.getContrib(i);
77 std::cout <<
"contrib " << i <<
" trackID: " << contrib.trackID
78 <<
" pdgID: " << contrib.pdgCode <<
" edep: " << contrib.edep
80 std::cout <<
"\t particle id: "
81 << particleMap[contrib.trackID].getPdgID()
82 <<
" particle status: "
83 << particleMap[contrib.trackID].getGenStatus() << std::endl;
85 if (particleMap[contrib.trackID].getPdgID() == 11 &&
86 particleMap[contrib.trackID].getGenStatus() == 1) {
87 if (beamFrac.find(
id) == beamFrac.end()) {
88 beamFrac[id] = contrib.edep;
90 beamFrac[id] += contrib.edep;
99 if (Edep.find(
id) == Edep.end()) {
101 Edep[id] = simHit.getEdep();
102 Time[id] = simHit.getTime() * simHit.getEdep();
103 Xpos[id] = position[0] * simHit.getEdep();
104 Ypos[id] = position[1] * simHit.getEdep();
105 Zpos[id] = position[2] * simHit.getEdep();
110 Xpos[id] += position[0] * simHit.getEdep();
111 Ypos[id] += position[1] * simHit.getEdep();
112 Zpos[id] += position[2] * simHit.getEdep();
113 Edep[id] += simHit.getEdep();
115 Time[id] += simHit.getTime() * simHit.getEdep();
120 std::vector<ldmx::TrigScintHit> trigScintHits;
123 for (std::map<ldmx::TrigScintID, float>::iterator it = Edep.begin();
124 it != Edep.end(); ++it) {
127 double depEnergy = Edep[id];
128 Time[id] = Time[id] / Edep[id];
129 Xpos[id] = Xpos[id] / Edep[id];
130 Ypos[id] = Ypos[id] / Edep[id];
131 Zpos[id] = Zpos[id] / Edep[id];
132 double meanPE = depEnergy / mevPerMip_ * pePerMip_;
133 std::poisson_distribution<int> poisson_dist(meanPE + meanNoise_);
134 cellPEs[id] = poisson_dist(rng_);
140 if (cellPEs[
id] >= 1) {
143 hit.
setPE(cellPEs[
id]);
156 trigScintHits.push_back(hit);
160 std::cout <<
id << std::endl;
161 std::cout <<
"Edep: " << Edep[id] << std::endl;
162 std::cout <<
"numPEs: " << cellPEs[id] << std::endl;
163 std::cout <<
"time: " << Time[id] << std::endl;
164 std::cout <<
"z: " << Zpos[id] << std::endl;
165 std::cout <<
"\t X: " << Xpos[id] <<
"\t Y: " << Ypos[id]
166 <<
"\t Z: " << Zpos[id] << std::endl;
174 int numEmptyCells = stripsPerArray_ - numRecHits;
175 std::vector<double> noiseHits_PE =
176 noiseGenerator_->generateNoiseHits(numEmptyCells);
180 for (
auto &noiseHitPE : noiseHits_PE) {
184 tempID = generateRandomID(module);
185 }
while (Edep.find(tempID) != Edep.end() ||
186 noiseHitIDs.find(tempID) != noiseHitIDs.end());
190 noiseHitIDs.insert(noiseID);
192 hit.
setPE(noiseHitPE);
205 trigScintHits.push_back(hit);
210 event.add(outputCollection_, trigScintHits);
Class representing a simulated particle.