CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/src/RecoVertex/BeamSpotProducer/interface/PVFitter.h

Go to the documentation of this file.
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