00001 #include "TopQuarkAnalysis/Examples/interface/TtSemiEvtKit.h" 00002 00003 #include "DataFormats/Math/interface/LorentzVector.h" 00004 #include "PhysicsTools/CandUtils/interface/AddFourMomenta.h" 00005 00006 using namespace std; 00007 using namespace pat; 00008 00009 // 00010 // constructors and destructor 00011 // 00012 TtSemiEvtKit::TtSemiEvtKit(const edm::ParameterSet& iConfig) 00013 : 00014 verboseLevel_(0) 00015 // helper_(iConfig) 00016 { 00017 00018 // helper_.bookHistos(this); 00019 00020 // evtsols = iConfig.getParameter<edm::InputTag> ("EvtSolution"); 00021 00022 // cout << "About to book histoTtSemiEvtHypothesis" << endl; 00023 00024 00025 // PhysicsHistograms::KinAxisLimits compositeAxisLimits; 00026 00027 // compositeAxisLimits = helper_.getAxisLimits("topAxis"); 00028 00029 // double pt1 = compositeAxisLimits.pt1; 00030 // double pt2 = compositeAxisLimits.pt2; 00031 // double m1 = compositeAxisLimits.m1; 00032 // double m2 = compositeAxisLimits.m2; 00033 00034 // histoTtSemiEvt_ = new HistoComposite("ttSemiEvt", "ttSemiEvt", "ttSemiEvt", 00035 // pt1, pt2, m1, m2); 00036 00037 00038 // edm::Service<TFileService> fs; 00039 // TFileDirectory ttbar = TFileDirectory( fs->mkdir("ttbar") ); 00040 00041 // histoLRJetCombProb_ = new PhysVarHisto( "lrJetCombProb", "Jet Comb Probability", 00042 // 100, 0, 1, &ttbar, "", "vD" ); 00043 // histoLRSignalEvtProb_ = new PhysVarHisto( "lrSignalEvtProb", "Event Probability", 00044 // 100, 0, 1, &ttbar, "", "vD" ); 00045 // histoKinFitProbChi2_ = new PhysVarHisto( "kinFitProbChi2", "Kin Fitter Chi2 Prob", 00046 // 100, 0, 1, &ttbar, "", "vD" ); 00047 00048 00049 // histoLRJetCombProb_ ->makeTH1(); 00050 // histoLRSignalEvtProb_ ->makeTH1(); 00051 // histoKinFitProbChi2_ ->makeTH1(); 00052 00053 // helper_.physHistos_->addHisto( histoLRJetCombProb_ ); 00054 // helper_.physHistos_->addHisto( histoLRSignalEvtProb_ ); 00055 // helper_.physHistos_->addHisto( histoKinFitProbChi2_ ); 00056 00057 } 00058 00059 TtSemiEvtKit::~TtSemiEvtKit() 00060 { 00061 } 00062 00063 // 00064 // member functions 00065 // 00066 00067 // ------------ method called to for each event ------------ 00068 void TtSemiEvtKit::produce( edm::Event& iEvent, const edm::EventSetup& iSetup) 00069 { 00070 // using namespace edm; 00071 00072 // // INSIDE OF LepJetMetKit::produce: 00073 00074 // // -------------------------------------------------- 00075 // // Step 1: Retrieve objects from data stream 00076 // // -------------------------------------------------- 00077 // helper_.getHandles( iEvent, 00078 // muonHandle_, 00079 // electronHandle_, 00080 // tauHandle_, 00081 // jetHandle_, 00082 // METHandle_, 00083 // photonHandle_); 00084 00085 // // -------------------------------------------------- 00086 // // Step 2: invoke PhysicsHistograms to deal with all this. 00087 // // 00088 // // Note that each handle will dereference into a vector<>, 00089 // // however the fillCollection() method takes a reference, 00090 // // so the collections are not copied... 00091 // // -------------------------------------------------- 00092 00093 // if ( verboseLevel_ > 10 ) 00094 // std::cout << "PatAnalyzerKit::analyze: calling fillCollection()." << std::endl; 00095 // helper_.fillHistograms( iEvent, 00096 // muonHandle_, 00097 // electronHandle_, 00098 // tauHandle_, 00099 // jetHandle_, 00100 // METHandle_, 00101 // photonHandle_); 00102 00103 // // -------------------------------------------------- 00104 // // Step 3: Plot LepJetMet data 00105 // // -------------------------------------------------- 00106 00107 00108 // // BEGIN TtSemiEvt analysis here: 00109 00110 // // get the event solution 00111 // edm::Handle< std::vector<TtSemiEvtSolution> > eSols; 00112 // iEvent.getByLabel(evtsols, eSols); 00113 00114 // // cout << "TtSemiEvtKit: About to do work on sols" << endl; 00115 // const std::vector<TtSemiEvtSolution> & sols = *eSols; 00116 // // cout << "Done getting vector ref to sols" << endl; 00117 00118 // if ( sols.size() > 0 ) { 00119 00120 // // cout << "Sols.size() > 0 " << endl; 00121 00122 // // cout << "TtSemiEvtKit: Getting best solution" << endl; 00123 // int bestSol = sols[0].getLRBestJetComb(); 00124 // if ( bestSol >= 0 ) { 00125 00126 00127 // // cout << "About to fill the ttSemiEvt solution : " << bestSol << endl; 00128 // histoTtSemiEvt_->fill( sols[bestSol].getRecoHyp() ); 00129 00130 00131 // histoLRJetCombProb_->fill( sols[bestSol].getLRJetCombProb()); 00132 // histoLRSignalEvtProb_->fill( sols[bestSol].getLRSignalEvtProb()); 00133 // histoKinFitProbChi2_->fill( sols[bestSol].getProbChi2()); 00134 // } 00135 // } 00136 00137 00138 // histoLRJetCombProb_->clearVec(); 00139 // histoLRSignalEvtProb_->clearVec(); 00140 // histoKinFitProbChi2_->clearVec(); 00141 00142 00143 // cout << "Done with produce" << endl; 00144 } 00145 00146 00147 // ------------ method called once each job just before starting event loop ------------ 00148 void 00149 TtSemiEvtKit::beginJob(const edm::EventSetup& iSetup) 00150 { 00151 } 00152 00153 00154 00155 // ------------ method called once each job just after ending the event loop ------------ 00156 void 00157 TtSemiEvtKit::endJob() { 00158 }