diff --git a/DQM/HcalCommon/interface/ValueQuantity.h b/DQM/HcalCommon/interface/ValueQuantity.h index f8fbdc2eca8bf..0438e137e619e 100644 --- a/DQM/HcalCommon/interface/ValueQuantity.h +++ b/DQM/HcalCommon/interface/ValueQuantity.h @@ -8,63 +8,64 @@ namespace hcaldqm { namespace quantity { enum ValueQuantityType { - fN = 0, - fEvents = 1, - fEnergy = 2, - fTiming_ns = 3, - fADC_128 = 4, - fADC_5 = 5, - fADC_15 = 6, - ffC_10000 = 7, - ffC_1000 = 8, - ffC_3000 = 9, - fTiming_TS = 10, - fTiming_TS200 = 11, - fLS = 12, - fEt_256 = 13, - fEt_128 = 14, - fFG = 15, - fRatio = 16, - fDigiSize = 17, - fAroundZero = 18, - fRatio2 = 19, - fdEtRatio = 20, - fSumdEt = 21, - fTiming_100TS = 22, - fQIE10ADC_256 = 23, - fQIE10TDC_64 = 24, - fQIE10TDC_16 = 25, - fDiffAbs = 26, - fRatio_0to2 = 27, - fN_to8000 = 28, - fEnergyTotal = 29, - fN_m0to10000 = 30, - fEtCorr_256 = 31, - fADCCorr_128 = 32, - fBX = 33, - fEnergy_1TeV = 34, - fState = 35, - fQIE10fC_400000 = 36, - fDataSize = 37, - fQIE10fC_2000 = 38, - fQIE10fC_10000 = 39, - fQIE8fC_1000_50 = 40, - fTime_ns_250 = 41, - fADC_256 = 42, - ffC_generic_10000 = 43, - ffC_generic_400000 = 44, - fQIE10ADC_16 = 45, - fDualAnodeAsymmetry = 46, - fTimingRatio = 47, - fQIE10fC_100000Coarse = 48, - fBadTDC = 49, - fRBX = 50, - fTimingDiff_ns = 51, - ffC_1000000 = 52, - fTime_ns_250_coarse = 53, - fCapidMinusBXmod4 = 54, - fBX_36 = 55, - fADC_256_4 = 56, // ADC from 0-255, with 4 ADC granularity + fN, + fEvents, + fEnergy, + fTiming_ns, + fADC_128, + fADC_5, + fADC_15, + ffC_10000, + ffC_1000, + ffC_3000, + fTiming_TS, + fTiming_TS200, + fLS, + fEt_256, + fEt_128, + fFG, + fRatio, + fDigiSize, + fAroundZero, + fRatio2, + fdEtRatio, + fSumdEt, + fTiming_100TS, + fQIE10ADC_256, + fQIE10TDC_64, + fQIE10TDC_16, + fQIE10TDC_4, + fDiffAbs, + fRatio_0to2, + fN_to8000, + fEnergyTotal, + fN_m0to10000, + fEtCorr_256, + fADCCorr_128, + fBX, + fEnergy_1TeV, + fState, + fQIE10fC_400000, + fDataSize, + fQIE10fC_2000, + fQIE10fC_10000, + fQIE8fC_1000_50, + fTime_ns_250, + fADC_256, + ffC_generic_10000, + ffC_generic_400000, + fQIE10ADC_16, + fDualAnodeAsymmetry, + fTimingRatio, + fQIE10fC_100000Coarse, + fBadTDC, + fRBX, + fTimingDiff_ns, + ffC_1000000, + fTime_ns_250_coarse, + fCapidMinusBXmod4, + fBX_36, + fADC_256_4, // ADC from 0-255, with 4 ADC granularity }; const std::map name_value = { {fN, "N"}, @@ -101,6 +102,7 @@ namespace hcaldqm { {fTiming_100TS, "Timing"}, {fQIE10TDC_64, "TDC"}, {fQIE10TDC_16, "TDC"}, + {fQIE10TDC_4, "TDC"}, {fDiffAbs, "Q"}, {fRatio_0to2, "Ratio"}, {fN_to8000, "N"}, @@ -153,6 +155,7 @@ namespace hcaldqm { {fQIE10ADC_16, -0.5}, {fQIE10TDC_64, -0.5}, {fQIE10TDC_16, -0.5}, + {fQIE10TDC_4, -0.5}, {fDiffAbs, 0}, {fRatio_0to2, 0}, {fN_to8000, 0}, @@ -212,6 +215,7 @@ namespace hcaldqm { {fQIE10ADC_16, 15.5}, {fQIE10TDC_64, 63.5}, {fQIE10TDC_16, 15.5}, + {fQIE10TDC_4, 3.5}, {fDiffAbs, 1}, {fRatio_0to2, 2}, {fN_to8000, 8000}, @@ -270,6 +274,7 @@ namespace hcaldqm { {fQIE10ADC_256, 256}, {fQIE10TDC_64, 64}, {fQIE10TDC_16, 16}, + {fQIE10TDC_4, 4}, {fDiffAbs, 200}, {fRatio_0to2, 100}, {fN_to8000, 8000}, diff --git a/DQM/HcalTasks/interface/DigiTask.h b/DQM/HcalTasks/interface/DigiTask.h index 29c83e8e59779..2e52d4ab82cda 100644 --- a/DQM/HcalTasks/interface/DigiTask.h +++ b/DQM/HcalTasks/interface/DigiTask.h @@ -68,6 +68,8 @@ class DigiTask : public hcaldqm::DQTask { hcaldqm::filter::HashFilter _filter_FEDHF; hcaldqm::filter::HashFilter _filter_QIE1011; hcaldqm::filter::HashFilter _filter_QIE8; + hcaldqm::filter::HashFilter _filter_TDC2bit; + hcaldqm::filter::HashFilter _filter_TDC6bit; /* hcaldqm::Containers */ // ADC, fC - Charge - just filling - no summary! @@ -147,11 +149,13 @@ class DigiTask : public hcaldqm::DQTask { hcaldqm::ContainerXXX _xBadCapid; // online only // QIE10 TDC histograms - hcaldqm::Container2D _cLETDCTimevsADC_SubdetPM; - hcaldqm::Container2D _cLETDCvsADC_SubdetPM; - hcaldqm::Container2D _cLETDCvsTS_SubdetPM; + hcaldqm::Container2D _cLETDCvsADC_2bit_SubdetPM; + hcaldqm::Container2D _cLETDCvsADC_6bit_SubdetPM; + hcaldqm::Container2D _cLETDCvsTS_2bit_SubdetPM; + hcaldqm::Container2D _cLETDCvsTS_6bit_SubdetPM; hcaldqm::Container1D _cLETDCTime_SubdetPM; hcaldqm::ContainerProf2D _cLETDCTime_depth; + hcaldqm::Container2D _cLETDCTimevsADC_SubdetPM; // Bad TDC histograms hcaldqm::Container1D _cBadTDCValues_SubdetPM; diff --git a/DQM/HcalTasks/plugins/DigiTask.cc b/DQM/HcalTasks/plugins/DigiTask.cc index 429bd6bb264d4..3f9cd19f40031 100644 --- a/DQM/HcalTasks/plugins/DigiTask.cc +++ b/DQM/HcalTasks/plugins/DigiTask.cc @@ -106,6 +106,24 @@ DigiTask::DigiTask(edm::ParameterSet const& ps) : DQTask(ps) { _filter_QIE1011.initialize(filter::fPreserver, hcaldqm::hashfunctions::fSubdet, vhashQIE1011); + std::vector vhash_TDC2bit; + vhash_TDC2bit.push_back( + hcaldqm::hashfunctions::hash_did[hcaldqm::hashfunctions::fSubdetPM](HcalDetId(HcalBarrel, 1, 1, 1))); + vhash_TDC2bit.push_back( + hcaldqm::hashfunctions::hash_did[hcaldqm::hashfunctions::fSubdetPM](HcalDetId(HcalBarrel, -11, 1, 1))); + _filter_TDC2bit.initialize(filter::fPreserver, hcaldqm::hashfunctions::fSubdetPM, vhash_TDC2bit); + + std::vector vhash_TDC6bit; + vhash_TDC6bit.push_back( + hcaldqm::hashfunctions::hash_did[hcaldqm::hashfunctions::fSubdetPM](HcalDetId(HcalEndcap, 20, 1, 1))); + vhash_TDC6bit.push_back( + hcaldqm::hashfunctions::hash_did[hcaldqm::hashfunctions::fSubdetPM](HcalDetId(HcalEndcap, -20, 1, 1))); + vhash_TDC6bit.push_back( + hcaldqm::hashfunctions::hash_did[hcaldqm::hashfunctions::fSubdetPM](HcalDetId(HcalForward, 29, 1, 1))); + vhash_TDC6bit.push_back( + hcaldqm::hashfunctions::hash_did[hcaldqm::hashfunctions::fSubdetPM](HcalDetId(HcalForward, -29, 1, 1))); + _filter_TDC6bit.initialize(filter::fPreserver, hcaldqm::hashfunctions::fSubdetPM, vhash_TDC6bit); + // INITIALIZE FIRST _cADC_SubdetPM.initialize(_name, "ADC", @@ -242,22 +260,35 @@ DigiTask::DigiTask(edm::ParameterSet const& ps) : DQTask(ps) { new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10ADC_256), new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fTime_ns_250_coarse), new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); - _cLETDCvsADC_SubdetPM.initialize(_name, - "LETDCvsADC", - hcaldqm::hashfunctions::fSubdetPM, - new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10ADC_256), - new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10TDC_64), - new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); - _cLETDCvsTS_SubdetPM.initialize(_name, - "LETDCvsTS", - hcaldqm::hashfunctions::fSubdetPM, - new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fTiming_TS), - new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10TDC_64), - new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); + _cLETDCvsADC_2bit_SubdetPM.initialize(_name, + "LETDCvsADC", + hcaldqm::hashfunctions::fSubdetPM, + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10ADC_256), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10TDC_4), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); + _cLETDCvsADC_6bit_SubdetPM.initialize(_name, + "LETDCvsADC", + hcaldqm::hashfunctions::fSubdetPM, + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10ADC_256), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10TDC_64), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); + _cLETDCvsTS_2bit_SubdetPM.initialize(_name, + "LETDCvsTS", + hcaldqm::hashfunctions::fSubdetPM, + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fTiming_TS), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10TDC_4), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); + _cLETDCvsTS_6bit_SubdetPM.initialize(_name, + "LETDCvsTS", + hcaldqm::hashfunctions::fSubdetPM, + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fTiming_TS), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fQIE10TDC_64), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); + _cLETDCTime_SubdetPM.initialize(_name, "LETDCTime", hcaldqm::hashfunctions::fSubdetPM, - new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fTime_ns_250), + new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fTime_ns_250_coarse), new hcaldqm::quantity::ValueQuantity(hcaldqm::quantity::fN, true)); _cLETDCTime_depth.initialize(_name, "LETDCTime", @@ -658,8 +689,10 @@ DigiTask::DigiTask(edm::ParameterSet const& ps) : DQTask(ps) { _cOccupancyCut_depth.book(ib, _emap, _subsystem); _cLETDCTimevsADC_SubdetPM.book(ib, _emap, _subsystem); - _cLETDCvsADC_SubdetPM.book(ib, _emap, _subsystem); - _cLETDCvsTS_SubdetPM.book(ib, _emap, _subsystem); + _cLETDCvsADC_2bit_SubdetPM.book(ib, _emap, _filter_TDC2bit, _subsystem); + _cLETDCvsADC_6bit_SubdetPM.book(ib, _emap, _filter_TDC6bit, _subsystem); + _cLETDCvsTS_2bit_SubdetPM.book(ib, _emap, _filter_TDC2bit, _subsystem); + _cLETDCvsTS_6bit_SubdetPM.book(ib, _emap, _filter_TDC6bit, _subsystem); _cLETDCTime_SubdetPM.book(ib, _emap, _subsystem); _cLETDCTime_depth.book(ib, _emap, _subsystem); @@ -930,20 +963,33 @@ DigiTask::DigiTask(edm::ParameterSet const& ps) : DQTask(ps) { double q = hcaldqm::utilities::adc2fCDBMinusPedestal(_dbService, digi_fC, did, digi, i); _cADC_SubdetPM_QIE1011.fill(did, digi[i].adc()); _cfC_SubdetPM_QIE1011.fill(did, q); - _cLETDCvsADC_SubdetPM.fill(did, digi[i].adc(), digi[i].tdc()); - _cLETDCvsTS_SubdetPM.fill(did, (int)i, digi[i].tdc()); - if (digi[i].tdc() < 50) { - double time = i * 25. + (digi[i].tdc() / 2.); - _cLETDCTime_SubdetPM.fill(did, time); - _cLETDCTime_depth.fill(did, time); - _cLETDCTimevsADC_SubdetPM.fill(did, digi[i].adc(), time); - } - // Bad TDC values: 50-61 should never happen in QIE10 or QIE11, but we saw some in 2017 data. - if ((50 <= digi[i].tdc()) && (digi[i].tdc() <= 61)) { - _cBadTDCValues_SubdetPM.fill(did, digi[i].tdc()); - _cBadTDCvsBX_SubdetPM.fill(did, bx); - _cBadTDCvsLS_SubdetPM.fill(did, _currentLS); - _cBadTDCCount_depth.fill(did); + + if (did.subdet() == HcalBarrel) { + _cLETDCvsADC_2bit_SubdetPM.fill(did, digi[i].adc(), digi[i].tdc()); + _cLETDCvsTS_2bit_SubdetPM.fill(did, (int)i, digi[i].tdc()); + + if (digi[i].tdc() < 2) { + double time = i * 25. + (digi[i].tdc() * 12.5); + _cLETDCTime_SubdetPM.fill(did, time); + _cLETDCTime_depth.fill(did, time); + _cLETDCTimevsADC_SubdetPM.fill(did, digi[i].adc(), time); + } + } else if (did.subdet() == HcalEndcap) { + _cLETDCvsADC_6bit_SubdetPM.fill(did, digi[i].adc(), digi[i].tdc()); + _cLETDCvsTS_6bit_SubdetPM.fill(did, (int)i, digi[i].tdc()); + if (digi[i].tdc() < 50) { + double time = i * 25. + (digi[i].tdc() / 2.); + _cLETDCTime_SubdetPM.fill(did, time); + _cLETDCTime_depth.fill(did, time); + _cLETDCTimevsADC_SubdetPM.fill(did, digi[i].adc(), time); + } + // Bad TDC values: 50-61 should never happen in QIE10 or QIE11, but we saw some in 2017 data. + if ((50 <= digi[i].tdc()) && (digi[i].tdc() <= 61)) { + _cBadTDCValues_SubdetPM.fill(did, digi[i].tdc()); + _cBadTDCvsBX_SubdetPM.fill(did, bx); + _cBadTDCvsLS_SubdetPM.fill(did, _currentLS); + _cBadTDCCount_depth.fill(did); + } } if (_ptype != fOffline) { // hidefed2crate _cADCvsTS_SubdetPM_QIE1011.fill(did, i, digi[i].adc()); @@ -1269,8 +1315,8 @@ DigiTask::DigiTask(edm::ParameterSet const& ps) : DQTask(ps) { //if (!_filter_QIE1011.filter(did)) { _cADC_SubdetPM_QIE1011.fill(did, digi[i].adc()); _cfC_SubdetPM_QIE1011.fill(did, q); - _cLETDCvsADC_SubdetPM.fill(did, digi[i].adc(), digi[i].le_tdc()); - _cLETDCvsTS_SubdetPM.fill(did, (int)i, digi[i].le_tdc()); + _cLETDCvsADC_6bit_SubdetPM.fill(did, digi[i].adc(), digi[i].le_tdc()); + _cLETDCvsTS_6bit_SubdetPM.fill(did, (int)i, digi[i].le_tdc()); if (digi[i].le_tdc() < 50) { double time = i * 25. + (digi[i].le_tdc() / 2.); _cLETDCTime_SubdetPM.fill(did, time);