From e3870f6e128387e05bbe1d7150b93d5155f74d9d Mon Sep 17 00:00:00 2001 From: Jonathan Date: Tue, 26 Feb 2019 17:43:37 +0100 Subject: [PATCH] Changes for standard proton reco validation Rebasing on CMSSW_9_4_9 branch --- .../interface/AnalysisEvent.h | 197 +++++++------- .../plugins/GammaGammaLL.cc | 243 +++++++----------- .../python/GammaGammaLL_cfi.py | 2 + .../test/RunGammaGammaLeptonLepton_cfg.py | 42 ++- 4 files changed, 222 insertions(+), 262 deletions(-) diff --git a/GammaGammaLeptonLepton/interface/AnalysisEvent.h b/GammaGammaLeptonLepton/interface/AnalysisEvent.h index 29f6c71..c068406 100644 --- a/GammaGammaLeptonLepton/interface/AnalysisEvent.h +++ b/GammaGammaLeptonLepton/interface/AnalysisEvent.h @@ -57,11 +57,14 @@ namespace ggll static constexpr unsigned int MAX_JETS = 40; /// Maximum number of reconstructed local tracks in RPs static constexpr unsigned int MAX_LOCALPCAND = 120; + /// Maximum number of reconstructed protons + static constexpr unsigned int MAX_PRO = 120; ////// Tree contents ////// // Run/event quantities unsigned int BX, Run, LumiSection, EventNum; + float CrossingAngle; //int LHCFillNum, LHCBeamMode; //double AvgInstDelLumi, BunchInstLumi[3]; @@ -185,11 +188,17 @@ namespace ggll unsigned int nLocalProtCand; double LocalProtCand_x[MAX_LOCALPCAND], LocalProtCand_y[MAX_LOCALPCAND], LocalProtCand_t[MAX_LOCALPCAND]; double LocalProtCand_xSigma[MAX_LOCALPCAND], LocalProtCand_ySigma[MAX_LOCALPCAND], LocalProtCand_tSigma[MAX_LOCALPCAND]; - int LocalProtCand_arm[MAX_LOCALPCAND], LocalProtCand_station[MAX_LOCALPCAND], LocalProtCand_pot[MAX_LOCALPCAND]; + int LocalProtCand_arm[MAX_LOCALPCAND], LocalProtCand_station[MAX_LOCALPCAND], LocalProtCand_pot[MAX_LOCALPCAND], LocalProtCand_rpid[MAX_LOCALPCAND]; + + // reco proton quantities + unsigned int nRecoProtCand; + double ProtCand_xi[MAX_PRO], ProtCand_t[MAX_PRO], ProtCand_ThX[MAX_PRO], ProtCand_ThY[MAX_PRO]; + int ProtCand_rpid[MAX_PRO], ProtCand_arm[MAX_PRO], ProtCand_ismultirp[MAX_PRO]; void clear() { // event-level branches BX = Run = LumiSection = EventNum = 0; + CrossingAngle = 0.0; // high-level trigger nHLT = 0; @@ -329,16 +338,27 @@ namespace ggll for ( unsigned int i = 0; i < MAX_LOCALPCAND; ++i ) { LocalProtCand_x[i] = LocalProtCand_y[i] = LocalProtCand_t[i] = -999.; LocalProtCand_xSigma[i] = LocalProtCand_ySigma[i] = LocalProtCand_tSigma[i] = -999.; - LocalProtCand_arm[i] = LocalProtCand_station[i] = LocalProtCand_pot[i] = -1; + LocalProtCand_arm[i] = LocalProtCand_station[i] = LocalProtCand_pot[i] = LocalProtCand_rpid[i] = -1; } + nRecoProtCand = 0; + for ( unsigned int i = 0; i < MAX_PRO; ++i ) { + ProtCand_xi[i] = -999.; + ProtCand_t[i] = -999.; + ProtCand_ThX[i] = -999.; + ProtCand_ThY[i] = -999.; + ProtCand_rpid[i] = -1; + ProtCand_arm[i] = -1; + ProtCand_ismultirp[i] = -1; + } } - void attach( TTree* tree, TreeType tt, bool mc ) { + void attach( TTree* tree, TreeType tt, bool mc, bool storetracks ) { if ( !tree ) return; tree->Branch( "Run", &Run, "Run/i" ); tree->Branch( "LumiSection", &LumiSection, "LumiSection/i" ); tree->Branch( "BX", &BX, "BX/i" ); tree->Branch( "EventNum", &EventNum, "EventNum/i" ); + tree->Branch( "CrossingAngle", &CrossingAngle, "CrossingAngle/F"); tree->Branch( "nHLT", &nHLT, "nHLT/i" ); tree->Branch( "HLT_Accept", HLT_Accept, "HLT_Accept[nHLT]/I" ); @@ -415,25 +435,8 @@ namespace ggll tree->Branch( "GenEleCand_e", GenEleCand_e, "GenEleCand_e[nGenEleCand]/D" ); } } - tree->Branch( "nPhotonCand", &nPhotonCand, "nPhotonCand/i" ); - tree->Branch( "PhotonCand_pt", PhotonCand_pt, "PhotonCand_pt[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_eta", PhotonCand_eta, "PhotonCand_eta[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_phi", PhotonCand_phi, "PhotonCand_phi[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_e", PhotonCand_e, "PhotonCand_e[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_r9", PhotonCand_r9, "PhotonCand_r9[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_drtrue", PhotonCand_drtrue, "PhotonCand_drtrue[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_detatrue", PhotonCand_detatrue, "PhotonCand_detatrue[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_dphitrue", PhotonCand_dphitrue, "PhotonCand_dphitrue[nPhotonCand]/D" ); - tree->Branch( "PhotonCand_mediumID", PhotonCand_mediumID, "PhotonCand_mediumID[nPhotonCand]/I" ); - tree->Branch( "PhotonCand_tightID", PhotonCand_tightID, "PhotonCand_tightID[nPhotonCand]/I" ); - if ( mc ) { - tree->Branch( "nGenPhotCand", &nGenPhotCand, "nGenPhotCand/i" ); - tree->Branch( "nGenPhotCandOutOfAccept", &nGenPhotCandOutOfAccept, "nGenPhotCandOutOfAccept/I" ); - tree->Branch( "GenPhotCand_pt", GenPhotCand_pt, "GenPhotCand_pt[nGenPhotCand]/D" ); - tree->Branch( "GenPhotCand_eta", GenPhotCand_eta, "GenPhotCand_eta[nGenPhotCand]/D" ); - tree->Branch( "GenPhotCand_phi", GenPhotCand_phi, "GenPhotCand_phi[nGenPhotCand]/D" ); - tree->Branch( "GenPhotCand_e", GenPhotCand_e, "GenPhotCand_e[nGenPhotCand]/D" ); + if ( mc ) { tree->Branch( "nGenProtCand", &nGenProtCand, "nGenProtCand/i" ); tree->Branch( "GenProtCand_pt", GenProtCand_pt, "GenProtCand_pt[nGenProtCand]/D" ); tree->Branch( "GenProtCand_eta", GenProtCand_eta, "GenProtCand_eta[nGenProtCand]/D" ); @@ -480,9 +483,6 @@ namespace ggll tree->Branch( "KalmanVertexCand_y", KalmanVertexCand_y, "KalmanVertexCand_y[nPair]/D" ); tree->Branch( "KalmanVertexCand_z", KalmanVertexCand_z, "KalmanVertexCand_z[nPair]/D" ); - tree->Branch( "nPairGamma", &nPairGamma, "nPairGamma/i" ); - tree->Branch( "PairGamma_pair", PairGamma_pair, "PairGamma_pair[nPairGamma]/I" ); - tree->Branch( "PairGamma_mass", PairGamma_mass, "PairGamma_mass[nPairGamma]/D" ); if ( mc ) { tree->Branch( "GenPair_mass", &GenPair_mass, "GenPair_mass/D" ); tree->Branch( "GenPair_pt", &GenPair_pt, "GenPair_pt/D" ); @@ -493,7 +493,8 @@ namespace ggll tree->Branch( "GenPair_3Dangle", &GenPair_3Dangle, "GenPair_3Dangle/D" ); } - if ( !mc ) { + //if ( !mc ) { + if ( true ) { tree->Branch( "nLocalProtCand", &nLocalProtCand, "nLocalProtCand/i" ); tree->Branch( "LocalProtCand_x", LocalProtCand_x, "LocalProtCand_x[nLocalProtCand]/D" ); tree->Branch( "LocalProtCand_y", LocalProtCand_y, "LocalProtCand_y[nLocalProtCand]/D" ); @@ -504,57 +505,55 @@ namespace ggll tree->Branch( "LocalProtCand_arm", LocalProtCand_arm, "LocalProtCand_arm[nLocalProtCand]/I" ); tree->Branch( "LocalProtCand_station", LocalProtCand_station, "LocalProtCand_station[nLocalProtCand]/I" ); tree->Branch( "LocalProtCand_pot", LocalProtCand_pot, "LocalProtCand_pot[nLocalProtCand]/I" ); + tree->Branch( "LocalProtCand_rpid", LocalProtCand_rpid, "LocalProtCand_rpid[nLocalProtCand]/I" ); + + tree->Branch( "nRecoProtCand", &nRecoProtCand, "nRecoProtCand/i" ); + tree->Branch( "ProtCand_xi", ProtCand_xi, "ProtCand_xi[nRecoProtCand]/D" ); + tree->Branch( "ProtCand_t", ProtCand_t, "ProtCand_t[nRecoProtCand]/D" ); + tree->Branch( "ProtCand_ThX", ProtCand_ThX, "ProtCand_ThX[nRecoProtCand]/D" ); + tree->Branch( "ProtCand_ThY", ProtCand_ThY, "ProtCand_ThY[nRecoProtCand]/D" ); + tree->Branch( "ProtCand_rpid", ProtCand_rpid, "ProtCand_rpid[nRecoProtCand]/I" ); + tree->Branch( "ProtCand_arm", ProtCand_arm, "ProtCand_arm[nRecoProtCand]/I" ); + tree->Branch( "ProtCand_ismultirp", ProtCand_ismultirp, "ProtCand_ismultirp[nRecoProtCand]/I" ); } // Extra tracks on vertex's information - tree->Branch( "nExtraTracks", &nExtraTracks, "nExtraTracks/i" ); - tree->Branch( "ExtraTrack_pair", ExtraTrack_pair, "ExtraTrack_pair[nExtraTracks]/I" ); - tree->Branch( "ExtraTrack_purity", ExtraTrack_purity, "ExtraTrack_purity[nExtraTracks]/I" ); - tree->Branch( "ExtraTrack_nhits", ExtraTrack_nhits, "ExtraTrack_nhits[nExtraTracks]/i" ); - tree->Branch( "ExtraTrack_charge", ExtraTrack_charge, "ExtraTrack_charge[nExtraTracks]/I" ); - tree->Branch( "ExtraTrack_ndof", ExtraTrack_ndof, "ExtraTrack_ndof[nExtraTracks]/i" ); - tree->Branch( "ExtraTrack_px", ExtraTrack_px, "ExtraTrack_px[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_py", ExtraTrack_py, "ExtraTrack_py[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_pz", ExtraTrack_pz, "ExtraTrack_pz[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_chi2", ExtraTrack_chi2, "ExtraTrack_chi2[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_vtxdxyz", ExtraTrack_vtxdxyz, "ExtraTrack_vtxdxyz[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_vtxT", ExtraTrack_vtxT, "ExtraTrack_vtxT[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_vtxZ", ExtraTrack_vtxZ, "ExtraTrack_vtxZ[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_x", ExtraTrack_x, "ExtraTrack_x[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_y", ExtraTrack_y, "ExtraTrack_y[nExtraTracks]/D" ); - tree->Branch( "ExtraTrack_z", ExtraTrack_z, "ExtraTrack_z[nExtraTracks]/D" ); + if ( storetracks ) { + tree->Branch( "nExtraTracks", &nExtraTracks, "nExtraTracks/i" ); + tree->Branch( "ExtraTrack_pair", ExtraTrack_pair, "ExtraTrack_pair[nExtraTracks]/I" ); + tree->Branch( "ExtraTrack_purity", ExtraTrack_purity, "ExtraTrack_purity[nExtraTracks]/I" ); + tree->Branch( "ExtraTrack_nhits", ExtraTrack_nhits, "ExtraTrack_nhits[nExtraTracks]/i" ); + tree->Branch( "ExtraTrack_charge", ExtraTrack_charge, "ExtraTrack_charge[nExtraTracks]/I" ); + tree->Branch( "ExtraTrack_ndof", ExtraTrack_ndof, "ExtraTrack_ndof[nExtraTracks]/i" ); + tree->Branch( "ExtraTrack_px", ExtraTrack_px, "ExtraTrack_px[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_py", ExtraTrack_py, "ExtraTrack_py[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_pz", ExtraTrack_pz, "ExtraTrack_pz[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_chi2", ExtraTrack_chi2, "ExtraTrack_chi2[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_vtxdxyz", ExtraTrack_vtxdxyz, "ExtraTrack_vtxdxyz[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_vtxT", ExtraTrack_vtxT, "ExtraTrack_vtxT[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_vtxZ", ExtraTrack_vtxZ, "ExtraTrack_vtxZ[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_x", ExtraTrack_x, "ExtraTrack_x[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_y", ExtraTrack_y, "ExtraTrack_y[nExtraTracks]/D" ); + tree->Branch( "ExtraTrack_z", ExtraTrack_z, "ExtraTrack_z[nExtraTracks]/D" ); + } tree->Branch( "nQualityExtraTrack", &nQualityExtraTrack, "nQualityExtraTrack/i" ); tree->Branch( "ClosestExtraTrack_vtxdxyz", ClosestExtraTrack_vtxdxyz, "ClosestExtraTrack_vtxdxyz[nPair]/D" ); tree->Branch( "ClosestExtraTrack_id", ClosestExtraTrack_id, "ClosestExtraTrack_id[nPair]/I" ); tree->Branch( "ClosestHighPurityExtraTrack_vtxdxyz", ClosestHighPurityExtraTrack_vtxdxyz, "ClosestHighPurityExtraTrack_vtxdxyz[nPair]/D" ); tree->Branch( "ClosestHighPurityExtraTrack_id", ClosestHighPurityExtraTrack_id, "ClosestHighPurityExtraTrack_id[nPair]/I" ); - // Jets/MET information - tree->Branch( "nJetCand", &nJetCand, "nJetCand/i" ); - tree->Branch( "JetCand_pt", JetCand_pt, "JetCand_pt[nJetCand]/D" ); - tree->Branch( "JetCand_eta", JetCand_eta, "JetCand_eta[nJetCand]/D" ); - tree->Branch( "JetCand_phi", JetCand_phi, "JetCand_phi[nJetCand]/D" ); - tree->Branch( "JetCand_e", JetCand_e, "JetCand_e[nJetCand]/D" ); - tree->Branch( "HighestJet_pt", &HighestJet_pt, "HighestJet_pt/D" ); - tree->Branch( "HighestJet_eta", &HighestJet_eta, "HighestJet_eta/D" ); - tree->Branch( "HighestJet_phi", &HighestJet_phi, "HighestJet_phi/D" ); - tree->Branch( "HighestJet_e", &HighestJet_e, "HighestJet_e/D" ); - tree->Branch( "SumJet_e", &SumJet_e, "SumJet_e/D" ); - tree->Branch( "Etmiss", &Etmiss, "Etmiss/D" ); - tree->Branch( "Etmiss_phi", &Etmiss_phi, "Etmiss_phi/D" ); - tree->Branch( "Etmiss_significance", &Etmiss_significance, "Etmiss_significance/D" ); - // Pileup reweighting tree->Branch( "Weight", &Weight, "Weight/D" ); tree->Branch( "PUWeightTrue", &PUWeightTrue, "PUWeightTrue/D" ); } - void load( TTree* tree, TreeType tt, bool mc ) { + void load( TTree* tree, TreeType tt, bool mc, bool storetracks ) { if ( !tree ) return; tree->SetBranchAddress( "Run", &Run ); tree->SetBranchAddress( "LumiSection", &LumiSection ); tree->SetBranchAddress( "BX", &BX ); tree->SetBranchAddress( "EventNum", &EventNum ); + tree->SetBranchAddress( "CrossingAngle", &CrossingAngle ); tree->SetBranchAddress( "nHLT", &nHLT ); tree->SetBranchAddress( "HLT_Accept", HLT_Accept ); @@ -631,25 +630,8 @@ namespace ggll tree->SetBranchAddress( "GenEleCand_e", GenEleCand_e ); } } - tree->SetBranchAddress( "nPhotonCand", &nPhotonCand ); - tree->SetBranchAddress( "PhotonCand_pt", PhotonCand_pt ); - tree->SetBranchAddress( "PhotonCand_eta", PhotonCand_eta ); - tree->SetBranchAddress( "PhotonCand_phi", PhotonCand_phi ); - tree->SetBranchAddress( "PhotonCand_e", PhotonCand_e ); - tree->SetBranchAddress( "PhotonCand_r9", PhotonCand_r9 ); - tree->SetBranchAddress( "PhotonCand_drtrue", PhotonCand_drtrue ); - tree->SetBranchAddress( "PhotonCand_detatrue", PhotonCand_detatrue ); - tree->SetBranchAddress( "PhotonCand_dphitrue", PhotonCand_dphitrue ); - tree->SetBranchAddress( "PhotonCand_mediumID", PhotonCand_mediumID ); - tree->SetBranchAddress( "PhotonCand_tightID", PhotonCand_tightID ); - if ( mc ) { - tree->SetBranchAddress( "nGenPhotCand", &nGenPhotCand ); - tree->SetBranchAddress( "nGenPhotCandOutOfAccept", &nGenPhotCandOutOfAccept ); - tree->SetBranchAddress( "GenPhotCand_pt", GenPhotCand_pt ); - tree->SetBranchAddress( "GenPhotCand_eta", GenPhotCand_eta ); - tree->SetBranchAddress( "GenPhotCand_phi", GenPhotCand_phi ); - tree->SetBranchAddress( "GenPhotCand_e", GenPhotCand_e ); + if ( mc ) { tree->SetBranchAddress( "nGenProtCand", &nGenProtCand ); tree->SetBranchAddress( "GenProtCand_pt", GenProtCand_pt ); tree->SetBranchAddress( "GenProtCand_eta", GenProtCand_eta ); @@ -696,9 +678,6 @@ namespace ggll tree->SetBranchAddress( "KalmanVertexCand_y", KalmanVertexCand_y ); tree->SetBranchAddress( "KalmanVertexCand_z", KalmanVertexCand_z ); - tree->SetBranchAddress( "nPairGamma", &nPairGamma ); - tree->SetBranchAddress( "PairGamma_pair", PairGamma_pair ); - tree->SetBranchAddress( "PairGamma_mass", PairGamma_mass ); if ( mc ) { tree->SetBranchAddress( "GenPair_mass", &GenPair_mass ); tree->SetBranchAddress( "GenPair_pt", &GenPair_pt ); @@ -709,7 +688,8 @@ namespace ggll tree->SetBranchAddress( "GenPair_3Dangle", &GenPair_3Dangle ); } - if ( !mc ) { + //if ( !mc ) { + if ( true ) { tree->SetBranchAddress( "nLocalProtCand", &nLocalProtCand ); tree->SetBranchAddress( "LocalProtCand_x", LocalProtCand_x ); tree->SetBranchAddress( "LocalProtCand_y", LocalProtCand_y ); @@ -720,46 +700,43 @@ namespace ggll tree->SetBranchAddress( "LocalProtCand_arm", LocalProtCand_arm ); tree->SetBranchAddress( "LocalProtCand_station", LocalProtCand_station ); tree->SetBranchAddress( "LocalProtCand_pot", LocalProtCand_pot ); + tree->SetBranchAddress( "LocalProtCand_rpid", LocalProtCand_rpid ); + + tree->SetBranchAddress( "nRecoProtCand", &nRecoProtCand ); + tree->SetBranchAddress( "ProtCand_xi", ProtCand_xi ); + tree->SetBranchAddress( "ProtCand_t", ProtCand_t ); + tree->SetBranchAddress( "ProtCand_ThX", ProtCand_ThX ); + tree->SetBranchAddress( "ProtCand_ThY", ProtCand_ThY ); + tree->SetBranchAddress( "ProtCand_rpid", ProtCand_rpid ); + tree->SetBranchAddress( "ProtCand_arm", ProtCand_arm ); + tree->SetBranchAddress( "ProtCand_ismultirp", ProtCand_ismultirp ); } // Extra tracks on vertex's information - tree->SetBranchAddress( "nExtraTracks", &nExtraTracks ); - tree->SetBranchAddress( "ExtraTrack_pair", ExtraTrack_pair ); - tree->SetBranchAddress( "ExtraTrack_purity", ExtraTrack_purity ); - tree->SetBranchAddress( "ExtraTrack_nhits", ExtraTrack_nhits ); - tree->SetBranchAddress( "ExtraTrack_charge", ExtraTrack_charge ); - tree->SetBranchAddress( "ExtraTrack_ndof", ExtraTrack_ndof ); - tree->SetBranchAddress( "ExtraTrack_px", ExtraTrack_px ); - tree->SetBranchAddress( "ExtraTrack_py", ExtraTrack_py ); - tree->SetBranchAddress( "ExtraTrack_pz", ExtraTrack_pz ); - tree->SetBranchAddress( "ExtraTrack_chi2", ExtraTrack_chi2 ); - tree->SetBranchAddress( "ExtraTrack_vtxdxyz", ExtraTrack_vtxdxyz ); - tree->SetBranchAddress( "ExtraTrack_vtxT", ExtraTrack_vtxT ); - tree->SetBranchAddress( "ExtraTrack_vtxZ", ExtraTrack_vtxZ ); - tree->SetBranchAddress( "ExtraTrack_x", ExtraTrack_x ); - tree->SetBranchAddress( "ExtraTrack_y", ExtraTrack_y ); - tree->SetBranchAddress( "ExtraTrack_z", ExtraTrack_z ); + if ( storetracks ) { + tree->SetBranchAddress( "nExtraTracks", &nExtraTracks ); + tree->SetBranchAddress( "ExtraTrack_pair", ExtraTrack_pair ); + tree->SetBranchAddress( "ExtraTrack_purity", ExtraTrack_purity ); + tree->SetBranchAddress( "ExtraTrack_nhits", ExtraTrack_nhits ); + tree->SetBranchAddress( "ExtraTrack_charge", ExtraTrack_charge ); + tree->SetBranchAddress( "ExtraTrack_ndof", ExtraTrack_ndof ); + tree->SetBranchAddress( "ExtraTrack_px", ExtraTrack_px ); + tree->SetBranchAddress( "ExtraTrack_py", ExtraTrack_py ); + tree->SetBranchAddress( "ExtraTrack_pz", ExtraTrack_pz ); + tree->SetBranchAddress( "ExtraTrack_chi2", ExtraTrack_chi2 ); + tree->SetBranchAddress( "ExtraTrack_vtxdxyz", ExtraTrack_vtxdxyz ); + tree->SetBranchAddress( "ExtraTrack_vtxT", ExtraTrack_vtxT ); + tree->SetBranchAddress( "ExtraTrack_vtxZ", ExtraTrack_vtxZ ); + tree->SetBranchAddress( "ExtraTrack_x", ExtraTrack_x ); + tree->SetBranchAddress( "ExtraTrack_y", ExtraTrack_y ); + tree->SetBranchAddress( "ExtraTrack_z", ExtraTrack_z ); + } tree->SetBranchAddress( "nQualityExtraTrack", &nQualityExtraTrack ); tree->SetBranchAddress( "ClosestExtraTrack_vtxdxyz", ClosestExtraTrack_vtxdxyz ); tree->SetBranchAddress( "ClosestExtraTrack_id", ClosestExtraTrack_id ); tree->SetBranchAddress( "ClosestHighPurityExtraTrack_vtxdxyz", ClosestHighPurityExtraTrack_vtxdxyz ); tree->SetBranchAddress( "ClosestHighPurityExtraTrack_id", ClosestHighPurityExtraTrack_id ); - // Jets/MET information - tree->SetBranchAddress( "nJetCand", &nJetCand ); - tree->SetBranchAddress( "JetCand_pt", JetCand_pt ); - tree->SetBranchAddress( "JetCand_eta", JetCand_eta ); - tree->SetBranchAddress( "JetCand_phi", JetCand_phi ); - tree->SetBranchAddress( "JetCand_e", JetCand_e ); - tree->SetBranchAddress( "HighestJet_pt", &HighestJet_pt ); - tree->SetBranchAddress( "HighestJet_eta", &HighestJet_eta ); - tree->SetBranchAddress( "HighestJet_phi", &HighestJet_phi ); - tree->SetBranchAddress( "HighestJet_e", &HighestJet_e ); - tree->SetBranchAddress( "SumJet_e", &SumJet_e ); - tree->SetBranchAddress( "Etmiss", &Etmiss ); - tree->SetBranchAddress( "Etmiss_phi", &Etmiss_phi ); - tree->SetBranchAddress( "Etmiss_significance", &Etmiss_significance ); - // Pileup reweighting tree->SetBranchAddress( "Weight", &Weight ); tree->SetBranchAddress( "PUWeightTrue", &PUWeightTrue ); diff --git a/GammaGammaLeptonLepton/plugins/GammaGammaLL.cc b/GammaGammaLeptonLepton/plugins/GammaGammaLL.cc index ef499e4..ea2bac4 100644 --- a/GammaGammaLeptonLepton/plugins/GammaGammaLL.cc +++ b/GammaGammaLeptonLepton/plugins/GammaGammaLL.cc @@ -77,9 +77,6 @@ //// tweaked electron ID //#include "DiffractiveForwardAnalysis/GammaGammaLeptonLepton/interface/ElectronID.h" -// Photons collection -#include "DataFormats/PatCandidates/interface/Photon.h" - // Particle flow collection //#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" //#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" @@ -91,15 +88,12 @@ #include "DataFormats/Common/interface/RefToBase.h" #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h" -// Jets/MET collection -#include "DataFormats/PatCandidates/interface/Jet.h" -#include "DataFormats/PatCandidates/interface/MET.h" -#include "DataFormats/METReco/interface/PFMETCollection.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" // PPS objects #include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" #include "DataFormats/CTPPSReco/interface/CTPPSLocalTrackLite.h" +#include "DataFormats/ProtonReco/interface/ProtonTrack.h" + #include "DiffractiveForwardAnalysis/GammaGammaLeptonLepton/interface/HLTMatcher.h" #include "DiffractiveForwardAnalysis/GammaGammaLeptonLepton/interface/AnalysisEvent.h" @@ -114,6 +108,8 @@ //#include "DataFormats/Common/interface/ConditionsInEdm.h" // L1 method //#include "CondFormats/RunInfo/interface/FillInfo.h" //#include "CondFormats/DataRecord/interface/FillInfoRcd.h" // db method +#include "CondFormats/RunInfo/interface/LHCInfo.h" +#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" #include "TFile.h" #include "TTree.h" @@ -149,9 +145,7 @@ class GammaGammaLL : public edm::one::EDAnalyzer > eleToken_; /*edm::EDGetTokenT > eleMediumIdMapToken_, eleTightIdMapToken_; edm::EDGetTokenT > phoMediumIdMapToken_, phoTightIdMapToken_;*/ - edm::EDGetTokenT > jetToken_; edm::EDGetTokenT fixedGridRhoFastjetAllToken_; - edm::EDGetTokenT > metToken_; edm::EDGetTokenT > ppsLocalTrackToken_; - edm::EDGetTokenT > photonToken_; + edm::EDGetTokenT > recoProtonsToken_; bool runOnMC_, printCandidates_; double minPtMC_, minEtaMC_; double sqrts_; + bool saveExtraTracks_; + std::string year_; // Trigger information ggll::HLTMatcher hlts_; @@ -235,14 +229,14 @@ GammaGammaLL::GammaGammaLL( const edm::ParameterSet& iConfig ) : eleTightIdMapToken_ ( consumes > ( iConfig.getParameter( "eleTightIdMap" ) ) ), phoMediumIdMapToken_( consumes > ( iConfig.getParameter( "phoMediumIdMap" ) ) ), phoTightIdMapToken_ ( consumes > ( iConfig.getParameter( "phoTightIdMap" ) ) ),*/ - jetToken_ ( consumes > ( iConfig.getParameter( "jetTag" ) ) ), fixedGridRhoFastjetAllToken_( consumes ( iConfig.getParameter( "fixedGridRhoFastjetAllLabel" ) ) ), - metToken_ ( consumes > ( iConfig.getParameter( "metTag" ) ) ), ppsLocalTrackToken_ ( consumes > ( iConfig.getParameter( "ppsLocalTrackTag" ) ) ), - photonToken_ ( consumes > ( iConfig.getParameter( "photonTag" ) ) ), + recoProtonsToken_ ( consumes > ( iConfig.getParameter( "ppsRecoProtonTag" ) ) ), runOnMC_ ( iConfig.getParameter( "runOnMC" ) ), printCandidates_ ( iConfig.getParameter( "printCandidates" ) ), sqrts_ ( iConfig.getParameter( "sqrtS" ) ), + saveExtraTracks_ ( iConfig.getParameter( "saveExtraTracks" ) ), + year_ ( iConfig.getParameter( "year" ) ), hlts_ ( triggersList_ ), hltPrescale_ ( iConfig, consumesCollector(), *this ), // Central selection @@ -288,10 +282,6 @@ GammaGammaLL::GammaGammaLL( const edm::ParameterSet& iConfig ) : eleMediumIdLabel_ = eleIdLabelSet.getParameter( "mediumLabel" ).encode(); eleTightIdLabel_ = eleIdLabelSet.getParameter( "tightLabel" ).encode(); } - // photon identification variables - const edm::ParameterSet phoIdLabelSet = iConfig.getParameter( "phoIdLabels" ); - phoMediumIdLabel_ = phoIdLabelSet.getParameter( "mediumLabel" ).encode(); - phoTightIdLabel_ = phoIdLabelSet.getParameter( "tightLabel" ).encode(); // Pileup reweighting utilities if ( runOnMC_ ) @@ -364,10 +354,27 @@ GammaGammaLL::analyze( const edm::Event& iEvent, const edm::EventSetup& iSetup ) evt_.EventNum = iEvent.id().event(); // High level trigger information retrieval - lookAtTriggers( iEvent, iSetup); + // JH - for Summer17 MC this crashes... + if ( !runOnMC_ ) { + lookAtTriggers( iEvent, iSetup); + } LogDebug( "GammaGammaLL" ) << "Passed trigger filtering stage"; + // Crossing angle information from DB for 2018 + if(year_ == "2018") + { + edm::ESHandle pSetup; + const string label = ""; + iSetup.get().get(label, pSetup); + + // re-initialise algorithm upon crossing-angle change + const LHCInfo* pInfo = pSetup.product(); + evt_.CrossingAngle = pInfo->crossingAngle(); + } + else + evt_.CrossingAngle = -999; + // Generator level information if ( runOnMC_ ) { analyzeMCEventContent( iEvent ); @@ -398,8 +405,6 @@ GammaGammaLL::analyze( const edm::Event& iEvent, const edm::EventSetup& iSetup ) if ( fetchMuons_ ) fetchMuons( iEvent ); if ( fetchElectrons_ ) fetchElectrons( iEvent ); - fetchPhotons( iEvent ); - newVertexInfoRetrieval( iEvent ); if ( !foundPairInEvent_ ) { @@ -413,20 +418,6 @@ GammaGammaLL::analyze( const edm::Event& iEvent, const edm::EventSetup& iSetup ) return; } - fetchJets( iEvent ); - - // Missing ET - edm::Handle > MET; - iEvent.getByToken( metToken_, MET); - const edm::View* metColl = MET.product(); - edm::View::const_iterator met = metColl->begin(); - - evt_.Etmiss = met->et(); - evt_.Etmiss_phi = met->phi(); - evt_.Etmiss_significance = met->significance(); - - LogDebug( "GammaGammaLL" ) << "Passed MET retrieval stage"; - if ( printCandidates_ ) std::cout << "Event " << evt_.Run << ":" << evt_.EventNum << " has " << evt_.nPair << " leptons pair(s) candidate(s) (vertex mult. : " << evt_.nPrimVertexCand << " )" << std::endl; @@ -480,14 +471,6 @@ GammaGammaLL::analyzeMCEventContent( const edm::Event& iEvent ) evt_.nGenEleCand++; } - // generated inner photon line - if ( genPart->pdgId() == 22 && evt_.nGenPhotCand < ggll::AnalysisEvent::MAX_GENPHO ) { - evt_.GenPhotCand_e[evt_.nGenPhotCand] = genPart->energy(); - evt_.GenPhotCand_pt[evt_.nGenPhotCand] = genPart->pt(); - evt_.GenPhotCand_eta[evt_.nGenPhotCand] = genPart->eta(); - evt_.GenPhotCand_phi[evt_.nGenPhotCand] = genPart->phi(); - evt_.nGenPhotCand++; - } if ( genPart->pdgId() == 2212 && fabs( genPart->pz() ) > 3000. ) { // Kinematic quantities computation // xi = fractional momentum loss @@ -549,6 +532,10 @@ GammaGammaLL::fetchMuons( const edm::Event& iEvent ) for ( unsigned int i = 0; i < muonColl->size() && evt_.nMuonCand < ggll::AnalysisEvent::MAX_MUONS; ++i ) { const edm::Ptr muon = muonColl->ptrAt( i); + // JH + if( muon->pt() < 20) continue; + if( muon->isGlobalMuon() == 0 || muon->isTrackerMuon() == 0) continue; + evt_.MuonCand_pt[evt_.nMuonCand] = muon->pt(); evt_.MuonCand_eta[evt_.nMuonCand] = muon->eta(); evt_.MuonCand_phi[evt_.nMuonCand] = muon->phi(); @@ -670,68 +657,6 @@ GammaGammaLL::fetchElectrons( const edm::Event& iEvent ) LogDebug( "GammaGammaLL" ) << "Passed Electron retrieval stage. Got " << evt_.nEleCand << " electron(s)"; } -void -GammaGammaLL::fetchPhotons( const edm::Event& iEvent ) -{ - // Get the photons collection from the event - edm::Handle > photonColl; - iEvent.getByToken( photonToken_, photonColl ); - - // identification - /*edm::Handle > medium_id_decisions, tight_id_decisions; - iEvent.getByToken( phoMediumIdMapToken_, medium_id_decisions ); - iEvent.getByToken( phoTightIdMapToken_, tight_id_decisions );*/ - - for ( unsigned int i = 0; i < photonColl->size(); ++i ) { - const edm::Ptr photon = photonColl->ptrAt( i ); - - evt_.PhotonCand_pt[evt_.nPhotonCand] = photon->pt(); - evt_.PhotonCand_eta[evt_.nPhotonCand] = photon->eta(); - evt_.PhotonCand_phi[evt_.nPhotonCand] = photon->phi(); - evt_.PhotonCand_e[evt_.nPhotonCand] = photon->energy(); - evt_.PhotonCand_r9[evt_.nPhotonCand] = photon->r9(); - - evt_.PhotonCand_drtrue[evt_.nPhotonCand] = -999.; - evt_.PhotonCand_detatrue[evt_.nPhotonCand] = -999.; - evt_.PhotonCand_dphitrue[evt_.nPhotonCand] = -999.; - if ( runOnMC_ ) { - double photdr = 999., photdeta = 999., photdphi = 999.; - double endphotdr = 999., endphotdeta = 999., endphotdphi = 999.; - for ( unsigned int j = 0; j < evt_.nGenPhotCand; ++j ) { // matching with the 'true' photon object from MC - photdeta = ( evt_.PhotonCand_eta[evt_.nPhotonCand]-evt_.GenPhotCand_eta[j] ); - photdphi = ( evt_.PhotonCand_phi[evt_.nPhotonCand]-evt_.GenPhotCand_phi[j] ); - photdr = sqrt( photdeta*photdeta + photdphi*photdphi ); - if ( photdr < endphotdr ) { - endphotdr = photdr; - endphotdeta = photdeta; - endphotdphi = photdphi; - } - } - evt_.PhotonCand_detatrue[evt_.nPhotonCand] = endphotdeta; - evt_.PhotonCand_dphitrue[evt_.nPhotonCand] = endphotdphi; - evt_.PhotonCand_drtrue[evt_.nPhotonCand] = endphotdr; - } - - const std::vector ids = photon->photonIDs(); - for ( unsigned int j = 0; j < ids.size(); ++j ) { - pat::Photon::IdPair idp = ids.at( j ); - //FIXME make me private attributes - if ( phoMediumIdLabel_.find( idp.first ) != std::string::npos ) - evt_.PhotonCand_mediumID[evt_.nPhotonCand] = idp.second; - if ( phoTightIdLabel_.find( idp.first ) != std::string::npos ) - evt_.PhotonCand_tightID[evt_.nPhotonCand] = idp.second; - } - - //edm::RefToBase photonRef = photonColl->refAt( i ); - //const edm::Ptr photonRef = photonColl->ptrAt( i ); - //evt_.PhotonCand_mediumID[evt_.nPhotonCand] = medium_id_decisions->operator[]( photonRef ); - //evt_.PhotonCand_tightID[evt_.nPhotonCand] = tight_id_decisions->operator[]( photonRef ); - - evt_.nPhotonCand++; - LogDebug( "GammaGammaLL" ) << "Passed photons retrieval stage. Got " << evt_.nPhotonCand << " photon(s)"; - } -} - void GammaGammaLL::fetchProtons( const edm::Event& iEvent ) { @@ -745,6 +670,10 @@ GammaGammaLL::fetchProtons( const edm::Event& iEvent ) if ( evt_.nLocalProtCand == ggll::AnalysisEvent::MAX_LOCALPCAND-1 ) throw cms::Exception( "GammaGammaLL" ) << "maximum number of local tracks in RPs is reached!\n" << "increase MAX_LOCALPCAND=" << ggll::AnalysisEvent::MAX_LOCALPCAND << " in GammaGammaLL.cc"; + + // transform the raw, 32-bit unsigned integer detId into the TOTEM "decimal" notation + const unsigned int raw_id = 100*det_id.arm()+10*det_id.station()+det_id.rp(); + evt_.LocalProtCand_x[evt_.nLocalProtCand] = ( trk.getX() )/1.e3; evt_.LocalProtCand_y[evt_.nLocalProtCand] = ( trk.getY() )/1.e3; evt_.LocalProtCand_xSigma[evt_.nLocalProtCand] = ( trk.getXUnc() )/1.e3; @@ -752,45 +681,67 @@ GammaGammaLL::fetchProtons( const edm::Event& iEvent ) evt_.LocalProtCand_arm[evt_.nLocalProtCand] = det_id.arm(); evt_.LocalProtCand_station[evt_.nLocalProtCand] = det_id.station(); evt_.LocalProtCand_pot[evt_.nLocalProtCand] = det_id.rp(); + evt_.LocalProtCand_rpid[evt_.nLocalProtCand] = raw_id; evt_.nLocalProtCand++; LogDebug( "GammaGammaLL" ) << "Proton track candidate with origin: ( " << trk.getX() << ", " << trk.getY() << " ) extracted!"; } LogDebug( "GammaGammaLL" ) << "Passed TOTEM RP info retrieval stage. Got " << evt_.nLocalProtCand << " local track(s)"; -} -void -GammaGammaLL::fetchJets( const edm::Event& iEvent ) -{ - // Get the Jet collection from the event - edm::Handle > jetColl; // PAT - iEvent.getByToken( jetToken_, jetColl ); - - double totalJetEnergy = 0., HEJet_pt = 0., HEJet_eta = 0., HEJet_phi = 0., HEJet_e = 0.; - - for ( unsigned int i = 0; i < jetColl->size() && evt_.nJetCand < ggll::AnalysisEvent::MAX_JETS; ++i ) { - const edm::Ptr jet = jetColl->ptrAt( i); - - evt_.JetCand_e[evt_.nJetCand] = jet->energy(); - evt_.JetCand_pt[evt_.nJetCand] = jet->pt(); - evt_.JetCand_eta[evt_.nJetCand] = jet->eta(); - evt_.JetCand_phi[evt_.nJetCand] = jet->phi(); - totalJetEnergy += evt_.JetCand_e[evt_.nJetCand]; - // Find kinematics quantities associated to the highest energy jet - if ( evt_.JetCand_e[evt_.nJetCand] > HEJet_e ) { - HEJet_e = evt_.JetCand_e[evt_.nJetCand]; - HEJet_pt = evt_.JetCand_pt[evt_.nJetCand]; - HEJet_eta = evt_.JetCand_eta[evt_.nJetCand]; - HEJet_phi = evt_.JetCand_phi[evt_.nJetCand]; + // Full reco protons + edm::Handle> recoProtons; + iEvent.getByToken(recoProtonsToken_, recoProtons); + + int ismultirp = -999; + unsigned int decRPId = -999; + unsigned int armId = -999; + float th_y = -999; + float th_x = -999; + float t = -999; + float xi = -999; + + + evt_.nRecoProtCand = 0; + for (const auto & proton : *recoProtons) + { + if (proton.valid()) + { + th_y = (proton.direction().y()) / (proton.direction().mag()); + th_x = (proton.direction().x()) / (proton.direction().mag()); + xi = proton.xi(); + + // t + const double m = 0.938; // GeV + const double p = 6500.; // GeV + + float t0 = 2.*m*m + 2.*p*p*(1.-xi) - 2.*sqrt( (m*m + p*p) * (m*m + p*p*(1.-xi)*(1.-xi)) ); + float th = sqrt(th_x * th_x + th_y * th_y); + float S = sin(th/2.); + t = t0 - 4. * p*p * (1.-xi) * S*S; + + if (proton.method == reco::ProtonTrack::rmSingleRP) + { + CTPPSDetId rpId(* proton.contributingRPIds.begin()); + decRPId = rpId.arm()*100 + rpId.station()*10 + rpId.rp(); + ismultirp = 0; + } + if (proton.method == reco::ProtonTrack::rmMultiRP) + { + CTPPSDetId rpId(* proton.contributingRPIds.begin()); + armId = rpId.arm(); + ismultirp = 1; + } + + evt_.ProtCand_xi[evt_.nRecoProtCand] = xi; + evt_.ProtCand_t[evt_.nRecoProtCand] = t; + evt_.ProtCand_ThX[evt_.nRecoProtCand] = th_x; + evt_.ProtCand_ThY[evt_.nRecoProtCand] = th_y; + evt_.ProtCand_rpid[evt_.nRecoProtCand] = decRPId; + evt_.ProtCand_arm[evt_.nRecoProtCand] = armId; + evt_.ProtCand_ismultirp[evt_.nRecoProtCand] = ismultirp; + evt_.nRecoProtCand++; + } } - evt_.nJetCand++; - } - evt_.HighestJet_pt = HEJet_pt; - evt_.HighestJet_eta = HEJet_eta; - evt_.HighestJet_phi = HEJet_phi; - evt_.HighestJet_e = HEJet_e; - evt_.SumJet_e = totalJetEnergy; - LogDebug( "GammaGammaLL" ) << "Passed Loop on jets"; } void @@ -927,7 +878,7 @@ GammaGammaLL::newTracksInfoRetrieval( int l1id, int l2id ) } // Save track properties if within 5mm - if ( vtxdst < 0.5 ) { + if ( (saveExtraTracks_ == true) && (vtxdst < 0.5) ) { evt_.ExtraTrack_pair[evt_.nExtraTracks] = evt_.nPair; evt_.ExtraTrack_purity[evt_.nExtraTracks] = track->quality( reco::TrackBase::highPurity ); evt_.ExtraTrack_nhits[evt_.nExtraTracks] = track->numberOfValidHits(); @@ -994,18 +945,10 @@ GammaGammaLL::newTracksInfoRetrieval( int l1id, int l2id ) evt_.Pair_dpt[evt_.nPair] = fabs( l1.Pt()-l2.Pt() ); evt_.Pair_3Dangle[evt_.nPair] = l1.Angle( l2.Vect() )/M_PI; - for ( unsigned int j = 0; j < evt_.nPhotonCand; ++j ) { - TLorentzVector pho; - pho.SetPtEtaPhiE( evt_.PhotonCand_pt[j], evt_.PhotonCand_eta[j], evt_.PhotonCand_phi[j], evt_.PhotonCand_e[j] ); - evt_.PairGamma_pair[evt_.nPairGamma] = evt_.nPair; - evt_.PairGamma_mass[evt_.nPairGamma] = ( pair+pho ).M(); - //std::cout << "Photon " << j << " added to pair " << evt_.PairGamma_pair[evt_.nPairGamma] << " to give a mass = " << evt_.PairGamma_mass[evt_.nPairGamma] << std::endl; - evt_.nPairGamma++; - } - evt_.nPair++; nCandidates_++; + return true; } @@ -1014,7 +957,7 @@ void GammaGammaLL::beginJob() { // Filling the ntuple - evt_.attach( tree_, leptonsType_, runOnMC_ ); + evt_.attach( tree_, leptonsType_, runOnMC_, saveExtraTracks_ ); *evt_.HLT_Name = triggersList_; } diff --git a/GammaGammaLeptonLepton/python/GammaGammaLL_cfi.py b/GammaGammaLeptonLepton/python/GammaGammaLL_cfi.py index b79cac6..3470ff9 100644 --- a/GammaGammaLeptonLepton/python/GammaGammaLL_cfi.py +++ b/GammaGammaLeptonLepton/python/GammaGammaLL_cfi.py @@ -28,6 +28,8 @@ metTag = cms.InputTag('patMETs'), photonTag = cms.InputTag('selectedPatPhotons'), ppsLocalTrackTag = cms.InputTag('ctppsLocalTrackLiteProducer'), + ppsRecoProtonTag = cms.InputTag('ctppsProtonReconstructionOFDB'), + genParticleTag = cms.InputTag('genParticles'), # Pileup reweighting diff --git a/GammaGammaLeptonLepton/test/RunGammaGammaLeptonLepton_cfg.py b/GammaGammaLeptonLepton/test/RunGammaGammaLeptonLepton_cfg.py index d5e23c0..b6b7558 100644 --- a/GammaGammaLeptonLepton/test/RunGammaGammaLeptonLepton_cfg.py +++ b/GammaGammaLeptonLepton/test/RunGammaGammaLeptonLepton_cfg.py @@ -4,6 +4,7 @@ runOnMC = False useAOD = True # AOD or MiniAOD? +#useAOD = False ######################### # General options # @@ -17,7 +18,7 @@ ) #process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10000) ) +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) process.MessageLogger.cerr.FwkReport.reportEvery = 1000 ######################### @@ -27,7 +28,16 @@ process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring( #'/store/data/Run2016G/DoubleEG/AOD/23Sep2016-v1/100000/0042DBD3-BA8E-E611-919E-002481ACDAA8.root', -'/store/data/Run2017C/DoubleMuon/AOD/12Sep2017-v1/10000/029F251F-B1A2-E711-AAC3-001E67792890.root', +#'/store/data/Run2017C/DoubleMuon/AOD/12Sep2017-v1/10000/029F251F-B1A2-E711-AAC3-001E67792890.root', +#'/store/data/Run2018B/DoubleMuon/MINIAOD/17Sep2018-v1/00000/8E1342C6-AA35-9049-B101-B5B595EAAEE2.root' +#'/store/data/Run2017C/DoubleMuon/AOD/17Nov2017-v1/30001/30DDB6DA-CBD8-E711-AF2A-A4BF0112BCB4.root' +#'file:/tmp/jjhollar/8816F63B-C0D5-E711-B32B-002590D9D9F0.root' + +#'/store/data/Run2017D/DoubleMuon/AOD/17Nov2017-v1/30000/6482D69E-48D6-E711-9AF7-008CFAF71FB4.root' +#'file:/tmp/jjhollar/6482D69E-48D6-E711-9AF7-008CFAF71FB4.root' +#'file:/tmp/jjhollar/F2C53386-ABFA-4A4F-B851-0065858DB53C.root' +'file:/tmp/jjhollar/14D52021-5DDE-E711-8A48-02163E01453B.root' + ), #firstEvent = cms.untracked.uint32(0) ) @@ -40,6 +50,8 @@ process.hltFilter.TriggerResultsTag = cms.InputTag("TriggerResults","","HLT") process.hltFilter.HLTPaths = cms.vstring( 'HLT_DoubleMu43NoFiltersNoVtx_*', + 'HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8_*', + 'HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8_*' # 'HLT_DoubleEle33_CaloIdL_MW_v*', # 'HLT_Ele27_HighEta_Ele20_Mass55_v*', # 'HLT_DoubleEle33_CaloIdL_GsfTrkIdVL_MW_v*', @@ -107,6 +119,27 @@ switchOnVIDPhotonIdProducer(process, DataFormat.AOD) setupAllVIDIdsInModule(process, 'RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring16_nonTrig_V1_cff', setupVIDPhotonSelection) +######################### +# Proton RECO # +######################### +process.load("RecoCTPPS.ProtonReconstruction.year_2017_OF.ctppsProtonReconstructionOF_cfi") +#process.load("RecoCTPPS.ProtonReconstruction.year_2018_OFDB.ctppsProtonReconstructionOFDB_cfi") +# conditions DB for 2018 + +#from CondCore.CondDB.CondDB_cfi import * +# +#CondDB.connect = 'frontier://FrontierProd/CMS_CONDITIONS' +# +#process.PoolDBESSource2 = cms.ESSource("PoolDBESSource", +# CondDB, +# DumpStat = cms.untracked.bool(False), +# toGet = cms.VPSet(cms.PSet( +# record = cms.string('LHCInfoRcd'), +# #tag = cms.string("LHCInfoTest_prompt_v3") +# tag = cms.string("LHCInfoEndFill_prompt_v1") +# )), +# ) + ######################### # Analysis # ######################### @@ -119,6 +152,9 @@ #process.ggll_aod.leptonsType = cms.string('Electron') process.ggll_aod.runOnMC = cms.bool(runOnMC) process.ggll_aod.fetchProtons = cms.bool(True) +process.ggll_aod.saveExtraTracks = cms.bool(False) +process.ggll_aod.year = cms.string('2017') + # E/gamma identification process.ggll_aod.eleIdLabels = cms.PSet( @@ -144,9 +180,11 @@ process.hltFilter* process.egmPhotonIDSequence* process.egmGsfElectronIDSequence* + process.ctppsProtonReconstructionOFDB * process.ggll_aod ) #process.outpath = cms.EndPath(process.out, patAlgosToolsTask) process.outpath = cms.EndPath(patAlgosToolsTask) +#print process.dumpPython()