Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "DTTTrigFillWithAverage.h"
00010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00011 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00012 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00013 #include "Geometry/DTGeometry/interface/DTGeometry.h"
00014 #include "DataFormats/MuonDetId/interface/DTSuperLayerId.h"
00015 #include "CondFormats/DTObjects/interface/DTTtrig.h"
00016 #include "CondFormats/DataRecord/interface/DTTtrigRcd.h"
00017
00018 using namespace std;
00019 using namespace edm;
00020
00021 DTTTrigFillWithAverage::DTTTrigFillWithAverage(const ParameterSet& pset):foundAverage_(false) {
00022 dbLabel = pset.getUntrackedParameter<string>("dbLabel", "");
00023 }
00024
00025 DTTTrigFillWithAverage::~DTTTrigFillWithAverage() {}
00026
00027 void DTTTrigFillWithAverage::setES(const EventSetup& setup) {
00028
00029 ESHandle<DTTtrig> tTrig;
00030 setup.get<DTTtrigRcd>().get(dbLabel,tTrig);
00031 tTrigMap_ = &*tTrig;
00032
00033
00034 setup.get<MuonGeometryRecord>().get(muonGeom_);
00035 }
00036
00037 DTTTrigData DTTTrigFillWithAverage::correction(const DTSuperLayerId& slId) {
00038 float tTrigMean,tTrigSigma, kFactor;
00039 int status = tTrigMap_->get(slId,tTrigMean,tTrigSigma,kFactor,DTTimeUnits::ns);
00040 if(!status){
00041 return DTTTrigData(tTrigMean,tTrigSigma,kFactor);
00042 } else {
00043 if(!foundAverage_) getAverage();
00044 float corrMean = initialTTrig_.aveMean;
00045 float corrSigma = initialTTrig_.aveSigma;
00046 float corrKFactor = initialTTrig_.aveKFactor;
00047 return DTTTrigData(corrMean,corrSigma,corrKFactor);
00048 }
00049 }
00050
00051 void DTTTrigFillWithAverage::getAverage() {
00052
00053 vector<DTSuperLayer*> dtSupLylist = muonGeom_->superLayers();
00054
00055 float aveMean = 0.;
00056 float ave2Mean = 0.;
00057 float aveSigma = 0.;
00058 float ave2Sigma = 0.;
00059 float aveKFactor = 0.;
00060 int nIter = 0;
00061
00062 for(vector<DTSuperLayer*>::const_iterator sl = muonGeom_->superLayers().begin();
00063 sl != muonGeom_->superLayers().end(); ++sl) {
00064 float tTrigMean,tTrigSigma,kFactor;
00065 int status = tTrigMap_->get((*sl)->id(),tTrigMean,tTrigSigma,kFactor,DTTimeUnits::ns);
00066 if(!status){
00067 ++nIter;
00068 aveMean += tTrigMean;
00069 ave2Mean += tTrigMean*tTrigMean;
00070 aveSigma += tTrigSigma;
00071 ave2Sigma += tTrigSigma*tTrigSigma;
00072 aveKFactor += kFactor;
00073 }
00074 }
00075
00076
00077 aveMean /= nIter;
00078 float rmsMean = ave2Mean/(nIter - 1) - aveMean*aveMean;
00079 rmsMean = sqrt(rmsMean);
00080 aveSigma /= nIter;
00081 float rmsSigma = ave2Sigma/(nIter - 1) - aveSigma*aveSigma;
00082 rmsSigma = sqrt(rmsSigma);
00083 aveKFactor /= nIter;
00084
00085 initialTTrig_.aveMean = aveMean;
00086 initialTTrig_.rmsMean = rmsMean;
00087 initialTTrig_.aveSigma = aveSigma;
00088 initialTTrig_.rmsSigma = rmsSigma;
00089 initialTTrig_.aveKFactor = aveKFactor;
00090
00091 LogVerbatim("Calibration") << "[DTTTrigFillWithAverage] Found from " << nIter << " SL's\n"
00092 << " average tTrig mean: " << aveMean << "\n"
00093 << " tTrig mean RMS: " << rmsMean << "\n"
00094 << " average tTrig sigma: " << aveSigma << "\n"
00095 << " tTrig sigma RMS: " << rmsSigma << "\n"
00096 << " kFactor mean: " << aveKFactor;
00097 foundAverage_ = true;
00098 }