#include <TParticle.h>
#include <TF1.h>
#include "AliRun.h"
#include "AliESDtrack.h"
#include "AliESDVertex.h"
#include "AliGenCosmicsParam.h"
ClassImp(AliGenCosmicsParam)
AliGenCosmicsParam::AliGenCosmicsParam():
AliGenerator(),
fParamMI(kFALSE),
fParamACORDE(kFALSE),
fParamDataTPC(kTRUE),
fYOrigin(600.),
fMaxAngleWRTVertical(-99.),
fBkG(0.),
fTPC(kFALSE),
fITS(kFALSE),
fSPDinner(kFALSE),
fSPDouter(kFALSE),
fSDDinner(kFALSE),
fSDDouter(kFALSE),
fSSDinner(kFALSE),
fSSDouter(kFALSE),
fACORDE(kFALSE),
fACORDE4ITS(kFALSE),
fBottomScintillator(kFALSE)
{
SetNumberParticles(1);
}
void AliGenCosmicsParam::Generate()
{
Float_t origin[3];
Float_t p[3];
Int_t nt;
Double_t ptot=0,pt=0,angleWRTVertical=0;
Bool_t okMom=kFALSE,okAngle=kFALSE;
Float_t rtrigger=1000.0,ztrigger=600.0;
if(fTPC) { rtrigger=250.0; ztrigger=250.0; }
if(fITS) { rtrigger=50.0; ztrigger=50.0; }
if(fSPDinner) { rtrigger=3.5; ztrigger=14.0; }
if(fSPDouter) { rtrigger=6.5; ztrigger=14.0; }
if(fSDDinner) { rtrigger=14.0; ztrigger=21.0; }
if(fSDDouter) { rtrigger=23.0; ztrigger=29.0; }
if(fSSDinner) { rtrigger=37.0; ztrigger=42.0; }
if(fSSDouter) { rtrigger=42.0; ztrigger=48.0; }
Float_t muMinusFraction = 4./9.;
Int_t ipart;
Int_t trials=0;
Int_t npart=0;
while (npart<fNpart) {
if(gRandom->Rndm()<muMinusFraction) {
ipart = 13;
} else {
ipart = -13;
}
if(fParamACORDE) {
TF1 *dNdpACORDE = new TF1("dNdpACORDE","x/(1.+(x/12.8)*(x/12.8))^1.96",fPMin,fPMax);
ptot = (Double_t)dNdpACORDE->GetRandom();
delete dNdpACORDE;
dNdpACORDE = 0;
} else if(fParamDataTPC) {
TF1 *dNdpTPC = new TF1("dNdpTPC","x/(1.+(x/3.)*(x/3.))^1.",fPMin,fPMax);
ptot = (Double_t)dNdpTPC->GetRandom();
delete dNdpTPC;
dNdpTPC = 0;
}
while(1) {
trials++;
origin[0] = (fYOrigin*TMath::Tan(fMaxAngleWRTVertical)+rtrigger)*(-1.+2.*gRandom->Rndm());
origin[1] = fYOrigin;
origin[2] = (fYOrigin*TMath::Tan(fMaxAngleWRTVertical)+ztrigger)*(-1.+2.*gRandom->Rndm());
while(1) {
okMom=kFALSE; okAngle=kFALSE;
if(fParamMI) {
Float_t pref = 1. + gRandom->Exp(30.);
p[1] = -pref;
p[0] = gRandom->Gaus(0.0,0.2)*pref;
p[2] = gRandom->Gaus(0.0,0.2)*pref;
if(gRandom->Rndm()>0.9) {
p[0] = gRandom->Gaus(0.0,0.4)*pref;
p[2] = gRandom->Gaus(0.0,0.4)*pref;
}
ptot=TMath::Sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
pt=TMath::Sqrt(p[0]*p[0]+p[1]*p[1]);
} else if(fParamACORDE || fParamDataTPC) {
Float_t theta,phi;
while(1) {
theta = gRandom->Gaus(0.5*TMath::Pi(),0.42);
if(TMath::Abs(theta-0.5*TMath::Pi())<fMaxAngleWRTVertical) break;
}
while(1) {
phi = gRandom->Gaus(-0.5*TMath::Pi(),0.42);
if(TMath::Abs(phi+0.5*TMath::Pi())<fMaxAngleWRTVertical) break;
}
pt = ptot*TMath::Sin(theta);
p[0] = pt*TMath::Cos(phi);
p[1] = pt*TMath::Sin(phi);
p[2] = ptot*TMath::Cos(theta);
} else {
AliFatal("Parametrization not set: use SetParamDataTPC, SetParamMI, or SetParamACORDE");
}
if(TestBit(kMomentumRange)) {
if(ptot>fPMin && ptot<fPMax) okMom=kTRUE;
} else {
okMom=kTRUE;
}
angleWRTVertical=TMath::ACos(TMath::Abs(p[1])/ptot);
if(angleWRTVertical<fMaxAngleWRTVertical) okAngle=kTRUE;
if(okAngle&&okMom) break;
}
if(IntersectCylinder(rtrigger,ztrigger,ipart,origin,p)) {
if(fACORDE && !fBottomScintillator) {
if(IntersectACORDE(ipart,origin,p)) break;
} else if(!fACORDE && fBottomScintillator) {
if(IntersectBottomScintillator(ipart,origin,p)) break;
} else if(fACORDE && fBottomScintillator) {
if(IntersectACORDE(ipart,origin,p) &&
IntersectBottomScintillator(ipart,origin,p)) break;
} else {
break;
}
}
}
Float_t polarization[3]= {0,0,0};
PushTrack(fTrackIt,-1,ipart,p,origin,polarization,0,kPPrimary,nt);
npart++;
}
return;
}
void AliGenCosmicsParam::Init()
{
if(TestBit(kPtRange))
AliFatal("You cannot set the pt range for this generator! Only momentum range");
Double_t pmin=8.;
if(fParamDataTPC) pmin=0.5;
if(fPMin<pmin) {
fPMin=pmin;
if(TestBit(kMomentumRange))
AliWarning(Form("Minimum momentum cannot be < %f GeV/c",pmin));
}
if(fMaxAngleWRTVertical<0.)
AliFatal("You must use SetMaxAngleWRTVertical() instead of SetThetaRange(), SetPhiRange()");
printf("************ AliGenCosmicsParam ****************\n");
printf("***** Muons generated at Y = %f cm\n",fYOrigin);
printf("************************************************\n");
return;
}
Bool_t AliGenCosmicsParam::IntersectCylinder(Float_t r,Float_t z,Int_t pdg,
Float_t o[3],Float_t p[3]) const
{
Float_t en = TMath::Sqrt(0.105*0.105+p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
TParticle part(pdg,0,0,0,0,0,p[0],p[1],p[2],en,o[0],o[1],o[2],0);
AliESDtrack track(&part);
Double_t pos[3]={0.,0.,0.},sigma[3]={0.,0.,0.};
AliESDVertex origin(pos,sigma);
track.RelateToVertex(&origin,fBkG,10000.);
Float_t d0z0[2],covd0z0[3];
track.GetImpactParameters(d0z0,covd0z0);
if(TMath::Abs(d0z0[0])>r) return kFALSE;
if(TMath::Abs(d0z0[1])>z) return kFALSE;
return kTRUE;
}
Bool_t AliGenCosmicsParam::IntersectACORDE(Int_t pdg,
Float_t o[3],Float_t p[3]) const
{
Float_t en = TMath::Sqrt(0.105*0.105+p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
TParticle part(pdg,0,0,0,0,0,-p[0],-p[1],-p[2],en,o[0],o[1],o[2],0);
AliESDtrack track(&part);
Float_t rACORDE=800.0,xACORDE=750.0,zACORDE=500.0;
if(fACORDE4ITS) { xACORDE=100.0; zACORDE=100.0; }
Double_t planepoint[3]={0.,rACORDE,0.};
Double_t planenorm[3]={0.,1.,0.};
if(!track.Intersect(planepoint,planenorm,fBkG)) return kFALSE;
Double_t xyz[3]={planepoint[0],planepoint[1],planepoint[2]};
if(TMath::Abs(xyz[0]) > xACORDE) return kFALSE;
if(TMath::Abs(xyz[2]) > zACORDE) return kFALSE;
return kTRUE;
}
Bool_t AliGenCosmicsParam::IntersectBottomScintillator(Int_t pdg,
Float_t o[3],Float_t p[3]) const
{
Float_t en = TMath::Sqrt(0.105*0.105+p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
TParticle part(pdg,0,0,0,0,0,-p[0],-p[1],-p[2],en,o[0],o[1],o[2],0);
AliESDtrack track(&part);
Double_t xSc=40.,ySc=-350.,zSc=40.;
Double_t planepoint[3]={0.,ySc,0.};
Double_t planenorm[3]={0.,1.,0.};
if(!track.Intersect(planepoint,planenorm,fBkG)) return kFALSE;
Double_t xyz[3]={planepoint[0],planepoint[1],planepoint[2]};
if(TMath::Abs(xyz[0]) > xSc) return kFALSE;
if(TMath::Abs(xyz[2]) > zSc) return kFALSE;
return kTRUE;
}
AliGenCosmicsParam.cxx:10 AliGenCosmicsParam.cxx:11 AliGenCosmicsParam.cxx:12 AliGenCosmicsParam.cxx:13 AliGenCosmicsParam.cxx:14 AliGenCosmicsParam.cxx:15 AliGenCosmicsParam.cxx:16 AliGenCosmicsParam.cxx:17 AliGenCosmicsParam.cxx:18 AliGenCosmicsParam.cxx:19 AliGenCosmicsParam.cxx:20 AliGenCosmicsParam.cxx:21 AliGenCosmicsParam.cxx:22 AliGenCosmicsParam.cxx:23 AliGenCosmicsParam.cxx:24 AliGenCosmicsParam.cxx:25 AliGenCosmicsParam.cxx:26 AliGenCosmicsParam.cxx:27 AliGenCosmicsParam.cxx:28 AliGenCosmicsParam.cxx:29 AliGenCosmicsParam.cxx:30 AliGenCosmicsParam.cxx:31 AliGenCosmicsParam.cxx:32 AliGenCosmicsParam.cxx:33 AliGenCosmicsParam.cxx:34 AliGenCosmicsParam.cxx:35 AliGenCosmicsParam.cxx:36 AliGenCosmicsParam.cxx:37 AliGenCosmicsParam.cxx:38 AliGenCosmicsParam.cxx:39 AliGenCosmicsParam.cxx:40 AliGenCosmicsParam.cxx:41 AliGenCosmicsParam.cxx:42 AliGenCosmicsParam.cxx:43 AliGenCosmicsParam.cxx:44 AliGenCosmicsParam.cxx:45 AliGenCosmicsParam.cxx:46 AliGenCosmicsParam.cxx:47 AliGenCosmicsParam.cxx:48 AliGenCosmicsParam.cxx:49 AliGenCosmicsParam.cxx:50 AliGenCosmicsParam.cxx:51 AliGenCosmicsParam.cxx:52 AliGenCosmicsParam.cxx:53 AliGenCosmicsParam.cxx:54 AliGenCosmicsParam.cxx:55 AliGenCosmicsParam.cxx:56 AliGenCosmicsParam.cxx:57 AliGenCosmicsParam.cxx:58 AliGenCosmicsParam.cxx:59 AliGenCosmicsParam.cxx:60 AliGenCosmicsParam.cxx:61 AliGenCosmicsParam.cxx:62 AliGenCosmicsParam.cxx:63 AliGenCosmicsParam.cxx:64 AliGenCosmicsParam.cxx:65 AliGenCosmicsParam.cxx:66 AliGenCosmicsParam.cxx:67 AliGenCosmicsParam.cxx:68 AliGenCosmicsParam.cxx:69 AliGenCosmicsParam.cxx:70 AliGenCosmicsParam.cxx:71 AliGenCosmicsParam.cxx:72 AliGenCosmicsParam.cxx:73 AliGenCosmicsParam.cxx:74 AliGenCosmicsParam.cxx:75 AliGenCosmicsParam.cxx:76 AliGenCosmicsParam.cxx:77 AliGenCosmicsParam.cxx:78 AliGenCosmicsParam.cxx:79 AliGenCosmicsParam.cxx:80 AliGenCosmicsParam.cxx:81 AliGenCosmicsParam.cxx:82 AliGenCosmicsParam.cxx:83 AliGenCosmicsParam.cxx:84 AliGenCosmicsParam.cxx:85 AliGenCosmicsParam.cxx:86 AliGenCosmicsParam.cxx:87 AliGenCosmicsParam.cxx:88 AliGenCosmicsParam.cxx:89 AliGenCosmicsParam.cxx:90 AliGenCosmicsParam.cxx:91 AliGenCosmicsParam.cxx:92 AliGenCosmicsParam.cxx:93 AliGenCosmicsParam.cxx:94 AliGenCosmicsParam.cxx:95 AliGenCosmicsParam.cxx:96 AliGenCosmicsParam.cxx:97 AliGenCosmicsParam.cxx:98 AliGenCosmicsParam.cxx:99 AliGenCosmicsParam.cxx:100 AliGenCosmicsParam.cxx:101 AliGenCosmicsParam.cxx:102 AliGenCosmicsParam.cxx:103 AliGenCosmicsParam.cxx:104 AliGenCosmicsParam.cxx:105 AliGenCosmicsParam.cxx:106 AliGenCosmicsParam.cxx:107 AliGenCosmicsParam.cxx:108 AliGenCosmicsParam.cxx:109 AliGenCosmicsParam.cxx:110 AliGenCosmicsParam.cxx:111 AliGenCosmicsParam.cxx:112 AliGenCosmicsParam.cxx:113 AliGenCosmicsParam.cxx:114 AliGenCosmicsParam.cxx:115 AliGenCosmicsParam.cxx:116 AliGenCosmicsParam.cxx:117 AliGenCosmicsParam.cxx:118 AliGenCosmicsParam.cxx:119 AliGenCosmicsParam.cxx:120 AliGenCosmicsParam.cxx:121 AliGenCosmicsParam.cxx:122 AliGenCosmicsParam.cxx:123 AliGenCosmicsParam.cxx:124 AliGenCosmicsParam.cxx:125 AliGenCosmicsParam.cxx:126 AliGenCosmicsParam.cxx:127 AliGenCosmicsParam.cxx:128 AliGenCosmicsParam.cxx:129 AliGenCosmicsParam.cxx:130 AliGenCosmicsParam.cxx:131 AliGenCosmicsParam.cxx:132 AliGenCosmicsParam.cxx:133 AliGenCosmicsParam.cxx:134 AliGenCosmicsParam.cxx:135 AliGenCosmicsParam.cxx:136 AliGenCosmicsParam.cxx:137 AliGenCosmicsParam.cxx:138 AliGenCosmicsParam.cxx:139 AliGenCosmicsParam.cxx:140 AliGenCosmicsParam.cxx:141 AliGenCosmicsParam.cxx:142 AliGenCosmicsParam.cxx:143 AliGenCosmicsParam.cxx:144 AliGenCosmicsParam.cxx:145 AliGenCosmicsParam.cxx:146 AliGenCosmicsParam.cxx:147 AliGenCosmicsParam.cxx:148 AliGenCosmicsParam.cxx:149 AliGenCosmicsParam.cxx:150 AliGenCosmicsParam.cxx:151 AliGenCosmicsParam.cxx:152 AliGenCosmicsParam.cxx:153 AliGenCosmicsParam.cxx:154 AliGenCosmicsParam.cxx:155 AliGenCosmicsParam.cxx:156 AliGenCosmicsParam.cxx:157 AliGenCosmicsParam.cxx:158 AliGenCosmicsParam.cxx:159 AliGenCosmicsParam.cxx:160 AliGenCosmicsParam.cxx:161 AliGenCosmicsParam.cxx:162 AliGenCosmicsParam.cxx:163 AliGenCosmicsParam.cxx:164 AliGenCosmicsParam.cxx:165 AliGenCosmicsParam.cxx:166 AliGenCosmicsParam.cxx:167 AliGenCosmicsParam.cxx:168 AliGenCosmicsParam.cxx:169 AliGenCosmicsParam.cxx:170 AliGenCosmicsParam.cxx:171 AliGenCosmicsParam.cxx:172 AliGenCosmicsParam.cxx:173 AliGenCosmicsParam.cxx:174 AliGenCosmicsParam.cxx:175 AliGenCosmicsParam.cxx:176 AliGenCosmicsParam.cxx:177 AliGenCosmicsParam.cxx:178 AliGenCosmicsParam.cxx:179 AliGenCosmicsParam.cxx:180 AliGenCosmicsParam.cxx:181 AliGenCosmicsParam.cxx:182 AliGenCosmicsParam.cxx:183 AliGenCosmicsParam.cxx:184 AliGenCosmicsParam.cxx:185 AliGenCosmicsParam.cxx:186 AliGenCosmicsParam.cxx:187 AliGenCosmicsParam.cxx:188 AliGenCosmicsParam.cxx:189 AliGenCosmicsParam.cxx:190 AliGenCosmicsParam.cxx:191 AliGenCosmicsParam.cxx:192 AliGenCosmicsParam.cxx:193 AliGenCosmicsParam.cxx:194 AliGenCosmicsParam.cxx:195 AliGenCosmicsParam.cxx:196 AliGenCosmicsParam.cxx:197 AliGenCosmicsParam.cxx:198 AliGenCosmicsParam.cxx:199 AliGenCosmicsParam.cxx:200 AliGenCosmicsParam.cxx:201 AliGenCosmicsParam.cxx:202 AliGenCosmicsParam.cxx:203 AliGenCosmicsParam.cxx:204 AliGenCosmicsParam.cxx:205 AliGenCosmicsParam.cxx:206 AliGenCosmicsParam.cxx:207 AliGenCosmicsParam.cxx:208 AliGenCosmicsParam.cxx:209 AliGenCosmicsParam.cxx:210 AliGenCosmicsParam.cxx:211 AliGenCosmicsParam.cxx:212 AliGenCosmicsParam.cxx:213 AliGenCosmicsParam.cxx:214 AliGenCosmicsParam.cxx:215 AliGenCosmicsParam.cxx:216 AliGenCosmicsParam.cxx:217 AliGenCosmicsParam.cxx:218 AliGenCosmicsParam.cxx:219 AliGenCosmicsParam.cxx:220 AliGenCosmicsParam.cxx:221 AliGenCosmicsParam.cxx:222 AliGenCosmicsParam.cxx:223 AliGenCosmicsParam.cxx:224 AliGenCosmicsParam.cxx:225 AliGenCosmicsParam.cxx:226 AliGenCosmicsParam.cxx:227 AliGenCosmicsParam.cxx:228 AliGenCosmicsParam.cxx:229 AliGenCosmicsParam.cxx:230 AliGenCosmicsParam.cxx:231 AliGenCosmicsParam.cxx:232 AliGenCosmicsParam.cxx:233 AliGenCosmicsParam.cxx:234 AliGenCosmicsParam.cxx:235 AliGenCosmicsParam.cxx:236 AliGenCosmicsParam.cxx:237 AliGenCosmicsParam.cxx:238 AliGenCosmicsParam.cxx:239 AliGenCosmicsParam.cxx:240 AliGenCosmicsParam.cxx:241 AliGenCosmicsParam.cxx:242 AliGenCosmicsParam.cxx:243 AliGenCosmicsParam.cxx:244 AliGenCosmicsParam.cxx:245 AliGenCosmicsParam.cxx:246 AliGenCosmicsParam.cxx:247 AliGenCosmicsParam.cxx:248 AliGenCosmicsParam.cxx:249 AliGenCosmicsParam.cxx:250 AliGenCosmicsParam.cxx:251 AliGenCosmicsParam.cxx:252 AliGenCosmicsParam.cxx:253 AliGenCosmicsParam.cxx:254 AliGenCosmicsParam.cxx:255 AliGenCosmicsParam.cxx:256 AliGenCosmicsParam.cxx:257 AliGenCosmicsParam.cxx:258 AliGenCosmicsParam.cxx:259 AliGenCosmicsParam.cxx:260 AliGenCosmicsParam.cxx:261 AliGenCosmicsParam.cxx:262 AliGenCosmicsParam.cxx:263 AliGenCosmicsParam.cxx:264 AliGenCosmicsParam.cxx:265 AliGenCosmicsParam.cxx:266 AliGenCosmicsParam.cxx:267 AliGenCosmicsParam.cxx:268 AliGenCosmicsParam.cxx:269 AliGenCosmicsParam.cxx:270 AliGenCosmicsParam.cxx:271 AliGenCosmicsParam.cxx:272 AliGenCosmicsParam.cxx:273 AliGenCosmicsParam.cxx:274 AliGenCosmicsParam.cxx:275 AliGenCosmicsParam.cxx:276 AliGenCosmicsParam.cxx:277 AliGenCosmicsParam.cxx:278 AliGenCosmicsParam.cxx:279 AliGenCosmicsParam.cxx:280 AliGenCosmicsParam.cxx:281 AliGenCosmicsParam.cxx:282 AliGenCosmicsParam.cxx:283 AliGenCosmicsParam.cxx:284 AliGenCosmicsParam.cxx:285 AliGenCosmicsParam.cxx:286 AliGenCosmicsParam.cxx:287 AliGenCosmicsParam.cxx:288 AliGenCosmicsParam.cxx:289 AliGenCosmicsParam.cxx:290 AliGenCosmicsParam.cxx:291 AliGenCosmicsParam.cxx:292 AliGenCosmicsParam.cxx:293 AliGenCosmicsParam.cxx:294 AliGenCosmicsParam.cxx:295 AliGenCosmicsParam.cxx:296 AliGenCosmicsParam.cxx:297 AliGenCosmicsParam.cxx:298 AliGenCosmicsParam.cxx:299 AliGenCosmicsParam.cxx:300 AliGenCosmicsParam.cxx:301 AliGenCosmicsParam.cxx:302 AliGenCosmicsParam.cxx:303 AliGenCosmicsParam.cxx:304 AliGenCosmicsParam.cxx:305 AliGenCosmicsParam.cxx:306 AliGenCosmicsParam.cxx:307 AliGenCosmicsParam.cxx:308 AliGenCosmicsParam.cxx:309