Overlaps corrected, new shape of sectors
[u/mrichter/AliRoot.git] / EVGEN / AliGenCocktail.h
index 2f322e6..03e957f 100644 (file)
@@ -5,40 +5,62 @@
 
 /* $Id$ */
 
+// Container class for AliGenerator through recursion.
+// (Container is itself an AliGenerator)
+// Author: andreas.morsch@cern.ch 
+//
+
 #include "AliGenerator.h"
+#include <TArrayF.h>
 #include <TList.h>
 
 class AliGenCocktailEntry;
-
+class AliGenCocktailEventHeader;
+class TArrayF;
+class TFormula;
 
 class AliGenCocktail : public AliGenerator
 {
  public:
     AliGenCocktail();
-    AliGenCocktail(const AliGenCocktail &cocktail);
      
     virtual ~AliGenCocktail();
     virtual void Init();
+    virtual void FinishRun();
     virtual void Generate();
+    virtual void SetVertexSmear(VertexSmear_t smear);
+    virtual void SetRandomise(Bool_t flag) {fSRandom = flag;}
+    virtual void UsePerEventRates() {fUsePerEventRate  = kTRUE;}
+           
     //
     // Add a new generator to the list
     virtual void AddGenerator
-       (AliGenerator *Generator, char* Name, Float_t RateExp );
+      (AliGenerator *Generator, const char* Name, Float_t RateExp, TFormula* formula = 0, Int_t ntimes = 1);
     virtual TList* Entries() {return fEntries;}
     // Iterators
     AliGenCocktailEntry*  FirstGenerator();
     AliGenCocktailEntry*  NextGenerator();
     void FirstGeneratorPair(AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
     void NextGeneratorPair (AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
-    AliGenCocktail & operator=(const AliGenCocktail & rhs);
-    
+    virtual void AddHeader(AliGenEventHeader* header);
+           
  protected:
-    Int_t fNGenerators;   // Number of generators booked
-    TList  *fEntries;     // List of Generators
-    TObjLink *flnk1;      // ! Iterator for first generator
-    TObjLink *flnk2;      // ! Iterator for second generator
+    Int_t fNGenerators;                 // Number of generators booked
+    Float_t fTotalRate;                 // Total rate of the generators booked
+    Bool_t fSRandom;                    // 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 fSRandom == kTRUE)
+    TList  *fEntries;                   // List of Generators
+    TObjLink *flnk1;                    // ! Iterator for first generator
+    TObjLink *flnk2;                    // ! Iterator for second generator
+    AliGenCocktailEventHeader* fHeader; // !Header container  
+                          
 //
-    ClassDef(AliGenCocktail,1) // Particle cocktail generator a la SHAKER
+ private:
+    AliGenCocktail(const AliGenCocktail &cocktail);
+    AliGenCocktail & operator=(const AliGenCocktail & rhs);
+
+    ClassDef(AliGenCocktail, 2) // Particle cocktail generator a la SHAKER
 };
 
 #endif