void ConvertInput(Int_t event, DelphesFactory *factory, TObjArray *allParticleOutputArray, TObjArray *stableParticleOutputArray, TObjArray *partonOutputArray) { Int_t particle; Candidate *candidate; TDatabasePDG *pdg; TParticlePDG *pdgParticle; Int_t pdgCode; Int_t pid, status; Double_t px, py, pz, e, mass; Double_t x, y, z, t; pdg = TDatabasePDG::Instance(); for(particle = 0; particle < NPARTICLES; ++particle) { pid = EVENTS[event][particle][0]; status = EVENTS[event][particle][1]; px = EVENTS[event][particle][2]; py = EVENTS[event][particle][3]; pz = EVENTS[event][particle][4]; e = EVENTS[event][particle][5]; mass = EVENTS[event][particle][6]; x = EVENTS[event][particle][7]; y = EVENTS[event][particle][8]; z = EVENTS[event][particle][9]; t = EVENTS[event][particle][10]; candidate = factory->NewCandidate(); candidate->PID = pid; pdgCode = TMath::Abs(candidate->PID); candidate->Status = status; pdgParticle = pdg->GetParticle(pid); candidate->Charge = pdgParticle ? Int_t(pdgParticle->Charge()/3.0) : -999; candidate->Mass = mass; candidate->Momentum.SetPxPyPzE(px, py, pz, e); candidate->Position.SetXYZT(x, y, z, t); allParticleOutputArray->Add(candidate); if(!pdgParticle) return; if(status == 1) { stableParticleOutputArray->Add(candidate); } else if(pdgCode <= 5 || pdgCode == 21 || pdgCode == 15) { partonOutputArray->Add(candidate); } } }
/** @ingroup FMD_xsec_script @param scale @param filename @param var @param medName @param thick @param pdgName */ void DrawXsection(Bool_t scale=kFALSE, const char* filename="xsec.root", const char* var="LOSS", const char* medName="FMD_Si$", Double_t thick=.03, const char* pdgName="pi+") { TFile* file = TFile::Open(filename, "READ"); TTree* tree = static_cast<TTree*>(file->Get(Form("%s_%s",medName, pdgName))); TLeaf* tb = tree->GetLeaf("T"); TLeaf* vb = tree->GetLeaf(var); if (!vb) { std::cerr << "Leaf " << var << " not found" << std::endl; return; } Float_t tkine, value; tb->SetAddress(&tkine); vb->SetAddress(&value); Int_t n = tree->GetEntries(); Float_t xscale = 1; Float_t yscale = 1; if (scale) { TDatabasePDG* pdgDb = TDatabasePDG::Instance(); TParticlePDG* pdgP = pdgDb->GetParticle(pdgName); if (!pdgP) { std::cerr << "Couldn't find particle " << pdgName << std::endl; return; } Double_t m = pdgP->Mass(); Double_t q = pdgP->Charge() / 3; if (m == 0 || q == 0) { std::cerr << "Mass is 0" << std::endl; return; } xscale = 1 / m; yscale = 1 / (q * q); } TGraphErrors* graph = new TGraphErrors(n); for (Int_t i = 0; i < n; i++) { tree->GetEntry(i); Double_t x = tkine*xscale; Double_t y = value*yscale; graph->SetPoint(i, x, y); // 5 sigma graph->SetPointError(i, 0, 5 * .1 * y); } TCanvas* c = new TCanvas("c","c"); c->SetLogx(); c->SetLogy(); graph->SetLineWidth(2); graph->SetFillStyle(3001); graph->SetFillColor(6); graph->Draw("L"); graph->DrawClone("AL3"); c->Modified(); c->Update(); c->cd(); c->SaveAs("xsec.C"); }
void ConvertInput(Long64_t eventCounter, Pythia8::Pythia *pythia, ExRootTreeBranch *branch, DelphesFactory *factory, TObjArray *allParticleOutputArray, TObjArray *stableParticleOutputArray, TObjArray *partonOutputArray, TStopwatch *readStopWatch, TStopwatch *procStopWatch) { int i; HepMCEvent *element; Candidate *candidate; TDatabasePDG *pdg; TParticlePDG *pdgParticle; Int_t pdgCode; Int_t pid, status; Double_t px, py, pz, e, mass; Double_t x, y, z, t; // event information element = static_cast<HepMCEvent *>(branch->NewEntry()); element->EventNumber = eventCounter; element->ProcessID = pythia->info.code(); element->MPI = 1; element->Weight = pythia->info.weight(); element->Scale = pythia->info.QRen(); element->AlphaQED = pythia->info.alphaEM(); element->AlphaQCD = pythia->info.alphaS(); element->ID1 = pythia->info.id1(); element->ID2 = pythia->info.id2(); element->X1 = pythia->info.x1(); element->X2 = pythia->info.x2(); element->ScalePDF = pythia->info.QFac(); element->PDF1 = pythia->info.pdf1(); element->PDF2 = pythia->info.pdf2(); element->ReadTime = readStopWatch->RealTime(); element->ProcTime = procStopWatch->RealTime(); pdg = TDatabasePDG::Instance(); for(i = 0; i < pythia->event.size(); ++i) { Pythia8::Particle &particle = pythia->event[i]; pid = particle.id(); status = pythia->event.statusHepMC(i); px = particle.px(); py = particle.py(); pz = particle.pz(); e = particle.e(); mass = particle.m(); x = particle.xProd(); y = particle.yProd(); z = particle.zProd(); t = particle.tProd(); candidate = factory->NewCandidate(); candidate->PID = pid; pdgCode = TMath::Abs(candidate->PID); candidate->Status = status; candidate->M1 = particle.mother1() - 1; candidate->M2 = particle.mother2() - 1; candidate->D1 = particle.daughter1() - 1; candidate->D2 = particle.daughter2() - 1; pdgParticle = pdg->GetParticle(pid); candidate->Charge = pdgParticle ? Int_t(pdgParticle->Charge()/3.0) : -999; candidate->Mass = mass; candidate->Momentum.SetPxPyPzE(px, py, pz, e); candidate->Position.SetXYZT(x, y, z, t); allParticleOutputArray->Add(candidate); if(!pdgParticle) continue; if(status == 1) { stableParticleOutputArray->Add(candidate); } else if(pdgCode <= 5 || pdgCode == 21 || pdgCode == 15) { partonOutputArray->Add(candidate); } } }
void createGlauberTree(Int_t nEvents, const char *outFileName) { AliPDG::AddParticlesToPdgDataBase(); TDatabasePDG::Instance(); // Run loader TFolder *folder = new TFolder("myfolder","myfolder"); AliRunLoader* rl = new AliRunLoader(folder); rl->MakeHeader(); rl->MakeStack(); AliStack* stack = rl->Stack(); //AliHeader* rheader = rl->GetHeader(); AliGenHijing *genHi = new AliGenHijing(-1); genHi->SetStack(stack); genHi->SetEnergyCMS(2760); genHi->SetReferenceFrame("CMS"); genHi->SetProjectile("A", 208, 82); genHi->SetTarget ("A", 208, 82); genHi->SetPtHardMin (2.3); genHi->SetImpactParameterRange(0.,30); genHi->SetJetQuenching(0); // enable jet quenching genHi->SetShadowing(1); // enable shadowing genHi->SetDecaysOff(1); // neutral pion and heavy particle decays switched off genHi->Init(); MyHeader *myheader = new MyHeader; MyResponse *myresp = new MyResponse; TFile *outFile = TFile::Open(outFileName, "RECREATE"); outFile->SetCompressionLevel(5); TDirectory::TContext context(outFile); TTree *tree = new TTree("glaubertree", "Glauber tree"); tree->Branch("header",&myheader, 32*1024, 99); tree->Branch("response",&myresp, 32*1024, 99); TNtuple *ntuple = new TNtuple("gnt", "Glauber ntuple", "npart:ncoll:b"); Double_t etas[] = {-10,-5,-4,-3,-2,-1,0,1,2,3,4,5,10}; TH1D *hNEta = new TH1D("hNeta","",12,etas); TH1D *hEtEta = new TH1D("hEteta","",12,etas); // create events and fill them for (Int_t iEvent = 0; iEvent < nEvents; ++iEvent) { cout << "Event " << iEvent+1 << "/" << nEvents << endl;; stack->Reset(); hNEta->Reset(); hEtEta->Reset(); genHi->Generate(); AliStack *s = genHi->GetStack(); const TObjArray *parts = s->Particles(); Int_t nents = parts->GetEntries(); for (Int_t i = 0; i<nents; ++i) { TParticle *p = (TParticle*)parts->At(i); //p->Print(); TParticlePDG *pdg = p->GetPDG(1); Int_t c = (Int_t)(TMath::Abs(pdg->Charge())); if (c!=0) { hNEta->Fill(p->Eta()); hEtEta->Fill(p->Eta(),p->Pt()); } } AliGenHijingEventHeader *h = (AliGenHijingEventHeader*)genHi->CollisionGeometry(); myheader->fNATT = nents; myheader->fEATT = h->TotalEnergy(); myheader->fJATT = h->HardScatters(); myheader->fNT = h->TargetParticipants(); myheader->fNP = h->ProjectileParticipants(); myheader->fN00 = h->NwNw(); myheader->fN01 = h->NwN(); myheader->fN10 = h->NNw(); myheader->fN11 = h->NN(); myheader->fBB = h->ImpactParameter(); myheader->fRP = h->ReactionPlaneAngle(); myheader->fPSn = h->ProjSpectatorsn(); myheader->fPSp = h->ProjSpectatorsp(); myheader->fTSn = h->TargSpectatorsn(); myheader->fTSp = h->TargSpectatorsn(); myresp->fEtch0p = hEtEta->GetBinContent(hEtEta->FindBin(0.5)); myresp->fEtch1p = hEtEta->GetBinContent(hEtEta->FindBin(1.5)); myresp->fEtch2p = hEtEta->GetBinContent(hEtEta->FindBin(2.5)); myresp->fEtch3p = hEtEta->GetBinContent(hEtEta->FindBin(3.5)); myresp->fEtch4p = hEtEta->GetBinContent(hEtEta->FindBin(4.5)); myresp->fEtch5p = hEtEta->GetBinContent(hEtEta->FindBin(5.5)); myresp->fEtchrp = hEtEta->GetBinContent(hEtEta->FindBin(10.5)); myresp->fEtch0n = hEtEta->GetBinContent(hEtEta->FindBin(-0.5)); myresp->fEtch1n = hEtEta->GetBinContent(hEtEta->FindBin(-1.5)); myresp->fEtch2n = hEtEta->GetBinContent(hEtEta->FindBin(-2.5)); myresp->fEtch3n = hEtEta->GetBinContent(hEtEta->FindBin(-3.5)); myresp->fEtch4n = hEtEta->GetBinContent(hEtEta->FindBin(-4.5)); myresp->fEtch5n = hEtEta->GetBinContent(hEtEta->FindBin(-5.5)); myresp->fEtchrn = hEtEta->GetBinContent(hEtEta->FindBin(-10.5)); myresp->fNch0p = hNEta->GetBinContent(hNEta->FindBin(0.5)); myresp->fNch1p = hNEta->GetBinContent(hNEta->FindBin(1.5)); myresp->fNch2p = hNEta->GetBinContent(hNEta->FindBin(2.5)); myresp->fNch3p = hNEta->GetBinContent(hNEta->FindBin(3.5)); myresp->fNch4p = hNEta->GetBinContent(hNEta->FindBin(4.5)); myresp->fNch5p = hNEta->GetBinContent(hNEta->FindBin(5.5)); myresp->fNchrp = hNEta->GetBinContent(hNEta->FindBin(10.5)); myresp->fNch0n = hNEta->GetBinContent(hNEta->FindBin(-0.5)); myresp->fNch1n = hNEta->GetBinContent(hNEta->FindBin(-1.5)); myresp->fNch2n = hNEta->GetBinContent(hNEta->FindBin(-2.5)); myresp->fNch3n = hNEta->GetBinContent(hNEta->FindBin(-3.5)); myresp->fNch4n = hNEta->GetBinContent(hNEta->FindBin(-4.5)); myresp->fNch5n = hNEta->GetBinContent(hNEta->FindBin(-5.5)); myresp->fNchrn = hNEta->GetBinContent(hNEta->FindBin(-10.5)); tree->Fill(); if (ntuple) { Int_t np = h->TargetParticipants() + h->ProjectileParticipants(); Int_t nc = h->NwNw() + h->NwN() + h->NNw() + h->NN(); Double_t b = h->ImpactParameter(); ntuple->Fill(np,nc,b); } } // end of event loop tree->Write(); ntuple->Write(); outFile->Close(); }
void ConvertInput(fwlite::Event &event, Long64_t eventCounter, ExRootTreeBranch *branchEvent, ExRootTreeBranch *branchRwgt, DelphesFactory *factory, TObjArray *allParticleOutputArray, TObjArray *stableParticleOutputArray, TObjArray *partonOutputArray) { fwlite::Handle< GenEventInfoProduct > handleGenEventInfo; fwlite::Handle< LHEEventProduct > handleLHEEvent; fwlite::Handle< vector< reco::GenParticle > > handleParticle; vector< reco::GenParticle >::const_iterator itParticle; vector< const reco::Candidate * > vectorCandidate; vector< const reco::Candidate * >::iterator itCandidate; handleGenEventInfo.getByLabel(event, "generator"); handleLHEEvent.getByLabel(event, "externalLHEProducer"); handleParticle.getByLabel(event, "genParticles"); HepMCEvent *element; Weight *weight; Candidate *candidate; TDatabasePDG *pdg; TParticlePDG *pdgParticle; Int_t pdgCode; Int_t pid, status; Double_t px, py, pz, e, mass; Double_t x, y, z; const vector< gen::WeightsInfo > &vectorWeightsInfo = handleLHEEvent->weights(); vector< gen::WeightsInfo >::const_iterator itWeightsInfo; element = static_cast<HepMCEvent *>(branchEvent->NewEntry()); element->Number = eventCounter; element->ProcessID = handleGenEventInfo->signalProcessID(); element->MPI = 1; element->Weight = handleGenEventInfo->weight(); element->Scale = handleGenEventInfo->qScale(); element->AlphaQED = handleGenEventInfo->alphaQED(); element->AlphaQCD = handleGenEventInfo->alphaQCD(); element->ID1 = 0; element->ID2 = 0; element->X1 = 0.0; element->X2 = 0.0; element->ScalePDF = 0.0; element->PDF1 = 0.0; element->PDF2 = 0.0; element->ReadTime = 0.0; element->ProcTime = 0.0; for(itWeightsInfo = vectorWeightsInfo.begin(); itWeightsInfo != vectorWeightsInfo.end(); ++itWeightsInfo) { weight = static_cast<Weight *>(branchRwgt->NewEntry()); weight->Weight = itWeightsInfo->wgt; } pdg = TDatabasePDG::Instance(); for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { vectorCandidate.push_back(&*itParticle); } for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { const reco::GenParticle &particle = *itParticle; pid = particle.pdgId(); status = particle.status(); px = particle.px(); py = particle.py(); pz = particle.pz(); e = particle.energy(); mass = particle.mass(); x = particle.vx(); y = particle.vy(); z = particle.vz(); candidate = factory->NewCandidate(); candidate->PID = pid; pdgCode = TMath::Abs(candidate->PID); candidate->Status = status; if(particle.mother()) { itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.mother()); if(itCandidate != vectorCandidate.end()) candidate->M1 = distance(vectorCandidate.begin(), itCandidate); } itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(0)); if(itCandidate != vectorCandidate.end()) candidate->D1 = distance(vectorCandidate.begin(), itCandidate); itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(particle.numberOfDaughters() - 1)); if(itCandidate != vectorCandidate.end()) candidate->D2 = distance(vectorCandidate.begin(), itCandidate); pdgParticle = pdg->GetParticle(pid); candidate->Charge = pdgParticle ? Int_t(pdgParticle->Charge()/3.0) : -999; candidate->Mass = mass; candidate->Momentum.SetPxPyPzE(px, py, pz, e); candidate->Position.SetXYZT(x*10.0, y*10.0, z*10.0, 0.0); allParticleOutputArray->Add(candidate); if(!pdgParticle) continue; if(status == 1) { stableParticleOutputArray->Add(candidate); } else if(pdgCode <= 5 || pdgCode == 21 || pdgCode == 15) { partonOutputArray->Add(candidate); } } }
void ConvertInput(fwlite::Event &event, Long64_t eventCounter, ExRootTreeBranch *branchEvent, ExRootTreeBranch *branchRwgt, DelphesFactory *factory, TObjArray *allParticleOutputArray, TObjArray *stableParticleOutputArray, TObjArray *partonOutputArray, Bool_t firstEvent) { fwlite::Handle< GenEventInfoProduct > handleGenEventInfo; fwlite::Handle< LHEEventProduct > handleLHEEvent; fwlite::Handle< vector< reco::GenParticle > > handleParticle; fwlite::Handle< vector< pat::PackedGenParticle > > handlePackedParticle; vector< reco::GenParticle >::const_iterator itParticle; vector< pat::PackedGenParticle >::const_iterator itPackedParticle; vector< const reco::Candidate * > vectorCandidate; vector< const reco::Candidate * >::iterator itCandidate; handleGenEventInfo.getByLabel(event, "generator"); if (!((handleLHEEvent.getBranchNameFor(event, "source")).empty())) { handleLHEEvent.getByLabel(event, "source"); } else if (!((handleLHEEvent.getBranchNameFor(event, "externalLHEProducer")).empty())) { handleLHEEvent.getByLabel(event, "externalLHEProducer"); } else if (firstEvent) { std::cout<<"Wrong LHEEvent Label! Please, check the input file."<<std::endl; } if (!((handleParticle.getBranchNameFor(event, "genParticles")).empty())) { handleParticle.getByLabel(event, "genParticles"); } else if (!((handlePackedParticle.getBranchNameFor(event, "packedGenParticles")).empty()) && !((handleParticle.getBranchNameFor(event,"prunedGenParticles")).empty())) { handleParticle.getByLabel(event, "prunedGenParticles"); handlePackedParticle.getByLabel(event, "packedGenParticles"); } else { std::cout<<"Wrong GenParticle Label! Please, check the input file."<<std::endl; exit(-1); } Bool_t foundLHE = !((handleLHEEvent.getBranchNameFor(event, "source")).empty()) || !((handleLHEEvent.getBranchNameFor(event, "externalLHEProducer")).empty()); Bool_t isMiniAOD = !((handlePackedParticle.getBranchNameFor(event, "packedGenParticles")).empty()) && ((handleParticle.getBranchNameFor(event, "genParticles")).empty()) ; HepMCEvent *element; Weight *weight; Candidate *candidate; TDatabasePDG *pdg; TParticlePDG *pdgParticle; Int_t pdgCode; Int_t pid, status; Double_t px, py, pz, e, mass; Double_t x, y, z; element = static_cast<HepMCEvent *>(branchEvent->NewEntry()); element->Number = eventCounter; element->ProcessID = handleGenEventInfo->signalProcessID(); element->MPI = 1; element->Weight = handleGenEventInfo->weight(); element->Scale = handleGenEventInfo->qScale(); element->AlphaQED = handleGenEventInfo->alphaQED(); element->AlphaQCD = handleGenEventInfo->alphaQCD(); element->ID1 = 0; element->ID2 = 0; element->X1 = 0.0; element->X2 = 0.0; element->ScalePDF = 0.0; element->PDF1 = 0.0; element->PDF2 = 0.0; element->ReadTime = 0.0; element->ProcTime = 0.0; if(foundLHE) { const vector< gen::WeightsInfo > &vectorWeightsInfo = handleLHEEvent->weights(); vector< gen::WeightsInfo >::const_iterator itWeightsInfo; for(itWeightsInfo = vectorWeightsInfo.begin(); itWeightsInfo != vectorWeightsInfo.end(); ++itWeightsInfo) { weight = static_cast<Weight *>(branchRwgt->NewEntry()); weight->Weight = itWeightsInfo->wgt; } } pdg = TDatabasePDG::Instance(); for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { const reco::GenParticle &particle = *itParticle; if( !isMiniAOD || particle.status() != 1 ) vectorCandidate.push_back(&*itParticle); } for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { const reco::GenParticle &particle = *itParticle; pid = particle.pdgId(); status = particle.status(); if( isMiniAOD && particle.status() == 1 ) continue; px = particle.px(); py = particle.py(); pz = particle.pz(); e = particle.energy(); mass = particle.mass(); x = particle.vx(); y = particle.vy(); z = particle.vz(); candidate = factory->NewCandidate(); candidate->PID = pid; pdgCode = TMath::Abs(candidate->PID); candidate->Status = status; if(particle.mother()) { itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.mother()); if(itCandidate != vectorCandidate.end()) candidate->M1 = distance(vectorCandidate.begin(), itCandidate); } itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(0)); if(itCandidate != vectorCandidate.end()) candidate->D1 = distance(vectorCandidate.begin(), itCandidate); itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(particle.numberOfDaughters() - 1)); if(itCandidate != vectorCandidate.end()) candidate->D2 = distance(vectorCandidate.begin(), itCandidate); pdgParticle = pdg->GetParticle(pid); candidate->Charge = pdgParticle ? Int_t(pdgParticle->Charge()/3.0) : -999; candidate->Mass = mass; candidate->Momentum.SetPxPyPzE(px, py, pz, e); candidate->Position.SetXYZT(x*10.0, y*10.0, z*10.0, 0.0); allParticleOutputArray->Add(candidate); if(!pdgParticle) continue; if( status == 1) { // Prevent duplicated particle. if ( !isMiniAOD ) stableParticleOutputArray->Add(candidate); } else if(pdgCode <= 5 || pdgCode == 21 || pdgCode == 15) { partonOutputArray->Add(candidate); } } if ( !isMiniAOD) return ; // For MiniAOD sample, // Only status==1 particles are saved to packedGenParticles. for(itPackedParticle = handlePackedParticle->begin(); itPackedParticle != handlePackedParticle->end(); ++itPackedParticle) { vectorCandidate.push_back(&*itPackedParticle); } for(itPackedParticle = handlePackedParticle->begin(); itPackedParticle != handlePackedParticle->end(); ++itPackedParticle) { const pat::PackedGenParticle &particle = *itPackedParticle; pid = particle.pdgId(); status = particle.status(); px = particle.px(); py = particle.py(); pz = particle.pz(); e = particle.energy(); mass = particle.mass(); x = particle.vx(); y = particle.vy(); z = particle.vz(); candidate = factory->NewCandidate(); candidate->PID = pid; pdgCode = TMath::Abs(candidate->PID); candidate->Status = status; if(particle.mother(0)) { itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.mother(0)); if(itCandidate != vectorCandidate.end()) candidate->M1 = distance(vectorCandidate.begin(), itCandidate); } itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(0)); if(itCandidate != vectorCandidate.end()) candidate->D1 = distance(vectorCandidate.begin(), itCandidate); itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(particle.numberOfDaughters() - 1)); if(itCandidate != vectorCandidate.end()) candidate->D2 = distance(vectorCandidate.begin(), itCandidate); pdgParticle = pdg->GetParticle(pid); candidate->Charge = pdgParticle ? Int_t(pdgParticle->Charge()/3.0) : -999; candidate->Mass = mass; candidate->Momentum.SetPxPyPzE(px, py, pz, e); candidate->Position.SetXYZT(x*10.0, y*10.0, z*10.0, 0.0); allParticleOutputArray->Add(candidate); if(!pdgParticle) continue; if(status == 1) { stableParticleOutputArray->Add(candidate); } } }
void ConvertInput(fwlite::Event &event, DelphesFactory *factory, TObjArray *allParticleOutputArray, TObjArray *stableParticleOutputArray, TObjArray *partonOutputArray) { fwlite::Handle< vector< reco::GenParticle > > handleParticle; vector< reco::GenParticle >::const_iterator itParticle; vector< const reco::Candidate * > vectorCandidate; vector< const reco::Candidate * >::iterator itCandidate; handleParticle.getByLabel(event, "genParticles"); Candidate *candidate; TDatabasePDG *pdg; TParticlePDG *pdgParticle; Int_t pdgCode; Int_t pid, status; Double_t px, py, pz, e, mass; Double_t x, y, z; pdg = TDatabasePDG::Instance(); for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { vectorCandidate.push_back(&*itParticle); } for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { const reco::GenParticle &particle = *itParticle; pid = particle.pdgId(); status = particle.status(); px = particle.px(); py = particle.py(); pz = particle.pz(); e = particle.energy(); mass = particle.mass(); x = particle.vx(); y = particle.vy(); z = particle.vz(); candidate = factory->NewCandidate(); candidate->PID = pid; pdgCode = TMath::Abs(candidate->PID); candidate->Status = status; itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(0)); if(itCandidate != vectorCandidate.end()) candidate->D1 = distance(vectorCandidate.begin(), itCandidate); itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(particle.numberOfDaughters() - 1)); if(itCandidate != vectorCandidate.end()) candidate->D2 = distance(vectorCandidate.begin(), itCandidate); pdgParticle = pdg->GetParticle(pid); candidate->Charge = pdgParticle ? Int_t(pdgParticle->Charge()/3.0) : -999; candidate->Mass = mass; candidate->Momentum.SetPxPyPzE(px, py, pz, e); candidate->Position.SetXYZT(x, y, z, 0.0); allParticleOutputArray->Add(candidate); if(!pdgParticle) continue; if(status == 1) { stableParticleOutputArray->Add(candidate); } else if(pdgCode <= 5 || pdgCode == 21 || pdgCode == 15) { partonOutputArray->Add(candidate); } } }
void ConvertInput(fwlite::Event &event, Long64_t eventCounter, ExRootTreeBranch *branch, DelphesFactory *factory, TObjArray *allParticleOutputArray, TObjArray *stableParticleOutputArray, TObjArray *partonOutputArray) { LHEFEvent *lheEvt; lheEvt = static_cast<LHEFEvent *>(branch->NewEntry()); fwlite::Handle<LHEEventProduct> lheEvtInfo; lheEvtInfo.getByLabel(event, "source"); if (lheEvtInfo.isValid()) { lheEvt->Number = eventCounter; lheEvt->Weight = lheEvtInfo->originalXWGTUP(); lheEvt->ProcessID = ((lhef::HEPEUP)lheEvtInfo->hepeup()).IDPRUP; lheEvt->ScalePDF = ((lhef::HEPEUP)lheEvtInfo->hepeup()).IDPRUP; lheEvt->AlphaQED = ((lhef::HEPEUP)lheEvtInfo->hepeup()).SCALUP; lheEvt->AlphaQCD = ((lhef::HEPEUP)lheEvtInfo->hepeup()).AQCDUP; } else { lheEvt->Number = 0; lheEvt->Weight = 1; lheEvt->ProcessID = 0; lheEvt->ScalePDF = 0; lheEvt->AlphaQED = 0; lheEvt->AlphaQCD = 0; } fwlite::Handle< vector< reco::GenParticle > > handleParticle; vector< reco::GenParticle >::const_iterator itParticle; vector< const reco::Candidate * > vectorCandidate; vector< const reco::Candidate * >::iterator itCandidate; handleParticle.getByLabel(event, "genParticles"); Candidate *candidate; TDatabasePDG *pdg; TParticlePDG *pdgParticle; Int_t pdgCode; Int_t pid, status; Double_t px, py, pz, e, mass; Double_t x, y, z; pdg = TDatabasePDG::Instance(); for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { vectorCandidate.push_back(&*itParticle); } for(itParticle = handleParticle->begin(); itParticle != handleParticle->end(); ++itParticle) { const reco::GenParticle &particle = *itParticle; pid = particle.pdgId(); status = particle.status(); px = particle.px(); py = particle.py(); pz = particle.pz(); e = particle.energy(); mass = particle.mass(); x = particle.vx(); y = particle.vy(); z = particle.vz(); candidate = factory->NewCandidate(); candidate->PID = pid; pdgCode = TMath::Abs(candidate->PID); candidate->Status = status; //M1 if(particle.mother()){ itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.mother()); if(itCandidate != vectorCandidate.end()) candidate->M1 = distance(vectorCandidate.begin(), itCandidate); } //D1 itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(0)); if(itCandidate != vectorCandidate.end()) candidate->D1 = distance(vectorCandidate.begin(), itCandidate); //D2 if(particle.numberOfDaughters() > 1) itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(1)); else itCandidate = find(vectorCandidate.begin(), vectorCandidate.end(), particle.daughter(particle.numberOfDaughters() - 1)); if(itCandidate != vectorCandidate.end()) candidate->D2 = distance(vectorCandidate.begin(), itCandidate); pdgParticle = pdg->GetParticle(pid); candidate->Charge = pdgParticle ? Int_t(pdgParticle->Charge()/3.0) : -999; candidate->Mass = mass; candidate->Momentum.SetPxPyPzE(px, py, pz, e); candidate->Position.SetXYZT(x, y, z, 0.0); allParticleOutputArray->Add(candidate); if(!pdgParticle) continue; if(status == 1) { stableParticleOutputArray->Add(candidate); } else if(pdgCode <= 5 || pdgCode == 21 || pdgCode == 15) { partonOutputArray->Add(candidate); } } }