Revised version of the flow afterburner.
[u/mrichter/AliRoot.git] / EVGEN / AliGenCocktailAfterBurner.h
1 #ifndef AliGenCocktailAfterBurner_H
2 #define AliGenCocktailAfterBurner_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: piotr.skowronski@cern.ch 
11 //
12
13 #include <TMCProcess.h>
14
15 #include "AliGenCocktail.h"
16 #include "AliRun.h"
17
18 class AliGenCocktailEntry;
19 class AliStack;
20
21 // ANDREAS MORSCH ------------------------------------- (
22 class AliCollisionGeometry;
23 // ANDREAS MORSCH ------------------------------------- )
24
25 class AliGenCocktailAfterBurner : public  AliGenCocktail
26 {
27 //container class for other generators
28 //extends AliGenCocktail functionality
29 //with possiblity of adding after-burners
30
31  public:
32     AliGenCocktailAfterBurner();
33     AliGenCocktailAfterBurner(const AliGenCocktailAfterBurner& in);
34     virtual ~AliGenCocktailAfterBurner();
35     AliGenCocktailAfterBurner & operator=(const AliGenCocktailAfterBurner & rhs);
36     
37     virtual void  Init();
38     virtual void  Generate();
39     virtual void  SetTracks(Int_t stackno);
40     //
41     // Add a new generator to the list
42     virtual void  AddAfterBurner
43         (AliGenerator *Generator, char* Name, Float_t RateExp );
44     
45     AliStack*     GetStack(Int_t n) const;
46     AliStack*     GetActiveStack() const{return fActiveStack;}
47
48 // ANDREAS MORSCH ------------------------------------- (
49     AliCollisionGeometry* GetCollisionGeometry(Int_t n) const;
50 // ANDREAS MORSCH ------------------------------------- )
51  
52     AliGenerator* GetCurrentGenerator() const;
53     virtual void  SetActiveEventNumber(Int_t actev);
54     Int_t         GetActiveEventNumber() const {return fActiveEvent;}
55     virtual Int_t GetNumberOfEvents() const {return gAlice->GetEventsPerRun() + fNBgEvents;}
56     void          SetNBgEvents(Int_t nbg=0){fNBgEvents = nbg;}
57
58     static TMCProcess IntToMCProcess(Int_t no);
59
60  protected:
61     Int_t fNAfterBurners;       // Number of afterburners  
62     TList  *fAfterBurnerEntries;// List of afterburners
63     Bool_t fGenerationDone;     // flag if generation is already done 
64                                 //   during first call of Generate method
65                                 //   if true just return event to gAlice
66                                 //   
67     TObjArray *fInternalStacks; //! List of internal stacks
68
69 // ANDREAS MORSCH ------------------------------------- (
70     AliCollisionGeometry** fCollisionGeometries; //! List of Collision Geometries
71 // ANDREAS MORSCH ------------------------------------- )
72     
73     Int_t fCurrentEvent;        //  Number of current event/stack
74     
75
76     AliStack* fActiveStack;   //! pointer to the current stack
77     Int_t fActiveEvent;       //HBT Processor needs more then one event to do correlations
78                               //Due to complications in fortran, it first calls C routine
79                               //that sets the active event to be read. All alihbtp_gettrack
80                               //are addressed to this event
81     
82     AliGenerator *fCurrentGenerator;      // Current event generator 
83     Int_t fNBgEvents;                     //Nuber of backgrouns events 
84                                           //(events that are generated only temporarly)
85                                           //needed by some afterburners that works better with higher statistics 
86                                           //this generates such a artificial one
87  private:
88     void Copy(TObject &arun) const;    
89
90     ClassDef(AliGenCocktailAfterBurner,2) // Particle cocktail generator a la SHAKER
91                                           //background events added
92 };
93
94 inline  AliGenerator*  
95     AliGenCocktailAfterBurner::GetCurrentGenerator() const
96 {
97   return fCurrentGenerator;
98 }
99
100
101 #endif
102
103
104
105
106