#include "AliGenKrypton.h"
#include "TPDGCode.h"
ClassImp(AliGenKrypton)
AliGenKrypton::AliGenKrypton(){
}
void AliGenKrypton::Generate(){
Double_t eelectron[6];
Double_t egamma[2];
Float_t polar[3]={0.,0.,0.};
Int_t nelectron, ngamma;
Int_t nt;
Float_t rmin,rmax,zmax;
zmax=249.7;
rmin=78.8;
rmax=258.;
Float_t me=511.e-6;
Double_t rnd;
rnd=gRandom->Rndm();
Float_t r = (rmax-rmin)*rnd+rmin;
rnd=gRandom->Rndm();
Float_t phi=TMath::TwoPi()*rnd;
Float_t origin[3];
rnd=gRandom->Rndm();
origin[2]=zmax*(2.*rnd-1.);
origin[0]=r*TMath::Cos(phi);
origin[1]=r*TMath::Sin(phi);
Float_t ptot,p[3];
KrDecay(nelectron,ngamma,eelectron,egamma);
for(Int_t i=0;i<nelectron;i++){
rnd=gRandom->Rndm();
phi=TMath::TwoPi()*rnd;
rnd=gRandom->Rndm();
Double_t theta = TMath::Pi()*rnd;
ptot=TMath::Sqrt(eelectron[i]*(eelectron[i]+2.*me));
p[0]=ptot*TMath::Cos(phi)*TMath::Sin(theta);
p[1]=ptot*TMath::Sin(phi)*TMath::Sin(theta);
p[2]=ptot*TMath::Cos(theta);
PushTrack(fTrackIt,-1,kElectron,p,origin,polar,0,kPPrimary,nt);
}
for(Int_t i=0;i<ngamma;i++){
rnd=gRandom->Rndm();
Double_t theta = TMath::Pi()*rnd;
rnd=gRandom->Rndm();
phi=TMath::TwoPi()*rnd;
ptot=egamma[i];
p[0]=ptot*TMath::Cos(phi)*TMath::Sin(theta);
p[1]=ptot*TMath::Sin(phi)*TMath::Sin(theta);
p[2]=ptot*TMath::Cos(theta);
PushTrack(fTrackIt,-1,kGamma,p,origin,polar,0,kPPrimary,nt);
}
}
void AliGenKrypton::KrDecay(Int_t &nelectron, Int_t &ngamma, Double_t *eelectron, Double_t *egamma)
{
Double_t prob1[2]={0.76,0.88};
Double_t prob2=0.95;
nelectron=0;
ngamma=0;
Double_t rnd;
rnd = gRandom->Rndm();
if(rnd < prob1[0]) {
nelectron = 2;
eelectron[0]=30.e-6;
eelectron[1]=1.8e-6;
}
else if (rnd > prob1[1]){
nelectron=4;
eelectron[0]=18.e-6;
eelectron[1]=10.e-6;
eelectron[2]=1.8e-6;
eelectron[3]=1.8e-6;
}
else {
nelectron = 2;
ngamma = 1;
eelectron[0]=18.e-6;
eelectron[1]=1.8e-6;
egamma[0]=12.e-6;
}
rnd=gRandom->Rndm();
if(rnd < prob2){
nelectron+=2;
eelectron[nelectron-2]=7.6e-6;
eelectron[nelectron-1]=1.8e-6;
}
else {
ngamma++;
egamma[ngamma-1]=9.e-6;
}
}