Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:23

0001 // -*- C++ -*-
0002 //
0003 // Package:    SiPixelCondObjForHLTReader
0004 // Class:      SiPixelCondObjForHLTReader
0005 //
0006 /**\class SiPixelCondObjForHLTReader SiPixelCondObjForHLTReader.h SiPixel/plugins/SiPixelCondObjForHLTReader.cc
0007 
0008  Description: Test analyzer for reading pixel calibration from the DB
0009 
0010  Implementation:
0011      <Notes on implementation>
0012 */
0013 //
0014 // Original Author:  Vincenzo CHIOCHIA
0015 //         Created:  Tue Oct 17 17:40:56 CEST 2006
0016 // $Id: SiPixelCondObjForHLTReader.h,v 1.7 2009/05/28 22:12:55 dlange Exp $
0017 //
0018 //
0019 
0020 // system includes
0021 #include <memory>
0022 
0023 // user includes
0024 #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTService.h"
0025 #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationForHLTSimService.h"
0026 #include "CalibTracker/SiPixelESProducers/interface/SiPixelGainCalibrationServiceBase.h"
0027 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0028 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0029 #include "FWCore/Framework/interface/Event.h"
0030 #include "FWCore/Framework/interface/EventSetup.h"
0031 #include "FWCore/Framework/interface/Frameworkfwd.h"
0032 #include "FWCore/Framework/interface/MakerMacros.h"
0033 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0034 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0035 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0036 #include "FWCore/ServiceRegistry/interface/Service.h"
0037 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0038 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0039 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0040 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0041 
0042 // ROOT includes
0043 #include "TROOT.h"
0044 #include "TFile.h"
0045 #include "TTree.h"
0046 #include "TBranch.h"
0047 #include "TH1F.h"
0048 
0049 namespace cms {
0050   class SiPixelCondObjForHLTReader : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0051   public:
0052     explicit SiPixelCondObjForHLTReader(const edm::ParameterSet &iConfig);
0053 
0054     ~SiPixelCondObjForHLTReader() override = default;
0055 
0056     static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0057     void analyze(const edm::Event &, const edm::EventSetup &) override;
0058     void endJob() override;
0059 
0060   private:
0061     edm::ParameterSet conf_;
0062     //edm::ESHandle<SiPixelGainCalibration> SiPixelGainCalibration_;
0063     const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomToken_;
0064     std::unique_ptr<SiPixelGainCalibrationServiceBase> SiPixelGainCalibrationService_;
0065 
0066     std::map<uint32_t, TH1F *> _TH1F_Pedestals_m;
0067     std::map<uint32_t, TH1F *> _TH1F_Gains_m;
0068     std::map<uint32_t, double> _deadfrac_m;
0069     std::map<uint32_t, double> _noisyfrac_m;
0070 
0071     TH1F *_TH1F_Dead_sum;
0072     TH1F *_TH1F_Noisy_sum;
0073     TH1F *_TH1F_Gains_sum;
0074     TH1F *_TH1F_Pedestals_sum;
0075     TH1F *_TH1F_Dead_all;
0076     TH1F *_TH1F_Noisy_all;
0077     TH1F *_TH1F_Gains_all;
0078     TH1F *_TH1F_Pedestals_all;
0079     TH1F *_TH1F_Gains_bpix;
0080     TH1F *_TH1F_Gains_fpix;
0081     TH1F *_TH1F_Pedestals_bpix;
0082     TH1F *_TH1F_Pedestals_fpix;
0083   };
0084 }  // namespace cms
0085 
0086 namespace cms {
0087   SiPixelCondObjForHLTReader::SiPixelCondObjForHLTReader(const edm::ParameterSet &conf)
0088       : conf_(conf), tkGeomToken_(esConsumes()) {
0089     if (conf_.getParameter<bool>("useSimRcd"))
0090       SiPixelGainCalibrationService_ =
0091           std::make_unique<SiPixelGainCalibrationForHLTSimService>(conf_, consumesCollector());
0092     else
0093       SiPixelGainCalibrationService_ =
0094           std::make_unique<SiPixelGainCalibrationForHLTService>(conf_, consumesCollector());
0095   }
0096 
0097   void SiPixelCondObjForHLTReader::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) {
0098     //Create Subdirectories
0099     edm::Service<TFileService> fs;
0100     TFileDirectory subDirPed = fs->mkdir("Pedestals");
0101     TFileDirectory subDirGain = fs->mkdir("Gains");
0102     char name[128];
0103 
0104     unsigned int nmodules = 0;
0105     uint32_t nchannels = 0;
0106     uint32_t ndead = 0;
0107     uint32_t nnoisy = 0;
0108 
0109     // Get the calibration data
0110     SiPixelGainCalibrationService_->setESObjects(iSetup);
0111     edm::LogInfo("SiPixelCondObjForHLTReader")
0112         << "[SiPixelCondObjForHLTReader::beginJob] End Reading CondObjForHLTects" << std::endl;
0113 
0114     // Get the Geometry
0115     const TrackerGeometry *tkgeom = &iSetup.getData(tkGeomToken_);
0116     edm::LogInfo("SiPixelCondObjForHLTReader") << " There are " << tkgeom->dets().size() << " detectors" << std::endl;
0117 
0118     // Get the list of DetId's
0119     std::vector<uint32_t> vdetId_ = SiPixelGainCalibrationService_->getDetIds();
0120 
0121     //Create histograms
0122     _TH1F_Dead_sum = fs->make<TH1F>(
0123         "Summary_dead", "Dead pixel fraction (0=dead, 1=alive)", vdetId_.size() + 1, 0, vdetId_.size() + 1);
0124     _TH1F_Dead_all = fs->make<TH1F>("DeadAll",
0125                                     "Dead pixel fraction (0=dead, 1=alive)",
0126                                     50,
0127                                     0.,
0128                                     conf_.getUntrackedParameter<double>("maxRangeDeadPixHist", 0.001));
0129     _TH1F_Noisy_sum = fs->make<TH1F>(
0130         "Summary_noisy", "Noisy pixel fraction (0=noisy, 1=alive)", vdetId_.size() + 1, 0, vdetId_.size() + 1);
0131     _TH1F_Noisy_all = fs->make<TH1F>("NoisyAll",
0132                                      "Noisy pixel fraction (0=noisy, 1=alive)",
0133                                      50,
0134                                      0.,
0135                                      conf_.getUntrackedParameter<double>("maxRangeDeadPixHist", 0.001));
0136     _TH1F_Gains_sum = fs->make<TH1F>("Summary_Gain", "Gain Summary", vdetId_.size() + 1, 0, vdetId_.size() + 1);
0137     _TH1F_Pedestals_sum =
0138         fs->make<TH1F>("Summary_Pedestal", "Pedestal Summary", vdetId_.size() + 1, 0, vdetId_.size() + 1);
0139     _TH1F_Pedestals_all = fs->make<TH1F>("PedestalsAll", "all Pedestals", 350, -100, 250);
0140     _TH1F_Pedestals_bpix = fs->make<TH1F>("PedestalsBpix", "bpix Pedestals", 350, -100, 250);
0141     _TH1F_Pedestals_fpix = fs->make<TH1F>("PedestalsFpix", "fpix Pedestals", 350, -100, 250);
0142     _TH1F_Gains_all = fs->make<TH1F>("GainsAll", "all Gains", 100, 0, 10);
0143     _TH1F_Gains_bpix = fs->make<TH1F>("GainsBpix", "bpix Gains", 100, 0, 10);
0144     _TH1F_Gains_fpix = fs->make<TH1F>("GainsFpix", "fpix Gains", 100, 0, 10);
0145 
0146     TTree *tree = new TTree("tree", "tree");
0147     uint32_t detid;
0148     double gainmeanfortree, gainrmsfortree, pedmeanfortree, pedrmsfortree;
0149     tree->Branch("detid", &detid, "detid/I");
0150     tree->Branch("ped_mean", &pedmeanfortree, "ped_mean/D");
0151     tree->Branch("ped_rms", &pedrmsfortree, "ped_rms/D");
0152     tree->Branch("gain_mean", &gainmeanfortree, "gain_mean/D");
0153     tree->Branch("gain_rms", &gainrmsfortree, "gain_rms/D");
0154 
0155     // Loop over DetId's
0156     int ibin = 1;
0157     for (std::vector<uint32_t>::const_iterator detid_iter = vdetId_.begin(); detid_iter != vdetId_.end();
0158          detid_iter++) {
0159       detid = *detid_iter;
0160 
0161       sprintf(name, "Pedestals_%d", detid);
0162       _TH1F_Pedestals_m[detid] = subDirPed.make<TH1F>(name, name, 350, -100., 250.);
0163       sprintf(name, "Gains_%d", detid);
0164       _TH1F_Gains_m[detid] = subDirGain.make<TH1F>(name, name, 100, 0., 10.);
0165 
0166       DetId detIdObject(detid);
0167       const PixelGeomDetUnit *_PixelGeomDetUnit =
0168           dynamic_cast<const PixelGeomDetUnit *>(tkgeom->idToDetUnit(DetId(detid)));
0169       if (_PixelGeomDetUnit == nullptr) {
0170         edm::LogError("SiPixelCondObjHLTDisplay") << "[SiPixelCondObjHLTReader::beginJob] the detID " << detid
0171                                                   << " doesn't seem to belong to Tracker" << std::endl;
0172         continue;
0173       }
0174 
0175       _deadfrac_m[detid] = 0.;
0176       _noisyfrac_m[detid] = 0.;
0177 
0178       nmodules++;
0179 
0180       const GeomDetUnit *geoUnit = tkgeom->idToDetUnit(detIdObject);
0181       const PixelGeomDetUnit *pixDet = dynamic_cast<const PixelGeomDetUnit *>(geoUnit);
0182       const PixelTopology &topol = pixDet->specificTopology();
0183 
0184       // Get the module sizes.
0185       int nrows = topol.nrows();     // rows in x
0186       int ncols = topol.ncolumns();  // cols in y
0187       float nchannelspermod = 0;
0188 
0189       for (int col_iter = 0; col_iter < ncols; col_iter++) {
0190         for (int row_iter = 0; row_iter < nrows; row_iter++) {
0191           nchannelspermod++;
0192           nchannels++;
0193 
0194           if (SiPixelGainCalibrationService_->isDead(detid, col_iter, row_iter)) {
0195             //      edm::LogPrint("SiPixelCondObjForHLTReader") << "found dead pixel " << detid << " " <<col_iter << "," << row_iter << std::endl;
0196             ndead++;
0197             _deadfrac_m[detid]++;
0198             continue;
0199           } else if (SiPixelGainCalibrationService_->isNoisy(detid, col_iter, row_iter)) {
0200             //      edm::LogPrint("SiPixelCondObjForHLTReader") << "found noisy pixel " << detid << " " <<col_iter << "," << row_iter << std::endl;
0201             nnoisy++;
0202             _noisyfrac_m[detid]++;
0203             continue;
0204           }
0205 
0206           float gain = SiPixelGainCalibrationService_->getGain(detid, col_iter, row_iter);
0207           _TH1F_Gains_m[detid]->Fill(gain);
0208           _TH1F_Gains_all->Fill(gain);
0209 
0210           if (detIdObject.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel))
0211             _TH1F_Gains_bpix->Fill(gain);
0212           if (detIdObject.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap))
0213             _TH1F_Gains_fpix->Fill(gain);
0214 
0215           float ped = SiPixelGainCalibrationService_->getPedestal(detid, col_iter, row_iter);
0216           _TH1F_Pedestals_m[detid]->Fill(ped);
0217           _TH1F_Pedestals_all->Fill(ped);
0218           //     edm::LogPrint("SiPixelCondObjForHLTReader")<<"detid  "<<detid<<"     ped "<<ped<<std::endl;
0219 
0220           if (detIdObject.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel))
0221             _TH1F_Pedestals_bpix->Fill(ped);
0222           if (detIdObject.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap))
0223             _TH1F_Pedestals_fpix->Fill(ped);
0224 
0225           //     edm::LogPrint("SiPixelCondObjForHLTReader") <<"    DetId "<<detid<<"       Col "<<col_iter<<" Row "<<row_iter<<" Ped "<<ped<<" Gain "<<gain<<std::endl;
0226         }
0227       }
0228 
0229       _deadfrac_m[detid] /= nchannelspermod;
0230       _noisyfrac_m[detid] /= nchannelspermod;
0231       _TH1F_Dead_sum->SetBinContent(ibin, _deadfrac_m[detid]);
0232       _TH1F_Dead_all->Fill(_deadfrac_m[detid]);
0233       _TH1F_Noisy_sum->SetBinContent(ibin, _noisyfrac_m[detid]);
0234       _TH1F_Noisy_all->Fill(_noisyfrac_m[detid]);
0235       _TH1F_Gains_sum->SetBinContent(ibin, _TH1F_Gains_m[detid]->GetMean());
0236       _TH1F_Gains_sum->SetBinError(ibin, _TH1F_Gains_m[detid]->GetRMS());
0237       _TH1F_Pedestals_sum->SetBinContent(ibin, _TH1F_Pedestals_m[detid]->GetMean());
0238       _TH1F_Pedestals_sum->SetBinError(ibin, _TH1F_Pedestals_m[detid]->GetRMS());
0239 
0240       gainmeanfortree = _TH1F_Gains_m[detid]->GetMean();
0241       gainrmsfortree = _TH1F_Gains_m[detid]->GetRMS();
0242       pedmeanfortree = _TH1F_Pedestals_m[detid]->GetMean();
0243       pedrmsfortree = _TH1F_Pedestals_m[detid]->GetRMS();
0244       //edm::LogPrint("SiPixelCondObjForHLTReader")<<"DetId "<<detid<<"       GainMean "<<gainmeanfortree<<" RMS "<<gainrmsfortree<<"      PedMean "<<pedmeanfortree<<" RMS "<<pedrmsfortree<<std::endl;
0245       tree->Fill();
0246 
0247       ibin++;
0248     }
0249 
0250     edm::LogInfo("SiPixelCondObjForHLTReader")
0251         << "[SiPixelCondObjForHLTReader::analyze] ---> PIXEL Modules  " << nmodules << std::endl;
0252     edm::LogInfo("SiPixelCondObjForHLTReader")
0253         << "[SiPixelCondObjForHLTReader::analyze] ---> PIXEL Channels (i.e. Number of Columns)" << nchannels
0254         << std::endl;
0255 
0256     edm::LogPrint("SiPixelCondObjForHLTReader") << " ---> SUMMARY :" << std::endl;
0257     edm::LogPrint("SiPixelCondObjForHLTReader") << "Encounted " << ndead << " dead pixels" << std::endl;
0258     edm::LogPrint("SiPixelCondObjForHLTReader") << "Encounted " << nnoisy << " noisy pixels" << std::endl;
0259     edm::LogPrint("SiPixelCondObjForHLTReader")
0260         << "The Gain Mean is " << _TH1F_Gains_all->GetMean() << " with rms " << _TH1F_Gains_all->GetRMS() << std::endl;
0261     edm::LogPrint("SiPixelCondObjForHLTReader") << "         in BPIX " << _TH1F_Gains_bpix->GetMean() << " with rms "
0262                                                 << _TH1F_Gains_bpix->GetRMS() << std::endl;
0263     edm::LogPrint("SiPixelCondObjForHLTReader") << "         in FPIX " << _TH1F_Gains_fpix->GetMean() << " with rms "
0264                                                 << _TH1F_Gains_fpix->GetRMS() << std::endl;
0265     edm::LogPrint("SiPixelCondObjForHLTReader") << "The Ped Mean is " << _TH1F_Pedestals_all->GetMean() << " with rms "
0266                                                 << _TH1F_Pedestals_all->GetRMS() << std::endl;
0267     edm::LogPrint("SiPixelCondObjForHLTReader") << "         in BPIX " << _TH1F_Pedestals_bpix->GetMean()
0268                                                 << " with rms " << _TH1F_Pedestals_bpix->GetRMS() << std::endl;
0269     edm::LogPrint("SiPixelCondObjForHLTReader") << "         in FPIX " << _TH1F_Pedestals_fpix->GetMean()
0270                                                 << " with rms " << _TH1F_Pedestals_fpix->GetRMS() << std::endl;
0271   }
0272 
0273   // ------------ method called once each job just after ending the event loop  ------------
0274   void SiPixelCondObjForHLTReader::endJob() {
0275     edm::LogPrint("SiPixelCondObjForHLTReader") << " ---> End job " << std::endl;
0276   }
0277 
0278   void SiPixelCondObjForHLTReader::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0279     edm::ParameterSetDescription desc;
0280     desc.setComment("EDAnalyzer to read per-module SiPixelGainCalibrationForHLT payloads in the EventSetup");
0281     desc.add<bool>("useSimRcd", false);
0282     desc.addUntracked<double>("maxRangeDeadPixHist", 0.001);
0283     descriptions.addWithDefaultLabel(desc);
0284   }
0285 
0286 }  // namespace cms
0287 
0288 using namespace cms;
0289 DEFINE_FWK_MODULE(SiPixelCondObjForHLTReader);