00001
00002
00003
00004
00005
00006
00007
00008 #include "RecoJets/JetAnalyzers/interface/DijetMass.h"
00009
00010 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00011 #include "DataFormats/JetReco/interface/PFJetCollection.h"
00012 #include "DataFormats/JetReco/interface/GenJetCollection.h"
00013 #include "DataFormats/JetReco/interface/CaloJet.h"
00014 #include "DataFormats/JetReco/interface/PFJet.h"
00015 #include "DataFormats/JetReco/interface/GenJet.h"
00016 #include "DataFormats/Math/interface/deltaR.h"
00017 #include "FWCore/Framework/interface/Event.h"
00018 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00019 #include <TROOT.h>
00020 #include <TSystem.h>
00021 #include <TFile.h>
00022 #include <TCanvas.h>
00023 #include <cmath>
00024 using namespace edm;
00025 using namespace reco;
00026 using namespace std;
00027
00028
00029 template<class Jet>
00030 DijetMass<Jet>::DijetMass( const edm::ParameterSet & cfg ) {
00031 PtHistMax = cfg.getUntrackedParameter<double>( "PtHistMax", 3000.0);
00032 EtaMax = cfg.getUntrackedParameter<double> ("EtaMax", 1.3);
00033 histogramFile = cfg.getUntrackedParameter<std::string>("HistoFileName",
00034 "DijetMassHistos.root");
00035
00036 AKJets = cfg.getParameter<std::string> ("AKJets");
00037 AKCorJets = cfg.getParameter<std::string> ("AKCorrectedJets");
00038 ICJets = cfg.getParameter<std::string> ("ICJets");
00039 ICCorJets = cfg.getParameter<std::string> ("ICCorrectedJets");
00040 SCJets = cfg.getParameter<std::string> ("SCJets");
00041 SCCorJets = cfg.getParameter<std::string> ("SCCorrectedJets");
00042 KTJets = cfg.getParameter<std::string> ("KTJets");
00043 KTCorJets = cfg.getParameter<std::string> ("KTCorrectedJets");
00044 }
00045
00046 template<class Jet>
00047 void DijetMass<Jet>::beginJob( ) {
00048 cout << "DijetMass: Maximum bin edge for Pt Hists = " << PtHistMax << endl;
00049 numJets=2;
00050
00051
00052 evtCount = 0;
00053
00054
00055 m_file=new TFile( histogramFile.c_str(),"RECREATE" );
00056
00057
00058
00059
00060 ptAKunc = TH1F("ptAKunc","p_{T} of leading Jets (AK)",50,0.0,PtHistMax);
00061 etaAKunc = TH1F("etaAKunc","#eta of leading Jets (AK)",23,-1.0,1.0);
00062 phiAKunc = TH1F("phiAKunc","#phi of leading Jets (AK)",72,-M_PI, M_PI);
00063 m2jAKunc = TH1F("m2jAKunc","Dijet Mass of leading Jets (AK)",100,0.0,2*PtHistMax);
00064
00065
00066
00067 ptAKcor = TH1F("ptAKcor","p_{T} of leading Corrected Jets (AK)",50,0.0,PtHistMax);
00068 etaAKcor = TH1F("etaAKcor","#eta of leading Corrected Jets (AK)",23,-1.0,1.0);
00069 phiAKcor = TH1F("phiAKcor","#phi of leading Corrected Jets (AK)",72,-M_PI, M_PI);
00070 m2jAKcor = TH1F("m2jAKcor","Dijet Mass of leading Corrected Jets (AK)",100,0.0,2*PtHistMax);
00071
00072
00073 ptICunc = TH1F("ptICunc","p_{T} of leading Jets (IC)",50,0.0,PtHistMax);
00074 etaICunc = TH1F("etaICunc","#eta of leading Jets (IC)",23,-1.0,1.0);
00075 phiICunc = TH1F("phiICunc","#phi of leading Jets (IC)",72,-M_PI, M_PI);
00076 m2jICunc = TH1F("m2jICunc","Dijet Mass of leading Jets (IC)",100,0.0,2*PtHistMax);
00077
00078
00079
00080 ptICcor = TH1F("ptICcor","p_{T} of leading Corrected Jets (IC)",50,0.0,PtHistMax);
00081 etaICcor = TH1F("etaICcor","#eta of leading Corrected Jets (IC)",23,-1.0,1.0);
00082 phiICcor = TH1F("phiICcor","#phi of leading Corrected Jets (IC)",72,-M_PI, M_PI);
00083 m2jICcor = TH1F("m2jICcor","Dijet Mass of leading Corrected Jets (IC)",100,0.0,2*PtHistMax);
00084
00085
00086 ptKTunc = TH1F("ptKTunc","p_{T} of leading Jets (KT)",50,0.0,PtHistMax);
00087 etaKTunc = TH1F("etaKTunc","#eta of leading Jets (KT)",23,-1.0,1.0);
00088 phiKTunc = TH1F("phiKTunc","#phi of leading Jets (KT)",72,-M_PI, M_PI);
00089 m2jKTunc = TH1F("m2jKTunc","Dijet Mass of leading Jets (KT)",100,0.0,2*PtHistMax);
00090
00091
00092
00093 ptKTcor = TH1F("ptKTcor","p_{T} of leading Corrected Jets (KT)",50,0.0,PtHistMax);
00094 etaKTcor = TH1F("etaKTcor","#eta of leading Corrected Jets (KT)",23,-1.0,1.0);
00095 phiKTcor = TH1F("phiKTcor","#phi of leading Corrected Jets (KT)",72,-M_PI, M_PI);
00096 m2jKTcor = TH1F("m2jKTcor","Dijet Mass of leading Corrected Jets (KT)",100,0.0,2*PtHistMax);
00097
00098
00099 ptSCunc = TH1F("ptSCunc","p_{T} of leading Jets (SC)",50,0.0,PtHistMax);
00100 etaSCunc = TH1F("etaSCunc","#eta of leading Jets (SC)",23,-1.0,1.0);
00101 phiSCunc = TH1F("phiSCunc","#phi of leading Jets (SC)",72,-M_PI, M_PI);
00102 m2jSCunc = TH1F("m2jSCunc","Dijet Mass of leading Jets (SC)",100,0.0,2*PtHistMax);
00103
00104
00105 ptSCcor = TH1F("ptSCcor","p_{T} of leading Corrected Jets (SC)",50,0.0,PtHistMax);
00106 etaSCcor = TH1F("etaSCcor","#eta of leading Corrected Jets (SC)",23,-1.0,1.0);
00107 phiSCcor = TH1F("phiSCcor","#phi of leading Corrected Jets (SC)",72,-M_PI, M_PI);
00108 m2jSCcor = TH1F("m2jSCcor","Dijet Mass of leading Corrected Jets (SC)",100,0.0,2*PtHistMax);
00109
00110 }
00111
00112
00113
00114 template<class Jet>
00115 void DijetMass<Jet>::analyze( const Event& evt, const EventSetup& es ) {
00116
00117 evtCount++;
00118 math::XYZTLorentzVector p4jet[2];
00119 int jetInd;
00120 Handle<JetCollection> Jets;
00121
00122
00123
00124 typename JetCollection::const_iterator i_jet;
00125
00126
00127 evt.getByLabel( AKJets, Jets );
00128 jetInd = 0;
00129 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++ i_jet ) {
00130 p4jet[jetInd] = i_jet->p4();
00131 jetInd++;
00132 }
00133 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00134 m2jAKunc.Fill( (p4jet[0]+p4jet[1]).mass() );
00135 ptAKunc.Fill( p4jet[0].Pt() ); ptAKunc.Fill( p4jet[1].Pt() );
00136 etaAKunc.Fill( p4jet[0].eta() ); etaAKunc.Fill( p4jet[1].eta() );
00137 phiAKunc.Fill( p4jet[0].phi() ); phiAKunc.Fill( p4jet[1].phi() );
00138 }
00139
00140
00141
00142 evt.getByLabel( AKCorJets, Jets );
00143 jetInd = 0;
00144 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++ i_jet ) {
00145 p4jet[jetInd] = i_jet->p4();
00146 jetInd++;
00147 }
00148 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00149 m2jAKcor.Fill( (p4jet[0]+p4jet[1]).mass() );
00150 ptAKcor.Fill( p4jet[0].Pt() ); ptAKcor.Fill( p4jet[1].Pt() );
00151 etaAKcor.Fill( p4jet[0].eta() ); etaAKcor.Fill( p4jet[1].eta() );
00152 phiAKcor.Fill( p4jet[0].phi() ); phiAKcor.Fill( p4jet[1].phi() );
00153 }
00154
00155
00156
00157 evt.getByLabel( ICJets, Jets );
00158 jetInd = 0;
00159 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++ i_jet ) {
00160 p4jet[jetInd] = i_jet->p4();
00161 jetInd++;
00162 }
00163 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00164 m2jICunc.Fill( (p4jet[0]+p4jet[1]).mass() );
00165 ptICunc.Fill( p4jet[0].Pt() ); ptICunc.Fill( p4jet[1].Pt() );
00166 etaICunc.Fill( p4jet[0].eta() ); etaICunc.Fill( p4jet[1].eta() );
00167 phiICunc.Fill( p4jet[0].phi() ); phiICunc.Fill( p4jet[1].phi() );
00168 }
00169
00170
00171
00172 evt.getByLabel( ICCorJets, Jets );
00173 jetInd = 0;
00174 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++ i_jet ) {
00175 p4jet[jetInd] = i_jet->p4();
00176 jetInd++;
00177 }
00178 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00179 m2jICcor.Fill( (p4jet[0]+p4jet[1]).mass() );
00180 ptICcor.Fill( p4jet[0].Pt() ); ptICcor.Fill( p4jet[1].Pt() );
00181 etaICcor.Fill( p4jet[0].eta() ); etaICcor.Fill( p4jet[1].eta() );
00182 phiICcor.Fill( p4jet[0].phi() ); phiICcor.Fill( p4jet[1].phi() );
00183 }
00184
00185
00186 evt.getByLabel( KTJets, Jets );
00187 jetInd = 0;
00188 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++ i_jet ) {
00189 p4jet[jetInd] = i_jet->p4();
00190 jetInd++;
00191 }
00192 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00193 m2jKTunc.Fill( (p4jet[0]+p4jet[1]).mass() );
00194 ptKTunc.Fill( p4jet[0].Pt() ); ptKTunc.Fill( p4jet[1].Pt() );
00195 etaKTunc.Fill( p4jet[0].eta() ); etaKTunc.Fill( p4jet[1].eta() );
00196 phiKTunc.Fill( p4jet[0].phi() ); phiKTunc.Fill( p4jet[1].phi() );
00197 }
00198
00199
00200
00201 evt.getByLabel( KTCorJets, Jets );
00202 jetInd = 0;
00203 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++i_jet ) {
00204 p4jet[jetInd] = i_jet->p4();
00205 jetInd++;
00206 }
00207 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00208 m2jKTcor.Fill( (p4jet[0]+p4jet[1]).mass() );
00209 ptKTcor.Fill( p4jet[0].Pt() ); ptKTcor.Fill( p4jet[1].Pt() );
00210 etaKTcor.Fill( p4jet[0].eta() ); etaKTcor.Fill( p4jet[1].eta() );
00211 phiKTcor.Fill( p4jet[0].phi() ); phiKTcor.Fill( p4jet[1].phi() );
00212 }
00213
00214
00215
00216 evt.getByLabel( SCJets, Jets );
00217 jetInd = 0;
00218 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++i_jet ) {
00219 p4jet[jetInd] = i_jet->p4();
00220 jetInd++;
00221 }
00222 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00223 m2jSCunc.Fill( (p4jet[0]+p4jet[1]).mass() );
00224 ptSCunc.Fill( p4jet[0].Pt() ); ptSCunc.Fill( p4jet[1].Pt() );
00225 etaSCunc.Fill( p4jet[0].eta() ); etaSCunc.Fill( p4jet[1].eta() );
00226 phiSCunc.Fill( p4jet[0].phi() ); phiSCunc.Fill( p4jet[1].phi() );
00227 }
00228
00229
00230
00231 evt.getByLabel( SCCorJets, Jets );
00232 jetInd = 0;
00233 for( i_jet = Jets->begin(); i_jet != Jets->end() && jetInd<2; ++i_jet ) {
00234 p4jet[jetInd] = i_jet->p4();
00235 jetInd++;
00236 }
00237 if(jetInd==2&&abs(p4jet[0].eta())<EtaMax &&abs(p4jet[1].eta())<EtaMax ){
00238 m2jSCcor.Fill( (p4jet[0]+p4jet[1]).mass() );
00239 ptSCcor.Fill( p4jet[0].Pt() ); ptSCcor.Fill( p4jet[1].Pt() );
00240 etaSCcor.Fill( p4jet[0].eta() ); etaSCcor.Fill( p4jet[1].eta() );
00241 phiSCcor.Fill( p4jet[0].phi() ); phiSCcor.Fill( p4jet[1].phi() );
00242 }
00243
00244 }
00245
00246 template<class Jet>
00247 void DijetMass<Jet>::endJob() {
00248
00249
00250 m_file->cd();
00251
00252 ptAKunc.Write();
00253 etaAKunc.Write();
00254 phiAKunc.Write();
00255 m2jAKunc.Write();
00256
00257 ptAKcor.Write();
00258 etaAKcor.Write();
00259 phiAKcor.Write();
00260 m2jAKcor.Write();
00261
00262 ptICunc.Write();
00263 etaICunc.Write();
00264 phiICunc.Write();
00265 m2jICunc.Write();
00266
00267
00268 ptICcor.Write();
00269 etaICcor.Write();
00270 phiICcor.Write();
00271 m2jICcor.Write();
00272
00273 ptKTunc.Write();
00274 etaKTunc.Write();
00275 phiKTunc.Write();
00276 m2jKTunc.Write();
00277
00278
00279 ptKTcor.Write();
00280 etaKTcor.Write();
00281 phiKTcor.Write();
00282 m2jKTcor.Write();
00283
00284 ptSCunc.Write();
00285 etaSCunc.Write();
00286 phiSCunc.Write();
00287 m2jSCunc.Write();
00288
00289 ptSCcor.Write();
00290 etaSCcor.Write();
00291 phiSCcor.Write();
00292 m2jSCcor.Write();
00293
00294 m_file->Close();
00295 }
00296 #include "FWCore/Framework/interface/MakerMacros.h"
00298 typedef DijetMass<CaloJet> DijetMassCaloJets;
00299 DEFINE_FWK_MODULE(DijetMassCaloJets);
00301 typedef DijetMass<GenJet> DijetMassGenJets;
00302 DEFINE_FWK_MODULE(DijetMassGenJets);
00304 typedef DijetMass<PFJet> DijetMassPFJets;
00305 DEFINE_FWK_MODULE(DijetMassPFJets);