File indexing completed on 2024-04-06 12:29:03
0001 #ifndef BeamFitter_H
0002 #define BeamFitter_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "FWCore/Framework/interface/Event.h"
0017 #include "DataFormats/Provenance/interface/Timestamp.h"
0018 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0020 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0021 #include "DataFormats/TrackReco/interface/TrackBase.h"
0022 #include "DataFormats/TrackReco/interface/Track.h"
0023 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0024 #include "DataFormats/TrackCandidate/interface/TrackCandidate.h"
0025 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
0026 #include "RecoVertex/BeamSpotProducer/interface/BSTrkParameters.h"
0027 #include "RecoVertex/BeamSpotProducer/interface/BSFitter.h"
0028 #include "RecoVertex/BeamSpotProducer/interface/PVFitter.h"
0029
0030
0031 #include "TFile.h"
0032 #include "TTree.h"
0033 #include "TH1F.h"
0034
0035 #include <fstream>
0036
0037 namespace edm {
0038 class ConsumesCollector;
0039 }
0040
0041 class BeamFitter {
0042 public:
0043 BeamFitter() {}
0044 BeamFitter(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iColl);
0045 virtual ~BeamFitter();
0046
0047 static void fillDescription(edm::ParameterSetDescription &);
0048
0049 void readEvent(const edm::Event &iEvent);
0050
0051 bool runFitter();
0052 bool runBeamWidthFitter();
0053 bool runPVandTrkFitter();
0054 bool runFitterNoTxt();
0055
0056 reco::BeamSpot getBeamWidth() { return fbeamWidthFit; }
0057 void runAllFitter();
0058 void resetTrkVector() { fBSvector.clear(); }
0059 void resetTotTrk() { ftotal_tracks = 0; }
0060 void resetLSRange() { fbeginLumiOfFit = fendLumiOfFit = -1; }
0061 void resetRefTime() { freftime[0] = freftime[1] = 0; }
0062 void setRefTime(time_t t0, time_t t1) {
0063 freftime[0] = t0;
0064 freftime[1] = t1;
0065
0066
0067 updateBTime();
0068 }
0069
0070 std::pair<time_t, time_t> getRefTime() { return std::make_pair(freftime[0], freftime[1]); }
0071
0072 void resetPVFitter() { MyPVFitter->resetAll(); }
0073
0074
0075 std::size_t getPVvectorSize() { return (MyPVFitter->getpvStore()).size(); }
0076
0077 void resizeBSvector(unsigned int nsize) { fBSvector.erase(fBSvector.begin(), fBSvector.begin() + nsize); }
0078
0079
0080 void resizePVvector(unsigned int npvsize) { MyPVFitter->resizepvStore(npvsize); }
0081
0082
0083 void SetPVInfo(const std::vector<float> &v1_) {
0084 ForDIPPV_.clear();
0085 ForDIPPV_.assign(v1_.begin(), v1_.end());
0086 }
0087
0088
0089
0090 void dumpTxtFile(std::string &, bool);
0091 void dumpBWTxtFile(std::string &);
0092 void write2DB();
0093 reco::BeamSpot getBeamSpot() { return fbeamspot; }
0094 std::map<int, reco::BeamSpot> getBeamSpotMap() { return fbspotPVMap; }
0095 std::vector<BSTrkParameters> getBSvector() { return fBSvector; }
0096 TH1F *getCutFlow() { return h1cutFlow; }
0097 void subtractFromCutFlow(const TH1F *toSubtract) {
0098 h1cutFlow->Add(toSubtract, -1.0);
0099 for (unsigned int i = 0; i < sizeof(countPass) / sizeof(countPass[0]); i++) {
0100 countPass[i] = h1cutFlow->GetBinContent(i + 1);
0101 }
0102 }
0103
0104 void resetCutFlow() {
0105 h1cutFlow->Reset();
0106 ftotal_tracks = 0;
0107 for (unsigned int i = 0; i < sizeof(countPass) / sizeof(countPass[0]); i++)
0108 countPass[i] = 0;
0109 }
0110
0111
0112 int getRunNumber() { return frun; }
0113
0114 std::pair<int, int> getFitLSRange() { return std::make_pair(fbeginLumiOfFit, fendLumiOfFit); }
0115 void setFitLSRange(int ls0, int ls1) {
0116 fbeginLumiOfFit = ls0;
0117 fendLumiOfFit = ls1;
0118 }
0119 void setRun(int run) { frun = run; }
0120
0121 int getNTracks() { return fBSvector.size(); }
0122 int getNPVs() { return MyPVFitter->getNPVs(); }
0123 const std::map<int, int> &getNPVsperBX() { return MyPVFitter->getNPVsperBX(); }
0124
0125 private:
0126
0127 void updateBTime();
0128 std::vector<BSTrkParameters> fBSvector;
0129 reco::BeamSpot fbeamspot;
0130 reco::BeamSpot fbeamWidthFit;
0131 std::map<int, reco::BeamSpot> fbspotPVMap;
0132
0133 std::ofstream fasciiFile;
0134 std::ofstream fasciiDIP;
0135
0136 bool debug_;
0137 bool appendRunTxt_;
0138 edm::EDGetTokenT<reco::TrackCollection> tracksToken_;
0139 edm::EDGetTokenT<edm::View<reco::Vertex> > vertexToken_;
0140 edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
0141 bool writeTxt_;
0142 bool writeDIPTxt_;
0143 bool writeDIPBadFit_;
0144 std::string outputTxt_;
0145 std::string outputDIPTxt_;
0146 double trk_MinpT_;
0147 double trk_MaxZ_;
0148 double trk_MaxEta_;
0149 double trk_MaxIP_;
0150 int trk_MinNTotLayers_;
0151 int trk_MinNPixLayers_;
0152 double trk_MaxNormChi2_;
0153 std::vector<std::string> trk_Algorithm_;
0154 std::vector<std::string> trk_Quality_;
0155 std::vector<reco::TrackBase::TrackQuality> quality_;
0156 std::vector<reco::TrackBase::TrackAlgorithm> algorithm_;
0157 double inputBeamWidth_;
0158 double convergence_;
0159 int ftotal_tracks;
0160 int min_Ntrks_;
0161 bool isMuon_;
0162 bool fitted_;
0163 bool ffilename_changed;
0164
0165
0166 std::vector<float> ForDIPPV_;
0167
0168
0169 TH1F *h1z;
0170 bool saveNtuple_;
0171 bool saveBeamFit_;
0172 bool savePVVertices_;
0173 std::string outputfilename_;
0174 TFile *file_;
0175 TTree *ftree_;
0176 double ftheta;
0177 double fpt;
0178 double feta;
0179 int fcharge;
0180 double fnormchi2;
0181 double fphi0;
0182 double fd0;
0183 double fd0bs;
0184 double fsigmad0;
0185 double fz0;
0186 double fsigmaz0;
0187 int fnTotLayerMeas;
0188 int fnPixelLayerMeas;
0189 int fnStripLayerMeas;
0190 int fnTIBLayerMeas;
0191 int fnTIDLayerMeas;
0192 int fnTOBLayerMeas;
0193 int fnTECLayerMeas;
0194 int fnPXBLayerMeas;
0195 int fnPXFLayerMeas;
0196
0197
0198 double fcov[7][7];
0199 double fvx;
0200 double fvy;
0201 int frun;
0202 int flumi;
0203 bool fquality;
0204 bool falgo;
0205 bool fpvValid;
0206 double fpvx, fpvy, fpvz;
0207 std::time_t freftime[2];
0208
0209
0210 TTree *ftreeFit_;
0211 int frunFit;
0212 int fbeginLumiOfFit;
0213 int fendLumiOfFit;
0214 char fbeginTimeOfFit[32];
0215 char fendTimeOfFit[32];
0216 double fx;
0217 double fy;
0218 double fz;
0219 double fsigmaZ;
0220 double fdxdz;
0221 double fdydz;
0222 double fxErr;
0223 double fyErr;
0224 double fzErr;
0225 double fsigmaZErr;
0226 double fdxdzErr;
0227 double fdydzErr;
0228 double fwidthX;
0229 double fwidthY;
0230 double fwidthXErr;
0231 double fwidthYErr;
0232
0233 TH1F *h1ntrks;
0234 TH1F *h1vz_event;
0235 TH1F *h1cutFlow;
0236 int countPass[9];
0237
0238 PVFitter *MyPVFitter;
0239 TTree *fPVTree_;
0240 };
0241
0242 #endif