CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
PVFitter Class Reference

#include <PVFitter.h>

Public Member Functions

void compressStore ()
 reduce size of primary vertex cache by increasing quality limit More...
 
void dumpTxtFile ()
 
void FitPerBunchCrossing ()
 
reco::BeamSpot getBeamSpot ()
 
std::map< int, reco::BeamSpotgetBeamSpotMap ()
 
int * getFitLSRange ()
 
int getNPVs ()
 
const std::map< int, int > & getNPVsperBX ()
 
std::vector< BeamSpotFitPVDatagetpvStore ()
 
time_t * getRefTime ()
 
double getWidthX ()
 
double getWidthXerr ()
 
double getWidthY ()
 
double getWidthYerr ()
 
double getWidthZ ()
 
double getWidthZerr ()
 
void initialize (const edm::ParameterSet &iConfig, edm::ConsumesCollector &iColl)
 
bool IsFitPerBunchCrossing ()
 
 PVFitter ()
 
 PVFitter (const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iColl)
 
 PVFitter (const edm::ParameterSet &iConfig, edm::ConsumesCollector &iColl)
 
double pvQuality (const reco::Vertex &pv) const
 vertex quality measure More...
 
double pvQuality (const BeamSpotFitPVData &pv) const
 vertex quality measure More...
 
void readEvent (const edm::Event &iEvent)
 
void resetAll ()
 
void resetLSRange ()
 
void resetRefTime ()
 
void resizepvStore (unsigned int rmSize)
 
bool runBXFitter ()
 
bool runFitter ()
 
void setFitLSRange (int ls0, int ls1)
 
void setRefTime (std::time_t t0, std::time_t t1)
 
void setTree (TTree *tree)
 
virtual ~PVFitter ()
 

Private Attributes

std::map< int, std::vector< BeamSpotFitPVData > > bxMap_
 
bool debug_
 
bool do3DFit_
 
double dynamicQualityCut_
 
double errorScale_
 
std::ofstream fasciiFile
 
reco::BeamSpot fbeamspot
 
int fbeginLumiOfFit
 
std::map< int, reco::BeamSpotfbspotMap
 
int fendLumiOfFit
 
bool fFitPerBunchCrossing
 
std::time_t freftime [2]
 
TTree * ftree_
 
double fwidthX
 
double fwidthXerr
 
double fwidthY
 
double fwidthYerr
 
double fwidthZ
 
double fwidthZerr
 
TH2F * hPVx
 
TH2F * hPVy
 
unsigned int maxNrVertices_
 
double maxVtxNormChi2_
 
double maxVtxR_
 
double maxVtxZ_
 
unsigned int minNrVertices_
 
double minSumPt_
 
double minVtxNdf_
 
unsigned int minVtxTracks_
 
double minVtxWgt_
 
std::map< int, int > npvsmap_
 
std::string outputTxt_
 
std::vector< double > pvQualities_
 
std::vector< BeamSpotFitPVDatapvStore_
 
double sigmaCut_
 
BeamSpotTreeData theBeamSpotTreeData_
 
bool useOnlyFirstPV_
 
edm::EDGetTokenT< reco::VertexCollectionvertexToken_
 

Detailed Description

Definition at line 43 of file PVFitter.h.

Constructor & Destructor Documentation

PVFitter::PVFitter ( )
inline

Definition at line 45 of file PVFitter.h.

References iEvent, initialize(), and d0_phi_analyzer_cff::PVFitter.

45 {}
PVFitter::PVFitter ( const edm::ParameterSet iConfig,
edm::ConsumesCollector &&  iColl 
)

Definition at line 46 of file PVFitter.cc.

References initialize().

48  : ftree_(nullptr)
49 {
50  initialize(iConfig, iColl);
51 }
void initialize(const edm::ParameterSet &iConfig, edm::ConsumesCollector &iColl)
Definition: PVFitter.cc:60
TTree * ftree_
Definition: PVFitter.h:166
PVFitter::PVFitter ( const edm::ParameterSet iConfig,
edm::ConsumesCollector iColl 
)

Definition at line 53 of file PVFitter.cc.

References initialize().

55  :ftree_(nullptr)
56 {
57  initialize(iConfig, iColl);
58 }
void initialize(const edm::ParameterSet &iConfig, edm::ConsumesCollector &iColl)
Definition: PVFitter.cc:60
TTree * ftree_
Definition: PVFitter.h:166
PVFitter::~PVFitter ( )
virtual

Definition at line 94 of file PVFitter.cc.

94  {
95 
96 }

Member Function Documentation

void PVFitter::compressStore ( )

reduce size of primary vertex cache by increasing quality limit

Definition at line 486 of file PVFitter.cc.

References dynamicQualityCut_, mps_fire::i, pvQualities_, pvQuality(), and pvStore_.

Referenced by readEvent().

487 {
488  //
489  // fill vertex qualities
490  //
491  pvQualities_.resize(pvStore_.size());
492  for ( unsigned int i=0; i<pvStore_.size(); ++i ) pvQualities_[i] = pvQuality(pvStore_[i]);
493  sort(pvQualities_.begin(),pvQualities_.end());
494  //
495  // Set new quality cut to median. This cut will be used to reduce the
496  // number of vertices in the store and also apply to all new vertices
497  // until the next reset
498  //
500  //
501  // remove all vertices failing the cut from the store
502  // (to be moved to a more efficient memory management!)
503  //
504  unsigned int iwrite(0);
505  for ( unsigned int i=0; i<pvStore_.size(); ++i ) {
506  if ( pvQuality(pvStore_[i])>dynamicQualityCut_ ) continue;
507  if ( i!=iwrite ) pvStore_[iwrite] = pvStore_[i];
508  ++iwrite;
509  }
510  pvStore_.resize(iwrite);
511  edm::LogInfo("PVFitter") << "Reduced primary vertex store size to "
512  << pvStore_.size() << " ; new dynamic quality cut = "
513  << dynamicQualityCut_ << std::endl;
514 
515 }
std::vector< double > pvQualities_
Definition: PVFitter.h:181
double dynamicQualityCut_
Definition: PVFitter.h:180
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:178
double pvQuality(const reco::Vertex &pv) const
vertex quality measure
Definition: PVFitter.cc:518
void PVFitter::dumpTxtFile ( )

Definition at line 480 of file PVFitter.cc.

480  {
481 
482 }
void PVFitter::FitPerBunchCrossing ( )
inline

Definition at line 63 of file PVFitter.h.

63 { fFitPerBunchCrossing = true; }
bool fFitPerBunchCrossing
Definition: PVFitter.h:140
reco::BeamSpot PVFitter::getBeamSpot ( )
inline

Definition at line 91 of file PVFitter.h.

Referenced by AlcaBeamMonitor::endLuminosityBlock(), and BeamFitter::runPVandTrkFitter().

91 { return fbeamspot; }
reco::BeamSpot fbeamspot
Definition: PVFitter.h:138
std::map<int, reco::BeamSpot> PVFitter::getBeamSpotMap ( )
inline

Definition at line 92 of file PVFitter.h.

Referenced by BeamFitter::runPVandTrkFitter().

92 { return fbspotMap; }
std::map< int, reco::BeamSpot > fbspotMap
Definition: PVFitter.h:139
int* PVFitter::getFitLSRange ( )
inline

Definition at line 94 of file PVFitter.h.

References tmp.

94  {
95  int *tmp=new int[2];
96  tmp[0] = fbeginLumiOfFit;
97  tmp[1] = fendLumiOfFit;
98  return tmp;
99  }
int fbeginLumiOfFit
Definition: PVFitter.h:169
int fendLumiOfFit
Definition: PVFitter.h:170
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
int PVFitter::getNPVs ( )
inline

Definition at line 120 of file PVFitter.h.

120 { return pvStore_.size(); }
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:178
const std::map<int, int>& PVFitter::getNPVsperBX ( )
inline

Definition at line 122 of file PVFitter.h.

References genParticles_cff::map, and findQualityFiles::size.

122  {
123 
124  npvsmap_.clear();
125 
126  for ( std::map<int,std::vector<BeamSpotFitPVData> >::const_iterator pvStore = bxMap_.begin();
127  pvStore!=bxMap_.end(); ++pvStore) {
128 
129  npvsmap_[ pvStore->first ] = (pvStore->second).size();
130 
131  }
132  return npvsmap_;
133  }
size
Write out results.
std::map< int, std::vector< BeamSpotFitPVData > > bxMap_
Definition: PVFitter.h:179
std::map< int, int > npvsmap_
Definition: PVFitter.h:137
std::vector<BeamSpotFitPVData> PVFitter::getpvStore ( )
inline

Definition at line 61 of file PVFitter.h.

61 { return pvStore_; }
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:178
time_t* PVFitter::getRefTime ( )
inline

Definition at line 101 of file PVFitter.h.

101  {
102  time_t *tmptime=new time_t[2];
103  tmptime[0]=freftime[0];
104  tmptime[1]=freftime[1];
105  return tmptime;
106  }
std::time_t freftime[2]
Definition: PVFitter.h:162
double PVFitter::getWidthX ( )
inline

Definition at line 54 of file PVFitter.h.

54 { return fwidthX; }
double fwidthX
Definition: PVFitter.h:171
double PVFitter::getWidthXerr ( )
inline

Definition at line 57 of file PVFitter.h.

Referenced by BeamFitter::runPVandTrkFitter().

57 { return fwidthXerr; }
double fwidthXerr
Definition: PVFitter.h:174
double PVFitter::getWidthY ( )
inline

Definition at line 55 of file PVFitter.h.

55 { return fwidthY; }
double fwidthY
Definition: PVFitter.h:172
double PVFitter::getWidthYerr ( )
inline

Definition at line 58 of file PVFitter.h.

58 { return fwidthYerr; }
double fwidthYerr
Definition: PVFitter.h:175
double PVFitter::getWidthZ ( )
inline

Definition at line 56 of file PVFitter.h.

56 { return fwidthZ; }
double fwidthZ
Definition: PVFitter.h:173
double PVFitter::getWidthZerr ( )
inline

Definition at line 59 of file PVFitter.h.

59 { return fwidthZerr; }
double fwidthZerr
Definition: PVFitter.h:176
void PVFitter::initialize ( const edm::ParameterSet iConfig,
edm::ConsumesCollector iColl 
)

Definition at line 60 of file PVFitter.cc.

References edm::ConsumesCollector::consumes(), debug_, do3DFit_, dynamicQualityCut_, errorScale_, fFitPerBunchCrossing, edm::ParameterSet::getParameter(), hPVx, hPVy, maxNrVertices_, maxVtxNormChi2_, maxVtxR_, maxVtxZ_, minNrVertices_, minSumPt_, minVtxNdf_, minVtxTracks_, minVtxWgt_, sigmaCut_, useOnlyFirstPV_, and vertexToken_.

Referenced by PVFitter().

62 {
63  //In order to make fitting ROOT histograms thread safe
64  // one must call this undocumented function
65  TMinuitMinimizer::UseStaticMinuit(false);
66  debug_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("Debug");
68  iConfig.getParameter<edm::ParameterSet>("PVFitter")
69  .getUntrackedParameter<edm::InputTag>("VertexCollection", edm::InputTag("offlinePrimaryVertices")));
70  do3DFit_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("Apply3DFit");
71  //writeTxt_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("WriteAscii");
72  //outputTxt_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<std::string>("AsciiFileName");
73  maxNrVertices_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<unsigned int>("maxNrStoredVertices");
74  minNrVertices_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<unsigned int>("minNrVerticesForFit");
75  minVtxNdf_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("minVertexNdf");
76  maxVtxNormChi2_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("maxVertexNormChi2");
77  minVtxTracks_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<unsigned int>("minVertexNTracks");
78  minVtxWgt_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("minVertexMeanWeight");
79  maxVtxR_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("maxVertexR");
80  maxVtxZ_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("maxVertexZ");
81  errorScale_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("errorScale");
82  sigmaCut_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("nSigmaCut");
83  fFitPerBunchCrossing=iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("FitPerBunchCrossing");
84  useOnlyFirstPV_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<bool>("useOnlyFirstPV");
85  minSumPt_ = iConfig.getParameter<edm::ParameterSet>("PVFitter").getUntrackedParameter<double>("minSumPt");
86 
87  // preset quality cut to "infinite"
88  dynamicQualityCut_ = 1.e30;
89 
90  hPVx = new TH2F("hPVx","PVx vs PVz distribution",200,-maxVtxR_, maxVtxR_, 200, -maxVtxZ_, maxVtxZ_);
91  hPVy = new TH2F("hPVy","PVy vs PVz distribution",200,-maxVtxR_, maxVtxR_, 200, -maxVtxZ_, maxVtxZ_);
92 }
double minSumPt_
Definition: PVFitter.h:160
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
bool debug_
Definition: PVFitter.h:145
double maxVtxNormChi2_
Definition: PVFitter.h:153
double minVtxWgt_
Definition: PVFitter.h:155
bool useOnlyFirstPV_
Definition: PVFitter.h:141
double minVtxNdf_
Definition: PVFitter.h:152
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
double errorScale_
Definition: PVFitter.h:158
bool do3DFit_
Definition: PVFitter.h:146
double dynamicQualityCut_
Definition: PVFitter.h:180
bool fFitPerBunchCrossing
Definition: PVFitter.h:140
TH2F * hPVy
Definition: PVFitter.h:164
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
Definition: PVFitter.h:147
double maxVtxR_
Definition: PVFitter.h:156
double maxVtxZ_
Definition: PVFitter.h:157
unsigned int maxNrVertices_
Definition: PVFitter.h:150
unsigned int minVtxTracks_
Definition: PVFitter.h:154
TH2F * hPVx
Definition: PVFitter.h:164
unsigned int minNrVertices_
Definition: PVFitter.h:151
double sigmaCut_
Definition: PVFitter.h:159
bool PVFitter::IsFitPerBunchCrossing ( )
inline

Definition at line 93 of file PVFitter.h.

Referenced by BeamFitter::dumpTxtFile(), and BeamFitter::runPVandTrkFitter().

93 { return fFitPerBunchCrossing; }
bool fFitPerBunchCrossing
Definition: PVFitter.h:140
double PVFitter::pvQuality ( const reco::Vertex pv) const

vertex quality measure

Definition at line 518 of file PVFitter.cc.

References reco::Vertex::covariance().

Referenced by compressStore(), and readEvent().

519 {
520  //
521  // determinant of the transverse part of the PV covariance matrix
522  //
523  return
524  pv.covariance(0,0)*pv.covariance(1,1)-
525  pv.covariance(0,1)*pv.covariance(0,1);
526 }
double covariance(int i, int j) const
(i, j)-th element of error matrix, i, j = 0, ... 2
Definition: Vertex.h:130
double PVFitter::pvQuality ( const BeamSpotFitPVData pv) const

vertex quality measure

Definition at line 529 of file PVFitter.cc.

References BeamSpotFitPVData::posCorr, and BeamSpotFitPVData::posError.

530 {
531  //
532  // determinant of the transverse part of the PV covariance matrix
533  //
534  double ex = pv.posError[0];
535  double ey = pv.posError[1];
536  return ex*ex*ey*ey*(1-pv.posCorr[0]*pv.posCorr[0]);
537 }
void PVFitter::readEvent ( const edm::Event iEvent)

Definition at line 99 of file PVFitter.cc.

References BeamSpotFitPVData::bunchCrossing, BeamSpotTreeData::bunchCrossing(), edm::EventBase::bunchCrossing(), bxMap_, compressStore(), dynamicQualityCut_, fFitPerBunchCrossing, ftree_, edm::Event::getByToken(), hPVx, hPVy, edm::EventBase::id(), BeamSpotTreeData::lumi(), edm::EventBase::luminosityBlock(), maxNrVertices_, minSumPt_, minVtxNdf_, minVtxTracks_, minVtxWgt_, BeamSpotFitPVData::posCorr, BeamSpotFitPVData::posError, BeamSpotFitPVData::position, EnergyCorrector::pt, MetAnalyzer::pv(), BeamSpotTreeData::pvData(), pvQuality(), pvStore_, BeamSpotTreeData::run(), edm::EventID::run(), TtFullHadEvtBuilder_cfi::sumPt, theBeamSpotTreeData_, useOnlyFirstPV_, and vertexToken_.

Referenced by AlcaBeamMonitor::analyze(), and BeamFitter::readEvent().

100 {
101 
102  //------ Primary Vertices
104  bool hasPVs = false;
105 
106  if ( iEvent.getByToken(vertexToken_, PVCollection ) ) {
107  hasPVs = true;
108  }
109  //------
110 
111  if ( hasPVs ) {
112 
113  for (reco::VertexCollection::const_iterator pv = PVCollection->begin(); pv != PVCollection->end(); ++pv ) {
114  if (useOnlyFirstPV_){
115  if (pv != PVCollection->begin()) break;
116  }
117 
118  //--- vertex selection
119  if ( pv->isFake() || pv->tracksSize()==0 ) continue;
120  if ( pv->ndof() < minVtxNdf_ || (pv->ndof()+3.)/pv->tracksSize()<2*minVtxWgt_ ) continue;
121  //---
122 
123  if (pv->tracksSize() < minVtxTracks_ ) continue;
124 
125  const auto& testTrack = pv->trackRefAt(0);
126  if(testTrack.isNull() || !testTrack.isAvailable())
127  {
128  edm::LogInfo("") << "Track collection not found. Skipping cut on sumPt.";
129  }
130  else
131  {
132  double sumPt=0;
133  for(auto iTrack = pv->tracks_begin(); iTrack != pv->tracks_end(); ++iTrack)
134  {
135  const auto pt = (*iTrack)->pt();
136  sumPt += pt;
137  }
138  if (sumPt < minSumPt_) continue;
139  }
140 
141  hPVx->Fill( pv->x(), pv->z() );
142  hPVy->Fill( pv->y(), pv->z() );
143 
144  //
145  // 3D fit section
146  //
147  // apply additional quality cut
148  if ( pvQuality(*pv)>dynamicQualityCut_ ) continue;
149  // if store exceeds max. size: reduce size and apply new quality cut
150  if ( pvStore_.size()>=maxNrVertices_ ) {
151  compressStore();
152  if ( pvQuality(*pv)>dynamicQualityCut_ ) continue;
153  }
154  //
155  // copy PV to store
156  //
157  int bx = iEvent.bunchCrossing();
158  BeamSpotFitPVData pvData;
159  pvData.bunchCrossing = bx;
160  pvData.position[0] = pv->x();
161  pvData.position[1] = pv->y();
162  pvData.position[2] = pv->z();
163  pvData.posError[0] = pv->xError();
164  pvData.posError[1] = pv->yError();
165  pvData.posError[2] = pv->zError();
166  pvData.posCorr[0] = pv->covariance(0,1)/pv->xError()/pv->yError();
167  pvData.posCorr[1] = pv->covariance(0,2)/pv->xError()/pv->zError();
168  pvData.posCorr[2] = pv->covariance(1,2)/pv->yError()/pv->zError();
169  pvStore_.push_back(pvData);
170 
171  if(ftree_ != nullptr){
172  theBeamSpotTreeData_.run(iEvent.id().run());
176  ftree_->Fill();
177  }
178 
179  if (fFitPerBunchCrossing) bxMap_[bx].push_back(pvData);
180 
181  }
182 
183  }
184 
185 }
RunNumber_t run() const
Definition: EventID.h:39
double minSumPt_
Definition: PVFitter.h:160
std::map< int, std::vector< BeamSpotFitPVData > > bxMap_
Definition: PVFitter.h:179
void run(unsigned int run)
void compressStore()
reduce size of primary vertex cache by increasing quality limit
Definition: PVFitter.cc:486
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
double minVtxWgt_
Definition: PVFitter.h:155
bool useOnlyFirstPV_
Definition: PVFitter.h:141
double minVtxNdf_
Definition: PVFitter.h:152
int bunchCrossing() const
Definition: EventBase.h:66
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:63
double dynamicQualityCut_
Definition: PVFitter.h:180
void bunchCrossing(unsigned int bunchCrossing)
void lumi(unsigned int lumi)
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:178
BeamSpotTreeData theBeamSpotTreeData_
Definition: PVFitter.h:183
bool fFitPerBunchCrossing
Definition: PVFitter.h:140
TH2F * hPVy
Definition: PVFitter.h:164
def pv(vc)
Definition: MetAnalyzer.py:6
void pvData(const BeamSpotFitPVData &pvData)
TTree * ftree_
Definition: PVFitter.h:166
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
Definition: PVFitter.h:147
double pvQuality(const reco::Vertex &pv) const
vertex quality measure
Definition: PVFitter.cc:518
unsigned int maxNrVertices_
Definition: PVFitter.h:150
unsigned int minVtxTracks_
Definition: PVFitter.h:154
TH2F * hPVx
Definition: PVFitter.h:164
edm::EventID id() const
Definition: EventBase.h:60
void PVFitter::resetAll ( )
inline

Definition at line 80 of file PVFitter.h.

References align::BeamSpot.

Referenced by BeamFitter::BeamFitter(), and AlcaBeamMonitor::endLuminosityBlock().

80  {
81  resetLSRange();
82  resetRefTime();
83  pvStore_.clear();
84  bxMap_.clear();
85  dynamicQualityCut_ = 1.e30;
86  hPVx->Reset();
87  hPVy->Reset();
89  fbspotMap.clear();
90  };
std::map< int, std::vector< BeamSpotFitPVData > > bxMap_
Definition: PVFitter.h:179
double dynamicQualityCut_
Definition: PVFitter.h:180
reco::BeamSpot fbeamspot
Definition: PVFitter.h:138
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:178
void resetLSRange()
Definition: PVFitter.h:66
TH2F * hPVy
Definition: PVFitter.h:164
std::map< int, reco::BeamSpot > fbspotMap
Definition: PVFitter.h:139
void resetRefTime()
Definition: PVFitter.h:67
TH2F * hPVx
Definition: PVFitter.h:164
void PVFitter::resetLSRange ( )
inline

Definition at line 66 of file PVFitter.h.

int fbeginLumiOfFit
Definition: PVFitter.h:169
int fendLumiOfFit
Definition: PVFitter.h:170
void PVFitter::resetRefTime ( )
inline

Definition at line 67 of file PVFitter.h.

67 { freftime[0] = freftime[1] = 0; }
std::time_t freftime[2]
Definition: PVFitter.h:162
void PVFitter::resizepvStore ( unsigned int  rmSize)
inline

Definition at line 109 of file PVFitter.h.

References MetAnalyzer::pv().

109  {
110  pvStore_.erase(pvStore_.begin(), pvStore_.begin()+rmSize);
111  }
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:178
bool PVFitter::runBXFitter ( )

Definition at line 192 of file PVFitter.cc.

References align::BeamSpot, bxMap_, errorScale_, fbeamspot, fbspotMap, fcn(), fwidthX, fwidthXerr, fwidthY, fwidthYerr, fwidthZ, fwidthZerr, genParticles_cff::map, makeMuonMisalignmentScenario::matrix, minNrVertices_, funct::pow(), reco::BeamSpot::setBeamWidthX(), reco::BeamSpot::setBeamWidthY(), FcnBeamSpotFitPV::setLimits(), reco::BeamSpot::setType(), sigmaCut_, findQualityFiles::size, and reco::BeamSpot::Tracker.

Referenced by BeamFitter::runPVandTrkFitter().

192  {
193 
194  using namespace ROOT::Minuit2;
195  edm::LogInfo("PVFitter") << " Number of bunch crossings: " << bxMap_.size() << std::endl;
196 
197  bool fit_ok = true;
198 
199  for ( std::map<int,std::vector<BeamSpotFitPVData> >::const_iterator pvStore = bxMap_.begin();
200  pvStore!=bxMap_.end(); ++pvStore) {
201 
202  // first set null beam spot in case
203  // fit fails
204  fbspotMap[pvStore->first] = reco::BeamSpot();
205 
206  edm::LogInfo("PVFitter") << " Number of PVs collected for PVFitter: " << (pvStore->second).size() << " in bx: " << pvStore->first << std::endl;
207 
208  if ( (pvStore->second).size() <= minNrVertices_ ) {
209  edm::LogWarning("PVFitter") << " not enough PVs, continue" << std::endl;
210  fit_ok = false;
211  continue;
212  }
213 
214  edm::LogInfo("PVFitter") << "Calculating beam spot with PVs ..." << std::endl;
215 
216  //
217  // LL function and fitter
218  //
219  FcnBeamSpotFitPV* fcn = new FcnBeamSpotFitPV(pvStore->second);
220  //
221  // fit parameters: positions, widths, x-y correlations, tilts in xz and yz
222  //
223  MnUserParameters upar;
224  upar.Add("x" , 0. , 0.02 , -10., 10.); // 0
225  upar.Add("y" , 0. , 0.02 , -10., 10.); // 1
226  upar.Add("z" , 0. , 0.20 , -30., 30.); // 2
227  upar.Add("ex" , 0.015, 0.01 , 0. , 10.); // 3
228  upar.Add("corrxy", 0. , 0.02 , -1. , 1. ); // 4
229  upar.Add("ey" , 0.015, 0.01 , 0. , 10.); // 5
230  upar.Add("dxdz" , 0. , 0.0002, -0.1, 0.1); // 6
231  upar.Add("dydz" , 0. , 0.0002, -0.1, 0.1); // 7
232  upar.Add("ez" , 1. , 0.1 , 0. , 30.); // 8
233  upar.Add("scale", errorScale_ , errorScale_/10.,
234  errorScale_/2., errorScale_*2.); // 9
235  MnMigrad migrad(*fcn, upar);
236 
237  //
238  // first iteration without correlations
239  //
240  upar.Fix(4);
241  upar.Fix(6);
242  upar.Fix(7);
243  upar.Fix(9);
244  FunctionMinimum ierr = migrad(0,1.);
245  if ( !ierr.IsValid() ) {
246  edm::LogInfo("PVFitter") << "3D beam spot fit failed in 1st iteration" << std::endl;
247  fit_ok = false;
248  continue;
249  }
250  //
251  // refit with harder selection on vertices
252  //
253  fcn->setLimits(upar.Value(0)-sigmaCut_*upar.Value(3),
254  upar.Value(0)+sigmaCut_*upar.Value(3),
255  upar.Value(1)-sigmaCut_*upar.Value(5),
256  upar.Value(1)+sigmaCut_*upar.Value(5),
257  upar.Value(2)-sigmaCut_*upar.Value(8),
258  upar.Value(2)+sigmaCut_*upar.Value(8));
259  ierr = migrad(0,1.);
260  if ( !ierr.IsValid() ) {
261  edm::LogInfo("PVFitter") << "3D beam spot fit failed in 2nd iteration" << std::endl;
262  fit_ok = false;
263  continue;
264  }
265  //
266  // refit with correlations
267  //
268  upar.Release(4);
269  upar.Release(6);
270  upar.Release(7);
271  ierr = migrad(0,1.);
272  if ( !ierr.IsValid() ) {
273  edm::LogInfo("PVFitter") << "3D beam spot fit failed in 3rd iteration" << std::endl;
274  fit_ok = false;
275  continue;
276  }
277 
278  fwidthX = upar.Value(3);
279  fwidthY = upar.Value(5);
280  fwidthZ = upar.Value(8);
281  fwidthXerr = upar.Error(3);
282  fwidthYerr = upar.Error(5);
283  fwidthZerr = upar.Error(8);
284 
286  // need to get the full cov matrix
287  matrix(0,0) = pow( upar.Error(0), 2);
288  matrix(1,1) = pow( upar.Error(1), 2);
289  matrix(2,2) = pow( upar.Error(2), 2);
290  matrix(3,3) = fwidthZerr * fwidthZerr;
291  matrix(4,4) = pow( upar.Error(6), 2);
292  matrix(5,5) = pow( upar.Error(7), 2);
293  matrix(6,6) = fwidthXerr * fwidthXerr;
294 
296  upar.Value(1),
297  upar.Value(2) ),
298  fwidthZ,
299  upar.Value(6), upar.Value(7),
300  fwidthX,
301  matrix );
305 
306  fbspotMap[pvStore->first] = fbeamspot;
307  edm::LogInfo("PVFitter") << "3D PV fit done for this bunch crossing."<<std::endl;
308  //delete fcn;
309  fit_ok = fit_ok & true;
310  }
311 
312  return fit_ok;
313 }
size
Write out results.
math::Error< dimension >::type CovarianceMatrix
Definition: BeamSpot.h:31
std::map< int, std::vector< BeamSpotFitPVData > > bxMap_
Definition: PVFitter.h:179
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
double fwidthY
Definition: PVFitter.h:172
double errorScale_
Definition: PVFitter.h:158
double fwidthYerr
Definition: PVFitter.h:175
double fwidthZ
Definition: PVFitter.h:173
double fwidthXerr
Definition: PVFitter.h:174
void setType(BeamType type)
set beam type
Definition: BeamSpot.h:131
reco::BeamSpot fbeamspot
Definition: PVFitter.h:138
void setBeamWidthY(double v)
Definition: BeamSpot.h:109
std::map< int, reco::BeamSpot > fbspotMap
Definition: PVFitter.h:139
double fwidthZerr
Definition: PVFitter.h:176
void fcn(int &, double *, double &, double *, int)
unsigned int minNrVertices_
Definition: PVFitter.h:151
void setLimits(float xmin, float xmax, float ymin, float ymax, float zmin, float zmax)
double sigmaCut_
Definition: PVFitter.h:159
void setBeamWidthX(double v)
Definition: BeamSpot.h:108
double fwidthX
Definition: PVFitter.h:171
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
bool PVFitter::runFitter ( )

Definition at line 316 of file PVFitter.cc.

References align::BeamSpot, do3DFit_, benchmark_cfg::errors, errorScale_, fftjetvertexadder_cfi::errX, fftjetvertexadder_cfi::errY, fftjetvertexadder_cfi::errZ, fbeamspot, fcn(), fwidthX, fwidthXerr, fwidthY, fwidthYerr, fwidthZ, fwidthZerr, hPVx, hPVy, edm::isNotFinite(), makeMuonMisalignmentScenario::matrix, minNrVertices_, funct::pow(), pvStore_, mps_update::results, reco::BeamSpot::setBeamWidthX(), reco::BeamSpot::setBeamWidthY(), reco::BeamSpot::setType(), sigmaCut_, str, AlCaHLTBitMon_QueryRunRegistry::string, and reco::BeamSpot::Tracker.

Referenced by AlcaBeamMonitor::endLuminosityBlock(), and BeamFitter::runPVandTrkFitter().

316  {
317 
318  using namespace ROOT::Minuit2;
319  edm::LogInfo("PVFitter") << " Number of PVs collected for PVFitter: " << pvStore_.size() << std::endl;
320 
321  if ( pvStore_.size() <= minNrVertices_ ) return false;
322 
323  //need to create a unique histogram name to avoid ROOT trying to re-use one
324  // also tell ROOT to hide its global state
325  TDirectory::TContext guard{nullptr};
326  std::ostringstream str;
327  str <<this;
328  std::unique_ptr<TH1D> h1PVx{ hPVx->ProjectionX( (std::string("h1PVx")+str.str()).c_str(), 0, -1, "e") };
329  std::unique_ptr<TH1D> h1PVy{ hPVy->ProjectionX( (std::string("h1PVy")+str.str()).c_str(), 0, -1, "e") };
330  std::unique_ptr<TH1D> h1PVz{ hPVx->ProjectionY( (std::string("h1PVz")+str.str()).c_str(), 0, -1, "e") };
331 
332  //Use our own copy for thread safety
333  // also do not add to global list of functions
334  TF1 gausx("localGausX","gaus",0.,1.,TF1::EAddToList::kNo);
335  TF1 gausy("localGausY","gaus",0.,1.,TF1::EAddToList::kNo);
336  TF1 gausz("localGausZ","gaus",0.,1.,TF1::EAddToList::kNo);
337 
338  h1PVx->Fit(&gausx,"QLMN0 SERIAL");
339  h1PVy->Fit(&gausy,"QLMN0 SERIAL");
340  h1PVz->Fit(&gausz,"QLMN0 SERIAL");
341 
342 
343  fwidthX = gausx.GetParameter(2);
344  fwidthY = gausy.GetParameter(2);
345  fwidthZ = gausz.GetParameter(2);
346  fwidthXerr = gausx.GetParError(2);
347  fwidthYerr = gausy.GetParError(2);
348  fwidthZerr = gausz.GetParError(2);
349 
350  double estX = gausx.GetParameter(1);
351  double estY = gausy.GetParameter(1);
352  double estZ = gausz.GetParameter(1);
353  double errX = fwidthX*3.;
354  double errY = fwidthY*3.;
355  double errZ = fwidthZ*3.;
356 
357  if ( ! do3DFit_ ) {
358 
360  matrix(2,2) = gausz.GetParError(1) * gausz.GetParError(1);
361  matrix(3,3) = fwidthZerr * fwidthZerr;
362  matrix(6,6) = fwidthXerr * fwidthXerr;
363 
364  fbeamspot = reco::BeamSpot( reco::BeamSpot::Point(gausx.GetParameter(1),
365  gausy.GetParameter(1),
366  gausz.GetParameter(1) ),
367  fwidthZ,
368  0., 0.,
369  fwidthX,
370  matrix );
374 
375  }
376  else { // do 3D fit
377  //
378  // LL function and fitter
379  //
381  //
382  // fit parameters: positions, widths, x-y correlations, tilts in xz and yz
383  //
384  MnUserParameters upar;
385  upar.Add("x" , estX , errX , -10. , 10. ); // 0
386  upar.Add("y" , estY , errY , -10. , 10. ); // 1
387  upar.Add("z" , estZ , errZ , -30. , 30. ); // 2
388  upar.Add("ex" , 0.015 , 0.01 , 0. , 10. ); // 3
389  upar.Add("corrxy", 0. , 0.02 , -1. , 1. ); // 4
390  upar.Add("ey" , 0.015 , 0.01 , 0. , 10. ); // 5
391  upar.Add("dxdz" , 0. , 0.0002 , -0.1 , 0.1 ); // 6
392  upar.Add("dydz" , 0. , 0.0002 , -0.1 , 0.1 ); // 7
393  upar.Add("ez" , 1. , 0.1 , 0. , 30. ); // 8
394  upar.Add("scale" , errorScale_, errorScale_/10.,errorScale_/2., errorScale_*2.); // 9
395  MnMigrad migrad(*fcn, upar);
396  //
397  // first iteration without correlations
398  //
399  migrad.Fix(4);
400  migrad.Fix(6);
401  migrad.Fix(7);
402  migrad.Fix(9);
403  FunctionMinimum ierr = migrad(0,1.);
404  if ( !ierr.IsValid() ) {
405  edm::LogWarning("PVFitter") << "3D beam spot fit failed in 1st iteration" << std::endl;
406  return false;
407  }
408  //
409  // refit with harder selection on vertices
410  //
411 
412  vector<double> results ;
413  vector<double> errors ;
414  results = ierr.UserParameters().Params() ; \
415  errors = ierr.UserParameters().Errors() ; \
416 
417 
418  fcn->setLimits(results[0]-sigmaCut_*results[3],
419  results[0]+sigmaCut_*results[3],
420  results[1]-sigmaCut_*results[5],
421  results[1]+sigmaCut_*results[5],
422  results[2]-sigmaCut_*results[8],
423  results[2]+sigmaCut_*results[8]);
424  ierr = migrad(0,1.);
425  if ( !ierr.IsValid() ) {
426  edm::LogWarning("PVFitter") << "3D beam spot fit failed in 2nd iteration" << std::endl;
427  return false;
428  }
429  //
430  // refit with correlations
431  //
432  migrad.Release(4);
433  migrad.Release(6);
434  migrad.Release(7);
435  ierr = migrad(0,1.);
436  if ( !ierr.IsValid() ) {
437  edm::LogWarning("PVFitter") << "3D beam spot fit failed in 3rd iteration" << std::endl;
438  return false;
439  }
440 
441  results = ierr.UserParameters().Params() ; \
442  errors = ierr.UserParameters().Errors() ; \
443 
444  fwidthX = results[3];
445  fwidthY = results[5];
446  fwidthZ = results[8];
447  fwidthXerr = errors[3];
448  fwidthYerr = errors[5];
449  fwidthZerr = errors[8];
450 
451  // check errors on widths and sigmaZ for nan
452  if ( edm::isNotFinite(fwidthXerr) || edm::isNotFinite(fwidthYerr) || edm::isNotFinite(fwidthZerr) ) {
453  edm::LogWarning("PVFitter") << "3D beam spot fit returns nan in 3rd iteration" << std::endl;
454  return false;
455  }
456 
458  // need to get the full cov matrix
459  matrix(0,0) = pow( errors[0], 2);
460  matrix(1,1) = pow( errors[1], 2);
461  matrix(2,2) = pow( errors[2], 2);
462  matrix(3,3) = fwidthZerr * fwidthZerr;
463  matrix(6,6) = fwidthXerr * fwidthXerr;
464 
466  results[1],
467  results[2] ),
468  fwidthZ,
469  results[6], results[7],
470  fwidthX,
471  matrix );
475  }
476 
477  return true;
478 }
math::Error< dimension >::type CovarianceMatrix
Definition: BeamSpot.h:31
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
double fwidthY
Definition: PVFitter.h:172
double errorScale_
Definition: PVFitter.h:158
bool do3DFit_
Definition: PVFitter.h:146
double fwidthYerr
Definition: PVFitter.h:175
double fwidthZ
Definition: PVFitter.h:173
double fwidthXerr
Definition: PVFitter.h:174
void setType(BeamType type)
set beam type
Definition: BeamSpot.h:131
reco::BeamSpot fbeamspot
Definition: PVFitter.h:138
std::vector< BeamSpotFitPVData > pvStore_
Definition: PVFitter.h:178
bool isNotFinite(T x)
Definition: isFinite.h:10
void setBeamWidthY(double v)
Definition: BeamSpot.h:109
TH2F * hPVy
Definition: PVFitter.h:164
double fwidthZerr
Definition: PVFitter.h:176
void fcn(int &, double *, double &, double *, int)
TH2F * hPVx
Definition: PVFitter.h:164
unsigned int minNrVertices_
Definition: PVFitter.h:151
double sigmaCut_
Definition: PVFitter.h:159
void setBeamWidthX(double v)
Definition: BeamSpot.h:108
double fwidthX
Definition: PVFitter.h:171
#define str(s)
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
void PVFitter::setFitLSRange ( int  ls0,
int  ls1 
)
inline

Definition at line 73 of file PVFitter.h.

73  {
74  fbeginLumiOfFit = ls0;
75  fendLumiOfFit = ls1;
76  }
int fbeginLumiOfFit
Definition: PVFitter.h:169
int fendLumiOfFit
Definition: PVFitter.h:170
void PVFitter::setRefTime ( std::time_t  t0,
std::time_t  t1 
)
inline

Definition at line 69 of file PVFitter.h.

References cscNeutronWriter_cfi::t0.

69  {
70  freftime[0] = t0;
71  freftime[1] = t1;
72  }
std::time_t freftime[2]
Definition: PVFitter.h:162
void PVFitter::setTree ( TTree *  tree)

Definition at line 187 of file PVFitter.cc.

References BeamSpotTreeData::branch(), ftree_, theBeamSpotTreeData_, and compare::tree.

Referenced by BeamFitter::BeamFitter().

187  {
188  ftree_ = tree;
190 }
BeamSpotTreeData theBeamSpotTreeData_
Definition: PVFitter.h:183
TTree * ftree_
Definition: PVFitter.h:166
void branch(TTree *tree)

Member Data Documentation

std::map< int, std::vector<BeamSpotFitPVData> > PVFitter::bxMap_
private

Definition at line 179 of file PVFitter.h.

Referenced by readEvent(), and runBXFitter().

bool PVFitter::debug_
private

Definition at line 145 of file PVFitter.h.

Referenced by initialize().

bool PVFitter::do3DFit_
private

Definition at line 146 of file PVFitter.h.

Referenced by initialize(), and runFitter().

double PVFitter::dynamicQualityCut_
private

Definition at line 180 of file PVFitter.h.

Referenced by compressStore(), initialize(), and readEvent().

double PVFitter::errorScale_
private

Definition at line 158 of file PVFitter.h.

Referenced by initialize(), runBXFitter(), and runFitter().

std::ofstream PVFitter::fasciiFile
private

Definition at line 143 of file PVFitter.h.

reco::BeamSpot PVFitter::fbeamspot
private

Definition at line 138 of file PVFitter.h.

Referenced by runBXFitter(), and runFitter().

int PVFitter::fbeginLumiOfFit
private

Definition at line 169 of file PVFitter.h.

std::map<int,reco::BeamSpot> PVFitter::fbspotMap
private

Definition at line 139 of file PVFitter.h.

Referenced by runBXFitter().

int PVFitter::fendLumiOfFit
private

Definition at line 170 of file PVFitter.h.

bool PVFitter::fFitPerBunchCrossing
private

Definition at line 140 of file PVFitter.h.

Referenced by initialize(), and readEvent().

std::time_t PVFitter::freftime[2]
private

Definition at line 162 of file PVFitter.h.

TTree* PVFitter::ftree_
private

Definition at line 166 of file PVFitter.h.

Referenced by readEvent(), and setTree().

double PVFitter::fwidthX
private

Definition at line 171 of file PVFitter.h.

Referenced by runBXFitter(), and runFitter().

double PVFitter::fwidthXerr
private

Definition at line 174 of file PVFitter.h.

Referenced by runBXFitter(), and runFitter().

double PVFitter::fwidthY
private

Definition at line 172 of file PVFitter.h.

Referenced by runBXFitter(), and runFitter().

double PVFitter::fwidthYerr
private

Definition at line 175 of file PVFitter.h.

Referenced by runBXFitter(), and runFitter().

double PVFitter::fwidthZ
private

Definition at line 173 of file PVFitter.h.

Referenced by runBXFitter(), and runFitter().

double PVFitter::fwidthZerr
private

Definition at line 176 of file PVFitter.h.

Referenced by runBXFitter(), and runFitter().

TH2F* PVFitter::hPVx
private

Definition at line 164 of file PVFitter.h.

Referenced by initialize(), readEvent(), and runFitter().

TH2F* PVFitter::hPVy
private

Definition at line 164 of file PVFitter.h.

Referenced by initialize(), readEvent(), and runFitter().

unsigned int PVFitter::maxNrVertices_
private

Definition at line 150 of file PVFitter.h.

Referenced by initialize(), and readEvent().

double PVFitter::maxVtxNormChi2_
private

Definition at line 153 of file PVFitter.h.

Referenced by initialize().

double PVFitter::maxVtxR_
private

Definition at line 156 of file PVFitter.h.

Referenced by initialize().

double PVFitter::maxVtxZ_
private

Definition at line 157 of file PVFitter.h.

Referenced by initialize().

unsigned int PVFitter::minNrVertices_
private

Definition at line 151 of file PVFitter.h.

Referenced by initialize(), runBXFitter(), and runFitter().

double PVFitter::minSumPt_
private

Definition at line 160 of file PVFitter.h.

Referenced by initialize(), and readEvent().

double PVFitter::minVtxNdf_
private

Definition at line 152 of file PVFitter.h.

Referenced by initialize(), and readEvent().

unsigned int PVFitter::minVtxTracks_
private

Definition at line 154 of file PVFitter.h.

Referenced by initialize(), and readEvent().

double PVFitter::minVtxWgt_
private

Definition at line 155 of file PVFitter.h.

Referenced by initialize(), and readEvent().

std::map<int, int> PVFitter::npvsmap_
private

Definition at line 137 of file PVFitter.h.

std::string PVFitter::outputTxt_
private

Definition at line 148 of file PVFitter.h.

std::vector<double> PVFitter::pvQualities_
private

Definition at line 181 of file PVFitter.h.

Referenced by compressStore().

std::vector<BeamSpotFitPVData> PVFitter::pvStore_
private

Definition at line 178 of file PVFitter.h.

Referenced by compressStore(), readEvent(), and runFitter().

double PVFitter::sigmaCut_
private

Definition at line 159 of file PVFitter.h.

Referenced by initialize(), runBXFitter(), and runFitter().

BeamSpotTreeData PVFitter::theBeamSpotTreeData_
private

Definition at line 183 of file PVFitter.h.

Referenced by readEvent(), and setTree().

bool PVFitter::useOnlyFirstPV_
private

Definition at line 141 of file PVFitter.h.

Referenced by initialize(), and readEvent().

edm::EDGetTokenT<reco::VertexCollection> PVFitter::vertexToken_
private

Definition at line 147 of file PVFitter.h.

Referenced by initialize(), and readEvent().