#include "TPDGCode.h"
#include "AliConst.h"
#include "AliRun.h"
#include "AliGenEventHeader.h"
#include "TDatabasePDG.h"
#include "AliPDG.h"
#include "TFile.h"
#include "TROOT.h"
#include "AliGenParamPionsKaons.h"
ClassImp(AliGenParamPionsKaons)
AliGenParamPionsKaons::AliGenParamPionsKaons():
AliGenerator(),
fGeneratePion(kTRUE),
fGenerateKaon(kTRUE),
fPtVsRapidityPrimaryPosPions(0x0),
fPtVsRapidityPrimaryNegPions(0x0),
fPtVsRapidityPrimaryPosKaons(0x0),
fPtVsRapidityPrimaryNegKaons(0x0),
fHistPdgCode(0x0) {
}
AliGenParamPionsKaons::AliGenParamPionsKaons(Int_t nPart, Char_t *inputFile):
AliGenerator(nPart),
fGeneratePion(kTRUE),
fGenerateKaon(kTRUE),
fPtVsRapidityPrimaryPosPions(0x0),
fPtVsRapidityPrimaryNegPions(0x0),
fPtVsRapidityPrimaryPosKaons(0x0),
fPtVsRapidityPrimaryNegKaons(0x0),
fHistPdgCode(0x0) {
fName = "ParamPionsKaons";
fTitle = "Parametric pions and kaons generator";
LoadInputHistos(inputFile);
}
void AliGenParamPionsKaons::Generate() {
Double_t polar[3]= {0,0,0};
Double_t origin[3];
Double_t p[3];
Double_t mass=0., pt=0., rap=0., mom=0., energy=0, mt=0., phi=0., time=0.;
Int_t nt;
Int_t pdgCode;
for (Int_t j=0; j<3; j++) origin[j] = fOrigin[j];
time = fTimeOrigin;
if (fVertexSmear==kPerEvent) {
Vertex();
for (Int_t j=0; j<3; j++) origin[j] = fVertex[j];
time = fTime;
}
Int_t nPartGenerated = 0;
while (nPartGenerated<fNpart) {
pdgCode = TMath::Nint(fHistPdgCode->GetRandom());
if (TMath::Abs(pdgCode)==321 && !fGenerateKaon) continue;
if (TMath::Abs(pdgCode)==211 && !fGeneratePion) continue;
mass = TDatabasePDG::Instance()->GetParticle(pdgCode)->Mass();
switch (pdgCode) {
case 211:
fPtVsRapidityPrimaryPosPions->GetRandom2(pt, rap);
break;
case -211:
fPtVsRapidityPrimaryNegPions->GetRandom2(pt, rap);
break;
case 321:
fPtVsRapidityPrimaryPosKaons->GetRandom2(pt, rap);
break;
case -321:
fPtVsRapidityPrimaryNegKaons->GetRandom2(pt, rap);
break;
}
mt = TMath::Sqrt(mass*mass + pt*pt);
energy = mt * TMath::CosH(rap);
mom = TMath::Sqrt(energy*energy - mass*mass);
if (TestBit(kYRange)) if (rap<fYMin || rap>fYMax) continue;
if (TestBit(kMomentumRange)) if (mom<fPMin || rap>fPMax) continue;
if (TestBit(kPtRange)) if (pt<fPtMin || pt>fPtMax) continue;
phi = fPhiMin + gRandom->Rndm()*(fPhiMax-fPhiMin);
p[0] = pt*TMath::Cos(phi);
p[1] = pt*TMath::Sin(phi);
p[2] = mt*TMath::SinH(rap);
PushTrack(1, -1, Int_t(pdgCode),
p[0],p[1],p[2],energy,
origin[0],origin[1],origin[2],Double_t(time),
polar[0],polar[1],polar[2],
kPPrimary, nt, 1., 1);
nPartGenerated++;
}
AliGenEventHeader* header = new AliGenEventHeader("ParamPionsKaons");
header->SetPrimaryVertex(fVertex);
header->SetNProduced(fNpart);
header->SetInteractionTime(fTime);
if (fContainer) {
fContainer->AddHeader(header);
}
else {
gAlice->SetGenEventHeader(header);
}
}
void AliGenParamPionsKaons::Init() {
if (TestBit(kPtRange) && TestBit(kMomentumRange))
Fatal("Init","You should not set the momentum range and the pt range at the same time!\n");
if ((!TestBit(kPtRange)) && (!TestBit(kMomentumRange)))
Fatal("Init","You should set either the momentum or the pt range!\n");
if ((TestBit(kYRange) && TestBit(kThetaRange)) || (TestBit(kYRange) && TestBit(kEtaRange)) || (TestBit(kEtaRange) && TestBit(kThetaRange)))
Fatal("Init","You should only set the range of one of these variables: y, eta or theta\n");
if ((!TestBit(kYRange)) && (!TestBit(kEtaRange)) && (!TestBit(kThetaRange)))
Fatal("Init","You should set the range of one of these variables: y, eta or theta\n");
AliPDG::AddParticlesToPdgDataBase();
}
void AliGenParamPionsKaons::LoadInputHistos(Char_t *inputFile) {
TFile *fileIn = new TFile(inputFile);
TH2D *myPtVsRapidityPrimaryPosPions = (TH2D*) fileIn->Get("fPtVsRapidityPrimaryPosPions");
TH2D *myPtVsRapidityPrimaryNegPions = (TH2D*) fileIn->Get("fPtVsRapidityPrimaryNegPions");
TH2D *myPtVsRapidityPrimaryPosKaons = (TH2D*) fileIn->Get("fPtVsRapidityPrimaryPosKaons");
TH2D *myPtVsRapidityPrimaryNegKaons = (TH2D*) fileIn->Get("fPtVsRapidityPrimaryNegKaons");
TH1D *myHistPdgCode = (TH1D*) fileIn->Get("fHistPdgCode");
myPtVsRapidityPrimaryPosPions -> SetName("myPtVsRapidityPrimaryPosPions");
myPtVsRapidityPrimaryNegPions -> SetName("myPtVsRapidityPrimaryNegPions");
myPtVsRapidityPrimaryPosKaons -> SetName("myPtVsRapidityPrimaryPosKaons");
myPtVsRapidityPrimaryNegKaons -> SetName("myPtVsRapidityPrimaryNegKaons");
myHistPdgCode -> SetName("myHistPdgCode");
fPtVsRapidityPrimaryPosPions = new TH2D("fPtVsRapidityPrimaryPosPions","",
myPtVsRapidityPrimaryPosPions->GetXaxis()->GetNbins(),
myPtVsRapidityPrimaryPosPions->GetXaxis()->GetXmin(),
myPtVsRapidityPrimaryPosPions->GetXaxis()->GetXmax(),
myPtVsRapidityPrimaryPosPions->GetYaxis()->GetNbins(),
myPtVsRapidityPrimaryPosPions->GetYaxis()->GetXmin(),
myPtVsRapidityPrimaryPosPions->GetYaxis()->GetXmax());
for (Int_t iBinX=0; iBinX<myPtVsRapidityPrimaryPosPions->GetXaxis()->GetNbins(); iBinX++) {
for (Int_t iBinY=0; iBinY<myPtVsRapidityPrimaryPosPions->GetYaxis()->GetNbins(); iBinY++) {
fPtVsRapidityPrimaryPosPions->SetBinContent(iBinX+1, iBinY+1, myPtVsRapidityPrimaryPosPions->GetBinContent(iBinX+1,iBinY+1));
}
}
fPtVsRapidityPrimaryNegPions = new TH2D("fPtVsRapidityPrimaryNegPions","",
myPtVsRapidityPrimaryNegPions->GetXaxis()->GetNbins(),
myPtVsRapidityPrimaryNegPions->GetXaxis()->GetXmin(),
myPtVsRapidityPrimaryNegPions->GetXaxis()->GetXmax(),
myPtVsRapidityPrimaryNegPions->GetYaxis()->GetNbins(),
myPtVsRapidityPrimaryNegPions->GetYaxis()->GetXmin(),
myPtVsRapidityPrimaryNegPions->GetYaxis()->GetXmax());
for (Int_t iBinX=0; iBinX<myPtVsRapidityPrimaryNegPions->GetXaxis()->GetNbins(); iBinX++) {
for (Int_t iBinY=0; iBinY<myPtVsRapidityPrimaryNegPions->GetYaxis()->GetNbins(); iBinY++) {
fPtVsRapidityPrimaryNegPions->SetBinContent(iBinX+1, iBinY+1, myPtVsRapidityPrimaryNegPions->GetBinContent(iBinX+1,iBinY+1));
}
}
fPtVsRapidityPrimaryPosKaons = new TH2D("fPtVsRapidityPrimaryPosKaons","",
myPtVsRapidityPrimaryPosKaons->GetXaxis()->GetNbins(),
myPtVsRapidityPrimaryPosKaons->GetXaxis()->GetXmin(),
myPtVsRapidityPrimaryPosKaons->GetXaxis()->GetXmax(),
myPtVsRapidityPrimaryPosKaons->GetYaxis()->GetNbins(),
myPtVsRapidityPrimaryPosKaons->GetYaxis()->GetXmin(),
myPtVsRapidityPrimaryPosKaons->GetYaxis()->GetXmax());
for (Int_t iBinX=0; iBinX<myPtVsRapidityPrimaryPosKaons->GetXaxis()->GetNbins(); iBinX++) {
for (Int_t iBinY=0; iBinY<myPtVsRapidityPrimaryPosKaons->GetYaxis()->GetNbins(); iBinY++) {
fPtVsRapidityPrimaryPosKaons->SetBinContent(iBinX+1, iBinY+1, myPtVsRapidityPrimaryPosKaons->GetBinContent(iBinX+1,iBinY+1));
}
}
fPtVsRapidityPrimaryNegKaons = new TH2D("fPtVsRapidityPrimaryNegKaons","",
myPtVsRapidityPrimaryNegKaons->GetXaxis()->GetNbins(),
myPtVsRapidityPrimaryNegKaons->GetXaxis()->GetXmin(),
myPtVsRapidityPrimaryNegKaons->GetXaxis()->GetXmax(),
myPtVsRapidityPrimaryNegKaons->GetYaxis()->GetNbins(),
myPtVsRapidityPrimaryNegKaons->GetYaxis()->GetXmin(),
myPtVsRapidityPrimaryNegKaons->GetYaxis()->GetXmax());
for (Int_t iBinX=0; iBinX<myPtVsRapidityPrimaryNegKaons->GetXaxis()->GetNbins(); iBinX++) {
for (Int_t iBinY=0; iBinY<myPtVsRapidityPrimaryNegKaons->GetYaxis()->GetNbins(); iBinY++) {
fPtVsRapidityPrimaryNegKaons->SetBinContent(iBinX+1, iBinY+1, myPtVsRapidityPrimaryNegKaons->GetBinContent(iBinX+1,iBinY+1));
}
}
fHistPdgCode = new TH1D("fHistPdgCode","",
myHistPdgCode->GetXaxis()->GetNbins(),
myHistPdgCode->GetXaxis()->GetXmin(),
myHistPdgCode->GetXaxis()->GetXmax());
for (Int_t iBinX=0; iBinX<myHistPdgCode->GetXaxis()->GetNbins(); iBinX++) {
fHistPdgCode->SetBinContent(iBinX+1, myHistPdgCode->GetBinContent(iBinX+1));
}
}
AliGenParamPionsKaons.cxx:1 AliGenParamPionsKaons.cxx:2 AliGenParamPionsKaons.cxx:3 AliGenParamPionsKaons.cxx:4 AliGenParamPionsKaons.cxx:5 AliGenParamPionsKaons.cxx:6 AliGenParamPionsKaons.cxx:7 AliGenParamPionsKaons.cxx:8 AliGenParamPionsKaons.cxx:9 AliGenParamPionsKaons.cxx:10 AliGenParamPionsKaons.cxx:11 AliGenParamPionsKaons.cxx:12 AliGenParamPionsKaons.cxx:13 AliGenParamPionsKaons.cxx:14 AliGenParamPionsKaons.cxx:15 AliGenParamPionsKaons.cxx:16 AliGenParamPionsKaons.cxx:17 AliGenParamPionsKaons.cxx:18 AliGenParamPionsKaons.cxx:19 AliGenParamPionsKaons.cxx:20 AliGenParamPionsKaons.cxx:21 AliGenParamPionsKaons.cxx:22 AliGenParamPionsKaons.cxx:23 AliGenParamPionsKaons.cxx:24 AliGenParamPionsKaons.cxx:25 AliGenParamPionsKaons.cxx:26 AliGenParamPionsKaons.cxx:27 AliGenParamPionsKaons.cxx:28 AliGenParamPionsKaons.cxx:29 AliGenParamPionsKaons.cxx:30 AliGenParamPionsKaons.cxx:31 AliGenParamPionsKaons.cxx:32 AliGenParamPionsKaons.cxx:33 AliGenParamPionsKaons.cxx:34 AliGenParamPionsKaons.cxx:35 AliGenParamPionsKaons.cxx:36 AliGenParamPionsKaons.cxx:37 AliGenParamPionsKaons.cxx:38 AliGenParamPionsKaons.cxx:39 AliGenParamPionsKaons.cxx:40 AliGenParamPionsKaons.cxx:41 AliGenParamPionsKaons.cxx:42 AliGenParamPionsKaons.cxx:43 AliGenParamPionsKaons.cxx:44 AliGenParamPionsKaons.cxx:45 AliGenParamPionsKaons.cxx:46 AliGenParamPionsKaons.cxx:47 AliGenParamPionsKaons.cxx:48 AliGenParamPionsKaons.cxx:49 AliGenParamPionsKaons.cxx:50 AliGenParamPionsKaons.cxx:51 AliGenParamPionsKaons.cxx:52 AliGenParamPionsKaons.cxx:53 AliGenParamPionsKaons.cxx:54 AliGenParamPionsKaons.cxx:55 AliGenParamPionsKaons.cxx:56 AliGenParamPionsKaons.cxx:57 AliGenParamPionsKaons.cxx:58 AliGenParamPionsKaons.cxx:59 AliGenParamPionsKaons.cxx:60 AliGenParamPionsKaons.cxx:61 AliGenParamPionsKaons.cxx:62 AliGenParamPionsKaons.cxx:63 AliGenParamPionsKaons.cxx:64 AliGenParamPionsKaons.cxx:65 AliGenParamPionsKaons.cxx:66 AliGenParamPionsKaons.cxx:67 AliGenParamPionsKaons.cxx:68 AliGenParamPionsKaons.cxx:69 AliGenParamPionsKaons.cxx:70 AliGenParamPionsKaons.cxx:71 AliGenParamPionsKaons.cxx:72 AliGenParamPionsKaons.cxx:73 AliGenParamPionsKaons.cxx:74 AliGenParamPionsKaons.cxx:75 AliGenParamPionsKaons.cxx:76 AliGenParamPionsKaons.cxx:77 AliGenParamPionsKaons.cxx:78 AliGenParamPionsKaons.cxx:79 AliGenParamPionsKaons.cxx:80 AliGenParamPionsKaons.cxx:81 AliGenParamPionsKaons.cxx:82 AliGenParamPionsKaons.cxx:83 AliGenParamPionsKaons.cxx:84 AliGenParamPionsKaons.cxx:85 AliGenParamPionsKaons.cxx:86 AliGenParamPionsKaons.cxx:87 AliGenParamPionsKaons.cxx:88 AliGenParamPionsKaons.cxx:89 AliGenParamPionsKaons.cxx:90 AliGenParamPionsKaons.cxx:91 AliGenParamPionsKaons.cxx:92 AliGenParamPionsKaons.cxx:93 AliGenParamPionsKaons.cxx:94 AliGenParamPionsKaons.cxx:95 AliGenParamPionsKaons.cxx:96 AliGenParamPionsKaons.cxx:97 AliGenParamPionsKaons.cxx:98 AliGenParamPionsKaons.cxx:99 AliGenParamPionsKaons.cxx:100 AliGenParamPionsKaons.cxx:101 AliGenParamPionsKaons.cxx:102 AliGenParamPionsKaons.cxx:103 AliGenParamPionsKaons.cxx:104 AliGenParamPionsKaons.cxx:105 AliGenParamPionsKaons.cxx:106 AliGenParamPionsKaons.cxx:107 AliGenParamPionsKaons.cxx:108 AliGenParamPionsKaons.cxx:109 AliGenParamPionsKaons.cxx:110 AliGenParamPionsKaons.cxx:111 AliGenParamPionsKaons.cxx:112 AliGenParamPionsKaons.cxx:113 AliGenParamPionsKaons.cxx:114 AliGenParamPionsKaons.cxx:115 AliGenParamPionsKaons.cxx:116 AliGenParamPionsKaons.cxx:117 AliGenParamPionsKaons.cxx:118 AliGenParamPionsKaons.cxx:119 AliGenParamPionsKaons.cxx:120 AliGenParamPionsKaons.cxx:121 AliGenParamPionsKaons.cxx:122 AliGenParamPionsKaons.cxx:123 AliGenParamPionsKaons.cxx:124 AliGenParamPionsKaons.cxx:125 AliGenParamPionsKaons.cxx:126 AliGenParamPionsKaons.cxx:127 AliGenParamPionsKaons.cxx:128 AliGenParamPionsKaons.cxx:129 AliGenParamPionsKaons.cxx:130 AliGenParamPionsKaons.cxx:131 AliGenParamPionsKaons.cxx:132 AliGenParamPionsKaons.cxx:133 AliGenParamPionsKaons.cxx:134 AliGenParamPionsKaons.cxx:135 AliGenParamPionsKaons.cxx:136 AliGenParamPionsKaons.cxx:137 AliGenParamPionsKaons.cxx:138 AliGenParamPionsKaons.cxx:139 AliGenParamPionsKaons.cxx:140 AliGenParamPionsKaons.cxx:141 AliGenParamPionsKaons.cxx:142 AliGenParamPionsKaons.cxx:143 AliGenParamPionsKaons.cxx:144 AliGenParamPionsKaons.cxx:145 AliGenParamPionsKaons.cxx:146 AliGenParamPionsKaons.cxx:147 AliGenParamPionsKaons.cxx:148 AliGenParamPionsKaons.cxx:149 AliGenParamPionsKaons.cxx:150 AliGenParamPionsKaons.cxx:151 AliGenParamPionsKaons.cxx:152 AliGenParamPionsKaons.cxx:153 AliGenParamPionsKaons.cxx:154 AliGenParamPionsKaons.cxx:155 AliGenParamPionsKaons.cxx:156 AliGenParamPionsKaons.cxx:157 AliGenParamPionsKaons.cxx:158 AliGenParamPionsKaons.cxx:159 AliGenParamPionsKaons.cxx:160 AliGenParamPionsKaons.cxx:161 AliGenParamPionsKaons.cxx:162 AliGenParamPionsKaons.cxx:163 AliGenParamPionsKaons.cxx:164 AliGenParamPionsKaons.cxx:165 AliGenParamPionsKaons.cxx:166 AliGenParamPionsKaons.cxx:167 AliGenParamPionsKaons.cxx:168 AliGenParamPionsKaons.cxx:169 AliGenParamPionsKaons.cxx:170 AliGenParamPionsKaons.cxx:171 AliGenParamPionsKaons.cxx:172 AliGenParamPionsKaons.cxx:173 AliGenParamPionsKaons.cxx:174 AliGenParamPionsKaons.cxx:175 AliGenParamPionsKaons.cxx:176 AliGenParamPionsKaons.cxx:177 AliGenParamPionsKaons.cxx:178 AliGenParamPionsKaons.cxx:179 AliGenParamPionsKaons.cxx:180 AliGenParamPionsKaons.cxx:181 AliGenParamPionsKaons.cxx:182 AliGenParamPionsKaons.cxx:183 AliGenParamPionsKaons.cxx:184 AliGenParamPionsKaons.cxx:185 AliGenParamPionsKaons.cxx:186 AliGenParamPionsKaons.cxx:187 AliGenParamPionsKaons.cxx:188 AliGenParamPionsKaons.cxx:189 AliGenParamPionsKaons.cxx:190 AliGenParamPionsKaons.cxx:191 AliGenParamPionsKaons.cxx:192 AliGenParamPionsKaons.cxx:193 AliGenParamPionsKaons.cxx:194 AliGenParamPionsKaons.cxx:195 AliGenParamPionsKaons.cxx:196 AliGenParamPionsKaons.cxx:197 AliGenParamPionsKaons.cxx:198 AliGenParamPionsKaons.cxx:199 AliGenParamPionsKaons.cxx:200 AliGenParamPionsKaons.cxx:201 AliGenParamPionsKaons.cxx:202 AliGenParamPionsKaons.cxx:203 AliGenParamPionsKaons.cxx:204 AliGenParamPionsKaons.cxx:205 AliGenParamPionsKaons.cxx:206 AliGenParamPionsKaons.cxx:207 AliGenParamPionsKaons.cxx:208 AliGenParamPionsKaons.cxx:209 AliGenParamPionsKaons.cxx:210 AliGenParamPionsKaons.cxx:211 AliGenParamPionsKaons.cxx:212 AliGenParamPionsKaons.cxx:213 AliGenParamPionsKaons.cxx:214 AliGenParamPionsKaons.cxx:215 AliGenParamPionsKaons.cxx:216 AliGenParamPionsKaons.cxx:217 AliGenParamPionsKaons.cxx:218 AliGenParamPionsKaons.cxx:219 AliGenParamPionsKaons.cxx:220 AliGenParamPionsKaons.cxx:221 AliGenParamPionsKaons.cxx:222 AliGenParamPionsKaons.cxx:223 AliGenParamPionsKaons.cxx:224 AliGenParamPionsKaons.cxx:225 AliGenParamPionsKaons.cxx:226 AliGenParamPionsKaons.cxx:227 AliGenParamPionsKaons.cxx:228 AliGenParamPionsKaons.cxx:229 AliGenParamPionsKaons.cxx:230 AliGenParamPionsKaons.cxx:231 AliGenParamPionsKaons.cxx:232 AliGenParamPionsKaons.cxx:233 AliGenParamPionsKaons.cxx:234 AliGenParamPionsKaons.cxx:235 AliGenParamPionsKaons.cxx:236 AliGenParamPionsKaons.cxx:237 AliGenParamPionsKaons.cxx:238 AliGenParamPionsKaons.cxx:239 AliGenParamPionsKaons.cxx:240 AliGenParamPionsKaons.cxx:241 AliGenParamPionsKaons.cxx:242 AliGenParamPionsKaons.cxx:243 AliGenParamPionsKaons.cxx:244 AliGenParamPionsKaons.cxx:245 AliGenParamPionsKaons.cxx:246 AliGenParamPionsKaons.cxx:247 AliGenParamPionsKaons.cxx:248 AliGenParamPionsKaons.cxx:249 AliGenParamPionsKaons.cxx:250 AliGenParamPionsKaons.cxx:251 AliGenParamPionsKaons.cxx:252 AliGenParamPionsKaons.cxx:253 AliGenParamPionsKaons.cxx:254 AliGenParamPionsKaons.cxx:255 AliGenParamPionsKaons.cxx:256 AliGenParamPionsKaons.cxx:257 AliGenParamPionsKaons.cxx:258 AliGenParamPionsKaons.cxx:259 AliGenParamPionsKaons.cxx:260 AliGenParamPionsKaons.cxx:261