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
0012 #include <memory>
0013
0014
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
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
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
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);