Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:19:13

0001 #include "DataFormats/Common/interface/Handle.h"
0002 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
0003 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
0004 
0005 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
0006 #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
0007 
0008 #include "HtrXmlPatternTool.h"
0009 #include "HtrXmlPatternToolParameters.h"
0010 
0011 // system include files
0012 #include <memory>
0013 
0014 // default include files
0015 #include "FWCore/Framework/interface/Frameworkfwd.h"
0016 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0017 
0018 #include "FWCore/Framework/interface/Event.h"
0019 #include "FWCore/Framework/interface/MakerMacros.h"
0020 
0021 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0022 #include "FWCore/Utilities/interface/Exception.h"
0023 #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
0024 
0025 class HtrXmlPattern : public edm::one::EDAnalyzer<> {
0026 public:
0027   explicit HtrXmlPattern(const edm::ParameterSet&);
0028   ~HtrXmlPattern() override;
0029 
0030 private:
0031   void analyze(const edm::Event&, const edm::EventSetup&) override;
0032   void endJob() override;
0033   virtual void do_hand_fill(const HcalElectronicsMap*);
0034   HtrXmlPatternTool* m_tool;
0035   HtrXmlPatternToolParameters* m_toolparameters;
0036   int m_sets_to_show;
0037   int m_hand_pattern_number;
0038   bool m_fill_by_hand;
0039   bool m_filled;
0040   bool m_write_root_file;
0041 
0042   const edm::ESGetToken<HcalDbService, HcalDbRecord> m_hcalElectronicsMapToken;
0043 };
0044 
0045 HtrXmlPattern::HtrXmlPattern(const edm::ParameterSet& iConfig) {
0046   m_filled = false;
0047   m_fill_by_hand = iConfig.getUntrackedParameter<bool>("fill_by_hand");
0048   m_hand_pattern_number = iConfig.getUntrackedParameter<int>("hand_pattern_number");
0049   m_sets_to_show = iConfig.getUntrackedParameter<int>("sets_to_show");
0050   m_write_root_file = iConfig.getUntrackedParameter<bool>("write_root_file");
0051 
0052   m_toolparameters = new HtrXmlPatternToolParameters;
0053   m_toolparameters->m_show_errors = iConfig.getUntrackedParameter<bool>("show_errors");
0054   m_toolparameters->m_presamples_per_event = iConfig.getUntrackedParameter<int>("presamples_per_event");
0055   m_toolparameters->m_samples_per_event = iConfig.getUntrackedParameter<int>("samples_per_event");
0056 
0057   m_toolparameters->m_XML_file_mode = iConfig.getUntrackedParameter<int>("XML_file_mode");
0058   m_toolparameters->m_file_tag = iConfig.getUntrackedParameter<std::string>("file_tag");
0059   m_toolparameters->m_user_output_directory = iConfig.getUntrackedParameter<std::string>("user_output_directory");
0060 
0061   std::string out_dir = m_toolparameters->m_user_output_directory;
0062   while (out_dir.find_last_of('/') == out_dir.length() - 1)
0063     out_dir.erase(out_dir.find_last_of('/'));
0064   m_toolparameters->m_output_directory = out_dir + "/" + (m_toolparameters->m_file_tag) + "/";
0065 
0066   m_tool = new HtrXmlPatternTool(m_toolparameters);
0067 }
0068 
0069 HtrXmlPattern::~HtrXmlPattern() {
0070   delete m_tool;
0071   delete m_toolparameters;
0072 }
0073 
0074 // ------------ method called to for each event  ------------
0075 void HtrXmlPattern::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0076   using namespace std;
0077 
0078   if (m_filled)
0079     return;
0080 
0081   // Get the HCAL Electronics Map from the Event setup
0082   const auto pSetup = iSetup.getHandle(m_hcalElectronicsMapToken);
0083   const HcalElectronicsMap* readoutMap = pSetup->getHcalMapping();
0084 
0085   if (m_fill_by_hand) {
0086     do_hand_fill(readoutMap);
0087     m_filled = true;
0088     return;
0089   }
0090 
0091   std::vector<edm::Handle<HBHEDigiCollection> > hbhe;
0092   std::vector<edm::Handle<HODigiCollection> > ho;
0093   std::vector<edm::Handle<HFDigiCollection> > hf;
0094   std::vector<edm::Handle<ZDCDigiCollection> > zdc;
0095   std::vector<edm::Handle<HcalCalibDigiCollection> > hc;
0096   std::vector<edm::Handle<HcalTrigPrimDigiCollection> > htp;
0097   std::vector<edm::Handle<HcalHistogramDigiCollection> > hh;
0098 
0099   //iEvent.getManyByType(hbhe);
0100   throw cms::Exception("UnsupportedFunction") << "HtrXmlPattern::analyze: "
0101                                               << "getManyByType has not been supported by the Framework since 2015. "
0102                                               << "This module has been broken since then. Maybe it should be deleted. "
0103                                               << "Another possibility is to upgrade to use GetterOfProducts instead.";
0104 
0105   if (hbhe.empty()) {
0106     edm::LogPrint("HtrXmlPattern") << "No HB/HE Digis.";
0107   } else {
0108     std::vector<edm::Handle<HBHEDigiCollection> >::iterator i;
0109     for (i = hbhe.begin(); i != hbhe.end(); i++) {
0110       const HBHEDigiCollection& c = *(*i);
0111 
0112       int count = 0;
0113       for (HBHEDigiCollection::const_iterator j = c.begin(); j != c.end(); j++) {
0114         const HcalElectronicsId HEID = readoutMap->lookup(j->id());
0115         m_tool->Fill(HEID, j);
0116 
0117         if (count++ < m_sets_to_show || m_sets_to_show < 0) {
0118           edm::LogPrint("HtrXmlPattern") << *j;
0119           edm::LogPrint("HtrXmlPattern") << HEID;
0120           edm::LogPrint("HtrXmlPattern") << "count: " << count;
0121         }
0122       }
0123       if (m_sets_to_show != 0)
0124         edm::LogPrint("HtrXmlPattern") << "HB/HE count: " << count;
0125     }
0126   }
0127 
0128   //iEvent.getManyByType(hf);
0129   throw cms::Exception("UnsupportedFunction") << "HtrXmlPattern::analyze: "
0130                                               << "getManyByType has not been supported by the Framework since 2015. "
0131                                               << "This module has been broken since then. Maybe it should be deleted. "
0132                                               << "Another possibility is to upgrade to use GetterOfProducts instead.";
0133 
0134   if (hf.empty()) {
0135     edm::LogPrint("HtrXmlPattern") << "No HF Digis.";
0136   } else {
0137     std::vector<edm::Handle<HFDigiCollection> >::iterator i;
0138     for (i = hf.begin(); i != hf.end(); i++) {
0139       const HFDigiCollection& c = *(*i);
0140 
0141       int count = 0;
0142       for (HFDigiCollection::const_iterator j = c.begin(); j != c.end(); j++) {
0143         const HcalElectronicsId HEID = readoutMap->lookup(j->id());
0144         m_tool->Fill(HEID, j);
0145 
0146         if (count++ < m_sets_to_show || m_sets_to_show < 0) {
0147           edm::LogPrint("HtrXmlPattern") << *j;
0148           edm::LogPrint("HtrXmlPattern") << HEID;
0149           edm::LogPrint("HtrXmlPattern") << "count: " << count;
0150         }
0151       }
0152       if (m_sets_to_show != 0)
0153         edm::LogPrint("HtrXmlPattern") << "HF    count: " << count;
0154     }
0155   }
0156 
0157   //iEvent.getManyByType(ho);
0158   throw cms::Exception("UnsupportedFunction") << "HtrXmlPattern::analyze: "
0159                                               << "getManyByType has not been supported by the Framework since 2015. "
0160                                               << "This module has been broken since then. Maybe it should be deleted. "
0161                                               << "Another possibility is to upgrade to use GetterOfProducts instead.";
0162 
0163   if (ho.empty()) {
0164     edm::LogPrint("HtrXmlPattern") << "No HO Digis.";
0165   } else {
0166     std::vector<edm::Handle<HODigiCollection> >::iterator i;
0167     for (i = ho.begin(); i != ho.end(); i++) {
0168       const HODigiCollection& c = *(*i);
0169 
0170       int count = 0;
0171       for (HODigiCollection::const_iterator j = c.begin(); j != c.end(); j++) {
0172         const HcalElectronicsId HEID = readoutMap->lookup(j->id());
0173         m_tool->Fill(HEID, j);
0174 
0175         if (count++ < m_sets_to_show || m_sets_to_show < 0) {
0176           edm::LogPrint("HtrXmlPattern") << *j;
0177           edm::LogPrint("HtrXmlPattern") << HEID;
0178           edm::LogPrint("HtrXmlPattern") << "count: " << count;
0179         }
0180       }
0181       if (m_sets_to_show != 0)
0182         edm::LogPrint("HtrXmlPattern") << "HO    count: " << count;
0183     }
0184   }
0185 
0186   edm::LogPrint("HtrXmlPattern");
0187 }
0188 
0189 void HtrXmlPattern::do_hand_fill(const HcalElectronicsMap* emap) {
0190   HtrXmlPatternSet* hxps = m_tool->GetPatternSet();
0191 
0192   for (int iCrate = 0; iCrate < ChannelPattern::NUM_CRATES; iCrate++) {
0193     CrateData* cd = hxps->getCrate(iCrate);
0194     if (!cd)
0195       continue;
0196     for (int iSlot = 0; iSlot < ChannelPattern::NUM_SLOTS; iSlot++) {
0197       for (int iTb = 0; iTb < 2; iTb++) {
0198         HalfHtrData* hhd = cd->getHalfHtrData(iSlot, iTb);
0199         if (!hhd)
0200           continue;
0201         for (int iChannel = 1; iChannel < 25; iChannel++) {
0202           ChannelPattern* cp = hhd->getPattern(iChannel);
0203           if (!cp)
0204             continue;
0205           cp->Fill_by_hand(emap, m_hand_pattern_number);
0206         }
0207       }
0208     }
0209   }
0210 }
0211 
0212 // ------------ method called once each job just after ending the event loop  ------------
0213 void HtrXmlPattern::endJob() {
0214   bool modeg0 = m_toolparameters->m_XML_file_mode > 0;
0215   if (modeg0 || m_write_root_file)
0216     m_tool->prepareDirs();
0217   if (modeg0)
0218     m_tool->writeXML();
0219   if (m_write_root_file)
0220     m_tool->createHists();
0221 }
0222 
0223 DEFINE_FWK_MODULE(HtrXmlPattern);