:AliGenerator(),
fNGenerators(0),
fTotalRate(0.),
- fRandom(kFALSE),
+ fSRandom(kFALSE),
fUsePerEventRate(kFALSE),
fProb(0),
fEntries(0),
}
void AliGenCocktail::
-AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormula* formula)
+AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormula* formula, Int_t ntimes)
{
//
// Add a generator to the list
if(TestBit(kMomentumRange) && !(Generator->TestBit(kPtRange)) && !(Generator->TestBit(kMomentumRange)))
Generator->SetMomentumRange(fPMin,fPMax);
- if (!(Generator->TestBit(kYRange)))
+ if (TestBit(kYRange) && !(Generator->TestBit(kYRange)))
Generator->SetYRange(fYMin,fYMax);
- if (!(Generator->TestBit(kPhiRange)))
+ if (TestBit(kPhiRange) && !(Generator->TestBit(kPhiRange)))
Generator->SetPhiRange(fPhiMin*180/TMath::Pi(),fPhiMax*180/TMath::Pi());
- if (!(Generator->TestBit(kThetaRange)))
+ if (TestBit(kThetaRange) && !(Generator->TestBit(kThetaRange)) && !(Generator->TestBit(kEtaRange)))
Generator->SetThetaRange(fThetaMin*180/TMath::Pi(),fThetaMax*180/TMath::Pi());
if (!(Generator->TestBit(kVertexRange))) {
Generator->SetOrigin(fOrigin[0], fOrigin[1], fOrigin[2]);
AliGenCocktailEntry *entry =
new AliGenCocktailEntry(Generator, Name, RateExp);
- if (formula) entry->SetFormula(formula);
+ if (formula) entry->SetFormula(formula);
+ entry->SetNTimes(ntimes);
fEntries->Add(entry);
fNGenerators++;
flnk1 = 0;
flnk2 = 0;
- fRandom = kFALSE;
+ fSRandom = kFALSE;
fHeader = 0;
}
next.Reset();
- if (fRandom) {
+ if (fSRandom) {
fProb.Set(fNGenerators);
next.Reset();
Float_t sum = 0.;
eventVertex.Set(3);
for (Int_t j=0; j < 3; j++) eventVertex[j] = fVertex[j];
- if (!fRandom) {
+ if (!fSRandom) {
//
// Loop over generators and generate events
Int_t igen = 0;
while((entry = (AliGenCocktailEntry*)next())) {
- Int_t ntimes = 1;
+ Int_t ntimes = entry->NTimes();
if (fUsePerEventRate && (gRandom->Rndm() > entry->Rate())) continue;
igen++;
ntimes = nsig;
}
}
+ gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2), fTime);
- gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2));
-
- for (Int_t i = 0; i < ntimes; i++) gen->Generate();
+ gen->GenerateN(ntimes);
entry->SetLast(partArray->GetEntriesFast());
preventry = entry;
}
- } else if (fRandom) {
+ } else if (fSRandom) {
//
// Select a generator randomly
//
entry = (AliGenCocktailEntry*) fEntries->At(i);
entry->SetFirst(0);
gen = entry->Generator();
- gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2));
+ gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2), fTime);
gen->Generate();
entry->SetLast(partArray->GetEntriesFast());
}
next.Reset();
-// Event Vertex
+ // Event Vertex
fHeader->SetPrimaryVertex(eventVertex);
fHeader->CalcNProduced();
- gAlice->SetGenEventHeader(fHeader);
+ if (fContainer) {
+ fHeader->SetName(fName);
+ fContainer->AddHeader(fHeader);
+ } else {
+ gAlice->SetGenEventHeader(fHeader);
+ }
}
void AliGenCocktail::SetVertexSmear(VertexSmear_t smear)