CMS 3D CMS Logo

QIE10Task.cc
Go to the documentation of this file.
1 
4 #include <map>
5 
6 using namespace hcaldqm;
7 using namespace hcaldqm::constants;
9  DQTask(ps)
10 {
11 
12  // tags
14  edm::InputTag("hcalDigis"));
16  edm::InputTag("hcalDigis"));
17  _tokQIE10 = consumes<QIE10DigiCollection>(_tagQIE10);
18  _tokHF = consumes<HFDigiCollection>(_tagHF);
19 
20  // cuts
21  _cut = ps.getUntrackedParameter<double>("cut", 50.0);
22  _ped = ps.getUntrackedParameter<int>("ped", 4);
23 }
25  edm::Run const& r, edm::EventSetup const& es)
26 {
27  if (_ptype==fLocal)
28  if (r.runAuxiliary().run()==1)
29  return;
30 
31  DQTask::bookHistograms(ib, r, es);
32 
33  // GET WHAT YOU NEED
35  es.get<HcalDbRecord>().get(dbs);
36  _emap = dbs->getHcalMapping();
37 
38  unsigned int nTS = _ptype==fLocal ? 10 : 6;
39 
40  // create a slot filter and initialize what you need
41  unsigned int itr=0;
42  for (auto& crate : constants::crateListHF) {
43  for(unsigned int slot=SLOT_uTCA_MIN; slot<=SLOT_uTCA_MAX; ++slot) {
44  std::vector<uint32_t> vhashSlot;
45  vhashSlot.push_back(HcalElectronicsId(crate, slot, FIBER_uTCA_MIN1, FIBERCH_MIN, false).rawId());
47 
61 
62  for (unsigned int j=0; j<nTS; j++) {
76 
77  }
78  ++itr;
79  }
80  }
81 
83  "ShapeCut",
86  _cLETDCvsADC.initialize(_name, "LETDCvsADC",
90  _cLETDCTimevsADC.initialize(_name, "LETDCTimevsADC",
94  _cLETDC.initialize(_name, "LETDC",
97  _cADC.initialize(_name, "ADC",
100 
101 
102 
103  //OCCUPANCY PER CRATE/SLOT
105  "Occupancy", hashfunctions::fCrate,
110  "Occupancy", hashfunctions::fCrateSlot,
114 
115  // OCCUPANCY IN DETECTOR COORDINATES
116  _cOccupancy_depth.initialize(_name, "Occupancy",
121 
122 
123  itr = 0;
124  for(auto& crate : constants::crateListHF) {
125  for(unsigned int slot=SLOT_uTCA_MIN; slot<=SLOT_uTCA_MAX; ++slot) {
126  char aux[100];
127  sprintf(aux, "/Crate%d_Slot%d", crate, slot);
128  _cShapeCut_EChannel[itr].book(ib, _emap, _filter_slot[itr], _subsystem, aux);
129  _cLETDCTime_EChannel[itr].book(ib, _emap, _filter_slot[itr], _subsystem, aux);
130  _cLETDCvsTS_EChannel[itr].book(ib, _emap, _filter_slot[itr], _subsystem, aux);
131  for (unsigned int i=0; i<nTS; i++) {
132  char aux2[100];
133  sprintf(aux2, "/Crate%d_Slot%d/TS%d", crate, slot, i);
134  _cLETDCvsADC_EChannel[i][itr].book(ib, _emap, _filter_slot[itr], _subsystem, aux);
135  _cLETDC_EChannel[i][itr].book(ib, _emap, _filter_slot[itr], _subsystem, aux);
136  _cADC_EChannel[i][itr].book(ib, _emap, _filter_slot[itr], _subsystem, aux);
137  }
138  ++itr;
139  }
140  }
141 
145  _cLETDC.book(ib, _subsystem);
146  _cADC.book(ib, _subsystem);
147 
151 
153 }
154 
156  edm::EventSetup const& es)
157 {
158 
159  // finish
160  DQTask::endLuminosityBlock(lb, es);
161 }
162 
163 /* virtual */ void QIE10Task::_process(edm::Event const& e,
164  edm::EventSetup const&)
165 {
168  if (!e.getByToken(_tokQIE10, cqie10))
169  return;
170  if (!e.getByToken(_tokHF, chf))
171  _logger.dqmthrow("Collection HFDigiCollection isn't available"
172  + _tagHF.label() + " " + _tagHF.instance());
173 
174  std::map<uint32_t, QIE10DataFrame> mqie10;
175  for (uint32_t i=0; i<cqie10->size(); i++)
176  {
177  QIE10DataFrame frame = static_cast<QIE10DataFrame>((*cqie10)[i]);
178  HcalDetId did = frame.detid();
180  if (did.subdet() != HcalForward) {
181  continue;
182  }
183 
184  // Compute index for EChannel plots
185  int fakecrate =-1;
186  if (eid.crateId() == 22) {
187  fakecrate = 0;
188  } else if (eid.crateId() == 29) {
189  fakecrate = 1;
190  } else if (eid.crateId() == 32) {
191  fakecrate = 2;
192  } else {
193  // Unknown crate, skip digi
194  continue;
195  }
196  int index = fakecrate*12+eid.slot()-1;
197 
198  // compute the signal, ped subracted
199  CaloSamples digi_fC = hcaldqm::utilities::loadADC2fCDB<QIE10DataFrame>(_dbService, did, frame);
200  double sumQ = hcaldqm::utilities::sumQDB<QIE10DataFrame>(_dbService, digi_fC, did, frame, 0, frame.samples()-1);
201  // double sumQ = hcaldqm::utilities::sumQ_v10<QIE10DataFrame>(frame, constants::adc2fC[_ped], 0, frame.samples()-1);
202 
203  _cOccupancy_Crate.fill(eid);
205  _cOccupancy_depth.fill(did);
206 
207  // iterate thru all TS and fill
208  for (int j=0; j<frame.samples(); j++)
209  {
210  // shapes are after the cut
211  if (sumQ>_cut)
212  {
213  double q = hcaldqm::utilities::adc2fCDBMinusPedestal<QIE10DataFrame>(_dbService, digi_fC, did, frame, j);
214  _cShapeCut_EChannel[index].fill(eid, j, q);
215  _cShapeCut.fill(j, q);
216  }
217  // w/o a cut
218  _cLETDCvsADC_EChannel[j][index].fill(eid, frame[j].adc(),
219  frame[j].le_tdc());
220  _cLETDCvsADC.fill(frame[j].adc(), frame[j].le_tdc());
221  _cLETDC_EChannel[j][index].fill(eid, frame[j].le_tdc());
222  _cLETDC.fill(frame[j].le_tdc());
223  _cADC_EChannel[j][index].fill(eid, frame[j].adc());
224  _cADC.fill(frame[j].adc());
225  _cLETDCvsTS_EChannel[index].fill(eid, j, frame[j].le_tdc());
226 
227  // TDC conversion to time
228  if (frame[j].le_tdc() < 50) {
229  // Each TDC count is 0.5 ns.
230  // tdc == 62 or 63 means value was below or above threshold for whole time slice.
231  double time = j*25. + (frame[j].le_tdc() / 2.);
232  _cLETDCTime_EChannel[index].fill(eid, time);
233  _cLETDCTimevsADC.fill(frame[j].adc(), time);
234  }
235  }
236 
237  mqie10[did.rawId()] = frame;
238  }
239 }
240 
242 {
243 }
244 
int adc(sample_type sample)
get the ADC sample (12 bits)
int samples() const
total number of samples in the digi
void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *, int debug=0) override
edm::InputTag _tagHF
Definition: QIE10Task.h:39
T getUntrackedParameter(std::string const &, T const &) const
hcaldqm::filter::HashFilter _filter_slot[36]
Definition: QIE10Task.h:48
edm::EDGetTokenT< QIE10DigiCollection > _tokQIE10
Definition: QIE10Task.h:40
hcaldqm::electronicsmap::ElectronicsMap _ehashmap
Definition: QIE10Task.h:52
virtual void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *qy=new quantity::ValueQuantity(quantity::fN), int debug=0)
Definition: Container1D.cc:41
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:142
virtual void book(DQMStore::IBooker &, std::string subsystem="Hcal", std::string aux="")
hcaldqm::ContainerSingleProf1D _cShapeCut
Definition: QIE10Task.h:63
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
void initialize(HcalElectronicsMap const *, ElectronicsMapType etype=fHcalElectronicsMap)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
hcaldqm::ContainerSingle1D _cLETDC
Definition: QIE10Task.h:66
UpdateFreq
Definition: DQTask.h:17
edm::EDGetTokenT< HFDigiCollection > _tokHF
Definition: QIE10Task.h:41
virtual void initialize(std::string const &folder, quantity::Quantity *, quantity::Quantity *, quantity::Quantity *qz=new quantity::ValueQuantity(quantity::fN), int debug=0)
void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="") override
hcaldqm::Container2D _cOccupancy_CrateSlot
Definition: QIE10Task.h:71
hcaldqm::ContainerProf1D _cShapeCut_EChannel[36]
Definition: QIE10Task.h:55
hcaldqm::ContainerSingle2D _cLETDCvsADC
Definition: QIE10Task.h:65
edm::InputTag _tagQIE10
Definition: QIE10Task.h:38
hcaldqm::Container1D _cADC_EChannel[10][36]
Definition: QIE10Task.h:59
void initialize(std::string const &folder, quantity::Quantity *, quantity::Quantity *qy=new quantity::ValueQuantity(quantity::fN), int debug=0) override
hcaldqm::Container1D _cLETDC_EChannel[10][36]
Definition: QIE10Task.h:58
int _ped
Definition: QIE10Task.h:45
int const FIBERCH_MIN
Definition: Constants.h:151
virtual void book(DQMStore::IBooker &, std::string subsystem="Hcal", std::string aux="")
ProcessingType _ptype
Definition: DQModule.h:59
virtual void fill(uint32_t)
Definition: Container1D.cc:83
virtual void initialize(std::string const &folder, quantity::Quantity *, quantity::Quantity *qy=new quantity::ValueQuantity(quantity::fN), int debug=0)
void dqmthrow(std::string const &msg) const
Definition: Logger.h:15
virtual example_stream void bookHistograms(DQMStore::IBooker &,@example_stream edm::Run const &,@example_stream edm::EventSetup const &) override
void _process(edm::Event const &, edm::EventSetup const &) override
Definition: QIE10Task.cc:163
int const FIBER_uTCA_MIN1
Definition: Constants.h:144
DetId detid() const
Get the detector id.
constexpr int crateId() const
get the readout VME crate number
Logger _logger
Definition: DQModule.h:70
hcaldqm::Container2D _cOccupancy_depth
Definition: QIE10Task.h:74
RunAuxiliary const & runAuxiliary() const override
Definition: Run.h:63
std::string _name
Definition: DQModule.h:57
HcalElectronicsMap const * _emap
Definition: DQTask.h:73
hcaldqm::Container2D _cLETDCvsADC_EChannel[10][36]
Definition: QIE10Task.h:56
hcaldqm::Container2D _cOccupancy_Crate
Definition: QIE10Task.h:70
std::vector< unsigned int > const crateListHF
Definition: Constants.h:93
hcaldqm::Container1D _cLETDCTime_EChannel[36]
Definition: QIE10Task.h:60
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: QIE10Task.cc:24
virtual void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="")
Definition: Container1D.cc:958
virtual void initialize(std::string const &folder, hashfunctions::HashType, quantity::Quantity *, quantity::Quantity *, quantity::Quantity *qz=new quantity::ValueQuantity(quantity::fN), int debug=0)
Definition: Container2D.cc:32
void book(DQMStore::IBooker &, std::string subsystem="Hcal", std::string aux="") override
hcaldqm::Container2D _cLETDCvsTS_EChannel[36]
Definition: QIE10Task.h:57
QIE10Task(edm::ParameterSet const &)
Definition: QIE10Task.cc:8
void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
Definition: QIE10Task.cc:155
int const SLOT_uTCA_MAX
Definition: Constants.h:124
hcaldqm::ContainerSingle2D _cLETDCTimevsADC
Definition: QIE10Task.h:64
std::string const & label() const
Definition: InputTag.h:36
constexpr int slot() const
get the htr or uHTR slot
edm::ESHandle< HcalDbService > _dbService
Definition: DQTask.h:72
void _resetMonitors(hcaldqm::UpdateFreq) override
Definition: QIE10Task.cc:241
double _cut
Definition: QIE10Task.h:44
T get() const
Definition: EventSetup.h:63
void fill(HcalDetId const &) override
Definition: Container2D.cc:59
const HcalElectronicsMap * getHcalMapping() const
virtual void initialize(FilterType ftype, hashfunctions::HashType htype, std::vector< uint32_t > const &)
Definition: HashFilter.cc:28
std::string _subsystem
Definition: DQModule.h:64
virtual void fill(int, int)
void book(DQMStore::IBooker &, HcalElectronicsMap const *, std::string subsystem="Hcal", std::string aux="") override
Definition: Container2D.cc:895
hcaldqm::ContainerSingle1D _cADC
Definition: QIE10Task.h:67
Readout chain identification for Hcal.
std::string const & instance() const
Definition: InputTag.h:37
RunNumber_t run() const
Definition: RunAuxiliary.h:41
int const SLOT_uTCA_MIN
Definition: Constants.h:123
Definition: Run.h:44
ib
Definition: cuy.py:661
double sumQ(DIGI const &digi, double ped, int i=0, int j=3)
Definition: Utilities.h:121