CMS 3D CMS Logo

DTTTrigOffsetCalibration.cc
Go to the documentation of this file.
1 
2 /*
3  * See header file for a description of this class.
4  *
5  * \author A. Vilela Pereira
6  */
7 
9 
16 
19 
25 
28 
29 #include <string>
30 #include <sstream>
31 #include "TFile.h"
32 #include "TH1F.h"
33 
34 using namespace std;
35 using namespace edm;
36 
38  : theRecHits4DLabel_(pset.getParameter<InputTag>("recHits4DLabel")),
39  doTTrigCorrection_(pset.getUntrackedParameter<bool>("doT0SegCorrection", false)),
40  theCalibChamber_(pset.getUntrackedParameter<string>("calibChamber", "All")),
41  dbLabel_(pset.getUntrackedParameter<string>("dbLabel", "")) {
42  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration] Constructor called!";
43 
45  select_ = new DTSegmentSelector(pset, collector);
46 
47  // the root file which will contain the histos
48  string rootFileName = pset.getUntrackedParameter<string>("rootFileName", "DTT0SegHistos.root");
49  rootFile_ = new TFile(rootFileName.c_str(), "RECREATE");
50  rootFile_->cd();
51 }
52 
54  if (doTTrigCorrection_) {
56  setup.get<DTTtrigRcd>().get(dbLabel_, tTrig);
57  tTrigMap_ = &*tTrig;
58  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration]: TTrig version: " << tTrig->version() << endl;
59  }
60 }
61 
63  rootFile_->Close();
64  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration] Destructor called!";
65 }
66 
67 void DTTTrigOffsetCalibration::analyze(const Event& event, const EventSetup& eventSetup) {
68  rootFile_->cd();
69  DTChamberId chosenChamberId;
70 
71  if (theCalibChamber_ != "All") {
72  stringstream linestr;
73  int selWheel, selStation, selSector;
74  linestr << theCalibChamber_;
75  linestr >> selWheel >> selStation >> selSector;
76  chosenChamberId = DTChamberId(selWheel, selStation, selSector);
77  LogVerbatim("Calibration") << " chosen chamber " << chosenChamberId << endl;
78  }
79 
80  // Get the DT Geometry
81  ESHandle<DTGeometry> dtGeom;
82  eventSetup.get<MuonGeometryRecord>().get(dtGeom);
83 
84  // Get the rechit collection from the event
86  event.getByLabel(theRecHits4DLabel_, all4DSegments);
87 
88  // Loop over segments by chamber
90  for (chamberIdIt = all4DSegments->id_begin(); chamberIdIt != all4DSegments->id_end(); ++chamberIdIt) {
91  // Get the chamber from the setup
92  const DTChamber* chamber = dtGeom->chamber(*chamberIdIt);
93  LogTrace("Calibration") << "Chamber Id: " << *chamberIdIt;
94 
95  // Book histos
96  if (theT0SegHistoMap_.find(*chamberIdIt) == theT0SegHistoMap_.end()) {
97  bookHistos(*chamberIdIt);
98  }
99 
100  // Calibrate just the chosen chamber/s
101  if ((theCalibChamber_ != "All") && ((*chamberIdIt) != chosenChamberId))
102  continue;
103 
104  // Get the range for the corresponding ChamberId
105  DTRecSegment4DCollection::range range = all4DSegments->get((*chamberIdIt));
106 
107  // Loop over the rechits of this DetUnit
108  for (DTRecSegment4DCollection::const_iterator segment = range.first; segment != range.second; ++segment) {
109  LogTrace("Calibration") << "Segment local pos (in chamber RF): " << (*segment).localPosition()
110  << "\nSegment global pos: " << chamber->toGlobal((*segment).localPosition());
111 
112  if (!(*select_)(*segment, event, eventSetup))
113  continue;
114 
115  // Fill t0-seg values
116  if ((*segment).hasPhi()) {
117  //if( segment->phiSegment()->ist0Valid() ){
118  if ((segment->phiSegment()->t0()) != 0.00) {
119  (theT0SegHistoMap_[*chamberIdIt])[0]->Fill(segment->phiSegment()->t0());
120  }
121  }
122  if ((*segment).hasZed()) {
123  //if( segment->zSegment()->ist0Valid() ){
124  if ((segment->zSegment()->t0()) != 0.00) {
125  (theT0SegHistoMap_[*chamberIdIt])[1]->Fill(segment->zSegment()->t0());
126  }
127  }
128  } // DTRecSegment4DCollection::const_iterator segment
129  } // DTRecSegment4DCollection::id_iterator chamberIdIt
130 } // DTTTrigOffsetCalibration::analyze
131 
133  rootFile_->cd();
134 
135  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration] Writing histos to file!" << endl;
136 
137  for (ChamberHistosMap::const_iterator itChHistos = theT0SegHistoMap_.begin(); itChHistos != theT0SegHistoMap_.end();
138  ++itChHistos) {
139  for (vector<TH1F*>::const_iterator itHist = (*itChHistos).second.begin(); itHist != (*itChHistos).second.end();
140  ++itHist)
141  (*itHist)->Write();
142  }
143 
144  if (doTTrigCorrection_) {
145  // Create the object to be written to DB
146  DTTtrig* tTrig = new DTTtrig();
147 
148  for (ChamberHistosMap::const_iterator itChHistos = theT0SegHistoMap_.begin(); itChHistos != theT0SegHistoMap_.end();
149  ++itChHistos) {
150  DTChamberId chId = itChHistos->first;
151  // Get SuperLayerId's for each ChamberId
152  vector<DTSuperLayerId> slIds;
153  slIds.push_back(DTSuperLayerId(chId, 1));
154  slIds.push_back(DTSuperLayerId(chId, 3));
155  if (chId.station() != 4)
156  slIds.push_back(DTSuperLayerId(chId, 2));
157 
158  for (vector<DTSuperLayerId>::const_iterator itSl = slIds.begin(); itSl != slIds.end(); ++itSl) {
159  // Get old values from DB
160  float ttrigMean = 0;
161  float ttrigSigma = 0;
162  float kFactor = 0;
163  tTrigMap_->get(*itSl, ttrigMean, ttrigSigma, kFactor, DTTimeUnits::ns);
164  //FIXME: verify if values make sense
165  // Set new values
166  float ttrigMeanNew = ttrigMean;
167  float ttrigSigmaNew = ttrigSigma;
168  float t0SegMean =
169  (itSl->superLayer() != 2) ? itChHistos->second[0]->GetMean() : itChHistos->second[1]->GetMean();
170 
171  float kFactorNew = (kFactor * ttrigSigma + t0SegMean) / ttrigSigma;
172 
173  tTrig->set(*itSl, ttrigMeanNew, ttrigSigmaNew, kFactorNew, DTTimeUnits::ns);
174  }
175  }
176  LogVerbatim("Calibration") << "[DTTTrigOffsetCalibration] Writing ttrig object to DB!" << endl;
177  // Write the object to DB
178  string tTrigRecord = "DTTtrigRcd";
179  DTCalibDBUtils::writeToDB(tTrigRecord, tTrig);
180  }
181 }
182 
183 // Book a set of histograms for a given Chamber
185  LogTrace("Calibration") << " Booking histos for Chamber: " << chId;
186 
187  // Compose the chamber name
188  std::string wheel = std::to_string(chId.wheel());
189  std::string station = std::to_string(chId.station());
190  std::string sector = std::to_string(chId.sector());
191 
192  string chHistoName = "_W" + wheel + "_St" + station + "_Sec" + sector;
193 
194  vector<TH1F*> histos;
195  // Note the order matters
196  histos.push_back(new TH1F(("hRPhiSegT0" + chHistoName).c_str(), "t0 from Phi segments", 500, -60., 60.));
197  if (chId.station() != 4)
198  histos.push_back(new TH1F(("hRZSegT0" + chHistoName).c_str(), "t0 from Z segments", 500, -60., 60.));
199 
200  theT0SegHistoMap_[chId] = histos;
201 }
T getUntrackedParameter(std::string const &, T const &) const
std::pair< const_iterator, const_iterator > range
iterator range
Definition: RangeMap.h:50
int set(int wheelId, int stationId, int sectorId, int slId, float tTrig, float tTrms, float kFact, DTTimeUnits::type unit)
Definition: DTTtrig.cc:172
void beginRun(const edm::Run &run, const edm::EventSetup &setup) override
const DTChamber * chamber(const DTChamberId &id) const
Return a DTChamber given its id.
Definition: DTGeometry.cc:90
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override
const std::string & version() const
access version
Definition: DTTtrig.cc:162
identifier iterator
Definition: RangeMap.h:130
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:43
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
#define LogTrace(id)
int get(int wheelId, int stationId, int sectorId, int slId, float &tTrig, float &tTrms, float &kFact, DTTimeUnits::type unit) const
get content
Definition: DTTtrig.cc:59
histos
Definition: combine.py:4
HLT enums.
int sector() const
Definition: DTChamberId.h:49
T get() const
Definition: EventSetup.h:73
int station() const
Return the station number.
Definition: DTChamberId.h:42
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
static void writeToDB(std::string record, T *payload)
DTTTrigOffsetCalibration(const edm::ParameterSet &pset)
Definition: event.py:1
Definition: Run.h:45