Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-06-07 02:29:28

0001 #ifndef EcalDQMCommonUtils_H
0002 #define EcalDQMCommonUtils_H
0003 
0004 #include <algorithm>
0005 #include <cmath>
0006 #include <iomanip>
0007 
0008 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0009 #include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h"
0010 #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
0011 
0012 #include "DataFormats/EcalDetId/interface/EBDetId.h"
0013 #include "DataFormats/EcalDetId/interface/EEDetId.h"
0014 #include "DataFormats/EcalDetId/interface/EcalElectronicsId.h"
0015 #include "DataFormats/EcalDetId/interface/EcalPnDiodeDetId.h"
0016 #include "DataFormats/EcalDetId/interface/EcalScDetId.h"
0017 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
0018 #include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h"
0019 #include "DataFormats/EcalDetId/interface/EcalTriggerElectronicsId.h"
0020 
0021 #include "FWCore/Utilities/interface/Exception.h"
0022 
0023 namespace ecaldqm {
0024 
0025   enum SMName {
0026     kEEm07,
0027     kEEm08,
0028     kEEm09,
0029     kEEm01,
0030     kEEm02,
0031     kEEm03,
0032     kEEm04,
0033     kEEm05,
0034     kEEm06,
0035     kEBm01,
0036     kEBm02,
0037     kEBm03,
0038     kEBm04,
0039     kEBm05,
0040     kEBm06,
0041     kEBm07,
0042     kEBm08,
0043     kEBm09,
0044     kEBm10,
0045     kEBm11,
0046     kEBm12,
0047     kEBm13,
0048     kEBm14,
0049     kEBm15,
0050     kEBm16,
0051     kEBm17,
0052     kEBm18,
0053     kEBp01,
0054     kEBp02,
0055     kEBp03,
0056     kEBp04,
0057     kEBp05,
0058     kEBp06,
0059     kEBp07,
0060     kEBp08,
0061     kEBp09,
0062     kEBp10,
0063     kEBp11,
0064     kEBp12,
0065     kEBp13,
0066     kEBp14,
0067     kEBp15,
0068     kEBp16,
0069     kEBp17,
0070     kEBp18,
0071     kEEp07,
0072     kEEp08,
0073     kEEp09,
0074     kEEp01,
0075     kEEp02,
0076     kEEp03,
0077     kEEp04,
0078     kEEp05,
0079     kEEp06,
0080     kEEmLow = kEEm07,
0081     kEEmHigh = kEEm06,
0082     kEEpLow = kEEp07,
0083     kEEpHigh = kEEp06,
0084     kEBmLow = kEBm01,
0085     kEBmHigh = kEBm18,
0086     kEBpLow = kEBp01,
0087     kEBpHigh = kEBp18
0088   };
0089 
0090   static constexpr int nDCC = 54, nEBDCC = 36, nEEDCC = 18, nDCCMEM = 44, nEEDCCMEM = 8;
0091 
0092   // These lines set the number of TriggerTowers in "outer" and "inner" TCCs,
0093   // where "outer" := closer to the barrel. These constants are used in
0094   // setting the binning. There are 16 trigger towers per TCC for "outer" TCCs,
0095   // and 24 per TCC for "inner" TCCs (but the numbering is from 0 to 27, so
0096   // 28 bins are required).
0097   static constexpr int nTTOuter = 16, nTTInner = 28;
0098 
0099   static constexpr int nTCC = 108, kEEmTCCLow = 0, kEEmTCCHigh = 35, kEEpTCCLow = 72, kEEpTCCHigh = 107, kEBTCCLow = 36,
0100                        kEBTCCHigh = 71, nChannels = EBDetId::kSizeForDenseIndexing + EEDetId::kSizeForDenseIndexing,
0101                        nTowers = EcalTrigTowerDetId::kEBTotalTowers + EcalScDetId::kSizeForDenseIndexing;
0102 
0103   extern std::vector<unsigned> const memDCC;
0104 
0105   extern double const etaBound;
0106 
0107   // returns DCC ID (1 - 54)
0108   unsigned dccId(DetId const &, EcalElectronicsMapping const *);
0109   unsigned dccId(EcalElectronicsId const &);
0110 
0111   unsigned memDCCId(unsigned);     // convert from dccId skipping DCCs without MEM
0112   unsigned memDCCIndex(unsigned);  // reverse conversion
0113 
0114   // returns TCC ID (1 - 108)
0115   unsigned tccId(DetId const &, EcalElectronicsMapping const *);
0116   unsigned tccId(EcalElectronicsId const &, EcalElectronicsMapping const *);
0117 
0118   // returns the data tower id - pass only
0119   unsigned towerId(DetId const &, EcalElectronicsMapping const *);
0120   unsigned towerId(EcalElectronicsId const &);
0121 
0122   unsigned ttId(DetId const &, EcalElectronicsMapping const *);
0123   unsigned ttId(EcalElectronicsId const &, EcalElectronicsMapping const *);
0124 
0125   unsigned rtHalf(DetId const &, EcalElectronicsMapping const *);
0126 
0127   std::pair<unsigned, unsigned> innerTCCs(unsigned);
0128   std::pair<unsigned, unsigned> outerTCCs(unsigned);
0129 
0130   std::vector<DetId> scConstituents(EcalScDetId const &);
0131 
0132   EcalPnDiodeDetId pnForCrystal(DetId const &, char, EcalElectronicsMapping const *);
0133 
0134   unsigned dccId(std::string const &);
0135   std::string smName(unsigned);
0136 
0137   int zside(DetId const &);
0138 
0139   double eta(EBDetId const &, CaloGeometry const *);
0140   double eta(EEDetId const &, CaloGeometry const *);
0141   double phi(EBDetId const &);
0142   double phi(EEDetId const &);
0143   double phi(EcalTrigTowerDetId const &);
0144   double phi(double);
0145 
0146   bool isForward(DetId const &);
0147 
0148   bool isCrystalId(DetId const &);
0149   bool isSingleChannelId(DetId const &);
0150   bool isEcalScDetId(DetId const &);
0151   bool isEndcapTTId(DetId const &);
0152 
0153   unsigned nCrystals(unsigned);
0154   unsigned nSuperCrystals(unsigned);
0155 
0156   bool ccuExists(unsigned, unsigned);
0157 }  // namespace ecaldqm
0158 
0159 #endif