File indexing completed on 2023-05-17 02:07:43
0001
0002 #include <memory>
0003
0004
0005 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0006 #include "FWCore/Framework/interface/Frameworkfwd.h"
0007
0008 #include "FWCore/Framework/interface/Event.h"
0009 #include "FWCore/Framework/interface/MakerMacros.h"
0010
0011 #include "FWCore/ServiceRegistry/interface/Service.h"
0012
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014
0015 #include "DataFormats/L1CaloTrigger/interface/L1CaloCollections.h"
0016
0017 #include "L1Trigger/RegionalCaloTrigger/interface/L1RCTTestAnalyzer.h"
0018
0019 using std::cout;
0020 using std::endl;
0021 using std::string;
0022
0023
0024
0025
0026 L1RCTTestAnalyzer::L1RCTTestAnalyzer(const edm::ParameterSet &iConfig)
0027 : showEmCands(iConfig.getUntrackedParameter<bool>("showEmCands")),
0028 showRegionSums(iConfig.getUntrackedParameter<bool>("showRegionSums")),
0029 ecalDigisLabel(iConfig.getParameter<edm::InputTag>("ecalDigisLabel")),
0030 hcalDigisLabel(iConfig.getParameter<edm::InputTag>("hcalDigisLabel")),
0031 rctDigisLabel(iConfig.getParameter<edm::InputTag>("rctDigisLabel")) {
0032
0033
0034 usesResource(TFileService::kSharedResource);
0035 edm::Service<TFileService> fs;
0036
0037 emTree = fs->make<TTree>("emTree", "L1 RCT EM tree");
0038
0039
0040
0041
0042 emTree->Branch("emRank", &emRank);
0043 emTree->Branch("emIeta", &emIeta);
0044 emTree->Branch("emIphi", &emIphi);
0045 emTree->Branch("emIso", &emIso);
0046
0047 h_emRank = fs->make<TH1F>("emRank", "emRank", 64, 0., 64.);
0048 h_emRankOutOfTime = fs->make<TH1F>("emRankOutOfTime", "emRankOutOfTime", 64, 0., 64.);
0049 h_emIeta = fs->make<TH1F>("emIeta", "emIeta", 22, 0., 22.);
0050 h_emIphi = fs->make<TH1F>("emIphi", "emIphi", 18, 0., 18.);
0051 h_emIso = fs->make<TH1F>("emIso", "emIso", 2, 0., 2.);
0052 h_emRankInIetaIphi = fs->make<TH2F>("emRank2D", "emRank2D", 22, 0., 22., 18, 0., 18.);
0053 h_emIsoInIetaIphi = fs->make<TH2F>("emIso2D", "emIso2D", 22, 0., 22., 18, 0., 18.);
0054 h_emNonIsoInIetaIphi = fs->make<TH2F>("emNonIso2D", "emNonIso2D", 22, 0., 22., 18, 0., 18.);
0055 h_emCandTimeSample = fs->make<TH1F>("emCandTimeSample", "emCandTimeSample", 5, -2., 2.);
0056
0057 h_regionSum = fs->make<TH1F>("regionSum", "regionSum", 100, 0., 100.);
0058 h_regionIeta = fs->make<TH1F>("regionIeta", "regionIeta", 22, 0., 22.);
0059 h_regionIphi = fs->make<TH1F>("regionIphi", "regionIphi", 18, 0., 18.);
0060 h_regionMip = fs->make<TH1F>("regionMip", "regionMipBit", 2, 0., 2.);
0061 h_regionSumInIetaIphi = fs->make<TH2F>("regionSum2D", "regionSum2D", 22, 0., 22., 18, 0., 18.);
0062 h_regionFGInIetaIphi = fs->make<TH2F>("regionFG2D", "regionFG2D", 22, 0., 22., 18, 0., 18.);
0063
0064 h_towerMip = fs->make<TH1F>("towerMip", "towerMipBit", 2, 0., 2.);
0065
0066 h_ecalTimeSample = fs->make<TH1F>("ecalTimeSample", "ecalTimeSample", 10, 0., 10.);
0067 h_hcalTimeSample = fs->make<TH1F>("hcalTimeSample", "hcalTimeSample", 10, 0., 10.);
0068
0069
0070 }
0071
0072 L1RCTTestAnalyzer::~L1RCTTestAnalyzer() {
0073
0074
0075 }
0076
0077
0078
0079
0080
0081
0082 void L1RCTTestAnalyzer::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0083 using namespace edm;
0084 #ifdef THIS_IS_AN_EVENT_EXAMPLE
0085 Handle<ExampleData> pIn;
0086 iEvent.getByLabel("example", pIn);
0087 #endif
0088
0089 #ifdef THIS_IS_AN_EVENTSETUP_EXAMPLE
0090 ESHandle<SetupData> pSetup;
0091 iSetup.get<SetupRecord>().get(pSetup);
0092 #endif
0093
0094
0095 Handle<L1CaloEmCollection> rctEmCands;
0096 Handle<L1CaloRegionCollection> rctRegions;
0097 Handle<EcalTrigPrimDigiCollection> ecalColl;
0098 Handle<HcalTrigPrimDigiCollection> hcalColl;
0099
0100 L1CaloEmCollection::const_iterator em;
0101 L1CaloRegionCollection::const_iterator rgn;
0102 EcalTrigPrimDigiCollection::const_iterator ecal;
0103 HcalTrigPrimDigiCollection::const_iterator hcal;
0104
0105 iEvent.getByLabel(rctDigisLabel, rctEmCands);
0106 iEvent.getByLabel(rctDigisLabel, rctRegions);
0107 iEvent.getByLabel(ecalDigisLabel, ecalColl);
0108 iEvent.getByLabel(hcalDigisLabel, hcalColl);
0109
0110
0111 L1CaloEmCollection *myL1EmColl = new L1CaloEmCollection;
0112
0113 for (ecal = ecalColl->begin(); ecal != ecalColl->end(); ecal++) {
0114 for (unsigned short sample = 0; sample < (*ecal).size(); sample++) {
0115 h_ecalTimeSample->Fill(sample);
0116 }
0117 }
0118
0119 for (hcal = hcalColl->begin(); hcal != hcalColl->end(); hcal++) {
0120 h_towerMip->Fill((*hcal).SOI_fineGrain());
0121 for (unsigned short sample = 0; sample < (*hcal).size(); sample++) {
0122 h_hcalTimeSample->Fill(sample);
0123 }
0124 }
0125
0126 if (showEmCands) {
0127
0128 }
0129 for (em = rctEmCands->begin(); em != rctEmCands->end(); em++) {
0130
0131
0132 L1CaloEmCand *myL1EmCand = new L1CaloEmCand(*em);
0133 (*myL1EmColl).push_back(*myL1EmCand);
0134 delete myL1EmCand;
0135
0136 h_emCandTimeSample->Fill((*em).bx());
0137 if ((*em).bx() == 0) {
0138
0139
0140 if ((*em).rank() > 0) {
0141 h_emRank->Fill((*em).rank());
0142 h_emIeta->Fill((*em).regionId().ieta());
0143 h_emIphi->Fill((*em).regionId().iphi());
0144 h_emIso->Fill((*em).isolated());
0145 h_emRankInIetaIphi->Fill((*em).regionId().ieta(), (*em).regionId().iphi(), (*em).rank());
0146 if ((*em).isolated()) {
0147 h_emIsoInIetaIphi->Fill((*em).regionId().ieta(), (*em).regionId().iphi());
0148 } else {
0149 h_emNonIsoInIetaIphi->Fill((*em).regionId().ieta(), (*em).regionId().iphi());
0150 }
0151 }
0152
0153 if (showEmCands) {
0154 if ((*em).rank() > 0) {
0155
0156 unsigned short rgnPhi = 999;
0157 unsigned short rgn = (unsigned short)(*em).rctRegion();
0158 unsigned short card = (unsigned short)(*em).rctCard();
0159 unsigned short crate = (unsigned short)(*em).rctCrate();
0160
0161 if (card == 6) {
0162 rgnPhi = rgn;
0163 } else if (card < 6) {
0164 rgnPhi = (card % 2);
0165 } else {
0166 std::cout << "rgnPhi not assigned (still " << rgnPhi << ") -- Weird card number! " << card;
0167 }
0168
0169
0170 short eta_bin = (card / 2) * 2 + 1;
0171 if (card < 6) {
0172 eta_bin = eta_bin + rgn;
0173 }
0174 if (crate < 9) {
0175 eta_bin = -eta_bin;
0176 }
0177
0178
0179
0180
0181
0182 }
0183 }
0184 } else {
0185 h_emRankOutOfTime->Fill((*em).rank());
0186 }
0187 }
0188 if (showEmCands) {
0189
0190 }
0191
0192
0193
0194
0195 std::sort(myL1EmColl->begin(), myL1EmColl->end(), compareEmCands);
0196 std::reverse(myL1EmColl->begin(), myL1EmColl->end());
0197 for (em = myL1EmColl->begin(); em != myL1EmColl->end(); em++) {
0198 emRank.push_back((*em).rank());
0199 emIeta.push_back((*em).regionId().ieta());
0200 emIphi.push_back((*em).regionId().iphi());
0201 emIso.push_back((*em).isolated());
0202 }
0203 emTree->Fill();
0204
0205 if (showRegionSums) {
0206 std::cout << "Regions" << std::endl;
0207 }
0208 for (rgn = rctRegions->begin(); rgn != rctRegions->end(); rgn++) {
0209 if ((*rgn).bx() == 0) {
0210 if (showRegionSums && (*rgn).et() > 0) {
0211 std::cout << (*rgn) << std::endl;
0212 }
0213 if ((*rgn).et() > 0) {
0214 h_regionSum->Fill((*rgn).et());
0215 h_regionIeta->Fill((*rgn).gctEta());
0216 h_regionIphi->Fill((*rgn).gctPhi());
0217 h_regionSumInIetaIphi->Fill((*rgn).gctEta(), (*rgn).gctPhi(), (*rgn).et());
0218 h_regionFGInIetaIphi->Fill((*rgn).gctEta(), (*rgn).gctPhi(), (*rgn).fineGrain());
0219 }
0220 h_regionMip->Fill((*rgn).mip());
0221 }
0222 }
0223 if (showRegionSums) {
0224 std::cout << std::endl;
0225 }
0226
0227 emRank.clear();
0228 emIeta.clear();
0229 emIphi.clear();
0230 emIso.clear();
0231
0232 delete myL1EmColl;
0233 }
0234
0235 bool L1RCTTestAnalyzer::compareEmCands(const L1CaloEmCand &cand1, const L1CaloEmCand &cand2) {
0236 return (cand1.rank() < cand2.rank());
0237 }