Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:56:49

0001 
0002 // -*- C++ -*-
0003 //
0004 // Package:    L1RCTParametersOnlineProd
0005 // Class:      L1RCTParametersOnlineProd
0006 //
0007 /**\class L1RCTParametersOnlineProd L1RCTParametersOnlineProd.h L1Trigger/L1RCTParametersProducers/src/L1RCTParametersOnlineProd.cc
0008 
0009  Description: <one line class summary>
0010 
0011  Implementation:
0012      <Notes on implementation>
0013 */
0014 //
0015 // Original Author:  Werner Man-Li Sun
0016 //         Created:  Tue Sep 16 22:43:22 CEST 2008
0017 //
0018 //
0019 
0020 // system include files
0021 #include <iostream>
0022 
0023 // user include files
0024 #include "CondTools/L1Trigger/interface/L1ConfigOnlineProdBase.h"
0025 
0026 #include "CondFormats/L1TObjects/interface/L1RCTChannelMask.h"
0027 #include "CondFormats/DataRecord/interface/L1RCTChannelMaskRcd.h"
0028 
0029 // #include "FWCore/Framework/interface/HCTypeTagTemplate.h"
0030 // #include "FWCore/Framework/interface/EventSetup.h"
0031 
0032 //
0033 // class declaration
0034 //
0035 
0036 class L1RCTChannelMaskOnlineProd : public L1ConfigOnlineProdBase<L1RCTChannelMaskRcd, L1RCTChannelMask> {
0037 public:
0038   L1RCTChannelMaskOnlineProd(const edm::ParameterSet& iConfig)
0039       : L1ConfigOnlineProdBase<L1RCTChannelMaskRcd, L1RCTChannelMask>(iConfig) {}
0040   ~L1RCTChannelMaskOnlineProd() override {}
0041 
0042   std::unique_ptr<L1RCTChannelMask> newObject(const std::string& objectKey) override;
0043 
0044 private:
0045   // ----------member data ---------------------------
0046 };
0047 
0048 //
0049 // constants, enums and typedefs
0050 //
0051 
0052 //
0053 // static data member definitions
0054 //
0055 
0056 //
0057 // constructors and destructor
0058 //
0059 
0060 std::unique_ptr<L1RCTChannelMask> L1RCTChannelMaskOnlineProd::newObject(const std::string& objectKey) {
0061   std::cout << " Current key is " << objectKey << std::endl;
0062 
0063   std::string rctSchema = "CMS_RCT";
0064 
0065   std::vector<std::string> dc_maskStrings;
0066   dc_maskStrings.push_back("HCAL_MASK_CR00_EVEN");
0067   dc_maskStrings.push_back("HCAL_MASK_CR00_ODD");
0068   dc_maskStrings.push_back("HCAL_MASK_CR01_EVEN");
0069   dc_maskStrings.push_back("HCAL_MASK_CR01_ODD");
0070   dc_maskStrings.push_back("HCAL_MASK_CR02_EVEN");
0071   dc_maskStrings.push_back("HCAL_MASK_CR02_ODD");
0072   dc_maskStrings.push_back("HCAL_MASK_CR03_EVEN");
0073   dc_maskStrings.push_back("HCAL_MASK_CR03_ODD");
0074   dc_maskStrings.push_back("HCAL_MASK_CR04_EVEN");
0075   dc_maskStrings.push_back("HCAL_MASK_CR04_ODD");
0076   dc_maskStrings.push_back("HCAL_MASK_CR05_EVEN");
0077   dc_maskStrings.push_back("HCAL_MASK_CR05_ODD");
0078   dc_maskStrings.push_back("HCAL_MASK_CR06_EVEN");
0079   dc_maskStrings.push_back("HCAL_MASK_CR06_ODD");
0080   dc_maskStrings.push_back("HCAL_MASK_CR07_EVEN");
0081   dc_maskStrings.push_back("HCAL_MASK_CR07_ODD");
0082   dc_maskStrings.push_back("HCAL_MASK_CR08_EVEN");
0083   dc_maskStrings.push_back("HCAL_MASK_CR08_ODD");
0084   dc_maskStrings.push_back("HCAL_MASK_CR09_EVEN");
0085   dc_maskStrings.push_back("HCAL_MASK_CR09_ODD");
0086   dc_maskStrings.push_back("HCAL_MASK_CR10_EVEN");
0087   dc_maskStrings.push_back("HCAL_MASK_CR10_ODD");
0088   dc_maskStrings.push_back("HCAL_MASK_CR11_EVEN");
0089   dc_maskStrings.push_back("HCAL_MASK_CR11_ODD");
0090   dc_maskStrings.push_back("HCAL_MASK_CR12_EVEN");
0091   dc_maskStrings.push_back("HCAL_MASK_CR12_ODD");
0092   dc_maskStrings.push_back("HCAL_MASK_CR13_EVEN");
0093   dc_maskStrings.push_back("HCAL_MASK_CR13_ODD");
0094   dc_maskStrings.push_back("HCAL_MASK_CR14_EVEN");
0095   dc_maskStrings.push_back("HCAL_MASK_CR14_ODD");
0096   dc_maskStrings.push_back("HCAL_MASK_CR15_EVEN");
0097   dc_maskStrings.push_back("HCAL_MASK_CR15_ODD");
0098   dc_maskStrings.push_back("HCAL_MASK_CR16_EVEN");
0099   dc_maskStrings.push_back("HCAL_MASK_CR16_ODD");
0100   dc_maskStrings.push_back("HCAL_MASK_CR17_EVEN");
0101   dc_maskStrings.push_back("HCAL_MASK_CR17_ODD");
0102   dc_maskStrings.push_back("ECAL_MASK_CR00_EVEN");
0103   dc_maskStrings.push_back("ECAL_MASK_CR00_ODD");
0104   dc_maskStrings.push_back("ECAL_MASK_CR01_EVEN");
0105   dc_maskStrings.push_back("ECAL_MASK_CR01_ODD");
0106   dc_maskStrings.push_back("ECAL_MASK_CR02_EVEN");
0107   dc_maskStrings.push_back("ECAL_MASK_CR02_ODD");
0108   dc_maskStrings.push_back("ECAL_MASK_CR03_EVEN");
0109   dc_maskStrings.push_back("ECAL_MASK_CR03_ODD");
0110   dc_maskStrings.push_back("ECAL_MASK_CR04_EVEN");
0111   dc_maskStrings.push_back("ECAL_MASK_CR04_ODD");
0112   dc_maskStrings.push_back("ECAL_MASK_CR05_EVEN");
0113   dc_maskStrings.push_back("ECAL_MASK_CR05_ODD");
0114   dc_maskStrings.push_back("ECAL_MASK_CR06_EVEN");
0115   dc_maskStrings.push_back("ECAL_MASK_CR06_ODD");
0116   dc_maskStrings.push_back("ECAL_MASK_CR07_EVEN");
0117   dc_maskStrings.push_back("ECAL_MASK_CR07_ODD");
0118   dc_maskStrings.push_back("ECAL_MASK_CR08_EVEN");
0119   dc_maskStrings.push_back("ECAL_MASK_CR08_ODD");
0120   dc_maskStrings.push_back("ECAL_MASK_CR09_EVEN");
0121   dc_maskStrings.push_back("ECAL_MASK_CR09_ODD");
0122   dc_maskStrings.push_back("ECAL_MASK_CR10_EVEN");
0123   dc_maskStrings.push_back("ECAL_MASK_CR10_ODD");
0124   dc_maskStrings.push_back("ECAL_MASK_CR11_EVEN");
0125   dc_maskStrings.push_back("ECAL_MASK_CR11_ODD");
0126   dc_maskStrings.push_back("ECAL_MASK_CR12_EVEN");
0127   dc_maskStrings.push_back("ECAL_MASK_CR12_ODD");
0128   dc_maskStrings.push_back("ECAL_MASK_CR13_EVEN");
0129   dc_maskStrings.push_back("ECAL_MASK_CR13_ODD");
0130   dc_maskStrings.push_back("ECAL_MASK_CR14_EVEN");
0131   dc_maskStrings.push_back("ECAL_MASK_CR14_ODD");
0132   dc_maskStrings.push_back("ECAL_MASK_CR15_EVEN");
0133   dc_maskStrings.push_back("ECAL_MASK_CR15_ODD");
0134   dc_maskStrings.push_back("ECAL_MASK_CR16_EVEN");
0135   dc_maskStrings.push_back("ECAL_MASK_CR16_ODD");
0136   dc_maskStrings.push_back("ECAL_MASK_CR17_EVEN");
0137   dc_maskStrings.push_back("ECAL_MASK_CR17_ODD");
0138 
0139   l1t::OMDSReader::QueryResults dcMaskResults =
0140       m_omdsReader.basicQuery(dc_maskStrings,
0141                               rctSchema,
0142                               "RCT_DEADCHANNEL_SUMMARY",
0143                               "RCT_DEADCHANNEL_SUMMARY.ID",
0144                               m_omdsReader.basicQuery("DC_SUM_ID",
0145                                                       rctSchema,
0146                                                       "RCT_RUN_SETTINGS_KEY",
0147                                                       "RCT_RUN_SETTINGS_KEY.ID",
0148                                                       m_omdsReader.singleAttribute(objectKey)));
0149 
0150   if (dcMaskResults.queryFailed() || dcMaskResults.numberRows() != 1)  // check query successful
0151   {
0152     edm::LogError("L1-O2O") << "Problem with L1RCTChannelMask key.";
0153 
0154     std::cout << " Returened rows " << dcMaskResults.numberRows() << std::endl;
0155     return std::unique_ptr<L1RCTChannelMask>();
0156   }
0157 
0158   L1RCTChannelMask* m = new L1RCTChannelMask;
0159 
0160   long long hcal_temp = 0LL;
0161   int ecal_temp = 0;
0162   for (int i = 0; i < 36; i++) {
0163     dcMaskResults.fillVariable(dc_maskStrings.at(i), hcal_temp);
0164     for (int j = 0; j < 32; j++)
0165       if (j < 28)
0166         m->hcalMask[i / 2][i % 2][j] = ((hcal_temp >> j) & 1) == 1;
0167       else
0168         m->hfMask[i / 2][i % 2][j - 28] = ((hcal_temp >> j) & 1) == 1;
0169   }
0170   for (int i = 36; i < 72; i++) {
0171     dcMaskResults.fillVariable(dc_maskStrings.at(i), ecal_temp);
0172     for (int j = 0; j < 28; j++) {
0173       int k = i - 36;
0174       m->ecalMask[k / 2][k % 2][j] = ((ecal_temp >> j) & 1) == 1;
0175     }
0176   }
0177 
0178   // FIND dummy cards from TSC key in crate conf
0179 
0180   std::vector<std::string> cardMaskStrings;
0181   cardMaskStrings.push_back("RC0");
0182   cardMaskStrings.push_back("RC1");
0183   cardMaskStrings.push_back("RC2");
0184   cardMaskStrings.push_back("RC3");
0185   cardMaskStrings.push_back("RC4");
0186   cardMaskStrings.push_back("RC5");
0187   cardMaskStrings.push_back("RC6");
0188   cardMaskStrings.push_back("JSC");
0189 
0190   std::vector<std::string> crateIDStrings;
0191   crateIDStrings.push_back("RCT_CRATE_0");
0192   crateIDStrings.push_back("RCT_CRATE_1");
0193   crateIDStrings.push_back("RCT_CRATE_2");
0194   crateIDStrings.push_back("RCT_CRATE_3");
0195   crateIDStrings.push_back("RCT_CRATE_4");
0196   crateIDStrings.push_back("RCT_CRATE_5");
0197   crateIDStrings.push_back("RCT_CRATE_6");
0198   crateIDStrings.push_back("RCT_CRATE_7");
0199   crateIDStrings.push_back("RCT_CRATE_8");
0200   crateIDStrings.push_back("RCT_CRATE_9");
0201   crateIDStrings.push_back("RCT_CRATE_10");
0202   crateIDStrings.push_back("RCT_CRATE_11");
0203   crateIDStrings.push_back("RCT_CRATE_12");
0204   crateIDStrings.push_back("RCT_CRATE_13");
0205   crateIDStrings.push_back("RCT_CRATE_14");
0206   crateIDStrings.push_back("RCT_CRATE_15");
0207   crateIDStrings.push_back("RCT_CRATE_16");
0208   crateIDStrings.push_back("RCT_CRATE_17");
0209 
0210   l1t::OMDSReader::QueryResults crate_conf = m_omdsReader.basicQuery("CRATE_CONF",
0211                                                                      rctSchema,
0212                                                                      "RCT_RUN_SETTINGS_KEY",
0213                                                                      "RCT_RUN_SETTINGS_KEY.ID",
0214                                                                      m_omdsReader.singleAttribute(objectKey));
0215 
0216   int crateNum = 0;
0217   for (std::vector<std::string>::iterator crate = crateIDStrings.begin(); crate != crateIDStrings.end(); ++crate) {
0218     //       std::cout << "crate conf " << *crate <<std::endl;
0219     l1t::OMDSReader::QueryResults cardConfResults = m_omdsReader.basicQuery(
0220         cardMaskStrings,
0221         rctSchema,
0222         "CRATE_CONF_DUMMY",
0223         "CRATE_CONF_DUMMY.CRATE_CONF",
0224         m_omdsReader.basicQuery(*crate, rctSchema, "RCT_CRATE_CONF", "RCT_CRATE_CONF.RCT_KEY", crate_conf));
0225     bool extantCard[8];
0226     int cardNum = 0;
0227     for (std::vector<std::string>::iterator card = cardMaskStrings.begin(); card != cardMaskStrings.end(); ++card) {
0228       cardConfResults.fillVariable(*card, extantCard[cardNum]);
0229 
0230       if (!extantCard[cardNum]) {
0231         switch (cardNum) {
0232           case 6:
0233 
0234             for (int k = 0; k < 4; k++) {
0235               m->ecalMask[crateNum][0][(cardNum / 2) * 8 + k] |= !extantCard[cardNum];
0236               m->ecalMask[crateNum][1][(cardNum / 2) * 8 + k] |= !extantCard[cardNum];
0237               m->hcalMask[crateNum][0][(cardNum / 2) * 8 + k] |= !extantCard[cardNum];
0238               m->hcalMask[crateNum][1][(cardNum / 2) * 8 + k] |= !extantCard[cardNum];
0239             }
0240             break;
0241           case 7:
0242 
0243             for (int k = 0; k < 4; k++) {
0244               m->hfMask[crateNum][0][k] |= !extantCard[cardNum];
0245               m->hfMask[crateNum][1][k] |= !extantCard[cardNum];
0246             }
0247             break;
0248           default:
0249 
0250             for (int k = 0; k < 8; k++) {
0251               m->hcalMask[crateNum][cardNum % 2][(cardNum / 2) * 8 + k] |= !extantCard[cardNum];
0252               m->ecalMask[crateNum][cardNum % 2][(cardNum / 2) * 8 + k] |= !extantCard[cardNum];
0253             }
0254         }
0255       }
0256       cardNum++;
0257     }
0258     crateNum++;
0259   }
0260   /*
0261     std::cout << "check fill" <<std::endl;
0262      for(int i = 0; i< 18; i++)
0263        for(int j =0; j< 2; j++){
0264      for(int k =0; k<28; k++){
0265        if(m->ecalMask[i][j][k])
0266          std::cout << "ecal masked channel: crate " << i << " phi " << j <<" ieta " <<k <<std::endl; 
0267        if(m->hcalMask[i][j][k])
0268          std::cout << "hcal masked channel: crate " << i << " phi " << j <<" ieta " <<k <<std::endl; 
0269      }
0270      for(int k =0; k<4;k++)
0271        if(m->hfMask[i][j][k])
0272          std::cout << "hf masked channel: crate " << i << " phi " << j <<" ieta " <<k <<std::endl; 
0273        }
0274      
0275      */
0276   //~~~~~~~~~ Instantiate new L1RCTChannelMask object. ~~~~~~~~~
0277 
0278   return std::unique_ptr<L1RCTChannelMask>(m);
0279 }
0280 
0281 //
0282 // member functions
0283 //
0284 
0285 //define this as a plug-in
0286 DEFINE_FWK_EVENTSETUP_MODULE(L1RCTChannelMaskOnlineProd);