CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PVFitter.cc
Go to the documentation of this file.
1 
14 
20 
23 
30 
33 
34 #include "Minuit2/FCNBase.h"
35 #include "Minuit2/FunctionMinimum.h"
36 #include "Minuit2/MnMigrad.h"
37 #include "Minuit2/MnPrint.h" // Defines operator<< for cout << ierr (Dario)
38 #include "TF1.h"
39 
40 #include <iostream> // Dario
41 using namespace std ; // Dario
42 // ----------------------------------------------------------------------
43 // Useful function:
44 // ----------------------------------------------------------------------
45 
46 // static char * formatTime(const std::time_t & t) {
47 // struct std::tm * ptm;
48 // ptm = gmtime(&t);
49 // static char ts[32];
50 // strftime(ts,sizeof(ts),"%Y.%m.%d %H:%M:%S %Z",ptm);
51 // return ts;
52 // }
54  edm::ConsumesCollector &&iColl)
55  : ftree_(0)
56 {
57  initialize(iConfig, iColl);
58 }
59 
62  :ftree_(0)
63 {
64  initialize(iConfig, iColl);
65 }
66 
69 {
70  debug_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("Debug");
72  iConfig.getParameter<edm::ParameterSet>("PVFitter")
73  .getUntrackedParameter<edm::InputTag>("VertexCollection",
74  edm::InputTag("offlinePrimaryVertices")));
75  do3DFit_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("Apply3DFit");
76  //writeTxt_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("WriteAscii");
77  //outputTxt_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<std::string>("AsciiFileName");
78 
79  maxNrVertices_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<unsigned int>("maxNrStoredVertices");
80  minNrVertices_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<unsigned int>("minNrVerticesForFit");
81  minVtxNdf_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("minVertexNdf");
82  maxVtxNormChi2_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("maxVertexNormChi2");
83  minVtxTracks_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<unsigned int>("minVertexNTracks");
84  minVtxWgt_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("minVertexMeanWeight");
85  maxVtxR_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("maxVertexR");
86  maxVtxZ_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("maxVertexZ");
87  errorScale_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("errorScale");
88  sigmaCut_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("nSigmaCut");
89  fFitPerBunchCrossing=iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("FitPerBunchCrossing");
90 
91  // preset quality cut to "infinite"
92  dynamicQualityCut_ = 1.e30;
93 
94  hPVx = new TH2F("hPVx","PVx vs PVz distribution",200,-maxVtxR_, maxVtxR_, 200, -maxVtxZ_, maxVtxZ_);
95  hPVy = new TH2F("hPVy","PVy vs PVz distribution",200,-maxVtxR_, maxVtxR_, 200, -maxVtxZ_, maxVtxZ_);
96 }
97 
99 
100 }
101 
102 
104 {
105 
106 // frun = iEvent.id().run();
107 // const edm::TimeValue_t ftimestamp = iEvent.time().value();
108 // const std::time_t ftmptime = ftimestamp >> 32;
109 
110 // if (fbeginLumiOfFit == -1) freftime[0] = freftime[1] = ftmptime;
111 // if (freftime[0] == 0 || ftmptime < freftime[0]) freftime[0] = ftmptime;
112 // const char* fbeginTime = formatTime(freftime[0]);
113 // sprintf(fbeginTimeOfFit,"%s",fbeginTime);
114 
115 // if (freftime[1] == 0 || ftmptime > freftime[1]) freftime[1] = ftmptime;
116 // const char* fendTime = formatTime(freftime[1]);
117 // sprintf(fendTimeOfFit,"%s",fendTime);
118 
119 // flumi = iEvent.luminosityBlock();
120 // frunFit = frun;
121 
122 // if (fbeginLumiOfFit == -1 || fbeginLumiOfFit > flumi) fbeginLumiOfFit = flumi;
123 // if (fendLumiOfFit == -1 || fendLumiOfFit < flumi) fendLumiOfFit = flumi;
124 // std::cout << "flumi = " <<flumi<<"; fbeginLumiOfFit = " << fbeginLumiOfFit <<"; fendLumiOfFit = "<<fendLumiOfFit<<std::endl;
125 
126  //------ Primary Vertices
128  bool hasPVs = false;
129  //edm::View<reco::Vertex> vertices;
130  //const reco::VertexCollection & vertices = 0;
131 
132  if ( iEvent.getByToken(vertexToken_, PVCollection ) ) {
133  //pv = *PVCollection;
134  //vertices = *PVCollection;
135  hasPVs = true;
136  }
137  //------
138 
139  if ( hasPVs ) {
140 
141  for (reco::VertexCollection::const_iterator pv = PVCollection->begin(); pv != PVCollection->end(); ++pv ) {
142 
143 
144  //for ( size_t ipv=0; ipv != pv.size(); ++ipv ) {
145 
146  //--- vertex selection
147  if ( pv->isFake() || pv->tracksSize()==0 ) continue;
148  if ( pv->ndof() < minVtxNdf_ || (pv->ndof()+3.)/pv->tracksSize()<2*minVtxWgt_ ) continue;
149  //---
150 
151  hPVx->Fill( pv->x(), pv->z() );
152  hPVy->Fill( pv->y(), pv->z() );
153 
154  //
155  // 3D fit section
156  //
157  // apply additional quality cut
158  if ( pvQuality(*pv)>dynamicQualityCut_ ) continue;
159  // if store exceeds max. size: reduce size and apply new quality cut
160  if ( pvStore_.size()>=maxNrVertices_ ) {
161  compressStore();
162  if ( pvQuality(*pv)>dynamicQualityCut_ ) continue;
163  }
164  //
165  // copy PV to store
166  //
167  int bx = iEvent.bunchCrossing();
168  BeamSpotFitPVData pvData;
169  pvData.bunchCrossing = bx;
170  pvData.position[0] = pv->x();
171  pvData.position[1] = pv->y();
172  pvData.position[2] = pv->z();
173  pvData.posError[0] = pv->xError();
174  pvData.posError[1] = pv->yError();
175  pvData.posError[2] = pv->zError();
176  pvData.posCorr[0] = pv->covariance(0,1)/pv->xError()/pv->yError();
177  pvData.posCorr[1] = pv->covariance(0,2)/pv->xError()/pv->zError();
178  pvData.posCorr[2] = pv->covariance(1,2)/pv->yError()/pv->zError();
179  pvStore_.push_back(pvData);
180 
181  if(ftree_ != 0){
182  theBeamSpotTreeData_.run(iEvent.id().run());
186  ftree_->Fill();
187  }
188 
189  if (fFitPerBunchCrossing) bxMap_[bx].push_back(pvData);
190 
191  }
192 
193  }
194 
195 
196 
197 
198 }
199 
200 void PVFitter::setTree(TTree* tree){
201  ftree_ = tree;
203 }
204 
206 
207  using namespace ROOT::Minuit2;
208  edm::LogInfo("PVFitter") << " Number of bunch crossings: " << bxMap_.size() << std::endl;
209 
210  bool fit_ok = true;
211 
212  for ( std::map<int,std::vector<BeamSpotFitPVData> >::const_iterator pvStore = bxMap_.begin();
213  pvStore!=bxMap_.end(); ++pvStore) {
214 
215  // first set null beam spot in case
216  // fit fails
217  fbspotMap[pvStore->first] = reco::BeamSpot();
218 
219  edm::LogInfo("PVFitter") << " Number of PVs collected for PVFitter: " << (pvStore->second).size() << " in bx: " << pvStore->first << std::endl;
220 
221  if ( (pvStore->second).size() <= minNrVertices_ ) {
222  edm::LogWarning("PVFitter") << " not enough PVs, continue" << std::endl;
223  fit_ok = false;
224  continue;
225  }
226 
227  //bool fit_ok = false;
228  edm::LogInfo("PVFitter") << "Calculating beam spot with PVs ..." << std::endl;
229 
230  //
231  // LL function and fitter
232  //
233  FcnBeamSpotFitPV* fcn = new FcnBeamSpotFitPV(pvStore->second);
234  //
235  // fit parameters: positions, widths, x-y correlations, tilts in xz and yz
236  //
237  MnUserParameters upar;
238  upar.Add("x", 0., 0.02, -10., 10.); // 0
239  upar.Add("y", 0., 0.02, -10., 10.); // 1
240  upar.Add("z", 0., 0.20, -30., 30.); // 2
241  upar.Add("ex", 0.015, 0.01, 0., 10.); // 3
242  upar.Add("corrxy", 0., 0.02, -1., 1.); // 4
243  upar.Add("ey", 0.015, 0.01, 0., 10.); // 5
244  upar.Add("dxdz", 0., 0.0002, -0.1, 0.1); // 6
245  upar.Add("dydz", 0., 0.0002, -0.1, 0.1); // 7
246  upar.Add("ez", 1., 0.1, 0., 30.); // 8
247  upar.Add("scale", errorScale_, errorScale_/10.,
248  errorScale_/2., errorScale_*2.); // 9
249  MnMigrad migrad(*fcn, upar);
250 
251  //
252  // first iteration without correlations
253  //
254  upar.Fix(4);
255  upar.Fix(6);
256  upar.Fix(7);
257  upar.Fix(9);
258  FunctionMinimum ierr = migrad();
259  if ( !ierr.IsValid() ) {
260  edm::LogInfo("PVFitter") << "3D beam spot fit failed in 1st iteration" << std::endl;
261  fit_ok = false;
262  continue;
263  }
264  //
265  // refit with harder selection on vertices
266  //
267  fcn->setLimits(upar.Value(0)-sigmaCut_*upar.Value(3),
268  upar.Value(0)+sigmaCut_*upar.Value(3),
269  upar.Value(1)-sigmaCut_*upar.Value(5),
270  upar.Value(1)+sigmaCut_*upar.Value(5),
271  upar.Value(2)-sigmaCut_*upar.Value(8),
272  upar.Value(2)+sigmaCut_*upar.Value(8));
273  ierr = migrad();
274  if ( !ierr.IsValid() ) {
275  edm::LogInfo("PVFitter") << "3D beam spot fit failed in 2nd iteration" << std::endl;
276  fit_ok = false;
277  continue;
278  }
279  //
280  // refit with correlations
281  //
282  upar.Release(4);
283  upar.Release(6);
284  upar.Release(7);
285  ierr = migrad();
286  if ( !ierr.IsValid() ) {
287  edm::LogInfo("PVFitter") << "3D beam spot fit failed in 3rd iteration" << std::endl;
288  fit_ok = false;
289  continue;
290  }
291  // refit with floating scale factor
292  // minuitx.ReleaseParameter(9);
293  // minuitx.Minimize();
294 
295  //minuitx.PrintResults(0,0);
296 
297  fwidthX = upar.Value(3);
298  fwidthY = upar.Value(5);
299  fwidthZ = upar.Value(8);
300  fwidthXerr = upar.Error(3);
301  fwidthYerr = upar.Error(5);
302  fwidthZerr = upar.Error(8);
303 
305  // need to get the full cov matrix
306  matrix(0,0) = pow( upar.Error(0), 2);
307  matrix(1,1) = pow( upar.Error(1), 2);
308  matrix(2,2) = pow( upar.Error(2), 2);
309  matrix(3,3) = fwidthZerr * fwidthZerr;
310  matrix(4,4) = pow( upar.Error(6), 2);
311  matrix(5,5) = pow( upar.Error(7), 2);
312  matrix(6,6) = fwidthXerr * fwidthXerr;
313 
315  upar.Value(1),
316  upar.Value(2) ),
317  fwidthZ,
318  upar.Value(6), upar.Value(7),
319  fwidthX,
320  matrix );
324 
325  fbspotMap[pvStore->first] = fbeamspot;
326  edm::LogInfo("PVFitter") << "3D PV fit done for this bunch crossing."<<std::endl;
327  //delete fcn;
328  fit_ok = fit_ok & true;
329  }
330 
331  return fit_ok;
332 }
333 
334 
336 
337  using namespace ROOT::Minuit2;
338  edm::LogInfo("PVFitter") << " Number of PVs collected for PVFitter: " << pvStore_.size() << std::endl;
339 
340  if ( pvStore_.size() <= minNrVertices_ ) return false;
341 
342  //bool fit_ok = false;
343 
344  if ( ! do3DFit_ ) {
345  TH1F *h1PVx = (TH1F*) hPVx->ProjectionX("h1PVx", 0, -1, "e");
346  TH1F *h1PVy = (TH1F*) hPVy->ProjectionX("h1PVy", 0, -1, "e");
347  TH1F *h1PVz = (TH1F*) hPVx->ProjectionY("h1PVz", 0, -1, "e");
348 
349  //Use our own copy for thread safety
350  TF1 gaus("localGaus","gaus");
351 
352  h1PVx->Fit(&gaus,"QLM0");
353  h1PVy->Fit(&gaus,"QLM0");
354  h1PVz->Fit(&gaus,"QLM0");
355 
356  TF1 *gausx = h1PVx->GetFunction("localGaus");
357  TF1 *gausy = h1PVy->GetFunction("localGaus");
358  TF1 *gausz = h1PVz->GetFunction("localGaus");
359 
360  fwidthX = gausx->GetParameter(2);
361  fwidthY = gausy->GetParameter(2);
362  fwidthZ = gausz->GetParameter(2);
363  fwidthXerr = gausx->GetParError(2);
364  fwidthYerr = gausy->GetParError(2);
365  fwidthZerr = gausz->GetParError(2);
366 
368  matrix(2,2) = gausz->GetParError(1) * gausz->GetParError(1);
369  matrix(3,3) = fwidthZerr * fwidthZerr;
370  matrix(6,6) = fwidthXerr * fwidthXerr;
371 
372  fbeamspot = reco::BeamSpot( reco::BeamSpot::Point(gausx->GetParameter(1),
373  gausy->GetParameter(1),
374  gausz->GetParameter(1) ),
375  fwidthZ,
376  0., 0.,
377  fwidthX,
378  matrix );
382 
383  }
384  else { // do 3D fit
385  //
386  // LL function and fitter
387  //
389  //
390  // fit parameters: positions, widths, x-y correlations, tilts in xz and yz
391  //
392  MnUserParameters upar;
393  upar.Add("x" , 0. , 0.02 , -10. , 10. ); // 0
394  upar.Add("y" , 0. , 0.02 , -10. , 10. ); // 1
395  upar.Add("z" , 0. , 0.20 , -30. , 30. ); // 2
396  upar.Add("ex" , 0.015 , 0.01 , 0. , 10. ); // 3
397  upar.Add("corrxy", 0. , 0.02 , -1. , 1. ); // 4
398  upar.Add("ey" , 0.015 , 0.01 , 0. , 10. ); // 5
399  upar.Add("dxdz" , 0. , 0.0002 , -0.1 , 0.1 ); // 6
400  upar.Add("dydz" , 0. , 0.0002 , -0.1 , 0.1 ); // 7
401  upar.Add("ez" , 1. , 0.1 , 0. , 30. ); // 8
402  upar.Add("scale" , errorScale_, errorScale_/10.,errorScale_/2., errorScale_*2.); // 9
403  MnMigrad migrad(*fcn, upar);
404  //
405  // first iteration without correlations
406  //
407  migrad.Fix(4);
408  migrad.Fix(6);
409  migrad.Fix(7);
410  migrad.Fix(9);
411  FunctionMinimum ierr = migrad();
412  if ( !ierr.IsValid() ) {
413  edm::LogWarning("PVFitter") << "3D beam spot fit failed in 1st iteration" << std::endl;
414  return false;
415  }
416  //
417  // refit with harder selection on vertices
418  //
419 
420  vector<double> results ;
421  vector<double> errors ;
422  results = ierr.UserParameters().Params() ; \
423  errors = ierr.UserParameters().Errors() ; \
424 
425  fcn->setLimits(results[0]-sigmaCut_*results[3],
426  results[0]+sigmaCut_*results[3],
427  results[1]-sigmaCut_*results[5],
428  results[1]+sigmaCut_*results[5],
429  results[2]-sigmaCut_*results[8],
430  results[2]+sigmaCut_*results[8]);
431  ierr = migrad();
432  if ( !ierr.IsValid() ) {
433  edm::LogWarning("PVFitter") << "3D beam spot fit failed in 2nd iteration" << std::endl;
434  return false;
435  }
436  //
437  // refit with correlations
438  //
439  migrad.Release(4);
440  migrad.Release(6);
441  migrad.Release(7);
442  ierr = migrad();
443  if ( !ierr.IsValid() ) {
444  edm::LogWarning("PVFitter") << "3D beam spot fit failed in 3rd iteration" << std::endl;
445  return false;
446  }
447  // refit with floating scale factor
448  // minuitx.ReleaseParameter(9);
449  // minuitx.Minimize();
450 
451  //minuitx.PrintResults(0,0);
452 
453  results = ierr.UserParameters().Params() ; \
454  errors = ierr.UserParameters().Errors() ; \
455 
456  fwidthX = results[3];
457  fwidthY = results[5];
458  fwidthZ = results[8];
459  fwidthXerr = errors[3];
460  fwidthYerr = errors[5];
461  fwidthZerr = errors[8];
462 
463  // check errors on widths and sigmaZ for nan
465  edm::LogWarning("PVFitter") << "3D beam spot fit returns nan in 3rd iteration" << std::endl;
466  return false;
467  }
468 
470  // need to get the full cov matrix
471  matrix(0,0) = pow( errors[0], 2);
472  matrix(1,1) = pow( errors[1], 2);
473  matrix(2,2) = pow( errors[2], 2);
474  matrix(3,3) = fwidthZerr * fwidthZerr;
475  matrix(6,6) = fwidthXerr * fwidthXerr;
476 
478  results[1],
479  results[2] ),
480  fwidthZ,
481  results[6], results[7],
482  fwidthX,
483  matrix );
487  }
488 
489  return true; //FIXME: Need to add quality test for the fit results!
490 }
491 
493 /*
494  fasciiFile << "Runnumber " << frun << std::endl;
495  fasciiFile << "BeginTimeOfFit " << fbeginTimeOfFit << std::endl;
496  fasciiFile << "EndTimeOfFit " << fendTimeOfFit << std::endl;
497  fasciiFile << "LumiRange " << fbeginLumiOfFit << " - " << fendLumiOfFit << std::endl;
498  fasciiFile << "Type " << fbeamspot.type() << std::endl;
499  fasciiFile << "X0 " << fbeamspot.x0() << std::endl;
500  fasciiFile << "Y0 " << fbeamspot.y0() << std::endl;
501  fasciiFile << "Z0 " << fbeamspot.z0() << std::endl;
502  fasciiFile << "sigmaZ0 " << fbeamspot.sigmaZ() << std::endl;
503  fasciiFile << "dxdz " << fbeamspot.dxdz() << std::endl;
504  fasciiFile << "dydz " << fbeamspot.dydz() << std::endl;
505  if (inputBeamWidth_ > 0 ) {
506  fasciiFile << "BeamWidthX " << inputBeamWidth_ << std::endl;
507  fasciiFile << "BeamWidthY " << inputBeamWidth_ << std::endl;
508  } else {
509  fasciiFile << "BeamWidthX " << fbeamspot.BeamWidthX() << std::endl;
510  fasciiFile << "BeamWidthY " << fbeamspot.BeamWidthY() << std::endl;
511  }
512 
513  for (int i = 0; i<6; ++i) {
514  fasciiFile << "Cov("<<i<<",j) ";
515  for (int j=0; j<7; ++j) {
516  fasciiFile << fbeamspot.covariance(i,j) << " ";
517  }
518  fasciiFile << std::endl;
519  }
520  // beam width error
521  if (inputBeamWidth_ > 0 ) {
522  fasciiFile << "Cov(6,j) 0 0 0 0 0 0 " << "1e-4" << std::endl;
523  } else {
524  fasciiFile << "Cov(6,j) 0 0 0 0 0 0 " << fbeamspot.covariance(6,6) << std::endl;
525  }
526  fasciiFile << "EmittanceX " << fbeamspot.emittanceX() << std::endl;
527  fasciiFile << "EmittanceY " << fbeamspot.emittanceY() << std::endl;
528  fasciiFile << "BetaStar " << fbeamspot.betaStar() << std::endl;
529 
530 */
531 }
532 
533 
534 void
536 {
537  //
538  // fill vertex qualities
539  //
540  pvQualities_.resize(pvStore_.size());
541  for ( unsigned int i=0; i<pvStore_.size(); ++i ) pvQualities_[i] = pvQuality(pvStore_[i]);
542  sort(pvQualities_.begin(),pvQualities_.end());
543  //
544  // Set new quality cut to median. This cut will be used to reduce the
545  // number of vertices in the store and also apply to all new vertices
546  // until the next reset
547  //
549  //
550  // remove all vertices failing the cut from the store
551  // (to be moved to a more efficient memory management!)
552  //
553  unsigned int iwrite(0);
554  for ( unsigned int i=0; i<pvStore_.size(); ++i ) {
555  if ( pvQuality(pvStore_[i])>dynamicQualityCut_ ) continue;
556  if ( i!=iwrite ) pvStore_[iwrite] = pvStore_[i];
557  ++iwrite;
558  }
559  pvStore_.resize(iwrite);
560  edm::LogInfo("PVFitter") << "Reduced primary vertex store size to "
561  << pvStore_.size() << " ; new dynamic quality cut = "
562  << dynamicQualityCut_ << std::endl;
563 
564 }
565 
566 double
568 {
569  //
570  // determinant of the transverse part of the PV covariance matrix
571  //
572  return
573  pv.covariance(0,0)*pv.covariance(1,1)-
574  pv.covariance(0,1)*pv.covariance(0,1);
575 }
576 
577 double
579 {
580  //
581  // determinant of the transverse part of the PV covariance matrix
582  //
583  double ex = pv.posError[0];
584  double ey = pv.posError[1];
585  return ex*ex*ey*ey*(1-pv.posCorr[0]*pv.posCorr[0]);
586 }
587 
RunNumber_t run() const
Definition: EventID.h:39
std::vector< double > pvQualities_
Definition: PVFitter.h:205
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
math::Error< dimension >::type CovarianceMatrix
Definition: BeamSpot.h:31
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
bool debug_
Definition: PVFitter.h:145
double maxVtxNormChi2_
Definition: PVFitter.h:154
void setTree(TTree *tree)
Definition: PVFitter.cc:200
std::map< int, std::vector< BeamSpotFitPVData > > bxMap_
Definition: PVFitter.h:203
void initialize(const edm::ParameterSet &iConfig, edm::ConsumesCollector &iColl)
Definition: PVFitter.cc:67
void run(unsigned int run)
void compressStore()
reduce size of primary vertex cache by increasing quality limit
Definition: PVFitter.cc:535
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:449
double minVtxWgt_
Definition: PVFitter.h:156
double minVtxNdf_
Definition: PVFitter.h:153
int bunchCrossing() const
Definition: EventBase.h:66
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:63
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
double covariance(int i, int j) const
(i, j)-th element of error matrix, i, j = 0, ... 2
Definition: Vertex.h:123
double fwidthY
Definition: PVFitter.h:183
double errorScale_
Definition: PVFitter.h:159
bool do3DFit_
Definition: PVFitter.h:146
double dynamicQualityCut_
Definition: PVFitter.h:204
double fwidthYerr
Definition: PVFitter.h:186
double fwidthZ
Definition: PVFitter.h:184
double fwidthXerr
Definition: PVFitter.h:185
void setType(BeamType type)
set beam type
Definition: BeamSpot.h:131
void bunchCrossing(unsigned int bunchCrossing)
reco::BeamSpot fbeamspot
Definition: PVFitter.h:139
void lumi(unsigned int lumi)
int iEvent
Definition: GenABIO.cc:230
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:202
void readEvent(const edm::Event &iEvent)
Definition: PVFitter.cc:103
bool isNotFinite(T x)
Definition: isFinite.h:10
void setBeamWidthY(double v)
Definition: BeamSpot.h:109
BeamSpotTreeData theBeamSpotTreeData_
Definition: PVFitter.h:207
bool fFitPerBunchCrossing
Definition: PVFitter.h:141
TH2F * hPVy
Definition: PVFitter.h:166
void pvData(const BeamSpotFitPVData &pvData)
TTree * ftree_
Definition: PVFitter.h:168
std::map< int, reco::BeamSpot > fbspotMap
Definition: PVFitter.h:140
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
Definition: PVFitter.h:147
double pvQuality(const reco::Vertex &pv) const
vertex quality measure
Definition: PVFitter.cc:567
double maxVtxR_
Definition: PVFitter.h:157
double maxVtxZ_
Definition: PVFitter.h:158
unsigned int maxNrVertices_
Definition: PVFitter.h:151
double fwidthZerr
Definition: PVFitter.h:187
void branch(TTree *tree)
PVFitter()
Definition: PVFitter.h:45
unsigned int minVtxTracks_
Definition: PVFitter.h:155
void fcn(int &, double *, double &, double *, int)
bool runFitter()
Definition: PVFitter.cc:335
TH2F * hPVx
Definition: PVFitter.h:166
unsigned int minNrVertices_
Definition: PVFitter.h:152
void setLimits(float xmin, float xmax, float ymin, float ymax, float zmin, float zmax)
bool runBXFitter()
Definition: PVFitter.cc:205
double sigmaCut_
Definition: PVFitter.h:160
edm::EventID id() const
Definition: EventBase.h:60
void setBeamWidthX(double v)
Definition: BeamSpot.h:108
virtual ~PVFitter()
Definition: PVFitter.cc:98
double fwidthX
Definition: PVFitter.h:182
void dumpTxtFile()
Definition: PVFitter.cc:492
tuple size
Write out results.
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40