CMS 3D CMS Logo

HcalTBDigiProducer.cc
Go to the documentation of this file.
8 
16 
18 
20  edm::ProducesCollector producesCollector,
22  : theParameterMap(new HcalTBSimParameterMap(ps)),
23  paraMap(new HcalSimParameterMap(ps)),
24  theHcalShape(new HcalShape()),
25  theHcalIntegratedShape(new CaloShapeIntegrator(theHcalShape)),
26  theHBHEResponse(new CaloHitResponse(theParameterMap, theHcalIntegratedShape)),
27  theHOResponse(new CaloHitResponse(theParameterMap, theHcalIntegratedShape)),
28  theAmplifier(nullptr),
29  theCoderFactory(nullptr),
30  theElectronicsSim(nullptr),
31  theTimeSlewSim(nullptr),
32  theHBHEDigitizer(nullptr),
33  theHODigitizer(nullptr),
34  conditionsToken_(iC.esConsumes()),
35  hcalTimeSlew_delay_token_(iC.esConsumes(edm::ESInputTag("", "HBHE"))),
36  theHBHEHits(),
37  theHOHits(),
38  thisPhaseShift(0) {
39  std::string const instance("simHcalDigis");
40  producesCollector.produces<HBHEDigiCollection>(instance);
41  producesCollector.produces<HODigiCollection>(instance);
42  iC.consumes<std::vector<PCaloHit>>(edm::InputTag("g4SimHits", "HcalHits"));
43 
44  DetId detId(DetId::Hcal, 1);
47 
50 
51  bool doNoise = ps.getParameter<bool>("doNoise");
52  bool dummy1 = false;
53  bool dummy2 = false; // extra arguments for premixing
54  theAmplifier = new HcalAmplifier(theParameterMap, doNoise, dummy1, dummy2);
57 
58  double minFCToDelay = ps.getParameter<double>("minFCToDelay");
59  bool doTimeSlew = ps.getParameter<bool>("doTimeSlew");
60 
61  hcalTimeSlew_delay_ = nullptr;
62  if (doTimeSlew) {
63  // no time slewing for HF
66  }
67 
70 
71  tunePhaseShift = ps.getUntrackedParameter<double>("tunePhaseShiftTB", 1.);
72  ecalTBInfoLabel = ps.getUntrackedParameter<std::string>("EcalTBInfoLabel", "SimEcalTBG4Object");
73  edm::LogInfo("HcalSim") << "HcalTBDigiProducer initialized with doNoise = " << doNoise
74  << ", doTimeSlew = " << doTimeSlew << " and doPhaseShift = " << doPhaseShift
75  << " tunePhasShift = " << tunePhaseShift;
76 
77  if (doPhaseShift) {
79  }
80 }
81 
83  if (theHBHEDigitizer)
84  delete theHBHEDigitizer;
85  if (theHODigitizer)
86  delete theHODigitizer;
87  if (theParameterMap)
88  delete theParameterMap;
89  if (theHcalShape)
90  delete theHcalShape;
93  if (theHBHEResponse)
94  delete theHBHEResponse;
95  if (theHOResponse)
96  delete theHOResponse;
98  delete theElectronicsSim;
99  if (theAmplifier)
100  delete theAmplifier;
101  if (theCoderFactory)
102  delete theCoderFactory;
103  if (theTimeSlewSim)
104  delete theTimeSlewSim;
105 }
106 
108  // get the appropriate gains, noises, & widths for this event
109  const HcalDbService *conditions = &eventSetup.getData(conditionsToken_);
112 
113  // get the correct geometry
114  checkGeometry(eventSetup);
115 
116  // Cache random number engine
118  randomEngine_ = &rng->getEngine(e.streamID());
119 
120  theHBHEHits.clear();
121  theHOHits.clear();
122  if (doPhaseShift) {
123  edm::Handle<PEcalTBInfo> theEcalTBInfo;
124  e.getByLabel(ecalTBInfoLabel, theEcalTBInfo);
125  thisPhaseShift = theEcalTBInfo->phaseShift();
126 
127  DetId detIdHB(DetId::Hcal, 1);
128  setPhaseShift(detIdHB);
129  DetId detIdHO(DetId::Hcal, 3);
130  setPhaseShift(detIdHO);
131  }
132 
134 
136 
139 }
140 
141 void HcalTBDigiProducer::accumulateCaloHits(edm::Handle<std::vector<PCaloHit>> const &hcalHandle, int bunchCrossing) {
142  LogDebug("HcalSim") << "HcalTBDigiProducer::accumulate trying to get SimHit";
143 
144  if (hcalHandle.isValid()) {
145  std::vector<PCaloHit> hits = *hcalHandle.product();
146  LogDebug("HcalSim") << "HcalTBDigiProducer::accumulate Hits corrected";
147  theHBHEDigitizer->add(hits, bunchCrossing, randomEngine_);
148  theHODigitizer->add(hits, bunchCrossing, randomEngine_);
149  }
150 }
151 
153  // Step A: Get Inputs, and accumulate digis
154 
155  edm::InputTag hcalTag("g4SimHits", "HcalHits");
157  e.getByLabel(hcalTag, hcalHandle);
158 
159  accumulateCaloHits(hcalHandle, 0);
160 }
161 
163  edm::EventSetup const &,
164  edm::StreamID const &streamID) {
165  // Step A: Get Inputs, and accumulate digis
166 
167  edm::InputTag hcalTag("g4SimHits", "HcalHits");
169  e.getByLabel(hcalTag, hcalHandle);
170 
171  accumulateCaloHits(hcalHandle, e.bunchCrossing());
172 }
173 
175  // Step B: Create empty output
176  std::unique_ptr<HBHEDigiCollection> hbheResult(new HBHEDigiCollection());
177  std::unique_ptr<HODigiCollection> hoResult(new HODigiCollection());
178  LogDebug("HcalSim") << "HcalTBDigiProducer::produce Empty collection created";
179  // Step C: Invoke the algorithm, getting back outputs.
180  theHBHEDigitizer->run(*hbheResult, randomEngine_);
181  edm::LogInfo("HcalSim") << "HcalTBDigiProducer: HBHE digis : " << hbheResult->size();
182  theHODigitizer->run(*hoResult, randomEngine_);
183  edm::LogInfo("HcalSim") << "HcalTBDigiProducer: HO digis : " << hoResult->size();
184 
185  // Step D: Put outputs into event
186  std::string const instance("simHcalDigis");
187  e.put(std::move(hbheResult), instance);
188  e.put(std::move(hoResult), instance);
189 
190  randomEngine_ = nullptr; // to prevent access outside event
191 }
192 
194  for (edm::PCaloHitContainer::const_iterator hitItr = hits.begin(); hitItr != hits.end(); ++hitItr) {
195  HcalSubdetector subdet = HcalDetId(hitItr->id()).subdet();
196  if (subdet == HcalBarrel || subdet == HcalEndcap) {
197  theHBHEHits.push_back(*hitItr);
198  } else if (subdet == HcalOuter) {
199  theHOHits.push_back(*hitItr);
200  } else {
201  edm::LogError("HcalSim") << "Bad HcalHit subdetector " << subdet;
202  }
203  }
204 }
205 
207  // see if we need to update
208  if (geometryWatcher_.check(eventSetup)) {
209  theGeometry = &eventSetup.getData(geometryToken_);
210  updateGeometry();
211  }
212 }
213 
217 
218  // Get cells for HB and HE
219  hbheCells.clear();
221  std::vector<DetId> heCells = theGeometry->getValidDetIds(DetId::Hcal, HcalEndcap);
222  // combine HB & HE
223  hbheCells.insert(hbheCells.end(), heCells.begin(), heCells.end());
224 
225  // Get cells for HO
226  hoCells.clear();
228 
229  edm::LogInfo("HcalSim") << "HcalTBDigiProducer update Geometry with " << hbheCells.size() << " cells in HB/HE and "
230  << hoCells.size() << " cells in HO";
231 
233  LogDebug("HcalSim") << "HcalTBDigiProducer: Set DetID's for HB/HE";
235  LogDebug("HcalSim") << "HcalTBDigiProducer: Set DetID's for HO";
236 }
237 
240  if (!parameters.syncPhase()) {
241  int myDet = detId.subdetId();
242  double passPhaseShift = thisPhaseShift + tunePhaseShift;
243  if (myDet <= 2) {
244  theHBHEResponse->setPhaseShift(passPhaseShift);
245  } else {
246  theHOResponse->setPhaseShift(passPhaseShift);
247  }
248  }
249 }
CaloTDigitizer::add
void add(const std::vector< PCaloHit > &hits, int bunchCrossing, CLHEP::HepRandomEngine *engine)
Definition: CaloTDigitizer.h:75
edm::ESWatcher::check
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
HcalTBDigiProducer::hoCells
std::vector< DetId > hoCells
Definition: HcalTBDigiProducer.h:90
HcalTBDigiProducer::theElectronicsSim
HcalElectronicsSim * theElectronicsSim
Definition: HcalTBDigiProducer.h:74
PEcalTBInfo::phaseShift
double phaseShift() const
Definition: PEcalTBInfo.h:37
edm::StreamID
Definition: StreamID.h:30
CaloShapeIntegrator.h
edm::RandomNumberGenerator::getEngine
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
BeamSpotPI::parameters
parameters
Definition: BeamSpotPayloadInspectorHelper.h:30
Handle.h
HcalTBDigiProducer::theHBHEHits
std::vector< PCaloHit > theHBHEHits
Definition: HcalTBDigiProducer.h:92
HcalTBDigiProducer::hcalTimeSlew_delay_token_
edm::ESGetToken< HcalTimeSlew, HcalTimeSlewRecord > hcalTimeSlew_delay_token_
Definition: HcalTBDigiProducer.h:85
MessageLogger.h
HcalTBSimParameterMap
Definition: HcalTBSimParameterMap.h:8
ecalSimParameterMap_cff.syncPhase
syncPhase
Definition: ecalSimParameterMap_cff.py:10
HcalTBDigiProducer::doPhaseShift
bool doPhaseShift
Definition: HcalTBDigiProducer.h:97
HcalTBDigiProducer::theTimeSlewSim
HcalTimeSlewSim * theTimeSlewSim
Definition: HcalTBDigiProducer.h:79
HcalTBDigiProducer::theParameterMap
HcalTBSimParameterMap * theParameterMap
Definition: HcalTBDigiProducer.h:64
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
ESInputTag
HcalTBDigiProducer::theHOHitFilter
HOHitFilter theHOHitFilter
Definition: HcalTBDigiProducer.h:77
HcalTBDigiProducer::theHBHEResponse
CaloHitResponse * theHBHEResponse
Definition: HcalTBDigiProducer.h:69
edm
HLT enums.
Definition: AlignableModifier.h:19
RandomNumberGenerator.h
HcalTBDigiProducer::hcalTimeSlew_delay_
const HcalTimeSlew * hcalTimeSlew_delay_
Definition: HcalTBDigiProducer.h:57
HcalTBDigiProducer::theHOHits
std::vector< PCaloHit > theHOHits
Definition: HcalTBDigiProducer.h:92
DetId::Hcal
Definition: DetId.h:28
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89301
HcalTBDigiProducer::theGeometry
const CaloGeometry * theGeometry
Definition: HcalTBDigiProducer.h:88
HcalTimeSlew.h
CaloTDigitizer::initializeHits
void initializeHits()
Definition: CaloTDigitizer.h:83
edm::SortedCollection
Definition: SortedCollection.h:49
CaloTDigitizer::setDetIds
void setDetIds(const std::vector< DetId > &detIds)
Definition: CaloTDigitizer.h:67
PileUpEventPrincipal
Definition: PileUpEventPrincipal.h:19
HcalTBDigiProducer::finalizeEvent
void finalizeEvent(edm::Event &e, edm::EventSetup const &c) override
Definition: HcalTBDigiProducer.cc:174
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
HcalTBDigiProducer::tunePhaseShift
double tunePhaseShift
Definition: HcalTBDigiProducer.h:98
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
HcalBarrel
Definition: HcalAssistant.h:33
HODigiCollection
edm::SortedCollection< HODataFrame > HODigiCollection
Definition: HcalDigiCollections.h:21
CaloShapeIntegrator
Definition: CaloShapeIntegrator.h:11
edm::Handle
Definition: AssociativeIterator.h:50
HcalTBDigiProducer::HcalTBDigiProducer
HcalTBDigiProducer(const edm::ParameterSet &ps, edm::ProducesCollector, edm::ConsumesCollector &iC)
Definition: HcalTBDigiProducer.cc:19
HcalCoderFactory
Definition: HcalCoderFactory.h:8
DigiDM_cff.doNoise
doNoise
Definition: DigiDM_cff.py:32
DetId
Definition: DetId.h:17
HcalCoderFactory::setDbService
void setDbService(const HcalDbService *service)
Definition: HcalCoderFactory.h:14
HcalTBDigiProducer::thisPhaseShift
double thisPhaseShift
Definition: HcalTBDigiProducer.h:95
Service.h
HcalDigiCollections.h
CaloSimParameters
Main class for Parameters in different subdetectors.
Definition: CaloSimParameters.h:14
PileUpEventPrincipal.h
HcalSimParameterMap
Definition: HcalSimParameterMap.h:10
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:55
HcalOuter
Definition: HcalAssistant.h:35
CaloHitResponse::setPhaseShift
void setPhaseShift(const double &thePhaseShift)
setting the phase shift for asynchronous trigger (e.g. test beams)
Definition: CaloHitResponse.h:108
HcalTBDigiProducer::HODigitizer
CaloTDigitizer< HODigitizerTraits > HODigitizer
Definition: HcalTBDigiProducer.h:62
HcalTBDigiProducer::checkGeometry
void checkGeometry(const edm::EventSetup &eventSetup)
Definition: HcalTBDigiProducer.cc:206
hcalUnsuppressedDigis_cfi.doTimeSlew
doTimeSlew
Definition: hcalUnsuppressedDigis_cfi.py:20
HcalTBDigiProducer::HBHEDigitizer
CaloTDigitizer< HBHEDigitizerTraits > HBHEDigitizer
Definition: HcalTBDigiProducer.h:61
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
HcalTBDigiProducer::theHOResponse
CaloHitResponse * theHOResponse
Definition: HcalTBDigiProducer.h:70
HcalAmplifier::setTimeSlew
void setTimeSlew(const HcalTimeSlew *timeSlew)
Definition: HcalAmplifier.h:38
PEcalTBInfo.h
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
CaloHitResponse::setHitFilter
void setHitFilter(const CaloVHitFilter *filter)
Definition: CaloHitResponse.h:70
PEcalTBInfo
Definition: PEcalTBInfo.h:18
HcalTBDigiProducer::theHcalIntegratedShape
CaloVShape * theHcalIntegratedShape
Definition: HcalTBDigiProducer.h:67
HcalShape
shaper for Hcal (not for HF)
Definition: HcalShape.h:15
CaloHitResponse
Creates electronics signals from hits.
Definition: CaloHitResponse.h:33
HcalDetId
Definition: HcalDetId.h:12
edm::Service< edm::RandomNumberGenerator >
HcalTBDigiProducer::theCoderFactory
HcalCoderFactory * theCoderFactory
Definition: HcalTBDigiProducer.h:73
edm::ProducesCollector::produces
ProductRegistryHelper::BranchAliasSetterT< ProductType > produces()
Definition: ProducesCollector.h:52
edm::EventSetup
Definition: EventSetup.h:58
HcalTBDigiProducer::theHODigitizer
HODigitizer * theHODigitizer
Definition: HcalTBDigiProducer.h:82
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
CaloTDigitizer.h
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
instance
static PFTauRenderPlugin instance
Definition: PFTauRenderPlugin.cc:70
HcalTBDigiProducer.h
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
HcalSubdetector
HcalSubdetector
Definition: HcalAssistant.h:31
HcalTBDigiProducer::updateGeometry
void updateGeometry()
Definition: HcalTBDigiProducer.cc:214
HcalAmplifier::setTimeSlewSim
void setTimeSlewSim(HcalTimeSlewSim *timeSlewSim)
Definition: HcalAmplifier.h:35
HcalTBDigiProducer::hbheCells
std::vector< DetId > hbheCells
Definition: HcalTBDigiProducer.h:89
HcalDbService
Definition: HcalDbService.h:23
HcalTBDigiProducer::theHcalShape
CaloVShape * theHcalShape
Definition: HcalTBDigiProducer.h:66
HcalTBDigiProducer::~HcalTBDigiProducer
~HcalTBDigiProducer() override
Definition: HcalTBDigiProducer.cc:82
submitPVValidationJobs.conditions
list conditions
Definition: submitPVValidationJobs.py:674
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::ProducesCollector
Definition: ProducesCollector.h:43
CaloGeometry::getValidDetIds
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:75
HcalTBDigiProducer::accumulate
void accumulate(edm::Event const &e, edm::EventSetup const &c) override
Definition: HcalTBDigiProducer.cc:152
HcalEndcap
Definition: HcalAssistant.h:34
HcalTBDigiProducer::geometryWatcher_
edm::ESWatcher< CaloGeometryRecord > geometryWatcher_
Definition: HcalTBDigiProducer.h:87
HcalAmplifier
Definition: HcalAmplifier.h:20
CaloGeometry.h
HcalTimeSlewSim
Definition: HcalTimeSlewSim.h:19
HcalElectronicsSim
Definition: HcalElectronicsSim.h:25
edm::PCaloHitContainer
std::vector< PCaloHit > PCaloHitContainer
Definition: PCaloHitContainer.h:8
HcalTBDigiProducer::setPhaseShift
void setPhaseShift(const DetId &detId)
Definition: HcalTBDigiProducer.cc:238
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
CaloTDigitizer::run
void run(MixCollection< PCaloHit > &, DigiCollection &)
turns hits into digis
Definition: CaloTDigitizer.h:86
HcalTBDigiProducer::sortHits
void sortHits(const edm::PCaloHitContainer &hits)
fills the vectors for each subdetector
Definition: HcalTBDigiProducer.cc:193
HcalDbService.h
HcalTBDigiProducer::conditionsToken_
edm::ESGetToken< HcalDbService, HcalDbRecord > conditionsToken_
Definition: HcalTBDigiProducer.h:84
HcalTBDigiProducer::geometryToken_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometryToken_
Definition: HcalTBDigiProducer.h:86
HcalTBSimParameterMap::simParameters
const CaloSimParameters & simParameters(const DetId &id) const override
Definition: HcalTBSimParameterMap.cc:53
ConsumesCollector.h
HcalCoderFactory::DB
Definition: HcalCoderFactory.h:10
hcalUnsuppressedDigis_cfi.minFCToDelay
minFCToDelay
Definition: hcalUnsuppressedDigis_cfi.py:29
HcalTBDigiProducer::accumulateCaloHits
void accumulateCaloHits(edm::Handle< std::vector< PCaloHit >> const &hits, int bunchCrossing)
Definition: HcalTBDigiProducer.cc:141
HBHEDigiCollection
edm::SortedCollection< HBHEDataFrame > HBHEDigiCollection
Definition: HcalDigiCollections.h:20
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::Event
Definition: Event.h:73
HcalTBDigiProducer::ecalTBInfoLabel
std::string ecalTBInfoLabel
Definition: HcalTBDigiProducer.h:94
StreamID.h
HcalTBDigiProducer::randomEngine_
CLHEP::HepRandomEngine * randomEngine_
Definition: HcalTBDigiProducer.h:100
HcalTBDigiProducer::theAmplifier
HcalAmplifier * theAmplifier
Definition: HcalTBDigiProducer.h:72
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
HcalTBDigiProducer::paraMap
HcalSimParameterMap * paraMap
Definition: HcalTBDigiProducer.h:65
CaloHitResponse::setGeometry
void setGeometry(const CaloGeometry *geometry)
geometry needed for time-of-flight
Definition: CaloHitResponse.h:49
HcalTBDigiProducer::initializeEvent
void initializeEvent(edm::Event const &e, edm::EventSetup const &c) override
Definition: HcalTBDigiProducer.cc:107
HcalTBDigiProducer::theHBHEHitFilter
HBHEHitFilter theHBHEHitFilter
Definition: HcalTBDigiProducer.h:76
HcalTBDigiProducer::theHBHEDigitizer
HBHEDigitizer * theHBHEDigitizer
Definition: HcalTBDigiProducer.h:81
HcalAmplifier::setDbService
void setDbService(const HcalDbService *service)
the Producer will probably update this every event
Definition: HcalAmplifier.cc:35
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37