AliGenerator(),
fParamMI(kFALSE),
fParamACORDE(kFALSE),
+fParamDataTPC(kTRUE),
fYOrigin(600.),
fMaxAngleWRTVertical(-99.),
fBkG(0.),
ptot = (Double_t)dNdpACORDE->GetRandom();
delete dNdpACORDE;
dNdpACORDE = 0;
+ } else if(fParamDataTPC) { // extracted from cosmics in TPC (Summer 08)
+ // sample total momentum only once (to speed up)
+ 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) {
}
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) { // extracted from AliGenACORDE events
+ } else if(fParamACORDE || fParamDataTPC) {
Float_t theta,phi;
while(1) {
theta = gRandom->Gaus(0.5*TMath::Pi(),0.42);
p[1] = pt*TMath::Sin(phi);
p[2] = ptot*TMath::Cos(theta);
} else {
- AliFatal("Parametrization not set: use SetParamMI or SetParamACORDE");
+ AliFatal("Parametrization not set: use SetParamDataTPC, SetParamMI, or SetParamACORDE");
}
//
if(TestBit(kPtRange))
AliFatal("You cannot set the pt range for this generator! Only momentum range");
- if(fPMin<8.) {
- fPMin=8.;
+ Double_t pmin=8.; // fParamACORDE
+ if(fParamDataTPC) pmin=0.5;
+ if(fPMin<pmin) {
+ fPMin=pmin;
if(TestBit(kMomentumRange))
- AliWarning("Minimum momentum cannot be < 8 GeV/c");
+ AliWarning(Form("Minimum momentum cannot be < %f GeV/c",pmin));
}
if(fMaxAngleWRTVertical<0.)
AliFatal("You must use SetMaxAngleWRTVertical() instead of SetThetaRange(), SetPhiRange()");
virtual ~AliGenCosmicsParam() {}
virtual void Generate();
virtual void Init();
- void SetParamMI() { fParamMI=kTRUE; fParamACORDE=kFALSE; return; }
- void SetParamACORDE() { fParamMI=kFALSE; fParamACORDE=kTRUE; return; }
+ void SetParamMI() { fParamMI=kTRUE; fParamACORDE=kFALSE; fParamDataTPC=kFALSE; return; }
+ void SetParamACORDE() { fParamMI=kFALSE; fParamACORDE=kTRUE; fParamDataTPC=kFALSE; return; }
+ void SetParamDataTPC() { fParamDataTPC=kTRUE; fParamACORDE=kFALSE; fParamDataTPC=kFALSE; return; }
void SetYOrigin(Float_t y=600.) { fYOrigin=y; return; }
void SetMaxAngleWRTVertical(Float_t max=45.) {
if(max<0. || max>90.) AliFatal("angle must be in [0,pi/2]");
Float_t o[3],Float_t p[3]) const;
Bool_t fParamMI; // parametrization from M.Ivanov
Bool_t fParamACORDE; // parametrization from AliGenACORDE
+ Bool_t fParamDataTPC; // parametrization from TPC Summer08 cosmics
// (parametrized at ALICE y)
Float_t fYOrigin; // y of muon origin
Float_t fMaxAngleWRTVertical; // maximum angle between momentum and y axis
Bool_t fACORDE4ITS; // acceptance cuts
Bool_t fBottomScintillator; // acceptance cuts
- ClassDef(AliGenCosmicsParam,4) // parametrized cosmics generator
+ ClassDef(AliGenCosmicsParam,5) // parametrized cosmics generator
};
#endif