Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-04 22:36:05

0001 #ifndef DigiTask_h
0002 #define DigiTask_h
0003 
0004 /**
0005  *  file:           DigiTask.h
0006  *  Author:         VK
0007  *  Description:
0008  *      HCAL DIGI Data Tier Processing.
0009  *
0010  *  Online:
0011  *      
0012  *  Offline:
0013  *      - HF Q2/(Q1+Q2) is not included.
0014  */
0015 
0016 #include "DQM/HcalCommon/interface/DQTask.h"
0017 #include "DQM/HcalCommon/interface/Utilities.h"
0018 #include "DQM/HcalCommon/interface/HashFilter.h"
0019 #include "DQM/HcalCommon/interface/ElectronicsMap.h"
0020 #include "DQM/HcalCommon/interface/Container1D.h"
0021 #include "DQM/HcalCommon/interface/Container2D.h"
0022 #include "DQM/HcalCommon/interface/ContainerProf1D.h"
0023 #include "DQM/HcalCommon/interface/ContainerProf2D.h"
0024 #include "DQM/HcalCommon/interface/ContainerSingle1D.h"
0025 #include "DQM/HcalCommon/interface/ContainerSingle2D.h"
0026 #include "DQM/HcalCommon/interface/ContainerSingleProf2D.h"
0027 #include "DQM/HcalCommon/interface/ContainerXXX.h"
0028 
0029 class DigiTask : public hcaldqm::DQTask {
0030 public:
0031   DigiTask(edm::ParameterSet const &);
0032   ~DigiTask() override {}
0033 
0034   void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
0035   std::shared_ptr<hcaldqm::Cache> globalBeginLuminosityBlock(edm::LuminosityBlock const &,
0036                                                              edm::EventSetup const &) const override;
0037   void globalEndLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override;
0038 
0039 protected:
0040   void _process(edm::Event const &, edm::EventSetup const &) override;
0041   void _resetMonitors(hcaldqm::UpdateFreq) override;
0042 
0043   edm::InputTag _tagQIE11;
0044   edm::InputTag _tagHO;
0045   edm::InputTag _tagQIE10;
0046   edm::EDGetTokenT<QIE11DigiCollection> _tokQIE11;
0047   edm::EDGetTokenT<HODigiCollection> _tokHO;
0048   edm::EDGetTokenT<QIE10DigiCollection> _tokQIE10;
0049   edm::ESGetToken<HcalDbService, HcalDbRecord> hcalDbServiceToken_;
0050   edm::ESGetToken<HcalChannelQuality, HcalChannelQualityRcd> _tokHcalChannelQuality;
0051 
0052   double _cutSumQ_HBHE, _cutSumQ_HO, _cutSumQ_HF;
0053   double _thresh_unihf;
0054   double _HBSumMeanofSumQForEachEvent, _HESumMeanofSumQForEachEvent, _HOSumMeanofSumQForEachEvent,
0055       _HFSumMeanofSumQForEachEvent;
0056   //    flag vector
0057   std::vector<hcaldqm::flag::Flag> _vflags;
0058   enum DigiFlag { fDigiSize = 0, fUni = 1, fNChsHF = 2, fUnknownIds = 3, fLED = 4, fCapId = 5, nDigiFlag = 6 };
0059 
0060   //    hashes/FED vectors
0061   std::vector<uint32_t> _vhashFEDs;
0062 
0063   std::map<HcalSubdetector, int> _refDigiSize;
0064 
0065   //    emap
0066   hcaldqm::electronicsmap::ElectronicsMap _ehashmap;  // online only
0067   hcaldqm::electronicsmap::ElectronicsMap _dhashmap;
0068 
0069   //    Filters
0070   hcaldqm::filter::HashFilter _filter_VME;
0071   hcaldqm::filter::HashFilter _filter_uTCA;
0072   hcaldqm::filter::HashFilter _filter_FEDHF;
0073   hcaldqm::filter::HashFilter _filter_QIE1011;
0074   hcaldqm::filter::HashFilter _filter_QIE8;
0075   hcaldqm::filter::HashFilter _filter_TDC2bit;
0076   hcaldqm::filter::HashFilter _filter_TDC6bit;
0077 
0078   /* hcaldqm::Containers */
0079   //    ADC, fC - Charge - just filling - no summary!
0080   hcaldqm::Container1D _cADC_SubdetPM;
0081   hcaldqm::Container1D _cfC_SubdetPM;
0082   hcaldqm::Container1D _cSumQ_SubdetPM;
0083   hcaldqm::Container1D _cSumQ_Subdet;
0084   hcaldqm::ContainerProf2D _cSumQ_depth;
0085   hcaldqm::ContainerProf1D _cSumQvsLS_SubdetPM;
0086   hcaldqm::ContainerProf1D _cAveragedSumQvsLS_Subdet;
0087   hcaldqm::ContainerProf1D _cSumQvsBX_SubdetPM;  // online only!
0088 
0089   // ADC, fC for HF (QIE10 has different ADC/fC)
0090   hcaldqm::Container1D _cADC_SubdetPM_QIE1011;
0091   hcaldqm::Container1D _cfC_SubdetPM_QIE1011;
0092   hcaldqm::Container1D _cSumQ_SubdetPM_QIE1011;
0093   hcaldqm::Container1D _cSumQ_Subdet_QIE1011;
0094   hcaldqm::ContainerProf1D _cSumQvsLS_SubdetPM_QIE1011;
0095   hcaldqm::ContainerProf1D _cAveragedSumQvsLS_Subdet_QIE1011;
0096   hcaldqm::ContainerProf1D _cSumQvsBX_SubdetPM_QIE1011;  // online only!
0097 
0098   //    Shape - just filling - not summary!
0099   hcaldqm::Container1D _cShapeCut_FED;
0100   hcaldqm::Container2D _cADCvsTS_SubdetPM;
0101   hcaldqm::Container2D _cADCvsTS_SubdetPM_QIE1011;
0102 
0103   //    Timing
0104   //    just filling - no summary!
0105   hcaldqm::Container1D _cTimingCut_SubdetPM;
0106   hcaldqm::Container1D _cTimingCutHTH_SubdetPM;
0107   hcaldqm::ContainerProf2D _cTimingCut_FEDuTCA;
0108   hcaldqm::ContainerProf2D _cTimingCut_ElectronicsuTCA;
0109   hcaldqm::ContainerProf1D _cTimingCutvsLS_FED;
0110   hcaldqm::ContainerProf1D _cTimingCutvsLS_SubdetPM;
0111   hcaldqm::ContainerProf1D _cTimingCutvsLS_depth;
0112   hcaldqm::ContainerProf2D _cTimingCut_depth;
0113   hcaldqm::ContainerProf1D _cTimingCutvsiphi_SubdetPM;  // online only!
0114   hcaldqm::ContainerProf1D _cTimingCutvsieta_Subdet;    // online only!
0115 
0116   //    Only for Online mode! just filling - no summary!
0117   hcaldqm::ContainerProf1D _cQ2Q12CutvsLS_FEDHF;  //    online only!
0118 
0119   //    Occupancy w/o a Cut - whatever is sitting in the Digi Collection
0120   //    used to determine Missing Digis => used for Summary!
0121   hcaldqm::Container2D _cOccupancy_FEDuTCA;
0122   hcaldqm::Container2D _cOccupancy_ElectronicsuTCA;
0123   hcaldqm::Container2D _cOccupancy_Crate;
0124   hcaldqm::Container2D _cOccupancy_CrateSlot;
0125   hcaldqm::Container2D _cOccupancy_depth;
0126   hcaldqm::Container1D _cOccupancyvsiphi_SubdetPM;  // online only
0127   hcaldqm::Container1D _cOccupancyvsieta_Subdet;    // online only
0128 
0129   //    Occupancy w/ a Cut
0130   //    used to determine if occupancy is symmetric or not. =>
0131   //    used for Summary
0132   hcaldqm::Container2D _cOccupancyCut_FEDuTCA;
0133   hcaldqm::Container2D _cOccupancyCut_ElectronicsuTCA;
0134   hcaldqm::Container2D _cOccupancyCut_depth;
0135   hcaldqm::Container1D _cOccupancyCutvsiphi_SubdetPM;  // online only
0136   hcaldqm::Container1D _cOccupancyCutvsieta_Subdet;    // online only
0137   //hcaldqm::Container2D _cOccupancyCutvsSlotvsLS_HFPM; // online only
0138   hcaldqm::Container2D _cOccupancyCutvsiphivsLS_SubdetPM;  // online only
0139 
0140   //    Occupancy w/o and w/ a Cut and BadCapId vs BX and vs LS
0141   hcaldqm::ContainerProf1D _cOccupancyvsLS_Subdet;
0142   hcaldqm::ContainerProf1D _cOccupancyCutvsLS_Subdet;  // online only
0143   hcaldqm::ContainerProf1D _cOccupancyCutvsBX_Subdet;  // online only
0144   hcaldqm::ContainerProf1D _cOccupancyBadCapidvsLS_Subdet;
0145   hcaldqm::Container2D _cOccupancyBadCapidvsLS_depth;
0146   //    #Time Samples for a digi. Used for Summary generation
0147   hcaldqm::Container1D _cDigiSize_Crate;
0148   hcaldqm::Container1D _cDigiSize_FED;
0149   hcaldqm::ContainerProf1D _cDigiSizevsLS_FED;     // online only
0150   hcaldqm::ContainerXXX<uint32_t> _xDigiSize;      // online only
0151   hcaldqm::ContainerXXX<uint32_t> _xUniHF, _xUni;  // online only
0152   hcaldqm::ContainerXXX<uint32_t> _xNChs;          // online only
0153   hcaldqm::ContainerXXX<uint32_t> _xNChsNominal;   // online only
0154   hcaldqm::ContainerXXX<uint32_t> _xBadCapid;      // online only
0155 
0156   // QIE10 TDC histograms
0157   hcaldqm::Container2D _cLETDCvsADC_2bit_SubdetPM;
0158   hcaldqm::Container2D _cLETDCvsADC_6bit_SubdetPM;
0159   hcaldqm::Container2D _cLETDCvsTS_2bit_SubdetPM;
0160   hcaldqm::Container2D _cLETDCvsTS_6bit_SubdetPM;
0161   hcaldqm::Container1D _cLETDCTime_SubdetPM;
0162   hcaldqm::ContainerProf2D _cLETDCTime_depth;
0163   hcaldqm::Container2D _cLETDCTimevsADC_SubdetPM;
0164 
0165   // Bad TDC histograms
0166   hcaldqm::Container1D _cBadTDCValues_SubdetPM;
0167   hcaldqm::Container1D _cBadTDCvsBX_SubdetPM;
0168   hcaldqm::Container1D _cBadTDCvsLS_SubdetPM;
0169   hcaldqm::Container2D _cBadTDCCount_depth;
0170 
0171   hcaldqm::Container1D _cBadTDCValues;
0172   hcaldqm::Container1D _cBadTDCvsBX;
0173   hcaldqm::Container1D _cBadTDCvsLS;
0174 
0175   // (Capid - BX) % 4
0176   hcaldqm::Container1D _cCapidMinusBXmod4_SubdetPM;
0177   hcaldqm::ContainerSingle2D _cCapidMinusBXmod4_CrateSlotuTCA[4];  // CrateSlot 2D histograms for each (capid-BX)%4
0178   hcaldqm::ContainerSingle2D _cCapid_BadvsFEDvsLS;
0179   hcaldqm::ContainerSingle2D
0180       _cCapid_BadvsFEDvsLSmod10;  // Same as _cCapid_BadvsFEDvsLS, but only for last 50 LSes (for sound alarm turning off when problem goes away)
0181 
0182   //    #events counters
0183   MonitorElement *meNumEvents1LS;  // to transfer the #events to harvesting
0184   MonitorElement *meUnknownIds1LS;
0185   bool _unknownIdsPresent;
0186 
0187   hcaldqm::Container2D _cSummaryvsLS_FED;    // online only
0188   hcaldqm::ContainerSingle2D _cSummaryvsLS;  // online only
0189 
0190   bool _qie10InConditions;  // Flag to protect against QIE10 digis not in conditions in 2016.
0191 
0192   std::map<HcalSubdetector, short> _capidmbx;  // Expected (capid - BX) % 4 for each subdet
0193 
0194   // LED monitoring stuff
0195   double _thresh_led;
0196   std::map<HcalSubdetector, std::vector<HcalDetId> > _ledCalibrationChannels;
0197 
0198   hcaldqm::Container1D _LED_CUCountvsLS_Subdet;       // Misfire count vs LS
0199   hcaldqm::Container1D _LED_CUCountvsLSmod60_Subdet;  // Misfire count vs LS
0200   hcaldqm::Container2D _LED_ADCvsBX_Subdet;           // Pin diode amplitude vs BX
0201 };
0202 
0203 #endif