File indexing completed on 2024-12-01 23:40:05
0001
0002 #include <fstream>
0003 #include <iostream>
0004
0005
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
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
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);