00001 #include <iostream>
00002 #include <stdio.h>
00003 #include "HepMC/GenEvent.h"
00004 #include "HepMC/IO_GenEvent.h"
00005 #include "HepMC/GenParticle.h"
00006 #include "HepMC/GenVertex.h"
00007 #include "HepMC/IO_AsciiParticles.h"
00008 #include "HepMC/SimpleVector.h"
00009 #include "HepPDT/ParticleData.hh"
00010 #include "CLHEP/Vector/LorentzVector.h"
00011 #define PI 3.141593
00012 using namespace std;
00013
00014
00015 #include "TH1.h"
00016 #include "TH2.h"
00017 #include "TFile.h"
00018 #include "TMath.h"
00019 #include "TLorentzVector.h"
00020
00021 #include "fastjet/PseudoJet.hh"
00022 #include "fastjet/ClusterSequence.hh"
00023 #include "fastjet/JetDefinition.hh"
00024 #include "fastjet/SISConePlugin.hh"
00025
00026
00027 #include "../include/UEAnalysis.h"
00028
00029
00030
00031
00032 UEAnalysis::UEAnalysis() {
00033
00034 }
00035
00036
00037 UEAnalysis::~UEAnalysis() {
00038
00039 }
00040
00041 int UEAnalysis::Init(double tr_max_eta, double tr_min_pt) {
00042
00043 m_max_eta=tr_max_eta;
00044
00045
00046 m_min_pt=tr_min_pt;
00047
00048
00049 m_outputFileName="UEAnalysis.root";
00050 m_outputRootDir="UE";
00051
00052 char name1[20],title1[20];
00053 char name2[20],title2[20];
00054 char name3[20],title3[20];
00055
00056 for (int i=0; i<26; i++){
00057
00058
00059 sprintf(name1,"NchargedToward_%2d",i);
00060 sprintf(name2,"NchargedTransverse_%2d",i);
00061 sprintf(name3,"NchargedAway_%2d",i);
00062
00063 sprintf(title1,"NchargedToward_%2d",i);
00064 sprintf(title2,"NchargedTransverse_%2d",i);
00065 sprintf(title2,"NchargedAway_%2d",i);
00066
00067 m_NchargedToward[i] = new TH1D(name1,title1, 20, 0, 100);
00068 m_NchargedTransverse[i] = new TH1D(name2,title2, 20, 0, 100);
00069 m_NchargedAway[i] = new TH1D(name3,title3, 20, 0, 100);
00070
00071
00072 sprintf(name1,"PtsumToward_%2d",i);
00073 sprintf(name2,"PtsumTransverse_%2d",i);
00074 sprintf(name3,"PtsumAway_%2d",i);
00075
00076 sprintf(title1,"PtsumToward_%2d",i);
00077 sprintf(title2,"PtsumTransverse_%2d",i);
00078 sprintf(title2,"PtsumAway_%2d",i);
00079
00080 m_PtsumToward[i] = new TH1D(name1,title1, 20, 0, 100);
00081 m_PtsumTransverse[i] = new TH1D(name2,title2, 20, 0, 100);
00082 m_PtsumAway[i] = new TH1D(name3,title3, 20, 0, 100);
00083
00084 }
00085
00086
00087
00088 m_nbin_pT = 25;
00089
00090 for (int i=0; i<11; i++) {
00091 m_nbinRange_pT[i] = i;
00092 }
00093 for (int i=11; i<21; i++) {
00094 m_nbinRange_pT[i] = 10.0+ 3.0*(i-10);
00095 }
00096 m_nbinRange_pT[21] = 50.;
00097 m_nbinRange_pT[22] = 60.;
00098 m_nbinRange_pT[23] = 70.;
00099 m_nbinRange_pT[24] = 80.;
00100 m_nbinRange_pT[25] = 120.;
00101
00102
00103 m_NchargedMeanToward = baseAnalysis::initHistVariableBin( string("NchargedMeanToward"), string("NchargedMeanToward"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00104 m_NchargedMeanTransverse = baseAnalysis::initHistVariableBin( string("NchargedMeanTransverse"), string("NchargedMeanTransverse"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00105 m_NchargedMeanAway = baseAnalysis::initHistVariableBin( string("NchargedMeanAway"), string("NchargedMeanAway"), string("Pt_leadingJet"),m_nbin_pT, m_nbinRange_pT);
00106
00107 m_PtsumMeanToward = baseAnalysis::initHistVariableBin( string("PtsumMeanToward"), string("PtsumMeanToward"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00108 m_PtsumMeanTransverse = baseAnalysis::initHistVariableBin( string("PtsumMeanTransverse"), string("PtsumMeanTransverse"), string("Pt_leadingJet"), m_nbin_pT, m_nbinRange_pT);
00109 m_PtsumMeanAway = baseAnalysis::initHistVariableBin( string("PtsumMeanAway"), string("PtsumMeanAway"), string("Pt_leadingJet"),m_nbin_pT, m_nbinRange_pT);
00110
00111 m_Njet = baseAnalysis::initHist( string("Njet"), string("Njet"), string("jet Number"), 16, -0.5, 15.5);
00112 m_Ptjet = baseAnalysis::initHist( string("Ptjet"), string("jet p_{T}"), string("jet p_{T}"), 50, 0, 200);
00113 m_Ptjet_log = baseAnalysis::initHist( string("Ptjet_logscale"), string("jet p_{T}"), string("jet p_{T} - logscale -"), 50, 0, 200);
00114 m_Ptleadingjet = baseAnalysis::initHist( string("Ptleadingjet"), string("leading jet p_{T}"), string("leading jet p_{T}"), 50, 0, 200);
00115 m_Ptleadingjet_log = baseAnalysis::initHist( string("Ptleadingjet_logscale"), string("leading jet p_{T}"),
00116 string("leading jet p_{T} - logscale -"), 50, 0, 200);
00117
00118 m_charged_particle_pt=baseAnalysis::initHist("charged_particle_pt","p_{T} of charged particles","p_{T}",25,0,25.);
00119
00120 return true;
00121 }
00122
00123
00124 int UEAnalysis::Process(HepMC::GenEvent* hepmcevt){
00125
00126
00127 double leadingJetPt = 0.0;
00128 CLHEP::HepLorentzVector lv_leadingJet(0,0,0,0);
00129
00130
00131
00132
00133
00134
00135 if(m_inclusive_jets.size()) {
00136
00137 lv_leadingJet.setPx(m_inclusive_jets[0].px());
00138 lv_leadingJet.setPy(m_inclusive_jets[0].py());
00139 lv_leadingJet.setPz(m_inclusive_jets[0].pz());
00140 lv_leadingJet.setE(m_inclusive_jets[0].e());
00141
00142 leadingJetPt = m_inclusive_jets[0].perp();
00143
00144 for(unsigned int i=0; i<m_inclusive_jets.size(); i++) {
00145 m_Ptjet->Fill(m_inclusive_jets[i].perp());
00146 m_Ptjet_log->Fill(m_inclusive_jets[i].perp());
00147 }
00148 m_Njet->Fill(m_inclusive_jets.size());
00149 m_Ptleadingjet->Fill(m_inclusive_jets[0].perp());
00150 m_Ptleadingjet_log->Fill(m_inclusive_jets[0].perp());
00151 }
00152 int NchargedToward[25];
00153 int NchargedTransverse[25];
00154 int NchargedAway[25];
00155
00156 double PtsumToward[25];
00157 double PtsumTransverse[25];
00158 double PtsumAway[25];
00159
00160 for(int i=0; i<m_nbin_pT; i++){
00161 NchargedToward[i]=0;
00162 NchargedTransverse[i]=0;
00163 NchargedAway[i]=0;
00164
00165 PtsumToward[i]=0;
00166 PtsumTransverse[i]=0;
00167 PtsumAway[i]=0;
00168 }
00169
00170
00171 int ileadjet = -1;
00172
00173 for(int i=0; i<m_nbin_pT; i++) {
00174 if( leadingJetPt > m_nbinRange_pT[i] && leadingJetPt < m_nbinRange_pT[i+1])
00175 ileadjet = i;
00176 }
00177
00178
00179 for ( HepMC::GenEvent::particle_const_iterator p =
00180 hepmcevt->particles_begin(); p != hepmcevt->particles_end(); ++p ){
00181
00182
00183 int pid = (*p)->pdg_id();
00184
00185
00186
00187
00188 if(!chargedParticle(pid)) continue;
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199 if(!IsFinalStateParticle((*p))) continue;
00200
00201 m_charged_particle_pt->Fill((*p)->momentum().perp());
00202
00203
00204 if(ileadjet == -1) continue;
00205
00206 double pt = (*p)->momentum().perp();
00207 double px = (*p)->momentum().px();
00208 double py = (*p)->momentum().py();
00209 double pz = (*p)->momentum().pz();
00210 double pe = (*p)->momentum().e();
00211
00212 CLHEP::HepLorentzVector lv_chargedParticle(px,py,pz,pe);
00213
00214
00215 if( fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) < PI/3.0 ) {
00216 NchargedToward[ileadjet]++;
00217 PtsumToward[ileadjet]+=pt;
00218 }
00219
00220
00221 if( fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) >= PI/3.0 &&
00222 fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) < 2.0*PI/3.0 ) {
00223 NchargedTransverse[ileadjet]++;
00224 PtsumTransverse[ileadjet]+=pt;
00225 }
00226
00227 if( fabs(lv_chargedParticle.vect().deltaPhi(lv_leadingJet.vect())) >= 2.0*PI/3.0 ) {
00228 NchargedAway[ileadjet]++;
00229 PtsumAway[ileadjet]+=pt;
00230 }
00231
00232 m_NchargedToward[ileadjet]->Fill(NchargedToward[ileadjet], 1.);
00233 m_NchargedTransverse[ileadjet]->Fill(NchargedTransverse[ileadjet], 1.);
00234 m_NchargedAway[ileadjet]->Fill(NchargedAway[ileadjet], 1.);
00235
00236 m_PtsumToward[ileadjet]->Fill(PtsumToward[ileadjet], 1.);
00237 m_PtsumTransverse[ileadjet]->Fill(PtsumTransverse[ileadjet], 1.);
00238 m_PtsumAway[ileadjet]->Fill(PtsumAway[ileadjet], 1.);
00239
00240 }
00241
00242 return true;
00243 }
00244
00245 std::vector<TH1D*> UEAnalysis::averagedHistograms() {
00246
00247
00248 for(int i=0; i<m_nbin_pT; i++){
00249 m_NchargedMeanToward->SetBinContent( i+1, m_NchargedToward[i]->GetMean() );
00250 m_NchargedMeanToward->SetBinError( i+1, m_NchargedToward[i]->GetRMS() );
00251
00252 m_NchargedMeanTransverse->SetBinContent( i+1, m_NchargedTransverse[i]->GetMean() );
00253 m_NchargedMeanTransverse->SetBinError( i+1, m_NchargedTransverse[i]->GetRMS() );
00254
00255 m_NchargedMeanAway->SetBinContent( i+1, m_NchargedAway[i]->GetMean() );
00256 m_NchargedMeanAway->SetBinError( i+1, m_NchargedAway[i]->GetRMS() );
00257
00258 m_PtsumMeanToward->SetBinContent( i+1, m_PtsumToward[i]->GetMean() );
00259 m_PtsumMeanToward->SetBinError( i+1, m_PtsumToward[i]->GetRMS() );
00260
00261 m_PtsumMeanTransverse->SetBinContent( i+1, m_PtsumTransverse[i]->GetMean() );
00262 m_PtsumMeanTransverse->SetBinError( i+1, m_PtsumTransverse[i]->GetRMS() );
00263
00264 m_PtsumMeanAway->SetBinContent( i+1, m_PtsumAway[i]->GetMean() );
00265 m_PtsumMeanAway->SetBinError( i+1, m_PtsumAway[i]->GetRMS() );
00266 }
00267
00268
00269
00270 return m_histVector;
00271 }
00272
00273 int UEAnalysis::Finalize(TFile* output){
00274
00275 averagedHistograms();
00276
00277 baseAnalysis::Finalize(output);
00278
00279 return true;
00280 }