Parameterization at 8 TeV done by Ara and Vardanush
[u/mrichter/AliRoot.git] / EVGEN / AliGenCocktail.h
1 #ifndef ALIGENCOCKTAIL_H
2 #define ALIGENCOCKTAIL_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 // Container class for AliGenerator through recursion.
9 // (Container is itself an AliGenerator)
10 // Author: andreas.morsch@cern.ch 
11 //
12
13 #include "AliGenerator.h"
14 #include <TArrayF.h>
15 #include <TList.h>
16
17 class AliGenCocktailEntry;
18 class AliGenCocktailEventHeader;
19 class TArrayF;
20 class TFormula;
21
22 class AliGenCocktail : public AliGenerator
23 {
24  public:
25     AliGenCocktail();
26      
27     virtual ~AliGenCocktail();
28     virtual void Init();
29     virtual void FinishRun();
30     virtual void Generate();
31     virtual void SetVertexSmear(VertexSmear_t smear);
32     virtual void SetRandomise(Bool_t flag) {fSRandom = flag;}
33     virtual void UsePerEventRates() {fUsePerEventRate  = kTRUE;}
34             
35     //
36     // Add a new generator to the list
37     virtual void AddGenerator
38       (AliGenerator *Generator, const char* Name, Float_t RateExp, TFormula* formula = 0, Int_t ntimes = 1);
39     virtual TList* Entries() {return fEntries;}
40     // Iterators
41     AliGenCocktailEntry*  FirstGenerator();
42     AliGenCocktailEntry*  NextGenerator();
43     void FirstGeneratorPair(AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
44     void NextGeneratorPair (AliGenCocktailEntry*&e1, AliGenCocktailEntry*&e2);
45     virtual void AddHeader(AliGenEventHeader* header);
46             
47  protected:
48     Int_t fNGenerators;                 // Number of generators booked
49     Float_t fTotalRate;                 // Total rate of the generators booked
50     Bool_t fSRandom;                    // Flag to select random generator from list
51     Bool_t fUsePerEventRate;            // Flag to generate the events according to the rate per event    
52     TArrayF  fProb;                     // Probability of an event (if fSRandom == kTRUE)
53     TList  *fEntries;                   // List of Generators
54     TObjLink *flnk1;                    // ! Iterator for first generator
55     TObjLink *flnk2;                    // ! Iterator for second generator
56     AliGenCocktailEventHeader* fHeader; // !Header container  
57                            
58 //
59  private:
60     AliGenCocktail(const AliGenCocktail &cocktail);
61     AliGenCocktail & operator=(const AliGenCocktail & rhs);
62
63     ClassDef(AliGenCocktail, 2) // Particle cocktail generator a la SHAKER
64 };
65
66 #endif
67
68
69
70
71