/* $Id$ */
-///////////////////////////////////////////////////////////
-// //
-// Class to generate the particles for the MC //
-// The base class is empty //
-// //
-///////////////////////////////////////////////////////////
+// Container class for AliGenerator through recursion.
+// (Container is itself an AliGenerator)
+// Author: andreas.morsch@cern.ch
+//
#include "AliGenerator.h"
-
-#include <TClass.h>
-#include <TNamed.h>
-#include <TF1.h>
#include <TArrayF.h>
-#include <TTree.h>
-
-class AliGenCocktailEntry : public TObject
-{
- protected:
- AliGenerator *fGenerator;
- Int_t fNGenerated;
- Int_t fFirst;
- Int_t fLast;
- Float_t fRate;
- Float_t fKineBias;
- Float_t fBias;
- TString fName;
- public:
- AliGenCocktailEntry()
- {
- fGenerator =0;
- fNGenerated=0;
- fFirst=-1;
- fLast=-1;
- fRate=0;
- fKineBias=1;
- fBias=1;
- fName="unknown";
- }
-
- AliGenCocktailEntry
- (AliGenerator* Generator, TString Name, Float_t RateExp)
- {
- fGenerator=Generator;
- fNGenerated=0;
- fFirst=-1;
- fLast=-1;
- fRate=RateExp;
- fName=Name;
-//
- fKineBias=1;
- fBias=1;
-
- }
- ~AliGenCocktailEntry(){;}
- AliGenerator* Generator() {return fGenerator;}
- void SetGenerator(AliGenerator* generator){fGenerator=generator;}
- void SetFirst(Int_t first){fFirst=first;}
- void SetLast (Int_t last ){fLast =last;}
- Int_t GetFirst(){return fFirst;}
- Int_t GetLast (){return fLast;}
- Float_t Rate(){return fRate;}
- void PrintInfo();
- private:
- ClassDef(AliGenCocktailEntry,1)
-};
+#include <TList.h>
+class AliGenCocktailEntry;
+class AliGenCocktailEventHeader;
+class TArrayF;
+class TFormula;
class AliGenCocktail : public AliGenerator
{
- protected:
- //
- // Number of generators booked
-
- Int_t fNGenerators;
- //
- // List of Generators
- TList *fEntries;
- // Iterators
- TObjLink *flnk1;
- TObjLink *flnk2;
public:
AliGenCocktail();
+
virtual ~AliGenCocktail();
virtual void Init();
+ virtual void FinishRun();
virtual void Generate();
+ virtual void SetVertexSmear(VertexSmear_t smear);
+ virtual void SetRandomise(Bool_t flag) {fRandom = flag;}
+ virtual void UsePerEventRates() {fUsePerEventRate = kTRUE;}
+
//
// Add a new generator to the list
virtual void AddGenerator
- (AliGenerator *Generator, TString Name, Float_t RateExp );
+ (AliGenerator *Generator, const char* Name, Float_t RateExp, TFormula* formula = 0);
virtual TList* Entries() {return fEntries;}
// Iterators
AliGenCocktailEntry* FirstGenerator();
AliGenCocktailEntry* NextGenerator();
- void FirstGeneratorPair(AliGenCocktailEntry*&, AliGenCocktailEntry*&);
- void NextGeneratorPair (AliGenCocktailEntry*&, AliGenCocktailEntry*&);
- ClassDef(AliGenCocktail,1)
+ void FirstGeneratorPair(AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
+ void NextGeneratorPair (AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
+ virtual void AddHeader(AliGenEventHeader* header);
+
+ protected:
+ Int_t fNGenerators; // Number of generators booked
+ Float_t fTotalRate; // Total rate of the generators booked
+ Bool_t fRandom; // Flag to select random generator from list
+ Bool_t fUsePerEventRate; // Flag to generate the events according to the rate per event
+ TArrayF fProb; // Probability of an event (if fRandom == kTRUE)
+ TList *fEntries; // List of Generators
+ TObjLink *flnk1; // ! Iterator for first generator
+ TObjLink *flnk2; // ! Iterator for second generator
+ AliGenCocktailEventHeader* fHeader; // !Header container
+
//
+ private:
+ AliGenCocktail(const AliGenCocktail &cocktail);
+ AliGenCocktail & operator=(const AliGenCocktail & rhs);
+
+ ClassDef(AliGenCocktail,1) // Particle cocktail generator a la SHAKER
};
#endif