00001
00002
00003
00004
00005
00006 #include "TFile.h"
00007 #include "TH1.h"
00008 #include "TH2.h"
00009 #include "TCanvas.h"
00010 #include "TLegend.h"
00011 #include "TSystem.h"
00012 #include "TLorentzVector.h"
00013
00014 #include "PhysicsTools/SelectorUtils/interface/strbitset.h"
00015 #include "DataFormats/PatCandidates/interface/Jet.h"
00016 #include "DataFormats/PatCandidates/interface/MET.h"
00017 #include "DataFormats/PatCandidates/interface/Photon.h"
00018 #include "DataFormats/PatCandidates/interface/Muon.h"
00019 #include "DataFormats/PatCandidates/interface/Electron.h"
00020 #include "DataFormats/PatCandidates/interface/Tau.h"
00021 #include "PhysicsTools/SelectorUtils/interface/Selector.h"
00022 #include "PhysicsTools/SelectorUtils/interface/JetIDSelectionFunctor.h"
00023 #include "PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h"
00024 #include "PhysicsTools/SelectorUtils/interface/RunLumiSelector.h"
00025 #include "FWCore/FWLite/interface/AutoLibraryLoader.h"
00026 #include "PhysicsTools/FWLite/interface/TFileService.h"
00027 #include "DataFormats/FWLite/interface/ChainEvent.h"
00028 #include "FWCore/PythonParameterSet/interface/PythonProcessDesc.h"
00029 #include "FWCore/ParameterSet/interface/ProcessDesc.h"
00030
00031
00032 #include <iostream>
00033 #include <cmath>
00034
00035 using namespace std;
00036
00040
00041
00042
00043
00044 #include "FWCore/Utilities/interface/InputTag.h"
00045 #include "DataFormats/Common/interface/Handle.h"
00046 #include "DataFormats/Common/interface/Ptr.h"
00047 #include "DataFormats/PatCandidates/interface/Jet.h"
00048 #include "PhysicsTools/SelectorUtils/interface/EventSelector.h"
00049
00050
00051
00052 #include "TROOT.h"
00053
00054 using namespace std;
00055
00056
00057 class JetIDStudiesSelector : public EventSelector {
00058 public:
00059 JetIDStudiesSelector( edm::ParameterSet const & caloJetIdParams,
00060 edm::ParameterSet const & pfJetIdParams,
00061 edm::ParameterSet const & params ) :
00062 jetSel_ (new JetIDSelectionFunctor(caloJetIdParams)),
00063 pfJetSel_ (new PFJetIDSelectionFunctor(pfJetIdParams)),
00064 jetSrc_ (params.getParameter<edm::InputTag>("jetSrc")),
00065 pfJetSrc_ (params.getParameter<edm::InputTag>("pfJetSrc"))
00066 {
00067 bool useCalo = params.getParameter<bool>("useCalo");
00068
00069 push_back("Calo Cuts");
00070 push_back("Calo Kin Cuts");
00071 push_back("Calo Delta Phi");
00072 push_back("Calo Jet ID");
00073 push_back("PF Cuts");
00074 push_back("PF Kin Cuts");
00075 push_back("PF Delta Phi");
00076 push_back("PF Jet ID");
00077
00078 set("Calo Cuts", useCalo);
00079 set("Calo Kin Cuts", useCalo);
00080 set("Calo Delta Phi", useCalo);
00081 set("Calo Jet ID", useCalo);
00082 set("PF Cuts", !useCalo);
00083 set("PF Kin Cuts", !useCalo);
00084 set("PF Delta Phi", !useCalo);
00085 set("PF Jet ID", !useCalo);
00086
00087
00088 caloCuts_ = index_type(&bits_, std::string("Calo Cuts") );
00089 caloKin_ = index_type(&bits_, std::string("Calo Kin Cuts"));
00090 caloDeltaPhi_ = index_type(&bits_, std::string("Calo Delta Phi"));
00091 caloJetID_ = index_type(&bits_, std::string("Calo Jet ID"));
00092 pfCuts_ = index_type(&bits_, std::string("PF Cuts"));
00093 pfKin_ = index_type(&bits_, std::string("PF Kin Cuts"));
00094 pfDeltaPhi_ = index_type(&bits_, std::string("PF Delta Phi"));
00095 pfJetID_ = index_type(&bits_, std::string("PF Jet ID"));
00096
00097 }
00098
00099 virtual ~JetIDStudiesSelector() {}
00100
00101 virtual bool operator()( edm::EventBase const & event, pat::strbitset & ret){
00102
00103 pat::strbitset retCaloJet = jetSel_->getBitTemplate();
00104 pat::strbitset retPFJet = pfJetSel_->getBitTemplate();
00105
00106
00107 if ( considerCut(caloCuts_) ) {
00108 passCut(ret, caloCuts_);
00109 event.getByLabel( jetSrc_, h_jets_ );
00110
00111 if ( h_jets_->size() >= 2 || ignoreCut(caloKin_) ) {
00112 passCut(ret, caloKin_);
00113 pat::Jet const & jet0 = h_jets_->at(0);
00114 pat::Jet const & jet1 = h_jets_->at(1);
00115 double dphi = fabs(deltaPhi<double>( jet0.phi(),
00116 jet1.phi() ) );
00117
00118 if ( fabs(dphi - TMath::Pi()) < 1.0 || ignoreCut(caloDeltaPhi_) ) {
00119 passCut(ret, caloDeltaPhi_);
00120
00121
00122 retCaloJet.set(false);
00123 bool pass0 = (*jetSel_)( jet0, retCaloJet );
00124 retCaloJet.set(false);
00125 bool pass1 = (*jetSel_)( jet1, retCaloJet );
00126 if ( (pass0 && pass1) || ignoreCut(caloJetID_) ) {
00127 passCut(ret, caloJetID_);
00128 caloJet0_ = edm::Ptr<pat::Jet>( h_jets_, 0);
00129 caloJet1_ = edm::Ptr<pat::Jet>( h_jets_, 1);
00130
00131 return (bool)ret;
00132 }
00133 }
00134 }
00135 }
00136
00137
00138 if ( considerCut(pfCuts_) ) {
00139
00140 passCut(ret, pfCuts_);
00141 event.getByLabel( pfJetSrc_, h_pfjets_ );
00142
00143 if ( h_pfjets_->size() >= 2 || ignoreCut(pfKin_) ) {
00144 passCut( ret, pfKin_);
00145 pat::Jet const & jet0 = h_pfjets_->at(0);
00146 pat::Jet const & jet1 = h_pfjets_->at(1);
00147 double dphi = fabs(deltaPhi<double>( jet0.phi(),
00148 jet1.phi() ) );
00149
00150 if ( fabs(dphi - TMath::Pi()) < 1.0 || ignoreCut(pfDeltaPhi_) ) {
00151 passCut(ret, pfDeltaPhi_);
00152
00153
00154 retPFJet.set(false);
00155 bool pass0 = (*pfJetSel_)( jet0, retPFJet );
00156 retPFJet.set(false);
00157 bool pass1 = (*pfJetSel_)( jet1, retPFJet );
00158 if ( (pass0 && pass1) || ignoreCut(pfJetID_) ) {
00159 passCut(ret, pfJetID_);
00160 pfJet0_ = edm::Ptr<pat::Jet>( h_pfjets_, 0);
00161 pfJet1_ = edm::Ptr<pat::Jet>( h_pfjets_, 1);
00162
00163 return (bool)ret;
00164 }
00165 }
00166 }
00167 }
00168
00169
00170 setIgnored(ret);
00171
00172 return false;
00173 }
00174
00175 boost::shared_ptr<JetIDSelectionFunctor> const & jetSel() const { return jetSel_;}
00176 boost::shared_ptr<PFJetIDSelectionFunctor> const & pfJetSel() const { return pfJetSel_;}
00177
00178 vector<pat::Jet> const & allCaloJets () const { return *h_jets_; }
00179 vector<pat::Jet> const & allPFJets () const { return *h_pfjets_; }
00180
00181 pat::Jet const & caloJet0() const { return *caloJet0_; }
00182 pat::Jet const & caloJet1() const { return *caloJet1_; }
00183
00184 pat::Jet const & pfJet0() const { return *pfJet0_; }
00185 pat::Jet const & pfJet1() const { return *pfJet1_; }
00186
00187
00188
00189 index_type const & caloCuts() const {return caloCuts_;}
00190 index_type const & caloKin() const {return caloKin_;}
00191 index_type const & caloDeltaPhi() const {return caloDeltaPhi_;}
00192 index_type const & caloJetID() const {return caloJetID_;}
00193 index_type const & pfCuts() const {return pfCuts_;}
00194 index_type const & pfKin() const {return pfKin_;}
00195 index_type const & pfDeltaPhi() const {return pfDeltaPhi_;}
00196 index_type const & pfJetID() const {return pfJetID_;}
00197
00198
00199 protected:
00200 boost::shared_ptr<JetIDSelectionFunctor> jetSel_;
00201 boost::shared_ptr<PFJetIDSelectionFunctor> pfJetSel_;
00202 edm::InputTag jetSrc_;
00203 edm::InputTag pfJetSrc_;
00204
00205 edm::Handle<vector<pat::Jet> > h_jets_;
00206 edm::Handle<vector<pat::Jet> > h_pfjets_;
00207
00208 edm::Ptr<pat::Jet> caloJet0_;
00209 edm::Ptr<pat::Jet> caloJet1_;
00210
00211 edm::Ptr<pat::Jet> pfJet0_;
00212 edm::Ptr<pat::Jet> pfJet1_;
00213
00214
00215 index_type caloCuts_;
00216 index_type caloKin_;
00217 index_type caloDeltaPhi_;
00218 index_type caloJetID_;
00219 index_type pfCuts_;
00220 index_type pfKin_;
00221 index_type pfDeltaPhi_;
00222 index_type pfJetID_;
00223
00224 };
00225
00227
00228
00229
00231
00232 int main (int argc, char* argv[])
00233 {
00234
00235
00236 if ( argc < 2 ) {
00237 std::cout << "Usage : " << argv[0] << " [parameters.py]" << std::endl;
00238 return 0;
00239 }
00240
00241 cout << "Hello from " << argv[0] << "!" << endl;
00242
00243
00244
00245 gSystem->Load( "libFWCoreFWLite" );
00246 AutoLibraryLoader::enable();
00247
00248
00249 cout << "Getting parameters" << endl;
00250
00251 PythonProcessDesc builder(argv[1]);
00252 boost::shared_ptr<edm::ProcessDesc> b = builder.processDesc();
00253 boost::shared_ptr<edm::ParameterSet> parameters = b->getProcessPSet();
00254 parameters->registerIt();
00255
00256 edm::ParameterSet const& jetStudiesParams = parameters->getParameter<edm::ParameterSet>("jetStudies");
00257 edm::ParameterSet const& pfJetStudiesParams = parameters->getParameter<edm::ParameterSet>("pfJetStudies");
00258 edm::ParameterSet const& caloJetIDParameters = parameters->getParameter<edm::ParameterSet>("jetIDSelector");
00259 edm::ParameterSet const& pfJetIDParameters = parameters->getParameter<edm::ParameterSet>("pfJetIDSelector");
00260 edm::ParameterSet const& plotParameters = parameters->getParameter<edm::ParameterSet>("plotParameters");
00261 edm::ParameterSet const& inputs = parameters->getParameter<edm::ParameterSet>("inputs");
00262 edm::ParameterSet const& outputs = parameters->getParameter<edm::ParameterSet>("outputs");
00263
00264 cout << "Making RunLumiSelector" << endl;
00265 RunLumiSelector runLumiSel( inputs );
00266
00267 cout << "setting up TFileService" << endl;
00268
00269 fwlite::TFileService fs = fwlite::TFileService( outputs.getParameter<std::string>("outputName") );
00270 TFileDirectory theDir = fs.mkdir( "histos" );
00271
00272 cout << "Setting up chain event" << endl;
00273
00274
00275 fwlite::ChainEvent ev ( inputs.getParameter<std::vector<std::string> > ("fileNames") );
00276
00277
00278 cout << "Booking histograms" << endl;
00279
00280
00281 std::map<std::string, TH1*> hists;
00282
00283 hists["hist_nJet" ] = theDir.make<TH1D>( "hist_nJet" ,"Number of Calo Jets", 10, 0, 10 ) ;
00284 hists["hist_nPFJet" ] = theDir.make<TH1D>( "hist_nPFJet" ,"Number of PF Jets", 10, 0, 10 ) ;
00285
00286 hists["hist_jetPt" ] = theDir.make<TH1D>( "hist_jetPt" , "Jet p_{T}", 400, 0, 400 ) ;
00287 hists["hist_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_jetEtaVsPhi" , "Jet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
00288 hists["hist_jetNTracks" ] = theDir.make<TH1D>( "hist_jetNTracks" , "Jet N_{TRACKS}", 20, 0, 20 ) ;
00289 hists["hist_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_jetNTracksVsPt" , "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
00290 hists["hist_jetEMF" ] = theDir.make<TH1D>( "hist_jetEMF" , "Jet EMF", 200, 0, 1) ;
00291 hists["hist_jetPdgID" ] = theDir.make<TH1D>( "hist_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
00292 hists["hist_jetGenEmE" ] = theDir.make<TH1D>( "hist_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
00293 hists["hist_jetGenHadE" ] = theDir.make<TH1D>( "hist_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
00294 hists["hist_jetGenEMF" ] = theDir.make<TH1D>( "hist_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
00295 hists["hist_jetEoverGenE" ] = theDir.make<TH1D>( "hist_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
00296 hists["hist_jetCorr" ] = theDir.make<TH1D>( "hist_jetCorr" , "Jet Correction Factor", 200, 0, 1.0 ) ;
00297 hists["hist_n90Hits" ] = theDir.make<TH1D>( "hist_n90Hits" , "Jet n90Hits", 20, 0, 20) ;
00298 hists["hist_fHPD" ] = theDir.make<TH1D>( "hist_fHPD" , "Jet fHPD", 200, 0, 1) ;
00299 hists["hist_nConstituents" ] = theDir.make<TH1D>( "hist_nConstituents" , "Jet nConstituents", 20, 0, 20 ) ;
00300 hists["hist_jetCHF" ] = theDir.make<TH1D>( "hist_jetCHF" , "Jet Charged Hadron Fraction", 200, 0, 1.0) ;
00301
00302 hists["hist_good_jetPt" ] = theDir.make<TH1D>( "hist_good_jetPt" , "Jet p_{T}", 400, 0, 400 ) ;
00303 hists["hist_good_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_good_jetEtaVsPhi" , "Jet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
00304 hists["hist_good_jetNTracks" ] = theDir.make<TH1D>( "hist_good_jetNTracks" , "Jet N_{TRACKS}", 20, 0, 20 ) ;
00305 hists["hist_good_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_good_jetNTracksVsPt" , "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
00306 hists["hist_good_jetEMF" ] = theDir.make<TH1D>( "hist_good_jetEMF" , "Jet EMF", 200, 0, 1) ;
00307 hists["hist_good_jetPdgID" ] = theDir.make<TH1D>( "hist_good_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
00308 hists["hist_good_jetGenEmE" ] = theDir.make<TH1D>( "hist_good_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
00309 hists["hist_good_jetGenHadE" ] = theDir.make<TH1D>( "hist_good_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
00310 hists["hist_good_jetGenEMF" ] = theDir.make<TH1D>( "hist_good_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
00311 hists["hist_good_jetEoverGenE" ] = theDir.make<TH1D>( "hist_good_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
00312 hists["hist_good_jetCorr" ] = theDir.make<TH1D>( "hist_good_jetCorr" , "Jet Correction Factor", 200, 0, 1.0 ) ;
00313 hists["hist_good_n90Hits" ] = theDir.make<TH1D>( "hist_good_n90Hits" , "Jet n90Hits", 20, 0, 20) ;
00314 hists["hist_good_fHPD" ] = theDir.make<TH1D>( "hist_good_fHPD" , "Jet fHPD", 200, 0, 1) ;
00315 hists["hist_good_nConstituents" ] = theDir.make<TH1D>( "hist_good_nConstituents" , "Jet nConstituents", 20, 0, 20 ) ;
00316 hists["hist_good_jetCHF" ] = theDir.make<TH1D>( "hist_good_jetCHF" , "Jet Charged Hadron Fraction", 200, 0, 1.0) ;
00317
00318
00319 hists["hist_pf_jetPt" ] = theDir.make<TH1D>( "hist_pf_jetPt" , "PFJet p_{T}", 400, 0, 400 ) ;
00320 hists["hist_pf_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_pf_jetEtaVsPhi" , "PFJet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
00321 hists["hist_pf_jetNTracks" ] = theDir.make<TH1D>( "hist_pf_jetNTracks" , "PFJet N_{TRACKS}", 20, 0, 20 ) ;
00322 hists["hist_pf_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_pf_jetNTracksVsPt" , "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
00323 hists["hist_pf_jetEMF" ] = theDir.make<TH1D>( "hist_pf_jetEMF" , "PFJet EMF", 200, 0, 1) ;
00324 hists["hist_pf_jetCHF" ] = theDir.make<TH1D>( "hist_pf_jetCHF" , "PFJet CHF", 200, 0, 1) ;
00325 hists["hist_pf_jetNHF" ] = theDir.make<TH1D>( "hist_pf_jetNHF" , "PFJet NHF", 200, 0, 1) ;
00326 hists["hist_pf_jetCEF" ] = theDir.make<TH1D>( "hist_pf_jetCEF" , "PFJet CEF", 200, 0, 1) ;
00327 hists["hist_pf_jetNEF" ] = theDir.make<TH1D>( "hist_pf_jetNEF" , "PFJet NEF", 200, 0, 1) ;
00328 hists["hist_pf_jetPdgID" ] = theDir.make<TH1D>( "hist_pf_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
00329 hists["hist_pf_jetGenEmE" ] = theDir.make<TH1D>( "hist_pf_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
00330 hists["hist_pf_jetGenHadE" ] = theDir.make<TH1D>( "hist_pf_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
00331 hists["hist_pf_jetGenEMF" ] = theDir.make<TH1D>( "hist_pf_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
00332 hists["hist_pf_jetEoverGenE" ] = theDir.make<TH1D>( "hist_pf_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
00333 hists["hist_pf_jetCorr" ] = theDir.make<TH1D>( "hist_pf_jetCorr" , "PFJet Correction Factor", 200, 0, 1.0 ) ;
00334 hists["hist_pf_nConstituents" ] = theDir.make<TH1D>( "hist_pf_nConstituents" , "PFJet nConstituents", 20, 0, 20 ) ;
00335
00336 hists["hist_pf_good_jetPt" ] = theDir.make<TH1D>( "hist_pf_good_jetPt" , "PFJet p_{T}", 400, 0, 400 ) ;
00337 hists["hist_pf_good_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_pf_good_jetEtaVsPhi" , "PFJet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
00338 hists["hist_pf_good_jetNTracks" ] = theDir.make<TH1D>( "hist_pf_good_jetNTracks" , "PFJet N_{TRACKS}", 20, 0, 20 ) ;
00339 hists["hist_pf_good_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_pf_good_jetNTracksVsPt", "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
00340 hists["hist_pf_good_jetEMF" ] = theDir.make<TH1D>( "hist_pf_good_jetEMF" , "PFJet EMF", 200, 0, 1) ;
00341 hists["hist_pf_good_jetCHF" ] = theDir.make<TH1D>( "hist_pf_good_jetCHF" , "PFJet CHF", 200, 0, 1) ;
00342 hists["hist_pf_good_jetNHF" ] = theDir.make<TH1D>( "hist_pf_good_jetNHF" , "PFJet NHF", 200, 0, 1) ;
00343 hists["hist_pf_good_jetCEF" ] = theDir.make<TH1D>( "hist_pf_good_jetCEF" , "PFJet CEF", 200, 0, 1) ;
00344 hists["hist_pf_good_jetNEF" ] = theDir.make<TH1D>( "hist_pf_good_jetNEF" , "PFJet NEF", 200, 0, 1) ;
00345 hists["hist_pf_good_jetPdgID" ] = theDir.make<TH1D>( "hist_pf_good_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
00346 hists["hist_pf_good_jetGenEmE" ] = theDir.make<TH1D>( "hist_pf_good_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
00347 hists["hist_pf_good_jetGenHadE" ] = theDir.make<TH1D>( "hist_pf_good_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
00348 hists["hist_pf_good_jetGenEMF" ] = theDir.make<TH1D>( "hist_pf_good_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
00349 hists["hist_pf_good_jetEoverGenE" ] = theDir.make<TH1D>( "hist_pf_good_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
00350 hists["hist_pf_good_jetCorr" ] = theDir.make<TH1D>( "hist_pf_good_jetCorr" , "PFJet Correction Factor", 200, 0, 1.0 ) ;
00351 hists["hist_pf_good_nConstituents" ] = theDir.make<TH1D>( "hist_pf_good_nConstituents" , "PFJet nConstituents", 20, 0, 20 ) ;
00352
00353 hists["hist_mjj" ] = theDir.make<TH1D>( "hist_mjj" , "Dijet mass", 300, 0, 300 ) ;
00354 hists["hist_dR_jj" ] = theDir.make<TH1D>( "hist_dR_jj" , "#Delta R_{JJ}", 200, 0, TMath::TwoPi() ) ;
00355 hists["hist_imbalance_jj" ] = theDir.make<TH1D>( "hist_imbalance_jj" , "Dijet imbalance", 200, -1.0, 1.0 ) ;
00356
00357 hists["hist_pf_mjj" ] = theDir.make<TH1D>( "hist_pf_mjj" , "Dijet mass", 300, 0, 300 ) ;
00358 hists["hist_pf_dR_jj" ] = theDir.make<TH1D>( "hist_pf_dR_jj" , "#Delta R_{JJ}", 200, 0, TMath::TwoPi() ) ;
00359 hists["hist_pf_imbalance_jj" ] = theDir.make<TH1D>( "hist_pf_imbalance_jj" , "Dijet imbalance", 200, -1.0, 1.0 ) ;
00360
00361
00362
00363 cout << "Making functors" << endl;
00364 JetIDStudiesSelector caloSelector( caloJetIDParameters,
00365 pfJetIDParameters,
00366 jetStudiesParams );
00367
00368 JetIDStudiesSelector pfSelector( caloJetIDParameters,
00369 pfJetIDParameters,
00370 pfJetStudiesParams );
00371
00372 bool doTracks = plotParameters.getParameter<bool>("doTracks");
00373 bool useMC = plotParameters.getParameter<bool>("useMC");
00374
00375 cout << "About to begin looping" << endl;
00376
00377 int nev = 0;
00378
00379 for (ev.toBegin(); ! ev.atEnd(); ++ev, ++nev) {
00380
00381
00382 edm::EventBase const & event = ev;
00383
00384 if ( runLumiSel(ev) == false ) continue;
00385
00386 if ( nev % 100 == 0 ) cout << "Processing run " << event.id().run() << ", lumi " << event.id().luminosityBlock() << ", event " << event.id().event() << endl;
00387
00388
00389
00390
00391 pat::strbitset retCalo = caloSelector.getBitTemplate();
00392 caloSelector( event, retCalo );
00393
00394
00395 pat::strbitset retPF = pfSelector.getBitTemplate();
00396 pfSelector( event, retPF );
00397
00401 if ( retCalo.test( caloSelector.caloKin() ) ) {
00402 if ( retCalo.test( caloSelector.caloDeltaPhi() ) ) {
00403 vector<pat::Jet> const & allCaloJets = caloSelector.allCaloJets();
00404
00405 for ( std::vector<pat::Jet>::const_iterator jetBegin = allCaloJets.begin(),
00406 jetEnd = jetBegin + 2, ijet = jetBegin;
00407 ijet != jetEnd; ++ijet ) {
00408
00409 const pat::Jet & jet = *ijet;
00410
00411 double pt = jet.pt();
00412
00413 const reco::TrackRefVector & jetTracks = jet.associatedTracks();
00414
00415 hists["hist_jetPt"]->Fill( pt );
00416 hists["hist_jetEtaVsPhi"]->Fill( jet.eta(), jet.phi() );
00417 hists["hist_jetNTracks"]->Fill( jetTracks.size() );
00418 hists["hist_jetNTracksVsPt"]->Fill( pt, jetTracks.size() );
00419 hists["hist_jetEMF"]->Fill( jet.emEnergyFraction() );
00420 hists["hist_jetCorr"]->Fill( jet.jecFactor("Uncorrected") );
00421 hists["hist_n90Hits"]->Fill( static_cast<int>(jet.jetID().n90Hits) );
00422 hists["hist_fHPD"]->Fill( jet.jetID().fHPD );
00423 hists["hist_nConstituents"]->Fill( jet.nConstituents() );
00424
00425 if ( useMC && jet.genJet() != 0 ) {
00426 hists["hist_jetGenEmE"]->Fill( jet.genJet()->emEnergy() );
00427 hists["hist_jetGenHadE"]->Fill( jet.genJet()->hadEnergy() );
00428 hists["hist_jetEoverGenE"]->Fill( jet.energy() / jet.genJet()->energy() );
00429 hists["hist_jetGenEMF"]->Fill( jet.genJet()->emEnergy() / jet.genJet()->energy() );
00430 }
00431 if ( doTracks ) {
00432 TLorentzVector p4_tracks(0,0,0,0);
00433 for ( reco::TrackRefVector::const_iterator itrk = jetTracks.begin(),
00434 itrkEnd = jetTracks.end();
00435 itrk != itrkEnd; ++itrk ) {
00436 TLorentzVector p4_trk;
00437 double M_PION = 0.140;
00438 p4_trk.SetPtEtaPhiM( (*itrk)->pt(), (*itrk)->eta(), (*itrk)->phi(), M_PION );
00439 p4_tracks += p4_trk;
00440 }
00441 hists["hist_jetCHF"]->Fill( p4_tracks.Energy() / jet.energy() );
00442 }
00443
00444
00445 }
00446
00447
00448
00449 if ( retCalo.test( caloSelector.caloJetID() ) ) {
00450 pat::Jet const & jet0 = caloSelector.caloJet0();
00451 pat::Jet const & jet1 = caloSelector.caloJet1();
00452
00453 TLorentzVector p4_j0( jet0.px(), jet0.py(), jet0.pz(), jet0.energy() );
00454 TLorentzVector p4_j1( jet1.px(), jet1.py(), jet1.pz(), jet1.energy() );
00455
00456 TLorentzVector p4_jj = p4_j0 + p4_j1;
00457
00458 hists["hist_mjj"]->Fill( p4_jj.M() );
00459 hists["hist_dR_jj"]->Fill( p4_j0.DeltaR( p4_j1 ) );
00460 hists["hist_imbalance_jj"]->Fill( (p4_j0.Perp() - p4_j1.Perp() ) /
00461 (p4_j0.Perp() + p4_j1.Perp() ) );
00462
00463 hists["hist_good_jetPt"]->Fill( jet0.pt() );
00464 hists["hist_good_jetEtaVsPhi"]->Fill( jet0.eta(), jet0.phi() );
00465 hists["hist_good_jetNTracks"]->Fill( jet0.associatedTracks().size() );
00466 hists["hist_good_jetNTracksVsPt"]->Fill( jet0.pt(), jet0.associatedTracks().size() );
00467 hists["hist_good_jetEMF"]->Fill( jet0.emEnergyFraction() );
00468 hists["hist_good_jetCorr"]->Fill( jet0.jecFactor("Uncorrected") );
00469 hists["hist_good_n90Hits"]->Fill( static_cast<int>(jet0.jetID().n90Hits) );
00470 hists["hist_good_fHPD"]->Fill( jet0.jetID().fHPD );
00471 hists["hist_good_nConstituents"]->Fill( jet0.nConstituents() );
00472
00473
00474 hists["hist_good_jetPt"]->Fill( jet1.pt() );
00475 hists["hist_good_jetEtaVsPhi"]->Fill( jet1.eta(), jet1.phi() );
00476 hists["hist_good_jetNTracks"]->Fill( jet1.associatedTracks().size() );
00477 hists["hist_good_jetNTracksVsPt"]->Fill( jet1.pt(), jet1.associatedTracks().size() );
00478 hists["hist_good_jetEMF"]->Fill( jet1.emEnergyFraction() );
00479 hists["hist_good_jetCorr"]->Fill( jet1.jecFactor("Uncorrected") );
00480 hists["hist_good_n90Hits"]->Fill( static_cast<int>(jet1.jetID().n90Hits) );
00481 hists["hist_good_fHPD"]->Fill( jet1.jetID().fHPD );
00482 hists["hist_good_nConstituents"]->Fill( jet1.nConstituents() );
00483
00484 }
00485 }
00486 }
00487
00488
00492 if ( retPF.test( pfSelector.pfDeltaPhi() ) ) {
00493
00494 vector<pat::Jet> const & allPFJets = pfSelector.allPFJets();
00495
00496 for ( std::vector<pat::Jet>::const_iterator jetBegin = allPFJets.begin(),
00497 jetEnd = jetBegin + 2, ijet = jetBegin;
00498 ijet != jetEnd; ++ijet ) {
00499
00500 const pat::Jet & jet = *ijet;
00501
00502 double pt = jet.pt();
00503
00504 hists["hist_pf_jetPt"]->Fill( pt );
00505 hists["hist_pf_jetEtaVsPhi"]->Fill( jet.eta(), jet.phi() );
00506 hists["hist_pf_nConstituents"]->Fill( jet.nConstituents() );
00507 hists["hist_pf_jetCEF"]->Fill( jet.chargedEmEnergyFraction() );
00508 hists["hist_pf_jetNEF"]->Fill( jet.neutralEmEnergyFraction() );
00509 hists["hist_pf_jetCHF"]->Fill( jet.chargedHadronEnergyFraction() );
00510 hists["hist_pf_jetNHF"]->Fill( jet.neutralHadronEnergyFraction() );
00511
00512
00513 if ( useMC && jet.genJet() != 0 ) {
00514 hists["hist_pf_jetGenEmE"]->Fill( jet.genJet()->emEnergy() );
00515 hists["hist_pf_jetGenHadE"]->Fill( jet.genJet()->hadEnergy() );
00516 hists["hist_pf_jetEoverGenE"]->Fill( jet.energy() / jet.genJet()->energy() );
00517
00518 hists["hist_pf_jetGenEMF"]->Fill( jet.genJet()->emEnergy() / jet.genJet()->energy() );
00519 }
00520
00521 }
00522
00523
00524
00525 if ( retPF.test( pfSelector.pfJetID() ) ) {
00526 pat::Jet const & jet0 = pfSelector.pfJet0();
00527 pat::Jet const & jet1 = pfSelector.pfJet1();
00528
00529 TLorentzVector p4_j0( jet0.px(), jet0.py(), jet0.pz(), jet0.energy() );
00530 TLorentzVector p4_j1( jet1.px(), jet1.py(), jet1.pz(), jet1.energy() );
00531
00532 TLorentzVector p4_jj = p4_j0 + p4_j1;
00533
00534 hists["hist_pf_mjj"]->Fill( p4_jj.M() );
00535 hists["hist_pf_dR_jj"]->Fill( p4_j0.DeltaR( p4_j1 ) );
00536 hists["hist_pf_imbalance_jj"]->Fill( (p4_j0.Perp() - p4_j1.Perp() ) /
00537 (p4_j0.Perp() + p4_j1.Perp() ) );
00538
00539 hists["hist_pf_good_jetPt"]->Fill( jet0.pt() );
00540 hists["hist_pf_good_jetEtaVsPhi"]->Fill( jet0.eta(), jet0.phi() );
00541 hists["hist_pf_good_nConstituents"]->Fill( jet0.nConstituents() );
00542 hists["hist_pf_good_jetCEF"]->Fill( jet0.chargedEmEnergyFraction() );
00543 hists["hist_pf_good_jetNEF"]->Fill( jet0.neutralEmEnergyFraction() );
00544 hists["hist_pf_good_jetCHF"]->Fill( jet0.chargedHadronEnergyFraction() );
00545 hists["hist_pf_good_jetNHF"]->Fill( jet0.neutralHadronEnergyFraction() );
00546
00547
00548 hists["hist_pf_good_jetPt"]->Fill( jet1.pt() );
00549 hists["hist_pf_good_jetEtaVsPhi"]->Fill( jet1.eta(), jet1.phi() );
00550 hists["hist_pf_good_nConstituents"]->Fill( jet1.nConstituents() );
00551 hists["hist_pf_good_jetCEF"]->Fill( jet1.chargedEmEnergyFraction() );
00552 hists["hist_pf_good_jetNEF"]->Fill( jet1.neutralEmEnergyFraction() );
00553 hists["hist_pf_good_jetCHF"]->Fill( jet1.chargedHadronEnergyFraction() );
00554 hists["hist_pf_good_jetNHF"]->Fill( jet1.neutralHadronEnergyFraction() );
00555
00556 }
00557
00558 }
00559
00560 }
00561
00562 cout << "Calo jet selection" << endl;
00563 caloSelector.print(std::cout);
00564 cout << "PF jet selection" << endl;
00565 pfSelector.print(std::cout);
00566
00567
00568
00569
00570 return 0;
00571 }
00572