CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLXMonitor.cc
Go to the documentation of this file.
1 /*
2  Author: Adam Hunt
3  email: ahunt@princeton.edu
4 */
7 
8 // STL Headers
9 
10 #include <math.h>
11 #include <iomanip>
12 #include <TSystem.h>
13 
14 using std::cout;
15 using std::endl;
16 
18 {
19 
20  NUM_HLX = iConfig.getUntrackedParameter< unsigned int >("numHlx", 36);
21  NUM_BUNCHES = iConfig.getUntrackedParameter< unsigned int >("numBunches", 3564);
22  MAX_LS = iConfig.getUntrackedParameter< unsigned int >("maximumNumLS", 480);
23  listenPort = iConfig.getUntrackedParameter< unsigned int >("SourcePort", 51001);
24  OutputFilePrefix = iConfig.getUntrackedParameter< std::string >("outputFile", "lumi");
25  OutputDir = iConfig.getUntrackedParameter< std::string >("outputDir"," data");
26  SavePeriod = iConfig.getUntrackedParameter< unsigned int >("SavePeriod", 10);
27  NBINS = iConfig.getUntrackedParameter< unsigned int >("NBINS", 297); // 12 BX per bin
28  XMIN = iConfig.getUntrackedParameter< double >("XMIN", 0);
29  XMAX = iConfig.getUntrackedParameter< double >("XMAX", 3564);
30  Style = iConfig.getUntrackedParameter< std::string >("Style", "BX");
31  AquireMode = iConfig.getUntrackedParameter< unsigned int >("AquireMode", 0);
32  Accumulate = iConfig.getUntrackedParameter< bool >("Accumulate", true); // all
33  TriggerBX = iConfig.getUntrackedParameter< unsigned int >("TriggerBX", 50);
34  MinLSBeforeSave = iConfig.getUntrackedParameter< unsigned int >("MinLSBeforeSave", 1);
35  reconnTime = iConfig.getUntrackedParameter< unsigned int >("ReconnectionTime",5);
36  DistribIP1 = iConfig.getUntrackedParameter< std::string >("PrimaryHLXDAQIP", "vmepcs2f17-18");
37  DistribIP2 = iConfig.getUntrackedParameter< std::string >("SecondaryHLXDAQIP", "vmepcs2f17-19");
38  ResetAtNewRun = iConfig.getUntrackedParameter< bool >("NewRun_Reset",true);
39  SaveAtEndJob = iConfig.getUntrackedParameter< bool >("SaveAtEndJob",true);
40 
41  eventInfoFolderHLX_ = iConfig.getUntrackedParameter<std::string>("eventInfoFolderHLX", "EventInfoHLX") ;
42  eventInfoFolder_ = iConfig.getUntrackedParameter<std::string >("eventInfoFolder", "EventInfo") ;
43  subSystemName_ = iConfig.getUntrackedParameter<std::string >("subSystemName", "HLX") ;
44 
45  // Set the lumi section counter
46  lsBinOld = 0;
47  previousSection = 0;
48  lumiSectionCount = 0;
56 
57 
58  // HLX Config info
59  set1BelowIndex = 0;
60  set1BetweenIndex = 1;
61  set1AboveIndex = 2;
62  set2BelowIndex = 3;
63  set2BetweenIndex = 4;
64  set2AboveIndex = 5;
65 
66  runNumLength = 9;
67  secNumLength = 8;
68 
69  if(NUM_HLX > 36)
70  NUM_HLX = 36;
71 
72  if(NUM_BUNCHES > 3564)
73  NUM_BUNCHES = 3564;
74 
75  if(XMAX <= XMIN){
76  XMIN = 0;
77  if(XMAX <= 0) XMAX = 3564;
78  }
79 
80  if((Style.compare("History")==0) || (NBINS == 0)){
81  NBINS = (unsigned int)(XMAX-XMIN);
82  }
83 
85 
86  if ( dbe_ ) {
87  dbe_->setVerbose(1);
88  }
89 
90  monitorName_ = iConfig.getUntrackedParameter<std::string>("monitorName","HLX");
91  //cout << "Monitor name = " << monitorName_ << endl;
92  prescaleEvt_ = iConfig.getUntrackedParameter<int>("prescaleEvt", -1);
93  //cout << "===>DQM event prescale = " << prescaleEvt_ << " events "<< endl;
94 
95  unsigned int HLXHFMapTemp[] = {31,32,33,34,35,18, // s2f07 hf-
96  13,14,15,16,17,0, // s2f07 hf+
97  25,26,27,28,29,30, // s2f05 hf-
98  7, 8, 9, 10,11,12, // s2f05 hf+
99  19,20,21,22,23,24, // s2f02 hf-
100  1, 2, 3, 4, 5, 6}; // s2f02 hf+
101 
102  currentRunEnded_ = true;
103  runNumber_ = 0;
104  expectedNibbles_ = 0;
105 
106  for( int iHLX = 0; iHLX < 36; ++iHLX ){
107  HLXHFMap[iHLX] = HLXHFMapTemp[iHLX];
108  //std::cout << "At " << iHLX << " Wedge " << HLXHFMap[iHLX] << std::endl;
109  totalNibbles_[iHLX] = 0;
110  }
111 
112  num4NibblePerLS_ = 16.0;
113 
114  SetupHists();
115  SetupEventInfo();
116 }
117 
119 {
120  HLXTCP.Disconnect();
121 }
122 
123 // ------------ Setup the monitoring elements ---------------
124 void
126 {
127 
128  dbe_->setCurrentFolder(monitorName_+"/HFPlus");
129 
130  for( unsigned int iWedge = 0; iWedge < 18 && iWedge < NUM_HLX; ++iWedge )
131  {
132  std::ostringstream tempStreamer;
133  tempStreamer << std::dec << std::setw(2) << std::setfill('0') << (iWedge+1);
134 
135  std::ostringstream wedgeNum;
136  wedgeNum << std::dec << (iWedge % 18) + 1;
137 
138  dbe_->setCurrentFolder(monitorName_+"/HFPlus/Wedge"+tempStreamer.str());
139 
140  Set1Below[iWedge] = dbe_->book1D("Set1_Below",
141  "HF+ Wedge "+wedgeNum.str()+": Below Threshold 1 - Set 1",
142  NBINS, XMIN, XMAX);
143  Set1Between[iWedge] = dbe_->book1D("Set1_Between",
144  "HF+ Wedge "+wedgeNum.str()+": Between Threshold 1 & 2 - Set 1",
145  NBINS, XMIN, XMAX);
146  Set1Above[iWedge] = dbe_->book1D("Set1_Above",
147  "HF+ Wedge "+wedgeNum.str()+": Above Threshold 2 - Set 1",
148  NBINS, XMIN, XMAX);
149  Set2Below[iWedge] = dbe_->book1D("Set2_Below",
150  "HF+ Wedge "+wedgeNum.str()+": Below Threshold 1 - Set 2",
151  NBINS, XMIN, XMAX);
152  Set2Between[iWedge] = dbe_->book1D("Set2_Between",
153  "HF+ Wedge "+wedgeNum.str()+": Between Threshold 1 & 2 - Set 2",
154  NBINS, XMIN, XMAX);
155  Set2Above[iWedge] = dbe_->book1D("Set2_Above",
156  "HF+ Wedge "+wedgeNum.str()+": Above Threshold 2 - Set 2",
157  NBINS, XMIN, XMAX);
158  ETSum[iWedge] = dbe_->book1D("ETSum",
159  "HF+ Wedge "+wedgeNum.str()+": Transverse Energy",
160  NBINS, XMIN, XMAX);
161 
162  dbe_->tagContents(monitorName_+"/HFPlus/Wedge"+tempStreamer.str(), iWedge+1);
163  }
164 
165  if(NUM_HLX > 17)
166  {
167  dbe_->setCurrentFolder(monitorName_+"/HFMinus");
168 
169  for( unsigned int iWedge=18; iWedge < NUM_HLX; ++iWedge )
170  {
171  std::ostringstream tempStreamer;
172  tempStreamer << std::dec << std::setw(2) << std::setfill('0') << (iWedge+1);
173 
174  std::ostringstream wedgeNum;
175  wedgeNum << std::dec << (iWedge % 18) + 1;
176 
177  dbe_->setCurrentFolder(monitorName_+"/HFMinus/Wedge"+tempStreamer.str());
178  Set1Below[iWedge] = dbe_->book1D("Set1_Below",
179  "HF- Wedge "+wedgeNum.str()+": Below Threshold 1 - Set 1",
180  NBINS, XMIN, XMAX);
181  Set1Between[iWedge] = dbe_->book1D("Set1_Between",
182  "HF- Wedge "+wedgeNum.str()+": Between Threshold 1 & 2 - Set 1",
183  NBINS, XMIN, XMAX);
184  Set1Above[iWedge] = dbe_->book1D("Set1_Above",
185  "HF- Wedge "+wedgeNum.str()+": Above Threshold 2 - Set 1",
186  NBINS, XMIN, XMAX);
187  Set2Below[iWedge] = dbe_->book1D("Set2_Below",
188  "HF- Wedge "+wedgeNum.str()+": Below Threshold 1 - Set 2",
189  NBINS, XMIN, XMAX);
190  Set2Between[iWedge] = dbe_->book1D("Set2_Between",
191  "HF- Wedge "+wedgeNum.str()+": Between Threshold 1 & 2 - Set 2",
192  NBINS, XMIN, XMAX);
193  Set2Above[iWedge] = dbe_->book1D("Set2_Above",
194  "HF- Wedge "+wedgeNum.str()+": Above Threshold 2 - Set 2",
195  NBINS, XMIN, XMAX);
196  ETSum[iWedge] = dbe_->book1D("ETSum",
197  "HF- Wedge "+wedgeNum.str()+": Transverse Energy",
198  NBINS, XMIN, XMAX);
199 
200  dbe_->tagContents(monitorName_+"/HFMinus/Wedge"+tempStreamer.str(), iWedge+1);
201  }
202  }
203 
204  if(!Accumulate){
205  for( unsigned int iWedge = 0; iWedge < NUM_HLX; ++iWedge ){
206  Set1Below[iWedge]-> setResetMe(true);
207  Set1Between[iWedge]->setResetMe(true);
208  Set1Above[iWedge]-> setResetMe(true);
209  Set2Below[iWedge]-> setResetMe(true);
210  Set2Between[iWedge]->setResetMe(true);
211  Set2Above[iWedge]-> setResetMe(true);
212  ETSum[iWedge]-> setResetMe(true);
213  }
214  }
215 
216  if(Style.compare("BX") == 0){
217  OccXAxisTitle = "Bunch Crossing";
218  OccYAxisTitle = "Tower Occupancy";
219  EtXAxisTitle = "Bunch Crossing";
220  EtYAxisTitle = "E_{T} Sum";
221  }else if(Style.compare("Distribution")==0){
222  OccXAxisTitle = "Tower Occupancy";
223  OccYAxisTitle = "Count";
224  EtXAxisTitle = "E_{T} Sum";
225  EtYAxisTitle = "Count";
226  }
227 
228  for( unsigned int iWedge=0; iWedge < NUM_HLX; ++iWedge )
229  {
230  Set1Below[iWedge]-> setAxisTitle(OccXAxisTitle, 1);
231  Set1Below[iWedge]-> setAxisTitle(OccYAxisTitle, 2);
234  Set1Above[iWedge]-> setAxisTitle(OccXAxisTitle, 1);
235  Set1Above[iWedge]-> setAxisTitle(OccYAxisTitle, 2);
236  Set2Below[iWedge]-> setAxisTitle(OccXAxisTitle, 1);
237  Set2Below[iWedge]-> setAxisTitle(OccYAxisTitle, 2);
240  Set2Above[iWedge]-> setAxisTitle(OccXAxisTitle, 1);
241  Set2Above[iWedge]-> setAxisTitle(OccYAxisTitle, 2);
242  ETSum[iWedge]-> setAxisTitle(EtXAxisTitle, 1);
243  ETSum[iWedge]-> setAxisTitle(EtYAxisTitle, 2);
244  }
245 
246  // Comparison Histograms
247 
248  dbe_->setCurrentFolder(monitorName_+"/HFCompare");
249 
250  std::string CompXTitle = "HF Wedge";
251  std::string CompEtSumYTitle = "E_{T} Sum per active tower";
252  std::string CompOccYTitle = "Occupancy per active tower";
253 
254  HFCompareEtSum = dbe_->book1D("HFCompareEtSum","E_{T} Sum",NUM_HLX, 0, NUM_HLX );
255  HFCompareEtSum->setAxisTitle( CompXTitle, 1 );
256  HFCompareEtSum->setAxisTitle( CompEtSumYTitle, 2 );
257 
258  HFCompareOccBelowSet1 = dbe_->book1D("HFCompareOccBelowSet1",
259  "Occupancy Below Threshold 1 - Set 1",
260  NUM_HLX, 0, NUM_HLX );
261  HFCompareOccBelowSet1->setAxisTitle( CompXTitle, 1 );
262  HFCompareOccBelowSet1->setAxisTitle( CompOccYTitle, 2 );
263 
264  HFCompareOccBetweenSet1 = dbe_->book1D("HFCompareOccBetweenSet1",
265  "Occupancy Between Threshold 1 & 2 - Set 1",
266  NUM_HLX, 0, NUM_HLX );
267  HFCompareOccBetweenSet1->setAxisTitle( CompXTitle, 1 );
268  HFCompareOccBetweenSet1->setAxisTitle( CompOccYTitle, 2 );
269 
270  HFCompareOccAboveSet1 = dbe_->book1D("HFCompareOccAboveSet1",
271  "Occupancy Above Threshold 2 - Set 1",
272  NUM_HLX, 0, NUM_HLX );
273  HFCompareOccAboveSet1->setAxisTitle( CompXTitle, 1 );
274  HFCompareOccAboveSet1->setAxisTitle( CompOccYTitle, 2 );
275 
276  HFCompareOccBelowSet2 = dbe_->book1D("HFCompareOccBelowSet2",
277  "Occupancy Below Threshold 1 - Set 2",
278  NUM_HLX, 0, NUM_HLX);
279  HFCompareOccBelowSet2->setAxisTitle(CompXTitle,1);
280  HFCompareOccBelowSet2->setAxisTitle(CompOccYTitle,2);
281 
282  HFCompareOccBetweenSet2 = dbe_->book1D("HFCompareOccBetweenSet2",
283  "Occupancy Between Threshold 1 & 2 - Set 2",
284  NUM_HLX, 0, NUM_HLX);
285  HFCompareOccBetweenSet2->setAxisTitle(CompXTitle,1);
286  HFCompareOccBetweenSet2->setAxisTitle(CompOccYTitle,2);
287 
288  HFCompareOccAboveSet2 = dbe_->book1D( "HFCompareOccAboveSet2",
289  "Occupancy Above Threshold 2 - Set 2",
290  NUM_HLX, 0, NUM_HLX);
291  HFCompareOccAboveSet2->setAxisTitle(CompXTitle,1);
292  HFCompareOccAboveSet2->setAxisTitle(CompOccYTitle,2);
293 
294  // Average Histograms
295 
296  dbe_->setCurrentFolder(monitorName_+"/Average");
297 
298  int OccBins = 10000; // This does absolutely nothing.
299  double OccMin = 0;
300  double OccMax = 0; // If min and max are zero, no bounds on the data are set.
301 
302  int EtSumBins = 10000; // This does absolutely nothing. The Variable is not used in the function.
303  double EtSumMin = 0;
304  double EtSumMax = 0; // If min and max are zero, no bounds on the data are set.
305 
306  std::string errorOpt = "i";
307 
308  std::string AvgXTitle = "HF Wedge";
309  std::string AvgEtSumYTitle = "Average E_{T} Sum";
310  std::string AvgOccYTitle = "Average Tower Occupancy";
311 
312  AvgEtSum = dbe_->bookProfile( "AvgEtSum",
313  "Average E_{T} Sum",
314  NUM_HLX, 0, NUM_HLX, EtSumBins, EtSumMin, EtSumMax);
315  AvgEtSum->setAxisTitle( AvgXTitle, 1 );
316  AvgEtSum->setAxisTitle( AvgEtSumYTitle, 2 );
317 
318  AvgOccBelowSet1 = dbe_->bookProfile( "AvgOccBelowSet1",
319  "Average Occupancy Below Threshold 1 - Set1",
320  NUM_HLX, 0, NUM_HLX, OccBins, OccMin, OccMax, errorOpt.c_str());
321  AvgOccBelowSet1->setAxisTitle( AvgXTitle, 1 );
322  AvgOccBelowSet1->setAxisTitle( AvgOccYTitle, 2 );
323 
324  AvgOccBetweenSet1 = dbe_->bookProfile( "AvgOccBetweenSet1",
325  "Average Occupancy Between Threhold 1 & 2 - Set1",
326  NUM_HLX, 0, NUM_HLX, OccBins, OccMin, OccMax, errorOpt.c_str());
327  AvgOccBetweenSet1->setAxisTitle( AvgXTitle, 1 );
328  AvgOccBetweenSet1->setAxisTitle( AvgOccYTitle, 2 );
329 
330  AvgOccAboveSet1 = dbe_->bookProfile( "AvgOccAboveSet1",
331  "Average Occupancy Above Threshold 2 - Set1",
332  NUM_HLX, 0, NUM_HLX, OccBins, OccMin, OccMax, errorOpt.c_str());
333  AvgOccAboveSet1->setAxisTitle( AvgXTitle, 1 );
334  AvgOccAboveSet1->setAxisTitle( AvgOccYTitle, 2 );
335 
336  AvgOccBelowSet2 = dbe_->bookProfile("AvgOccBelowSet2",
337  "Average Occupancy Below Threshold 1 - Set2",
338  NUM_HLX, 0, NUM_HLX, OccBins, OccMin, OccMax, errorOpt.c_str());
339  AvgOccBelowSet2->setAxisTitle( AvgXTitle, 1 );
340  AvgOccBelowSet2->setAxisTitle( AvgOccYTitle, 2 );
341 
342  AvgOccBetweenSet2 = dbe_->bookProfile("AvgOccBetweenSet2",
343  "Average Occupancy Between Threshold 1 & 2 - Set2",
344  NUM_HLX, 0, NUM_HLX, OccBins, OccMin, OccMax, errorOpt.c_str());
345  AvgOccBetweenSet2->setAxisTitle( AvgXTitle, 1 );
346  AvgOccBetweenSet2->setAxisTitle( AvgOccYTitle, 2 );
347 
348  AvgOccAboveSet2 = dbe_->bookProfile("AvgOccAboveSet2",
349  "Average Occupancy Above Threshold 2 - Set2",
350  NUM_HLX, 0, NUM_HLX, OccBins, OccMin, OccMax, errorOpt.c_str());
351  AvgOccAboveSet2->setAxisTitle( AvgXTitle, 1 );
352  AvgOccAboveSet2->setAxisTitle( AvgOccYTitle, 2 );
353 
354  // Luminosity Histograms
355  dbe_->setCurrentFolder(monitorName_+"/Luminosity");
356 
357  std::string LumiXTitle = "Bunch Crossing";
358  std::string LumiEtSumYTitle = "Luminosity: E_{T} Sum";
359  std::string LumiOccYTitle = "Luminosity: Occupancy";
360 
361  LumiAvgEtSum = dbe_->bookProfile("LumiAvgEtSum","Average Luminosity ",int(XMAX-XMIN), XMIN, XMAX, EtSumBins, EtSumMin, EtSumMax );
362  LumiAvgEtSum->setAxisTitle( LumiXTitle, 1 );
363  LumiAvgEtSum->setAxisTitle( LumiEtSumYTitle, 2 );
364 
365  LumiAvgOccSet1 = dbe_->bookProfile("LumiAvgOccSet1","Average Luminosity - Set 1", int(XMAX-XMIN), XMIN, XMAX, OccBins, OccMax, OccMin );
366  LumiAvgOccSet1->setAxisTitle( LumiXTitle, 1 );
367  LumiAvgOccSet1->setAxisTitle( LumiOccYTitle, 2 );
368 
369  LumiAvgOccSet2 = dbe_->bookProfile("LumiAvgOccSet2","Average Luminosity - Set 2", int(XMAX-XMIN), XMIN, XMAX, OccBins, OccMax, OccMin );
370  LumiAvgOccSet2->setAxisTitle( LumiXTitle, 1 );
371  LumiAvgOccSet2->setAxisTitle( LumiOccYTitle, 2 );
372 
373  LumiInstantEtSum = dbe_->book1D("LumiInstantEtSum","Instantaneous Luminosity ",int(XMAX-XMIN), XMIN, XMAX );
374  LumiInstantEtSum->setAxisTitle( LumiXTitle, 1 );
375  LumiInstantEtSum->setAxisTitle( LumiEtSumYTitle, 2 );
376 
377  LumiInstantOccSet1 = dbe_->book1D("LumiInstantOccSet1","Instantaneous Luminosity - Set 1", int(XMAX-XMIN), XMIN, XMAX );
378  LumiInstantOccSet1->setAxisTitle( LumiXTitle, 1 );
379  LumiInstantOccSet1->setAxisTitle( LumiOccYTitle, 2 );
380 
381  LumiInstantOccSet2 = dbe_->book1D("LumiInstantOccSet2","Instantaneous Luminosity - Set 2", int(XMAX-XMIN), XMIN, XMAX );
382  LumiInstantOccSet2->setAxisTitle( LumiXTitle, 1 );
383  LumiInstantOccSet2->setAxisTitle( LumiOccYTitle, 2 );
384 
385  LumiIntegratedEtSum = dbe_->book1D("LumiIntegratedEtSum","Integrated Luminosity ",int(XMAX-XMIN), XMIN, XMAX );
386  LumiIntegratedEtSum->setAxisTitle( LumiXTitle, 1 );
387  LumiIntegratedEtSum->setAxisTitle( LumiEtSumYTitle, 2 );
388 
389  LumiIntegratedOccSet1 = dbe_->book1D("LumiIntegratedOccSet1","Integrated Luminosity - Set 1", int(XMAX-XMIN), XMIN, XMAX );
390  LumiIntegratedOccSet1->setAxisTitle( LumiXTitle, 1 );
391  LumiIntegratedOccSet1->setAxisTitle( LumiOccYTitle, 2 );
392 
393  LumiIntegratedOccSet2 = dbe_->book1D("LumiIntegratedOccSet2","Integrated Luminosity - Set 2", int(XMAX-XMIN), XMIN, XMAX );
394  LumiIntegratedOccSet2->setAxisTitle( LumiXTitle, 1 );
395  LumiIntegratedOccSet2->setAxisTitle( LumiOccYTitle, 2 );
396 
397 
398  // Sanity check sum histograms
399  dbe_->setCurrentFolder(monitorName_+"/CheckSums");
400 
401  std::string sumXTitle = "HF Wedge";
402  std::string sumYTitle = "Occupancy Sum (Below+Above+Between)";
403 
404  SumAllOccSet1 = dbe_->bookProfile("SumAllOccSet1","Occupancy Check - Set 1",NUM_HLX, 0, NUM_HLX, OccBins, OccMax, OccMin );
405  SumAllOccSet1->setAxisTitle( sumXTitle, 1 );
406  SumAllOccSet1->setAxisTitle( sumYTitle, 2 );
407 
408  SumAllOccSet2 = dbe_->bookProfile("SumAllOccSet2","Occupancy Check - Set 2",NUM_HLX, 0, NUM_HLX, OccBins, OccMax, OccMin );
409  SumAllOccSet2->setAxisTitle( sumXTitle, 1 );
410  SumAllOccSet2->setAxisTitle( sumYTitle, 2 );
411 
412  MissingDQMDataCheck = dbe_->book1D( "MissingDQMDataCheck", "Missing Data Count",1, 0, 1);
414  MissingDQMDataCheck->setAxisTitle( "Number Missing Nibbles", 2 );
415 
416  // Signal & Background monitoring histograms
417  dbe_->setCurrentFolder(monitorName_+"/SigBkgLevels");
418 
419  MaxInstLumiBX1 = dbe_->book1D("MaxInstLumiBX1","Max Instantaneous Luminosity BX: 1st",10000,-1e-5,0.01);
420  MaxInstLumiBX1->setAxisTitle("Max Inst. L (10^{30}cm^{-2}s^{-1})",1);
421  MaxInstLumiBX1->setAxisTitle("Entries",2);
422  MaxInstLumiBX2 = dbe_->book1D("MaxInstLumiBX2","Max Instantaneous Luminosity BX: 2nd",10000,-1e-5,0.01);
423  MaxInstLumiBX2->setAxisTitle("Max Inst. L (10^{30}cm^{-2}s^{-1})",1);
424  MaxInstLumiBX2->setAxisTitle("Entries",2);
425  MaxInstLumiBX3 = dbe_->book1D("MaxInstLumiBX3","Max Instantaneous Luminosity BX: 3rd",10000,-1e-5,0.01);
426  MaxInstLumiBX3->setAxisTitle("Max Inst. L (10^{30}cm^{-2}s^{-1})",1);
427  MaxInstLumiBX3->setAxisTitle("Entries",2);
428  MaxInstLumiBX4 = dbe_->book1D("MaxInstLumiBX4","Max Instantaneous Luminosity BX: 4th",10000,-1e-5,0.01);
429  MaxInstLumiBX4->setAxisTitle("Max Inst. L (10^{30}cm^{-2}s^{-1})",1);
430  MaxInstLumiBX4->setAxisTitle("Entries",2);
431 
432  MaxInstLumiBXNum1 = dbe_->book1D("MaxInstLumiBXNum1","BX Number of Max: 1st",3564,0,3564);
434  MaxInstLumiBXNum1->setAxisTitle("Num Time Max",2);
435  MaxInstLumiBXNum2 = dbe_->book1D("MaxInstLumiBXNum2","BX Number of Max: 2nd",3564,0,3564);
437  MaxInstLumiBXNum2->setAxisTitle("Num Time Max",2);
438  MaxInstLumiBXNum3 = dbe_->book1D("MaxInstLumiBXNum3","BX Number of Max: 3rd",3564,0,3564);
440  MaxInstLumiBXNum3->setAxisTitle("Num Time Max",2);
441  MaxInstLumiBXNum4 = dbe_->book1D("MaxInstLumiBXNum4","BX Number of Max: 4th",3564,0,3564);
443  MaxInstLumiBXNum4->setAxisTitle("Num Time Max",2);
444 
445  // History histograms
446  dbe_->setCurrentFolder(monitorName_+"/HistoryRaw");
447 
448  std::string HistXTitle = "Time (LS)";
449  std::string RecentHistXTitle = "Time (LS/16)";
450  std::string HistEtSumYTitle = "Average E_{T} Sum";
451  std::string HistOccYTitle = "Average Occupancy";
452  std::string HistLumiYTitle = "Luminosity";
453  std::string HistLumiErrorYTitle = "Luminosity Error (%)";
454  std::string BXvsTimeXTitle = "Time (LS)";
455  std::string BXvsTimeYTitle = "BX";
456 
457  // Et Sum histories
458  HistAvgEtSumHFP = dbe_->bookProfile( "HistAvgEtSumHFP", "Average Et Sum: HF+",
459  MAX_LS, 0.5, (double)MAX_LS+0.5, EtSumBins, EtSumMin, EtSumMax);
460  HistAvgEtSumHFP->setAxisTitle( HistXTitle, 1 );
461  HistAvgEtSumHFP->setAxisTitle( HistEtSumYTitle, 2 );
462 
463  HistAvgEtSumHFM = dbe_->bookProfile( "HistAvgEtSumHFM", "Average Et Sum: HF-",
464  MAX_LS, 0.5, (double)MAX_LS+0.5, EtSumBins, EtSumMin, EtSumMax);
465  HistAvgEtSumHFM->setAxisTitle( HistXTitle, 1 );
466  HistAvgEtSumHFM->setAxisTitle( HistEtSumYTitle, 2 );
467 
468  // Tower Occupancy Histories
469  HistAvgOccBelowSet1HFP = dbe_->bookProfile( "HistAvgOccBelowSet1HFP", "Average Occ Set1Below: HF+",
470  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
471  HistAvgOccBelowSet1HFP->setAxisTitle( HistXTitle, 1 );
472  HistAvgOccBelowSet1HFP->setAxisTitle( HistOccYTitle, 2 );
473 
474  HistAvgOccBelowSet1HFM = dbe_->bookProfile( "HistAvgOccBelowSet1HFM", "Average Occ Set1Below: HF-",
475  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
476  HistAvgOccBelowSet1HFM->setAxisTitle( HistXTitle, 1 );
477  HistAvgOccBelowSet1HFM->setAxisTitle( HistOccYTitle, 2 );
478 
479  HistAvgOccBetweenSet1HFP = dbe_->bookProfile( "HistAvgOccBetweenSet1HFP", "Average Occ Set1Between: HF+",
480  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
481  HistAvgOccBetweenSet1HFP->setAxisTitle( HistXTitle, 1 );
482  HistAvgOccBetweenSet1HFP->setAxisTitle( HistOccYTitle, 2 );
483 
484  HistAvgOccBetweenSet1HFM = dbe_->bookProfile( "HistAvgOccBetweenSet1HFM", "Average Occ Set1Between: HF-",
485  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
486  HistAvgOccBetweenSet1HFM->setAxisTitle( HistXTitle, 1 );
487  HistAvgOccBetweenSet1HFM->setAxisTitle( HistOccYTitle, 2 );
488 
489  HistAvgOccAboveSet1HFP = dbe_->bookProfile( "HistAvgOccAboveSet1HFP", "Average Occ Set1Above: HF+",
490  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
491  HistAvgOccAboveSet1HFP->setAxisTitle( HistXTitle, 1 );
492  HistAvgOccAboveSet1HFP->setAxisTitle( HistOccYTitle, 2 );
493 
494  HistAvgOccAboveSet1HFM = dbe_->bookProfile( "HistAvgOccAboveSet1HFM", "Average Occ Set1Above: HF-",
495  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
496  HistAvgOccAboveSet1HFM->setAxisTitle( HistXTitle, 1 );
497  HistAvgOccAboveSet1HFM->setAxisTitle( HistOccYTitle, 2 );
498 
499  HistAvgOccBelowSet2HFP = dbe_->bookProfile( "HistAvgOccBelowSet2HFP", "Average Occ Set2Below: HF+",
500  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
501  HistAvgOccBelowSet2HFP->setAxisTitle( HistXTitle, 1 );
502  HistAvgOccBelowSet2HFP->setAxisTitle( HistOccYTitle, 2 );
503 
504  HistAvgOccBelowSet2HFM = dbe_->bookProfile( "HistAvgOccBelowSet2HFM", "Average Occ Set2Below: HF-",
505  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
506  HistAvgOccBelowSet2HFM->setAxisTitle( HistXTitle, 1 );
507  HistAvgOccBelowSet2HFM->setAxisTitle( HistOccYTitle, 2 );
508 
509  HistAvgOccBetweenSet2HFP = dbe_->bookProfile( "HistAvgOccBetweenSet2HFP", "Average Occ Set2Between: HF+",
510  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
511  HistAvgOccBetweenSet2HFP->setAxisTitle( HistXTitle, 1 );
512  HistAvgOccBetweenSet2HFP->setAxisTitle( HistOccYTitle, 2 );
513 
514  HistAvgOccBetweenSet2HFM = dbe_->bookProfile( "HistAvgOccBetweenSet2HFM", "Average Occ Set2Between: HF-",
515  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
516  HistAvgOccBetweenSet2HFM->setAxisTitle( HistXTitle, 1 );
517  HistAvgOccBetweenSet2HFM->setAxisTitle( HistOccYTitle, 2 );
518 
519  HistAvgOccAboveSet2HFP = dbe_->bookProfile( "HistAvgOccAboveSet2HFP", "Average Occ Set2Above: HF+",
520  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
521  HistAvgOccAboveSet2HFP->setAxisTitle( HistXTitle, 1 );
522  HistAvgOccAboveSet2HFP->setAxisTitle( HistOccYTitle, 2 );
523 
524  HistAvgOccAboveSet2HFM = dbe_->bookProfile( "HistAvgOccAboveSet2HFM", "Average Occ Set2Above: HF-",
525  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax );
526  HistAvgOccAboveSet2HFM->setAxisTitle( HistXTitle, 1 );
527  HistAvgOccAboveSet2HFM->setAxisTitle( HistOccYTitle, 2 );
528 
529  // Et Sum histories
530  BXvsTimeAvgEtSumHFP = dbe_->book2D( "BXvsTimeAvgEtSumHFP", "Average Et Sum: HF+",
531  MAX_LS, 0.5, (double)MAX_LS+0.5, NBINS, (double)XMIN, (double)XMAX);
532  BXvsTimeAvgEtSumHFP->setAxisTitle( BXvsTimeXTitle, 1 );
533  BXvsTimeAvgEtSumHFP->setAxisTitle( BXvsTimeYTitle, 2 );
534 
535  BXvsTimeAvgEtSumHFM = dbe_->book2D( "BXvsTimeAvgEtSumHFM", "Average Et Sum: HF-",
536  MAX_LS, 0.5, (double)MAX_LS+0.5, NBINS, (double)XMIN, (double)XMAX);
537  BXvsTimeAvgEtSumHFM->setAxisTitle( BXvsTimeXTitle, 1 );
538  BXvsTimeAvgEtSumHFM->setAxisTitle( BXvsTimeYTitle, 2 );
539 
540  dbe_->setCurrentFolder(monitorName_+"/HistoryLumi");
541 
542  // Lumi Histories
543  HistAvgLumiEtSum = dbe_->bookProfile( "HistAvgLumiEtSum", "Average Instant Luminosity: Et Sum",
544  MAX_LS, 0.5, (double)MAX_LS+0.5, EtSumBins, EtSumMin, EtSumMax);
545  HistAvgLumiEtSum->setAxisTitle( HistXTitle, 1 );
546  HistAvgLumiEtSum->setAxisTitle( HistLumiYTitle, 2 );
547 
548  HistAvgLumiOccSet1 = dbe_->bookProfile( "HistAvgLumiOccSet1", "Average Instant Luminosity: Occ Set1",
549  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax);
550  HistAvgLumiOccSet1->setAxisTitle( HistXTitle, 1 );
551  HistAvgLumiOccSet1->setAxisTitle( HistLumiYTitle, 2 );
552 
553  HistAvgLumiOccSet2 = dbe_->bookProfile( "HistAvgLumiOccSet2", "Average Instant Luminosity: Occ Set2",
554  MAX_LS, 0.5, (double)MAX_LS+0.5, OccBins, OccMin, OccMax);
555  HistAvgLumiOccSet2->setAxisTitle( HistXTitle, 1 );
556  HistAvgLumiOccSet2->setAxisTitle( HistLumiYTitle, 2 );
557 
558  HistInstantLumiEtSum = dbe_->book1D( "HistInstantLumiEtSum", "Instant Luminosity: Et Sum",
559  MAX_LS, 0.5, (double)MAX_LS+0.5);
560  HistInstantLumiEtSum->setAxisTitle( HistXTitle, 1 );
561  HistInstantLumiEtSum->setAxisTitle( HistLumiYTitle, 2 );
562 
563  HistInstantLumiOccSet1 = dbe_->book1D( "HistInstantLumiOccSet1", "Instant Luminosity: Occ Set1",
564  MAX_LS, 0.5, (double)MAX_LS+0.5);
565  HistInstantLumiOccSet1->setAxisTitle( HistXTitle, 1 );
566  HistInstantLumiOccSet1->setAxisTitle( HistLumiYTitle, 2 );
567 
568  HistInstantLumiOccSet2 = dbe_->book1D( "HistInstantLumiOccSet2", "Instant Luminosity: Occ Set2",
569  MAX_LS, 0.5, (double)MAX_LS+0.5);
570  HistInstantLumiOccSet2->setAxisTitle( HistXTitle, 1 );
571  HistInstantLumiOccSet2->setAxisTitle( HistLumiYTitle, 2 );
572 
573  HistInstantLumiEtSumError = dbe_->book1D( "HistInstantLumiEtSumError", "Luminosity Error: Et Sum",
574  MAX_LS, 0.5, (double)MAX_LS+0.5);
575  HistInstantLumiEtSumError->setAxisTitle( HistXTitle, 1 );
576  HistInstantLumiEtSumError->setAxisTitle( HistLumiErrorYTitle, 2 );
577 
578  HistInstantLumiOccSet1Error = dbe_->book1D( "HistInstantLumiOccSet1Error", "Luminosity Error: Occ Set1",
579  MAX_LS, 0.5, (double)MAX_LS+0.5);
580  HistInstantLumiOccSet1Error->setAxisTitle( HistXTitle, 1 );
581  HistInstantLumiOccSet1Error->setAxisTitle( HistLumiErrorYTitle, 2 );
582 
583  HistInstantLumiOccSet2Error = dbe_->book1D( "HistInstantLumiOccSet2Error", "Luminosity Error: Occ Set2",
584  MAX_LS, 0.5, (double)MAX_LS+0.5);
585  HistInstantLumiOccSet2Error->setAxisTitle( HistXTitle, 1 );
586  HistInstantLumiOccSet2Error->setAxisTitle( HistLumiErrorYTitle, 2 );
587 
588 
589  HistIntegratedLumiEtSum = dbe_->book1D( "HistIntegratedLumiEtSum", "Integrated Luminosity: Et Sum",
590  MAX_LS, 0.5, (double)MAX_LS+0.5);
591  HistIntegratedLumiEtSum->setAxisTitle( HistXTitle, 1 );
592  HistIntegratedLumiEtSum->setAxisTitle( HistLumiYTitle, 2 );
593 
594  HistIntegratedLumiOccSet1 = dbe_->book1D( "HistIntegratedLumiOccSet1", "Integrated Luminosity: Occ Set1",
595  MAX_LS, 0.5, (double)MAX_LS+0.5);
596  HistIntegratedLumiOccSet1->setAxisTitle( HistXTitle, 1 );
597  HistIntegratedLumiOccSet1->setAxisTitle( HistLumiYTitle, 2 );
598 
599  HistIntegratedLumiOccSet2 = dbe_->book1D( "HistIntegratedLumiOccSet2", "Integrated Luminosity: Occ Set2",
600  MAX_LS, 0.5, (double)MAX_LS+0.5);
601  HistIntegratedLumiOccSet2->setAxisTitle( HistXTitle, 1 );
602  HistIntegratedLumiOccSet2->setAxisTitle( HistLumiYTitle, 2 );
603 
604  dbe_->setCurrentFolder(monitorName_+"/RecentHistoryLumi");
605 
606  // Lumi Recent Histories (past 128 short sections)
607  RecentInstantLumiEtSum = dbe_->book1D( "RecentInstantLumiEtSum", "Instant Luminosity: Et Sum",
608  128, 0.5, (double)128+0.5);
609  RecentInstantLumiEtSum->setAxisTitle( RecentHistXTitle, 1 );
610  RecentInstantLumiEtSum->setAxisTitle( HistLumiYTitle, 2 );
611 
612  RecentInstantLumiOccSet1 = dbe_->book1D( "RecentInstantLumiOccSet1", "Instant Luminosity: Occ Set1",
613  128, 0.5, (double)128+0.5);
614  RecentInstantLumiOccSet1->setAxisTitle( RecentHistXTitle, 1 );
615  RecentInstantLumiOccSet1->setAxisTitle( HistLumiYTitle, 2 );
616 
617  RecentInstantLumiOccSet2 = dbe_->book1D( "RecentInstantLumiOccSet2", "Instant Luminosity: Occ Set2",
618  128, 0.5, (double)128+0.5);
619  RecentInstantLumiOccSet2->setAxisTitle( RecentHistXTitle, 1 );
620  RecentInstantLumiOccSet2->setAxisTitle( HistLumiYTitle, 2 );
621 
622  RecentIntegratedLumiEtSum = dbe_->book1D( "RecentIntegratedLumiEtSum", "Integrated Luminosity: Et Sum",
623  128, 0.5, (double)128+0.5);
624  RecentIntegratedLumiEtSum->setAxisTitle( RecentHistXTitle, 1 );
625  RecentIntegratedLumiEtSum->setAxisTitle( HistLumiYTitle, 2 );
626 
627  RecentIntegratedLumiOccSet1 = dbe_->book1D( "RecentIntegratedLumiOccSet1", "Integrated Luminosity: Occ Set1",
628  128, 0.5, (double)128+0.5);
629  RecentIntegratedLumiOccSet1->setAxisTitle( RecentHistXTitle, 1 );
630  RecentIntegratedLumiOccSet1->setAxisTitle( HistLumiYTitle, 2 );
631 
632  RecentIntegratedLumiOccSet2 = dbe_->book1D( "RecentIntegratedLumiOccSet2", "Integrated Luminosity: Occ Set2",
633  128, 0.5, (double)128+0.5);
634  RecentIntegratedLumiOccSet2->setAxisTitle( RecentHistXTitle, 1 );
635  RecentIntegratedLumiOccSet2->setAxisTitle( HistLumiYTitle, 2 );
636 
637  std::vector<std::string> systems = (dbe_->cd(), dbe_->getSubdirs());
638  for( size_t i=0, e = systems.size(); i<e; ++i ){
639  std::cout << "Systems " << systems[i] << std::endl;
640  }
641 
643 }
644 
645 
647 {
648 
649  using std::string;
650 
651  string currentfolder = subSystemName_ + "/" + eventInfoFolderHLX_;
652  //cout << "currentfolder " << currentfolder << endl;
653 
654  dbe_->setCurrentFolder(currentfolder) ;
655 
656  pEvent_ = 0;
657  evtRateCount_ = 0;
658  gettimeofday(&currentTime_,NULL);
660  evtRateWindow_ = 0.5;
661 
662  //Event specific contents
663  runId_ = dbe_->bookInt("iRun");
664  lumisecId_ = dbe_->bookInt("iLumiSection");
665 
666  eventId_ = dbe_->bookInt("iEvent");
667  eventId_->Fill(-1);
668  eventTimeStamp_ = dbe_->bookFloat("eventTimeStamp");
669 
670  dbe_->setCurrentFolder(currentfolder) ;
671  //Process specific contents
672  processTimeStamp_ = dbe_->bookFloat("processTimeStamp");
674  processLatency_ = dbe_->bookFloat("processLatency");
675  processTimeStamp_->Fill(-1);
676  processEvents_ = dbe_->bookInt("processedEvents");
678  processEventRate_ = dbe_->bookFloat("processEventRate");
679  processEventRate_->Fill(-1);
680  nUpdates_= dbe_->bookInt("processUpdates");
681  nUpdates_->Fill(-1);
682 
683  //Static Contents
684  processId_= dbe_->bookInt("processID");
685  processId_->Fill(gSystem->GetPid());
686  processStartTimeStamp_ = dbe_->bookFloat("processStartTimeStamp");
688  runStartTimeStamp_ = dbe_->bookFloat("runStartTimeStamp");
689  hostName_= dbe_->bookString("hostName",gSystem->HostName());
690  processName_= dbe_->bookString("processName",subSystemName_);
691  workingDir_= dbe_->bookString("workingDir",gSystem->pwd());
692  cmsswVer_= dbe_->bookString("CMSSW_Version",edm::getReleaseVersion());
693  // dqmPatch_= dbe_->bookString("DQM_Patch",dbe_->getDQMPatchVersion());
694 
695  // Go to the standard EventInfo folder (in the case online case where this
696  // is different).
697  currentfolder = subSystemName_ + "/" + eventInfoFolder_;
698  dbe_->setCurrentFolder(currentfolder) ;
699 
700  reportSummary_ = dbe_->bookFloat("reportSummary");
701  reportSummaryMap_ = dbe_->book2D("reportSummaryMap", "reportSummaryMap", 18, 0., 18., 2, -1.5, 1.5);
702 
703  currentfolder = subSystemName_ + "/" + eventInfoFolderHLX_;
704  dbe_->setCurrentFolder(currentfolder) ;
705 
706  TH2F *summaryHist = reportSummaryMap_->getTH2F();
707  summaryHist->GetYaxis()->SetBinLabel(1,"HF-");
708  summaryHist->GetYaxis()->SetBinLabel(2,"HF+");
709  summaryHist->GetXaxis()->SetTitle("Wedge #");
710 
711  // Fill the report summary objects with default values, since these will only
712  // be filled at the change of run.
713  reportSummary_->Fill(1.0);
714 
715  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ){
716  unsigned int iWedge = HLXHFMap[iHLX] + 1;
717  unsigned int iEta = 2;
718  if( iWedge >= 19 ){ iEta = 1; iWedge -= 18; }
719  reportSummaryMap_->setBinContent(iWedge,iEta,1.0);
720  }
721 }
722 
723 
724 // ------------ method called to for each event ------------
725 void
727 {
728  using namespace edm;
729 
730  while( HLXTCP.IsConnected() == false )
731  {
733  if( HLXTCP.Connect() != 1 )
734  {
735  std::cout << "Failed to connect to " << DistribIP1 << "." << std::endl;
736  sleep( 1 );
737  std::cout << "Trying " << DistribIP2 << std::endl;
739  if( HLXTCP.Connect() == 1) break;
740  std::cout << "Failed to connect to " << DistribIP2 << "." << std::endl;
741  std::cout << " Reconnect in " << reconnTime << " seconds." << std::endl;
742  sleep(reconnTime);
743  }
744  }
745  if( HLXTCP.IsConnected() == true )
746  {
747  std::cout << "Successfully connected." << std::endl;
748  }
749 
751  {
752  // If this is the first time through, set the runNumber ...
754  if( !currentRunEnded_ && runNumber_ != 0 ) EndRun();
756  currentRunEnded_ = false;
757  //std::cout << "Run number is: " << runNumber_ << std::endl;
758  timeval startruntime;
759  gettimeofday(&startruntime,NULL);
760  runStartTimeStamp_->Fill(getUTCtime(&startruntime));
761  }
762 
763  // Fill the monitoring histograms
766  FillEventInfo(lumiSection,iEvent);
768 
769  cout << "Run: " << lumiSection.hdr.runNumber
770  << " Section: " << lumiSection.hdr.sectionNumber
771  << " Orbit: " << lumiSection.hdr.startOrbit << endl;
772  cout << "Et Lumi: " << lumiSection.lumiSummary.InstantETLumi << endl;
773  cout << "Occ Lumi 1: " << lumiSection.lumiSummary.InstantOccLumi[0] << endl;
774  cout << "Occ Lumi 2: " << lumiSection.lumiSummary.InstantOccLumi[1] << endl;
775  }
776  else
777  {
778  HLXTCP.Disconnect();
779  EndRun();
780  }
781 
782 // do
783 // {
784 // errorCode = HLXTCP.ReceiveLumiSection(lumiSection);
785 
786 // while(errorCode !=1)
787 // {
788 // HLXTCP.Disconnect();
789 // //cout << "Connecting to TCPDistributor" << endl;
790 // errorCode = HLXTCP.Connect();
791 // if(errorCode != 1)
792 // {
793 // if( (attemptCounter%10)==0 ){
794 // cout << "*** Connection Failed: " << errorCode
795 // << " Will attempt to reconnect in " << reconnTime << " seconds." << endl;
796 // cout << "This message will be printed once every 10 attempts." << endl;
797 // }
798 // ++attemptCounter;
799 // sleep(reconnTime);
800 // }
801 // }
802 // } while( errorCode != 1 );
803 
804 }
805 
806 
808 
809  std::ostringstream tempStreamer;
810  tempStreamer << OutputDir << "/" << OutputFilePrefix << "_" << subSystemName_
811  << "_R" << std::setfill('0') << std::setw(runNumLength)
812  << runNumber_ << "_T00000001.root";
813 
814  std::vector<std::string> systems = (dbe_->cd(), dbe_->getSubdirs());
815  char rewrite[64]; sprintf(rewrite, "\\1Run %d/\\2/Run summary", runNumber_);
816  int saveReference_ = DQMStore::SaveWithoutReference;
817  int saveReferenceQMin_ = dqm::qstatus::STATUS_OK;
818 
819  for( size_t i = 0, e = systems.size(); i != e; ++i )
820  if (systems[i] != "Reference")
821  // TODO(rovere): fix the saving to comply w/ the DQM-multithread
822  dbe_->save( tempStreamer.str(),
823  systems[i],
824  "^(Reference/)?([^/]+)",
825  rewrite,
826  0,
827  0,
828  (DQMStore::SaveReferenceTag)saveReference_, saveReferenceQMin_);
829 
830  //dbe_->save(tempStreamer.str());
831 }
832 
833 // ------------ method called once each job just before starting event loop ------------
835 {
837  int errorCode = HLXTCP.SetPort(listenPort);
838  cout << "SetPort: " << listenPort << " Success: " << errorCode << endl;
839  errorCode = HLXTCP.SetMode(AquireMode);
840  cout << "AquireMode: " << AquireMode << " Success: " << errorCode << endl;
841 
842  while( HLXTCP.IsConnected() == false )
843  {
845  if( HLXTCP.Connect() != 1 )
846  {
847  std::cout << "Failed to connect to " << DistribIP1 << "." << std::endl;
848  sleep( 1 );
849  std::cout << "Trying " << DistribIP2 << std::endl;
851  if( HLXTCP.Connect() == 1) break;
852  std::cout << "Failed to connect to " << DistribIP2 << "." << std::endl;
853  std::cout << " Reconnect in " << reconnTime << " seconds." << std::endl;
854  sleep(reconnTime);
855  }
856  }
857  if( HLXTCP.IsConnected() == true )
858  {
859  std::cout << "Successfully connected." << std::endl;
860  }
861 
862 }
863 
864 // ------------ method called once each job just after ending the event loop ------------
866 {
867  // Fill the report summaries at end job
868  // Loop over the HLX's and fill the map,
869  // also calculate the overall quality.
870  HLXTCP.Disconnect();
871  EndRun( SaveAtEndJob );
872 }
873 
874 void HLXMonitor::EndRun( bool saveFile )
875 {
877 
878  // Do some things that should be done at the end of the run ...
879  if( saveFile && runNumber_ != 0 ){
881  else std::cout << "Num LS's (" << int(lumiSectionCount/num4NibblePerLS_) << ") "
882  << "is less than required minumum (" << MinLSBeforeSave
883  << "). File will not be saved!" << std::endl;
884  }
885  expectedNibbles_ = 0;
886  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ) totalNibbles_[iHLX] = 0;
887 
888  std::cout << "** Here in end run **" << std::endl;
889  if(ResetAtNewRun) ResetAll();
890  runNumber_ = 0;
891  currentRunEnded_ = true;
898  sectionInstantNorm = 0;
899  lsBinOld = 0;
900  lumiSectionCount = 0;
901  previousSection = 0;
902 }
903 
904 
906 {
907  // Check for missing data
908  if( previousSection != (section.hdr.sectionNumber-1) ){
909  double weight = (double)(section.hdr.sectionNumber-previousSection-1);
910  //std::cout << "Filling missing data! " << weight << std::endl;
911  MissingDQMDataCheck->Fill(0.5,weight);
912  }
914 
915  int lsBin = int(lumiSectionCount/num4NibblePerLS_);
916  int lsBinBX = int(lumiSectionCount/num4NibblePerLS_);
920  //std::cout << "Lumi section count " << lumiSectionCount << " lsBin " << lsBin
921  // << " lsBinOld " << lsBinOld << " True section: " << section.hdr.sectionNumber << std::endl;
922 
923  //std::cout << "Instant Et sum: " << section.lumiSummary.InstantETLumi
924  // << " +/- " << section.lumiSummary.InstantETLumiErr << std::endl;
925  //std::cout << "Section sum so far: " << sectionInstantSumEt << " +/- "
926  // << sqrt(sectionInstantErrSumEt) << std::endl;
927 
928  int fillBin = lumiSectionCount+1;
929  if( fillBin > 128 )
930  {
931  // If we are already more than 2 LS's in, move everything back by one bin
932  // and fill the last bin with the new value.
933  for( int iBin = 1; iBin<128; ++iBin )
934  {
941  }
942  fillBin = 128;
943  }
944 
951 
952  double recentOldBinContent = RecentIntegratedLumiEtSum->getBinContent(fillBin-1);
953  if( fillBin == 1 ) recentOldBinContent = 0;
954  double recentNewBinContent = recentOldBinContent + section.lumiSummary.InstantETLumi;
955  RecentIntegratedLumiEtSum->setBinContent(fillBin,recentNewBinContent);
956  recentOldBinContent = RecentIntegratedLumiOccSet1->getBinContent(fillBin-1);
957  if( fillBin == 1 ) recentOldBinContent = 0;
958  recentNewBinContent = recentOldBinContent + section.lumiSummary.InstantOccLumi[0];
959  RecentIntegratedLumiOccSet1->setBinContent(fillBin,recentNewBinContent);
960  recentOldBinContent = RecentIntegratedLumiOccSet2->getBinContent(fillBin-1);
961  if( fillBin == 1 ) recentOldBinContent = 0;
962  recentNewBinContent = recentOldBinContent + section.lumiSummary.InstantOccLumi[0];
963  RecentIntegratedLumiOccSet2->setBinContent(fillBin,recentNewBinContent);
964 
965  double recentOldBinError = RecentIntegratedLumiEtSum->getBinError(fillBin-1);
966  if( fillBin == 1 ) recentOldBinError = 0;
967  double recentNewBinError = sqrt(recentOldBinError*recentOldBinError + section.lumiSummary.InstantETLumiErr*section.lumiSummary.InstantETLumiErr);
968  RecentIntegratedLumiEtSum->setBinError(fillBin,recentNewBinError);
969  recentOldBinError = RecentIntegratedLumiOccSet1->getBinError(fillBin-1);
970  if( fillBin == 1 ) recentOldBinError = 0;
971  recentNewBinError = sqrt(recentOldBinError*recentOldBinError + section.lumiSummary.InstantOccLumiErr[0]*section.lumiSummary.InstantOccLumiErr[0]);
972  RecentIntegratedLumiOccSet1->setBinError(fillBin,recentNewBinError);
973  recentOldBinError = RecentIntegratedLumiOccSet2->getBinError(fillBin-1);
974  if( fillBin == 1 ) recentOldBinError = 0;
975  recentNewBinError = sqrt(recentOldBinError*recentOldBinError + section.lumiSummary.InstantOccLumiErr[1]*section.lumiSummary.InstantOccLumiErr[1]);
976  RecentIntegratedLumiOccSet2->setBinError(fillBin,recentNewBinError);
977 
978 // std::cout << "New total " << RecentIntegratedLumiEtSum->getBinContent(fillBin)
979 // << " +/- " << RecentIntegratedLumiEtSum->getBinError(fillBin) << std::endl;
980 
981  if( lsBinOld != lsBin )
982  {
989 
990  double etDenom = fabs(sectionInstantSumEt);
991  if( etDenom < 1e-10 ) etDenom = 1e-10;
992  double occ1Denom = fabs(sectionInstantSumOcc1);
993  if( occ1Denom < 1e-10 ) occ1Denom = 1e-10;
994  double occ2Denom = fabs(sectionInstantSumOcc2);
995  if( occ2Denom < 1e-10 ) occ2Denom = 1e-10;
996  double etError = 100.0*sqrt(sectionInstantErrSumEt)/etDenom;
997  double occ1Error = 100.0*sqrt(sectionInstantErrSumOcc1)/occ1Denom;
998  double occ2Error = 100.0*sqrt(sectionInstantErrSumOcc2)/occ2Denom;
1002 
1003  double histOldBinContent = HistIntegratedLumiEtSum->getBinContent(lsBinOld);
1004  if( lsBinOld == 0 ) histOldBinContent = 0;
1005  double histNewBinContent = histOldBinContent + sectionInstantSumEt;
1006  HistIntegratedLumiEtSum->setBinContent(lsBin,histNewBinContent);
1007  histOldBinContent = HistIntegratedLumiOccSet1->getBinContent(lsBinOld);
1008  if( lsBinOld == 0 ) histOldBinContent = 0;
1009  histNewBinContent = histOldBinContent + sectionInstantSumOcc1;
1010  HistIntegratedLumiOccSet1->setBinContent(lsBin,histNewBinContent);
1011  histOldBinContent = HistIntegratedLumiOccSet2->getBinContent(lsBinOld);
1012  if( lsBinOld == 0 ) histOldBinContent = 0;
1013  histNewBinContent = histOldBinContent + sectionInstantSumOcc2;
1014  HistIntegratedLumiOccSet2->setBinContent(lsBin,histNewBinContent);
1015 
1016  double histOldBinError = HistIntegratedLumiEtSum->getBinError(lsBinOld);
1017  if( lsBinOld == 0 ) histOldBinError = 0;
1018  double histNewBinError = sqrt(histOldBinError*histOldBinError + sectionInstantErrSumEt);
1019  HistIntegratedLumiEtSum->setBinError(lsBin,histNewBinError);
1020  histOldBinError = HistIntegratedLumiOccSet1->getBinError(lsBinOld);
1021  if( lsBinOld == 0 ) histOldBinError = 0;
1022  histNewBinError = sqrt(histOldBinError*histOldBinError + sectionInstantErrSumOcc1);
1023  HistIntegratedLumiOccSet1->setBinError(lsBin,histNewBinError);
1024  histOldBinError = HistIntegratedLumiOccSet2->getBinError(lsBinOld);
1025  if( lsBinOld == 0 ) histOldBinError = 0;
1026  histNewBinError = sqrt(histOldBinError*histOldBinError + sectionInstantErrSumOcc2);
1027  HistIntegratedLumiOccSet2->setBinError(lsBin,histNewBinError);
1028 
1029  sectionInstantSumEt = 0;
1031  sectionInstantSumOcc1 = 0;
1033  sectionInstantSumOcc2 = 0;
1035  sectionInstantNorm = 0;
1036  lsBinOld = lsBin;
1037  }
1038 
1046 
1050 
1051  for( int iHLX = 0; iHLX < (int)NUM_HLX; ++iHLX ){
1052  unsigned int utotal1= 0;
1053  unsigned int utotal2 = 0;
1054  unsigned int iWedge = HLXHFMap[iHLX];
1055  if(section.occupancy[iHLX].hdr.numNibbles != 0){
1056 
1057  // Don't include the last one hundred BX in the average.
1058  for( unsigned int iBX = 0; iBX < NUM_BUNCHES; ++iBX ){
1059 
1060  // Normalize to number of towers
1061  unsigned int norm[2] = {0,0};
1062  norm[0] += section.occupancy[iHLX].data[set1BelowIndex ][iBX];
1063  norm[0] += section.occupancy[iHLX].data[set1BetweenIndex ][iBX];
1064  norm[0] += section.occupancy[iHLX].data[set1AboveIndex ][iBX];
1065  if( norm[0] == 0 ) norm[0]=1;
1066  norm[1] += section.occupancy[iHLX].data[set2BelowIndex ][iBX];
1067  norm[1] += section.occupancy[iHLX].data[set2BetweenIndex ][iBX];
1068  norm[1] += section.occupancy[iHLX].data[set2AboveIndex ][iBX];
1069  if( norm[1] == 0 ) norm[1]=1;
1070 
1071  double normEt = section.etSum[iHLX].data[iBX]/(double)(norm[0]+norm[1]);
1072  double normOccSet1Below = (double)section.occupancy[iHLX].data[set1BelowIndex][iBX]/(double)norm[0];
1073  double normOccSet1Between = (double)section.occupancy[iHLX].data[set1BetweenIndex][iBX]/(double)norm[0];
1074  double normOccSet1Above = (double)section.occupancy[iHLX].data[set1AboveIndex][iBX]/(double)norm[0];
1075  double normOccSet2Below = (double)section.occupancy[iHLX].data[set2BelowIndex][iBX]/(double)norm[1];
1076  double normOccSet2Between = (double)section.occupancy[iHLX].data[set2BetweenIndex][iBX]/(double)norm[1];
1077  double normOccSet2Above = (double)section.occupancy[iHLX].data[set2AboveIndex][iBX]/(double)norm[1];
1078 
1079  // Averages & check sum
1080  if( iBX < NUM_BUNCHES-100 )
1081  {
1082  AvgEtSum->Fill( iWedge,normEt);
1083 
1084  AvgOccBelowSet1-> Fill( iWedge, normOccSet1Below );
1085  AvgOccBetweenSet1->Fill( iWedge, normOccSet1Between );
1086  AvgOccAboveSet1-> Fill( iWedge, normOccSet1Above );
1087 
1088  AvgOccBelowSet2-> Fill( iWedge, normOccSet2Below );
1089  AvgOccBetweenSet2->Fill( iWedge, normOccSet2Between );
1090  AvgOccAboveSet2-> Fill( iWedge, normOccSet2Above );
1091 
1092  if( iWedge < 18 )
1093  {
1094  HistAvgEtSumHFP->Fill( lsBin,normEt);
1095  HistAvgOccBelowSet1HFP->Fill( lsBin, normOccSet1Below );
1096  HistAvgOccBetweenSet1HFP->Fill( lsBin, normOccSet1Between );
1097  HistAvgOccAboveSet1HFP->Fill( lsBin, normOccSet1Above );
1098  HistAvgOccBelowSet2HFP->Fill( lsBin, normOccSet2Below );
1099  HistAvgOccBetweenSet2HFP->Fill( lsBin, normOccSet2Between );
1100  HistAvgOccAboveSet2HFP->Fill( lsBin, normOccSet2Above );
1101 
1102  if( iBX >= (XMIN-1) && iBX <= (XMAX-1) ) BXvsTimeAvgEtSumHFP->Fill(lsBinBX,iBX,normEt/(num4NibblePerLS_*18.0*12.0));
1103  }
1104  else
1105  {
1106  HistAvgEtSumHFM->Fill( lsBin,normEt);
1107  HistAvgOccBelowSet1HFM->Fill( lsBin, normOccSet1Below );
1108  HistAvgOccBetweenSet1HFM->Fill( lsBin, normOccSet1Between );
1109  HistAvgOccAboveSet1HFM->Fill( lsBin, normOccSet1Above );
1110  HistAvgOccBelowSet2HFM->Fill( lsBin, normOccSet2Below );
1111  HistAvgOccBetweenSet2HFM->Fill( lsBin, normOccSet2Between );
1112  HistAvgOccAboveSet2HFM->Fill( lsBin, normOccSet2Above );
1113 
1114  if( iBX >= (XMIN-1) && iBX <= (XMAX-1) ) BXvsTimeAvgEtSumHFM->Fill(lsBinBX,iBX,normEt/(num4NibblePerLS_*18.0*12.0));
1115  }
1116 
1117  utotal1 += section.occupancy[iHLX].data[set1BelowIndex ][iBX];
1118  utotal1 += section.occupancy[iHLX].data[set1BetweenIndex][iBX];
1119  utotal1 += section.occupancy[iHLX].data[set1AboveIndex ][iBX];
1120 
1121  utotal2 += section.occupancy[iHLX].data[set2BelowIndex ][iBX];
1122  utotal2 += section.occupancy[iHLX].data[set2BetweenIndex][iBX];
1123  utotal2 += section.occupancy[iHLX].data[set2AboveIndex ][iBX];
1124 
1125  }
1126 
1127  if(Style.compare("BX") == 0)
1128  {
1129  // Get the correct bin ...
1130  TH1F *Set1BelowHist = Set1Below[iWedge]->getTH1F();
1131  int iBin = Set1BelowHist->FindBin((float)iBX);
1132 
1133  // Adjust the old bin content to make the new, unnormalize and renormalize
1134  if( lumiSectionCount > 0 ){
1135  double oldNormOccSet1Below = (Set1Below[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1136  normOccSet1Below += oldNormOccSet1Below;
1137  normOccSet1Below /= (double)(lumiSectionCount+1);
1138  double oldNormOccSet2Below = (Set2Below[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1139  normOccSet2Below += oldNormOccSet2Below;
1140  normOccSet2Below /= (double)(lumiSectionCount+1);
1141 
1142  double oldNormOccSet1Between = (Set1Between[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1143  normOccSet1Between += oldNormOccSet1Between;
1144  normOccSet1Between /= (double)(lumiSectionCount+1);
1145  double oldNormOccSet2Between = (Set2Between[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1146  normOccSet2Between += oldNormOccSet2Between;
1147  normOccSet2Between /= (double)(lumiSectionCount+1);
1148 
1149  double oldNormOccSet1Above = (Set1Above[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1150  normOccSet1Above += oldNormOccSet1Above;
1151  normOccSet1Above /= (double)(lumiSectionCount+1);
1152  double oldNormOccSet2Above = (Set2Above[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1153  normOccSet2Above += oldNormOccSet2Above;
1154  normOccSet2Above /= (double)(lumiSectionCount+1);
1155 
1156  double oldNormEt = ETSum[iWedge]->getBinContent(iBin)*(double)(lumiSectionCount);
1157  normEt += oldNormEt;
1158  normEt /= (double)(lumiSectionCount+1);
1159  }
1160 
1161  Set1Below[iWedge]-> setBinContent(iBin, normOccSet1Below );
1162  Set1Between[iWedge]->setBinContent(iBin, normOccSet1Between );
1163  Set1Above[iWedge]-> setBinContent(iBin, normOccSet1Above );
1164  Set2Below[iWedge]-> setBinContent(iBin, normOccSet2Below );
1165  Set2Between[iWedge]->setBinContent(iBin, normOccSet2Between );
1166  Set2Above[iWedge]-> setBinContent(iBin, normOccSet2Above );
1167  ETSum[iWedge]-> setBinContent(iBin, normEt);
1168 
1169 // Set1Below[iWedge]-> Fill(iBX, normOccSet1Below );
1170 // Set1Between[iWedge]->Fill(iBX, normOccSet1Between );
1171 // Set1Above[iWedge]-> Fill(iBX, normOccSet1Above );
1172 // Set2Below[iWedge]-> Fill(iBX, normOccSet2Below );
1173 // Set2Between[iWedge]->Fill(iBX, normOccSet2Between );
1174 // Set2Above[iWedge]-> Fill(iBX, normOccSet2Above );
1175 // ETSum[iWedge]-> Fill(iBX, normEt);
1176  }
1177  else if(Style.compare("Dist")==0)
1178  {
1179  Set1Below[iWedge]-> Fill( normOccSet1Below );
1180  Set1Between[iWedge]->Fill( normOccSet1Between );
1181  Set1Above[iWedge]-> Fill( normOccSet1Above );
1182  Set2Below[iWedge]-> Fill( normOccSet2Below );
1183  Set2Between[iWedge]->Fill( normOccSet2Between );
1184  Set2Above[iWedge]-> Fill( normOccSet2Above );
1185  ETSum[iWedge]-> Fill( normEt );
1186  }
1187  }
1188 
1189  // Get the number of towers per wedge per BX (assuming non-zero numbers)
1190  double total1 = 0;
1191  double total2 = 0;
1192  if( (NUM_BUNCHES-100)>0 )
1193  {
1194  total1 = (double)utotal1/(double)(NUM_BUNCHES-100);
1195  total2 = (double)utotal2/(double)(NUM_BUNCHES-100);
1196  }
1197  if( section.hdr.numOrbits > 0 )
1198  {
1199  total1 = total1/(double)section.hdr.numOrbits;
1200  total2 = total2/(double)section.hdr.numOrbits;
1201  }
1202 
1203  SumAllOccSet1-> Fill( iWedge, total1 );
1204  SumAllOccSet2-> Fill( iWedge, total2 );
1205  }
1206  }
1207 
1208  double max[4] = {-1000.0,-1000.0,-1000.0,-1000.0};
1209  int bxmax[4] = {-1,-1,-1,-1};
1210  for( unsigned int iBX = 0; iBX < NUM_BUNCHES; ++iBX ){
1211 
1212  LumiAvgEtSum->Fill(iBX, section.lumiDetail.ETLumi[iBX]);
1213  LumiAvgOccSet1->Fill(iBX, section.lumiDetail.OccLumi[0][iBX]);
1214  LumiAvgOccSet2->Fill(iBX, section.lumiDetail.OccLumi[1][iBX]);
1215 
1216  if( section.lumiDetail.OccLumi[0][iBX] > max[0] ){
1217  max[3] = max[2];
1218  bxmax[3] = bxmax[2];
1219  max[2] = max[1];
1220  bxmax[2] = bxmax[1];
1221  max[1] = max[0];
1222  bxmax[1] = bxmax[0];
1223  max[0] = section.lumiDetail.OccLumi[0][iBX];
1224  bxmax[0] = iBX;
1225  } else if( section.lumiDetail.OccLumi[0][iBX] > max[1] ){
1226  max[3] = max[2];
1227  bxmax[3] = bxmax[2];
1228  max[2] = max[1];
1229  bxmax[2] = bxmax[1];
1230  max[1] = section.lumiDetail.OccLumi[0][iBX];
1231  bxmax[1] = iBX;
1232  } else if( section.lumiDetail.OccLumi[0][iBX] > max[2] ){
1233  max[3] = max[2];
1234  bxmax[3] = bxmax[2];
1235  max[2] = section.lumiDetail.OccLumi[0][iBX];
1236  bxmax[2] = iBX;
1237  } else if( section.lumiDetail.OccLumi[0][iBX] > max[3] ){
1238  max[3] = section.lumiDetail.OccLumi[0][iBX];
1239  bxmax[3] = iBX;
1240  }
1241 
1242  int iBin = iBX - (int)XMIN + 1;
1243  if( iBin <= int(XMAX-XMIN) && iBin >= 1 ){
1244 
1245  //cout << "Et sum " << section.lumiDetail.ETLumi[iBX] << " +/- "
1246  // << section.lumiDetail.ETLumiErr[iBX] << std::endl;
1247  //cout << "Occ1 " << section.lumiDetail.OccLumi[0][iBX] << " +/- "
1248  // << section.lumiDetail.OccLumiErr[0][iBX] << std::endl;
1249  //cout << "Occ2 " << section.lumiDetail.OccLumi[1][iBX] << " +/- "
1250  // << section.lumiDetail.OccLumiErr[1][iBX] << std::endl;
1251  LumiInstantEtSum->setBinContent(iBin, section.lumiDetail.ETLumi[iBX]);
1252  LumiInstantOccSet1->setBinContent(iBin, section.lumiDetail.OccLumi[0][iBX]);
1253  LumiInstantOccSet2->setBinContent(iBin, section.lumiDetail.OccLumi[1][iBX]);
1254  LumiInstantEtSum->setBinError(iBin, section.lumiDetail.ETLumiErr[iBX]);
1255  LumiInstantOccSet1->setBinError(iBin, section.lumiDetail.OccLumiErr[0][iBX]);
1256  LumiInstantOccSet2->setBinError(iBin, section.lumiDetail.OccLumiErr[1][iBX]);
1257 
1258  double oldBinContent = LumiIntegratedEtSum->getBinContent(iBin);
1259  if( lumiSectionCount == 0 ) oldBinContent = 0;
1260  double newBinContent = oldBinContent + section.lumiDetail.ETLumi[iBX];
1261  LumiIntegratedEtSum->setBinContent(iBin, newBinContent);
1262  oldBinContent = LumiIntegratedOccSet1->getBinContent(iBin);
1263  if( lumiSectionCount == 0 ) oldBinContent = 0;
1264  newBinContent = oldBinContent + section.lumiDetail.OccLumi[0][iBX];
1265  LumiIntegratedOccSet1->setBinContent(iBin, newBinContent);
1266  oldBinContent = LumiIntegratedOccSet2->getBinContent(iBin);
1267  if( lumiSectionCount == 0 ) oldBinContent = 0;
1268  newBinContent = oldBinContent + section.lumiDetail.OccLumi[1][iBX];
1269  LumiIntegratedOccSet2->setBinContent(iBin, newBinContent);
1270 
1271  double oldBinError = LumiIntegratedEtSum->getBinError(iBin);
1272  if( lumiSectionCount == 0 ) oldBinError = 0;
1273  double newBinError = sqrt(oldBinError*oldBinError + section.lumiDetail.ETLumiErr[iBX]*section.lumiDetail.ETLumiErr[iBX]);
1274  LumiIntegratedEtSum->setBinError(iBin, newBinError);
1275  oldBinError = LumiIntegratedOccSet1->getBinError(iBin);
1276  if( lumiSectionCount == 0 ) oldBinError = 0;
1277  newBinError = sqrt(oldBinError*oldBinError + section.lumiDetail.OccLumiErr[0][iBX]*section.lumiDetail.OccLumiErr[0][iBX]);
1278  LumiIntegratedOccSet1->setBinError(iBin, newBinError);
1279  oldBinError = LumiIntegratedOccSet1->getBinError(iBin);
1280  if( lumiSectionCount == 0 ) oldBinError = 0;
1281  newBinError = sqrt(oldBinError*oldBinError + section.lumiDetail.OccLumiErr[1][iBX]*section.lumiDetail.OccLumiErr[1][iBX]);
1282  LumiIntegratedOccSet2->setBinError(iBin, newBinError);
1283  }
1284  }
1285 
1286  // Now fill the maximum hists, but ordered by BX, so that
1287  // collision BX's or satellite BX's will always appear in the
1288  // same histogram.
1289  int flag=1;
1290  for( int iM = 0; (iM<4)&&flag; ++iM ){
1291  flag = 0;
1292  for( int iN = 0; iN < 3; ++iN ){
1293  if( bxmax[iN+1] < bxmax[iN] ){
1294  int tmp = bxmax[iN];
1295  bxmax[iN] = bxmax[iN+1];
1296  bxmax[iN+1] = tmp;
1297 
1298  double tmp2 = max[iN];
1299  max[iN] = max[iN+1];
1300  max[iN+1] = tmp2;
1301  flag=1;
1302  }
1303  }
1304  }
1305 
1306  // 0.9e1 = Conversion constant for occ1 at 900GeV COM.
1307  MaxInstLumiBX1->Fill(max[0]*0.9e1);
1308  MaxInstLumiBXNum1->Fill(bxmax[0]);
1309  MaxInstLumiBX2->Fill(max[1]*0.9e1);
1310  MaxInstLumiBXNum2->Fill(bxmax[1]);
1311  MaxInstLumiBX3->Fill(max[2]*0.9e1);
1312  MaxInstLumiBXNum3->Fill(bxmax[2]);
1313  MaxInstLumiBX4->Fill(max[3]*0.9e1);
1314  MaxInstLumiBXNum4->Fill(bxmax[3]);
1315 
1316  TH1F* tmpHist = MaxInstLumiBX1->getTH1F();
1317  double minX = tmpHist->GetBinLowEdge(1);
1318  double maxX = tmpHist->GetBinLowEdge(tmpHist->GetNbinsX()+1);
1319 
1320  int inum4NibblePerLS = (int)num4NibblePerLS_;
1321  if( lumiSectionCount%inum4NibblePerLS == 0 ){
1322  double mean1 = MaxInstLumiBX1->getMean();
1323  double rms1 = MaxInstLumiBX1->getRMS();
1324  if( rms1 > 0 && mean1-5*rms1 > minX && mean1+5*rms1<maxX ) MaxInstLumiBX1->setAxisRange(mean1-5*rms1,mean1+5*rms1);
1325 
1326  double mean2 = MaxInstLumiBX2->getMean();
1327  double rms2 = MaxInstLumiBX2->getRMS();
1328  if( rms2 > 0 && mean2-5*rms2 > minX && mean2+5*rms2<maxX ) MaxInstLumiBX2->setAxisRange(mean2-5*rms2,mean2+5*rms2);
1329 
1330  double mean3 = MaxInstLumiBX3->getMean();
1331  double rms3 = MaxInstLumiBX3->getRMS();
1332  if( rms3 > 0 && mean3-5*rms3 > minX && mean3+5*rms3<maxX ) MaxInstLumiBX3->setAxisRange(mean3-5*rms3,mean3+5*rms3);
1333 
1334  double mean4 = MaxInstLumiBX4->getMean();
1335  double rms4 = MaxInstLumiBX4->getRMS();
1336  if( rms4 > 0 && mean4-5*rms4 > minX && mean4+5*rms4<maxX ) MaxInstLumiBX4->setAxisRange(mean4-5*rms4,mean4+5*rms4);
1337  }
1338 
1339 
1340  // Add one to the section count (usually short sections)
1341  ++lumiSectionCount;
1342 }
1343 
1344 
1346 {
1347 
1348  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ){
1349 
1350  unsigned int iWedge = HLXHFMap[iHLX];
1351 
1352  if(section.occupancy[iHLX].hdr.numNibbles != 0){
1353  float nActvTwrsSet1 = section.occupancy[iHLX].data[set1AboveIndex][TriggerBX]
1354  + section.occupancy[iHLX].data[set1BetweenIndex][TriggerBX]
1355  + section.occupancy[iHLX].data[set1BelowIndex][TriggerBX];
1356 
1357  float nActvTwrsSet2 = section.occupancy[iHLX].data[set2AboveIndex][TriggerBX]
1358  + section.occupancy[iHLX].data[set2BetweenIndex][TriggerBX]
1359  + section.occupancy[iHLX].data[set2BelowIndex][TriggerBX];
1360 
1361  float total = nActvTwrsSet1 + nActvTwrsSet2;
1362 
1363  if( total > 0){
1364  float tempData = section.etSum[iHLX].data[TriggerBX]/total;
1365  //cout << "Filling HFCompare Et sum " << tempData << endl;
1366  HFCompareEtSum->Fill( iWedge, tempData );
1367  }
1368 
1369  if(nActvTwrsSet1 > 0){
1370  float tempData = (float)section.occupancy[iHLX].data[set1BelowIndex][TriggerBX]/nActvTwrsSet1;
1371  HFCompareOccBelowSet1->Fill( iWedge, tempData);
1372 
1373  tempData = (float)section.occupancy[iHLX].data[set1BetweenIndex][TriggerBX]/nActvTwrsSet1;
1374  HFCompareOccBetweenSet1->Fill( iWedge, tempData);
1375 
1376  tempData = (float)section.occupancy[iHLX].data[set1AboveIndex][TriggerBX]/nActvTwrsSet1;
1377  HFCompareOccAboveSet1->Fill( iWedge, tempData);
1378  }
1379 
1380  if( nActvTwrsSet2 > 0){
1381  float tempData = (float)section.occupancy[iHLX].data[set2BelowIndex][TriggerBX]/nActvTwrsSet2;
1382  HFCompareOccBelowSet2->Fill( iWedge, tempData);
1383 
1384  tempData = (float)section.occupancy[iHLX].data[set2BetweenIndex][TriggerBX]/nActvTwrsSet2;
1385  HFCompareOccBetweenSet2->Fill( iWedge, tempData);
1386 
1387  tempData = (float)section.occupancy[iHLX].data[set2AboveIndex][TriggerBX]/nActvTwrsSet2;
1388  HFCompareOccAboveSet2->Fill( iWedge, tempData);
1389  }
1390  }
1391  }
1392 }
1393 
1395 {
1396  // New run .. set the run number and fill run summaries ...
1397  //std::cout << "Run number " << runNumber_ << " Section hdr run number "
1398 // << section.hdr.runNumber << std::endl;
1399 
1400  runId_->Fill( section.hdr.runNumber );
1401  lumisecId_->Fill( (int)(section.hdr.sectionNumber/num4NibblePerLS_) + 1 );
1402 
1403  // Update the total nibbles & the expected number
1404  expectedNibbles_ += section.hdr.numOrbits/4096;
1405  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ){
1406  unsigned int iWedge = HLXHFMap[iHLX] + 1;
1407  totalNibbles_[iWedge-1] += section.occupancy[iHLX].hdr.numNibbles;
1408  }
1409 
1410  eventId_->Fill(e.id().event());
1411  eventTimeStamp_->Fill(e.time().value()/(double)0xffffffff);
1412 
1413  pEvent_++;
1414  evtRateCount_++;
1416 
1418  gettimeofday(&currentTime_,NULL);
1421 
1423  if(time>=(evtRateWindow_*60.0)){
1424  processEventRate_->Fill((float)evtRateCount_/time);
1425  evtRateCount_ = 0;
1427  }
1428 
1429 }
1430 
1432  // Run summary - Loop over the HLX's and fill the map,
1433  // also calculate the overall quality.
1434  float overall = 0.0;
1435  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ){
1436  unsigned int iWedge = HLXHFMap[iHLX] + 1;
1437  unsigned int iEta = 2;
1438  float frac = 0.0;
1439  if( expectedNibbles_ > 0 ) frac = (float)totalNibbles_[iWedge-1]/(float)expectedNibbles_;
1440  if( iWedge >= 19 ){ iEta = 1; iWedge -= 18; }
1441  reportSummaryMap_->setBinContent(iWedge,iEta,frac);
1442  overall += frac;
1443  }
1444 
1445  overall /= (float)NUM_HLX;
1446  if( overall > 1.0 ) overall = 0.0;
1447  //std::cout << "Filling report summary! Main. " << overall << std::endl;
1448  reportSummary_->Fill(overall);
1449 }
1450 
1452 {
1453  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX )
1454  {
1455  dbe_->softReset( Set1Below[iHLX] );
1456  dbe_->softReset( Set1Between[iHLX] );
1457  dbe_->softReset( Set1Above[iHLX] );
1458  dbe_->softReset( Set2Below[iHLX] );
1459  dbe_->softReset( Set2Between[iHLX] );
1460  dbe_->softReset( Set2Above[iHLX] );
1461 
1462  dbe_->softReset( ETSum[iHLX] );
1463 
1464  }
1465 
1473 
1481 
1482  // Luminosity Monitoring
1492 
1493  // Sanity Check for Occupancy
1497 
1502 
1507 
1508 
1509  // History
1510  lumiSectionCount = 0;
1511  previousSection = 0;
1514 
1521 
1528 
1541 
1548 
1551 }
1552 
1553 double HLXMonitor::getUTCtime(timeval* a, timeval* b){
1554  double deltaT=(*a).tv_sec*1000.0+(*a).tv_usec/1000.0;
1555  if(b!=NULL) deltaT=(*b).tv_sec*1000.0+(*b).tv_usec/1000.0 - deltaT;
1556  return deltaT/1000.0;
1557 }
1558 
1559 
1560 //define this as a plug-in
double sectionInstantSumEt
Definition: HLXMonitor.h:280
MonitorElement * HistAvgOccBetweenSet1HFP
Definition: HLXMonitor.h:145
MonitorElement * HFCompareOccAboveSet1
Definition: HLXMonitor.h:100
EventNumber_t event() const
Definition: EventID.h:44
MonitorElement * Set2Between[36]
Definition: HLXMonitor.h:93
MonitorElement * processLatency_
The UTC time of the last event.
Definition: HLXMonitor.h:197
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * HistInstantLumiOccSet1
Definition: HLXMonitor.h:162
std::string OutputDir
Definition: HLXMonitor.h:229
MonitorElement * HFCompareOccAboveSet2
Definition: HLXMonitor.h:103
MonitorElement * RecentIntegratedLumiOccSet2
Definition: HLXMonitor.h:176
MonitorElement * MaxInstLumiBX4
Definition: HLXMonitor.h:133
int i
Definition: DBlmapReader.cc:9
unsigned int totalNibbles_[36]
Definition: HLXMonitor.h:273
MonitorElement * processTimeStamp_
The UTC time of the first event processed.
Definition: HLXMonitor.h:196
void FillReportSummary()
Definition: HLXMonitor.cc:1431
void setBinContent(int binx, double content)
set content of bin (1-D)
unsigned int HLXHFMap[36]
Definition: HLXMonitor.h:275
int SetPort(unsigned short int)
Definition: TCPReceiver.cc:182
MonitorElement * HistAvgLumiOccSet2
Definition: HLXMonitor.h:160
ET_SUM_SECTION etSum[HCAL_HLX_MAX_HLXS]
unsigned int secNumLength
Definition: HLXMonitor.h:261
MonitorElement * HistAvgOccBelowSet2HFM
Definition: HLXMonitor.h:150
MonitorElement * RecentIntegratedLumiEtSum
Definition: HLXMonitor.h:174
double XMAX
Definition: HLXMonitor.h:225
virtual void beginJob()
Definition: HLXMonitor.cc:834
MonitorElement * LumiIntegratedEtSum
Definition: HLXMonitor.h:120
void SetupHists()
Definition: HLXMonitor.cc:125
std::vector< std::string > getSubdirs(void) const
Definition: DQMStore.cc:1644
MonitorElement * SumAllOccSet1
Definition: HLXMonitor.h:125
MonitorElement * LumiInstantOccSet2
Definition: HLXMonitor.h:119
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:942
MonitorElement * AvgOccBetweenSet2
Definition: HLXMonitor.h:110
void setAxisRange(double xmin, double xmax, int axis=1)
set x-, y- or z-axis range (axis=1, 2, 3 respectively)
int prescaleEvt_
Definition: HLXMonitor.h:240
MonitorElement * AvgOccBelowSet1
Definition: HLXMonitor.h:106
MonitorElement * HistAvgEtSumHFM
Definition: HLXMonitor.h:142
MonitorElement * AvgOccAboveSet2
Definition: HLXMonitor.h:111
MonitorElement * HistAvgEtSumHFP
Definition: HLXMonitor.h:141
MonitorElement * HistAvgOccAboveSet1HFP
Definition: HLXMonitor.h:147
float data[HCAL_HLX_MAX_BUNCHES]
MonitorElement * LumiInstantEtSum
Definition: HLXMonitor.h:117
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:632
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
virtual void analyze(const edm::Event &, const edm::EventSetup &)
Definition: HLXMonitor.cc:726
std::string OccYAxisTitle
Definition: HLXMonitor.h:264
MonitorElement * LumiAvgOccSet2
Definition: HLXMonitor.h:116
MonitorElement * cmsswVer_
Current working directory of the job.
Definition: HLXMonitor.h:203
uint32_t data[6][HCAL_HLX_MAX_BUNCHES]
MonitorElement * HistInstantLumiOccSet2Error
Definition: HLXMonitor.h:166
unsigned int NUM_HLX
Definition: HLXMonitor.h:232
MonitorElement * processEventRate_
Time elapsed since the last event.
Definition: HLXMonitor.h:198
unsigned int runNumber_
Definition: HLXMonitor.h:271
int lsBinOld
Definition: HLXMonitor.h:279
MonitorElement * MissingDQMDataCheck
Definition: HLXMonitor.h:127
#define NULL
Definition: scimark2.h:8
MonitorElement * HistInstantLumiOccSet2
Definition: HLXMonitor.h:163
MonitorElement * LumiInstantOccSet1
Definition: HLXMonitor.h:118
MonitorElement * HistAvgOccAboveSet1HFM
Definition: HLXMonitor.h:148
float OccLumi[2][HCAL_HLX_MAX_BUNCHES]
float evtRateWindow_
Definition: HLXMonitor.h:291
std::string OutputFilePrefix
Definition: HLXMonitor.h:228
MonitorElement * LumiIntegratedOccSet1
Definition: HLXMonitor.h:121
double getMean(int axis=1) const
get mean value of histogram along x, y or z axis (axis=1, 2, 3 respectively)
double sectionInstantErrSumEt
Definition: HLXMonitor.h:281
double sectionInstantErrSumOcc2
Definition: HLXMonitor.h:285
unsigned int set2AboveIndex
Definition: HLXMonitor.h:251
MonitorElement * Set1Below[36]
Definition: HLXMonitor.h:89
void SetIP(std::string IP)
Definition: TCPReceiver.cc:222
int evtRateCount_
Definition: HLXMonitor.h:292
double XMIN
Definition: HLXMonitor.h:225
MonitorElement * bookFloat(const char *name)
Book float.
Definition: DQMStore.cc:879
SaveReferenceTag
Definition: DQMStore.h:76
void Fill(long long x)
std::string EtYAxisTitle
Definition: HLXMonitor.h:266
std::string eventInfoFolderHLX_
Definition: HLXMonitor.h:256
MonitorElement * HistInstantLumiEtSumError
Definition: HLXMonitor.h:164
std::string DistribIP2
Definition: HLXMonitor.h:244
virtual void endJob()
Definition: HLXMonitor.cc:865
MonitorElement * eventId_
UTC time of the run start.
Definition: HLXMonitor.h:186
int listenPort
Definition: HLXMonitor.h:224
MonitorElement * processId_
Number of collector updates (TBD)
Definition: HLXMonitor.h:194
MonitorElement * MaxInstLumiBX1
Definition: HLXMonitor.h:130
MonitorElement * reportSummaryMap_
Definition: HLXMonitor.h:211
unsigned int MAX_LS
Definition: HLXMonitor.h:234
int iEvent
Definition: GenABIO.cc:230
MonitorElement * HistAvgOccBelowSet1HFP
Definition: HLXMonitor.h:143
MonitorElement * HFCompareEtSum
Definition: HLXMonitor.h:97
MonitorElement * runStartTimeStamp_
Definition: HLXMonitor.h:185
const T & max(const T &a, const T &b)
MonitorElement * Set1Between[36]
Definition: HLXMonitor.h:90
MonitorElement * bookString(const char *name, const char *value)
Book string.
Definition: DQMStore.cc:908
unsigned int set2BetweenIndex
Definition: HLXMonitor.h:250
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
double sectionInstantSumOcc1
Definition: HLXMonitor.h:282
timeval lastUpdateTime_
Definition: HLXMonitor.h:289
unsigned int set2BelowIndex
Definition: HLXMonitor.h:249
T sqrt(T t)
Definition: SSEVec.h:48
double sectionInstantSumOcc2
Definition: HLXMonitor.h:284
DQMStore * dbe_
Definition: HLXMonitor.h:214
MonitorElement * HistIntegratedLumiOccSet1
Definition: HLXMonitor.h:168
MonitorElement * RecentInstantLumiOccSet1
Definition: HLXMonitor.h:172
MonitorElement * HistIntegratedLumiOccSet2
Definition: HLXMonitor.h:169
MonitorElement * BXvsTimeAvgEtSumHFM
Definition: HLXMonitor.h:156
MonitorElement * HistAvgOccBetweenSet2HFM
Definition: HLXMonitor.h:152
MonitorElement * AvgOccAboveSet1
Definition: HLXMonitor.h:108
MonitorElement * HistInstantLumiOccSet1Error
Definition: HLXMonitor.h:165
HCAL_HLX::LUMI_SECTION lumiSection
Definition: HLXMonitor.h:268
MonitorElement * hostName_
of event processed so far
Definition: HLXMonitor.h:200
MonitorElement * HFCompareOccBelowSet1
Definition: HLXMonitor.h:98
bool SaveAtEndJob
Definition: HLXMonitor.h:254
unsigned int NBINS
Definition: HLXMonitor.h:226
MonitorElement * ETSum[36]
Definition: HLXMonitor.h:95
void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
Definition: DQMStore.cc:1256
void setVerbose(unsigned level)
Definition: DQMStore.cc:619
bool ResetAtNewRun
Definition: HLXMonitor.h:253
MonitorElement * Set2Below[36]
Definition: HLXMonitor.h:92
float ETLumi[HCAL_HLX_MAX_BUNCHES]
void softReset(MonitorElement *me)
Definition: DQMStore.cc:3250
MonitorElement * MaxInstLumiBXNum2
Definition: HLXMonitor.h:136
MonitorElement * MaxInstLumiBX2
Definition: HLXMonitor.h:131
void SetupEventInfo()
Definition: HLXMonitor.cc:646
MonitorElement * SumAllOccSet2
Definition: HLXMonitor.h:126
std::string monitorName_
Definition: HLXMonitor.h:239
MonitorElement * AvgEtSum
Definition: HLXMonitor.h:105
MonitorElement * nUpdates_
These MEs are either static or updated upon each analyze() call.
Definition: HLXMonitor.h:193
MonitorElement * HistAvgOccAboveSet2HFM
Definition: HLXMonitor.h:154
bool Accumulate
Definition: HLXMonitor.h:227
MonitorElement * LumiAvgEtSum
Definition: HLXMonitor.h:114
MonitorElement * eventTimeStamp_
Definition: HLXMonitor.h:188
MonitorElement * BXvsTimeAvgEtSumHFP
Definition: HLXMonitor.h:155
MonitorElement * HistAvgOccBetweenSet1HFM
Definition: HLXMonitor.h:146
OCCUPANCY_SECTION occupancy[HCAL_HLX_MAX_HLXS]
MonitorElement * RecentIntegratedLumiOccSet1
Definition: HLXMonitor.h:175
unsigned int TriggerBX
Definition: HLXMonitor.h:236
MonitorElement * MaxInstLumiBXNum4
Definition: HLXMonitor.h:138
std::string getReleaseVersion()
unsigned int NUM_BUNCHES
Definition: HLXMonitor.h:233
MonitorElement * HistAvgLumiOccSet1
Definition: HLXMonitor.h:159
MonitorElement * HistAvgOccAboveSet2HFP
Definition: HLXMonitor.h:153
Float e1
Definition: deltaR.h:22
unsigned int MinLSBeforeSave
Definition: HLXMonitor.h:237
MonitorElement * HistAvgOccBelowSet1HFM
Definition: HLXMonitor.h:144
MonitorElement * RecentInstantLumiOccSet2
Definition: HLXMonitor.h:173
MonitorElement * Set2Above[36]
Definition: HLXMonitor.h:94
MonitorElement * HistAvgLumiEtSum
Definition: HLXMonitor.h:158
MonitorElement * HistIntegratedLumiEtSum
Definition: HLXMonitor.h:167
float ETLumiErr[HCAL_HLX_MAX_BUNCHES]
TCPReceiver HLXTCP
Definition: HLXMonitor.h:87
double getBinError(int binx) const
get uncertainty on content of bin (1-D) - See TH1::GetBinError for details
MonitorElement * HistAvgOccBelowSet2HFP
Definition: HLXMonitor.h:149
MonitorElement * processEvents_
Avg # of events in programmable window (default: 5 min)
Definition: HLXMonitor.h:199
double sectionInstantNorm
Definition: HLXMonitor.h:286
MonitorElement * MaxInstLumiBXNum3
Definition: HLXMonitor.h:137
MonitorElement * MaxInstLumiBX3
Definition: HLXMonitor.h:132
TH1F * getTH1F(void) const
void setResetMe(bool)
double sectionInstantErrSumOcc1
Definition: HLXMonitor.h:283
unsigned int previousSection
Definition: HLXMonitor.h:277
std::string subSystemName_
Definition: HLXMonitor.h:258
bool currentRunEnded_
Definition: HLXMonitor.h:270
double b
Definition: hdecay.h:120
MonitorElement * processName_
Hostname of the local machine.
Definition: HLXMonitor.h:201
void FillEventInfo(const LUMI_SECTION &, const edm::Event &e)
Definition: HLXMonitor.cc:1394
double getUTCtime(timeval *a, timeval *b=NULL)
Definition: HLXMonitor.cc:1553
unsigned int runNumLength
Definition: HLXMonitor.h:260
timeval lastAvgTime_
Definition: HLXMonitor.h:289
int ReceiveLumiSection(HCAL_HLX::LUMI_SECTION &localSection)
Definition: TCPReceiver.cc:88
MonitorElement * Set1Above[36]
Definition: HLXMonitor.h:91
int SavePeriod
Definition: HLXMonitor.h:231
MonitorElement * processStartTimeStamp_
The PID associated with this job.
Definition: HLXMonitor.h:195
void EndRun(bool saveFile=true)
Definition: HLXMonitor.cc:874
unsigned int expectedNibbles_
Definition: HLXMonitor.h:272
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
int SetMode(unsigned char)
Definition: TCPReceiver.cc:202
MonitorElement * MaxInstLumiBXNum1
Definition: HLXMonitor.h:135
MonitorElement * AvgOccBelowSet2
Definition: HLXMonitor.h:109
double getBinContent(int binx) const
get content of bin (1-D)
edm::EventID id() const
Definition: EventBase.h:56
HLXMonitor(const edm::ParameterSet &)
Definition: HLXMonitor.cc:17
void tagContents(const std::string &path, unsigned int myTag)
tag all children of folder (does NOT include subfolders)
Definition: DQMStore.cc:1610
double getRMS(int axis=1) const
get RMS of histogram along x, y or z axis (axis=1, 2, 3 respectively)
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, const uint32_t lumi=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE", const bool resetMEsAfterWriting=false)
Definition: DQMStore.cc:2485
double num4NibblePerLS_
Definition: HLXMonitor.h:296
double a
Definition: hdecay.h:121
std::string OccXAxisTitle
Definition: HLXMonitor.h:263
MonitorElement * HistInstantLumiEtSum
Definition: HLXMonitor.h:161
MonitorElement * runId_
Definition: HLXMonitor.h:184
unsigned int AquireMode
Definition: HLXMonitor.h:235
MonitorElement * HFCompareOccBetweenSet2
Definition: HLXMonitor.h:102
unsigned int set1BelowIndex
Definition: HLXMonitor.h:246
static const int STATUS_OK
unsigned int lumiSectionCount
Definition: HLXMonitor.h:278
std::string eventInfoFolder_
Definition: HLXMonitor.h:257
MonitorElement * LumiIntegratedOccSet2
Definition: HLXMonitor.h:122
MonitorElement * HFCompareOccBelowSet2
Definition: HLXMonitor.h:101
tuple cout
Definition: gather_cfg.py:121
MonitorElement * HFCompareOccBetweenSet1
Definition: HLXMonitor.h:99
void FillHistograms(const LUMI_SECTION &)
Definition: HLXMonitor.cc:905
void ResetAll()
Definition: HLXMonitor.cc:1451
void SaveDQMFile()
Definition: HLXMonitor.cc:807
timeval currentTime_
Definition: HLXMonitor.h:289
volatile std::atomic< bool > shutdown_flag false
void showDirStructure(void) const
Definition: DQMStore.cc:3277
MonitorElement * LumiAvgOccSet1
Definition: HLXMonitor.h:115
std::string DistribIP1
Definition: HLXMonitor.h:243
int weight
Definition: histoStyle.py:50
TH2F * getTH2F(void) const
MonitorElement * bookInt(const char *name)
Book int.
Definition: DQMStore.cc:849
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1070
MonitorElement * workingDir_
DQM &quot;name&quot; of the job (eg, Hcal or DT)
Definition: HLXMonitor.h:202
MonitorElement * AvgOccBetweenSet1
Definition: HLXMonitor.h:107
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * RecentInstantLumiEtSum
Definition: HLXMonitor.h:171
TimeValue_t value() const
Definition: Timestamp.h:56
edm::Timestamp time() const
Definition: EventBase.h:57
MonitorElement * reportSummary_
Definition: HLXMonitor.h:210
MonitorElement * HistAvgOccBetweenSet2HFP
Definition: HLXMonitor.h:151
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:655
unsigned int set1AboveIndex
Definition: HLXMonitor.h:248
Definition: NicePlot.h:7
std::string EtXAxisTitle
Definition: HLXMonitor.h:265
MonitorElement * lumisecId_
Definition: HLXMonitor.h:187
unsigned int reconnTime
Definition: HLXMonitor.h:242
unsigned int set1BetweenIndex
Definition: HLXMonitor.h:247
void FillHistoHFCompare(const LUMI_SECTION &)
Definition: HLXMonitor.cc:1345
float OccLumiErr[2][HCAL_HLX_MAX_BUNCHES]