File indexing completed on 2024-04-06 12:03:25
0001
0002 #include <cstdio>
0003 #include <iomanip> // std::setw
0004 #include <iostream>
0005 #include <sys/time.h>
0006
0007
0008 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0009 #include "CondFormats/DataRecord/interface/SiPixelVCalRcd.h"
0010 #include "CondFormats/DataRecord/interface/SiPixelVCalSimRcd.h"
0011 #include "CondFormats/SiPixelObjects/interface/SiPixelVCal.h"
0012 #include "DataFormats/DetId/interface/DetId.h"
0013 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0014 #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h"
0015 #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h"
0016 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/EventSetup.h"
0019 #include "FWCore/Framework/interface/Frameworkfwd.h"
0020 #include "FWCore/Framework/interface/MakerMacros.h"
0021 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0023 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0024 #include "FWCore/ServiceRegistry/interface/Service.h"
0025 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0026 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0027 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0028 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0029
0030
0031 #include "TFile.h"
0032 #include "TH2F.h"
0033 #include "TROOT.h"
0034 #include "TTree.h"
0035
0036 class SiPixelVCalReader : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0037 public:
0038 explicit SiPixelVCalReader(const edm::ParameterSet&);
0039 ~SiPixelVCalReader() override;
0040 void analyze(const edm::Event&, const edm::EventSetup&) override;
0041
0042 private:
0043
0044 const edm::ESGetToken<SiPixelVCal, SiPixelVCalSimRcd> siPixelVCalSimToken_;
0045 const edm::ESGetToken<SiPixelVCal, SiPixelVCalRcd> siPixelVCalToken_;
0046 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomToken_;
0047 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tkTopoToken_;
0048
0049 const bool printdebug_;
0050 const bool useSimRcd_;
0051
0052 TH1F* slopeBPix_;
0053 TH1F* slopeFPix_;
0054 TH1F* offsetBPix_;
0055 TH1F* offsetFPix_;
0056 };
0057
0058 using namespace cms;
0059
0060 SiPixelVCalReader::SiPixelVCalReader(const edm::ParameterSet& iConfig)
0061 : siPixelVCalSimToken_(esConsumes()),
0062 siPixelVCalToken_(esConsumes()),
0063 tkGeomToken_(esConsumes()),
0064 tkTopoToken_(esConsumes()),
0065 printdebug_(iConfig.getUntrackedParameter<bool>("printDebug", false)),
0066 useSimRcd_(iConfig.getParameter<bool>("useSimRcd")) {
0067 usesResource(TFileService::kSharedResource);
0068 }
0069
0070 SiPixelVCalReader::~SiPixelVCalReader() = default;
0071
0072 void SiPixelVCalReader::analyze(const edm::Event& e, const edm::EventSetup& iSetup) {
0073 const SiPixelVCal* siPixelVCal;
0074
0075
0076 if (useSimRcd_) {
0077 siPixelVCal = &iSetup.getData(siPixelVCalSimToken_);
0078 } else {
0079 siPixelVCal = &iSetup.getData(siPixelVCalToken_);
0080 }
0081 edm::LogInfo("SiPixelVCalReader") << "[SiPixelVCalReader::analyze] End Reading SiPixelVCal" << std::endl;
0082 edm::Service<TFileService> fs;
0083
0084
0085 const TrackerTopology* const tTopo = &iSetup.getData(tkTopoToken_);
0086
0087
0088 const TrackerGeometry* pDD = &iSetup.getData(tkGeomToken_);
0089 edm::LogPrint("SiPixelVCalReader") << " There are " << pDD->detUnits().size() << " modules" << std::endl;
0090
0091
0092 bool phase1 = true;
0093
0094
0095 TTree* tree = new TTree("tree", "tree");
0096 uint32_t detid, subdet, layer, ladder, side, disk, ring;
0097 double slope, offset;
0098 tree->Branch("detid", &detid, "detid/I");
0099 tree->Branch("subdet", &subdet, "subdet/I");
0100 tree->Branch("layer", &layer, "layer/I");
0101 tree->Branch("ladder", &ladder, "ladder/I");
0102 tree->Branch("side", &side, "side/I");
0103 tree->Branch("disk", &disk, "disk/I");
0104 tree->Branch("ring", &ring, "ring/I");
0105 tree->Branch("slope", &slope, "slope/D");
0106 tree->Branch("offset", &offset, "offset/D");
0107
0108
0109 slopeBPix_ = fs->make<TH1F>("VCalSlopeBarrelPixel", "VCalSlopeBarrelPixel", 150, 0, 100);
0110 slopeFPix_ = fs->make<TH1F>("VCalSlopeForwardPixel", "VCalSlopeForwardPixel", 150, 0, 100);
0111 offsetBPix_ = fs->make<TH1F>("VCalOffsetBarrelPixel", "VCalOffsetBarrelPixel", 200, -900, 100);
0112 offsetFPix_ = fs->make<TH1F>("VCalOffsetForwardPixel", "VCalOffsetForwardPixel", 200, -900, 100);
0113 std::map<unsigned int, SiPixelVCal::VCal> vcal = siPixelVCal->getSlopeAndOffset();
0114 std::map<unsigned int, SiPixelVCal::VCal>::const_iterator it;
0115
0116
0117 edm::LogPrint("SiPixelVCalReader") << std::setw(12) << "detid" << std::setw(8) << "subdet" << std::setw(8) << "layer"
0118 << std::setw(8) << "disk" << std::setw(14) << "VCal slope" << std::setw(8)
0119 << "offset" << std::endl;
0120 for (it = vcal.begin(); it != vcal.end(); it++) {
0121 detid = it->first;
0122 slope = it->second.slope;
0123 offset = it->second.offset;
0124 const DetId detIdObj(detid);
0125 PixelEndcapName fpix(detid, tTopo, phase1);
0126 subdet = detIdObj.subdetId();
0127 layer = tTopo->pxbLayer(detIdObj);
0128 ladder = tTopo->pxbLadder(detIdObj);
0129 side = tTopo->pxfSide(detIdObj);
0130 disk = tTopo->pxfDisk(detIdObj);
0131 ring = fpix.ringName();
0132 edm::LogPrint("SiPixelVCalReader") << std::setw(12) << detid << std::setw(8) << subdet << std::setw(8) << layer
0133 << std::setw(8) << disk << std::setw(14) << slope << std::setw(8) << offset
0134 << std::endl;
0135
0136
0137
0138
0139
0140
0141
0142
0143 if (subdet == static_cast<int>(PixelSubdetector::PixelBarrel)) {
0144 slopeBPix_->Fill(slope);
0145 offsetBPix_->Fill(offset);
0146 } else if (subdet == static_cast<int>(PixelSubdetector::PixelEndcap)) {
0147 slopeFPix_->Fill(slope);
0148 offsetFPix_->Fill(offset);
0149 }
0150 tree->Fill();
0151 }
0152 }
0153 DEFINE_FWK_MODULE(SiPixelVCalReader);