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
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 "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
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
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
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
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
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
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);