CMS 3D CMS Logo

DTLocalTriggerSynchTest.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author C. Battilana - CIEMAT
5  *
6  * threadsafe version (//-) oct/nov 2014 - WATWanAbdullah -ncpp-um-my
7  *
8  */
9 
10 // This class header
12 
13 // Framework headers
17 
18 // Geometry
22 
23 // DB & Calib
27 
28 // Root
29 #include "TF1.h"
30 #include "TProfile.h"
31 
32 //C++ headers
33 #include <iostream>
34 #include <sstream>
35 
36 using namespace edm;
37 using namespace std;
38 
40  : wPhaseMapToken_(esConsumes<edm::Transition::BeginRun>()) {
41  setConfig(ps, "DTLocalTriggerSynch");
42  baseFolderTM = "DT/90-LocalTriggerSynch/";
43 
44  bookingdone = false;
45 }
46 
48 
50  numHistoTag = parameters.getParameter<string>("numHistoTag");
51  denHistoTag = parameters.getParameter<string>("denHistoTag");
52  ratioHistoTag = parameters.getParameter<string>("ratioHistoTag");
53  bxTime = parameters.getParameter<double>("bxTimeInterval");
54  rangeInBX = parameters.getParameter<bool>("rangeWithinBX");
55  nBXLow = parameters.getParameter<int>("nBXLow");
56  nBXHigh = parameters.getParameter<int>("nBXHigh");
57  minEntries = parameters.getParameter<int>("minEntries");
58 
60 }
61 
63  DQMStore::IGetter& igetter,
64  edm::LuminosityBlock const& lumiSeg,
65  edm::EventSetup const& c) {
66  if (bookingdone)
67  return;
68 
69  vector<string>::const_iterator iTr = trigSources.begin();
70  vector<string>::const_iterator trEnd = trigSources.end();
71  vector<string>::const_iterator iHw = hwSources.begin();
72  vector<string>::const_iterator hwEnd = hwSources.end();
73 
74  //Booking
75  if (parameters.getUntrackedParameter<bool>("staticBooking", true)) {
76  for (; iTr != trEnd; ++iTr) {
77  trigSource = (*iTr);
78  for (; iHw != hwEnd; ++iHw) {
79  hwSource = (*iHw);
80  std::vector<const DTChamber*>::const_iterator chambIt = muonGeom->chambers().begin();
81  std::vector<const DTChamber*>::const_iterator chambEnd = muonGeom->chambers().end();
82  for (; chambIt != chambEnd; ++chambIt) {
83  DTChamberId chId = ((*chambIt)->id());
84  bookChambHistos(ibooker, chId, ratioHistoTag);
85  }
86  }
87  }
88  }
89 
90  LogVerbatim(category()) << "[" << testName << "Test]: book Histograms" << endl;
91 
92  if (parameters.getParameter<bool>("fineParamDiff")) {
93  wPhaseMap = &c.getData(wPhaseMapToken_);
94  }
95 
96  bookingdone = true;
97 }
98 
100  // Loop over Trig & Hw sources
101  for (vector<string>::const_iterator iTr = trigSources.begin(); iTr != trigSources.end(); ++iTr) {
102  trigSource = (*iTr);
103  for (vector<string>::const_iterator iHw = hwSources.begin(); iHw != hwSources.end(); ++iHw) {
104  hwSource = (*iHw);
105  std::vector<const DTChamber*>::const_iterator chambIt = muonGeom->chambers().begin();
106  std::vector<const DTChamber*>::const_iterator chambEnd = muonGeom->chambers().end();
107  for (; chambIt != chambEnd; ++chambIt) {
108  DTChamberId chId = (*chambIt)->id();
109  uint32_t indexCh = chId.rawId();
110 
111  // Perform peak finding
112 
113  TH1F* numH = getHisto<TH1F>(igetter.get(getMEName(numHistoTag, "", chId)));
114  TH1F* denH = getHisto<TH1F>(igetter.get(getMEName(denHistoTag, "", chId)));
115 
116  if (numH && denH && numH->GetEntries() > minEntries && denH->GetEntries() > minEntries) {
117  std::map<std::string, MonitorElement*> innerME = chambME[indexCh];
118  MonitorElement* ratioH = innerME.find(fullName(ratioHistoTag))->second;
119  makeRatioME(numH, denH, ratioH);
120  try {
121  //Need our own copy to avoid threading problems
122  TF1 mypol8("mypol8", "pol8");
123  getHisto<TH1F>(ratioH)->Fit(&mypol8, "CQO");
124  } catch (cms::Exception& iException) {
125  edm::LogPrint(category()) << "[" << testName << "Test]: Error fitting " << ratioH->getName()
126  << " returned 0" << endl;
127  }
128  } else {
129  if (!numH || !denH) {
130  LogPrint(category()) << "[" << testName
131  << "Test]: At least one of the required Histograms was not found for chamber " << chId
132  << ". Peaks not computed" << endl;
133  } else {
134  LogPrint(category()) << "[" << testName << "Test]: Number of plots entries for " << chId
135  << " is less than minEntries=" << minEntries << ". Peaks not computed" << endl;
136  }
137  }
138  }
139  }
140  }
141 }
142 
144  DTLocalTriggerBaseTest::dqmEndJob(ibooker, igetter);
145 
146  if (parameters.getParameter<bool>("writeDB")) {
147  LogVerbatim(category()) << "[" << testName << "Test]: writeDB flag set to true. Producing peak position database."
148  << endl;
149 
150  DTTPGParameters* delayMap = new DTTPGParameters();
151  hwSource = "TM";
152  std::vector<const DTChamber*>::const_iterator chambIt = muonGeom->chambers().begin();
153  std::vector<const DTChamber*>::const_iterator chambEnd = muonGeom->chambers().end();
154  for (; chambIt != chambEnd; ++chambIt) {
155  DTChamberId chId = (*chambIt)->id();
156  float fineDelay = 0;
157  int coarseDelay = static_cast<int>(
158  (getFloatFromME(igetter, chId, "tTrig_SL1") + getFloatFromME(igetter, chId, "tTrig_SL3")) * 0.5 / bxTime);
159 
160  bool fineDiff = parameters.getParameter<bool>("fineParamDiff");
161  bool coarseDiff = parameters.getParameter<bool>("coarseParamDiff");
162 
163  TH1F* ratioH = getHisto<TH1F>(igetter.get(getMEName(ratioHistoTag, "", chId)));
164  if (ratioH->GetEntries() > minEntries) {
165  TF1* fitF = ratioH->GetFunction("mypol8");
166  if (fitF) {
167  fineDelay = fitF->GetMaximumX(0, bxTime);
168  }
169  } else {
170  LogInfo(category()) << "[" << testName << "Test]: Ratio histogram for chamber " << chId
171  << " is empty. Worst Phase value set to 0." << endl;
172  }
173 
174  if (fineDiff || coarseDiff) {
175  float wFine;
176  int wCoarse;
177  wPhaseMap->get(chId, wCoarse, wFine, DTTimeUnits::ns);
178  if (fineDiff) {
179  fineDelay = wFine - fineDelay;
180  }
181  if (coarseDiff) {
182  coarseDelay = wCoarse - coarseDelay;
183  }
184  }
185  delayMap->set(chId, coarseDelay, fineDelay, DTTimeUnits::ns);
186  }
187 
188  std::vector<std::pair<DTTPGParametersId, DTTPGParametersData> >::const_iterator dbIt = delayMap->begin();
189  std::vector<std::pair<DTTPGParametersId, DTTPGParametersData> >::const_iterator dbEnd = delayMap->end();
190  for (; dbIt != dbEnd; ++dbIt) {
191  LogVerbatim(category()) << "[" << testName << "Test]: DB entry for Wh " << (*dbIt).first.wheelId << " Sec "
192  << (*dbIt).first.sectorId << " St " << (*dbIt).first.stationId << " has coarse "
193  << (*dbIt).second.nClock << " and phase " << (*dbIt).second.tPhase << std::endl;
194  }
195 
196  string delayRecord = "DTTPGParametersRcd";
197  DTCalibDBUtils::writeToDB(delayRecord, delayMap);
198  }
199 }
200 
202  TH1F* efficiency = result->getTH1F();
203  efficiency->Divide(numerator, denominator, 1, 1, "");
204 }
205 
207  stringstream wheel;
208  wheel << chId.wheel();
209  stringstream station;
210  station << chId.station();
211  stringstream sector;
212  sector << chId.sector();
213 
214  string folderName = topFolder() + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" + station.str() + "/";
215 
216  string histoname =
217  sourceFolder + folderName + meType + "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();
218 
219  MonitorElement* me = igetter.get(histoname);
220  if (me) {
221  return me->getFloatValue();
222  } else {
223  LogProblem(category()) << "[" << testName << "Test]: " << histoname << " is not a valid ME. 0 returned"
224  << std::endl;
225  }
226 
227  return 0;
228 }
229 
231  DTChamberId chambId,
232  string htype,
233  string subfolder) {
234  stringstream wheel;
235  wheel << chambId.wheel();
236  stringstream station;
237  station << chambId.station();
238  stringstream sector;
239  sector << chambId.sector();
240 
241  string fullType = fullName(htype);
242  string HistoName = fullType + "_W" + wheel.str() + "_Sec" + sector.str() + "_St" + station.str();
243 
244  string folder = topFolder() + "Wheel" + wheel.str() + "/Sector" + sector.str() + "/Station" + station.str();
245  if (!subfolder.empty()) {
246  folder += "7" + subfolder;
247  }
248 
249  ibooker.setCurrentFolder(folder);
250 
251  LogPrint(category()) << "[" << testName << "Test]: booking " << folder << "/" << HistoName;
252 
253  uint32_t indexChId = chambId.rawId();
254  float min = rangeInBX ? 0 : nBXLow * bxTime;
255  float max = rangeInBX ? bxTime : nBXHigh * bxTime;
256  int nbins = static_cast<int>(ceil(rangeInBX ? bxTime : (nBXHigh - nBXLow) * bxTime));
257 
258  chambME[indexChId][fullType] =
259  ibooker.book1D(HistoName.c_str(), "All/HH ratio vs Muon Arrival Time", nbins, min, max);
260 }
DTLocalTriggerSynchTest::ratioHistoTag
std::string ratioHistoTag
Definition: DTLocalTriggerSynchTest.h:59
DTLocalTriggerSynchTest::wPhaseMap
const DTTPGParameters * wPhaseMap
Definition: DTLocalTriggerSynchTest.h:67
DTTPGParameters::set
int set(int wheelId, int stationId, int sectorId, int nc, float ph, DTTimeUnits::type unit)
Definition: DTTPGParameters.cc:123
DTLocalTriggerBaseTest::sourceFolder
std::string sourceFolder
Definition: DTLocalTriggerBaseTest.h:107
DTLocalTriggerSynchTest::rangeInBX
bool rangeInBX
Definition: DTLocalTriggerSynchTest.h:61
DTTrigGeomUtils.h
DTLocalTriggerBaseTest::dqmEndJob
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
Definition: DTLocalTriggerBaseTest.cc:64
MessageLogger.h
DTLocalTriggerBaseTest::beginRun
void beginRun(edm::Run const &run, edm::EventSetup const &context) override
BeginRun.
Definition: DTLocalTriggerBaseTest.cc:36
DTLocalTriggerSynchTest::denHistoTag
std::string denHistoTag
Definition: DTLocalTriggerSynchTest.h:58
edm::LuminosityBlock
Definition: LuminosityBlock.h:50
edm::Run
Definition: Run.h:45
min
T min(T a, T b)
Definition: MathUtil.h:58
printsummarytable.folder
folder
Definition: printsummarytable.py:7
relativeConstraints.station
station
Definition: relativeConstraints.py:67
edm
HLT enums.
Definition: AlignableModifier.h:19
DTLocalTriggerSynchTest::bxTime
double bxTime
Definition: DTLocalTriggerSynchTest.h:60
DTLocalTriggerBaseTest::hwSources
std::vector< std::string > hwSources
Definition: DTLocalTriggerBaseTest.h:105
edm::LogPrint
Log< level::Warning, true > LogPrint
Definition: MessageLogger.h:130
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
DTLocalTriggerSynchTest::runClientDiagnostic
void runClientDiagnostic(DQMStore::IBooker &, DQMStore::IGetter &) override
DQM Client Diagnostic.
Definition: DTLocalTriggerSynchTest.cc:99
DQMStore.h
DTLocalTriggerBaseTest::fullName
std::string fullName(std::string htype)
Create fullname from histo partial name.
Definition: DTLocalTriggerBaseTest.cc:98
DTLocalTriggerBaseTest::getMEName
std::string getMEName(std::string histoTag, std::string subfolder, const DTChamberId &chambid)
Get the ME name (by chamber)
DTStatusFlagRcd.h
dqm::legacy::MonitorElement
Definition: MonitorElement.h:462
DTLocalTriggerSynchTest::bookingdone
bool bookingdone
Definition: DTLocalTriggerSynchTest.h:69
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
L1TObjectsTimingClient_cff.efficiency
efficiency
Definition: L1TObjectsTimingClient_cff.py:10
DTLocalTriggerSynchTest::numHistoTag
std::string numHistoTag
Definition: DTLocalTriggerSynchTest.h:57
DTTPGParameters::get
int get(int wheelId, int stationId, int sectorId, int &nc, float &ph, DTTimeUnits::type unit) const
get content
Definition: DTTPGParameters.cc:68
DTLocalTriggerBaseTest::setConfig
void setConfig(const edm::ParameterSet &ps, std::string name)
Set configuration variables.
Definition: DTLocalTriggerBaseTest.cc:77
reco::ceil
constexpr int32_t ceil(float num)
Definition: constexpr_cmath.h:7
edm::LogProblem
Log< level::Error, true > LogProblem
Definition: MessageLogger.h:131
DTGeometry::chambers
const std::vector< const DTChamber * > & chambers() const
Return a vector of all Chamber.
Definition: DTGeometry.cc:84
DTLocalTriggerBaseTest::run
int run
Definition: DTLocalTriggerBaseTest.h:102
DTTimeUnits::ns
Definition: DTTimeUnits.h:32
LaserClient_cfi.nbins
nbins
Definition: LaserClient_cfi.py:51
DTLocalTriggerSynchTest::nBXHigh
int nBXHigh
Definition: DTLocalTriggerSynchTest.h:63
DTLocalTriggerSynchTest::getFloatFromME
float getFloatFromME(DQMStore::IGetter &, DTChamberId chId, std::string meType)
Get float MEs.
Definition: DTLocalTriggerSynchTest.cc:206
DTStatusFlag.h
DTLocalTriggerBaseTest::muonGeom
const DTGeometry * muonGeom
Definition: DTLocalTriggerBaseTest.h:115
DTGeometry.h
edm::ParameterSet
Definition: ParameterSet.h:47
edm::Transition
Transition
Definition: Transition.h:12
DTTPGParameters
Definition: DTTPGParameters.h:62
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
DTTPGParameters::begin
const_iterator begin() const
Definition: DTTPGParameters.cc:166
makeMuonMisalignmentScenario.wheel
wheel
Definition: makeMuonMisalignmentScenario.py:319
DTCalibDBUtils.h
DTLocalTriggerSynchTest::chambME
std::map< uint32_t, std::map< std::string, MonitorElement * > > chambME
Definition: DTLocalTriggerSynchTest.h:56
cscdqm::HistoName
std::string HistoName
Definition: CSCDQM_HistoDef.h:32
HLTTauDQMOffline_cfi.numerator
numerator
Definition: HLTTauDQMOffline_cfi.py:179
edm::EventSetup
Definition: EventSetup.h:58
DTLocalTriggerBaseTest::hwSource
std::string hwSource
Definition: DTLocalTriggerBaseTest.h:112
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DTLocalTriggerSynchTest.h
DTLocalTriggerBaseTest::trigSource
std::string trigSource
Definition: DTLocalTriggerBaseTest.h:111
ALCARECODTCalibSynchCosmicsDQM_cff.folderName
folderName
Definition: ALCARECODTCalibSynchCosmicsDQM_cff.py:9
DTLocalTriggerSynchTest::makeRatioME
void makeRatioME(TH1F *numerator, TH1F *denominator, MonitorElement *result)
Compute efficiency plots.
Definition: DTLocalTriggerSynchTest.cc:201
DTLocalTriggerBaseTest::topFolder
std::string & topFolder()
Get top folder name.
Definition: DTLocalTriggerBaseTest.h:94
DTLocalTriggerSynchTest::bookChambHistos
void bookChambHistos(DQMStore::IBooker &, DTChamberId chambId, std::string htype, std::string subfolder="")
Book the new MEs (for each chamber)
Definition: DTLocalTriggerSynchTest.cc:230
HLTTauDQMOffline_cfi.denominator
denominator
Definition: HLTTauDQMOffline_cfi.py:180
DTChamberId::sector
int sector() const
Definition: DTChamberId.h:49
std
Definition: JetResolutionObject.h:76
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
writedatasetfile.run
run
Definition: writedatasetfile.py:27
DTLocalTriggerBaseTest::trigSources
std::vector< std::string > trigSources
Definition: DTLocalTriggerBaseTest.h:104
DTTPGParameters::end
const_iterator end() const
Definition: DTTPGParameters.cc:168
DTLocalTriggerSynchTest::beginRun
void beginRun(const edm::Run &run, const edm::EventSetup &c) override
begin Run
Definition: DTLocalTriggerSynchTest.cc:49
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
dqm::implementation::IGetter
Definition: DQMStore.h:484
edm::Transition::BeginRun
DTLocalTriggerSynchTest::DTLocalTriggerSynchTest
DTLocalTriggerSynchTest(const edm::ParameterSet &ps)
Constructor.
Definition: DTLocalTriggerSynchTest.cc:39
DTLocalTriggerBaseTest::parameters
edm::ParameterSet parameters
Definition: DTLocalTriggerBaseTest.h:108
DTLocalTriggerSynchTest::dqmEndLuminosityBlock
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
Perform client diagnostic in online.
Definition: DTLocalTriggerSynchTest.cc:62
L1DTConfigParams_cff.DTTPGParameters
DTTPGParameters
Definition: L1DTConfigParams_cff.py:12
DTLocalTriggerSynchTest::~DTLocalTriggerSynchTest
~DTLocalTriggerSynchTest() override
Destructor.
Definition: DTLocalTriggerSynchTest.cc:47
dqm::impl::MonitorElement::getName
const std::string & getName() const
get name of ME
Definition: MonitorElement.h:250
dqm::implementation::IGetter::get
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:673
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
DTLocalTriggerSynchTest::dqmEndJob
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
Definition: DTLocalTriggerSynchTest.cc:143
dqm::implementation::IBooker
Definition: DQMStore.h:43
DTLocalTriggerBaseTest::category
std::string category()
Get message logger name.
Definition: DTLocalTriggerBaseTest.h:97
mps_fire.result
result
Definition: mps_fire.py:311
cms::Exception
Definition: Exception.h:70
DTLocalTriggerBaseTest::baseFolderTM
std::string baseFolderTM
Definition: DTLocalTriggerBaseTest.h:110
DTChamberId
Definition: DTChamberId.h:14
MuonGeometryRecord.h
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:56
hlt_dqm_clientPB-live_cfg.me
me
Definition: hlt_dqm_clientPB-live_cfg.py:61
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
DTLocalTriggerSynchTest::minEntries
int minEntries
Definition: DTLocalTriggerSynchTest.h:64
DTLocalTriggerBaseTest::testName
std::string testName
Definition: DTLocalTriggerBaseTest.h:103
DTChamberId::wheel
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:39
DTLocalTriggerSynchTest::nBXLow
int nBXLow
Definition: DTLocalTriggerSynchTest.h:62
DTCalibDBUtils::writeToDB
static void writeToDB(std::string record, T *payload)
Definition: DTCalibDBUtils.h:28
DTLocalTriggerSynchTest::wPhaseMapToken_
edm::ESGetToken< DTTPGParameters, DTTPGParametersRcd > wPhaseMapToken_
Definition: DTLocalTriggerSynchTest.h:66
DTChamberId::station
int station() const
Return the station number.
Definition: DTChamberId.h:42
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98