-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPionPythiaGen.cc
86 lines (75 loc) · 2.75 KB
/
PionPythiaGen.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "PionPythiaGen.h"
#include <string>
using namespace std;
using namespace Pythia8;
void PionPythiaGen::pythiaInit(string pTHat){
m_pythiaengine = new Pythia();
m_pythiaengine->readString("Beams:eCM = 200."); //LHC VS RHIC
m_pythiaengine->readString("HardQCD:gg2gg = on");
m_pythiaengine->readString("HardQCD:gg2qqbar = on");
m_pythiaengine->readString("HardQCD:qg2qg = on");
m_pythiaengine->readString("HardQCD:qq2qq = on");
m_pythiaengine->readString("HardQCD:qqbar2gg = on");
m_pythiaengine->readString("HardQCD:qqbar2qqbarNew = on");
//m_pythiaengine->readString("PromptPhoton:qg2qgamma = on");
//m_pythiaengine->readString("PromptPhoton:qqbar2ggamma = on");
m_pythiaengine->readString("Random::setSeed = on");
m_pythiaengine->readString("Random::seed =0");
pTHat = "PhaseSpace:pTHatMin = "+pTHat+".";
m_pythiaengine->readString(pTHat);
m_pythiaengine->init();
}
void PionPythiaGen::treeInit(){
string name = m_name+"root";
m_tfile = new TFile(name.c_str(),"RECREATE");
m_ttree = new TTree(m_name.c_str(),m_name.c_str());
m_ttree->SetAutoSave(3000);
m_ttree->Branch("m_b_end",&m_b_end);
m_ttree->Branch("id",m_b_id,"m_b_[m_b_end]/F");
m_ttree->Branch("pT",m_b_pT,"m_b_[m_b_end]/F");
m_ttree->Branch("eta",m_b_eta,"m_b_[m_b_end]/F");
m_ttree->Branch("eT",m_b_eT,"m_b_[m_b_end]/F");
m_ttree->Branch("e",m_b_e,"m_b_[m_b_end]/F");
}
void PionPythiaGen::hepInit(){
m_ToHepMC = new HepMC::Pythia8ToHepMC(); // Interface for conversion from Pythia8::Event to HepMC event.
string name = m_name+".dat";
m_ascii_io = new HepMC::IO_GenEvent(name, std::ios::out);
}
void PionPythiaGen::init(string pThat){
pythiaInit(pThat);
hepInit();
//treeInit(); no tree for now
m_initialized=true;
}
void PionPythiaGen::run(long nEvents, float pTCut){
int iEvent=0;
while (iEvent < nEvents)
{
if (!m_pythiaengine->next()){
cout<<"pythia.next() failed"<<"\n";
iEvent--;
continue;
}
for (int i = 0; i < m_pythiaengine->event.size(); ++i)
{
//int finalcount=0;
if (cut(m_pythiaengine->event[i],pTCut)) //cut
{
HepMC::GenEvent* hepmcevt = new HepMC::GenEvent(); //create HepMC "event" for frag photons
m_ToHepMC->fill_next_event(*m_pythiaengine, hepmcevt ); //convert event from pythia to HepMC
*m_ascii_io << hepmcevt;//write event to file
delete hepmcevt; //delete event so it can be redeclared next time
/*fill the tree*/
//no tree for now
//m_ttree->Fill();
std::cout<<"Good Event:"<<iEvent<<std::endl;
iEvent++;
break;
}
}
}
}
bool PionPythiaGen::cut(Pythia8::Particle p, float gammaCut){
return p.id()==111&&p.pT()>gammaCut&&TMath::Abs(p.eta())<1.1;
}