]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliGenCocktail.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / EVGEN / AliGenCocktail.h
index 2b245039a69b7b256fbc02afd641a60d785a9bf5..03e957fb86ebe54bae8acf962dd54b72ec0925c8 100644 (file)
 
 /* $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) {fSRandom = 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, Int_t ntimes = 1);
     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 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  
+                          
 //
+ private:
+    AliGenCocktail(const AliGenCocktail &cocktail);
+    AliGenCocktail & operator=(const AliGenCocktail & rhs);
+
+    ClassDef(AliGenCocktail, 2) // Particle cocktail generator a la SHAKER
 };
 
 #endif