Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-01 23:40:05

0001 // system include files
0002 #include <fstream>
0003 #include <iostream>
0004 
0005 // user include files
0006 #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h"
0007 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
0008 #include "CondFormats/SiStripObjects/interface/SiStripApvGain.h"
0009 #include "CondFormats/PhysicsToolsObjects/interface/DeDxCalibration.h"
0010 #include "CondFormats/DataRecord/interface/DeDxCalibrationRcd.h"
0011 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0012 #include "FWCore/Framework/interface/Event.h"
0013 #include "FWCore/Framework/interface/EventSetup.h"
0014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0015 #include "FWCore/ParameterSet/interface/FileInPath.h"
0016 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0018 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0019 #include "FWCore/ServiceRegistry/interface/Service.h"
0020 #include "FWCore/Utilities/interface/Exception.h"
0021 
0022 class SiStripApvGainFromDeDxCalibration : public edm::one::EDAnalyzer<> {
0023 public:
0024   explicit SiStripApvGainFromDeDxCalibration(const edm::ParameterSet& iConfig);
0025 
0026   ~SiStripApvGainFromDeDxCalibration() override = default;
0027 
0028   void analyze(const edm::Event&, const edm::EventSetup&) override;
0029 
0030   static void fillDescriptions(edm::ConfigurationDescriptions&);
0031 
0032   typedef std::pair<uint32_t, unsigned char> ChipId;
0033 
0034 private:
0035   const edm::ESGetToken<DeDxCalibration, DeDxCalibrationRcd> dedxCalibToken_;
0036   const edm::FileInPath fp_;
0037   const bool printdebug_;
0038 };
0039 
0040 SiStripApvGainFromDeDxCalibration::SiStripApvGainFromDeDxCalibration(const edm::ParameterSet& iConfig)
0041     : dedxCalibToken_(esConsumes<DeDxCalibration, DeDxCalibrationRcd>()),
0042       fp_(iConfig.getUntrackedParameter<edm::FileInPath>("file",
0043                                                          edm::FileInPath(SiStripDetInfoFileReader::kDefaultFile))),
0044       printdebug_(iConfig.getUntrackedParameter<uint32_t>("printDebug", 1)) {}
0045 
0046 void SiStripApvGainFromDeDxCalibration::analyze(const edm::Event& evt, const edm::EventSetup& iSetup) {
0047   unsigned int run = evt.id().run();
0048 
0049   edm::LogInfo("SiStripApvGainFromDeDxCalibration")
0050       << "... creating dummy SiStripApvGain Data for Run " << run << "\n " << std::endl;
0051 
0052   SiStripApvGain obj;
0053 
0054   const auto& reader = SiStripDetInfoFileReader::read(fp_.fullPath());
0055   const auto& DetInfos = reader.getAllData();
0056   const auto& dedxCalib = iSetup.getData(dedxCalibToken_);
0057 
0058   int count = -1;
0059   for (const auto& it : DetInfos) {
0060     const auto& nAPVs = it.second.nApvs;
0061     count++;
0062     //Generate Gain for det detid
0063     std::vector<float> theSiStripVector;
0064     for (unsigned short j = 0; j < nAPVs; j++) {
0065       const auto& chipId = ChipId(it.first, j);
0066       const auto& g = dedxCalib.gain().find(chipId);
0067 
0068       if (g == dedxCalib.gain().end())
0069         continue;
0070 
0071       if (count < printdebug_)
0072         edm::LogInfo("SiStripApvGainFromDeDxCalibration") << "detid " << it.first << " \t"
0073                                                           << " apv " << j << " \t" << g->second << " \t" << std::endl;
0074       theSiStripVector.push_back(g->second);
0075     }
0076 
0077     SiStripApvGain::Range range(theSiStripVector.begin(), theSiStripVector.end());
0078     if (!obj.put(it.first, range))
0079       edm::LogError("SiStripApvGainFromDeDxCalibration")
0080           << "[SiStripApvGainFromDeDxCalibration::analyze] detid already exists" << std::endl;
0081   }
0082 
0083   //End now write sistripnoises data in DB
0084   edm::Service<cond::service::PoolDBOutputService> mydbservice;
0085 
0086   if (mydbservice.isAvailable()) {
0087     if (mydbservice->isNewTagRequest("SiStripApvGainRcd")) {
0088       mydbservice->createOneIOV<SiStripApvGain>(obj, mydbservice->beginOfTime(), "SiStripApvGainRcd");
0089     } else {
0090       mydbservice->appendOneIOV<SiStripApvGain>(obj, mydbservice->currentTime(), "SiStripApvGainRcd");
0091     }
0092   } else {
0093     edm::LogError("SiStripApvGainFromDeDxCalibration") << "Service is unavailable" << std::endl;
0094   }
0095 }
0096 
0097 void SiStripApvGainFromDeDxCalibration::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0098   edm::ParameterSetDescription desc;
0099   desc.addUntracked<edm::FileInPath>("file", edm::FileInPath(SiStripDetInfoFileReader::kDefaultFile));
0100   desc.addUntracked<uint32_t>("printDebug", 1);
0101   descriptions.addWithDefaultLabel(desc);
0102 }
0103 
0104 #include "FWCore/PluginManager/interface/ModuleDef.h"
0105 #include "FWCore/Framework/interface/MakerMacros.h"
0106 
0107 DEFINE_FWK_MODULE(SiStripApvGainFromDeDxCalibration);