CMS 3D CMS Logo

ZdcHitReconstructor_Run3.cc
Go to the documentation of this file.
14 
15 #include <iostream>
16 
17 #include <Eigen/Dense>
18 
19 #include <vector>
20 namespace zdchelper {
22  for (auto it = digi.begin(); it != digi.end(); it++) {
24  if (sample.adc() >= maxValue) {
26  break;
27  }
28  }
29  }
30 
31 } // namespace zdchelper
32 
33 /* Zdc Hit reconstructor allows for CaloRecHits with status words */
35 
36  : reco_(conf.getParameter<int>("recoMethod")),
37  saturationFlagSetter_(nullptr),
38  det_(DetId::Hcal),
39  correctionMethodEM_(conf.getParameter<int>("correctionMethodEM")),
40  correctionMethodHAD_(conf.getParameter<int>("correctionMethodHAD")),
41  correctionMethodRPD_(conf.getParameter<int>("correctionMethodRPD")),
42  ootpuRatioEM_(conf.getParameter<double>("ootpuRatioEM")),
43  ootpuRatioHAD_(conf.getParameter<double>("ootpuRatioHAD")),
44  ootpuRatioRPD_(conf.getParameter<double>("ootpuRatioRPD")),
45  ootpuFracEM_(conf.getParameter<double>("ootpuFracEM")),
46  ootpuFracHAD_(conf.getParameter<double>("ootpuFracHAD")),
47  ootpuFracRPD_(conf.getParameter<double>("ootpuFracRPD")),
48  chargeRatiosEM_(conf.getParameter<std::vector<double>>("chargeRatiosEM")),
49  chargeRatiosHAD_(conf.getParameter<std::vector<double>>("chargeRatiosHAD")),
50  chargeRatiosRPD_(conf.getParameter<std::vector<double>>("chargeRatiosRPD")),
51  bxTs_(conf.getParameter<std::vector<unsigned int>>("bxTs")),
52  nTs_(conf.getParameter<int>("nTs")),
53  forceSOI_(conf.getParameter<bool>("forceSOI")),
54  signalSOI_(conf.getParameter<std::vector<unsigned int>>("signalSOI")),
55  noiseSOI_(conf.getParameter<std::vector<unsigned int>>("noiseSOI")),
56  setSaturationFlags_(conf.getParameter<bool>("setSaturationFlags")),
57  dropZSmarkedPassed_(conf.getParameter<bool>("dropZSmarkedPassed")),
58  skipRPD_(conf.getParameter<bool>("skipRPD")) {
59  tok_input_QIE10 = consumes<QIE10DigiCollection>(conf.getParameter<edm::InputTag>("digiLabelQIE10ZDC"));
60 
61  std::string subd = conf.getParameter<std::string>("Subdetector");
62 
63  if (setSaturationFlags_) {
64  const edm::ParameterSet& pssat = conf.getParameter<edm::ParameterSet>("saturationParameters");
65  maxADCvalue_ = pssat.getParameter<int>("maxADCvalue");
66  }
67  if (!strcasecmp(subd.c_str(), "ZDC")) {
68  det_ = DetId::Calo;
70  produces<ZDCRecHitCollection>();
71  } else if (!strcasecmp(subd.c_str(), "CALIB")) {
74  produces<HcalCalibRecHitCollection>();
75  } else {
76  std::cout << "ZdcHitReconstructor_Run3 is not associated with a specific subdetector!" << std::endl;
77  }
87  // ES tokens
88  htopoToken_ = esConsumes<HcalTopology, HcalRecNumberingRecord, edm::Transition::BeginRun>();
89  paramsToken_ = esConsumes<HcalLongRecoParams, HcalLongRecoParamsRcd, edm::Transition::BeginRun>();
90  conditionsToken_ = esConsumes<HcalDbService, HcalDbRecord>();
91  qualToken_ = esConsumes<HcalChannelQuality, HcalChannelQualityRcd>(edm::ESInputTag("", "withTopo"));
92  sevToken_ = esConsumes<HcalSeverityLevelComputer, HcalSeverityLevelComputerRcd>();
93 }
94 
96 
98  const HcalTopology& htopo = es.getData(htopoToken_);
100  longRecoParams_ = std::make_unique<HcalLongRecoParams>(p);
101  longRecoParams_->setTopo(&htopo);
102 }
103 
105 
107  // get conditions
109  const HcalChannelQuality* myqual = &eventSetup.getData(qualToken_);
110  const HcalSeverityLevelComputer* mySeverity = &eventSetup.getData(sevToken_);
111 
112  // define vectors to pass noiseTS and signalTS
113  std::vector<unsigned int> mySignalTS;
114  std::vector<unsigned int> myNoiseTS;
115 
118  e.getByToken(tok_input_QIE10, digi);
119 
120  // create empty output
121  auto rec = std::make_unique<ZDCRecHitCollection>();
122  rec->reserve(digi->size());
123 
124  // testing QEI10 conditions
125  for (auto it = digi->begin(); it != digi->end(); it++) {
126  QIE10DataFrame QIE10_i = static_cast<QIE10DataFrame>(*it);
127  HcalZDCDetId cell = QIE10_i.id();
128  bool isRPD = cell.section() == 4;
129  if (isRPD && skipRPD_)
130  continue;
131  if (cell.section() == 1 && cell.channel() > 5)
132  continue; // ignore extra EM channels
133 
134  DetId detcell = (DetId)cell;
135 
136  // check on cells to be ignored and dropped: (rof,20.Feb.09)
137  const HcalChannelStatus* mydigistatus = myqual->getValues(detcell.rawId());
138  if (mySeverity->dropChannel(mydigistatus->getValue()))
139  continue;
141  if (QIE10_i.zsMarkAndPass())
142  continue;
143 
144  const HcalCalibrations& calibrations = conditions->getHcalCalibrations(cell);
145  const HcalQIECoder* channelCoder = conditions->getHcalCoder(cell);
146  const HcalQIEShape* shape = conditions->getHcalShape(channelCoder);
147  HcalCoderDb coder(*channelCoder, *shape);
148 
149  // pass the effective pedestals to rec hit since both ped value and width used in subtraction of pedestals
150  const HcalPedestal* effPeds = conditions->getEffectivePedestal(cell);
151 
152  if (forceSOI_)
153  rec->push_back(reco_.reconstruct(QIE10_i, noiseSOI_, signalSOI_, coder, calibrations, *effPeds));
154 
155  else {
156  const HcalLongRecoParam* myParams = longRecoParams_->getValues(detcell);
157  mySignalTS.clear();
158  myNoiseTS.clear();
159  mySignalTS = myParams->signalTS();
160  myNoiseTS = myParams->noiseTS();
161 
162  rec->push_back(reco_.reconstruct(QIE10_i, myNoiseTS, mySignalTS, coder, calibrations, *effPeds));
163  }
164  // saturationFlagSetter_ doesn't work with QIE10
165  // created new function zdchelper::setZDCSaturation to work with QIE10
166  (rec->back()).setFlags(0);
168  zdchelper::setZDCSaturation(rec->back(), QIE10_i, maxADCvalue_);
169  }
170  // return result
171  e.put(std::move(rec));
172  } // else if (det_==DetId::Calo...)
173 
174 } // void HcalHitReconstructor::produce(...)
175 
177  // zdcreco
179  desc.add<edm::InputTag>("digiLabelQIE10ZDC", edm::InputTag("hcalDigis", "ZDC"));
180  desc.add<std::string>("Subdetector", "ZDC");
181  desc.add<bool>("dropZSmarkedPassed", true);
182  desc.add<bool>("skipRPD", true);
183  desc.add<int>("recoMethod", 1);
184  desc.add<int>("correctionMethodEM", 1);
185  desc.add<int>("correctionMethodHAD", 1);
186  desc.add<int>("correctionMethodRPD", 0);
187  desc.add<double>("ootpuRatioEM", 3.0);
188  desc.add<double>("ootpuRatioHAD", 3.0);
189  desc.add<double>("ootpuRatioRPD", -1.0);
190  desc.add<double>("ootpuFracEM", 1.0);
191  desc.add<double>("ootpuFracHAD", 1.0);
192  desc.add<double>("ootpuFracRPD", 0.0);
193  desc.add<std::vector<double>>("chargeRatiosEM",
194  {
195  1.0,
196  0.23157,
197  0.10477,
198  0.06312,
199  });
200  desc.add<std::vector<double>>("chargeRatiosHAD",
201  {
202  1.0,
203  0.23157,
204  0.10477,
205  0.06312,
206  });
207  desc.add<std::vector<double>>("chargeRatiosRPD",
208  {
209  1.0,
210  0.23157,
211  0.10477,
212  0.06312,
213  });
214  desc.add<std::vector<unsigned int>>("bxTs",
215  {
216  0,
217  2,
218  4,
219  });
220  desc.add<int>("nTs", 6);
221  desc.add<bool>("forceSOI", false);
222  desc.add<std::vector<unsigned int>>("signalSOI",
223  {
224  2,
225  });
226  desc.add<std::vector<unsigned int>>("noiseSOI",
227  {
228  1,
229  });
230  desc.add<bool>("setSaturationFlags", false);
231  {
233  psd0.add<int>("maxADCvalue", 255);
234  desc.add<edm::ParameterSetDescription>("saturationParameters", psd0);
235  }
236  descriptions.add("zdcrecoRun3", desc);
237  // or use the following to generate the label from the module's C++ type
238  //descriptions.addWithDefaultLabel(desc);
239 }
240 
241 //define this as a plug-in
void setZDCSaturation(ZDCRecHit rh, QIE10DataFrame &digi, int maxValue)
edm::ESGetToken< HcalLongRecoParams, HcalLongRecoParamsRcd > paramsToken_
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
std::vector< unsigned int > noiseSOI_
constexpr edm::DataFrame::id_type id() const
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
ZDCRecHit reconstruct(const QIE10DataFrame &digi, const std::vector< unsigned int > &myNoiseTS, const std::vector< unsigned int > &mySignalTS, const HcalCoder &coder, const HcalCalibrations &calibs, const HcalPedestal &effPeds) const
constexpr bool zsMarkAndPass() const
edm::ESGetToken< HcalChannelQuality, HcalChannelQualityRcd > qualToken_
constexpr edm::DataFrame::iterator end()
std::vector< double > chargeRatiosEM_
edm::ESGetToken< HcalDbService, HcalDbRecord > conditionsToken_
std::vector< unsigned int > signalSOI_
constexpr edm::DataFrame::iterator begin()
iterators
void produce(edm::Event &e, const edm::EventSetup &c) final
constexpr void setFlagField(uint32_t value, int base, int width=1)
Definition: CaloRecHit.h:36
const Item * getValues(DetId fId, bool throwOnFail=true) const
std::vector< unsigned int > bxTs_
std::unique_ptr< HcalLongRecoParams > longRecoParams_
void beginRun(edm::Run const &r, edm::EventSetup const &es) final
void initRatioSubtraction(const float ratio, const float frac, const int ZdcSection)
void endRun(edm::Run const &r, edm::EventSetup const &es) final
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::vector< double > chargeRatiosHAD_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
uint32_t getValue() const
edm::ESGetToken< HcalSeverityLevelComputer, HcalSeverityLevelComputerRcd > sevToken_
const_iterator end() const
std::vector< double > chargeRatiosRPD_
HcalOtherSubdetector subdetOther_
Definition: DetId.h:17
const_iterator begin() const
The iterator returned can not safely be used across threads.
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > htopoToken_
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< unsigned int > signalTS() const
constexpr Section section() const
get the section
Definition: HcalZDCDetId.h:92
ZdcHitReconstructor_Run3(const edm::ParameterSet &ps)
void initTemplateFit(const std::vector< unsigned int > &bxTs, const std::vector< double > &chargeRatios, const int nTs, const int ZdcSection)
static constexpr int32_t SubdetectorId
Definition: HcalZDCDetId.h:35
constexpr int32_t channel() const
get the channel
Definition: HcalZDCDetId.h:112
HcalADCSaturationFlag * saturationFlagSetter_
std::vector< unsigned int > noiseTS() const
void initCorrectionMethod(const int method, const int ZdcSection)
def move(src, dest)
Definition: eostools.py:511
edm::EDGetTokenT< QIE10DigiCollection > tok_input_QIE10
Definition: Run.h:45
bool dropChannel(const uint32_t &mystatus) const