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  (DQMStore::SaveReferenceTag)saveReference_, saveReferenceQMin_);
828 
829  //dbe_->save(tempStreamer.str());
830 }
831 
832 // ------------ method called once each job just before starting event loop ------------
834 {
836  int errorCode = HLXTCP.SetPort(listenPort);
837  cout << "SetPort: " << listenPort << " Success: " << errorCode << endl;
838  errorCode = HLXTCP.SetMode(AquireMode);
839  cout << "AquireMode: " << AquireMode << " Success: " << errorCode << endl;
840 
841  while( HLXTCP.IsConnected() == false )
842  {
844  if( HLXTCP.Connect() != 1 )
845  {
846  std::cout << "Failed to connect to " << DistribIP1 << "." << std::endl;
847  sleep( 1 );
848  std::cout << "Trying " << DistribIP2 << std::endl;
850  if( HLXTCP.Connect() == 1) break;
851  std::cout << "Failed to connect to " << DistribIP2 << "." << std::endl;
852  std::cout << " Reconnect in " << reconnTime << " seconds." << std::endl;
853  sleep(reconnTime);
854  }
855  }
856  if( HLXTCP.IsConnected() == true )
857  {
858  std::cout << "Successfully connected." << std::endl;
859  }
860 
861 }
862 
863 // ------------ method called once each job just after ending the event loop ------------
865 {
866  // Fill the report summaries at end job
867  // Loop over the HLX's and fill the map,
868  // also calculate the overall quality.
869  HLXTCP.Disconnect();
870  EndRun( SaveAtEndJob );
871 }
872 
873 void HLXMonitor::EndRun( bool saveFile )
874 {
876 
877  // Do some things that should be done at the end of the run ...
878  if( saveFile && runNumber_ != 0 ){
880  else std::cout << "Num LS's (" << int(lumiSectionCount/num4NibblePerLS_) << ") "
881  << "is less than required minumum (" << MinLSBeforeSave
882  << "). File will not be saved!" << std::endl;
883  }
884  expectedNibbles_ = 0;
885  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ) totalNibbles_[iHLX] = 0;
886 
887  std::cout << "** Here in end run **" << std::endl;
888  if(ResetAtNewRun) ResetAll();
889  runNumber_ = 0;
890  currentRunEnded_ = true;
897  sectionInstantNorm = 0;
898  lsBinOld = 0;
899  lumiSectionCount = 0;
900  previousSection = 0;
901 }
902 
903 
905 {
906  // Check for missing data
907  if( previousSection != (section.hdr.sectionNumber-1) ){
908  double weight = (double)(section.hdr.sectionNumber-previousSection-1);
909  //std::cout << "Filling missing data! " << weight << std::endl;
910  MissingDQMDataCheck->Fill(0.5,weight);
911  }
913 
914  int lsBin = int(lumiSectionCount/num4NibblePerLS_);
915  int lsBinBX = int(lumiSectionCount/num4NibblePerLS_);
919  //std::cout << "Lumi section count " << lumiSectionCount << " lsBin " << lsBin
920  // << " lsBinOld " << lsBinOld << " True section: " << section.hdr.sectionNumber << std::endl;
921 
922  //std::cout << "Instant Et sum: " << section.lumiSummary.InstantETLumi
923  // << " +/- " << section.lumiSummary.InstantETLumiErr << std::endl;
924  //std::cout << "Section sum so far: " << sectionInstantSumEt << " +/- "
925  // << sqrt(sectionInstantErrSumEt) << std::endl;
926 
927  int fillBin = lumiSectionCount+1;
928  if( fillBin > 128 )
929  {
930  // If we are already more than 2 LS's in, move everything back by one bin
931  // and fill the last bin with the new value.
932  for( int iBin = 1; iBin<128; ++iBin )
933  {
940  }
941  fillBin = 128;
942  }
943 
950 
951  double recentOldBinContent = RecentIntegratedLumiEtSum->getBinContent(fillBin-1);
952  if( fillBin == 1 ) recentOldBinContent = 0;
953  double recentNewBinContent = recentOldBinContent + section.lumiSummary.InstantETLumi;
954  RecentIntegratedLumiEtSum->setBinContent(fillBin,recentNewBinContent);
955  recentOldBinContent = RecentIntegratedLumiOccSet1->getBinContent(fillBin-1);
956  if( fillBin == 1 ) recentOldBinContent = 0;
957  recentNewBinContent = recentOldBinContent + section.lumiSummary.InstantOccLumi[0];
958  RecentIntegratedLumiOccSet1->setBinContent(fillBin,recentNewBinContent);
959  recentOldBinContent = RecentIntegratedLumiOccSet2->getBinContent(fillBin-1);
960  if( fillBin == 1 ) recentOldBinContent = 0;
961  recentNewBinContent = recentOldBinContent + section.lumiSummary.InstantOccLumi[0];
962  RecentIntegratedLumiOccSet2->setBinContent(fillBin,recentNewBinContent);
963 
964  double recentOldBinError = RecentIntegratedLumiEtSum->getBinError(fillBin-1);
965  if( fillBin == 1 ) recentOldBinError = 0;
966  double recentNewBinError = sqrt(recentOldBinError*recentOldBinError + section.lumiSummary.InstantETLumiErr*section.lumiSummary.InstantETLumiErr);
967  RecentIntegratedLumiEtSum->setBinError(fillBin,recentNewBinError);
968  recentOldBinError = RecentIntegratedLumiOccSet1->getBinError(fillBin-1);
969  if( fillBin == 1 ) recentOldBinError = 0;
970  recentNewBinError = sqrt(recentOldBinError*recentOldBinError + section.lumiSummary.InstantOccLumiErr[0]*section.lumiSummary.InstantOccLumiErr[0]);
971  RecentIntegratedLumiOccSet1->setBinError(fillBin,recentNewBinError);
972  recentOldBinError = RecentIntegratedLumiOccSet2->getBinError(fillBin-1);
973  if( fillBin == 1 ) recentOldBinError = 0;
974  recentNewBinError = sqrt(recentOldBinError*recentOldBinError + section.lumiSummary.InstantOccLumiErr[1]*section.lumiSummary.InstantOccLumiErr[1]);
975  RecentIntegratedLumiOccSet2->setBinError(fillBin,recentNewBinError);
976 
977 // std::cout << "New total " << RecentIntegratedLumiEtSum->getBinContent(fillBin)
978 // << " +/- " << RecentIntegratedLumiEtSum->getBinError(fillBin) << std::endl;
979 
980  if( lsBinOld != lsBin )
981  {
988 
989  double etDenom = fabs(sectionInstantSumEt);
990  if( etDenom < 1e-10 ) etDenom = 1e-10;
991  double occ1Denom = fabs(sectionInstantSumOcc1);
992  if( occ1Denom < 1e-10 ) occ1Denom = 1e-10;
993  double occ2Denom = fabs(sectionInstantSumOcc2);
994  if( occ2Denom < 1e-10 ) occ2Denom = 1e-10;
995  double etError = 100.0*sqrt(sectionInstantErrSumEt)/etDenom;
996  double occ1Error = 100.0*sqrt(sectionInstantErrSumOcc1)/occ1Denom;
997  double occ2Error = 100.0*sqrt(sectionInstantErrSumOcc2)/occ2Denom;
1001 
1002  double histOldBinContent = HistIntegratedLumiEtSum->getBinContent(lsBinOld);
1003  if( lsBinOld == 0 ) histOldBinContent = 0;
1004  double histNewBinContent = histOldBinContent + sectionInstantSumEt;
1005  HistIntegratedLumiEtSum->setBinContent(lsBin,histNewBinContent);
1006  histOldBinContent = HistIntegratedLumiOccSet1->getBinContent(lsBinOld);
1007  if( lsBinOld == 0 ) histOldBinContent = 0;
1008  histNewBinContent = histOldBinContent + sectionInstantSumOcc1;
1009  HistIntegratedLumiOccSet1->setBinContent(lsBin,histNewBinContent);
1010  histOldBinContent = HistIntegratedLumiOccSet2->getBinContent(lsBinOld);
1011  if( lsBinOld == 0 ) histOldBinContent = 0;
1012  histNewBinContent = histOldBinContent + sectionInstantSumOcc2;
1013  HistIntegratedLumiOccSet2->setBinContent(lsBin,histNewBinContent);
1014 
1015  double histOldBinError = HistIntegratedLumiEtSum->getBinError(lsBinOld);
1016  if( lsBinOld == 0 ) histOldBinError = 0;
1017  double histNewBinError = sqrt(histOldBinError*histOldBinError + sectionInstantErrSumEt);
1018  HistIntegratedLumiEtSum->setBinError(lsBin,histNewBinError);
1019  histOldBinError = HistIntegratedLumiOccSet1->getBinError(lsBinOld);
1020  if( lsBinOld == 0 ) histOldBinError = 0;
1021  histNewBinError = sqrt(histOldBinError*histOldBinError + sectionInstantErrSumOcc1);
1022  HistIntegratedLumiOccSet1->setBinError(lsBin,histNewBinError);
1023  histOldBinError = HistIntegratedLumiOccSet2->getBinError(lsBinOld);
1024  if( lsBinOld == 0 ) histOldBinError = 0;
1025  histNewBinError = sqrt(histOldBinError*histOldBinError + sectionInstantErrSumOcc2);
1026  HistIntegratedLumiOccSet2->setBinError(lsBin,histNewBinError);
1027 
1028  sectionInstantSumEt = 0;
1030  sectionInstantSumOcc1 = 0;
1032  sectionInstantSumOcc2 = 0;
1034  sectionInstantNorm = 0;
1035  lsBinOld = lsBin;
1036  }
1037 
1045 
1049 
1050  for( int iHLX = 0; iHLX < (int)NUM_HLX; ++iHLX ){
1051  unsigned int utotal1= 0;
1052  unsigned int utotal2 = 0;
1053  unsigned int iWedge = HLXHFMap[iHLX];
1054  if(section.occupancy[iHLX].hdr.numNibbles != 0){
1055 
1056  // Don't include the last one hundred BX in the average.
1057  for( unsigned int iBX = 0; iBX < NUM_BUNCHES; ++iBX ){
1058 
1059  // Normalize to number of towers
1060  unsigned int norm[2] = {0,0};
1061  norm[0] += section.occupancy[iHLX].data[set1BelowIndex ][iBX];
1062  norm[0] += section.occupancy[iHLX].data[set1BetweenIndex ][iBX];
1063  norm[0] += section.occupancy[iHLX].data[set1AboveIndex ][iBX];
1064  if( norm[0] == 0 ) norm[0]=1;
1065  norm[1] += section.occupancy[iHLX].data[set2BelowIndex ][iBX];
1066  norm[1] += section.occupancy[iHLX].data[set2BetweenIndex ][iBX];
1067  norm[1] += section.occupancy[iHLX].data[set2AboveIndex ][iBX];
1068  if( norm[1] == 0 ) norm[1]=1;
1069 
1070  double normEt = section.etSum[iHLX].data[iBX]/(double)(norm[0]+norm[1]);
1071  double normOccSet1Below = (double)section.occupancy[iHLX].data[set1BelowIndex][iBX]/(double)norm[0];
1072  double normOccSet1Between = (double)section.occupancy[iHLX].data[set1BetweenIndex][iBX]/(double)norm[0];
1073  double normOccSet1Above = (double)section.occupancy[iHLX].data[set1AboveIndex][iBX]/(double)norm[0];
1074  double normOccSet2Below = (double)section.occupancy[iHLX].data[set2BelowIndex][iBX]/(double)norm[1];
1075  double normOccSet2Between = (double)section.occupancy[iHLX].data[set2BetweenIndex][iBX]/(double)norm[1];
1076  double normOccSet2Above = (double)section.occupancy[iHLX].data[set2AboveIndex][iBX]/(double)norm[1];
1077 
1078  // Averages & check sum
1079  if( iBX < NUM_BUNCHES-100 )
1080  {
1081  AvgEtSum->Fill( iWedge,normEt);
1082 
1083  AvgOccBelowSet1-> Fill( iWedge, normOccSet1Below );
1084  AvgOccBetweenSet1->Fill( iWedge, normOccSet1Between );
1085  AvgOccAboveSet1-> Fill( iWedge, normOccSet1Above );
1086 
1087  AvgOccBelowSet2-> Fill( iWedge, normOccSet2Below );
1088  AvgOccBetweenSet2->Fill( iWedge, normOccSet2Between );
1089  AvgOccAboveSet2-> Fill( iWedge, normOccSet2Above );
1090 
1091  if( iWedge < 18 )
1092  {
1093  HistAvgEtSumHFP->Fill( lsBin,normEt);
1094  HistAvgOccBelowSet1HFP->Fill( lsBin, normOccSet1Below );
1095  HistAvgOccBetweenSet1HFP->Fill( lsBin, normOccSet1Between );
1096  HistAvgOccAboveSet1HFP->Fill( lsBin, normOccSet1Above );
1097  HistAvgOccBelowSet2HFP->Fill( lsBin, normOccSet2Below );
1098  HistAvgOccBetweenSet2HFP->Fill( lsBin, normOccSet2Between );
1099  HistAvgOccAboveSet2HFP->Fill( lsBin, normOccSet2Above );
1100 
1101  if( iBX >= (XMIN-1) && iBX <= (XMAX-1) ) BXvsTimeAvgEtSumHFP->Fill(lsBinBX,iBX,normEt/(num4NibblePerLS_*18.0*12.0));
1102  }
1103  else
1104  {
1105  HistAvgEtSumHFM->Fill( lsBin,normEt);
1106  HistAvgOccBelowSet1HFM->Fill( lsBin, normOccSet1Below );
1107  HistAvgOccBetweenSet1HFM->Fill( lsBin, normOccSet1Between );
1108  HistAvgOccAboveSet1HFM->Fill( lsBin, normOccSet1Above );
1109  HistAvgOccBelowSet2HFM->Fill( lsBin, normOccSet2Below );
1110  HistAvgOccBetweenSet2HFM->Fill( lsBin, normOccSet2Between );
1111  HistAvgOccAboveSet2HFM->Fill( lsBin, normOccSet2Above );
1112 
1113  if( iBX >= (XMIN-1) && iBX <= (XMAX-1) ) BXvsTimeAvgEtSumHFM->Fill(lsBinBX,iBX,normEt/(num4NibblePerLS_*18.0*12.0));
1114  }
1115 
1116  utotal1 += section.occupancy[iHLX].data[set1BelowIndex ][iBX];
1117  utotal1 += section.occupancy[iHLX].data[set1BetweenIndex][iBX];
1118  utotal1 += section.occupancy[iHLX].data[set1AboveIndex ][iBX];
1119 
1120  utotal2 += section.occupancy[iHLX].data[set2BelowIndex ][iBX];
1121  utotal2 += section.occupancy[iHLX].data[set2BetweenIndex][iBX];
1122  utotal2 += section.occupancy[iHLX].data[set2AboveIndex ][iBX];
1123 
1124  }
1125 
1126  if(Style.compare("BX") == 0)
1127  {
1128  // Get the correct bin ...
1129  TH1F *Set1BelowHist = Set1Below[iWedge]->getTH1F();
1130  int iBin = Set1BelowHist->FindBin((float)iBX);
1131 
1132  // Adjust the old bin content to make the new, unnormalize and renormalize
1133  if( lumiSectionCount > 0 ){
1134  double oldNormOccSet1Below = (Set1Below[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1135  normOccSet1Below += oldNormOccSet1Below;
1136  normOccSet1Below /= (double)(lumiSectionCount+1);
1137  double oldNormOccSet2Below = (Set2Below[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1138  normOccSet2Below += oldNormOccSet2Below;
1139  normOccSet2Below /= (double)(lumiSectionCount+1);
1140 
1141  double oldNormOccSet1Between = (Set1Between[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1142  normOccSet1Between += oldNormOccSet1Between;
1143  normOccSet1Between /= (double)(lumiSectionCount+1);
1144  double oldNormOccSet2Between = (Set2Between[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1145  normOccSet2Between += oldNormOccSet2Between;
1146  normOccSet2Between /= (double)(lumiSectionCount+1);
1147 
1148  double oldNormOccSet1Above = (Set1Above[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1149  normOccSet1Above += oldNormOccSet1Above;
1150  normOccSet1Above /= (double)(lumiSectionCount+1);
1151  double oldNormOccSet2Above = (Set2Above[iWedge]->getBinContent(iBin))*(double)(lumiSectionCount);
1152  normOccSet2Above += oldNormOccSet2Above;
1153  normOccSet2Above /= (double)(lumiSectionCount+1);
1154 
1155  double oldNormEt = ETSum[iWedge]->getBinContent(iBin)*(double)(lumiSectionCount);
1156  normEt += oldNormEt;
1157  normEt /= (double)(lumiSectionCount+1);
1158  }
1159 
1160  Set1Below[iWedge]-> setBinContent(iBin, normOccSet1Below );
1161  Set1Between[iWedge]->setBinContent(iBin, normOccSet1Between );
1162  Set1Above[iWedge]-> setBinContent(iBin, normOccSet1Above );
1163  Set2Below[iWedge]-> setBinContent(iBin, normOccSet2Below );
1164  Set2Between[iWedge]->setBinContent(iBin, normOccSet2Between );
1165  Set2Above[iWedge]-> setBinContent(iBin, normOccSet2Above );
1166  ETSum[iWedge]-> setBinContent(iBin, normEt);
1167 
1168 // Set1Below[iWedge]-> Fill(iBX, normOccSet1Below );
1169 // Set1Between[iWedge]->Fill(iBX, normOccSet1Between );
1170 // Set1Above[iWedge]-> Fill(iBX, normOccSet1Above );
1171 // Set2Below[iWedge]-> Fill(iBX, normOccSet2Below );
1172 // Set2Between[iWedge]->Fill(iBX, normOccSet2Between );
1173 // Set2Above[iWedge]-> Fill(iBX, normOccSet2Above );
1174 // ETSum[iWedge]-> Fill(iBX, normEt);
1175  }
1176  else if(Style.compare("Dist")==0)
1177  {
1178  Set1Below[iWedge]-> Fill( normOccSet1Below );
1179  Set1Between[iWedge]->Fill( normOccSet1Between );
1180  Set1Above[iWedge]-> Fill( normOccSet1Above );
1181  Set2Below[iWedge]-> Fill( normOccSet2Below );
1182  Set2Between[iWedge]->Fill( normOccSet2Between );
1183  Set2Above[iWedge]-> Fill( normOccSet2Above );
1184  ETSum[iWedge]-> Fill( normEt );
1185  }
1186  }
1187 
1188  // Get the number of towers per wedge per BX (assuming non-zero numbers)
1189  double total1 = 0;
1190  double total2 = 0;
1191  if( (NUM_BUNCHES-100)>0 )
1192  {
1193  total1 = (double)utotal1/(double)(NUM_BUNCHES-100);
1194  total2 = (double)utotal2/(double)(NUM_BUNCHES-100);
1195  }
1196  if( section.hdr.numOrbits > 0 )
1197  {
1198  total1 = total1/(double)section.hdr.numOrbits;
1199  total2 = total2/(double)section.hdr.numOrbits;
1200  }
1201 
1202  SumAllOccSet1-> Fill( iWedge, total1 );
1203  SumAllOccSet2-> Fill( iWedge, total2 );
1204  }
1205  }
1206 
1207  double max[4] = {-1000.0,-1000.0,-1000.0,-1000.0};
1208  int bxmax[4] = {-1,-1,-1,-1};
1209  for( unsigned int iBX = 0; iBX < NUM_BUNCHES; ++iBX ){
1210 
1211  LumiAvgEtSum->Fill(iBX, section.lumiDetail.ETLumi[iBX]);
1212  LumiAvgOccSet1->Fill(iBX, section.lumiDetail.OccLumi[0][iBX]);
1213  LumiAvgOccSet2->Fill(iBX, section.lumiDetail.OccLumi[1][iBX]);
1214 
1215  if( section.lumiDetail.OccLumi[0][iBX] > max[0] ){
1216  max[3] = max[2];
1217  bxmax[3] = bxmax[2];
1218  max[2] = max[1];
1219  bxmax[2] = bxmax[1];
1220  max[1] = max[0];
1221  bxmax[1] = bxmax[0];
1222  max[0] = section.lumiDetail.OccLumi[0][iBX];
1223  bxmax[0] = iBX;
1224  } else if( section.lumiDetail.OccLumi[0][iBX] > max[1] ){
1225  max[3] = max[2];
1226  bxmax[3] = bxmax[2];
1227  max[2] = max[1];
1228  bxmax[2] = bxmax[1];
1229  max[1] = section.lumiDetail.OccLumi[0][iBX];
1230  bxmax[1] = iBX;
1231  } else if( section.lumiDetail.OccLumi[0][iBX] > max[2] ){
1232  max[3] = max[2];
1233  bxmax[3] = bxmax[2];
1234  max[2] = section.lumiDetail.OccLumi[0][iBX];
1235  bxmax[2] = iBX;
1236  } else if( section.lumiDetail.OccLumi[0][iBX] > max[3] ){
1237  max[3] = section.lumiDetail.OccLumi[0][iBX];
1238  bxmax[3] = iBX;
1239  }
1240 
1241  int iBin = iBX - (int)XMIN + 1;
1242  if( iBin <= int(XMAX-XMIN) && iBin >= 1 ){
1243 
1244  //cout << "Et sum " << section.lumiDetail.ETLumi[iBX] << " +/- "
1245  // << section.lumiDetail.ETLumiErr[iBX] << std::endl;
1246  //cout << "Occ1 " << section.lumiDetail.OccLumi[0][iBX] << " +/- "
1247  // << section.lumiDetail.OccLumiErr[0][iBX] << std::endl;
1248  //cout << "Occ2 " << section.lumiDetail.OccLumi[1][iBX] << " +/- "
1249  // << section.lumiDetail.OccLumiErr[1][iBX] << std::endl;
1250  LumiInstantEtSum->setBinContent(iBin, section.lumiDetail.ETLumi[iBX]);
1251  LumiInstantOccSet1->setBinContent(iBin, section.lumiDetail.OccLumi[0][iBX]);
1252  LumiInstantOccSet2->setBinContent(iBin, section.lumiDetail.OccLumi[1][iBX]);
1253  LumiInstantEtSum->setBinError(iBin, section.lumiDetail.ETLumiErr[iBX]);
1254  LumiInstantOccSet1->setBinError(iBin, section.lumiDetail.OccLumiErr[0][iBX]);
1255  LumiInstantOccSet2->setBinError(iBin, section.lumiDetail.OccLumiErr[1][iBX]);
1256 
1257  double oldBinContent = LumiIntegratedEtSum->getBinContent(iBin);
1258  if( lumiSectionCount == 0 ) oldBinContent = 0;
1259  double newBinContent = oldBinContent + section.lumiDetail.ETLumi[iBX];
1260  LumiIntegratedEtSum->setBinContent(iBin, newBinContent);
1261  oldBinContent = LumiIntegratedOccSet1->getBinContent(iBin);
1262  if( lumiSectionCount == 0 ) oldBinContent = 0;
1263  newBinContent = oldBinContent + section.lumiDetail.OccLumi[0][iBX];
1264  LumiIntegratedOccSet1->setBinContent(iBin, newBinContent);
1265  oldBinContent = LumiIntegratedOccSet2->getBinContent(iBin);
1266  if( lumiSectionCount == 0 ) oldBinContent = 0;
1267  newBinContent = oldBinContent + section.lumiDetail.OccLumi[1][iBX];
1268  LumiIntegratedOccSet2->setBinContent(iBin, newBinContent);
1269 
1270  double oldBinError = LumiIntegratedEtSum->getBinError(iBin);
1271  if( lumiSectionCount == 0 ) oldBinError = 0;
1272  double newBinError = sqrt(oldBinError*oldBinError + section.lumiDetail.ETLumiErr[iBX]*section.lumiDetail.ETLumiErr[iBX]);
1273  LumiIntegratedEtSum->setBinError(iBin, newBinError);
1274  oldBinError = LumiIntegratedOccSet1->getBinError(iBin);
1275  if( lumiSectionCount == 0 ) oldBinError = 0;
1276  newBinError = sqrt(oldBinError*oldBinError + section.lumiDetail.OccLumiErr[0][iBX]*section.lumiDetail.OccLumiErr[0][iBX]);
1277  LumiIntegratedOccSet1->setBinError(iBin, newBinError);
1278  oldBinError = LumiIntegratedOccSet1->getBinError(iBin);
1279  if( lumiSectionCount == 0 ) oldBinError = 0;
1280  newBinError = sqrt(oldBinError*oldBinError + section.lumiDetail.OccLumiErr[1][iBX]*section.lumiDetail.OccLumiErr[1][iBX]);
1281  LumiIntegratedOccSet2->setBinError(iBin, newBinError);
1282  }
1283  }
1284 
1285  // Now fill the maximum hists, but ordered by BX, so that
1286  // collision BX's or satellite BX's will always appear in the
1287  // same histogram.
1288  int flag=1;
1289  for( int iM = 0; (iM<4)&&flag; ++iM ){
1290  flag = 0;
1291  for( int iN = 0; iN < 3; ++iN ){
1292  if( bxmax[iN+1] < bxmax[iN] ){
1293  int tmp = bxmax[iN];
1294  bxmax[iN] = bxmax[iN+1];
1295  bxmax[iN+1] = tmp;
1296 
1297  double tmp2 = max[iN];
1298  max[iN] = max[iN+1];
1299  max[iN+1] = tmp2;
1300  flag=1;
1301  }
1302  }
1303  }
1304 
1305  // 0.9e1 = Conversion constant for occ1 at 900GeV COM.
1306  MaxInstLumiBX1->Fill(max[0]*0.9e1);
1307  MaxInstLumiBXNum1->Fill(bxmax[0]);
1308  MaxInstLumiBX2->Fill(max[1]*0.9e1);
1309  MaxInstLumiBXNum2->Fill(bxmax[1]);
1310  MaxInstLumiBX3->Fill(max[2]*0.9e1);
1311  MaxInstLumiBXNum3->Fill(bxmax[2]);
1312  MaxInstLumiBX4->Fill(max[3]*0.9e1);
1313  MaxInstLumiBXNum4->Fill(bxmax[3]);
1314 
1315  TH1F* tmpHist = MaxInstLumiBX1->getTH1F();
1316  double minX = tmpHist->GetBinLowEdge(1);
1317  double maxX = tmpHist->GetBinLowEdge(tmpHist->GetNbinsX()+1);
1318 
1319  int inum4NibblePerLS = (int)num4NibblePerLS_;
1320  if( lumiSectionCount%inum4NibblePerLS == 0 ){
1321  double mean1 = MaxInstLumiBX1->getMean();
1322  double rms1 = MaxInstLumiBX1->getRMS();
1323  if( rms1 > 0 && mean1-5*rms1 > minX && mean1+5*rms1<maxX ) MaxInstLumiBX1->setAxisRange(mean1-5*rms1,mean1+5*rms1);
1324 
1325  double mean2 = MaxInstLumiBX2->getMean();
1326  double rms2 = MaxInstLumiBX2->getRMS();
1327  if( rms2 > 0 && mean2-5*rms2 > minX && mean2+5*rms2<maxX ) MaxInstLumiBX2->setAxisRange(mean2-5*rms2,mean2+5*rms2);
1328 
1329  double mean3 = MaxInstLumiBX3->getMean();
1330  double rms3 = MaxInstLumiBX3->getRMS();
1331  if( rms3 > 0 && mean3-5*rms3 > minX && mean3+5*rms3<maxX ) MaxInstLumiBX3->setAxisRange(mean3-5*rms3,mean3+5*rms3);
1332 
1333  double mean4 = MaxInstLumiBX4->getMean();
1334  double rms4 = MaxInstLumiBX4->getRMS();
1335  if( rms4 > 0 && mean4-5*rms4 > minX && mean4+5*rms4<maxX ) MaxInstLumiBX4->setAxisRange(mean4-5*rms4,mean4+5*rms4);
1336  }
1337 
1338 
1339  // Add one to the section count (usually short sections)
1340  ++lumiSectionCount;
1341 }
1342 
1343 
1345 {
1346 
1347  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ){
1348 
1349  unsigned int iWedge = HLXHFMap[iHLX];
1350 
1351  if(section.occupancy[iHLX].hdr.numNibbles != 0){
1352  float nActvTwrsSet1 = section.occupancy[iHLX].data[set1AboveIndex][TriggerBX]
1353  + section.occupancy[iHLX].data[set1BetweenIndex][TriggerBX]
1354  + section.occupancy[iHLX].data[set1BelowIndex][TriggerBX];
1355 
1356  float nActvTwrsSet2 = section.occupancy[iHLX].data[set2AboveIndex][TriggerBX]
1357  + section.occupancy[iHLX].data[set2BetweenIndex][TriggerBX]
1358  + section.occupancy[iHLX].data[set2BelowIndex][TriggerBX];
1359 
1360  float total = nActvTwrsSet1 + nActvTwrsSet2;
1361 
1362  if( total > 0){
1363  float tempData = section.etSum[iHLX].data[TriggerBX]/total;
1364  //cout << "Filling HFCompare Et sum " << tempData << endl;
1365  HFCompareEtSum->Fill( iWedge, tempData );
1366  }
1367 
1368  if(nActvTwrsSet1 > 0){
1369  float tempData = (float)section.occupancy[iHLX].data[set1BelowIndex][TriggerBX]/nActvTwrsSet1;
1370  HFCompareOccBelowSet1->Fill( iWedge, tempData);
1371 
1372  tempData = (float)section.occupancy[iHLX].data[set1BetweenIndex][TriggerBX]/nActvTwrsSet1;
1373  HFCompareOccBetweenSet1->Fill( iWedge, tempData);
1374 
1375  tempData = (float)section.occupancy[iHLX].data[set1AboveIndex][TriggerBX]/nActvTwrsSet1;
1376  HFCompareOccAboveSet1->Fill( iWedge, tempData);
1377  }
1378 
1379  if( nActvTwrsSet2 > 0){
1380  float tempData = (float)section.occupancy[iHLX].data[set2BelowIndex][TriggerBX]/nActvTwrsSet2;
1381  HFCompareOccBelowSet2->Fill( iWedge, tempData);
1382 
1383  tempData = (float)section.occupancy[iHLX].data[set2BetweenIndex][TriggerBX]/nActvTwrsSet2;
1384  HFCompareOccBetweenSet2->Fill( iWedge, tempData);
1385 
1386  tempData = (float)section.occupancy[iHLX].data[set2AboveIndex][TriggerBX]/nActvTwrsSet2;
1387  HFCompareOccAboveSet2->Fill( iWedge, tempData);
1388  }
1389  }
1390  }
1391 }
1392 
1394 {
1395  // New run .. set the run number and fill run summaries ...
1396  //std::cout << "Run number " << runNumber_ << " Section hdr run number "
1397 // << section.hdr.runNumber << std::endl;
1398 
1399  runId_->Fill( section.hdr.runNumber );
1400  lumisecId_->Fill( (int)(section.hdr.sectionNumber/num4NibblePerLS_) + 1 );
1401 
1402  // Update the total nibbles & the expected number
1403  expectedNibbles_ += section.hdr.numOrbits/4096;
1404  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ){
1405  unsigned int iWedge = HLXHFMap[iHLX] + 1;
1406  totalNibbles_[iWedge-1] += section.occupancy[iHLX].hdr.numNibbles;
1407  }
1408 
1409  eventId_->Fill(e.id().event());
1410  eventTimeStamp_->Fill(e.time().value()/(double)0xffffffff);
1411 
1412  pEvent_++;
1413  evtRateCount_++;
1415 
1417  gettimeofday(&currentTime_,NULL);
1420 
1422  if(time>=(evtRateWindow_*60.0)){
1423  processEventRate_->Fill((float)evtRateCount_/time);
1424  evtRateCount_ = 0;
1426  }
1427 
1428 }
1429 
1431  // Run summary - Loop over the HLX's and fill the map,
1432  // also calculate the overall quality.
1433  float overall = 0.0;
1434  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX ){
1435  unsigned int iWedge = HLXHFMap[iHLX] + 1;
1436  unsigned int iEta = 2;
1437  float frac = 0.0;
1438  if( expectedNibbles_ > 0 ) frac = (float)totalNibbles_[iWedge-1]/(float)expectedNibbles_;
1439  if( iWedge >= 19 ){ iEta = 1; iWedge -= 18; }
1440  reportSummaryMap_->setBinContent(iWedge,iEta,frac);
1441  overall += frac;
1442  }
1443 
1444  overall /= (float)NUM_HLX;
1445  if( overall > 1.0 ) overall = 0.0;
1446  //std::cout << "Filling report summary! Main. " << overall << std::endl;
1447  reportSummary_->Fill(overall);
1448 }
1449 
1451 {
1452  for( unsigned int iHLX = 0; iHLX < NUM_HLX; ++iHLX )
1453  {
1454  dbe_->softReset( Set1Below[iHLX] );
1455  dbe_->softReset( Set1Between[iHLX] );
1456  dbe_->softReset( Set1Above[iHLX] );
1457  dbe_->softReset( Set2Below[iHLX] );
1458  dbe_->softReset( Set2Between[iHLX] );
1459  dbe_->softReset( Set2Above[iHLX] );
1460 
1461  dbe_->softReset( ETSum[iHLX] );
1462 
1463  }
1464 
1472 
1480 
1481  // Luminosity Monitoring
1491 
1492  // Sanity Check for Occupancy
1496 
1501 
1506 
1507 
1508  // History
1509  lumiSectionCount = 0;
1510  previousSection = 0;
1513 
1520 
1527 
1540 
1547 
1550 }
1551 
1552 double HLXMonitor::getUTCtime(timeval* a, timeval* b){
1553  double deltaT=(*a).tv_sec*1000.0+(*a).tv_usec/1000.0;
1554  if(b!=NULL) deltaT=(*b).tv_sec*1000.0+(*b).tv_usec/1000.0 - deltaT;
1555  return deltaT/1000.0;
1556 }
1557 
1558 
1559 //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:1430
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:833
MonitorElement * LumiIntegratedEtSum
Definition: HLXMonitor.h:120
void SetupHists()
Definition: HLXMonitor.cc:125
std::vector< std::string > getSubdirs(void) const
Definition: DQMStore.cc:1574
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:872
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:561
#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:809
SaveReferenceTag
Definition: DQMStore.h:73
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:864
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:243
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:838
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
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:2296
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:1186
void setVerbose(unsigned level)
Definition: DQMStore.cc:548
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:2934
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:1393
double getUTCtime(timeval *a, timeval *b=NULL)
Definition: HLXMonitor.cc:1552
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:873
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:1540
double getRMS(int axis=1) const
get RMS of histogram along x, y or z axis (axis=1, 2, 3 respectively)
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:904
void ResetAll()
Definition: HLXMonitor.cc:1450
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:2961
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:779
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:1000
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:584
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:1344
float OccLumiErr[2][HCAL_HLX_MAX_BUNCHES]