File indexing completed on 2024-04-06 12:21:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include "FWCore/MessageLogger/interface/MessageLogger.h" // Logger
0020 #include "FWCore/ServiceRegistry/interface/Service.h" // Framework services
0021 #include "RctDigiToSourceCardText.h"
0022
0023 using namespace edm;
0024 using namespace std;
0025
0026
0027 const static int NUM_RCT_CRATES = 18;
0028
0029 RctDigiToSourceCardText::RctDigiToSourceCardText(const edm::ParameterSet &iConfig)
0030 : m_rctInputLabel(iConfig.getParameter<edm::InputTag>("RctInputLabel")),
0031 m_textFileName(iConfig.getParameter<std::string>("TextFileName")),
0032 m_nevt(0) {
0033
0034 m_file.open(m_textFileName.c_str(), std::ios::out);
0035
0036 if (!m_file.good()) {
0037 throw cms::Exception("RctDigiToSourceCardTextFileOpenError")
0038 << "RctDigiToSourceCardText::RctDigiToSourceCardText : "
0039 << " couldn't open the file " << m_textFileName << " for writing" << std::endl;
0040 }
0041
0042
0043 SourceCardRouting m_scRouting;
0044 }
0045
0046 RctDigiToSourceCardText::~RctDigiToSourceCardText() {
0047
0048 m_file.close();
0049 }
0050
0051
0052 void RctDigiToSourceCardText::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0053
0054 Handle<L1CaloEmCollection> em;
0055 Handle<L1CaloRegionCollection> rgn;
0056 iEvent.getByLabel(m_rctInputLabel, em);
0057 iEvent.getByLabel(m_rctInputLabel, rgn);
0058
0059
0060 int RoutingMode;
0061 unsigned short logicalCardID;
0062 std::string dataString;
0063
0064
0065 unsigned short eIsoRank[18][4] = {{0}};
0066 unsigned short eIsoCardId[18][4] = {{0}};
0067 unsigned short eIsoRegionId[18][4] = {{0}};
0068 unsigned short eNonIsoRank[18][4] = {{0}};
0069 unsigned short eNonIsoCardId[18][4] = {{0}};
0070 unsigned short eNonIsoRegionId[18][4] = {{0}};
0071
0072
0073 unsigned numIsoEM[18] = {0};
0074 unsigned numNonIsoEM[18] = {0};
0075
0076 for (L1CaloEmCollection::const_iterator iem = em->begin(); iem != em->end(); iem++) {
0077 if (iem->isolated()) {
0078 eIsoRank[iem->rctCrate()][numIsoEM[iem->rctCrate()]] = iem->rank();
0079 eIsoCardId[iem->rctCrate()][numIsoEM[iem->rctCrate()]] = iem->rctCard();
0080 eIsoRegionId[iem->rctCrate()][numIsoEM[iem->rctCrate()]] = iem->rctRegion();
0081 numIsoEM[iem->rctCrate()]++;
0082 } else {
0083 eNonIsoRank[iem->rctCrate()][numNonIsoEM[iem->rctCrate()]] = iem->rank();
0084 eNonIsoCardId[iem->rctCrate()][numNonIsoEM[iem->rctCrate()]] = iem->rctCard();
0085 eNonIsoRegionId[iem->rctCrate()][numNonIsoEM[iem->rctCrate()]] = iem->rctRegion();
0086 numNonIsoEM[iem->rctCrate()]++;
0087 }
0088
0089 LogDebug("Electrons") << "Rank=" << iem->rank() << " Card=" << iem->rctCard() << " Region=" << iem->rctRegion()
0090 << " Crate=" << iem->rctCrate() << " Isolated=" << iem->isolated();
0091 }
0092
0093
0094 unsigned short RC[18][7][2] = {{{0}}};
0095 unsigned short RCof[18][7][2] = {{{0}}};
0096 unsigned short RCtau[18][7][2] = {{{0}}};
0097 unsigned short HF[18][4][2] = {{{0}}};
0098 unsigned short HFQ[18][4][2] = {{{0}}};
0099 unsigned short MIPbits[18][7][2] = {{{0}}};
0100 unsigned short Qbits[18][7][2] = {{{0}}};
0101
0102
0103 for (L1CaloRegionCollection::const_iterator irgn = rgn->begin(); irgn != rgn->end(); irgn++) {
0104 if (irgn->id().isHf()) {
0105 HF[irgn->rctCrate()][irgn->id().rctEta() - 7][irgn->id().rctPhi()] = irgn->et();
0106 HFQ[irgn->rctCrate()][irgn->id().rctEta() - 7][irgn->id().rctPhi()] = irgn->fineGrain();
0107
0108 LogDebug("HFRegions") << "Et=" << irgn->et() << " FineGrain=" << irgn->fineGrain()
0109 << " Eta=" << irgn->id().rctEta() << " Phi=" << irgn->id().rctPhi()
0110 << " Crate=" << irgn->rctCrate();
0111 } else {
0112 RC[irgn->rctCrate()][irgn->rctCard()][irgn->rctRegionIndex()] = irgn->et();
0113 RCof[irgn->rctCrate()][irgn->rctCard()][irgn->rctRegionIndex()] = irgn->overFlow();
0114 RCtau[irgn->rctCrate()][irgn->rctCard()][irgn->rctRegionIndex()] = irgn->tauVeto();
0115 MIPbits[irgn->rctCrate()][irgn->rctCard()][irgn->rctRegionIndex()] = irgn->mip();
0116 Qbits[irgn->rctCrate()][irgn->rctCard()][irgn->rctRegionIndex()] = irgn->quiet();
0117
0118 LogDebug("Regions") << "Et=" << irgn->et() << " OverFlow=" << irgn->overFlow() << " tauVeto=" << irgn->tauVeto()
0119 << " mip=" << irgn->mip() << " quiet=" << irgn->quiet() << " Card=" << irgn->rctCard()
0120 << " Region=" << irgn->rctRegionIndex() << " Crate=" << irgn->rctCrate();
0121 }
0122 }
0123
0124 for (int crate = 0; crate < NUM_RCT_CRATES; crate++) {
0125
0126 RoutingMode = 0;
0127 m_scRouting.RoutingModetoLogicalCardID(logicalCardID, RoutingMode, crate);
0128
0129
0130 m_scRouting.EMUtoSTRING(logicalCardID,
0131 m_nevt,
0132 eIsoRank[crate],
0133 eIsoCardId[crate],
0134 eIsoRegionId[crate],
0135 eNonIsoRank[crate],
0136 eNonIsoCardId[crate],
0137 eNonIsoRegionId[crate],
0138 MIPbits[crate],
0139 Qbits[crate],
0140 dataString);
0141
0142
0143 m_file << dataString;
0144
0145
0146 RoutingMode = 1;
0147 m_scRouting.RoutingModetoLogicalCardID(logicalCardID, RoutingMode, crate);
0148
0149
0150 m_scRouting.RC56HFtoSTRING(
0151 logicalCardID, m_nevt, RC[crate], RCof[crate], RCtau[crate], HF[crate], HFQ[crate], dataString);
0152
0153
0154 m_file << dataString;
0155
0156
0157 RoutingMode = 2;
0158 m_scRouting.RoutingModetoLogicalCardID(logicalCardID, RoutingMode, crate);
0159
0160
0161 m_scRouting.RC012toSTRING(logicalCardID, m_nevt, RC[crate], RCof[crate], RCtau[crate], dataString);
0162
0163
0164 m_file << dataString;
0165
0166
0167 if (crate < 9) {
0168
0169 RoutingMode = 3;
0170 m_scRouting.RoutingModetoLogicalCardID(logicalCardID, RoutingMode, crate);
0171
0172
0173 m_scRouting.RC234toSTRING(logicalCardID,
0174 m_nevt,
0175 RC[crate],
0176 RCof[crate],
0177 RCtau[crate],
0178 RC[crate + 9],
0179 RCof[crate + 9],
0180 RCtau[crate + 9],
0181 dataString);
0182
0183
0184 m_file << dataString;
0185 }
0186 }
0187
0188
0189 m_file << flush;
0190
0191 m_nevt++;
0192 }