File indexing completed on 2023-03-17 10:42:20
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "DTTTrigCorrection.h"
0011
0012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0013 #include "FWCore/Framework/interface/ESHandle.h"
0014 #include "FWCore/Framework/interface/EventSetup.h"
0015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0016
0017 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0018 #include "Geometry/DTGeometry/interface/DTGeometry.h"
0019 #include "Geometry/DTGeometry/interface/DTSuperLayer.h"
0020
0021 #include "CondFormats/DTObjects/interface/DTTtrig.h"
0022 #include "CondFormats/DataRecord/interface/DTTtrigRcd.h"
0023
0024 #include "CalibMuon/DTCalibration/interface/DTCalibDBUtils.h"
0025
0026 #include "CalibMuon/DTCalibration/interface/DTTTrigCorrectionFactory.h"
0027 #include "CalibMuon/DTCalibration/interface/DTTTrigBaseCorrection.h"
0028 #include "FWCore/Framework/interface/ConsumesCollector.h"
0029
0030 #include <iostream>
0031 #include <fstream>
0032
0033 using namespace edm;
0034 using namespace std;
0035
0036 DTTTrigCorrection::DTTTrigCorrection(const ParameterSet& pset)
0037 : correctionAlgo_{DTTTrigCorrectionFactory::get()->create(pset.getParameter<string>("correctionAlgo"),
0038 pset.getParameter<ParameterSet>("correctionAlgoConfig"),
0039 consumesCollector())} {
0040 ttrigToken_ =
0041 esConsumes<edm::Transition::BeginRun>(edm::ESInputTag("", pset.getUntrackedParameter<string>("dbLabel")));
0042 dtGeomToken_ = esConsumes<edm::Transition::BeginRun>();
0043 LogVerbatim("Calibration") << "[DTTTrigCorrection] Constructor called" << endl;
0044 }
0045
0046 DTTTrigCorrection::~DTTTrigCorrection() {
0047 LogVerbatim("Calibration") << "[DTTTrigCorrection] Destructor called" << endl;
0048 }
0049
0050 void DTTTrigCorrection::beginRun(const edm::Run& run, const edm::EventSetup& setup) {
0051
0052 ESHandle<DTTtrig> tTrig = setup.getHandle(ttrigToken_);
0053 tTrigMap_ = &*tTrig;
0054 LogVerbatim("Calibration") << "[DTTTrigCorrection]: TTrig version: " << tTrig->version() << endl;
0055
0056
0057 muonGeom_ = setup.getHandle(dtGeomToken_);
0058
0059
0060 correctionAlgo_->setES(setup);
0061 }
0062
0063 void DTTTrigCorrection::endJob() {
0064
0065 DTTtrig tTrigNewMap;
0066
0067 for (vector<const DTSuperLayer*>::const_iterator sl = muonGeom_->superLayers().begin();
0068 sl != muonGeom_->superLayers().end();
0069 ++sl) {
0070
0071 float tTrigMean, tTrigSigma, kFactor;
0072 int status = tTrigMap_->get((*sl)->id(), tTrigMean, tTrigSigma, kFactor, DTTimeUnits::ns);
0073
0074
0075 try {
0076 dtCalibration::DTTTrigData tTrigCorr = correctionAlgo_->correction((*sl)->id());
0077 float tTrigMeanNew = tTrigCorr.mean;
0078 float tTrigSigmaNew = tTrigCorr.sigma;
0079 float kFactorNew = tTrigCorr.kFactor;
0080 tTrigNewMap.set((*sl)->id(), tTrigMeanNew, tTrigSigmaNew, kFactorNew, DTTimeUnits::ns);
0081
0082 LogVerbatim("Calibration") << "New tTrig for: " << (*sl)->id() << " mean from " << tTrigMean << " to "
0083 << tTrigMeanNew << " sigma from " << tTrigSigma << " to " << tTrigSigmaNew
0084 << " kFactor from " << kFactor << " to " << kFactorNew << endl;
0085 } catch (cms::Exception& e) {
0086 LogError("Calibration") << e.explainSelf();
0087
0088 if (!status) {
0089 tTrigNewMap.set((*sl)->id(), tTrigMean, tTrigSigma, kFactor, DTTimeUnits::ns);
0090 LogVerbatim("Calibration") << "Keep old tTrig for: " << (*sl)->id() << " mean " << tTrigMean << " sigma "
0091 << tTrigSigma << " kFactor " << kFactor << endl;
0092 }
0093 continue;
0094 }
0095 }
0096
0097
0098 LogVerbatim("Calibration") << "[DTTTrigCorrection]: Writing ttrig object to DB!" << endl;
0099 string record = "DTTtrigRcd";
0100 DTCalibDBUtils::writeToDB<DTTtrig>(record, tTrigNewMap);
0101 }