00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "Validation/EventGenerator/interface/MBUEandQCDValidation.h"
00010 #include "Validation/EventGenerator/interface/HepMCValidationHelper.h"
00011
00012 #include "CLHEP/Units/defs.h"
00013 #include "CLHEP/Units/PhysicalConstants.h"
00014 #include "CLHEP/Units/SystemOfUnits.h"
00015
00016 #include "fastjet/JetDefinition.hh"
00017 #include "fastjet/ClusterSequence.hh"
00018
00019 using namespace edm;
00020
00021 MBUEandQCDValidation::MBUEandQCDValidation(const edm::ParameterSet& iPSet):
00022 _wmanager(iPSet),
00023 hepmcCollection_(iPSet.getParameter<edm::InputTag>("hepmcCollection")),
00024 genchjetCollection_(iPSet.getParameter<edm::InputTag>("genChjetsCollection")),
00025 genjetCollection_(iPSet.getParameter<edm::InputTag>("genjetsCollection")),
00026 verbosity_(iPSet.getUntrackedParameter<unsigned int>("verbosity",0))
00027 {
00028 dbe = 0;
00029 dbe = edm::Service<DQMStore>().operator->();
00030
00031 hepmcGPCollection.reserve(initSize);
00032 hepmcCharge.reserve(initSize);
00033
00034 theCalo= new CaloCellManager(verbosity_);
00035
00036 eneInCell.resize(CaloCellManager::nCaloCell);
00037
00038 }
00039
00040 MBUEandQCDValidation::~MBUEandQCDValidation() {
00041
00042 delete theCalo;
00043
00044 }
00045
00046 void MBUEandQCDValidation::beginJob()
00047 {
00048 if(dbe){
00050 dbe->setCurrentFolder("Generator/MBUEandQCD");
00051
00053
00054
00055 nEvt = dbe->book1D("nEvt", "n analyzed Events", 1, 0., 1.);
00056
00057
00058 nNoFwdTrig = dbe->book1D("nNoFwdTrig", "n Events no forward trigger", 1, 0., 1.);
00059
00060
00061 nSaFwdTrig = dbe->book1D("nSaFwdTrig", "n Events single arm forward trigger", 1, 0., 1.);
00062
00063
00064 nbquark = dbe->book1D("nbquark", "n Events with b quark", 1, 0., 1.);
00065
00066
00067 ncandbquark = dbe->book1D("ncandbquark", "n Events with c and b quark", 1, 0., 1.);
00068
00069
00070 ncnobquark = dbe->book1D("ncnobquark", "n Events with c and no b quark", 1, 0., 1.);
00071
00072
00073
00074 nEvt1 = dbe->book1D("nEvt1", "n Events QCD-09-010", 1, 0., 1.);
00075
00076 dNchdpt1 = dbe->book1D("dNchdpt1", "dNchdpt QCD-09-010", 30, 0., 6.);
00077
00078 dNchdeta1 = dbe->book1D("dNchdeta1", "dNchdeta QCD-09-010", 10, -2.5, 2.5);
00079
00080
00081 nEvt2 = dbe->book1D("nEvt2", "n Events QCD-10-001", 1, 0., 1.);
00082
00083 leadTrackpt = dbe->book1D("leadTrackpt", "leading track pt QCD-10-001", 200, 0., 100.);
00084
00085 leadTracketa = dbe->book1D("leadTracketa", "leading track eta QCD-10-001", 50., -2.5,2.5);
00086
00087 nChaDenLpt = dbe->bookProfile("nChaDenLpt", "charged density vs leading pt", 200, 0., 100., 0., 100., " ");
00088
00089 sptDenLpt = dbe->bookProfile("sptDenLpt", "sum pt density vs leading pt", 200, 0., 100., 0., 300., " ");
00090
00091 dNchdpt2 = dbe->book1D("dNchdpt2", "dNchdpt QCD-10-001", 200, 0., 100.);
00092
00093 dNchdeta2 = dbe->book1D("dNchdeta2", "dNchdeta QCD-10-001", 50, -2.5, 2.5);
00094
00095 nCha = dbe->book1D("nCha", "n charged QCD-10-001", 100, 0., 100.);
00096
00097 dNchdSpt = dbe->book1D("dNchdSpt", "dNchdSpt QCD-10-001", 300, 0., 300.);
00098
00099 dNchdphi = dbe->bookProfile("dNchdphi", "dNchdphi QCD-10-001", nphiBin, -180., 180., 0., 30., " ");
00100
00101 dSptdphi = dbe->bookProfile("dSptdphi", "dSptdphi QCD-10-001", nphiBin, -180., 180., 0., 30., " ");
00102
00103
00104 nChj = dbe->book1D("nChj", "n charged jets QCD-10-001", 30, 0, 30.);
00105
00106 dNchjdeta = dbe->book1D("dNchjdeta", "dNchjdeta QCD-10-001", 50, -2.5, 2.5);
00107
00108 dNchjdpt = dbe->book1D("dNchjdpt", "dNchjdpt QCD-10-001", 100, 0., 100.);
00109
00110 leadChjpt = dbe->book1D("leadChjpt", "leadChjpt QCD-10-001", 100, 0., 100.);
00111
00112 leadChjeta = dbe->book1D("leadChjeta", "leadChjeta QCD-10-001", 50, -2.5, 2.5);
00113
00114 pt1pt2optotch = dbe->bookProfile("pt1pt2optotch", "sum 2 leading jets over ptot", 50, 0., 100., 0., 1., " ");
00115
00116
00117 nPPbar = dbe->book1D("nPPbar", "nPPbar QCD-10-001", 30, 0., 30.);
00118 nKpm = dbe->book1D("nKpm", "nKpm QCD-10-001", 30, 0., 30.);
00119 nK0s = dbe->book1D("nK0s", "nK0s QCD-10-001", 30, 0., 30.);
00120 nL0 = dbe->book1D("nL0", "nL0 QCD-10-001", 30, 0., 30.);
00121 nXim = dbe->book1D("nXim", "nXim QCD-10-001", 30, 0., 30.);
00122 nOmega = dbe->book1D("nOmega", "nOmega QCD-10-001", 30, 0., 30.);
00123
00124 pPPbar = dbe->book1D("pPPbar", "Log10(pt) PPbar QCD-10-001", 25, -2., 3.);
00125 pKpm = dbe->book1D("pKpm", "Log10(pt) Kpm QCD-10-001", 25, -2., 3.);
00126 pK0s = dbe->book1D("pK0s", "Log10(pt) K0s QCD-10-001", 25, -2., 3.);
00127 pL0 = dbe->book1D("pL0", "Log10(pt) L0 QCD-10-001", 25, -2., 3.);
00128 pXim = dbe->book1D("pXim", "Log10(pt) Xim QCD-10-001", 25, -2., 3.);
00129 pOmega = dbe->book1D("pOmega", "Log10(pt) Omega QCD-10-001", 25, -2., 3.);
00130
00131
00132 nNNbar = dbe->book1D("nNNbar", "nNNbar QCD-10-001", 30, 0., 30.);
00133 nGamma = dbe->book1D("nGamma", "nGamma QCD-10-001", 50, 0., 200.);
00134
00135 pNNbar = dbe->book1D("pNNbar", "Log10(pt) NNbar QCD-10-001", 25, -2., 3.);
00136 pGamma = dbe->book1D("pGamma", "Log10(pt) Gamma QCD-10-001", 25, -2., 3.);
00137
00138
00139 elePt = dbe->book1D("elePt", "highest pt electron Log10(pt)", 30, -2., 4.);
00140
00141
00142 muoPt = dbe->book1D("muoPt", "highest pt muon Log10(pt)", 30, -2., 4.);
00143
00144
00145
00146 nDijet = dbe->book1D("nDijet", "n Dijet Events", 1, 0., 1.);
00147
00148 nj = dbe->book1D("nj", "n jets ", 30, 0, 30.);
00149
00150 dNjdeta = dbe->book1D("dNjdeta", "dNjdeta ", 50, -5., 5.);
00151
00152 dNjdpt = dbe->book1D("dNjdpt", "dNjdpt ", 60, 0., 300.);
00153
00154 pt1pt2optot = dbe->bookProfile("pt1pt2optot", "sum 2 leading jets over Et tot ", 60, 0., 300., 0., 1., " ");
00155
00156 pt1pt2balance = dbe->book1D("pt1pt2balance", "2 leading jets pt difference ", 10, 0., 1.);
00157
00158 pt1pt2Dphi = dbe->book1D("pt1pt2Dphi", "pt1 pt2 delta phi ", nphiBin, 0., 180.);
00159
00160 pt1pt2InvM = dbe->book1D("pt1pt2InvM", "pt1 pt2 invariant mass ", 60, 0., 600.);
00161
00162 pt3Frac = dbe->book1D("pt3Frac", "2 pt3 over pt1+pt2 ", 30, 0., 1.);
00163
00164 sumJEt = dbe->book1D("sumJEt", "sum Jet Et ", 60, 0., 300.);
00165
00166 missEtosumJEt = dbe->book1D("missEtosumJEt", "missing Et over sumJet Et ", 30, 0., 1.);
00167
00168 sumPt = dbe->book1D("sumPt", "sum particle Pt ", 60, 0., 600.);
00169
00170 sumChPt = dbe->book1D("sumChPt", "sum charged particle Pt ", 60, 0., 300.);
00171
00172
00173 nHFflow = dbe->book1D("nHFflow", "n HF flow events", 1, 0., 1.);
00174
00175 dEdetaHFmb = dbe->bookProfile("dEdetaHFmb", "dEdeta HF MinBias", (int)CaloCellManager::nForwardEta, 0, (double)CaloCellManager::nForwardEta, 0., 300., " ");
00176
00177 dEdetaHFdj = dbe->bookProfile("dEdetaHFdj", "dEdeta HF QCD dijet", (int)CaloCellManager::nForwardEta, 0, (double)CaloCellManager::nForwardEta, 0., 300., " ");
00178
00179
00180 nHFSD = dbe->book1D("nHFSD","n single diffraction in HF", 1, 0., 1.);
00181
00182 EmpzHFm = dbe->book1D("EmpzHFm", "E-pz HF- SD", 40, 0., 200.);
00183
00184 ntHFm = dbe->book1D("ntHFm", "number of HF- tower SD", 20, 0., 20.);
00185
00186 eneHFmSel = dbe->book1D("eneHFmSel", "energy in HF-", 40, 0., 200.);
00187
00188
00189 _JM25njets = dbe->book1D("JM25njets", "n jets", 15, 0, 15.);
00190 _JM25ht = dbe->book1D("JM25ht", "HT", 80, 0, 800.);
00191 _JM25pt1 = dbe->book1D("JM25pt1", "pt", 40, 0, 200.);
00192 _JM25pt2 = dbe->book1D("JM25pt2", "pt", 40, 0, 200.);
00193 _JM25pt3 = dbe->book1D("JM25pt3", "pt", 40, 0, 200.);
00194 _JM25pt4 = dbe->book1D("JM25pt4", "pt", 40, 0, 200.);
00195
00196 _JM80njets = dbe->book1D("JM80njets", "n jets", 15, 0, 15.);
00197 _JM80ht = dbe->book1D("JM80ht", "HT", 80, 300, 1100.);
00198 _JM80pt1 = dbe->book1D("JM80pt1", "pt", 40, 60, 260.);
00199 _JM80pt2 = dbe->book1D("JM80pt2", "pt", 40, 60, 260.);
00200 _JM80pt3 = dbe->book1D("JM80pt3", "pt", 40, 60, 260.);
00201 _JM80pt4 = dbe->book1D("JM80pt4", "pt", 40, 60, 260.);
00202
00203
00204
00205 djr10 = dbe->book1D("djr10", "Differential Jet Rate 1#rightarrow0", 60, -1., 5.);
00206 djr21 = dbe->book1D("djr21", "Differential Jet Rate 2#rightarrow1", 60, -1., 5.);
00207 djr32 = dbe->book1D("djr32", "Differential Jet Rate 3#rightarrow2", 60, -1., 5.);
00208 djr43 = dbe->book1D("djr43", "Differential Jet Rate 4#rightarrow3", 60, -1., 5.);
00209
00210
00211 _sumEt = dbe->book1D("sumET", "Sum of stable particles Et", 150, 0, 600.);
00212 _sumEt1 = dbe->book1D("sumET1", "Sum of stable particles Et (eta<0.5)", 150, 0, 200.);
00213 _sumEt2 = dbe->book1D("sumET2", "Sum of stable particles Et (0.5<eta<1.0)", 150, 0, 200.);
00214 _sumEt3 = dbe->book1D("sumET3", "Sum of stable particles Et (1.0<eta<1.5)", 150, 0, 200.);
00215 _sumEt4 = dbe->book1D("sumET4", "Sum of stable particles Et (1.5<eta<2.0)", 150, 0, 200.);
00216 _sumEt5 = dbe->book1D("sumET5", "Sum of stable particles Et (2.0<eta<5.0)", 150, 0, 200.);
00217
00218
00219 }
00220 return;
00221 }
00222
00223 void MBUEandQCDValidation::endJob(){return;}
00224 void MBUEandQCDValidation::beginRun(const edm::Run& iRun,const edm::EventSetup& iSetup){
00226 iSetup.getData( fPDGTable );
00227 return;
00228 }
00229 void MBUEandQCDValidation::endRun(const edm::Run& iRun,const edm::EventSetup& iSetup){return;}
00230 void MBUEandQCDValidation::analyze(const edm::Event& iEvent,const edm::EventSetup& iSetup)
00231 {
00232
00234 edm::Handle<HepMCProduct> evt;
00235 iEvent.getByLabel(hepmcCollection_, evt);
00236
00237
00238 HepMC::GenEvent *myGenEvent = new HepMC::GenEvent(*(evt->GetEvent()));
00239
00240 double weight = _wmanager.weight(iEvent);
00241
00242
00243 if ( verbosity_ > 0 ) { myGenEvent->print(); }
00244
00245 double binW = 1.;
00246
00247 hepmcGPCollection.clear();
00248 hepmcCharge.clear();
00249 for (unsigned int i = 0; i < eneInCell.size(); i++) { eneInCell[i] = 0.; }
00250
00251 nEvt->Fill(0.5,weight);
00252
00253
00254 double charge = 0.;
00255 unsigned int nb = 0;
00256 unsigned int nc = 0;
00257 for (HepMC::GenEvent::particle_const_iterator iter = myGenEvent->particles_begin(); iter != myGenEvent->particles_end(); ++iter){
00258 if ( std::fabs((*iter)->pdg_id()) == 4 ) { nc++; }
00259 if ( std::fabs((*iter)->pdg_id()) == 5 ) { nb++; }
00260 if ( (*iter)->status() == 1) {
00261 hepmcGPCollection.push_back(*iter);
00262 const HepPDT::ParticleData* PData = fPDGTable->particle(HepPDT::ParticleID((*iter)->pdg_id()));
00263 if(PData==0) { charge = -999.; }
00264 else
00265 charge = PData->charge();
00266
00267 hepmcCharge.push_back(charge);
00268
00269 if ( verbosity_ > 0 ) {
00270 std::cout << "HepMC " << std::setw(14) << std::fixed << (*iter)->barcode()
00271 << std::setw(14) << std::fixed << (*iter)->pdg_id()
00272 << std::setw(14) << std::fixed << (*iter)->momentum().perp()
00273 << std::setw(14) << std::fixed << (*iter)->momentum().eta()
00274 << std::setw(14) << std::fixed << (*iter)->momentum().phi() << std::endl;
00275 }
00276
00277 }
00278 }
00279
00280 int nBSCp = 0; int nBSCm = 0; double eneHFp = 0.; double eneHFm = 0.; int nChapt05 = 0; int nChaVtx = 0;
00281 for (unsigned int i = 0; i < hepmcGPCollection.size(); i++ ){
00282 if ( !isNeutrino(i) ) {
00283
00284
00285
00286 if ( hepmcGPCollection[i]->momentum().eta() > 3.23 && hepmcGPCollection[i]->momentum().eta() < 4.65 ) { nBSCp++; }
00287 if ( hepmcGPCollection[i]->momentum().eta() < -3.23 && hepmcGPCollection[i]->momentum().eta() > -4.65 ) { nBSCm++; }
00288
00289
00290
00291 if ( std::fabs(hepmcGPCollection[i]->momentum().eta()) < 2.5 && hepmcGPCollection[i]->momentum().perp() > 0.5 && isCharged(i) ) { nChapt05++; }
00292 if ( std::fabs(hepmcGPCollection[i]->momentum().eta()) < 2.5 && hepmcGPCollection[i]->momentum().perp() > 0.1 && isCharged(i) ) { nChaVtx++; }
00293 unsigned int theIndex = theCalo->getCellIndexFromAngle(hepmcGPCollection[i]->momentum().eta(),hepmcGPCollection[i]->momentum().phi());
00294 if ( theIndex < CaloCellManager::nCaloCell ) eneInCell[theIndex] += hepmcGPCollection[i]->momentum().rho();
00295 }
00296 }
00297
00298
00299
00300 for (unsigned int icell = CaloCellManager::nBarrelCell+CaloCellManager::nEndcapCell; icell < CaloCellManager::nCaloCell; icell++ ) {
00301 if ( theCalo->getCellFromIndex(icell)->getEtaMin() < 0. ) { eneHFm += eneInCell[icell]; }
00302 else { eneHFp += eneInCell[icell]; }
00303 }
00304
00305
00306 bool sel1 = false;
00307 if ( (nBSCp > 0 || nBSCm > 0) && eneHFp >= 3. && eneHFm >= 3. ) { sel1 = true; }
00308
00309
00310 bool sel2 = false;
00311 if ( (nBSCp >0 || nBSCm > 0) && nChaVtx >= 3 && nChapt05 > 1 ) { sel2 = true; }
00312
00313
00314 bool sel3 = false;
00315 if ( nBSCp == 0 && nBSCm == 0 ) { sel3 = true; }
00316
00317
00318 bool sel4 = false;
00319 if ( ( nBSCp>0 && nBSCm == 0 ) || ( nBSCm>0 && nBSCp == 0 ) ) { sel4 = true; }
00320
00321
00322 bool sel5 = false;
00323 if ( nBSCp > 0 && nBSCm > 0 ) { sel5 = true; }
00324
00325
00326 bool sel6 = false;
00327 if ( sel5 && nChaVtx > 3 ) { sel6 = true; }
00328
00329
00330 bool sel7 = false;
00331 if ( nChaVtx >= 3 && nBSCm > 0 && eneHFp < 8. ) { sel7 = true; }
00332
00333
00334 if ( sel1 ) nEvt1->Fill(0.5,weight);
00335 if ( sel2 ) nEvt2->Fill(0.5,weight);
00336 if ( sel3 ) nNoFwdTrig->Fill(0.5,weight);
00337 if ( sel4 ) nSaFwdTrig->Fill(0.5,weight);
00338 if ( sel6 ) nHFflow->Fill(0.5,weight);
00339 if ( sel7 ) nHFSD->Fill(0.5,weight);
00340
00341 if ( nb > 0 ) nbquark->Fill(0.5,weight);
00342 if ( nb > 0 && nc > 0 ) ncandbquark->Fill(0.5,weight);
00343 if ( nb == 0 && nc > 0 ) ncnobquark->Fill(0.5,weight);
00344
00345
00346 double ptMax = 0.;
00347 unsigned int iMax = 0;
00348 double ptot = 0.;
00349 unsigned int ppbar = 0; unsigned int nnbar = 0; unsigned int kpm = 0; unsigned int k0s = 0; unsigned int l0 = 0; unsigned int gamma = 0;
00350 unsigned int xim = 0; unsigned int omega = 0;
00351 unsigned int ele = 0; unsigned int muo = 0;
00352 unsigned int eleMax = 0;
00353 unsigned int muoMax = 0;
00354
00355 std::vector<double> hfMB (CaloCellManager::nForwardEta,0);
00356 std::vector<double> hfDJ (CaloCellManager::nForwardEta,0);
00357
00358 for (unsigned int i = 0; i < hepmcGPCollection.size(); i++ ){
00359 double eta = hepmcGPCollection[i]->momentum().eta();
00360 double pt = hepmcGPCollection[i]->momentum().perp();
00361 int pdgId = hepmcGPCollection[i]->pdg_id();
00362 if ( isCharged(i) && std::fabs(eta) < 2.5 ) {
00363 if ( sel1 ) {
00364
00365 binW = dNchdpt1->getTH1()->GetBinWidth(1);
00366 dNchdpt1->Fill(pt,1./binW);
00367 binW = dNchdeta1->getTH1()->GetBinWidth(1);
00368 dNchdeta1->Fill(eta,1./binW);
00369 }
00370
00371 if ( sel2 ) {
00372 if ( pt > ptMax ) { ptMax = pt; iMax = i; }
00373 ptot += pt;
00374
00375
00376 if (std::abs(pdgId) == 2212) {
00377 ppbar++;
00378 pPPbar->Fill(std::log10(pt),weight);
00379 }
00380 else if (std::abs(pdgId) == 321) {
00381 kpm++;
00382 pKpm->Fill(std::log10(pt),weight);
00383 }
00384 else if (std::abs(pdgId) == 3312) {
00385 xim++;
00386 pXim->Fill(std::log10(pt),weight);
00387 }
00388 else if (std::abs(pdgId) == 3334) {
00389 omega++;
00390 pOmega->Fill(std::log10(pt),weight);
00391 }
00392 else if (std::abs(pdgId) == 11) {
00393 ele++;
00394 eleMax = i;
00395 }
00396 else if (std::abs(pdgId) == 13) {
00397 muo++;
00398 muoMax = i;
00399 }
00400 }
00401 }
00402 else if ( sel2 && isNeutral(i) && std::fabs(eta) < 2.5 ) {
00403 if (std::abs(pdgId) == 310) {
00404 k0s++;
00405 pK0s->Fill(std::log10(pt),weight);
00406 }
00407 else if (std::abs(pdgId) == 3122) {
00408 l0++;
00409 pL0->Fill(std::log10(pt),weight);
00410 }
00411 }
00412 else if ( sel2 && isNeutral(i) && std::fabs(eta) < 5.19 ) {
00413 if (std::abs(pdgId) == 2112) {
00414 nnbar++;
00415 pNNbar->Fill(std::log10(pt),weight);
00416 }
00417 else if (std::abs(pdgId) == 22) {
00418 gamma++;
00419 pGamma->Fill(std::log10(pt),weight);
00420 }
00421 }
00422 unsigned int iBin = getHFbin(eta);
00423 if ( sel6 && !isNeutrino(i) && iBin < CaloCellManager::nForwardEta ) {
00424 hfMB[iBin] += hepmcGPCollection[i]->momentum().rho();
00425 }
00426 }
00427 nPPbar->Fill(ppbar,weight);
00428 nNNbar->Fill(nnbar,weight);
00429 nKpm->Fill(kpm,weight);
00430 nK0s->Fill(k0s,weight);
00431 nL0->Fill(l0,weight);
00432 nXim->Fill(xim,weight);
00433 nOmega->Fill(omega,weight);
00434 nGamma->Fill(gamma,weight);
00435
00436 if ( ele > 0 ) elePt->Fill(std::log10(hepmcGPCollection[eleMax]->momentum().perp()),weight);
00437 if ( muo > 0 ) muoPt->Fill(std::log10(hepmcGPCollection[muoMax]->momentum().perp()),weight);
00438
00439 leadTrackpt->Fill(hepmcGPCollection[iMax]->momentum().perp(),weight);
00440 leadTracketa->Fill(hepmcGPCollection[iMax]->momentum().eta(),weight);
00441
00442 std::vector<double> theEtaRanges(theCalo->getEtaRanges());
00443
00444 for (unsigned int i = 0; i < CaloCellManager::nForwardEta; i++ ) {
00445 binW = theEtaRanges[CaloCellManager::nBarrelEta+CaloCellManager::nEndcapEta+i+1]-theEtaRanges[CaloCellManager::nBarrelEta+CaloCellManager::nEndcapEta+i];
00446 dEdetaHFmb->Fill(i+0.5,hfMB[i]/binW);
00447 }
00448
00449
00450
00451 if ( sel7 ) {
00452
00453 double empz = 0.;
00454 unsigned int nCellOvTh = 0;
00455 double threshold = 0.;
00456
00457 for (unsigned int icell = 0; icell < eneInCell.size(); icell++ ) {
00458
00459 if ( theCalo->getCellFromIndex(icell)->getSubSys() != CaloCellId::Forward ) { threshold = 3.; }
00460 else { threshold = 4.; }
00461
00462 if ( eneInCell[icell] > threshold ) {
00463 if ( theCalo->getCellFromIndex(icell)->getSubSys() == CaloCellId::Forward ) { nCellOvTh++; }
00464 empz += eneInCell[icell]*(1.-std::cos(theCalo->getCellFromIndex(icell)->getThetaCell()));
00465 }
00466
00467 }
00468
00469 EmpzHFm->Fill(empz,weight);
00470 ntHFm->Fill(nCellOvTh,weight);
00471 eneHFmSel->Fill(eneHFm,weight);
00472
00473 }
00474
00475
00476 double phiMax = hepmcGPCollection[iMax]->momentum().phi();
00477 std::vector<unsigned int> nchvsphi (nphiBin,0);
00478 std::vector<double> sptvsphi (nphiBin,0.);
00479 unsigned int nChaTra = 0;
00480 double sptTra = 0.;
00481
00482 double binPhiW = 360./nphiBin;
00483 if ( sel2 ) {
00484 for (unsigned int i = 0; i < hepmcGPCollection.size(); i++ ){
00485 if ( isCharged(i) && std::fabs(hepmcGPCollection[i]->momentum().eta()) < 2. ) {
00486 double thePhi = (hepmcGPCollection[i]->momentum().phi()-phiMax)/CLHEP::degree;
00487 if ( thePhi < -180. ) { thePhi += 360.; }
00488 else if ( thePhi > 180. ) { thePhi -= 360.; }
00489 unsigned int thePhiBin = (int)((thePhi+180.)/binPhiW);
00490 if ( thePhiBin == nphiBin ) { thePhiBin -= 1; }
00491 nchvsphi[thePhiBin]++;
00492 sptvsphi[thePhiBin] += hepmcGPCollection[i]->momentum().perp();
00493
00494 if ( std::fabs(thePhi) > 60. && std::fabs(thePhi) < 120. ) {
00495 nChaTra++;
00496 sptTra += hepmcGPCollection[i]->momentum().perp();
00497 binW = dNchdpt2->getTH1()->GetBinWidth(1);
00498 dNchdpt2->Fill(hepmcGPCollection[i]->momentum().perp(),1./binW);
00499 binW = dNchdeta2->getTH1()->GetBinWidth(1);
00500 dNchdeta2->Fill(hepmcGPCollection[i]->momentum().eta(),1./binW);
00501 }
00502 }
00503 }
00504 nCha->Fill(nChaTra,weight);
00505 binW = dNchdSpt->getTH1()->GetBinWidth(1);
00506 dNchdSpt->Fill(sptTra,1.);
00507
00508 nChaDenLpt->Fill(hepmcGPCollection[iMax]->momentum().perp(),nChaTra/4./CLHEP::twopi);
00509 sptDenLpt->Fill(hepmcGPCollection[iMax]->momentum().perp(),sptTra/4./CLHEP::twopi);
00510 for ( unsigned int i = 0; i < nphiBin; i++ ) {
00511 double thisPhi = -180.+(i+0.5)*binPhiW;
00512 dNchdphi->Fill(thisPhi,nchvsphi[i]/binPhiW/4.);
00513 dSptdphi->Fill(thisPhi,sptvsphi[i]/binPhiW/4.);
00514 }
00515 }
00516
00517
00518 edm::Handle<reco::GenJetCollection> genChJets;
00519 iEvent.getByLabel(genchjetCollection_, genChJets );
00520
00521 unsigned int nJets = 0;
00522 double pt1 = 0.;
00523 double pt2 = 0.;
00524 reco::GenJetCollection::const_iterator ij1 = genChJets->begin();
00525 reco::GenJetCollection::const_iterator ij2 = genChJets->begin();
00526 if ( sel2 ) {
00527 for (reco::GenJetCollection::const_iterator iter=genChJets->begin();iter!=genChJets->end();++iter){
00528 double eta = (*iter).eta();
00529 double pt = (*iter).pt();
00530 if ( verbosity_ > 0 ) {
00531 std::cout << "GenJet " << std::setw(14) << std::fixed << (*iter).pt()
00532 << std::setw(14) << std::fixed << (*iter).eta()
00533 << std::setw(14) << std::fixed << (*iter).phi() << std::endl;
00534 }
00535 if ( std::fabs(eta) < 2. ) {
00536 nJets++;
00537 binW = dNchjdeta->getTH1()->GetBinWidth(1);
00538 dNchjdeta->Fill(eta,1./binW);
00539 binW = dNchjdpt->getTH1()->GetBinWidth(1);
00540 dNchjdpt->Fill(pt,1./binW);
00541 if ( pt >= pt1 ) { pt1 = pt; ij1 = iter; }
00542 if ( pt < pt1 && pt >= pt2 ) { pt2 = pt; ij2 = iter; }
00543 }
00544 }
00545
00546 nChj->Fill(nJets,weight);
00547 if ( nJets > 0 && ij1 != genChJets->end() ) {
00548 leadChjpt->Fill(pt1,weight);
00549 leadChjeta->Fill((*ij1).eta(),weight);
00550 if ( nJets > 1 && ij2 != genChJets->end() ) {
00551 pt1pt2optotch->Fill(pt1+pt2,(pt1+pt2)/ptot);
00552 }
00553 }
00554 }
00555
00556
00557
00558 edm::Handle<reco::GenJetCollection> genJets;
00559 iEvent.getByLabel(genjetCollection_, genJets );
00560
00561 nJets = 0;
00562 pt1 = 0.;
00563 pt2 = 0.;
00564 double pt3 = 0.;
00565
00566
00567
00568 int jm25njets = 0;
00569 double jm25HT = 0.;
00570 double jm25pt1 = 0.;
00571 double jm25pt2 = 0.;
00572 double jm25pt3 = 0.;
00573 double jm25pt4 = 0.;
00574
00575 int jm80njets = 0;
00576 double jm80HT = 0.;
00577 double jm80pt1 = 0.;
00578 double jm80pt2 = 0.;
00579 double jm80pt3 = 0.;
00580 double jm80pt4 = 0.;
00581
00582
00583
00584 reco::GenJetCollection::const_iterator ij3 = genJets->begin();
00585 if ( sel6 ) {
00586 for (reco::GenJetCollection::const_iterator iter=genJets->begin();iter!=genJets->end();++iter){
00587 double eta = (*iter).eta();
00588 double pt = (*iter).pt();
00589 if ( verbosity_ > 0 ) {
00590 std::cout << "GenJet " << std::setw(14) << std::fixed << (*iter).pt()
00591 << std::setw(14) << std::fixed << (*iter).eta()
00592 << std::setw(14) << std::fixed << (*iter).phi() << std::endl;
00593 }
00594 if ( std::fabs(eta) < 5. ) {
00595 nJets++;
00596 if ( pt >= pt1 ) { pt1 = pt; ij1 = iter; }
00597 if ( pt < pt1 && pt >= pt2 ) { pt2 = pt; ij2 = iter; }
00598 if ( pt < pt2 && pt >= pt3 ) { pt3 = pt; ij3 = iter; }
00599 }
00600
00601
00602 if(fabs(iter->eta()) < 3. && iter->pt()>25.) {
00603 jm25njets++;
00604 jm25HT += iter->pt();
00605 if(iter->pt()>jm25pt1) {
00606 jm25pt4 = jm25pt3;
00607 jm25pt3 = jm25pt2;
00608 jm25pt2 = jm25pt1;
00609 jm25pt1 = iter->pt();
00610 } else if(iter->pt()>jm25pt2) {
00611 jm25pt4 = jm25pt3;
00612 jm25pt3 = jm25pt2;
00613 jm25pt2 = iter->pt();
00614 } else if(iter->pt()>jm25pt3) {
00615 jm25pt4 = jm25pt3;
00616 jm25pt3 = iter->pt();
00617 } else if(iter->pt()>jm25pt4) {
00618 jm25pt4 = iter->pt();
00619 }
00620
00621 if(iter->pt()>80.) {
00622 jm80njets++;
00623 jm80HT += iter->pt();
00624 if(iter->pt()>jm80pt1) {
00625 jm80pt4 = jm80pt3;
00626 jm80pt3 = jm80pt2;
00627 jm80pt2 = jm80pt1;
00628 jm80pt1 = iter->pt();
00629 } else if(iter->pt()>jm80pt2) {
00630 jm80pt4 = jm80pt3;
00631 jm80pt3 = jm80pt2;
00632 jm80pt2 = iter->pt();
00633 } else if(iter->pt()>jm80pt3) {
00634 jm80pt4 = jm80pt3;
00635 jm80pt3 = iter->pt();
00636 } else if(iter->pt()>jm80pt4) {
00637 jm80pt4 = iter->pt();
00638 }
00639 }
00640
00641 }
00642
00643 if(jm25njets>3) {
00644 _JM25njets ->Fill(jm25njets,weight);
00645 _JM25ht ->Fill(jm25HT,weight);
00646 _JM25pt1 ->Fill(jm25pt1,weight);
00647 _JM25pt2 ->Fill(jm25pt2,weight);
00648 _JM25pt3 ->Fill(jm25pt3,weight);
00649 _JM25pt4 ->Fill(jm25pt4,weight);
00650 }
00651 if(jm80njets>3) {
00652 _JM80njets ->Fill(jm80njets,weight);
00653 _JM80ht ->Fill(jm80HT,weight);
00654 _JM80pt1 ->Fill(jm80pt1,weight);
00655 _JM80pt2 ->Fill(jm80pt2,weight);
00656 _JM80pt3 ->Fill(jm80pt3,weight);
00657 _JM80pt4 ->Fill(jm80pt4,weight);
00658 }
00659 }
00660
00661
00662 double sumJetEt = 0; double sumPartPt = 0.; double sumChPartPt = 0.;
00663 double jpx = 0; double jpy = 0;
00664 if ( nJets >= 2 && ij1 != genJets->end() && ij2 != genJets->end() ) {
00665 if ( (*ij1).pt() > 25. && (*ij1).pt() > 25. ) {
00666 double deltaPhi = std::fabs((*ij1).phi()-(*ij2).phi())/CLHEP::degree;
00667 if ( deltaPhi > 180. ) deltaPhi = 360.-deltaPhi;
00668 pt1pt2Dphi->Fill(deltaPhi,weight);
00669 if ( std::fabs(deltaPhi) > 2.5*CLHEP::degree ) {
00670
00671 nDijet->Fill(0.5,weight);
00672
00673 for (unsigned int i = 0; i < hepmcGPCollection.size(); i++ ){
00674 double eta = hepmcGPCollection[i]->momentum().eta();
00675 unsigned int iBin = getHFbin(eta);
00676 if ( !isNeutrino(i) && iBin < CaloCellManager::nForwardEta ) {
00677 hfDJ[iBin] += hepmcGPCollection[i]->momentum().rho();
00678 }
00679 if ( !isNeutrino(i) && std::fabs(eta) < 5. ) {
00680 sumPartPt += hepmcGPCollection[i]->momentum().perp();
00681 if ( isCharged(i) ) {
00682 sumChPartPt += hepmcGPCollection[i]->momentum().perp();
00683 }
00684 }
00685 }
00686 for (unsigned int i = 0; i < CaloCellManager::nForwardEta; i++ ) {
00687 binW = theEtaRanges[CaloCellManager::nBarrelEta+CaloCellManager::nEndcapEta+i+1]-theEtaRanges[CaloCellManager::nBarrelEta+CaloCellManager::nEndcapEta+i];
00688 dEdetaHFdj->Fill(i+0.5,hfDJ[i]/binW);
00689 }
00690
00691 double invMass = (*ij1).energy()*(*ij2).energy()-(*ij1).px()*(*ij2).px()-(*ij1).py()*(*ij2).py()-(*ij1).pz()*(*ij2).pz();
00692 invMass = std::sqrt(invMass);
00693 pt1pt2InvM->Fill(invMass,weight);
00694
00695 sumPt->Fill(sumPartPt,weight);
00696 sumChPt->Fill(sumChPartPt,weight);
00697
00698 unsigned int nSelJets = 0;
00699 for (reco::GenJetCollection::const_iterator iter=genJets->begin();iter!=genJets->end();++iter){
00700 double pt = (*iter).pt();
00701 double eta = (*iter).eta();
00702 if ( std::fabs(eta) < 5. ) {
00703 nSelJets++;
00704 binW = dNjdeta->getTH1()->GetBinWidth(1);
00705 dNjdeta->Fill(eta,1./binW*weight);
00706 binW = dNjdpt->getTH1()->GetBinWidth(1);
00707 dNjdpt->Fill(pt,1./binW*weight);
00708 sumJetEt += (*iter).pt();
00709 jpx += (*iter).px();
00710 jpy += (*iter).py();
00711 }
00712 }
00713
00714 nj->Fill(nSelJets,weight);
00715 double mEt = std::sqrt(jpx*jpx+jpy*jpy);
00716 sumJEt->Fill(sumJetEt,weight);
00717 missEtosumJEt->Fill(mEt/sumJetEt,weight);
00718
00719 if ( nSelJets >= 3 ) { pt3Frac->Fill((*ij3).pt()/(pt1+pt2),weight); }
00720
00721 pt1pt2optot->Fill(pt1+pt2,(pt1+pt2)/sumJetEt);
00722 pt1pt2balance->Fill((pt1-pt2)/(pt1+pt2),weight);
00723 }
00724 }
00725 }
00726 }
00727
00728
00729
00730 std::vector<const HepMC::GenParticle*> qcdActivity;
00731 HepMCValidationHelper::removeIsolatedLeptons(myGenEvent, 0.2, 3., qcdActivity);
00732
00733
00734 std::vector<fastjet::PseudoJet> vecs;
00735 int counterUser = 1;
00736 std::vector<const HepMC::GenParticle*>::const_iterator iqcdact;
00737 for (iqcdact = qcdActivity.begin(); iqcdact != qcdActivity.end(); ++iqcdact){
00738 const HepMC::FourVector& fmom = (*iqcdact)->momentum();
00739 fastjet::PseudoJet pseudoJet(fmom.px(), fmom.py(), fmom.pz(), fmom.e());
00740 pseudoJet.set_user_index(counterUser);
00741 vecs.push_back(pseudoJet);
00742 ++counterUser;
00743 }
00744
00745 fastjet::ClusterSequence cseq(vecs, fastjet::JetDefinition(fastjet::kt_algorithm, 1., fastjet::E_scheme));
00746
00747 djr10->Fill(std::log10(sqrt(cseq.exclusive_dmerge(0))),weight);
00748 djr21->Fill(std::log10(sqrt(cseq.exclusive_dmerge(1))),weight);
00749 djr32->Fill(std::log10(sqrt(cseq.exclusive_dmerge(2))),weight);
00750 djr43->Fill(std::log10(sqrt(cseq.exclusive_dmerge(3))),weight);
00751
00752
00753
00754 std::vector<const HepMC::GenParticle*> allStable;
00755 HepMCValidationHelper::allStatus1(myGenEvent, allStable);
00756
00757 double sumEt = 0.;
00758 double sumEt1 = 0.;
00759 double sumEt2 = 0.;
00760 double sumEt3 = 0.;
00761 double sumEt4 = 0.;
00762 double sumEt5 = 0.;
00763
00764 for(std::vector<const HepMC::GenParticle*>::const_iterator iter=allStable.begin();
00765 iter != allStable.end(); ++iter) {
00766
00767 double thisEta=fabs((*iter)->momentum().eta());
00768
00769 if(thisEta < 5.) {
00770 const HepMC::FourVector mom=(*iter)->momentum();
00771 double px=mom.px();
00772 double py=mom.py();
00773 double pz=mom.pz();
00774 double E=mom.e();
00775 double thisSumEt = (
00776 sqrt(px*px + py*py)*E /
00777 sqrt(px*px + py*py + pz*pz)
00778 );
00779 sumEt += thisSumEt;
00780 if(thisEta<1.0) sumEt1 += thisSumEt;
00781 else if(thisEta<2.0) sumEt2 += thisSumEt;
00782 else if(thisEta<3.0) sumEt3 += thisSumEt;
00783 else if(thisEta<4.0) sumEt4 += thisSumEt;
00784 else sumEt5 += thisSumEt;
00785
00786 }
00787 }
00788
00789 if(sumEt>0.)
00790 _sumEt->Fill(sumEt,weight);
00791 if(sumEt1>0.)
00792 _sumEt1->Fill(sumEt1,weight);
00793 if(sumEt2>0.)
00794 _sumEt2->Fill(sumEt2,weight);
00795 if(sumEt3>0.)
00796 _sumEt3->Fill(sumEt3,weight);
00797 if(sumEt4>0.)
00798 _sumEt4->Fill(sumEt4,weight);
00799 if(sumEt5>0.)
00800 _sumEt5->Fill(sumEt5,weight);
00801
00802 delete myGenEvent;
00803 }
00804
00805 bool MBUEandQCDValidation::isCharged(unsigned int i){
00806
00807 bool status = false;
00808 if ( hepmcGPCollection.size() < i+1 ) { return status; }
00809 else { status = (hepmcCharge[i] != 0. && hepmcCharge[i] != -999.); }
00810 return status;
00811
00812 }
00813
00814 bool MBUEandQCDValidation::isNeutral(unsigned int i){
00815
00816 bool status = false;
00817 int pdgId = std::abs(hepmcGPCollection[i]->pdg_id());
00818 if ( hepmcGPCollection.size() < i+1 ) { return status; }
00819 else { status = (hepmcCharge[i] == 0. && pdgId != 12 && pdgId != 14 && pdgId != 16) ; }
00820 return status;
00821
00822 }
00823
00824 bool MBUEandQCDValidation::isNeutrino(unsigned int i){
00825
00826 bool status = false;
00827 int pdgId = std::abs(hepmcGPCollection[i]->pdg_id());
00828 if ( hepmcGPCollection.size() < i+1 ) { return status; }
00829 else { status = (pdgId == 12 || pdgId == 14 || pdgId == 16) ; }
00830 return status;
00831
00832 }
00833
00834 unsigned int MBUEandQCDValidation::getHFbin(double eta) {
00835
00836 unsigned int iBin = 999;
00837
00838 std::vector<double> theEtaRanges(theCalo->getEtaRanges());
00839
00840 for (unsigned int i = CaloCellManager::nBarrelEta+CaloCellManager::nEndcapEta;
00841 i < CaloCellManager::nBarrelEta+CaloCellManager::nEndcapEta+CaloCellManager::nForwardEta; i++ ){
00842 if ( std::fabs(eta) >= theEtaRanges[i] && std::fabs(eta) < theEtaRanges[i+1] )
00843 { iBin = i-CaloCellManager::nBarrelEta-CaloCellManager::nEndcapEta; }
00844 }
00845
00846 return iBin;
00847
00848 }