X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EVGEN%2FAliGenCocktail.cxx;h=2ac18c385f6ae409641bf7dbbf1db06edeef2129;hb=e905f1e1783fc52473c359a6a6879bcc420050be;hp=7524d942d825c6053e329057a1505018ed10b595;hpb=72cf830211ebc7253e2ff35221df67623691642f;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVGEN/AliGenCocktail.cxx b/EVGEN/AliGenCocktail.cxx index 7524d942d82..2ac18c385f6 100644 --- a/EVGEN/AliGenCocktail.cxx +++ b/EVGEN/AliGenCocktail.cxx @@ -41,7 +41,7 @@ AliGenCocktail::AliGenCocktail() :AliGenerator(), fNGenerators(0), fTotalRate(0.), - fRandom(kFALSE), + fSRandom(kFALSE), fUsePerEventRate(kFALSE), fProb(0), fEntries(0), @@ -64,7 +64,7 @@ AliGenCocktail::~AliGenCocktail() } 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 @@ -78,11 +78,11 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul 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]); @@ -102,12 +102,13 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul 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; } @@ -125,7 +126,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul next.Reset(); - if (fRandom) { + if (fSRandom) { fProb.Set(fNGenerators); next.Reset(); Float_t sum = 0.; @@ -181,12 +182,12 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul 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++; @@ -211,6 +212,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul } // // Number of signals is calculated from Collision Geometry + // and entry with given centrality bin is selected // if (entry->Formula() != 0) { @@ -221,18 +223,22 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul AliCollisionGeometry* coll = (collentry->Generator())->CollisionGeometry(); Float_t b = coll->ImpactParameter(); Int_t nsig = Int_t(entry->Formula()->Eval(b)); - if (nsig < 1) nsig = 1; - AliInfo(Form("Signal Events %13.3f %5d %5d\n", b, coll->HardScatters(), nsig)); - ntimes = nsig; + Int_t bin = entry->Bin() - 100; + if (bin > 0) { + if (bin != nsig) continue; + } else { + if (nsig < 1) nsig = 1; + AliInfo(Form("Signal Events %13.3f %5d %5d\n", b, coll->HardScatters(), nsig)); + ntimes = nsig; + } } + gen->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2), fTime); - entry->Generator()->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2)); - - for (Int_t i = 0; i < ntimes; i++) entry->Generator()->Generate(); + gen->GenerateN(ntimes); entry->SetLast(partArray->GetEntriesFast()); preventry = entry; } - } else if (fRandom) { + } else if (fSRandom) { // // Select a generator randomly // @@ -246,7 +252,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp, TFormul 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()); }