CMS 3D CMS Logo

Functions | Variables
lsbs_cert.cc File Reference
#include <Riostream.h>
#include <TDirectory.h>
#include <TFile.h>
#include <TROOT.h>
#include <TStyle.h>
#include <TKey.h>
#include <TH1.h>
#include <TH2.h>
#include <TH2D.h>
#include <TCanvas.h>
#include <TGraph.h>
#include <TPaveStats.h>
#include <TText.h>
#include <TLegend.h>
#include <cstring>
#include <utility>
#include <vector>
#include <sstream>
#include <algorithm>
#include <TString.h>
#include <TColor.h>

Go to the source code of this file.

Functions

bool check_isgood (vector< int > &ls_badlist, int ls)
 
void check_offset (string filename, string iDir, string plot, float limit_min, float limit_max, vector< int > &badLS)
 
void check_sigma (string filename, string iDir, string plot, float limit_err, vector< int > &badLS)
 
void Cleaning (vector< int > &)
 
int getplot (string filename, string iDir, string strplot, TH1F &plot)
 
string ListOut (vector< int > &)
 
void lsbs_cert (string filename)
 
int main (int argc, char *argv[])
 
int nlumis (string filename)
 
string runnum_str (string filename)
 
void vector_AND (vector< int > &, vector< int >)
 

Variables

bool debug = false
 
int numlumis = -1
 

Function Documentation

bool check_isgood ( vector< int > &  ls_badlist,
int  ls 
)

Definition at line 278 of file lsbs_cert.cc.

References mps_fire::i.

Referenced by lsbs_cert().

279 {
280  //check if this LS is found in the BAD list
281  for ( unsigned int i = 0; i < ls_badlist.size() ; i++ )
282  {
283  if ( ls == ls_badlist[i] ) return false;
284  }
285  return true;
286 }
def ls(path, rec=False)
Definition: eostools.py:349
void check_offset ( string  filename,
string  iDir,
string  plot,
float  limit_min,
float  limit_max,
vector< int > &  badLS 
)

Definition at line 243 of file lsbs_cert.cc.

References getplot(), and mps_fire::i.

Referenced by lsbs_cert().

244 {
245  TH1F checkPlot;
246  if ( getplot ( filename , iDir , plot , checkPlot ) < 0 ) return;
247 
248 
249  //look at each LS, save the bad one
250  for ( int i = 1; i <= checkPlot.GetNbinsX() ; i++ )
251  {
252  float value = checkPlot.GetBinContent( i );
253  if ( value < limit_min || value > limit_max )
254  {
255  badLS.push_back( (int)checkPlot.GetBinCenter( i ) );
256  }
257  }
258 }
Definition: value.py:1
int getplot(string filename, string iDir, string strplot, TH1F &plot)
Definition: lsbs_cert.cc:332
void check_sigma ( string  filename,
string  iDir,
string  plot,
float  limit_err,
vector< int > &  badLS 
)

Definition at line 261 of file lsbs_cert.cc.

References getplot(), and mps_fire::i.

Referenced by lsbs_cert().

262 {
263  TH1F checkPlot;
264  if ( getplot ( filename , iDir , plot , checkPlot ) < 0 ) return;
265 
266  //look at each LS
267  for ( int i = 1; i <= checkPlot.GetNbinsX() ; i++ )
268  {
269  float value = checkPlot.GetBinError( i );
270  if ( value > limit_err )
271  {
272  badLS.push_back( (int)checkPlot.GetBinCenter( i ) );
273  }
274  }
275 
276 }
Definition: value.py:1
int getplot(string filename, string iDir, string strplot, TH1F &plot)
Definition: lsbs_cert.cc:332
void Cleaning ( vector< int > &  LSlist)

Definition at line 364 of file lsbs_cert.cc.

Referenced by ListOut().

365 {
366  if ( LSlist.empty() ) return;
367 
368  //cleaning: keep only 1st and last lumisection in the range
369  int refLS = LSlist[0];
370  for (unsigned int at = 1; at < LSlist.size() - 1; at++)
371  {
372  //delete LSnums in between a single continuous range
373  if ( refLS + 1 == LSlist[at] && LSlist[at] + 1 == LSlist[at+1] )
374  {
375  refLS = LSlist[at];
376  LSlist[at] = -1;
377  }
378  else
379  {
380  refLS = LSlist[at];
381  }
382  }
383 }
int getplot ( string  filename,
string  iDir,
string  strplot,
TH1F &  plot 
)

Definition at line 332 of file lsbs_cert.cc.

References MessageLogger_cfi::cerr, gather_cfg::cout, debug, dir, FrontierConditions_GlobalTag_cff::file, writedatasetfile::run, and runnum_str().

Referenced by check_offset(), and check_sigma().

333 {
334  string run = runnum_str( filename );
335  if (debug) std::cout << filename.c_str() << endl;
336 
337  TFile* file = TFile::Open(filename.c_str());
338  if (!file->IsOpen()) {
339  cerr << "Failed to open " << filename << endl;
340  return -1;
341  }
342 
343  string dir = "DQMData/Run " + run + "/AlcaBeamMonitor/Run summary/" + iDir;
344 
345  file->cd( dir.c_str() );
346 
347  string theplot = strplot + ";1";
348  TH1F* thisplot;
349  gDirectory->GetObject ( theplot.c_str() , thisplot );
350 
351  if ( !thisplot )
352  {
353  std::cout << "Error: plot " << dir << "/" << theplot.c_str() << " not found!" << endl;
354  return -2;
355  }
356 
357  plot = *thisplot;
358  thisplot = nullptr;
359  delete thisplot;
360 
361  return 0;
362 }
string runnum_str(string filename)
Definition: lsbs_cert.cc:327
bool debug
Definition: lsbs_cert.cc:26
dbl *** dir
Definition: mlp_gen.cc:35
string ListOut ( vector< int > &  LSlist)

Definition at line 385 of file lsbs_cert.cc.

References Cleaning().

Referenced by lsbs_cert().

386 {
387 
388  Cleaning( LSlist );
389 
390  string strout = "";
391  bool rangeset = false;
392  for (unsigned int at = 0; at < LSlist.size(); at++)
393  {
394  if ( LSlist[at] != -1 )
395  {
396  if ( at > 0 && LSlist[at-1] != -1 ) strout += ",";
397  stringstream lsnum;
398  lsnum << LSlist[at];
399  strout += lsnum.str();
400  rangeset = false;
401  }
402  if ( LSlist[at] == -1 && !rangeset )
403  {
404  strout += "-";
405  rangeset = true;
406  }
407  }
408 
409  return strout;
410 }
void Cleaning(vector< int > &)
Definition: lsbs_cert.cc:364
void lsbs_cert ( string  filename)

Definition at line 52 of file lsbs_cert.cc.

References check_isgood(), check_offset(), check_sigma(), gather_cfg::cout, mps_fire::i, mps_splice::line, ListOut(), eostools::ls(), nlumis(), numlumis, lumiCalc2::outfile, plotFactory::plot, runnum_str(), and vector_AND().

Referenced by main().

53 {
54  void check_offset ( string filename , string iDir , string plot , float limit_min , float limit_max , vector <int>& );
55  void check_sigma ( string filename , string iDir , string plot , float limit_err , vector <int>& );
56  bool check_isgood ( vector<int> & , int ls ); //check if this LS is good
57 
58  //presets
59  numlumis = -1;
60 
61  float limit_x = 0.002;
62  float limit_y = 0.002;
63  float limit_z = 0.5;
64  float limit_dx = 0.002;
65  float limit_dy = 0.002;
66  float limit_dz = 0.5;
67  float limit_errdx = 0.002;
68  float limit_errdy = 0.002;
69  float limit_errdz = 0.5;
70 
71 
72  //LS certification
73  vector <int> ls_x_bad;
74  vector <int> ls_y_bad;
75  vector <int> ls_z_bad;
76 
77  vector <int> ls_xsc_bad;
78  vector <int> ls_ysc_bad;
79  vector <int> ls_zsc_bad;
80 
81  vector <int> ls_dx_bad;
82  vector <int> ls_dy_bad;
83  vector <int> ls_dz_bad;
84 
85  vector <int> ls_dxsc_bad;
86  vector <int> ls_dysc_bad;
87  vector <int> ls_dzsc_bad;
88 
89  vector <int> ls_errdx_bad;
90  vector <int> ls_errdy_bad;
91  vector <int> ls_errdz_bad;
92 
93  vector <int> ls_errdxsc_bad;
94  vector <int> ls_errdysc_bad;
95  vector <int> ls_errdzsc_bad;
96 
97  vector <int> ls_good;
98  vector <int> ls_bad;
99 
100  //beamspot vs primary vertex
101  check_offset ( filename, "Validation" , "hxLumibased PrimaryVertex-DataBase" , -limit_x , limit_x , ls_x_bad );
102  check_offset ( filename, "Validation" , "hyLumibased PrimaryVertex-DataBase" , -limit_y , limit_y , ls_y_bad );
103  check_offset ( filename, "Validation" , "hzLumibased PrimaryVertex-DataBase" , -limit_z , limit_z , ls_z_bad );
104 
105  //beamspot vs scalers
106  check_offset ( filename, "Validation" , "hxLumibased Scalers-DataBase fit" , -limit_x , limit_x , ls_xsc_bad );
107  check_offset ( filename, "Validation" , "hyLumibased Scalers-DataBase fit" , -limit_y , limit_y , ls_ysc_bad );
108  check_offset ( filename, "Validation" , "hzLumibased Scalers-DataBase fit" , -limit_z , limit_z , ls_zsc_bad );
109 
110  check_offset ( filename, "Debug" , "hsigmaXLumibased PrimaryVertex-DataBase fit" , -limit_dx , limit_dx , ls_dx_bad );
111  check_offset ( filename, "Debug" , "hsigmaYLumibased PrimaryVertex-DataBase fit" , -limit_dy , limit_dy , ls_dy_bad );
112  check_offset ( filename, "Debug" , "hsigmaZLumibased PrimaryVertex-DataBase fit" , -limit_dz , limit_dz , ls_dz_bad );
113 
114  check_offset ( filename, "Validation" , "hsigmaXLumibased Scalers-DataBase fit" , -limit_dx , limit_dx , ls_dxsc_bad );
115  check_offset ( filename, "Validation" , "hsigmaYLumibased Scalers-DataBase fit" , -limit_dy , limit_dy , ls_dysc_bad );
116  check_offset ( filename, "Validation" , "hsigmaZLumibased Scalers-DataBase fit" , -limit_dz , limit_dz , ls_dzsc_bad );
117 
118  check_sigma ( filename, "Debug" , "hsigmaXLumibased PrimaryVertex-DataBase fit" , limit_errdx , ls_errdx_bad );
119  check_sigma ( filename, "Debug" , "hsigmaYLumibased PrimaryVertex-DataBase fit" , limit_errdy , ls_errdy_bad );
120  check_sigma ( filename, "Debug" , "hsigmaZLumibased PrimaryVertex-DataBase fit" , limit_errdz , ls_errdz_bad );
121 
122  check_sigma ( filename, "Validation" , "hsigmaXLumibased Scalers-DataBase fit" , limit_errdx , ls_errdxsc_bad );
123  check_sigma ( filename, "Validation" , "hsigmaYLumibased Scalers-DataBase fit" , limit_errdy , ls_errdysc_bad );
124  check_sigma ( filename, "Validation" , "hsigmaZLumibased Scalers-DataBase fit" , limit_errdz , ls_errdzsc_bad );
125 
126  //BAD LS only if bad in both histos (wrt PV, Scalers)
127  vector_AND ( ls_x_bad , ls_xsc_bad );
128  vector_AND ( ls_y_bad , ls_ysc_bad );
129  vector_AND ( ls_z_bad , ls_zsc_bad );
130  vector_AND ( ls_dx_bad , ls_dxsc_bad );
131  vector_AND ( ls_dy_bad , ls_dysc_bad );
132  vector_AND ( ls_dz_bad , ls_dzsc_bad );
133  vector_AND ( ls_errdx_bad , ls_errdxsc_bad );
134  vector_AND ( ls_errdy_bad , ls_errdysc_bad );
135  vector_AND ( ls_errdz_bad , ls_errdzsc_bad );
136 
137  //good LS = all LS minus BAD LS
138  for ( int i = 1; i <= nlumis ( filename ) ; i++ )
139  {
140  if ( !check_isgood ( ls_x_bad , i ) && !check_isgood ( ls_xsc_bad , i ) )
141  {
142  ls_bad.push_back ( i );
143  continue;
144  }
145  else
146  if ( !check_isgood ( ls_y_bad , i ) && !check_isgood ( ls_ysc_bad , i ) )
147  {
148  ls_bad.push_back ( i );
149  continue;
150  }
151  else
152  if ( !check_isgood ( ls_z_bad , i ) && !check_isgood ( ls_zsc_bad , i ) )
153  {
154  ls_bad.push_back ( i );
155  continue;
156  }
157  else
158  if ( !check_isgood ( ls_dx_bad , i ) && !check_isgood ( ls_dxsc_bad , i ) )
159  {
160  ls_bad.push_back ( i );
161  continue;
162  }
163  else
164  if ( !check_isgood ( ls_dy_bad , i ) && !check_isgood ( ls_dysc_bad , i ) )
165  {
166  ls_bad.push_back ( i );
167  continue;
168  }
169  else
170  if ( !check_isgood ( ls_dz_bad , i ) && !check_isgood ( ls_dzsc_bad , i ) )
171  {
172  ls_bad.push_back ( i );
173  continue;
174  }
175  else
176  if ( !check_isgood ( ls_errdx_bad , i ) && !check_isgood ( ls_errdxsc_bad , i ) )
177  {
178  ls_bad.push_back ( i );
179  continue;
180  }
181  else
182  if ( !check_isgood ( ls_errdy_bad , i ) && !check_isgood ( ls_errdysc_bad , i ) )
183  {
184  ls_bad.push_back ( i );
185  continue;
186  }
187  else
188  if ( !check_isgood ( ls_errdz_bad , i ) && !check_isgood ( ls_errdzsc_bad , i ) )
189  {
190  ls_bad.push_back ( i );
191  continue;
192  }
193 
194  //check also that LS is not missing!!!
195  ls_good.push_back( i );
196  }
197 
198  std::ofstream outfile;
199  string namefile = "Certification_BS_run_" + runnum_str( filename ) + ".txt";
200  outfile.open(namefile.c_str());
201  outfile << "Lumibased BeamSpot Calibration Certification for run " << runnum_str( filename ) << ":" << endl << endl;
202 
203  char line[2000];
204  sprintf( line, " GOOD Lumisections (values within limits): %s" , ListOut( ls_good ).c_str() );
205  outfile << line << endl;
206 
207  if ( !ls_bad.empty() )
208  {
209  sprintf( line, " BAD Lumisections (values outside limits): %s" , ListOut( ls_bad ).c_str() );
210  outfile << line << endl;
211 
212  sprintf( line, " --- histogram name --- --- bad lumisection list(*) ---" );
213  outfile << line << endl;
214  sprintf( line, " hxLumibased PrimaryVertex-DataBase (mean): %s" , ListOut( ls_x_bad ).c_str() );
215  if ( !ls_x_bad.empty() ) outfile << line << endl;
216  sprintf( line, " hyLumibased PrimaryVertex-DataBase (mean): %s" , ListOut( ls_y_bad ).c_str() );
217  if ( !ls_y_bad.empty() ) outfile << line << endl;
218  sprintf( line, " hzLumibased PrimaryVertex-DataBase (mean): %s" , ListOut( ls_z_bad ).c_str() );
219  if ( !ls_z_bad.empty() ) outfile << line << endl;
220 
221  sprintf( line, " hsigmaXLumibased PrimaryVertex-DataBase fit (mean): %s" , ListOut( ls_dx_bad ).c_str() );
222  if ( !ls_dx_bad.empty() ) outfile << line << endl;
223  sprintf( line, " hsigmaYLumibased PrimaryVertex-DataBase fit (mean): %s" , ListOut( ls_dy_bad ).c_str() );
224  if ( !ls_dy_bad.empty() ) outfile << line << endl;
225  sprintf( line, " hsigmaZLumibased PrimaryVertex-DataBase fit (mean): %s" , ListOut( ls_dz_bad ).c_str() );
226  if ( !ls_dz_bad.empty() ) outfile << line << endl;
227 
228  sprintf( line, " hsigmaXLumibased PrimaryVertex-DataBase fit (error): %s" , ListOut( ls_errdx_bad ).c_str() );
229  if ( !ls_errdx_bad.empty() ) outfile << line << endl;
230  sprintf( line, " hsigmaYLumibased PrimaryVertex-DataBase fit (error): %s" , ListOut( ls_errdy_bad ).c_str() );
231  if ( !ls_errdy_bad.empty() ) outfile << line << endl;
232  sprintf( line, " hsigmaZLumibased PrimaryVertex-DataBase fit (error): %s" , ListOut( ls_errdz_bad ).c_str() );
233  if ( !ls_errdz_bad.empty() ) outfile << line << endl;
234 
235  sprintf( line, " (*) also bad in the corresponding 'Scalers-Database fit' histograms" );
236  outfile << line << endl;
237  }
238 
239  outfile.close();
240  std::cout << "Lumibased BeamSpot Calibration Certification summary saved in " << namefile << endl;
241 }
void vector_AND(vector< int > &, vector< int >)
Definition: lsbs_cert.cc:412
int numlumis
Definition: lsbs_cert.cc:27
int nlumis(string filename)
Definition: lsbs_cert.cc:288
string runnum_str(string filename)
Definition: lsbs_cert.cc:327
def ls(path, rec=False)
Definition: eostools.py:349
string ListOut(vector< int > &)
Definition: lsbs_cert.cc:385
bool check_isgood(vector< int > &ls_badlist, int ls)
Definition: lsbs_cert.cc:278
void check_offset(string filename, string iDir, string plot, float limit_min, float limit_max, vector< int > &badLS)
Definition: lsbs_cert.cc:243
void check_sigma(string filename, string iDir, string plot, float limit_err, vector< int > &badLS)
Definition: lsbs_cert.cc:261
int main ( int  argc,
char *  argv[] 
)

Definition at line 37 of file lsbs_cert.cc.

References gather_cfg::cout, corrVsCorr::filename, and lsbs_cert().

37  {
38 
39  if(argc==2) {
40  char* filename = argv[1];
41 
42  std::cout << "ready to run lsbs filename " << filename << std::endl;
43 
44  lsbs_cert(filename);
45 
46  }
47  else {std::cout << "Too few arguments: " << argc << std::endl; return -1; }
48  return 0;
49 
50 }
void lsbs_cert(string filename)
Definition: lsbs_cert.cc:52
int nlumis ( string  filename)

Definition at line 288 of file lsbs_cert.cc.

References MessageLogger_cfi::cerr, data-class-funcs::classname, FrontierConditions_GlobalTag_cff::file, numlumis, writedatasetfile::run, and runnum_str().

Referenced by lsbs_cert().

289 {
290  if ( numlumis > -1 )
291  return numlumis;
292 
293  TFile* file = TFile::Open(filename.c_str());
294  if (!file->IsOpen()) {
295  cerr << "Failed to open " << filename << endl;
296  return -1;
297  }
298 
299  string run = runnum_str( filename );
300  string EventInfoDir = "DQMData/Run " + run + "/SiStrip/Run summary/EventInfo";
301  TDirectory *rsEventInfoDir = dynamic_cast<TDirectory*>( file->Get(EventInfoDir.c_str()));
302  rsEventInfoDir->cd();
303  TIter eiKeys(rsEventInfoDir->GetListOfKeys());
304  TKey *eiKey;
305  while ( (eiKey = dynamic_cast<TKey*>(eiKeys())) )
306  {
307  string classname(eiKey->GetClassName());
308  if (classname=="TObjString" )
309  {
310  string sflag = eiKey->GetName();
311  string tempname = sflag.substr(sflag.find("i=")+2);
312  size_t pos1 = tempname.find("<");
313  size_t pos2 = sflag.find_first_of(">");
314  string detvalue = tempname.substr(0,pos1);
315  string numlumisec = sflag.substr(1,pos2-1);
316  if ( numlumisec == (string)"iLumiSection" )
317  {
318  numlumis = atoi( detvalue.c_str() );
319  break;
320  }
321  }
322  }
323 
324  return numlumis;
325 }
int numlumis
Definition: lsbs_cert.cc:27
string runnum_str(string filename)
Definition: lsbs_cert.cc:327
string runnum_str ( string  filename)

Definition at line 327 of file lsbs_cert.cc.

Referenced by getplot(), lsbs_cert(), and nlumis().

328 {
329  return filename.substr(filename.find("_R000")+5, 6);
330 }
void vector_AND ( vector< int > &  bad_def,
vector< int >  bad_sc 
)

Definition at line 412 of file lsbs_cert.cc.

References mps_fire::i, and groupFilesInBlocks::temp.

Referenced by lsbs_cert().

413 {
414  vector <int> temp;
415 
416  int def_size = bad_def.size();
417  for ( int i = 0; i < def_size; i++ )
418  for ( unsigned int j = 0; j < bad_sc.size(); j++ )
419  if ( bad_def[ i ] == bad_sc[ j ] )
420  {
421  temp.push_back( bad_def[ i ] );
422  break;
423  }
424 
425  bad_def = temp;
426 }

Variable Documentation

bool debug = false

Definition at line 26 of file lsbs_cert.cc.

Referenced by getplot().

int numlumis = -1

Definition at line 27 of file lsbs_cert.cc.

Referenced by lsbs_cert(), and nlumis().