50 class HepRandomEngine;
68 typedef std::map<unsigned int, std::vector<PSimHit>>
simhit_map;
72 std::map<RPDetId, std::unique_ptr<RPDetDigitizer>>
theAlgoMap;
74 CLHEP::HepRandomEngine* rndEngine_ =
nullptr;
92 produces<edm::DetSetVector<TotemRPDigi>>();
102 "simulateDeadChannels")) {
103 simulateDeadChannels = conf.
getParameter<
bool>(
"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);
180 std::vector<int> input_links;
184 ->
run(simHitMap_[it->first], input_links, digi_collector.
data, output_digi_links);
186 if (!digi_collector.
data.empty()) {
195 edm::LogInfo(
"RPDigiProducer") <<
"digi_output->size()=" << digi_output->size() <<
"\n";
215 for (std::vector<TotemRPDigi>::const_iterator stripIterator = rpstrip_detset.
data.begin();
216 stripIterator < rpstrip_detset.
data.end();
218 rpdigi_detset.push_back(
TotemRPDigi(stripIterator->stripNumber()));
221 return rpdigi_detset;
228 desc.
add<
bool>(
"RPLandauFluctuations",
true);
229 desc.
add<
bool>(
"RPDisplacementOn",
false);
230 desc.
add<
int>(
"RPVerbosity", 0);
231 desc.
add<
double>(
"RPVFATThreshold", 9000.0);
232 desc.
add<
double>(
"RPTopEdgePosition", 1.5);
233 desc.
add<
double>(
"RPActiveEdgeSmearing", 0.013);
234 desc.
add<
double>(
"RPEquivalentNoiseCharge300um", 1000.0);
235 desc.
add<
int>(
"RPVFATTriggerMode", 2);
236 desc.
add<std::vector<double>>(
"RPInterStripSmearing",
240 desc.
add<
double>(
"RPSharingSigmas", 5.0);
241 desc.
add<
double>(
"RPGeVPerElectron", 3.61e-09);
242 desc.
add<
double>(
"RPActiveEdgePosition", 0.034);
243 desc.
add<
bool>(
"RPDeadStripSimulationOn",
false);
244 desc.
add<std::vector<std::string>>(
"ROUList",
248 desc.
add<
bool>(
"RPNoNoise",
false);
249 desc.
add<
bool>(
"RPDigiSimHitRelationsPresistence",
false);
251 desc.
add<
int>(
"RPChargeDivisionsPerThickness", 5);
252 desc.
add<
double>(
"RPDeltaProductionCut", 0.120425);
253 desc.
add<
double>(
"RPBottomEdgePosition", 1.5);
254 desc.
add<
double>(
"RPBottomEdgeSmearing", 0.011);
255 desc.
add<
double>(
"RPTopEdgeSmearing", 0.011);
257 desc.
add<
double>(
"RPInterStripCoupling",
259 desc.
add<
double>(
"RPDeadStripProbability", 0.001);
260 desc.
add<
int>(
"RPChargeDivisionsPerStrip", 15);
261 descriptions.
add(
"RPSiDetDigitizer", desc);
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
std::map< unsigned int, std::vector< PSimHit > > simhit_map
det_id_type detId() const
edm::DetSet< TotemRPDigi > convertRPStripDetSet(const edm::DetSet< TotemRPDigi > &)
EventSetup record for TOTEM readout-related information.
simhit_map::iterator simhit_map_iterator
bool exists(std::string const ¶meterName) const
checks if a parameter exists
std::vector< std::vector< std::pair< int, double > > > DigiPrimaryMapType
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
#define DEFINE_FWK_MODULE(type)
~RPDigiProducer() override
std::map< RPDetId, std::unique_ptr< RPDetDigitizer > > theAlgoMap
bool simulateDeadChannels
RPDigiProducer(const edm::ParameterSet &)
edm::EDGetTokenT< CrossingFrame< PSimHit > > tokenCrossingFrameTotemRP
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
std::vector< std::string > RP_hit_containers_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
T const * product() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void produce(edm::Event &, const edm::EventSetup &) override
DeadChannelsManager deadChannelsManager
StreamID streamID() const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void beginRun(const edm::Run &, const edm::EventSetup &) override
CLHEP::HepRandomEngine * rndEngine_