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;
- fHeader = 0;
-}
-
-AliGenCocktail::AliGenCocktail(const AliGenCocktail & cocktail):
- AliGenerator(cocktail)
-{
-// Copy constructor
- cocktail.Copy(*this);
}
AliGenCocktail::~AliGenCocktail()
{
// Destructor
delete fEntries;
- delete fHeader;
+ fEntries = 0;
+ // delete fHeader; // It is removed in AliRunLoader
+ fHeader = 0;
}
void AliGenCocktail::
// 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)))
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);
fEntries->Add(entry);
fNGenerators++;
- }
+ flnk1 = 0;
+ flnk2 = 0;
+ fRandom = kFALSE;
+ fHeader = 0;
+}
void AliGenCocktail::Init()
{
AliGenCocktailEntry *preventry = 0;
AliGenerator* gen = 0;
if (fHeader) delete fHeader;
+
+
fHeader = new AliGenCocktailEventHeader("Cocktail Header");
- TObjArray *partArray = gAlice->GetMCApp()->Particles();
+ const TObjArray *partArray = gAlice->GetMCApp()->Particles();
//
// Generate the vertex position used by all generators
//
// 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);
entry->SetLast(partArray->GetEntriesFast());
preventry = entry;
}
- } else {
+ } else if (fRandom) {
//
// Select a generator randomly
//
entry->Generator()->SetVertex(fVertex.At(0), fVertex.At(1), fVertex.At(2));
entry->Generator()->Generate();
entry->SetLast(partArray->GetEntriesFast());
- }
-
+ }
next.Reset();
// Event Vertex
fHeader->SetPrimaryVertex(eventVertex);
+ fHeader->CalcNProduced();
gAlice->SetGenEventHeader(fHeader);
}
// Add a header to the list
if (fHeader) fHeader->AddHeader(header);
}
-
-AliGenCocktail& AliGenCocktail::operator=(const AliGenCocktail& rhs)
-{
-// Assignment operator
- rhs.Copy(*this);
- return (*this);
-}
-void AliGenCocktail::Copy(TObject &) const
-{
- Fatal("Copy","Not implemented!\n");
-}