CMS 3D CMS Logo

EcalTBDigiProducer.cc
Go to the documentation of this file.
1 
14 
16  edm::ProducerBase &mixMod,
18  : EcalDigiProducer(params, mixMod, iC) {
19  std::string const instance("simEcalUnsuppressedDigis");
20  m_EBdigiFinalTag = params.getParameter<std::string>("EBdigiFinalCollection");
21  m_EBdigiTempTag = params.getParameter<std::string>("EBdigiCollection");
22 
23  mixMod.produces<EBDigiCollection>(instance + m_EBdigiFinalTag); // after selective readout
25 
26  const bool syncPhase(params.getParameter<bool>("syncPhase"));
27 
28  // possible phase shift for asynchronous trigger (e.g. test-beam)
29 
31  m_thisPhaseShift = 1.;
32 
33  typedef std::vector<edm::ParameterSet> Parameters;
34  Parameters ranges = params.getParameter<Parameters>("tdcRanges");
35  for (Parameters::iterator itRanges = ranges.begin(); itRanges != ranges.end(); ++itRanges) {
37  aRange.runRanges.first = itRanges->getParameter<int>("startRun");
38  aRange.runRanges.second = itRanges->getParameter<int>("endRun");
39  aRange.tdcMin = itRanges->getParameter<std::vector<double>>("tdcMin");
40  aRange.tdcMax = itRanges->getParameter<std::vector<double>>("tdcMax");
41  m_tdcRanges.push_back(std::move(aRange));
42  }
43 
44  m_use2004OffsetConvention = params.getUntrackedParameter<bool>("use2004OffsetConvention", false);
45 
46  m_ecalTBInfoLabel = params.getUntrackedParameter<std::string>("EcalTBInfoLabel", "SimEcalTBG4Object");
47 
48  m_doReadout = params.getParameter<bool>("doReadout");
49 
50  m_theTBReadout = new EcalTBReadout(m_ecalTBInfoLabel);
51 
52  m_tunePhaseShift = params.getParameter<double>("tunePhaseShift");
53 
54  if (m_doPhaseShift) {
56  edm::InputTag(params.getUntrackedParameter<std::string>("EcalTBInfoLabel", "SimEcalTBG4Object")));
57  }
58 }
59 
61 
63  std::cout << "====****Entering EcalTBDigiProducer produce()" << std::endl;
65  eventSetup.get<CaloGeometryRecord>().get(hGeometry);
66  const std::vector<DetId> &theBarrelDets(hGeometry->getValidDetIds(DetId::Ecal, EcalBarrel));
67 
68  m_theTBReadout->setDetIds(theBarrelDets);
69 
70  m_TDCproduct.reset(new EcalTBTDCRawInfo(1));
71  if (m_doPhaseShift) {
72  edm::Handle<PEcalTBInfo> theEcalTBInfo;
73  event.getByLabel(m_ecalTBInfoLabel, theEcalTBInfo);
74  m_thisPhaseShift = theEcalTBInfo->phaseShift();
75 
76  DetId detId(DetId::Ecal, 1);
77  setPhaseShift(detId);
78 
79  fillTBTDCRawInfo(*m_TDCproduct); // fill the TDC info in the event
80  }
81  EcalDigiProducer::initializeEvent(event, eventSetup);
82 }
83 
85  m_ebDigis.reset(new EBDigiCollection);
86 
87  EcalDigiProducer::finalizeEvent(event, eventSetup);
88 
89  const EBDigiCollection *barrelResult(&*m_ebDigis);
90 
91  std::unique_ptr<EBDigiCollection> barrelReadout(new EBDigiCollection());
92  if (m_doReadout) {
93  m_theTBReadout->performReadout(event, m_theTTmap, *barrelResult, *barrelReadout);
94  } else {
95  *barrelReadout = *barrelResult;
96  }
97 
98  std::cout << "===**** EcalTBDigiProducer: number of barrel digis = " << barrelReadout->size() << std::endl;
99 
100  std::string const instance("simEcalUnsuppressedDigis");
101  event.put(std::move(barrelReadout), instance + m_EBdigiFinalTag);
102  event.put(std::move(m_TDCproduct), instance);
103 
104  m_ebDigis.reset(); // release memory
105  m_eeDigis.reset(); // release memory
106 }
107 
109  const CaloSimParameters &parameters(EcalDigiProducer::m_ParameterMap->simParameters(detId));
110 
111  if (!parameters.syncPhase()) {
112  const int myDet(detId.subdetId());
113 
114  LogDebug("EcalDigi") << "Setting the phase shift " << m_thisPhaseShift << " and the offset " << m_tunePhaseShift
115  << " for the subdetector " << myDet;
116 
117  if (myDet == 1) {
118  double passPhaseShift(m_thisPhaseShift + m_tunePhaseShift);
120  passPhaseShift = 1. - passPhaseShift;
121  EcalDigiProducer::m_EBResponse->setPhaseShift(passPhaseShift);
122  EcalDigiProducer::m_EEResponse->setPhaseShift(passPhaseShift);
123  }
124  }
125 }
126 
128  const unsigned int thisChannel(1);
129 
130  const unsigned int thisCount((unsigned int)(m_thisPhaseShift * (m_tdcRanges[0].tdcMax[0] - m_tdcRanges[0].tdcMin[0]) +
131  m_tdcRanges[0].tdcMin[0]));
132 
133  EcalTBTDCSample theTBTDCSample(thisChannel, thisCount);
134 
135  const unsigned int sampleIndex(0);
136  theTBTDCRawInfo.setSample(sampleIndex, theTBTDCSample);
137 
138  LogDebug("EcalDigi") << theTBTDCSample << "\n" << theTBTDCRawInfo;
139 }
140 
142  m_ebDigis.reset(new EBDigiCollection);
143  *m_ebDigis = *ebDigiPtr;
144 }
145 
147  std::cout << "===**** EcalTBDigiProducer: number of endcap digis = " << eeDigiPtr->size() << std::endl;
148 }
#define LogDebug(id)
BranchAliasSetterT< ProductType > produces()
declare what type of product will make and with which optional label
const EcalTrigTowerConstituentsMap m_theTTmap
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::unique_ptr< EEDigiCollection > m_eeDigis
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
static PFTauRenderPlugin instance
void cacheEEDigis(const EEDigiCollection *eeDigiPtr) const override
std::vector< EcalTBTDCRecInfoAlgo::EcalTBTDCRanges > m_tdcRanges
Main class for Parameters in different subdetectors.
void fillTBTDCRawInfo(EcalTBTDCRawInfo &theTBTDCRawInfo)
void initializeEvent(edm::Event const &e, edm::EventSetup const &c) override
std::unique_ptr< EBDigiCollection > m_ebDigis
vector< ParameterSet > Parameters
void setPhaseShift(const DetId &detId)
void cacheEBDigis(const EBDigiCollection *ebDigiPtr) const override
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
std::string m_EBdigiFinalTag
void performReadout(edm::Event &event, const EcalTrigTowerConstituentsMap &theTTmap, const EBDigiCollection &input, EBDigiCollection &output)
master function to be called once per event
void finalizeEvent(edm::Event &, edm::EventSetup const &) override
string ranges
Definition: diffTwoXMLs.py:79
void setDetIds(const std::vector< DetId > &detIds)
tell the readout which cells exist
Definition: EcalTBReadout.h:25
void initializeEvent(edm::Event const &, edm::EventSetup const &) override
Definition: DetId.h:18
std::unique_ptr< EEHitResponse > m_EEResponse
EcalTBReadout * m_theTBReadout
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
~EcalTBDigiProducer() override
double phaseShift() const
Definition: PEcalTBInfo.h:37
void setSample(unsigned int i, const EcalTBTDCSample &sam)
T get() const
Definition: EventSetup.h:71
std::string m_EBdigiTempTag
std::unique_ptr< EBHitResponse > m_EBResponse
std::unique_ptr< EcalTBTDCRawInfo > m_TDCproduct
void finalizeEvent(edm::Event &e, edm::EventSetup const &c) override
std::string m_ecalTBInfoLabel
def move(src, dest)
Definition: eostools.py:511
EcalTBDigiProducer(const edm::ParameterSet &params, edm::ProducerBase &mixMod, edm::ConsumesCollector &iC)
Definition: event.py:1
std::unique_ptr< const EcalSimParameterMap > m_ParameterMap
bool syncPhase() const