17 #include <Math/Minimizer.h> 18 #include <Math/Factory.h> 19 #include <Math/Functor.h> 32 maxLumiIntegration = 15;
33 nLumiXaxisRange = 5000;
53 nLumiFit = iConfig.
getParameter<
unsigned int>(
"nLumiFit");
54 maxLumiIntegration = iConfig.
getParameter<
unsigned int>(
"maxLumiIntegration");
55 nLumiXaxisRange = iConfig.
getParameter<
unsigned int>(
"nLumiXaxisRange");
57 minNentries = iConfig.
getParameter<
unsigned int>(
"minNentries");
72 internalDebug =
false;
73 considerVxCovariance =
true;
74 pi = 3.141592653589793238;
99 if (debugMode ==
true)
101 stringstream debugFile;
104 if (outputDebugFile.is_open() ==
true) outputDebugFile.close();
105 tmp.erase(strlen(
fileName.c_str())-4,4);
106 debugFile << tmp.c_str() <<
"_Run" << iEvent.
id().
run() <<
".txt";
107 outputDebugFile.open(debugFile.str().c_str(),
ios::out);
108 outputDebugFile.close();
109 outputDebugFile.open(debugFile.str().c_str(), ios::app);
114 else if (beginTimeOfFit != 0)
116 totalHits += HitCounter(iEvent);
118 if (internalDebug ==
true)
120 cout <<
"[Vx3DHLTAnalyzer]::\tI found " << totalHits <<
" pixel hits until now" << endl;
121 cout <<
"[Vx3DHLTAnalyzer]::\tIn this event there are " << Vx3DCollection->size() <<
" vertex cadidates" << endl;
124 for (vector<Vertex>::const_iterator it3DVx = Vx3DCollection->begin(); it3DVx != Vx3DCollection->end(); it3DVx++)
126 if (internalDebug ==
true)
128 cout <<
"[Vx3DHLTAnalyzer]::\tVertex selections:" << endl;
129 cout <<
"[Vx3DHLTAnalyzer]::\tEvent ID = " << iEvent.
id() << endl;
130 cout <<
"[Vx3DHLTAnalyzer]::\tVertex number = " << it3DVx - Vx3DCollection->begin() << endl;
131 cout <<
"[Vx3DHLTAnalyzer]::\tisValid = " << it3DVx->isValid() << endl;
132 cout <<
"[Vx3DHLTAnalyzer]::\tisFake = " << it3DVx->isFake() << endl;
133 cout <<
"[Vx3DHLTAnalyzer]::\tnodof = " << it3DVx->ndof() << endl;
134 cout <<
"[Vx3DHLTAnalyzer]::\ttracksSize = " << it3DVx->tracksSize() << endl;
137 if ((it3DVx->isValid() ==
true) &&
138 (it3DVx->isFake() ==
false) &&
139 (it3DVx->ndof() >= minVxDoF) &&
140 (it3DVx->tracksSize() > 0) &&
141 ((it3DVx->ndof()+3.) / ((double)it3DVx->tracksSize()) >= 2.*minVxWgt))
143 for (i = 0; i <
DIM; i++)
145 for (j = 0; j <
DIM; j++)
147 MyVertex.
Covariance[
i][j] = it3DVx->covariance(i,j);
159 if ((i == DIM) && (det > 0.))
161 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tVertex accepted !" << endl;
163 MyVertex.
x = it3DVx->x();
164 MyVertex.
y = it3DVx->y();
165 MyVertex.
z = it3DVx->z();
168 Vx_X->Fill(it3DVx->x());
169 Vx_Y->Fill(it3DVx->y());
170 Vx_Z->Fill(it3DVx->z());
172 Vx_ZX->Fill(it3DVx->z(), it3DVx->x());
173 Vx_ZY->Fill(it3DVx->z(), it3DVx->y());
174 Vx_XY->Fill(it3DVx->x(), it3DVx->y());
176 Vx_X_Cum->Fill(it3DVx->x());
177 Vx_Y_Cum->Fill(it3DVx->y());
178 Vx_Z_Cum->Fill(it3DVx->z());
180 Vx_ZX_Cum->Fill(it3DVx->z(), it3DVx->x());
181 Vx_ZY_Cum->Fill(it3DVx->z(), it3DVx->y());
182 Vx_XY_Cum->Fill(it3DVx->x(), it3DVx->y());
184 else if (internalDebug ==
true)
186 cout <<
"[Vx3DHLTAnalyzer]::\tVertex discarded !" << endl;
188 for (i = 0; i <
DIM; i++)
189 for (j = 0; j <
DIM; j++)
190 cout <<
"(i,j) --> " << i <<
"," << j <<
" --> " << MyVertex.
Covariance[i][j] << endl;
193 else if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tVertex discarded !" << endl;
202 iEvent.
getByToken(pixelHitCollection, rechitspixel);
216 strftime(ts,
sizeof(ts),
"%Y.%m.%d %H:%M:%S %Z", gmtime(&t));
218 string ts_string(ts);
245 (std::fabs(
Vertices[
i].z-zPos) <= maxLongLength))
247 if (considerVxCovariance ==
true)
249 K[0][0] = std::fabs(par[0]) + VxErrCorr*VxErrCorr * std::fabs(
Vertices[
i].
Covariance[0][0]);
250 K[1][1] = std::fabs(par[1]) + VxErrCorr*VxErrCorr * std::fabs(
Vertices[
i].Covariance[1][1]);
251 K[2][2] = std::fabs(par[2]) + VxErrCorr*VxErrCorr * std::fabs(
Vertices[
i].Covariance[2][2]);
252 K[0][1] = K[1][0] = par[3] + VxErrCorr*VxErrCorr *
Vertices[
i].Covariance[0][1];
253 K[1][2] = K[2][1] = par[4]*(std::fabs(par[2])-std::fabs(par[1])) - par[5]*par[3] + VxErrCorr*VxErrCorr *
Vertices[
i].Covariance[1][2];
254 K[0][2] = K[2][0] = par[5]*(std::fabs(par[2])-std::fabs(par[0])) - par[4]*par[3] + VxErrCorr*VxErrCorr *
Vertices[
i].Covariance[0][2];
258 K[0][0] = std::fabs(par[0]);
259 K[1][1] = std::fabs(par[1]);
260 K[2][2] = std::fabs(par[2]);
261 K[0][1] = K[1][0] = par[3];
262 K[1][2] = K[2][1] = par[4]*(std::fabs(par[2])-std::fabs(par[1])) - par[5]*par[3];
263 K[0][2] = K[2][0] = par[5]*(std::fabs(par[2])-std::fabs(par[0])) - par[4]*par[3];
266 det = K[0][0]*(K[1][1]*K[2][2] - K[1][2]*K[1][2]) -
267 K[0][1]*(K[0][1]*K[2][2] - K[0][2]*K[1][2]) +
268 K[0][2]*(K[0][1]*K[1][2] - K[0][2]*K[1][1]);
270 M[0][0] = (K[1][1]*K[2][2] - K[1][2]*K[1][2]) / det;
271 M[1][1] = (K[0][0]*K[2][2] - K[0][2]*K[0][2]) / det;
272 M[2][2] = (K[0][0]*K[1][1] - K[0][1]*K[0][1]) / det;
273 M[0][1] = M[1][0] = (K[0][2]*K[1][2] - K[0][1]*K[2][2]) / det;
274 M[1][2] = M[2][1] = (K[0][2]*K[0][1] - K[1][2]*K[0][0]) / det;
275 M[0][2] = M[2][0] = (K[0][1]*K[1][2] - K[0][2]*K[1][1]) / det;
306 if ((vals !=
nullptr) && (vals->size() == nParams*2))
308 double nSigmaXY = 10.;
310 double parDistanceXY = 1
e-3;
311 double parDistanceZ = 1
e-2;
312 double parDistanceddZ = 1
e-3;
313 double parDistanceCxy = 1
e-5;
316 const unsigned int trials = 4;
317 double largerDist[trials] = {0.1, 5., 10., 100.};
319 double covxz,covyz,det;
321 int bestMovementX = 1;
322 int bestMovementY = 1;
323 int bestMovementZ = 1;
328 vector<double>::const_iterator it = vals->begin();
330 ROOT::Math::Minimizer* Gauss3D = ROOT::Math::Factory::CreateMinimizer(
"Minuit2",
"Migrad");
331 Gauss3D->SetErrorDef(1.0);
332 if (internalDebug ==
true) Gauss3D->SetPrintLevel(3);
333 else Gauss3D->SetPrintLevel(0);
336 Gauss3D->SetFunction(_Gauss3DFunc);
338 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\t@@@ START FITTING @@@" << endl;
342 for (
int i = 0;
i < 3;
i++)
344 deltaMean = (double(
i)-1.)*
std::sqrt(*(it+0));
345 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tdeltaMean --> " << deltaMean << endl;
349 Gauss3D->SetVariable(0,
"var x ", *(it+0), parDistanceXY * parDistanceXY);
350 Gauss3D->SetVariable(1,
"var y ", *(it+1), parDistanceXY * parDistanceXY);
351 Gauss3D->SetVariable(2,
"var z ", *(it+2), parDistanceZ * parDistanceZ);
352 Gauss3D->SetVariable(3,
"cov xy", *(it+3), parDistanceCxy);
353 Gauss3D->SetVariable(4,
"dydz ", *(it+4), parDistanceddZ);
354 Gauss3D->SetVariable(5,
"dxdz ", *(it+5), parDistanceddZ);
355 Gauss3D->SetVariable(6,
"mean x", *(it+6)+deltaMean, parDistanceXY);
356 Gauss3D->SetVariable(7,
"mean y", *(it+7), parDistanceXY);
357 Gauss3D->SetVariable(8,
"mean z", *(it+8), parDistanceZ);
360 xPos = Gauss3D->X()[6];
361 yPos = Gauss3D->X()[7];
362 zPos = Gauss3D->X()[8];
365 maxTransRadius = nSigmaXY *
std::sqrt(std::fabs(Gauss3D->X()[0]) + std::fabs(Gauss3D->X()[1])) / 2.;
366 maxLongLength = nSigmaZ *
std::sqrt(std::fabs(Gauss3D->X()[2]));
369 goodData = Gauss3D->Status();
370 edm = Gauss3D->Edm();
372 if (counterVx < minNentries) goodData = -2;
373 else if (
isNotFinite(edm) ==
true) { goodData = -1;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite edm !" << endl; }
374 else for (
unsigned int j = 0; j < nParams; j++)
378 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite errors !" << endl;
383 covyz = Gauss3D->X()[4]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[1])) - Gauss3D->X()[5]*Gauss3D->X()[3];
384 covxz = Gauss3D->X()[5]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[0])) - Gauss3D->X()[4]*Gauss3D->X()[3];
386 det = std::fabs(Gauss3D->X()[0]) * (std::fabs(Gauss3D->X()[1])*std::fabs(Gauss3D->X()[2]) - covyz*covyz) -
387 Gauss3D->X()[3] * (Gauss3D->X()[3]*std::fabs(Gauss3D->X()[2]) - covxz*covyz) +
388 covxz * (Gauss3D->X()[3]*covyz - covxz*std::fabs(Gauss3D->X()[1]));
389 if (det < 0.) { goodData = -4;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNegative determinant !" << endl; }
392 if ((goodData == 0) && (std::fabs(edm) < bestEdm)) { bestEdm = edm; bestMovementX =
i; }
394 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tFound bestMovementX --> " << bestMovementX << endl;
398 for (
int i = 0;
i < 3;
i++)
400 deltaMean = (double(
i)-1.)*
std::sqrt(*(it+1));
401 if (internalDebug ==
true)
403 cout <<
"[Vx3DHLTAnalyzer]::\tdeltaMean --> " << deltaMean << endl;
404 cout <<
"[Vx3DHLTAnalyzer]::\tdeltaMean X --> " << (double(bestMovementX)-1.)*
std::sqrt(*(it+0)) << endl;
409 Gauss3D->SetVariable(0,
"var x ", *(it+0), parDistanceXY * parDistanceXY);
410 Gauss3D->SetVariable(1,
"var y ", *(it+1), parDistanceXY * parDistanceXY);
411 Gauss3D->SetVariable(2,
"var z ", *(it+2), parDistanceZ * parDistanceZ);
412 Gauss3D->SetVariable(3,
"cov xy", *(it+3), parDistanceCxy);
413 Gauss3D->SetVariable(4,
"dydz ", *(it+4), parDistanceddZ);
414 Gauss3D->SetVariable(5,
"dxdz ", *(it+5), parDistanceddZ);
415 Gauss3D->SetVariable(6,
"mean x", *(it+6)+(
double(bestMovementX)-1.)*
std::sqrt(*(it+0)), parDistanceXY);
416 Gauss3D->SetVariable(7,
"mean y", *(it+7)+deltaMean, parDistanceXY);
417 Gauss3D->SetVariable(8,
"mean z", *(it+8), parDistanceZ);
420 xPos = Gauss3D->X()[6];
421 yPos = Gauss3D->X()[7];
422 zPos = Gauss3D->X()[8];
425 maxTransRadius = nSigmaXY *
std::sqrt(std::fabs(Gauss3D->X()[0]) + std::fabs(Gauss3D->X()[1])) / 2.;
426 maxLongLength = nSigmaZ *
std::sqrt(std::fabs(Gauss3D->X()[2]));
429 goodData = Gauss3D->Status();
430 edm = Gauss3D->Edm();
432 if (counterVx < minNentries) goodData = -2;
433 else if (
isNotFinite(edm) ==
true) { goodData = -1;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite edm !" << endl; }
434 else for (
unsigned int j = 0; j < nParams; j++)
438 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite errors !" << endl;
443 covyz = Gauss3D->X()[4]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[1])) - Gauss3D->X()[5]*Gauss3D->X()[3];
444 covxz = Gauss3D->X()[5]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[0])) - Gauss3D->X()[4]*Gauss3D->X()[3];
446 det = std::fabs(Gauss3D->X()[0]) * (std::fabs(Gauss3D->X()[1])*std::fabs(Gauss3D->X()[2]) - covyz*covyz) -
447 Gauss3D->X()[3] * (Gauss3D->X()[3]*std::fabs(Gauss3D->X()[2]) - covxz*covyz) +
448 covxz * (Gauss3D->X()[3]*covyz - covxz*std::fabs(Gauss3D->X()[1]));
449 if (det < 0.) { goodData = -4;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNegative determinant !" << endl; }
452 if ((goodData == 0) && (std::fabs(edm) < bestEdm)) { bestEdm = edm; bestMovementY =
i; }
454 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tFound bestMovementY --> " << bestMovementY << endl;
458 for (
int i = 0;
i < 3;
i++)
460 deltaMean = (double(
i)-1.)*
std::sqrt(*(it+2));
461 if (internalDebug ==
true)
463 cout <<
"[Vx3DHLTAnalyzer]::\tdeltaMean --> " << deltaMean << endl;
464 cout <<
"[Vx3DHLTAnalyzer]::\tdeltaMean X --> " << (double(bestMovementX)-1.)*
std::sqrt(*(it+0)) << endl;
465 cout <<
"[Vx3DHLTAnalyzer]::\tdeltaMean Y --> " << (double(bestMovementY)-1.)*
std::sqrt(*(it+1)) << endl;
470 Gauss3D->SetVariable(0,
"var x ", *(it+0), parDistanceXY * parDistanceXY);
471 Gauss3D->SetVariable(1,
"var y ", *(it+1), parDistanceXY * parDistanceXY);
472 Gauss3D->SetVariable(2,
"var z ", *(it+2), parDistanceZ * parDistanceZ);
473 Gauss3D->SetVariable(3,
"cov xy", *(it+3), parDistanceCxy);
474 Gauss3D->SetVariable(4,
"dydz ", *(it+4), parDistanceddZ);
475 Gauss3D->SetVariable(5,
"dxdz ", *(it+5), parDistanceddZ);
476 Gauss3D->SetVariable(6,
"mean x", *(it+6)+(
double(bestMovementX)-1.)*
std::sqrt(*(it+0)), parDistanceXY);
477 Gauss3D->SetVariable(7,
"mean y", *(it+7)+(
double(bestMovementY)-1.)*
std::sqrt(*(it+1)), parDistanceXY);
478 Gauss3D->SetVariable(8,
"mean z", *(it+8)+deltaMean, parDistanceZ);
481 xPos = Gauss3D->X()[6];
482 yPos = Gauss3D->X()[7];
483 zPos = Gauss3D->X()[8];
486 maxTransRadius = nSigmaXY *
std::sqrt(std::fabs(Gauss3D->X()[0]) + std::fabs(Gauss3D->X()[1])) / 2.;
487 maxLongLength = nSigmaZ *
std::sqrt(std::fabs(Gauss3D->X()[2]));
490 goodData = Gauss3D->Status();
491 edm = Gauss3D->Edm();
493 if (counterVx < minNentries) goodData = -2;
494 else if (
isNotFinite(edm) ==
true) { goodData = -1;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite edm !" << endl; }
495 else for (
unsigned int j = 0; j < nParams; j++)
499 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite errors !" << endl;
504 covyz = Gauss3D->X()[4]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[1])) - Gauss3D->X()[5]*Gauss3D->X()[3];
505 covxz = Gauss3D->X()[5]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[0])) - Gauss3D->X()[4]*Gauss3D->X()[3];
507 det = std::fabs(Gauss3D->X()[0]) * (std::fabs(Gauss3D->X()[1])*std::fabs(Gauss3D->X()[2]) - covyz*covyz) -
508 Gauss3D->X()[3] * (Gauss3D->X()[3]*std::fabs(Gauss3D->X()[2]) - covxz*covyz) +
509 covxz * (Gauss3D->X()[3]*covyz - covxz*std::fabs(Gauss3D->X()[1]));
510 if (det < 0.) { goodData = -4;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNegative determinant !" << endl; }
513 if ((goodData == 0) && (std::fabs(edm) < bestEdm)) { bestEdm = edm; bestMovementZ =
i; }
515 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tFound bestMovementZ --> " << bestMovementZ << endl;
520 Gauss3D->SetVariable(0,
"var x ", *(it+0), parDistanceXY * parDistanceXY);
521 Gauss3D->SetVariable(1,
"var y ", *(it+1), parDistanceXY * parDistanceXY);
522 Gauss3D->SetVariable(2,
"var z ", *(it+2), parDistanceZ * parDistanceZ);
523 Gauss3D->SetVariable(3,
"cov xy", *(it+3), parDistanceCxy);
524 Gauss3D->SetVariable(4,
"dydz ", *(it+4), parDistanceddZ);
525 Gauss3D->SetVariable(5,
"dxdz ", *(it+5), parDistanceddZ);
526 Gauss3D->SetVariable(6,
"mean x", *(it+6)+(
double(bestMovementX)-1.)*
std::sqrt(*(it+0)), parDistanceXY);
527 Gauss3D->SetVariable(7,
"mean y", *(it+7)+(
double(bestMovementY)-1.)*
std::sqrt(*(it+1)), parDistanceXY);
528 Gauss3D->SetVariable(8,
"mean z", *(it+8)+(
double(bestMovementZ)-1.)*
std::sqrt(*(it+2)), parDistanceZ);
531 xPos = Gauss3D->X()[6];
532 yPos = Gauss3D->X()[7];
533 zPos = Gauss3D->X()[8];
536 maxTransRadius = nSigmaXY *
std::sqrt(std::fabs(Gauss3D->X()[0]) + std::fabs(Gauss3D->X()[1])) / 2.;
537 maxLongLength = nSigmaZ *
std::sqrt(std::fabs(Gauss3D->X()[2]));
540 goodData = Gauss3D->Status();
541 edm = Gauss3D->Edm();
543 if (counterVx < minNentries) goodData = -2;
544 else if (
isNotFinite(edm) ==
true) { goodData = -1;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite edm !" << endl; }
545 else for (
unsigned int j = 0; j < nParams; j++)
549 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite errors !" << endl;
554 covyz = Gauss3D->X()[4]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[1])) - Gauss3D->X()[5]*Gauss3D->X()[3];
555 covxz = Gauss3D->X()[5]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[0])) - Gauss3D->X()[4]*Gauss3D->X()[3];
557 det = std::fabs(Gauss3D->X()[0]) * (std::fabs(Gauss3D->X()[1])*std::fabs(Gauss3D->X()[2]) - covyz*covyz) -
558 Gauss3D->X()[3] * (Gauss3D->X()[3]*std::fabs(Gauss3D->X()[2]) - covxz*covyz) +
559 covxz * (Gauss3D->X()[3]*covyz - covxz*std::fabs(Gauss3D->X()[1]));
560 if (det < 0.) { goodData = -4;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNegative determinant !" << endl; }
564 for (
unsigned int i = 0;
i < trials;
i++)
566 if ((goodData != 0) && (goodData != -2))
570 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tFIT WITH DIFFERENT PARAMETER DISTANCES - STEP " <<
i+1 << endl;
572 Gauss3D->SetVariable(0,
"var x ", *(it+0), parDistanceXY * parDistanceXY * largerDist[
i]);
573 Gauss3D->SetVariable(1,
"var y ", *(it+1), parDistanceXY * parDistanceXY * largerDist[i]);
574 Gauss3D->SetVariable(2,
"var z ", *(it+2), parDistanceZ * parDistanceZ * largerDist[i]);
575 Gauss3D->SetVariable(3,
"cov xy", *(it+3), parDistanceCxy * largerDist[i]);
576 Gauss3D->SetVariable(4,
"dydz ", *(it+4), parDistanceddZ * largerDist[i]);
577 Gauss3D->SetVariable(5,
"dxdz ", *(it+5), parDistanceddZ * largerDist[i]);
578 Gauss3D->SetVariable(6,
"mean x", *(it+6)+(
double(bestMovementX)-1.)*std::sqrt(*(it+0)), parDistanceXY * largerDist[i]);
579 Gauss3D->SetVariable(7,
"mean y", *(it+7)+(
double(bestMovementY)-1.)*std::sqrt(*(it+1)), parDistanceXY * largerDist[i]);
580 Gauss3D->SetVariable(8,
"mean z", *(it+8)+(
double(bestMovementZ)-1.)*std::sqrt(*(it+2)), parDistanceZ * largerDist[i]);
583 xPos = Gauss3D->X()[6];
584 yPos = Gauss3D->X()[7];
585 zPos = Gauss3D->X()[8];
588 maxTransRadius = nSigmaXY *
std::sqrt(std::fabs(Gauss3D->X()[0]) + std::fabs(Gauss3D->X()[1])) / 2.;
589 maxLongLength = nSigmaZ *
std::sqrt(std::fabs(Gauss3D->X()[2]));
592 goodData = Gauss3D->Status();
593 edm = Gauss3D->Edm();
595 if (counterVx < minNentries) goodData = -2;
596 else if (
isNotFinite(edm) ==
true) { goodData = -1;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite edm !" << endl; }
597 else for (
unsigned int j = 0; j < nParams; j++)
601 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNot finite errors !" << endl;
606 covyz = Gauss3D->X()[4]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[1])) - Gauss3D->X()[5]*Gauss3D->X()[3];
607 covxz = Gauss3D->X()[5]*(std::fabs(Gauss3D->X()[2])-std::fabs(Gauss3D->X()[0])) - Gauss3D->X()[4]*Gauss3D->X()[3];
609 det = std::fabs(Gauss3D->X()[0]) * (std::fabs(Gauss3D->X()[1])*std::fabs(Gauss3D->X()[2]) - covyz*covyz) -
610 Gauss3D->X()[3] * (Gauss3D->X()[3]*std::fabs(Gauss3D->X()[2]) - covxz*covyz) +
611 covxz * (Gauss3D->X()[3]*covyz - covxz*std::fabs(Gauss3D->X()[1]));
612 if (det < 0.) { goodData = -4;
if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tNegative determinant !" << endl; }
618 for (
unsigned int i = 0;
i < nParams;
i++)
620 vals->operator[](
i) = Gauss3D->X()[
i];
621 vals->operator[](
i+nParams) = Gauss3D->Errors()[
i];
634 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true))
636 outputDebugFile <<
"Runnumber " <<
runNumber << endl;
637 outputDebugFile <<
"BeginTimeOfFit " <<
formatTime(beginTimeOfFit >> 32) <<
" " << (beginTimeOfFit >> 32) << endl;
638 outputDebugFile <<
"BeginLumiRange " << beginLumiOfFit << endl;
639 outputDebugFile <<
"EndTimeOfFit " <<
formatTime(endTimeOfFit >> 32) <<
" " << (endTimeOfFit >> 32) << endl;
640 outputDebugFile <<
"EndLumiRange " << endLumiOfFit << endl;
641 outputDebugFile <<
"LumiCounter " << lumiCounter << endl;
642 outputDebugFile <<
"LastLumiOfFit " << lastLumiOfFit << endl;
646 if (ResetType ==
"scratch")
685 goodVxCounter->Reset();
686 statusCounter->Reset();
689 reportSummary->Fill(-1);
690 reportSummaryMap->getTH1()->SetBinContent(1, 1, -1);
701 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tReset issued: scratch" << endl;
702 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true)) outputDebugFile <<
"Reset -scratch- issued\n" << endl;
704 else if (ResetType ==
"whole")
723 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tReset issued: whole" << endl;
724 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true)) outputDebugFile <<
"Reset -whole- issued\n" << endl;
726 else if (ResetType ==
"fit")
732 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tReset issued: fit" << endl;
733 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true)) outputDebugFile <<
"Reset -fit- issued\n" << endl;
735 else if (ResetType ==
"hitCounter")
739 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tReset issued: hitCounter" << endl;
740 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true)) outputDebugFile <<
"Reset -hitCounter- issued\n" << endl;
748 unsigned int BeginLumiOfFit,
749 unsigned int EndLumiOfFit,
752 stringstream BufferString;
753 BufferString.precision(5);
757 if ((
outputFile.is_open() ==
true) && (vals !=
nullptr) && (vals->size() == (nParams-1)*2))
759 vector<double>::const_iterator it = vals->begin();
762 outputFile <<
"BeginTimeOfFit " <<
formatTime(beginTimeOfFit >> 32) <<
" " << (beginTimeOfFit >> 32) << endl;
763 outputFile <<
"EndTimeOfFit " <<
formatTime(endTimeOfFit >> 32) <<
" " << (endTimeOfFit >> 32) << endl;
764 outputFile <<
"LumiRange " << beginLumiOfFit <<
" - " << endLumiOfFit << endl;
770 BufferString << *(it+0);
771 outputFile <<
"X0 " << BufferString.str().c_str() << endl;
772 BufferString.str(
"");
774 BufferString << *(it+1);
775 outputFile <<
"Y0 " << BufferString.str().c_str() << endl;
776 BufferString.str(
"");
778 BufferString << *(it+2);
779 outputFile <<
"Z0 " << BufferString.str().c_str() << endl;
780 BufferString.str(
"");
782 BufferString << *(it+5);
783 outputFile <<
"sigmaZ0 " << BufferString.str().c_str() << endl;
784 BufferString.str(
"");
786 BufferString << *(it+6);
787 outputFile <<
"dxdz " << BufferString.str().c_str() << endl;
788 BufferString.str(
"");
790 BufferString << *(it+7);
791 outputFile <<
"dydz " << BufferString.str().c_str() << endl;
792 BufferString.str(
"");
794 BufferString << *(it+3);
795 outputFile <<
"BeamWidthX " << BufferString.str().c_str() << endl;
796 BufferString.str(
"");
798 BufferString << *(it+4);
799 outputFile <<
"BeamWidthY " << BufferString.str().c_str() << endl;
800 BufferString.str(
"");
802 outputFile <<
"Cov(0,j) " << *(it+8) <<
" 0 0 0 0 0 0" << endl;
803 outputFile <<
"Cov(1,j) 0 " << *(it+9) <<
" 0 0 0 0 0" << endl;
804 outputFile <<
"Cov(2,j) 0 0 " << *(it+10) <<
" 0 0 0 0" << endl;
805 outputFile <<
"Cov(3,j) 0 0 0 " << *(it+13) <<
" 0 0 0" << endl;
806 outputFile <<
"Cov(4,j) 0 0 0 0 " << *(it+14) <<
" 0 0" << endl;
807 outputFile <<
"Cov(5,j) 0 0 0 0 0 " << *(it+15) <<
" 0" << endl;
808 outputFile <<
"Cov(6,j) 0 0 0 0 0 0 " << ((*(it+11)) + (*(it+12)) + 2.*
std::sqrt((*(it+11))*(*(it+12)))) / 4. << endl;
823 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true) && (vals !=
nullptr) && (vals->size() == (nParams-1)*2))
825 vector<double>::const_iterator it = vals->begin();
827 outputDebugFile <<
"Runnumber " <<
runNumber << endl;
828 outputDebugFile <<
"BeginTimeOfFit " <<
formatTime(beginTimeOfFit >> 32) <<
" " << (beginTimeOfFit >> 32) << endl;
829 outputDebugFile <<
"EndTimeOfFit " <<
formatTime(endTimeOfFit >> 32) <<
" " << (endTimeOfFit >> 32) << endl;
830 outputDebugFile <<
"LumiRange " << beginLumiOfFit <<
" - " << endLumiOfFit << endl;
831 outputDebugFile <<
"Type " << dataType << endl;
836 BufferString << *(it+0);
837 outputDebugFile <<
"X0 " << BufferString.str().c_str() << endl;
838 BufferString.str(
"");
840 BufferString << *(it+1);
841 outputDebugFile <<
"Y0 " << BufferString.str().c_str() << endl;
842 BufferString.str(
"");
844 BufferString << *(it+2);
845 outputDebugFile <<
"Z0 " << BufferString.str().c_str() << endl;
846 BufferString.str(
"");
848 BufferString << *(it+5);
849 outputDebugFile <<
"sigmaZ0 " << BufferString.str().c_str() << endl;
850 BufferString.str(
"");
852 BufferString << *(it+6);
853 outputDebugFile <<
"dxdz " << BufferString.str().c_str() << endl;
854 BufferString.str(
"");
856 BufferString << *(it+7);
857 outputDebugFile <<
"dydz " << BufferString.str().c_str() << endl;
858 BufferString.str(
"");
860 BufferString << *(it+3);
861 outputDebugFile <<
"BeamWidthX " << BufferString.str().c_str() << endl;
862 BufferString.str(
"");
864 BufferString << *(it+4);
865 outputDebugFile <<
"BeamWidthY " << BufferString.str().c_str() << endl;
866 BufferString.str(
"");
868 outputDebugFile <<
"Cov(0,j) " << *(it+8) <<
" 0 0 0 0 0 0" << endl;
869 outputDebugFile <<
"Cov(1,j) 0 " << *(it+9) <<
" 0 0 0 0 0" << endl;
870 outputDebugFile <<
"Cov(2,j) 0 0 " << *(it+10) <<
" 0 0 0 0" << endl;
871 outputDebugFile <<
"Cov(3,j) 0 0 0 " << *(it+13) <<
" 0 0 0" << endl;
872 outputDebugFile <<
"Cov(4,j) 0 0 0 0 " << *(it+14) <<
" 0 0" << endl;
873 outputDebugFile <<
"Cov(5,j) 0 0 0 0 0 " << *(it+15) <<
" 0" << endl;
874 outputDebugFile <<
"Cov(6,j) 0 0 0 0 0 0 " << ((*(it+11)) + (*(it+12)) + 2.*
std::sqrt((*(it+11))*(*(it+12)))) / 4. << endl;
876 outputDebugFile <<
"EmittanceX 0" << endl;
877 outputDebugFile <<
"EmittanceY 0" << endl;
878 outputDebugFile <<
"BetaStar 0" << endl;
879 outputDebugFile <<
"events 0" << endl;
880 outputDebugFile <<
"meanPV 0" << endl;
881 outputDebugFile <<
"meanErrPV 0" << endl;
882 outputDebugFile <<
"rmsPV 0" << endl;
883 outputDebugFile <<
"rmsErrPV 0" << endl;
884 outputDebugFile <<
"maxPV 0" << endl;
885 outputDebugFile <<
"nPV " << counterVx << endl;
887 outputDebugFile <<
"\n" <<
"Used vertices: " << counterVx <<
"\n" << endl;
894 cout <<
"var x --> " << fitResults[0] <<
" +/- " << fitResults[0+nParams] << endl;
895 cout <<
"var y --> " << fitResults[1] <<
" +/- " << fitResults[1+nParams] << endl;
896 cout <<
"var z --> " << fitResults[2] <<
" +/- " << fitResults[2+nParams] << endl;
897 cout <<
"cov xy --> " << fitResults[3] <<
" +/- " << fitResults[3+nParams] << endl;
898 cout <<
"dydz --> " << fitResults[4] <<
" +/- " << fitResults[4+nParams] << endl;
899 cout <<
"dxdz --> " << fitResults[5] <<
" +/- " << fitResults[5+nParams] << endl;
900 cout <<
"mean x --> " << fitResults[6] <<
" +/- " << fitResults[6+nParams] << endl;
901 cout <<
"mean y --> " << fitResults[7] <<
" +/- " << fitResults[7+nParams] << endl;
902 cout <<
"mean z --> " << fitResults[8] <<
" +/- " << fitResults[8+nParams] << endl;
909 if ((lumiCounter == 0) && (lumiBlock.
luminosityBlock() > lastLumiOfFit))
915 else if ((lumiCounter != 0) && (lumiBlock.
luminosityBlock() >= (beginLumiOfFit+lumiCounter))) lumiCounter++;
916 else reset(
"scratch");
922 stringstream histTitle;
923 double minXfit, maxXfit;
926 if ((nLumiFit != 0) && (lumiCounter%nLumiFit == 0) && (beginTimeOfFit != 0) && (
runNumber != 0))
930 lastLumiOfFit = endLumiOfFit;
933 hitCounter->getTH1()->SetBinContent(lastLumiOfFit, (
double)totalHits);
934 hitCounter->getTH1()->SetBinError(lastLumiOfFit, (totalHits != 0 ? 1. : 0.));
936 if (dataFromFit ==
true)
938 vector<double> fitResults;
940 fitResults.push_back(Vx_X->getTH1()->GetRMS()*Vx_X->getTH1()->GetRMS());
941 fitResults.push_back(Vx_Y->getTH1()->GetRMS()*Vx_Y->getTH1()->GetRMS());
942 fitResults.push_back(Vx_Z->getTH1()->GetRMS()*Vx_Z->getTH1()->GetRMS());
943 fitResults.push_back(0.0);
944 fitResults.push_back(0.0);
945 fitResults.push_back(0.0);
946 fitResults.push_back(Vx_X->getTH1()->GetMean());
947 fitResults.push_back(Vx_Y->getTH1()->GetMean());
948 fitResults.push_back(Vx_Z->getTH1()->GetMean());
949 for (
unsigned int i = 0;
i < nParams;
i++) fitResults.push_back(0.0);
951 if (internalDebug ==
true)
953 cout <<
"[Vx3DHLTAnalyzer]::\t@@@ Beam Spot parameters - prefit @@@" << endl;
955 printFitParams(fitResults);
958 cout <<
"BeginTimeOfFit " <<
formatTime(beginTimeOfFit >> 32) <<
" " << (beginTimeOfFit >> 32) << endl;
959 cout <<
"EndTimeOfFit " <<
formatTime(endTimeOfFit >> 32) <<
" " << (endTimeOfFit >> 32) << endl;
960 cout <<
"LumiRange " << beginLumiOfFit <<
" - " << endLumiOfFit << endl;
963 goodData = MyFit(&fitResults);
965 if (internalDebug ==
true)
967 cout <<
"[Vx3DHLTAnalyzer]::\t@@@ Beam Spot parameters - postfit @@@" << endl;
969 printFitParams(fitResults);
971 cout <<
"goodData --> " << goodData << endl;
972 cout <<
"Used vertices --> " << counterVx << endl;
977 vals.push_back(fitResults[6]);
978 vals.push_back(fitResults[7]);
979 vals.push_back(fitResults[8]);
980 vals.push_back(
std::sqrt(std::fabs(fitResults[0])));
981 vals.push_back(
std::sqrt(std::fabs(fitResults[1])));
982 vals.push_back(
std::sqrt(std::fabs(fitResults[2])));
983 vals.push_back(fitResults[5]);
984 vals.push_back(fitResults[4]);
986 vals.push_back(
std::pow(fitResults[6+nParams],2.));
987 vals.push_back(
std::pow(fitResults[7+nParams],2.));
988 vals.push_back(
std::pow(fitResults[8+nParams],2.));
989 vals.push_back(
std::pow(std::fabs(fitResults[0+nParams]) / (2.*
std::sqrt(std::fabs(fitResults[0]))),2.));
990 vals.push_back(
std::pow(std::fabs(fitResults[1+nParams]) / (2.*
std::sqrt(std::fabs(fitResults[1]))),2.));
991 vals.push_back(
std::pow(std::fabs(fitResults[2+nParams]) / (2.*
std::sqrt(std::fabs(fitResults[2]))),2.));
992 vals.push_back(
std::pow(fitResults[5+nParams],2.));
993 vals.push_back(
std::pow(fitResults[4+nParams],2.));
995 else for (
unsigned int i = 0;
i < (nParams-1)*2;
i++) vals.push_back(0.0);
1001 counterVx = Vx_X->getTH1F()->GetEntries();
1003 if (Vx_X->getTH1F()->GetEntries() >= minNentries)
1007 vals.push_back(Vx_X->getTH1F()->GetMean());
1008 vals.push_back(Vx_Y->getTH1F()->GetMean());
1009 vals.push_back(Vx_Z->getTH1F()->GetMean());
1010 vals.push_back(Vx_X->getTH1F()->GetRMS());
1011 vals.push_back(Vx_Y->getTH1F()->GetRMS());
1012 vals.push_back(Vx_Z->getTH1F()->GetRMS());
1013 vals.push_back(0.0);
1014 vals.push_back(0.0);
1016 vals.push_back(
std::pow(Vx_X->getTH1F()->GetMeanError(),2.));
1017 vals.push_back(
std::pow(Vx_Y->getTH1F()->GetMeanError(),2.));
1018 vals.push_back(
std::pow(Vx_Z->getTH1F()->GetMeanError(),2.));
1019 vals.push_back(
std::pow(Vx_X->getTH1F()->GetRMSError(),2.));
1020 vals.push_back(
std::pow(Vx_Y->getTH1F()->GetRMSError(),2.));
1021 vals.push_back(
std::pow(Vx_Z->getTH1F()->GetRMSError(),2.));
1022 vals.push_back(0.0);
1023 vals.push_back(0.0);
1028 for (
unsigned int i = 0;
i < (nParams-1)*2;
i++) vals.push_back(0.0);
1051 writeToFile(&vals, beginTimeOfFit, endTimeOfFit, beginLumiOfFit, endLumiOfFit, 3);
1052 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tUsed vertices: " << counterVx << endl;
1054 statusCounter->getTH1()->SetBinContent(lastLumiOfFit, (
double)goodData);
1055 statusCounter->getTH1()->SetBinError(lastLumiOfFit, 1
e-3);
1058 if (goodData == 0)
reset(
"fit");
1059 else if (lumiCounter >= maxLumiIntegration)
1065 for (
int i = 0;
i < Vx_X_Fit->getTH1()->GetNbinsX();
i++)
1067 Vx_X_Fit->getTH1()->SetBinContent(
i+1,Vx_X_Fit->getTH1()->GetBinContent(
i+1) + Vx_X->getTH1()->GetBinContent(
i+1));
1068 Vx_X_Fit->getTH1()->SetBinError(
i+1,
sqrt(Vx_X_Fit->getTH1()->GetBinContent(
i+1)));
1071 for (
int i = 0;
i < Vx_Y_Fit->getTH1()->GetNbinsX();
i++)
1073 Vx_Y_Fit->getTH1()->SetBinContent(
i+1,Vx_Y_Fit->getTH1()->GetBinContent(
i+1) + Vx_Y->getTH1()->GetBinContent(
i+1));
1074 Vx_Y_Fit->getTH1()->SetBinError(
i+1,
sqrt(Vx_Y_Fit->getTH1()->GetBinContent(
i+1)));
1077 for (
int i = 0;
i < Vx_Z_Fit->getTH1()->GetNbinsX();
i++)
1079 Vx_Z_Fit->getTH1()->SetBinContent(
i+1,Vx_Z_Fit->getTH1()->GetBinContent(
i+1) + Vx_Z->getTH1()->GetBinContent(
i+1));
1080 Vx_Z_Fit->getTH1()->SetBinError(
i+1,
sqrt(Vx_Z_Fit->getTH1()->GetBinContent(
i+1)));
1088 histTitle <<
"Ongoing: fitted lumis " << beginLumiOfFit <<
" - " << endLumiOfFit;
1093 if (goodData == -2) histTitle <<
"Ongoing: not enough evts (" << lumiCounter <<
" - " << maxLumiIntegration <<
" lumis)";
1094 else histTitle <<
"Ongoing: temporary problems (" << lumiCounter <<
" - " << maxLumiIntegration <<
" lumis)";
1096 if (lumiCounter >= maxLumiIntegration)
1098 statusCounter->getTH1()->SetBinContent(lastLumiOfFit, -5);
1099 statusCounter->getTH1()->SetBinError(lastLumiOfFit, 1
e-3);
1101 else reset(
"hitCounter");
1104 reportSummary->Fill((numberFits != 0 ? ((
double)numberGoodFits) / ((
double)numberFits) : -1));
1105 reportSummaryMap->getTH1()->SetBinContent(1, 1, (numberFits != 0 ? ((
double)numberGoodFits) / ((
double)numberFits) : -1));
1107 fitResults->setAxisTitle(histTitle.str(), 1);
1109 fitResults->setBinContent(1, 9, vals[0]);
1110 fitResults->setBinContent(1, 8, vals[1]);
1111 fitResults->setBinContent(1, 7, vals[2]);
1112 fitResults->setBinContent(1, 6, vals[3]);
1113 fitResults->setBinContent(1, 5, vals[4]);
1114 fitResults->setBinContent(1, 4, vals[5]);
1115 fitResults->setBinContent(1, 3, vals[6]);
1116 fitResults->setBinContent(1, 2, vals[7]);
1117 fitResults->setBinContent(1, 1, counterVx);
1119 fitResults->setBinContent(2, 9,
std::sqrt(vals[8]));
1120 fitResults->setBinContent(2, 8,
std::sqrt(vals[9]));
1121 fitResults->setBinContent(2, 7,
std::sqrt(vals[10]));
1122 fitResults->setBinContent(2, 6,
std::sqrt(vals[11]));
1123 fitResults->setBinContent(2, 5,
std::sqrt(vals[12]));
1124 fitResults->setBinContent(2, 4,
std::sqrt(vals[13]));
1125 fitResults->setBinContent(2, 3,
std::sqrt(vals[14]));
1126 fitResults->setBinContent(2, 2,
std::sqrt(vals[15]));
1127 fitResults->setBinContent(2, 1,
std::sqrt(counterVx));
1130 TF1* myLinFit =
new TF1(
"myLinFit",
"[0] + [1]*x", mXlumi->getTH1()->GetXaxis()->GetXmin(), mXlumi->getTH1()->GetXaxis()->GetXmax());
1131 myLinFit->SetLineColor(2);
1132 myLinFit->SetLineWidth(2);
1133 myLinFit->SetParName(0,
"Inter.");
1134 myLinFit->SetParName(1,
"Slope");
1136 mXlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[0]);
1137 mXlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[8]));
1138 myLinFit->SetParameter(0, mXlumi->getTH1()->GetMean(2));
1139 myLinFit->SetParameter(1, 0.0);
1140 mXlumi->getTH1()->Fit(myLinFit,
"QR");
1142 mYlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[1]);
1143 mYlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[9]));
1144 myLinFit->SetParameter(0, mYlumi->getTH1()->GetMean(2));
1145 myLinFit->SetParameter(1, 0.0);
1146 mYlumi->getTH1()->Fit(myLinFit,
"QR");
1148 mZlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[2]);
1149 mZlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[10]));
1150 myLinFit->SetParameter(0, mZlumi->getTH1()->GetMean(2));
1151 myLinFit->SetParameter(1, 0.0);
1152 mZlumi->getTH1()->Fit(myLinFit,
"QR");
1154 sXlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[3]);
1155 sXlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[11]));
1156 myLinFit->SetParameter(0, sXlumi->getTH1()->GetMean(2));
1157 myLinFit->SetParameter(1, 0.0);
1158 sXlumi->getTH1()->Fit(myLinFit,
"QR");
1160 sYlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[4]);
1161 sYlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[12]));
1162 myLinFit->SetParameter(0, sYlumi->getTH1()->GetMean(2));
1163 myLinFit->SetParameter(1, 0.0);
1164 sYlumi->getTH1()->Fit(myLinFit,
"QR");
1166 sZlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[5]);
1167 sZlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[13]));
1168 myLinFit->SetParameter(0, sZlumi->getTH1()->GetMean(2));
1169 myLinFit->SetParameter(1, 0.0);
1170 sZlumi->getTH1()->Fit(myLinFit,
"QR");
1172 dxdzlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[6]);
1173 dxdzlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[14]));
1174 myLinFit->SetParameter(0, dxdzlumi->getTH1()->GetMean(2));
1175 myLinFit->SetParameter(1, 0.0);
1176 dxdzlumi->getTH1()->Fit(myLinFit,
"QR");
1178 dydzlumi->getTH1()->SetBinContent(lastLumiOfFit, vals[7]);
1179 dydzlumi->getTH1()->SetBinError(lastLumiOfFit,
std::sqrt(vals[15]));
1180 myLinFit->SetParameter(0, dydzlumi->getTH1()->GetMean(2));
1181 myLinFit->SetParameter(1, 0.0);
1182 dydzlumi->getTH1()->Fit(myLinFit,
"QR");
1184 myLinFit->SetParameter(0, hitCounter->getTH1()->GetMean(2));
1185 myLinFit->SetParameter(1, 0.0);
1186 hitCounter->getTH1()->Fit(myLinFit,
"QR");
1188 goodVxCounter->getTH1()->SetBinContent(lastLumiOfFit, (
double)counterVx);
1189 goodVxCounter->getTH1()->SetBinError(lastLumiOfFit, (counterVx != 0 ? 1. : 0.));
1190 myLinFit->SetParameter(0, goodVxCounter->getTH1()->GetMean(2));
1191 myLinFit->SetParameter(1, 0.0);
1192 goodVxCounter->getTH1()->Fit(myLinFit,
"QR");
1198 TF1* myGaussFit =
new TF1(
"myGaussFit",
"[0]*exp(-(x-[1])*(x-[1])/(2*[2]*[2]))", Vx_Z_Fit->getTH1()->GetXaxis()->GetXmin(), Vx_Z_Fit->getTH1()->GetXaxis()->GetXmax());
1199 myGaussFit->SetLineColor(2);
1200 myGaussFit->SetLineWidth(2);
1201 myGaussFit->SetParName(0,
"Ampl.");
1202 myGaussFit->SetParName(1,
"#mu");
1203 myGaussFit->SetParName(2,
"#sigma");
1205 myGaussFit->SetParameter(0, Vx_X_Fit->getTH1()->GetMaximum());
1206 myGaussFit->SetParameter(1, Vx_X_Fit->getTH1()->GetMean());
1207 myGaussFit->SetParameter(2, Vx_X_Fit->getTH1()->GetRMS());
1208 minXfit = Vx_X_Fit->getTH1()->GetBinLowEdge(1);
1209 for (
int i = 0;
i < Vx_X_Fit->getTH1()->GetNbinsX();
i++)
1211 if (Vx_X_Fit->getTH1()->GetBinContent(
i+1) > 0)
1213 minXfit = Vx_X_Fit->getTH1()->GetBinLowEdge(
i+1);
1217 maxXfit = Vx_X_Fit->getTH1()->GetBinLowEdge(Vx_X_Fit->getTH1()->GetNbinsX());
1218 for (
int i = Vx_X_Fit->getTH1()->GetNbinsX();
i > 0;
i--)
1220 if (Vx_X_Fit->getTH1()->GetBinContent(
i) > 0)
1222 maxXfit = Vx_X_Fit->getTH1()->GetBinLowEdge(
i);
1226 myGaussFit->SetRange(minXfit - (maxXfit-minXfit)/2.,maxXfit + (maxXfit-minXfit)/2.);
1227 Vx_X_Fit->getTH1()->Fit(myGaussFit,
"QRL");
1229 myGaussFit->SetParameter(0, Vx_Y_Fit->getTH1()->GetMaximum());
1230 myGaussFit->SetParameter(1, Vx_Y_Fit->getTH1()->GetMean());
1231 myGaussFit->SetParameter(2, Vx_Y_Fit->getTH1()->GetRMS());
1232 minXfit = Vx_Y_Fit->getTH1()->GetBinLowEdge(1);
1233 for (
int i = 0;
i < Vx_Y_Fit->getTH1()->GetNbinsX();
i++)
1235 if (Vx_Y_Fit->getTH1()->GetBinContent(
i+1) > 0)
1237 minXfit = Vx_Y_Fit->getTH1()->GetBinLowEdge(
i+1);
1241 maxXfit = Vx_Y_Fit->getTH1()->GetBinLowEdge(Vx_Y_Fit->getTH1()->GetNbinsX());
1242 for (
int i = Vx_Y_Fit->getTH1()->GetNbinsX();
i > 0;
i--)
1244 if (Vx_Y_Fit->getTH1()->GetBinContent(
i) > 0)
1246 maxXfit = Vx_Y_Fit->getTH1()->GetBinLowEdge(
i);
1250 myGaussFit->SetRange(minXfit - (maxXfit-minXfit)/2.,maxXfit + (maxXfit-minXfit)/2.);
1251 Vx_Y_Fit->getTH1()->Fit(myGaussFit,
"QRL");
1253 myGaussFit->SetParameter(0, Vx_Z_Fit->getTH1()->GetMaximum());
1254 myGaussFit->SetParameter(1, Vx_Z_Fit->getTH1()->GetMean());
1255 myGaussFit->SetParameter(2, Vx_Z_Fit->getTH1()->GetRMS());
1256 minXfit = Vx_Z_Fit->getTH1()->GetBinLowEdge(1);
1257 for (
int i = 0;
i < Vx_Z_Fit->getTH1()->GetNbinsX();
i++)
1259 if (Vx_Z_Fit->getTH1()->GetBinContent(
i+1) > 0)
1261 minXfit = Vx_Z_Fit->getTH1()->GetBinLowEdge(
i+1);
1265 maxXfit = Vx_Z_Fit->getTH1()->GetBinLowEdge(Vx_Z_Fit->getTH1()->GetNbinsX());
1266 for (
int i = Vx_Z_Fit->getTH1()->GetNbinsX();
i > 0;
i--)
1268 if (Vx_Z_Fit->getTH1()->GetBinContent(
i) > 0)
1270 maxXfit = Vx_Z_Fit->getTH1()->GetBinLowEdge(
i);
1274 myGaussFit->SetRange(minXfit - (maxXfit-minXfit)/2.,maxXfit + (maxXfit-minXfit)/2.);
1275 Vx_Z_Fit->getTH1()->Fit(myGaussFit,
"QRL");
1279 else if ((nLumiFit != 0) && (lumiCounter%nLumiFit != 0) && (beginTimeOfFit != 0) && (
runNumber != 0))
1281 histTitle <<
"Ongoing: accumulating evts (" << lumiCounter%nLumiFit <<
" - " << nLumiFit <<
" in " << lumiCounter <<
" - " << maxLumiIntegration <<
" lumis)";
1282 fitResults->setAxisTitle(histTitle.str(), 1);
1283 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true))
1285 outputDebugFile <<
"\n" <<
"Runnumber " <<
runNumber << endl;
1286 outputDebugFile <<
"BeginTimeOfFit " <<
formatTime(beginTimeOfFit >> 32) <<
" " << (beginTimeOfFit >> 32) << endl;
1287 outputDebugFile <<
"BeginLumiRange " << beginLumiOfFit << endl;
1288 outputDebugFile << histTitle.str().c_str() <<
"\n" << endl;
1291 else if ((nLumiFit == 0) || (beginTimeOfFit == 0) || (
runNumber == 0))
1293 histTitle <<
"Ongoing: no ongoing fits";
1294 fitResults->setAxisTitle(histTitle.str(), 1);
1295 if ((debugMode ==
true) && (outputDebugFile.is_open() ==
true)) outputDebugFile << histTitle.str().c_str() <<
"\n" << endl;
1299 hitCounter->getTH1()->SetBinContent(endLumiOfFit, (
double)totalHits);
1300 hitCounter->getTH1()->SetBinError(endLumiOfFit,
std::sqrt((
double)totalHits));
1305 if (internalDebug ==
true)
cout <<
"[Vx3DHLTAnalyzer]::\tHistogram title: " << histTitle.str() << endl;
1313 Vx_X = ibooker.
book1D(
"F - vertex x",
"Primary Vertex X Distribution",
int(rint(xRange/xStep)), -xRange/2., xRange/2.);
1314 Vx_Y = ibooker.
book1D(
"F - vertex y",
"Primary Vertex Y Distribution",
int(rint(yRange/yStep)), -yRange/2., yRange/2.);
1315 Vx_Z = ibooker.
book1D(
"F - vertex z",
"Primary Vertex Z Distribution",
int(rint(zRange/
zStep)), -zRange/2., zRange/2.);
1317 Vx_X->setAxisTitle(
"Entries [#]",2);
1318 Vx_Y->setAxisTitle(
"Primary Vertices Y [cm]",1);
1319 Vx_Y->setAxisTitle(
"Entries [#]",2);
1320 Vx_Z->setAxisTitle(
"Primary Vertices Z [cm]",1);
1321 Vx_Z->setAxisTitle(
"Entries [#]",2);
1323 Vx_X_Fit = ibooker.
book1D(
"G - vertex x fit",
"Primary Vertex X Distribution (For Fit)",
int(rint(xRange/xStep)), -xRange/2., xRange/2.);
1324 Vx_Y_Fit = ibooker.
book1D(
"G - vertex y fit",
"Primary Vertex Y Distribution (For Fit)",
int(rint(yRange/yStep)), -yRange/2., yRange/2.);
1325 Vx_Z_Fit = ibooker.
book1D(
"G - vertex z fit",
"Primary Vertex Z Distribution (For Fit)",
int(rint(zRange/
zStep)), -zRange/2., zRange/2.);
1327 Vx_X_Fit->setAxisTitle(
"Entries [#]",2);
1328 Vx_Y_Fit->setAxisTitle(
"Primary Vertices Y [cm]",1);
1329 Vx_Y_Fit->setAxisTitle(
"Entries [#]",2);
1330 Vx_Z_Fit->setAxisTitle(
"Primary Vertices Z [cm]",1);
1331 Vx_Z_Fit->setAxisTitle(
"Entries [#]",2);
1333 Vx_X_Cum = ibooker.
book1D(
"I - vertex x cum",
"Primary Vertex X Distribution (Cumulative)",
int(rint(xRange/xStep)), -xRange/2., xRange/2.);
1334 Vx_Y_Cum = ibooker.
book1D(
"I - vertex y cum",
"Primary Vertex Y Distribution (Cumulative)",
int(rint(yRange/yStep)), -yRange/2., yRange/2.);
1335 Vx_Z_Cum = ibooker.
book1D(
"I - vertex z cum",
"Primary Vertex Z Distribution (Cumulative)",
int(rint(zRange/
zStep)), -zRange/2., zRange/2.);
1337 Vx_X_Cum->setAxisTitle(
"Entries [#]",2);
1338 Vx_Y_Cum->setAxisTitle(
"Primary Vertices Y [cm]",1);
1339 Vx_Y_Cum->setAxisTitle(
"Entries [#]",2);
1340 Vx_Z_Cum->setAxisTitle(
"Primary Vertices Z [cm]",1);
1341 Vx_Z_Cum->setAxisTitle(
"Entries [#]",2);
1343 mXlumi = ibooker.
book1D(
"B - muX vs lumi",
"#mu_{x} vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1344 mYlumi = ibooker.
book1D(
"B - muY vs lumi",
"#mu_{y} vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1345 mZlumi = ibooker.
book1D(
"B - muZ vs lumi",
"#mu_{z} vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1347 mXlumi->setAxisTitle(
"#mu_{x} [cm]",2);
1348 mXlumi->getTH1()->SetOption(
"E1");
1349 mYlumi->setAxisTitle(
"Lumisection [#]",1);
1350 mYlumi->setAxisTitle(
"#mu_{y} [cm]",2);
1351 mYlumi->getTH1()->SetOption(
"E1");
1352 mZlumi->setAxisTitle(
"Lumisection [#]",1);
1353 mZlumi->setAxisTitle(
"#mu_{z} [cm]",2);
1354 mZlumi->getTH1()->SetOption(
"E1");
1356 sXlumi = ibooker.
book1D(
"C - sigmaX vs lumi",
"#sigma_{x} vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1357 sYlumi = ibooker.
book1D(
"C - sigmaY vs lumi",
"#sigma_{y} vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1358 sZlumi = ibooker.
book1D(
"C - sigmaZ vs lumi",
"#sigma_{z} vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1360 sXlumi->setAxisTitle(
"#sigma_{x} [cm]",2);
1361 sXlumi->getTH1()->SetOption(
"E1");
1362 sYlumi->setAxisTitle(
"Lumisection [#]",1);
1363 sYlumi->setAxisTitle(
"#sigma_{y} [cm]",2);
1364 sYlumi->getTH1()->SetOption(
"E1");
1365 sZlumi->setAxisTitle(
"Lumisection [#]",1);
1366 sZlumi->setAxisTitle(
"#sigma_{z} [cm]",2);
1367 sZlumi->getTH1()->SetOption(
"E1");
1369 dxdzlumi = ibooker.
book1D(
"D - dxdz vs lumi",
"dX/dZ vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1370 dydzlumi = ibooker.
book1D(
"D - dydz vs lumi",
"dY/dZ vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1372 dxdzlumi->setAxisTitle(
"dX/dZ [rad]",2);
1373 dxdzlumi->getTH1()->SetOption(
"E1");
1374 dydzlumi->setAxisTitle(
"Lumisection [#]",1);
1375 dydzlumi->setAxisTitle(
"dY/dZ [rad]",2);
1376 dydzlumi->getTH1()->SetOption(
"E1");
1378 Vx_ZX = ibooker.
book2D(
"E - vertex zx",
"Primary Vertex ZX Distribution",
int(rint(zRange/
zStep)), -zRange/2., zRange/2.,
int(rint(xRange/xStep)), -xRange/2., xRange/2.);
1379 Vx_ZY = ibooker.
book2D(
"E - vertex zy",
"Primary Vertex ZY Distribution",
int(rint(zRange/
zStep)), -zRange/2., zRange/2.,
int(rint(yRange/yStep)), -yRange/2., yRange/2.);
1380 Vx_XY = ibooker.
book2D(
"E - vertex xy",
"Primary Vertex XY Distribution",
int(rint(xRange/xStep)), -xRange/2., xRange/2.,
int(rint(yRange/yStep)), -yRange/2., yRange/2.);
1382 Vx_ZX->setAxisTitle(
"Primary Vertices X [cm]",2);
1383 Vx_ZX->setAxisTitle(
"Entries [#]",3);
1384 Vx_ZY->setAxisTitle(
"Primary Vertices Z [cm]",1);
1385 Vx_ZY->setAxisTitle(
"Primary Vertices Y [cm]",2);
1386 Vx_ZY->setAxisTitle(
"Entries [#]",3);
1387 Vx_XY->setAxisTitle(
"Primary Vertices X [cm]",1);
1388 Vx_XY->setAxisTitle(
"Primary Vertices Y [cm]",2);
1389 Vx_XY->setAxisTitle(
"Entries [#]",3);
1391 Vx_ZX_Cum = ibooker.
book2D(
"H - vertex zx cum",
"Primary Vertex ZX Distribution (Cumulative)",
int(rint(zRange/
zStep)), -zRange/2., zRange/2.,
int(rint(xRange/xStep)), -xRange/2., xRange/2.);
1392 Vx_ZY_Cum = ibooker.
book2D(
"H - vertex zy cum",
"Primary Vertex ZY Distribution (Cumulative)",
int(rint(zRange/
zStep)), -zRange/2., zRange/2.,
int(rint(yRange/yStep)), -yRange/2., yRange/2.);
1393 Vx_XY_Cum = ibooker.
book2D(
"H - vertex xy cum",
"Primary Vertex XY Distribution (Cumulative)",
int(rint(xRange/xStep)), -xRange/2., xRange/2.,
int(rint(yRange/yStep)), -yRange/2., yRange/2.);
1395 Vx_ZX_Cum->setAxisTitle(
"Primary Vertices X [cm]",2);
1396 Vx_ZX_Cum->setAxisTitle(
"Entries [#]",3);
1397 Vx_ZY_Cum->setAxisTitle(
"Primary Vertices Z [cm]",1);
1398 Vx_ZY_Cum->setAxisTitle(
"Primary Vertices Y [cm]",2);
1399 Vx_ZY_Cum->setAxisTitle(
"Entries [#]",3);
1400 Vx_XY_Cum->setAxisTitle(
"Primary Vertices X [cm]",1);
1401 Vx_XY_Cum->setAxisTitle(
"Primary Vertices Y [cm]",2);
1402 Vx_XY_Cum->setAxisTitle(
"Entries [#]",3);
1404 hitCounter = ibooker.
book1D(
"J - pixelHits vs lumi",
"# Pixel-Hits vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1406 hitCounter->setAxisTitle(
"Pixel-Hits [#]",2);
1407 hitCounter->getTH1()->SetOption(
"E1");
1409 goodVxCounter = ibooker.
book1D(
"K - good vertices vs lumi",
"# Good vertices vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1411 goodVxCounter->setAxisTitle(
"Good vertices [#]",2);
1412 goodVxCounter->getTH1()->SetOption(
"E1");
1414 statusCounter = ibooker.
book1D(
"L - status vs lumi",
"App. Status vs. Lumisection", nLumiXaxisRange, 0.5, ((
double)nLumiXaxisRange)+0.5);
1416 statusCounter->getTH1()->SetOption(
"E1");
1417 statusCounter->getTH1()->GetYaxis()->Set(11,-5.5,5.5);
1418 statusCounter->getTH1()->GetYaxis()->SetBinLabel(1,
"Max Lumi.");
1419 statusCounter->getTH1()->GetYaxis()->SetBinLabel(2,
"Neg. det.");
1420 statusCounter->getTH1()->GetYaxis()->SetBinLabel(3,
"Infinite err.");
1421 statusCounter->getTH1()->GetYaxis()->SetBinLabel(4,
"No vtx.");
1422 statusCounter->getTH1()->GetYaxis()->SetBinLabel(5,
"Infinite EDM");
1423 statusCounter->getTH1()->GetYaxis()->SetBinLabel(6,
"OK");
1424 statusCounter->getTH1()->GetYaxis()->SetBinLabel(7,
"MINUIT stat.");
1425 statusCounter->getTH1()->GetYaxis()->SetBinLabel(8,
"MINUIT stat.");
1426 statusCounter->getTH1()->GetYaxis()->SetBinLabel(9,
"MINUIT stat.");
1427 statusCounter->getTH1()->GetYaxis()->SetBinLabel(10,
"MINUIT stat.");
1428 statusCounter->getTH1()->GetYaxis()->SetBinLabel(11,
"MINUIT stat.");
1430 fitResults = ibooker.
book2D(
"A - fit results",
"Results of Beam Spot Fit", 2, 0., 2., 9, 0., 9.);
1432 fitResults->setBinLabel(9,
"X[cm]", 2);
1433 fitResults->setBinLabel(8,
"Y[cm]", 2);
1434 fitResults->setBinLabel(7,
"Z[cm]", 2);
1435 fitResults->setBinLabel(6,
"#sigma_{X}[cm]", 2);
1436 fitResults->setBinLabel(5,
"#sigma_{Y}[cm]", 2);
1437 fitResults->setBinLabel(4,
"#sigma_{Z}[cm]", 2);
1438 fitResults->setBinLabel(3,
"#frac{dX}{dZ}[rad]", 2);
1439 fitResults->setBinLabel(2,
"#frac{dY}{dZ}[rad]", 2);
1440 fitResults->setBinLabel(1,
"Vtx[#]", 2);
1441 fitResults->setBinLabel(1,
"Value", 1);
1442 fitResults->setBinLabel(2,
"Error (stat)", 1);
1443 fitResults->getTH1()->SetOption(
"text");
1448 reportSummary = ibooker.
bookFloat(
"reportSummary");
1449 reportSummary->
Fill(-1);
1450 reportSummaryMap = ibooker.
book2D(
"reportSummaryMap",
"Pixel-Vertices Beam Spot: % Good Fits", 1, 0., 1., 1, 0., 1.);
1451 reportSummaryMap->
getTH1()->SetBinContent(1, 1, -1);
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
const_iterator end(bool update=false) const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
int MyFit(std::vector< double > *vals)
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
void endLuminosityBlock(const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &iSetup) override
data_type const * const_iterator
Timestamp const & beginTime() const
unsigned int HitCounter(const edm::Event &iEvent)
void beginLuminosityBlock(const edm::LuminosityBlock &lumiBlock, const edm::EventSetup &iSetup) override
double Gauss3DFunc(const double *par)
void writeToFile(std::vector< double > *vals, edm::TimeValue_t BeginTimeOfFit, edm::TimeValue_t EndTimeOfFit, unsigned int BeginLumiOfFit, unsigned int EndLumiOfFit, int dataType)
LuminosityBlockNumber_t luminosityBlock() const
static ELstring formatTime(const time_t t)
Vx3DHLTAnalyzer(const edm::ParameterSet &)
std::string formatTime(const time_t &t)
Timestamp const & endTime() const
MonitorElement * book1D(Args &&...args)
LuminosityBlock const & getLuminosityBlock() const
void reset(std::string ResetType)
unsigned long long TimeValue_t
void setCurrentFolder(const std::string &fullpath)
MonitorElement * book2D(Args &&...args)
~Vx3DHLTAnalyzer() override
std::vector< std::vector< double > > tmp
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void printFitParams(const std::vector< double > &fitResults)
static std::atomic< unsigned int > counter
MonitorElement * bookFloat(Args &&...args)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void reset(double vett[256])
TimeValue_t value() const
Power< A, B >::type pow(const A &a, const B &b)
const_iterator begin(bool update=false) const