Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:10:30

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