Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:00:05

0001 // -*- C++ -*-
0002 //
0003 // Package:   EcalURecHitHists
0004 // Class:     EcalURecHitHists
0005 //
0006 /**\class EcalURecHitHists EcalURecHitHists.cc
0007 
0008  Description: <one line class summary>
0009 
0010  Implementation:
0011      <Notes on implementation>
0012 */
0013 //
0014 // Original Author:  Seth COOPER
0015 //         Created:  Th Nov 22 5:46:22 CEST 2007
0016 //
0017 //
0018 
0019 #include "CaloOnlineTools/EcalTools/plugins/EcalURecHitHists.h"
0020 
0021 using namespace cms;
0022 using namespace edm;
0023 using namespace std;
0024 
0025 //
0026 // constants, enums and typedefs
0027 //
0028 
0029 //
0030 // static data member definitions
0031 //
0032 
0033 //
0034 // constructors and destructor
0035 //
0036 EcalURecHitHists::EcalURecHitHists(const edm::ParameterSet& iConfig)
0037     : ebUncalibratedRecHitCollection_(iConfig.getParameter<edm::InputTag>("EBUncalibratedRecHitCollection")),
0038       eeUncalibratedRecHitCollection_(iConfig.getParameter<edm::InputTag>("EEUncalibratedRecHitCollection")),
0039       ebUncalibRecHitsToken_(consumes<EcalUncalibratedRecHitCollection>(ebUncalibratedRecHitCollection_)),
0040       eeUncalibRecHitsToken_(consumes<EcalUncalibratedRecHitCollection>(eeUncalibratedRecHitCollection_)),
0041       ecalMappingToken_(esConsumes<edm::Transition::BeginRun>()),
0042       runNum_(-1),
0043       histRangeMax_(iConfig.getUntrackedParameter<double>("histogramMaxRange", 200.0)),
0044       histRangeMin_(iConfig.getUntrackedParameter<double>("histogramMinRange", -10.0)),
0045       fileName_(iConfig.getUntrackedParameter<std::string>("fileName", std::string("ecalURechHitHists"))) {
0046   vector<int> listDefaults;
0047   listDefaults.push_back(-1);
0048 
0049   maskedChannels_ = iConfig.getUntrackedParameter<vector<int> >("maskedChannels", listDefaults);
0050   maskedFEDs_ = iConfig.getUntrackedParameter<vector<int> >("maskedFEDs", listDefaults);
0051 
0052   vector<string> defaultMaskedEBs;
0053   defaultMaskedEBs.push_back("none");
0054   maskedEBs_ = iConfig.getUntrackedParameter<vector<string> >("maskedEBs", defaultMaskedEBs);
0055 
0056   fedMap_ = new EcalFedMap();
0057   string title1 = "Uncalib Rec Hits (ADC counts)";
0058   string name1 = "URecHitsAllFEDs";
0059   int numBins = (int)round(histRangeMax_ - histRangeMin_) + 1;
0060   allFedsHist_ = new TH1F(name1.c_str(), title1.c_str(), numBins, histRangeMin_, histRangeMax_);
0061   title1 = "Jitter for all FEDs";
0062   name1 = "JitterAllFEDs";
0063   allFedsTimingHist_ = new TH1F(name1.c_str(), title1.c_str(), 14, -7, 7);
0064 
0065   // load up the maskedFED list with the proper FEDids
0066   if (maskedFEDs_[0] == -1) {
0067     //if "actual" EB id given, then convert to FEDid and put in listFEDs_
0068     if (maskedEBs_[0] != "none") {
0069       maskedFEDs_.clear();
0070       for (vector<string>::const_iterator ebItr = maskedEBs_.begin(); ebItr != maskedEBs_.end(); ++ebItr) {
0071         maskedFEDs_.push_back(fedMap_->getFedFromSlice(*ebItr));
0072       }
0073     }
0074   }
0075 }
0076 
0077 EcalURecHitHists::~EcalURecHitHists() {}
0078 
0079 //
0080 // member functions
0081 //
0082 
0083 // ------------ method called to for each event  ------------
0084 void EcalURecHitHists::analyze(edm::Event const& iEvent, edm::EventSetup const& iSetup) {
0085   int ievt = iEvent.id().event();
0086   Handle<EcalUncalibratedRecHitCollection> EBhits;
0087   Handle<EcalUncalibratedRecHitCollection> EEhits;
0088 
0089   iEvent.getByToken(ebUncalibRecHitsToken_, EBhits);
0090   LogDebug("EcalURecHitHists") << "event " << ievt << " hits collection size " << EBhits->size();
0091 
0092   iEvent.getByToken(eeUncalibRecHitsToken_, EEhits);
0093   LogDebug("EcalURecHitHists") << "event " << ievt << " hits collection size " << EEhits->size();
0094 
0095   for (EcalUncalibratedRecHitCollection::const_iterator hitItr = EBhits->begin(); hitItr != EBhits->end(); ++hitItr) {
0096     EcalUncalibratedRecHit hit = (*hitItr);
0097     EBDetId ebDet = hit.id();
0098     int ic = ebDet.ic();
0099     int hashedIndex = ebDet.hashedIndex();
0100     EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(ebDet);
0101     int FEDid = 600 + elecId.dccId();
0102     float ampli = hit.amplitude();
0103 
0104     vector<int>::iterator result;
0105     result = find(maskedFEDs_.begin(), maskedFEDs_.end(), FEDid);
0106     if (result != maskedFEDs_.end()) {
0107       LogWarning("EcalURecHitHists") << "skipping uncalRecHit for FED " << FEDid << " ; amplitude " << ampli;
0108       continue;
0109     }
0110 
0111     result = find(maskedChannels_.begin(), maskedChannels_.end(), hashedIndex);
0112     if (result != maskedChannels_.end()) {
0113       LogWarning("EcalURecHitHists") << "skipping uncalRecHit for channel: " << ic << " with amplitude " << ampli;
0114       continue;
0115     }
0116 
0117     // fill the proper hist
0118     TH1F* uRecHist = FEDsAndHists_[FEDid];
0119     TH1F* timingHist = FEDsAndTimingHists_[FEDid];
0120     if (uRecHist == nullptr) {
0121       initHists(FEDid);
0122       uRecHist = FEDsAndHists_[FEDid];
0123       timingHist = FEDsAndTimingHists_[FEDid];
0124     }
0125 
0126     uRecHist->Fill(ampli);
0127     allFedsHist_->Fill(ampli);
0128     timingHist->Fill(hit.jitter());
0129     allFedsTimingHist_->Fill(hit.jitter());
0130   }
0131 
0132   // Again for the endcap
0133   for (EcalUncalibratedRecHitCollection::const_iterator hitItr = EEhits->begin(); hitItr != EEhits->end(); ++hitItr) {
0134     EcalUncalibratedRecHit hit = (*hitItr);
0135     EEDetId eeDet = hit.id();
0136     int ic = eeDet.ic();
0137     int hashedIndex = eeDet.hashedIndex();
0138     EcalElectronicsId elecId = ecalElectronicsMap_->getElectronicsId(eeDet);
0139     int FEDid = 600 + elecId.dccId();
0140     float ampli = hit.amplitude();
0141 
0142     vector<int>::iterator result;
0143     result = find(maskedFEDs_.begin(), maskedFEDs_.end(), FEDid);
0144     if (result != maskedFEDs_.end()) {
0145       LogWarning("EcalURecHitHists") << "skipping uncalRecHit for FED " << FEDid << " ; amplitude " << ampli;
0146       continue;
0147     }
0148 
0149     result = find(maskedChannels_.begin(), maskedChannels_.end(), hashedIndex);
0150     if (result != maskedChannels_.end()) {
0151       LogWarning("EcalURecHitHists") << "skipping uncalRecHit for channel: " << ic << " with amplitude " << ampli;
0152       continue;
0153     }
0154 
0155     // fill the proper hist
0156     TH1F* uRecHist = FEDsAndHists_[FEDid];
0157     TH1F* timingHist = FEDsAndTimingHists_[FEDid];
0158     if (uRecHist == nullptr) {
0159       initHists(FEDid);
0160       uRecHist = FEDsAndHists_[FEDid];
0161       timingHist = FEDsAndTimingHists_[FEDid];
0162     }
0163 
0164     uRecHist->Fill(ampli);
0165     allFedsHist_->Fill(ampli);
0166     timingHist->Fill(hit.jitter());
0167     allFedsTimingHist_->Fill(hit.jitter());
0168   }
0169 
0170   if (runNum_ == -1) {
0171     runNum_ = iEvent.id().run();
0172   }
0173 }
0174 
0175 // insert the hist map into the map keyed by FED number
0176 void EcalURecHitHists::initHists(int FED) {
0177   using namespace std;
0178 
0179   string FEDid = intToString(FED);
0180   string title1 = "Uncalib Rec Hits (ADC counts) for ";
0181   title1.append(fedMap_->getSliceFromFed(FED));
0182   string name1 = "URecHitsFED";
0183   name1.append(intToString(FED));
0184   int numBins = (int)round(histRangeMax_ - histRangeMin_) + 1;
0185   TH1F* hist = new TH1F(name1.c_str(), title1.c_str(), numBins, histRangeMin_, histRangeMax_);
0186   FEDsAndHists_[FED] = hist;
0187   FEDsAndHists_[FED]->SetDirectory(nullptr);
0188 
0189   title1 = "Jitter for ";
0190   title1.append(fedMap_->getSliceFromFed(FED));
0191   name1 = "JitterFED";
0192   name1.append(intToString(FED));
0193   TH1F* timingHist = new TH1F(name1.c_str(), title1.c_str(), 14, -7, 7);
0194   FEDsAndTimingHists_[FED] = timingHist;
0195   FEDsAndTimingHists_[FED]->SetDirectory(nullptr);
0196 }
0197 
0198 // ------------ method called once each job just before starting event loop  ------------
0199 void EcalURecHitHists::beginRun(edm::Run const&, edm::EventSetup const& c) {
0200   ecalElectronicsMap_ = &c.getData(ecalMappingToken_);
0201 }
0202 
0203 void EcalURecHitHists::endRun(edm::Run const&, edm::EventSetup const& c) {}
0204 
0205 // ------------ method called once each job just after ending the event loop  ------------
0206 void EcalURecHitHists::endJob() {
0207   using namespace std;
0208   fileName_ += "-" + intToString(runNum_) + ".graph.root";
0209 
0210   TFile root_file_(fileName_.c_str(), "RECREATE");
0211 
0212   for (map<int, TH1F*>::const_iterator itr = FEDsAndHists_.begin(); itr != FEDsAndHists_.end(); ++itr) {
0213     string dir = fedMap_->getSliceFromFed(itr->first);
0214     TDirectory* FEDdir = gDirectory->mkdir(dir.c_str());
0215     FEDdir->cd();
0216 
0217     TH1F* hist = itr->second;
0218     if (hist != nullptr)
0219       hist->Write();
0220     else {
0221       cerr << "EcalPedHists: Error: This shouldn't happen!" << endl;
0222     }
0223     // Write out timing hist
0224     hist = FEDsAndTimingHists_[itr->first];
0225     if (hist != nullptr)
0226       hist->Write();
0227     else {
0228       cerr << "EcalPedHists: Error: This shouldn't happen!" << endl;
0229     }
0230     root_file_.cd();
0231   }
0232   allFedsHist_->Write();
0233   allFedsTimingHist_->Write();
0234   root_file_.Close();
0235 
0236   std::string channels;
0237   for (std::vector<int>::const_iterator itr = maskedChannels_.begin(); itr != maskedChannels_.end(); ++itr) {
0238     channels += intToString(*itr);
0239     channels += ",";
0240   }
0241 
0242   LogWarning("EcalMipGraphs") << "Masked channels are: " << channels << " and that is all!";
0243 }
0244 
0245 std::string EcalURecHitHists::intToString(int num) {
0246   using namespace std;
0247   ostringstream myStream;
0248   myStream << num << flush;
0249   return (myStream.str());  //returns the string form of the stringstream object
0250 }