50 class HepRandomEngine;
68 typedef std::map<unsigned int, std::vector<PSimHit>>
simhit_map;
72 std::map<RPDetId, std::unique_ptr<RPDetDigitizer>>
theAlgoMap;
92 produces<edm::DetSetVector<TotemRPDigi>>();
102 "simulateDeadChannels")) {
124 <<
"This class requires the RandomNumberGeneratorService\n"
125 "which is not present in the configuration file. You must add the service\n"
126 "in the configuration file or remove the modules that require it.";
133 iEvent.getByLabel(
"mix",
"g4SimHitsTotemHitsRP", cf);
136 edm::LogInfo(
"RPDigiProducer") <<
"\n\n=================== Starting SimHit access"
137 <<
" ==================="
143 for (cfi =
col.begin(); cfi !=
col.end(); cfi++) {
144 edm::LogInfo(
"RPDigiProducer") <<
" Hit " <<
count <<
" has tof " << cfi->timeOfFlight() <<
" trackid "
145 << cfi->trackId() <<
" bunchcr " << cfi.
bunch() <<
" trigger " << cfi.
getTrigger()
146 <<
", from EncodedEventId: " << cfi->eventId().bunchCrossing() <<
" "
147 << cfi->eventId().event() <<
" bcr from MixCol " << cfi.
bunch() <<
"\n";
148 edm::LogInfo(
"RPDigiProducer") <<
" Hit: " << (*cfi) <<
"\n";
156 edm::LogInfo(
"RPDigiProducer") <<
"Input MixCollection size = " << allRPHits.size() <<
"\n";
163 for (isim = allRPHits.begin(); isim != allRPHits.end(); ++isim) {
164 simHitMap_[(*isim).detUnitId()].push_back((*isim));
168 std::vector<edm::DetSet<TotemRPDigi>> DigiVector;
169 DigiVector.reserve(400);
179 std::vector<int> input_links;
183 ->
run(simHitMap_[it->first], input_links, digi_collector.
data, output_digi_links);
185 if (!digi_collector.
data.empty()) {
194 edm::LogInfo(
"RPDigiProducer") <<
"digi_output->size()=" << digi_output->size() <<
"\n";
214 for (std::vector<TotemRPDigi>::const_iterator stripIterator = rpstrip_detset.
data.begin();
215 stripIterator < rpstrip_detset.
data.end();
217 rpdigi_detset.push_back(
TotemRPDigi(stripIterator->stripNumber()));
220 return rpdigi_detset;
227 desc.add<
bool>(
"RPLandauFluctuations",
true);
228 desc.add<
bool>(
"RPDisplacementOn",
false);
229 desc.add<
int>(
"RPVerbosity", 0);
230 desc.add<
double>(
"RPVFATThreshold", 9000.0);
231 desc.add<
double>(
"RPTopEdgePosition", 1.5);
232 desc.add<
double>(
"RPActiveEdgeSmearing", 0.013);
233 desc.add<
double>(
"RPEquivalentNoiseCharge300um", 1000.0);
234 desc.add<
int>(
"RPVFATTriggerMode", 2);
235 desc.add<std::vector<double>>(
"RPInterStripSmearing",
239 desc.add<
double>(
"RPSharingSigmas", 5.0);
240 desc.add<
double>(
"RPGeVPerElectron", 3.61e-09);
241 desc.add<
double>(
"RPActiveEdgePosition", 0.034);
242 desc.add<
bool>(
"RPDeadStripSimulationOn",
false);
243 desc.add<std::vector<std::string>>(
"ROUList",
247 desc.add<
bool>(
"RPNoNoise",
false);
248 desc.add<
bool>(
"RPDigiSimHitRelationsPresistence",
false);
250 desc.add<
int>(
"RPChargeDivisionsPerThickness", 5);
251 desc.add<
double>(
"RPDeltaProductionCut", 0.120425);
252 desc.add<
double>(
"RPBottomEdgePosition", 1.5);
253 desc.add<
double>(
"RPBottomEdgeSmearing", 0.011);
254 desc.add<
double>(
"RPTopEdgeSmearing", 0.011);
256 desc.add<
double>(
"RPInterStripCoupling",
258 desc.add<
double>(
"RPDeadStripProbability", 0.001);
259 desc.add<
int>(
"RPChargeDivisionsPerStrip", 15);
260 descriptions.
add(
"RPSiDetDigitizer",
desc);