5e348fd1fdd1e04bbf50b22380503530bc0a700d
[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
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) {fRandom = 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 );
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     Bool_t fRandom;                     // Flag to select random generator from list
50     Bool_t fUsePerEventRate;            // Flag to generate the events according to the rate per event    
51     TArrayF  fProb;                     // Probability of an event (if fRandom == kTRUE)
52     TList  *fEntries;                   // List of Generators
53     TObjLink *flnk1;                    // ! Iterator for first generator
54     TObjLink *flnk2;                    // ! Iterator for second generator
55     AliGenCocktailEventHeader* fHeader; // !Header container  
56                            
57 //
58  private:
59     AliGenCocktail(const AliGenCocktail &cocktail);
60     AliGenCocktail & operator=(const AliGenCocktail & rhs);
61
62     ClassDef(AliGenCocktail,1) // Particle cocktail generator a la SHAKER
63 };
64
65 #endif
66
67
68
69
70