CMS 3D CMS Logo

BeamFitter.cc
Go to the documentation of this file.
1 
18 
21 
24 
26 
27 // Update the string representations of the time
29  char ts[] = "yyyy.mn.dd hh:mm:ss zzz ";
30  char* fbeginTime = ts;
31  strftime(fbeginTime,sizeof(ts),"%Y.%m.%d %H:%M:%S GMT",gmtime(&freftime[0]));
32  sprintf(fbeginTimeOfFit,"%s",fbeginTime);
33  char* fendTime = ts;
34  strftime(fendTime,sizeof(ts),"%Y.%m.%d %H:%M:%S GMT",gmtime(&freftime[1]));
35  sprintf(fendTimeOfFit,"%s",fendTime);
36 }
37 
38 
40  edm::ConsumesCollector &&iColl): fPVTree_(0)
41 {
42 
43  debug_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("Debug");
44  tracksToken_ = iColl.consumes<reco::TrackCollection>(
45  iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<edm::InputTag>("TrackCollection"));
46  vertexToken_ = iColl.consumes<edm::View<reco::Vertex> >(
47  iConfig.getUntrackedParameter<edm::InputTag>("primaryVertex", edm::InputTag("offlinePrimaryVertices")));
48  beamSpotToken_ = iColl.consumes<reco::BeamSpot>(
49  iConfig.getUntrackedParameter<edm::InputTag>("beamSpot", edm::InputTag("offlineBeamSpot")));
50  writeTxt_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("WriteAscii");
51  outputTxt_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<std::string>("AsciiFileName");
52  appendRunTxt_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("AppendRunToFileName");
53  writeDIPTxt_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("WriteDIPAscii");
54  // Specify whether we want to write the DIP file even if the fit is failed.
55  writeDIPBadFit_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("WriteDIPOnBadFit", true);
56  outputDIPTxt_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<std::string>("DIPFileName");
57  saveNtuple_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("SaveNtuple");
58  saveBeamFit_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("SaveFitResults");
59  savePVVertices_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("SavePVVertices");
60  isMuon_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<bool>("IsMuonCollection");
61 
62  trk_MinpT_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<double>("MinimumPt");
63  trk_MaxEta_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<double>("MaximumEta");
64  trk_MaxIP_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<double>("MaximumImpactParameter");
65  trk_MaxZ_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<double>("MaximumZ");
66  trk_MinNTotLayers_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<int>("MinimumTotalLayers");
67  trk_MinNPixLayers_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<int>("MinimumPixelLayers");
68  trk_MaxNormChi2_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<double>("MaximumNormChi2");
69  trk_Algorithm_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<std::vector<std::string> >("TrackAlgorithm");
70  trk_Quality_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<std::vector<std::string> >("TrackQuality");
71  min_Ntrks_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<int>("MinimumInputTracks");
72  convergence_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<double>("FractionOfFittedTrks");
73  inputBeamWidth_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<double>("InputBeamWidth",-1.);
74 
75  for (unsigned int j=0;j<trk_Algorithm_.size();j++)
77  for (unsigned int j=0;j<trk_Quality_.size();j++)
79 
81  outputfilename_ = iConfig.getParameter<edm::ParameterSet>("BeamFitter").getUntrackedParameter<std::string>("OutputFileName");
82  file_ = TFile::Open(outputfilename_.c_str(),"RECREATE");
83  }
84  if (saveNtuple_) {
85  ftree_ = new TTree("mytree","mytree");
86  ftree_->AutoSave();
87 
88  ftree_->Branch("pt",&fpt,"fpt/D");
89  ftree_->Branch("d0",&fd0,"fd0/D");
90  ftree_->Branch("d0bs",&fd0bs,"fd0bs/D");
91  ftree_->Branch("sigmad0",&fsigmad0,"fsigmad0/D");
92  ftree_->Branch("phi0",&fphi0,"fphi0/D");
93  ftree_->Branch("z0",&fz0,"fz0/D");
94  ftree_->Branch("sigmaz0",&fsigmaz0,"fsigmaz0/D");
95  ftree_->Branch("theta",&ftheta,"ftheta/D");
96  ftree_->Branch("eta",&feta,"feta/D");
97  ftree_->Branch("charge",&fcharge,"fcharge/I");
98  ftree_->Branch("normchi2",&fnormchi2,"fnormchi2/D");
99  ftree_->Branch("nTotLayerMeas",&fnTotLayerMeas,"fnTotLayerMeas/i");
100  ftree_->Branch("nStripLayerMeas",&fnStripLayerMeas,"fnStripLayerMeas/i");
101  ftree_->Branch("nPixelLayerMeas",&fnPixelLayerMeas,"fnPixelLayerMeas/i");
102  ftree_->Branch("nTIBLayerMeas",&fnTIBLayerMeas,"fnTIBLayerMeas/i");
103  ftree_->Branch("nTOBLayerMeas",&fnTOBLayerMeas,"fnTOBLayerMeas/i");
104  ftree_->Branch("nTIDLayerMeas",&fnTIDLayerMeas,"fnTIDLayerMeas/i");
105  ftree_->Branch("nTECLayerMeas",&fnTECLayerMeas,"fnTECLayerMeas/i");
106  ftree_->Branch("nPXBLayerMeas",&fnPXBLayerMeas,"fnPXBLayerMeas/i");
107  ftree_->Branch("nPXFLayerMeas",&fnPXFLayerMeas,"fnPXFLayerMeas/i");
108  ftree_->Branch("cov",&fcov,"fcov[7][7]/D");
109  ftree_->Branch("vx",&fvx,"fvx/D");
110  ftree_->Branch("vy",&fvy,"fvy/D");
111  ftree_->Branch("quality",&fquality,"fquality/O");
112  ftree_->Branch("algo",&falgo,"falgo/O");
113  ftree_->Branch("run",&frun,"frun/i");
114  ftree_->Branch("lumi",&flumi,"flumi/i");
115  ftree_->Branch("pvValid",&fpvValid,"fpvValid/O");
116  ftree_->Branch("pvx", &fpvx, "fpvx/D");
117  ftree_->Branch("pvy", &fpvy, "fpvy/D");
118  ftree_->Branch("pvz", &fpvz, "fpvz/D");
119  }
120  if (saveBeamFit_){
121  ftreeFit_ = new TTree("fitResults","fitResults");
122  ftreeFit_->AutoSave();
123  ftreeFit_->Branch("run",&frunFit,"frunFit/i");
124  ftreeFit_->Branch("beginLumi",&fbeginLumiOfFit,"fbeginLumiOfFit/i");
125  ftreeFit_->Branch("endLumi",&fendLumiOfFit,"fendLumiOfFit/i");
126  ftreeFit_->Branch("beginTime",fbeginTimeOfFit,"fbeginTimeOfFit/C");
127  ftreeFit_->Branch("endTime",fendTimeOfFit,"fendTimeOfFit/C");
128  ftreeFit_->Branch("x",&fx,"fx/D");
129  ftreeFit_->Branch("y",&fy,"fy/D");
130  ftreeFit_->Branch("z",&fz,"fz/D");
131  ftreeFit_->Branch("sigmaZ",&fsigmaZ,"fsigmaZ/D");
132  ftreeFit_->Branch("dxdz",&fdxdz,"fdxdz/D");
133  ftreeFit_->Branch("dydz",&fdydz,"fdydz/D");
134  ftreeFit_->Branch("xErr",&fxErr,"fxErr/D");
135  ftreeFit_->Branch("yErr",&fyErr,"fyErr/D");
136  ftreeFit_->Branch("zErr",&fzErr,"fzErr/D");
137  ftreeFit_->Branch("sigmaZErr",&fsigmaZErr,"fsigmaZErr/D");
138  ftreeFit_->Branch("dxdzErr",&fdxdzErr,"fdxdzErr/D");
139  ftreeFit_->Branch("dydzErr",&fdydzErr,"fdydzErr/D");
140  ftreeFit_->Branch("widthX",&fwidthX,"fwidthX/D");
141  ftreeFit_->Branch("widthY",&fwidthY,"fwidthY/D");
142  ftreeFit_->Branch("widthXErr",&fwidthXErr,"fwidthXErr/D");
143  ftreeFit_->Branch("widthYErr",&fwidthYErr,"fwidthYErr/D");
144  }
145 
146  fBSvector.clear();
147  ftotal_tracks = 0;
150  frun = flumi = -1;
152  fquality = falgo = true;
153  fpvValid = true;
154  fpvx = fpvy = fpvz = 0;
155  fitted_ = false;
156  resetRefTime();
157 
158  //debug histograms
159  h1ntrks = new TH1F("h1ntrks","number of tracks per event",50,0,50);
160  h1vz_event = new TH1F("h1vz_event","track Vz", 50, -30, 30 );
161  h1cutFlow = new TH1F("h1cutFlow","Cut flow table of track selection", 9, 0, 9);
162  h1cutFlow->GetXaxis()->SetBinLabel(1,"No cut");
163  h1cutFlow->GetXaxis()->SetBinLabel(2,"Traker hits");
164  h1cutFlow->GetXaxis()->SetBinLabel(3,"Pixel hits");
165  h1cutFlow->GetXaxis()->SetBinLabel(4,"norm. #chi^{2}");
166  h1cutFlow->GetXaxis()->SetBinLabel(5,"algo");
167  h1cutFlow->GetXaxis()->SetBinLabel(6,"quality");
168  h1cutFlow->GetXaxis()->SetBinLabel(7,"d_{0}");
169  h1cutFlow->GetXaxis()->SetBinLabel(8,"z_{0}");
170  h1cutFlow->GetXaxis()->SetBinLabel(9,"p_{T}");
171  resetCutFlow();
172 
173  // Primary vertex fitter
174  MyPVFitter = new PVFitter(iConfig, iColl);
175  MyPVFitter->resetAll();
176  if (savePVVertices_){
177  fPVTree_ = new TTree("PrimaryVertices","PrimaryVertices");
179  }
180 
181  // check filename
182  ffilename_changed = false;
183  if (writeDIPTxt_)
184  fasciiDIP.open(outputDIPTxt_.c_str());
185 }
186 
188 
189  if (saveNtuple_) {
190  file_->cd();
191  if (fitted_ && h1z) h1z->Write();
192  h1ntrks->Write();
193  h1vz_event->Write();
194  if (h1cutFlow) h1cutFlow->Write();
195  ftree_->Write();
196  }
197  if (saveBeamFit_){
198  file_->cd();
199  ftreeFit_->Write();
200  }
201  if (savePVVertices_){
202  file_->cd();
203  fPVTree_->Write();
204  }
205 
206 
208  file_->Close();
209  delete file_;
210  }
211  delete MyPVFitter;
212 }
213 
214 
216 {
217 
218 
219  frun = iEvent.id().run();
220  const edm::TimeValue_t ftimestamp = iEvent.time().value();
221  const std::time_t ftmptime = ftimestamp >> 32;
222 
223  if (fbeginLumiOfFit == -1) freftime[0] = freftime[1] = ftmptime;
224  if (freftime[0] == 0 || ftmptime < freftime[0]) freftime[0] = ftmptime;
225  if (freftime[1] == 0 || ftmptime > freftime[1]) freftime[1] = ftmptime;
226  // Update the human-readable string versions of the time
227  updateBTime();
228 
229  flumi = iEvent.luminosityBlock();
230  frunFit = frun;
233 
235  iEvent.getByToken(tracksToken_, TrackCollection);
236 
237  //------ Primary Vertices
239  bool hasPVs = false;
241  if ( iEvent.getByToken(vertexToken_, PVCollection ) ) {
242  pv = *PVCollection;
243  hasPVs = true;
244  }
245  //------
246 
247  //------ Beam Spot in current event
248  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
249  const reco::BeamSpot *refBS = 0;
250  if ( iEvent.getByToken(beamSpotToken_, recoBeamSpotHandle) )
251  refBS = recoBeamSpotHandle.product();
252  //-------
253 
254  const reco::TrackCollection *tracks = TrackCollection.product();
255 
256  double eventZ = 0;
257  double averageZ = 0;
258 
259  for (reco::TrackCollection::const_iterator track = tracks->begin();
260  track != tracks->end(); ++track){
261 
262  if (!isMuon_) {
263  const reco::HitPattern &trkHP = track->hitPattern();
264 
274  } else {
275  fnTotLayerMeas = track->numberOfValidHits();
276  }
277 
278  fpt = track->pt();
279  feta = track->eta();
280  fphi0 = track->phi();
281  fcharge = track->charge();
282  fnormchi2 = track->normalizedChi2();
283  fd0 = track->d0();
284  if (refBS) fd0bs = -1*track->dxy(refBS->position());
285  else fd0bs = 0.;
286 
287  fsigmad0 = track->d0Error();
288  fz0 = track->dz();
289  fsigmaz0 = track->dzError();
290  ftheta = track->theta();
291  fvx = track->vx();
292  fvy = track->vy();
293 
294  for (int i=0; i<5; ++i) {
295  for (int j=0; j<5; ++j) {
296  fcov[i][j] = track->covariance(i,j);
297  }
298  }
299 
300  fquality = true;
301  falgo = true;
302 
303  if (! isMuon_ ) {
304  if (quality_.size()!=0) {
305  fquality = false;
306  for (unsigned int i = 0; i<quality_.size();++i) {
307  if(debug_) edm::LogInfo("BeamFitter") << "quality_[" << i << "] = " << track->qualityName(quality_[i]) << std::endl;
308  if (track->quality(quality_[i])) {
309  fquality = true;
310  break;
311  }
312  }
313  }
314 
315 
316  // Track algorithm
317 
318  if (algorithm_.size()!=0) {
319  if (std::find(algorithm_.begin(),algorithm_.end(),track->algo())==algorithm_.end())
320  falgo = false;
321  }
322 
323  }
324 
325  // check if we have a valid PV
326  fpvValid = false;
327 
328  if ( hasPVs ) {
329 
330  for ( size_t ipv=0; ipv != pv.size(); ++ipv ) {
331 
332  if (! pv[ipv].isFake() ) fpvValid = true;
333 
334  if ( ipv==0 && !pv[0].isFake() ) { fpvx = pv[0].x(); fpvy = pv[0].y(); fpvz = pv[0].z(); } // fix this later
335 
336 
337  }
338 
339  }
340 
341 
342  if (saveNtuple_) ftree_->Fill();
343  ftotal_tracks++;
344 
346  // Track selection
347  if (fnTotLayerMeas >= trk_MinNTotLayers_) { countPass[1] += 1;
349  if (fnormchi2 < trk_MaxNormChi2_) { countPass[3] += 1;
350  if (falgo) {countPass[4] += 1;
351  if (fquality) { countPass[5] += 1;
352  if (std::abs( fd0 ) < trk_MaxIP_) { countPass[6] += 1;
353  if (std::abs( fz0 ) < trk_MaxZ_){ countPass[7] += 1;
354  if (fpt > trk_MinpT_) {
355  countPass[8] += 1;
356  if (std::abs( feta ) < trk_MaxEta_
357  //&& fpvValid
358  ) {
359  if (debug_) {
360  edm::LogInfo("BeamFitter") << "Selected track quality = " << track->qualityMask()
361  << "; track algorithm = " << track->algoName() << "= TrackAlgorithm: " << track->algo() << std::endl;
362  }
364  BSTrk.setVx(fvx);
365  BSTrk.setVy(fvy);
366  fBSvector.push_back(BSTrk);
367  averageZ += fz0;
368  }
369  }
370  }
371  }
372  }
373  }
374  }
375  }
376  }// track selection
377 
378  }// tracks
379 
380  averageZ = averageZ/(float)(fBSvector.size());
381 
382  for( std::vector<BSTrkParameters>::const_iterator iparam = fBSvector.begin(); iparam != fBSvector.end(); ++iparam) {
383 
384  eventZ += fabs( iparam->z0() - averageZ );
385 
386  }
387 
388  h1ntrks->Fill( fBSvector.size() );
389  h1vz_event->Fill( eventZ/(float)(fBSvector.size() ) ) ;
390  for (unsigned int i=0; i < sizeof(countPass)/sizeof(countPass[0]); i++)
391  h1cutFlow->SetBinContent(i+1,countPass[i]);
392 
393  MyPVFitter->readEvent(iEvent);
394 
395 }
396 
398 // run both PV and track fitters
399  bool fit_ok = false;
400  bool pv_fit_ok = false;
401  reco::BeamSpot bspotPV;
402  reco::BeamSpot bspotTrk;
403 
404  // First run PV fitter
406  edm::LogInfo("BeamFitter") << " [BeamFitterBxDebugTime] freftime[0] = " << freftime[0]
407  << "; address = " << &freftime[0]
408  << " = " << fbeginTimeOfFit << std::endl;
409  edm::LogInfo("BeamFitter") << " [BeamFitterBxDebugTime] freftime[1] = " << freftime[1]
410  << "; address = " << &freftime[1]
411  << " = " << fendTimeOfFit << std::endl;
412 
413  if ( MyPVFitter->runBXFitter() ) {
415  pv_fit_ok = true;
416  }
417  if(writeTxt_ ) dumpTxtFile(outputTxt_,true); // all reaults
418  if(writeDIPTxt_ && (pv_fit_ok || writeDIPBadFit_)) {
419  dumpTxtFile(outputDIPTxt_,false); // for DQM/DIP
420  }
421  return pv_fit_ok;
422  }
423 
424  if ( MyPVFitter->runFitter() ) {
425 
426  bspotPV = MyPVFitter->getBeamSpot();
427 
428  // take beam width from PV fit and pass it to track fitter
429  // assume circular transverse beam width
430  inputBeamWidth_ = sqrt( pow(bspotPV.BeamWidthX(),2) + pow(bspotPV.BeamWidthY(),2) )/sqrt(2);
431  pv_fit_ok = true;
432 
433  } else {
434  // problems with PV fit
436  bspotTrk.setType(reco::BeamSpot::Unknown); //propagate error to trk beam spot
437  }
438 
439  if ( runFitterNoTxt() ) {
440 
441  bspotTrk = fbeamspot;
442  fit_ok = true;
443  } else {
444  // beamfit failed, flagged as empty beam spot
445  bspotTrk.setType(reco::BeamSpot::Fake);
446  fit_ok = false;
447  }
448 
449  // combined results into one single beam spot
450 
451  // to pass errors I have to create another beam spot object
453  for (int j = 0 ; j < 7 ; ++j) {
454  for(int k = j ; k < 7 ; ++k) {
455  matrix(j,k) = bspotTrk.covariance(j,k);
456  }
457  }
458  // change beam width error to one from PV
459  if (pv_fit_ok && fit_ok ) {
461 
462  // get Z and sigmaZ from PV fit
463  matrix(2,2) = bspotPV.covariance(2,2);
464  matrix(3,3) = bspotPV.covariance(3,3);
465  reco::BeamSpot tmpbs(reco::BeamSpot::Point(bspotTrk.x0(), bspotTrk.y0(),
466  bspotPV.z0() ),
467  bspotPV.sigmaZ() ,
468  bspotTrk.dxdz(),
469  bspotTrk.dydz(),
470  bspotPV.BeamWidthX(),
471  matrix,
472  bspotPV.type() );
473  tmpbs.setBeamWidthY( bspotPV.BeamWidthY() );
474  // overwrite beam spot result
475  fbeamspot = tmpbs;
476  }
477  if (pv_fit_ok && fit_ok) {
478  fbeamspot.setType(bspotPV.type());
479  }
480  else if(!pv_fit_ok && fit_ok){
482  }
483  else if(pv_fit_ok && !fit_ok){
485  }
486  else if(!pv_fit_ok && !fit_ok){
488  }
489 
490  if(writeTxt_ ) dumpTxtFile(outputTxt_,true); // all reaults
491  if(writeDIPTxt_ && ((fit_ok && pv_fit_ok) || writeDIPBadFit_)) {
492  dumpTxtFile(outputDIPTxt_,false); // for DQM/DIP
493  for(size_t i= 0; i < 7; i++)ForDIPPV_.push_back(0.0);
494  }
495 
496  return fit_ok && pv_fit_ok;
497 }
498 
500  edm::LogInfo("BeamFitter") << " [BeamFitterDebugTime] freftime[0] = " << freftime[0]
501  << "; address = " << &freftime[0]
502  << " = " << fbeginTimeOfFit << std::endl;
503  edm::LogInfo("BeamFitter") << " [BeamFitterDebugTime] freftime[1] = " << freftime[1]
504  << "; address = " << &freftime[1]
505  << " = " << fendTimeOfFit << std::endl;
506 
507  if (fbeginLumiOfFit == -1 || fendLumiOfFit == -1) {
508  edm::LogWarning("BeamFitter") << "No event read! No Fitting!" << std::endl;
509  return false;
510  }
511 
512  bool fit_ok = false;
513  // default fit to extract beam spot info
514  if(fBSvector.size() > 1 ){
515 
516  edm::LogInfo("BeamFitter") << "Calculating beam spot..." << std::endl
517  << "We will use " << fBSvector.size() << " good tracks out of " << ftotal_tracks << std::endl;
518 
519  BSFitter *myalgo = new BSFitter( fBSvector );
520  myalgo->SetMaximumZ( trk_MaxZ_ );
521  myalgo->SetConvergence( convergence_ );
522  myalgo->SetMinimumNTrks( min_Ntrks_ );
524 
525  fbeamspot = myalgo->Fit();
526 
527 
528  // retrieve histogram for Vz
529  h1z = (TH1F*) myalgo->GetVzHisto();
530 
531  delete myalgo;
532  if ( fbeamspot.type() != 0 ) {// save all results except for Fake (all 0.)
533  fit_ok = true;
534  if (saveBeamFit_){
535  fx = fbeamspot.x0();
536  fy = fbeamspot.y0();
537  fz = fbeamspot.z0();
539  fdxdz = fbeamspot.dxdz();
540  fdydz = fbeamspot.dydz();
543  fxErr = fbeamspot.x0Error();
544  fyErr = fbeamspot.y0Error();
545  fzErr = fbeamspot.z0Error();
551  ftreeFit_->Fill();
552  }
553  }
554  }
555  else{ // tracks <= 1
556  reco::BeamSpot tmpbs;
557  fbeamspot = tmpbs;
559  edm::LogInfo("BeamFitter") << "Not enough good tracks selected! No beam fit!" << std::endl;
560 
561  }
562  fitted_ = true;
563  return fit_ok;
564 
565 }
566 
568 
569  bool fit_ok = runFitterNoTxt();
570 
571  if(writeTxt_ ) dumpTxtFile(outputTxt_,true); // all reaults
572  if(writeDIPTxt_ && (fit_ok || writeDIPBadFit_)) {
573  dumpTxtFile(outputDIPTxt_,false); // for DQM/DIP
574  }
575  return fit_ok;
576 }
577 
579  bool widthfit_ok = false;
580  // default fit to extract beam spot info
581  if(fBSvector.size() > 1 ){
582 
583  edm::LogInfo("BeamFitter") << "Calculating beam spot positions('d0-phi0' method) and width using llh Fit"<< std::endl
584  << "We will use " << fBSvector.size() << " good tracks out of " << ftotal_tracks << std::endl;
585 
586  BSFitter *myalgo = new BSFitter( fBSvector );
587  myalgo->SetMaximumZ( trk_MaxZ_ );
588  myalgo->SetConvergence( convergence_ );
589  myalgo->SetMinimumNTrks(min_Ntrks_);
591 
592 
593  myalgo->SetFitVariable(std::string("d*z"));
594  myalgo->SetFitType(std::string("likelihood"));
595  fbeamWidthFit = myalgo->Fit();
596 
597  //Add to .txt file
599 
600  delete myalgo;
601 
602  // not fake
603  if ( fbeamspot.type() != 0 )
604  widthfit_ok = true;
605  }
606  else{
608  edm::LogWarning("BeamFitter") << "Not enough good tracks selected! No beam fit!" << std::endl;
609  }
610  return widthfit_ok;
611 }
612 
614  std::ofstream outFile;
615  outFile.open(fileName.c_str(),std::ios::app);
616  outFile<<"-------------------------------------------------------------------------------------------------------------------------------------------------------------"<<std::endl;
617  outFile<<"Beam width(in cm) from Log-likelihood fit (Here we assume a symmetric beam(SigmaX=SigmaY)!)"<<std::endl;
618  outFile<<" "<<std::endl;
619  outFile << "BeamWidth = " <<fbeamWidthFit.BeamWidthX() <<" +/- "<<fbeamWidthFit.BeamWidthXError() << std::endl;
620  outFile.close();
621 }
622 
624  std::ofstream outFile;
625 
626  std::string tmpname = outputTxt_;
627  char index[15];
629  sprintf(index,"%s%i","_Run", frun );
630  tmpname.insert(outputTxt_.length()-4,index);
631  fileName = tmpname;
632  ffilename_changed = true;
633  }
634 
635  if (!append)
636  outFile.open(fileName.c_str());
637  else
638  outFile.open(fileName.c_str(),std::ios::app);
639 
641 
642  for (std::map<int,reco::BeamSpot>::const_iterator abspot = fbspotPVMap.begin(); abspot!= fbspotPVMap.end(); ++abspot) {
643  reco::BeamSpot beamspottmp = abspot->second;
644  int bx = abspot->first;
645 
646  outFile << "Runnumber " << frun << " bx " << bx << std::endl;
647  outFile << "BeginTimeOfFit " << fbeginTimeOfFit << " " << freftime[0] << std::endl;
648  outFile << "EndTimeOfFit " << fendTimeOfFit << " " << freftime[1] << std::endl;
649  outFile << "LumiRange " << fbeginLumiOfFit << " - " << fendLumiOfFit << std::endl;
650  outFile << "Type " << beamspottmp.type() << std::endl;
651  outFile << "X0 " << beamspottmp.x0() << std::endl;
652  outFile << "Y0 " << beamspottmp.y0() << std::endl;
653  outFile << "Z0 " << beamspottmp.z0() << std::endl;
654  outFile << "sigmaZ0 " << beamspottmp.sigmaZ() << std::endl;
655  outFile << "dxdz " << beamspottmp.dxdz() << std::endl;
656  outFile << "dydz " << beamspottmp.dydz() << std::endl;
657  outFile << "BeamWidthX " << beamspottmp.BeamWidthX() << std::endl;
658  outFile << "BeamWidthY " << beamspottmp.BeamWidthY() << std::endl;
659  for (int i = 0; i<6; ++i) {
660  outFile << "Cov("<<i<<",j) ";
661  for (int j=0; j<7; ++j) {
662  outFile << beamspottmp.covariance(i,j) << " ";
663  }
664  outFile << std::endl;
665  }
666  outFile << "Cov(6,j) 0 0 0 0 0 0 " << beamspottmp.covariance(6,6) << std::endl;
667  //}
668  outFile << "EmittanceX " << beamspottmp.emittanceX() << std::endl;
669  outFile << "EmittanceY " << beamspottmp.emittanceY() << std::endl;
670  outFile << "BetaStar " << beamspottmp.betaStar() << std::endl;
671 
672  }
673  }//if bx results needed
674  else {
675  outFile << "Runnumber " << frun << std::endl;
676  outFile << "BeginTimeOfFit " << fbeginTimeOfFit << " " << freftime[0] << std::endl;
677  outFile << "EndTimeOfFit " << fendTimeOfFit << " " << freftime[1] << std::endl;
678  outFile << "LumiRange " << fbeginLumiOfFit << " - " << fendLumiOfFit << std::endl;
679  outFile << "Type " << fbeamspot.type() << std::endl;
680  outFile << "X0 " << fbeamspot.x0() << std::endl;
681  outFile << "Y0 " << fbeamspot.y0() << std::endl;
682  outFile << "Z0 " << fbeamspot.z0() << std::endl;
683  outFile << "sigmaZ0 " << fbeamspot.sigmaZ() << std::endl;
684  outFile << "dxdz " << fbeamspot.dxdz() << std::endl;
685  outFile << "dydz " << fbeamspot.dydz() << std::endl;
686  // if (inputBeamWidth_ > 0 ) {
687  // outFile << "BeamWidthX " << inputBeamWidth_ << std::endl;
688  // outFile << "BeamWidthY " << inputBeamWidth_ << std::endl;
689  // } else {
690  outFile << "BeamWidthX " << fbeamspot.BeamWidthX() << std::endl;
691  outFile << "BeamWidthY " << fbeamspot.BeamWidthY() << std::endl;
692  // }
693 
694  for (int i = 0; i<6; ++i) {
695  outFile << "Cov("<<i<<",j) ";
696  for (int j=0; j<7; ++j) {
697  outFile << fbeamspot.covariance(i,j) << " ";
698  }
699  outFile << std::endl;
700  }
701 
702  // beam width error
703  //if (inputBeamWidth_ > 0 ) {
704  // outFile << "Cov(6,j) 0 0 0 0 0 0 " << "1e-4" << std::endl;
705  //} else {
706  outFile << "Cov(6,j) 0 0 0 0 0 0 " << fbeamspot.covariance(6,6) << std::endl;
707  //}
708  outFile << "EmittanceX " << fbeamspot.emittanceX() << std::endl;
709  outFile << "EmittanceY " << fbeamspot.emittanceY() << std::endl;
710  outFile << "BetaStar " << fbeamspot.betaStar() << std::endl;
711 
712  //write here Pv info for DIP only: This added only if append is false, which happen for DIP only :)
713  if(!append){
714  outFile << "events "<< (int)ForDIPPV_[0] << std::endl;
715  outFile << "meanPV "<< ForDIPPV_[1] << std::endl;
716  outFile << "meanErrPV "<< ForDIPPV_[2] << std::endl;
717  outFile << "rmsPV "<< ForDIPPV_[3] << std::endl;
718  outFile << "rmsErrPV "<< ForDIPPV_[4] << std::endl;
719  outFile << "maxPV "<< (int)ForDIPPV_[5] << std::endl;
720  outFile << "nPV "<< (int)ForDIPPV_[6] << std::endl;
721  }//writeDIPPVInfo_
722  }//else end here
723 
724  outFile.close();
725 }
726 
728  BeamSpotObjects *pBSObjects = new BeamSpotObjects();
729 
730  pBSObjects->SetPosition(fbeamspot.position().X(),fbeamspot.position().Y(),fbeamspot.position().Z());
731  //std::cout << " wrote: x= " << fbeamspot.position().X() << " y= "<< fbeamspot.position().Y() << " z= " << fbeamspot.position().Z() << std::endl;
732  pBSObjects->SetSigmaZ(fbeamspot.sigmaZ());
733  pBSObjects->Setdxdz(fbeamspot.dxdz());
734  pBSObjects->Setdydz(fbeamspot.dydz());
735  //if (inputBeamWidth_ > 0 ) {
736  // std::cout << " beam width value forced to be " << inputBeamWidth_ << std::endl;
737  // pBSObjects->SetBeamWidthX(inputBeamWidth_);
738  // pBSObjects->SetBeamWidthY(inputBeamWidth_);
739  //} else {
740  // need to fix this
741  //std::cout << " using default value, 15e-4, for beam width!!!"<<std::endl;
742  pBSObjects->SetBeamWidthX(fbeamspot.BeamWidthX() );
743  pBSObjects->SetBeamWidthY(fbeamspot.BeamWidthY() );
744  //}
745 
746  for (int i = 0; i<7; ++i) {
747  for (int j=0; j<7; ++j) {
748  pBSObjects->SetCovariance(i,j,fbeamspot.covariance(i,j));
749  }
750  }
752  if( poolDbService.isAvailable() ) {
753  std::cout << "poolDBService available"<<std::endl;
754  if ( poolDbService->isNewTagRequest( "BeamSpotObjectsRcd" ) ) {
755  std::cout << "new tag requested" << std::endl;
756  poolDbService->createNewIOV<BeamSpotObjects>( pBSObjects, poolDbService->beginOfTime(),poolDbService->endOfTime(),
757  "BeamSpotObjectsRcd" );
758  }
759  else {
760  std::cout << "no new tag requested" << std::endl;
761  poolDbService->appendSinceTime<BeamSpotObjects>( pBSObjects, poolDbService->currentTime(),
762  "BeamSpotObjectsRcd" );
763  }
764  }
765 }
766 
768  if(fBSvector.size()!=0){
769  BSFitter *myalgo = new BSFitter( fBSvector );
770  fbeamspot = myalgo->Fit_d0phi();
771 
772  // iterative
773  if(debug_)
774  std::cout << " d0-phi Iterative:" << std::endl;
775  BSFitter *myitealgo = new BSFitter( fBSvector );
776  myitealgo->Setd0Cut_d0phi(4.0);
777  reco::BeamSpot beam_ite = myitealgo->Fit_ited0phi();
778  if (debug_){
779  std::cout << beam_ite << std::endl;
780  std::cout << "\n Now run tests of the different fits\n";
781  }
782  // from here are just tests
783  std::string fit_type = "chi2";
784  myalgo->SetFitVariable(std::string("z"));
785  myalgo->SetFitType(std::string("chi2"));
786  reco::BeamSpot beam_fit_z_chi2 = myalgo->Fit();
787  if (debug_){
788  std::cout << " z Chi2 Fit ONLY:" << std::endl;
789  std::cout << beam_fit_z_chi2 << std::endl;
790  }
791 
792  fit_type = "combined";
793  myalgo->SetFitVariable("z");
794  myalgo->SetFitType("combined");
795  reco::BeamSpot beam_fit_z_lh = myalgo->Fit();
796  if (debug_){
797  std::cout << " z Log-Likelihood Fit ONLY:" << std::endl;
798  std::cout << beam_fit_z_lh << std::endl;
799  }
800 
801  myalgo->SetFitVariable("d");
802  myalgo->SetFitType("d0phi");
803  reco::BeamSpot beam_fit_dphi = myalgo->Fit();
804  if (debug_){
805  std::cout << " d0-phi0 Fit ONLY:" << std::endl;
806  std::cout << beam_fit_dphi << std::endl;
807  }
808  /*
809  myalgo->SetFitVariable(std::string("d*z"));
810  myalgo->SetFitType(std::string("likelihood"));
811  reco::BeamSpot beam_fit_dz_lh = myalgo->Fit();
812  if (debug_){
813  std::cout << " Log-Likelihood Fit:" << std::endl;
814  std::cout << beam_fit_dz_lh << std::endl;
815  }
816 
817  myalgo->SetFitVariable(std::string("d*z"));
818  myalgo->SetFitType(std::string("resolution"));
819  reco::BeamSpot beam_fit_dresz_lh = myalgo->Fit();
820  if(debug_){
821  std::cout << " IP Resolution Fit" << std::endl;
822  std::cout << beam_fit_dresz_lh << std::endl;
823 
824  std::cout << "c0 = " << myalgo->GetResPar0() << " +- " << myalgo->GetResPar0Err() << std::endl;
825  std::cout << "c1 = " << myalgo->GetResPar1() << " +- " << myalgo->GetResPar1Err() << std::endl;
826  }
827  */
828  }
829  else
830  if (debug_) std::cout << "No good track selected! No beam fit!" << std::endl;
831 }
832 
RunNumber_t run() const
Definition: EventID.h:39
int stripTOBLayersWithMeasurement() const
Definition: HitPattern.cc:598
math::Error< dimension >::type CovarianceMatrix
Definition: BeamSpot.h:31
T getParameter(std::string const &) const
double trk_MaxZ_
Definition: BeamFitter.h:158
double trk_MaxEta_
Definition: BeamFitter.h:159
reco::BeamSpot fbeamspot
Definition: BeamFitter.h:140
double z0() const
z coordinate
Definition: BeamSpot.h:68
T getUntrackedParameter(std::string const &, T const &) const
double fwidthXErr
Definition: BeamFitter.h:242
double fwidthX
Definition: BeamFitter.h:240
std::vector< std::string > trk_Algorithm_
Definition: BeamFitter.h:164
double sigmaZ0Error() const
error on sigma z
Definition: BeamSpot.h:96
void setTree(TTree *tree)
Definition: PVFitter.cc:185
int fendLumiOfFit
Definition: BeamFitter.h:225
double fwidthY
Definition: BeamFitter.h:241
int countPass[9]
Definition: BeamFitter.h:248
bool isMuon_
Definition: BeamFitter.h:172
bool runPVandTrkFitter()
Definition: BeamFitter.cc:397
void write2DB()
Definition: BeamFitter.cc:727
int stripTIBLayersWithMeasurement() const
Definition: HitPattern.cc:576
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:460
reco::BeamSpot Fit()
Definition: BSFitter.cc:108
char fendTimeOfFit[32]
Definition: BeamFitter.h:227
double dydzError() const
error on dydz
Definition: BeamSpot.h:100
double fdxdz
Definition: BeamFitter.h:232
double fx
Definition: BeamFitter.h:228
double fnormchi2
Definition: BeamFitter.h:192
bool ffilename_changed
Definition: BeamFitter.h:174
bool debug_
Definition: BeamFitter.h:147
std::map< int, reco::BeamSpot > getBeamSpotMap()
Definition: PVFitter.h:92
bool runBeamWidthFitter()
Definition: BeamFitter.cc:578
void SetSigmaZ(double val)
set sigma Z, RMS bunch length
TH1F * h1z
Definition: BeamFitter.h:181
void SetMaximumZ(double z)
Definition: BSFitter.h:61
int fnTOBLayerMeas
Definition: BeamFitter.h:204
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
double feta
Definition: BeamFitter.h:190
std::vector< std::string > trk_Quality_
Definition: BeamFitter.h:165
double convergence_
Definition: BeamFitter.h:169
double trk_MaxNormChi2_
Definition: BeamFitter.h:163
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:63
void dumpBWTxtFile(std::string &)
Definition: BeamFitter.cc:613
size_type size() const
double fsigmaZErr
Definition: BeamFitter.h:237
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
TH1F * h1vz_event
Definition: BeamFitter.h:246
void SetCovariance(int i, int j, double val)
set i,j element of the full covariance matrix 7x7
double fvy
Definition: BeamFitter.h:212
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:493
void SetInputBeamWidth(double val)
Definition: BSFitter.h:66
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
void Setdydz(double val)
set dydz slope, crossing angle in XZ
int fnPixelLayerMeas
Definition: BeamFitter.h:200
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:512
int pixelEndcapLayersWithMeasurement() const
Definition: HitPattern.cc:564
void readEvent(const edm::Event &iEvent)
Definition: BeamFitter.cc:215
double fphi0
Definition: BeamFitter.h:193
std::ofstream fasciiDIP
Definition: BeamFitter.h:145
double emittanceX() const
additional information
Definition: BeamSpot.h:136
void setType(BeamType type)
set beam type
Definition: BeamSpot.h:131
reco::BeamSpot fbeamWidthFit
Definition: BeamFitter.h:141
std::time_t freftime[2]
Definition: BeamFitter.h:219
PVFitter * MyPVFitter
Definition: BeamFitter.h:250
double betaStar() const
Definition: BeamSpot.h:138
std::vector< BSTrkParameters > fBSvector
Definition: BeamFitter.h:139
int fnTotLayerMeas
Definition: BeamFitter.h:199
double dydz() const
dydz slope
Definition: BeamSpot.h:84
std::string outputTxt_
Definition: BeamFitter.h:155
void appendSinceTime(T *payloadObj, cond::Time_t sinceTime, const std::string &recordName, bool withlogging=false)
double fpvx
Definition: BeamFitter.h:218
int iEvent
Definition: GenABIO.cc:230
double fdxdzErr
Definition: BeamFitter.h:238
double trk_MaxIP_
Definition: BeamFitter.h:160
void readEvent(const edm::Event &iEvent)
Definition: PVFitter.cc:97
bool runFitter()
Definition: BeamFitter.cc:567
void setBeamWidthY(double v)
Definition: BeamSpot.h:109
double emittanceY() const
Definition: BeamSpot.h:137
bool runFitterNoTxt()
Definition: BeamFitter.cc:499
TFile * file_
Definition: BeamFitter.h:186
double dxdzError() const
error on dxdz
Definition: BeamSpot.h:98
TTree * ftree_
Definition: BeamFitter.h:187
double fyErr
Definition: BeamFitter.h:235
bool falgo
Definition: BeamFitter.h:216
bool isNewTagRequest(const std::string &recordName)
int ftotal_tracks
Definition: BeamFitter.h:170
int min_Ntrks_
Definition: BeamFitter.h:171
int stripTIDLayersWithMeasurement() const
Definition: HitPattern.cc:587
T sqrt(T t)
Definition: SSEVec.h:18
TH1F * h1cutFlow
Definition: BeamFitter.h:247
double fdydz
Definition: BeamFitter.h:233
TTree * fPVTree_
Definition: BeamFitter.h:251
std::vector< reco::TrackBase::TrackAlgorithm > algorithm_
Definition: BeamFitter.h:167
bool isAvailable() const
Definition: Service.h:46
TH1F * h1ntrks
Definition: BeamFitter.h:245
char fbeginTimeOfFit[32]
Definition: BeamFitter.h:226
double fpvz
Definition: BeamFitter.h:218
def pv(vc)
Definition: MetAnalyzer.py:6
double fz0
Definition: BeamFitter.h:197
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double ftheta
Definition: BeamFitter.h:188
double BeamWidthX() const
beam width X
Definition: BeamSpot.h:86
double fd0
Definition: BeamFitter.h:194
bool fquality
Definition: BeamFitter.h:215
double fy
Definition: BeamFitter.h:229
void Setdxdz(double val)
set dxdz slope, crossing angle
double BeamWidthYError() const
error on beam width Y, assume error in X = Y
Definition: BeamSpot.h:105
int fnStripLayerMeas
Definition: BeamFitter.h:201
double BeamWidthXError() const
error on beam width X, assume error in X = Y
Definition: BeamSpot.h:103
double z0Error() const
error on z
Definition: BeamSpot.h:94
double fwidthYErr
Definition: BeamFitter.h:243
unsigned long long TimeValue_t
Definition: Timestamp.h:28
double fxErr
Definition: BeamFitter.h:234
bool appendRunTxt_
Definition: BeamFitter.h:148
void setVx(double vx)
int fnTIDLayerMeas
Definition: BeamFitter.h:203
void createNewIOV(T *firstPayloadObj, cond::Time_t firstSinceTime, cond::Time_t firstTillTime, const std::string &recordName, bool withlogging=false)
double dxdz() const
dxdz slope
Definition: BeamSpot.h:82
bool saveNtuple_
Definition: BeamFitter.h:182
double x0Error() const
error on x
Definition: BeamSpot.h:90
double y0Error() const
error on y
Definition: BeamSpot.h:92
int k[5][pyjets_maxn]
double fsigmaZ
Definition: BeamFitter.h:231
int fbeginLumiOfFit
Definition: BeamFitter.h:224
std::string outputfilename_
Definition: BeamFitter.h:185
bool writeTxt_
Definition: BeamFitter.h:152
double fsigmad0
Definition: BeamFitter.h:196
std::string outputDIPTxt_
Definition: BeamFitter.h:156
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:125
bool fpvValid
Definition: BeamFitter.h:217
double fdydzErr
Definition: BeamFitter.h:239
virtual ~BeamFitter()
Definition: BeamFitter.cc:187
void dumpTxtFile(std::string &, bool)
Definition: BeamFitter.cc:623
std::vector< float > ForDIPPV_
Definition: BeamFitter.h:177
T const * product() const
Definition: Handle.h:81
double inputBeamWidth_
Definition: BeamFitter.h:168
reco::BeamSpot Fit_ited0phi()
Definition: BSFitter.cc:401
bool savePVVertices_
Definition: BeamFitter.h:184
bool runFitter()
Definition: PVFitter.cc:314
void SetFitVariable(std::string name)
Definition: BSFitter.h:45
void updateBTime()
Definition: BeamFitter.cc:28
double sigmaZ() const
sigma z
Definition: BeamSpot.h:80
int stripLayersWithMeasurement() const
Definition: HitPattern.h:1035
int pixelBarrelLayersWithMeasurement() const
Definition: HitPattern.cc:552
double BeamWidthY() const
beam width Y
Definition: BeamSpot.h:88
void runAllFitter()
Definition: BeamFitter.cc:767
void SetMinimumNTrks(int n)
Definition: BSFitter.h:63
void resetAll()
Definition: PVFitter.h:80
bool writeDIPTxt_
Definition: BeamFitter.h:153
double fvx
Definition: BeamFitter.h:211
void setVy(double vy)
void SetBeamWidthX(double val)
set average transverse beam width X
double fpt
Definition: BeamFitter.h:189
void SetBeamWidthY(double val)
set average transverse beam width Y
bool runBXFitter()
Definition: PVFitter.cc:190
void Setd0Cut_d0phi(double d0cut)
Definition: BSFitter.cc:641
std::map< int, reco::BeamSpot > fbspotPVMap
Definition: BeamFitter.h:142
double covariance(int i, int j) const
(i,j)-th element of error matrix
Definition: BeamSpot.h:112
edm::EventID id() const
Definition: EventBase.h:60
double fcov[7][7]
Definition: BeamFitter.h:210
std::vector< reco::TrackBase::TrackQuality > quality_
Definition: BeamFitter.h:166
double fsigmaz0
Definition: BeamFitter.h:198
int trk_MinNPixLayers_
Definition: BeamFitter.h:162
int fnTIBLayerMeas
Definition: BeamFitter.h:202
TH1F * GetVzHisto()
Definition: BSFitter.h:105
TTree * ftreeFit_
Definition: BeamFitter.h:222
int stripTECLayersWithMeasurement() const
Definition: HitPattern.cc:609
static TrackAlgorithm algoByName(const std::string &name)
Definition: TrackBase.cc:137
double y0() const
y coordinate
Definition: BeamSpot.h:66
void resetCutFlow()
Definition: BeamFitter.h:105
double fd0bs
Definition: BeamFitter.h:195
const Point & position() const
position
Definition: BeamSpot.h:62
edm::EDGetTokenT< reco::TrackCollection > tracksToken_
Definition: BeamFitter.h:149
double trk_MinpT_
Definition: BeamFitter.h:157
reco::BeamSpot getBeamSpot()
Definition: PVFitter.h:91
bool writeDIPBadFit_
Definition: BeamFitter.h:154
void SetConvergence(double val)
Definition: BSFitter.h:62
reco::BeamSpot Fit_d0phi()
Definition: BSFitter.cc:457
double fzErr
Definition: BeamFitter.h:236
int fnPXBLayerMeas
Definition: BeamFitter.h:206
TimeValue_t value() const
Definition: Timestamp.h:56
bool IsFitPerBunchCrossing()
Definition: PVFitter.h:93
edm::Timestamp time() const
Definition: EventBase.h:61
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double fpvy
Definition: BeamFitter.h:218
bool saveBeamFit_
Definition: BeamFitter.h:183
edm::EDGetTokenT< edm::View< reco::Vertex > > vertexToken_
Definition: BeamFitter.h:150
double fz
Definition: BeamFitter.h:230
double getWidthXerr()
Definition: PVFitter.h:57
bool fitted_
Definition: BeamFitter.h:173
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
Definition: BeamFitter.h:151
int fnPXFLayerMeas
Definition: BeamFitter.h:207
BeamType type() const
return beam type
Definition: BeamSpot.h:129
int fnTECLayerMeas
Definition: BeamFitter.h:205
int trk_MinNTotLayers_
Definition: BeamFitter.h:161
void SetPosition(double x, double y, double z)
set XYZ position
double x0() const
x coordinate
Definition: BeamSpot.h:64
void resetRefTime()
Definition: BeamFitter.h:56
void SetFitType(std::string type)
Definition: BSFitter.h:41