![]() |
![]() |
00001 #ifndef PVFitter_H 00002 #define PVFitter_H 00003 00017 #include "FWCore/Framework/interface/Event.h" 00018 #include "DataFormats/Provenance/interface/Timestamp.h" 00019 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00020 #include "DataFormats/BeamSpot/interface/BeamSpot.h" 00021 #include "DataFormats/TrackReco/interface/TrackBase.h" 00022 #include "RecoVertex/BeamSpotProducer/interface/BSTrkParameters.h" 00023 #include "RecoVertex/BeamSpotProducer/interface/BSFitter.h" 00024 00025 #include "RecoVertex/BeamSpotProducer/interface/BeamSpotTreeData.h" 00026 #include "RecoVertex/BeamSpotProducer/interface/BeamSpotFitPVData.h" 00027 00028 // ROOT 00029 #include "TFile.h" 00030 #include "TTree.h" 00031 #include "TH2F.h" 00032 00033 #include <fstream> 00034 00035 namespace reco { 00036 class Vertex; 00037 } 00038 00039 class PVFitter { 00040 public: 00041 PVFitter() {} 00042 PVFitter(const edm::ParameterSet& iConfig); 00043 virtual ~PVFitter(); 00044 00045 void readEvent(const edm::Event& iEvent); 00046 void setTree(TTree* tree); 00047 00048 double getWidthX() { return fwidthX; } 00049 double getWidthY() { return fwidthY; } 00050 double getWidthZ() { return fwidthZ; } 00051 double getWidthXerr() { return fwidthXerr; } 00052 double getWidthYerr() { return fwidthYerr; } 00053 double getWidthZerr() { return fwidthZerr; } 00054 00055 void FitPerBunchCrossing() { fFitPerBunchCrossing = true; } 00056 bool runBXFitter(); 00057 bool runFitter(); 00058 void resetLSRange() { fbeginLumiOfFit=fendLumiOfFit=-1; } 00059 void resetRefTime() { freftime[0] = freftime[1] = 0; } 00060 void dumpTxtFile(); 00061 void resetAll() { 00062 resetLSRange(); 00063 resetRefTime(); 00064 pvStore_.clear(); 00065 bxMap_.clear(); 00066 dynamicQualityCut_ = 1.e30; 00067 hPVx->Reset(); 00068 hPVy->Reset(); 00069 fbeamspot = reco::BeamSpot(); 00070 fbspotMap.clear(); 00071 }; 00072 reco::BeamSpot getBeamSpot() { return fbeamspot; } 00073 std::map<int, reco::BeamSpot> getBeamSpotMap() { return fbspotMap; } 00074 bool IsFitPerBunchCrossing() { return fFitPerBunchCrossing; } 00075 int* getFitLSRange() { 00076 int *tmp=new int[2]; 00077 tmp[0] = fbeginLumiOfFit; 00078 tmp[1] = fendLumiOfFit; 00079 return tmp; 00080 } 00082 void compressStore (); 00084 double pvQuality (const reco::Vertex& pv) const; 00086 double pvQuality (const BeamSpotFitPVData& pv) const; 00087 int getNPVs() { return pvStore_.size(); } 00088 00089 const std::map<int, int> &getNPVsperBX() { 00090 00091 npvsmap_.clear(); 00092 00093 for ( std::map<int,std::vector<BeamSpotFitPVData> >::const_iterator pvStore = bxMap_.begin(); 00094 pvStore!=bxMap_.end(); ++pvStore) { 00095 00096 //std::cout << "bx " << pvStore->first << " NPVs = " << (pvStore->second).size() << std::endl; 00097 npvsmap_[ pvStore->first ] = (pvStore->second).size(); 00098 00099 } 00100 return npvsmap_; 00101 } 00102 00103 private: 00104 00105 std::map<int, int> npvsmap_; 00106 reco::BeamSpot fbeamspot; 00107 std::map<int,reco::BeamSpot> fbspotMap; 00108 bool fFitPerBunchCrossing; 00109 00110 std::ofstream fasciiFile; 00111 00112 bool debug_; 00113 bool do3DFit_; 00114 edm::InputTag vertexLabel_; 00115 bool writeTxt_; 00116 std::string outputTxt_; 00117 00118 unsigned int maxNrVertices_; 00119 unsigned int minNrVertices_; 00120 double minVtxNdf_; 00121 double maxVtxNormChi2_; 00122 unsigned int minVtxTracks_; 00123 double minVtxWgt_; 00124 double maxVtxR_; 00125 double maxVtxZ_; 00126 double errorScale_; 00127 double sigmaCut_; 00128 00129 int frun; 00130 int flumi; 00131 std::time_t freftime[2]; 00132 00133 TH2F* hPVx; TH2F* hPVy; 00134 00135 TTree* ftree_; 00136 //bool saveNtuple_; 00137 //bool saveBeamFit_; 00138 //std::string outputfilename_; 00139 //TFile* file_; 00140 //TTree* ftree_; 00141 00142 //beam fit results 00143 //TTree* ftreeFit_; 00144 int frunFit; 00145 int fbeginLumiOfFit; 00146 int fendLumiOfFit; 00147 char fbeginTimeOfFit[32]; 00148 char fendTimeOfFit[32]; 00149 double fwidthX; 00150 double fwidthY; 00151 double fwidthZ; 00152 double fwidthXerr; 00153 double fwidthYerr; 00154 double fwidthZerr; 00155 00156 double fx; 00157 double fy; 00158 double fz; 00159 double fsigmaZ; 00160 double fdxdz; 00161 double fdydz; 00162 double fxErr; 00163 double fyErr; 00164 double fzErr; 00165 double fsigmaZErr; 00166 double fdxdzErr; 00167 double fdydzErr; 00168 00169 std::vector<BeamSpotFitPVData> pvStore_; //< cache for PV data 00170 std::map< int, std::vector<BeamSpotFitPVData> > bxMap_; // store PV data as a function of bunch crossings 00171 double dynamicQualityCut_; //< quality cut for vertices (dynamic adjustment) 00172 std::vector<double> pvQualities_; //< working space for PV store adjustement 00173 00174 BeamSpotTreeData theBeamSpotTreeData_; 00175 }; 00176 00177 #endif