ROOT logo
#ifndef AliGenAfterBurnerFlow_h
#define AliGenAfterBurnerFlow_h

////////////////////////////////////////////////////////////////////////////////////////////////////
// 
// AliGenAfterBurnerFlow is a After Burner event generator applying flow.
// The generator changes Phi coordinate of the particle momentum.
// Flow (directed and elliptic) can be defined on particle type level
//
////////////////////////////////////////////////////////////////////////////////////////////////////


#include "AliGenerator.h"
#include "AliStack.h"

class TObjArray;

class AliGenAfterBurnerFlow : public AliGenerator {

 public:

  AliGenAfterBurnerFlow();
  AliGenAfterBurnerFlow(Float_t reactionPlane);
  ~AliGenAfterBurnerFlow();

  void      AarbitraryReactionPlaneAngle() {fHow = 3;}
  void      SetDirectedSimple(Int_t pdg, Float_t v1);
  void      SetDirectedParam(Int_t pdg, Float_t v11, Float_t v12 = 0, Float_t v13 = 1, Float_t v14 = 0);
  void      SetEllipticSimple(Int_t pdg, Float_t v2);
  void      SetEllipticParamPion(Int_t pdg, Float_t v21, Float_t pTmax, Float_t v22=0.);
  void      SetEllipticParamOld(Int_t pdg, Float_t v21, Float_t v22, Float_t v23);
  void      SetEllipticParam(Int_t pdg, Float_t v00, Float_t v10, Float_t v11, Float_t v22);
  void      SetNpParams(Int_t order=-1, Float_t p0=-1, Float_t p1=-1, Float_t p2=-1, Float_t p3=-1);
  void      SetNpDefault() { SetNpParams(2,1,-5e-8,-5e-6); } 
  Bool_t    IsPrimary(Int_t pdg) const;
  void      Init();
  void      Generate(); 
  void      NeglectFlow(Int_t pdg) {fIsPrim[pdg]=kFALSE;}

 private:
  AliGenAfterBurnerFlow(const AliGenAfterBurnerFlow&);
  AliGenAfterBurnerFlow& operator=(const AliGenAfterBurnerFlow&);

  static const Int_t fgkN = 300;   // Size of array fParams 
  static const Int_t fgkPDG= 5226; // Size of PDG code array 

  Bool_t    fIsPrim[fgkPDG];   // array of primaries
  Float_t   fReactionPlane;    // Reaction plane angle (in rad)
  Int_t     fHow;              // Choose reaction plane angle
  Float_t   fParams[fgkN][7];  // parameters (0: pdg, 1: order, 2: type,  3-6: actual parameters) 
  Float_t   fNpParams[5];      // parameters (0: order, 1-4: actual parameters) 
  Int_t     fCounter;          // counter
  AliStack *fStack;            //!

  Float_t   GetCoefficient(Int_t pdg, Int_t n, Float_t Pt, Float_t Y) const;
  Float_t   GetNpNorm(Int_t npart) const;
  void      InitPrimaries();
  void      Rotate(Int_t i, Double_t phi, Bool_t IsPrim=kTRUE);
  void      SetFlowParameters(Int_t pdg, Int_t order, Int_t type, Float_t v1, Float_t v2, Float_t v3, Float_t v4);

  ClassDef(AliGenAfterBurnerFlow,4)
};
#endif
 AliGenAfterBurnerFlow.h:1
 AliGenAfterBurnerFlow.h:2
 AliGenAfterBurnerFlow.h:3
 AliGenAfterBurnerFlow.h:4
 AliGenAfterBurnerFlow.h:5
 AliGenAfterBurnerFlow.h:6
 AliGenAfterBurnerFlow.h:7
 AliGenAfterBurnerFlow.h:8
 AliGenAfterBurnerFlow.h:9
 AliGenAfterBurnerFlow.h:10
 AliGenAfterBurnerFlow.h:11
 AliGenAfterBurnerFlow.h:12
 AliGenAfterBurnerFlow.h:13
 AliGenAfterBurnerFlow.h:14
 AliGenAfterBurnerFlow.h:15
 AliGenAfterBurnerFlow.h:16
 AliGenAfterBurnerFlow.h:17
 AliGenAfterBurnerFlow.h:18
 AliGenAfterBurnerFlow.h:19
 AliGenAfterBurnerFlow.h:20
 AliGenAfterBurnerFlow.h:21
 AliGenAfterBurnerFlow.h:22
 AliGenAfterBurnerFlow.h:23
 AliGenAfterBurnerFlow.h:24
 AliGenAfterBurnerFlow.h:25
 AliGenAfterBurnerFlow.h:26
 AliGenAfterBurnerFlow.h:27
 AliGenAfterBurnerFlow.h:28
 AliGenAfterBurnerFlow.h:29
 AliGenAfterBurnerFlow.h:30
 AliGenAfterBurnerFlow.h:31
 AliGenAfterBurnerFlow.h:32
 AliGenAfterBurnerFlow.h:33
 AliGenAfterBurnerFlow.h:34
 AliGenAfterBurnerFlow.h:35
 AliGenAfterBurnerFlow.h:36
 AliGenAfterBurnerFlow.h:37
 AliGenAfterBurnerFlow.h:38
 AliGenAfterBurnerFlow.h:39
 AliGenAfterBurnerFlow.h:40
 AliGenAfterBurnerFlow.h:41
 AliGenAfterBurnerFlow.h:42
 AliGenAfterBurnerFlow.h:43
 AliGenAfterBurnerFlow.h:44
 AliGenAfterBurnerFlow.h:45
 AliGenAfterBurnerFlow.h:46
 AliGenAfterBurnerFlow.h:47
 AliGenAfterBurnerFlow.h:48
 AliGenAfterBurnerFlow.h:49
 AliGenAfterBurnerFlow.h:50
 AliGenAfterBurnerFlow.h:51
 AliGenAfterBurnerFlow.h:52
 AliGenAfterBurnerFlow.h:53
 AliGenAfterBurnerFlow.h:54
 AliGenAfterBurnerFlow.h:55
 AliGenAfterBurnerFlow.h:56
 AliGenAfterBurnerFlow.h:57
 AliGenAfterBurnerFlow.h:58
 AliGenAfterBurnerFlow.h:59
 AliGenAfterBurnerFlow.h:60
 AliGenAfterBurnerFlow.h:61
 AliGenAfterBurnerFlow.h:62
 AliGenAfterBurnerFlow.h:63