X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=EVGEN%2FAliGenCocktail.cxx;h=a1a038770c6bec0ad0ccfdf20d11a51881ccdbe9;hb=3dcae0cc6c79e22adea4996a5c10c99f4b6431a5;hp=fba33f80bd8b05581a5d746d7255a843dfd264b3;hpb=1ebe6dc870c0b9401c8abe9e366c8ff2209a7183;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVGEN/AliGenCocktail.cxx b/EVGEN/AliGenCocktail.cxx index fba33f80bd8..a1a038770c6 100644 --- a/EVGEN/AliGenCocktail.cxx +++ b/EVGEN/AliGenCocktail.cxx @@ -31,34 +31,34 @@ #include "AliCollisionGeometry.h" #include "AliRun.h" #include "AliMC.h" -#include "AliGenEventHeader.h" +#include "AliGenCocktailEventHeader.h" ClassImp(AliGenCocktail) AliGenCocktail::AliGenCocktail() - :AliGenerator() + :AliGenerator(), + fNGenerators(0), + fTotalRate(0.), + fRandom(kFALSE), + fUsePerEventRate(kFALSE), + fProb(0), + fEntries(0), + flnk1(0), + flnk2(0), + fHeader(0) { // Constructor fName = "Cocktail"; fTitle= "Particle Generator using cocktail of generators"; - flnk1 = 0; - flnk2 = 0; - fNGenerators=0; - fEntries = 0; - fRandom = kFALSE; -} - -AliGenCocktail::AliGenCocktail(const AliGenCocktail & cocktail): - AliGenerator(cocktail) -{ -// Copy constructor - cocktail.Copy(*this); } AliGenCocktail::~AliGenCocktail() { // Destructor delete fEntries; + fEntries = 0; + // delete fHeader; // It is removed in AliRunLoader + fHeader = 0; } void AliGenCocktail:: @@ -68,7 +68,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp) // Add a generator to the list // First check that list exists if (!fEntries) fEntries = new TList(); - + fTotalRate += RateExp; // // Forward parameters to the new generator if(TestBit(kPtRange) && !(Generator->TestBit(kPtRange)) && !(Generator->TestBit(kMomentumRange))) @@ -82,13 +82,15 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp) Generator->SetPhiRange(fPhiMin*180/TMath::Pi(),fPhiMax*180/TMath::Pi()); if (!(Generator->TestBit(kThetaRange))) Generator->SetThetaRange(fThetaMin*180/TMath::Pi(),fThetaMax*180/TMath::Pi()); - if (!(Generator->TestBit(kVertexRange))) + if (!(Generator->TestBit(kVertexRange))) { Generator->SetOrigin(fOrigin[0], fOrigin[1], fOrigin[2]); - - Generator->SetSigma(fOsigma[0], fOsigma[1], fOsigma[2]); - Generator->SetVertexSmear(fVertexSmear); - Generator->SetVertexSource(kContainer); + Generator->SetSigma(fOsigma[0], fOsigma[1], fOsigma[2]); + Generator->SetVertexSmear(fVertexSmear); + Generator->SetVertexSource(kContainer); + } Generator->SetTrackingFlag(fTrackIt); + Generator->SetContainer(this); + // // Add generator to list @@ -101,7 +103,11 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp) fEntries->Add(entry); fNGenerators++; - } + flnk1 = 0; + flnk2 = 0; + fRandom = kFALSE; + fHeader = 0; +} void AliGenCocktail::Init() { @@ -156,6 +162,10 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp) AliGenCocktailEntry *entry = 0; AliGenCocktailEntry *preventry = 0; AliGenerator* gen = 0; + if (fHeader) delete fHeader; + + + fHeader = new AliGenCocktailEventHeader("Cocktail Header"); TObjArray *partArray = gAlice->GetMCApp()->Particles(); @@ -172,8 +182,9 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp) // // Loop over generators and generate events Int_t igen=0; - while((entry = (AliGenCocktailEntry*)next())) { + if (fUsePerEventRate && (gRandom->Rndm() > entry->Rate())) continue; + igen++; if (igen ==1) { entry->SetFirst(0); @@ -198,7 +209,7 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp) entry->SetLast(partArray->GetEntriesFast()); preventry = entry; } - } else { + } else if (fRandom) { // // Select a generator randomly // @@ -215,15 +226,14 @@ AddGenerator(AliGenerator *Generator, const char* Name, Float_t RateExp) entry->Generator()->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2)); entry->Generator()->Generate(); entry->SetLast(partArray->GetEntriesFast()); - } - + } next.Reset(); -// Header - AliGenEventHeader* header = new AliGenEventHeader("AliGenCocktail"); + // Event Vertex - header->SetPrimaryVertex(eventVertex); - gAlice->SetGenEventHeader(header); + fHeader->SetPrimaryVertex(eventVertex); + fHeader->CalcNProduced(); + gAlice->SetGenEventHeader(fHeader); } void AliGenCocktail::SetVertexSmear(VertexSmear_t smear) @@ -291,17 +301,12 @@ NextGeneratorPair(AliGenCocktailEntry*& e1, AliGenCocktailEntry*& e2) } } -AliGenCocktail& AliGenCocktail::operator=(const AliGenCocktail& rhs) +void AliGenCocktail::AddHeader(AliGenEventHeader* header) { -// Assignment operator - rhs.Copy(*this); - return (*this); +// Add a header to the list + if (fHeader) fHeader->AddHeader(header); } -void AliGenCocktail::Copy(TObject &) const -{ - Fatal("Copy","Not implemented!\n"); -}