ROOT logo
#ifndef ALIGENPARAM_H
#define ALIGENPARAM_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//
// Class to generate particles from using parametrized pT and y distributions.
// Distributions are obtained from pointer to object of type AliGenLib.
// (For example AliGenMUONlib)
//
// andreas.morsch@cern.ch
//

#include "AliGenMC.h"

class AliPythia;
class TParticle;
class AliGenLib;
class TF1;

typedef enum { kAnalog, kNonAnalog} Weighting_t;
//-------------------------------------------------------------
class AliGenParam : public AliGenMC
{
public:
    AliGenParam();
    AliGenParam(Int_t npart, const AliGenLib * Library, Int_t param,   const char*  tname = 0);
    AliGenParam(Int_t npart, Int_t param, const char* tname = 0, const char*  name  = 0);
    AliGenParam(Int_t npart, Int_t param,
		Double_t (*PtPara)(const Double_t*, const Double_t*),
		Double_t (*YPara )(const Double_t*, const Double_t*),
	      Double_t (*V2Para)(const Double_t*, const Double_t*),
		Int_t    (*IpPara)(TRandom*)           );
     
    virtual ~AliGenParam();
    virtual void GenerateN(Int_t ntimes);
    virtual void Generate();
    virtual void Init();
    // select particle type
    virtual void SetParam(Int_t param) {fParam = param;}
    //Setting the flag for Background transportation while using SetForceDecay()
    void SetSelectAll(Bool_t selectall) {fSelectAll = selectall;}
    // force decay type
    virtual void SetWeighting(Weighting_t flag = kAnalog) {fAnalog = flag;}	
    virtual void SetDeltaPt(Float_t delta=0.01) {fDeltaPt = delta;}
    virtual void SetDecayer(AliDecayer* decayer) {fDecayer = decayer;}
    virtual void SetForceGammaConversion(Bool_t force=kTRUE) {fForceConv = force;}
    virtual void SetKeepParent(Bool_t keep=kTRUE){fKeepParent= keep;} //Store parent even if it does not have childs within cuts
    virtual void SetKeepIfOneChildSelected(Bool_t keep=kTRUE){fKeepIfOneChildSelected = keep;} //Accept parent and child even if other children are not within cut.
    
    virtual void Draw(const char * opt);
    TF1 *  GetPt() { return fPtPara;}
    TF1 *  GetY() {return fYPara;}
    Float_t GetRelativeArea(Float_t ptMin, Float_t ptMax, Float_t yMin, Float_t yMax, Float_t phiMin, Float_t phiMax);

    static TVector3 OrthogonalVector(TVector3 &inVec);
    static void RotateVector(Double_t *pin, Double_t *pout, Double_t costheta, Double_t sintheta,
			   Double_t cosphi, Double_t sinphi);
    static double ScreenFunction1(double d);
    static double ScreenFunction2(double d);
    double RandomEnergyFraction(double Z, double E);
    double RandomPolarAngle();
    double RandomMass(Double_t mh);
    Int_t VirtualGammaPairProduction(TClonesArray *particles, Int_t nPart);
    Int_t ForceGammaConversion(TClonesArray *particles, Int_t nPart);
  
protected:
    Double_t (*fPtParaFunc)(const Double_t*, const Double_t*); //! Pointer to Pt parametrisation function
    Double_t (*fYParaFunc )(const Double_t*, const Double_t*); //! Pointer to Y parametrisation function
    Int_t    (*fIpParaFunc )(TRandom*);    //! Pointer to particle type parametrisation function
  Double_t (*fV2ParaFunc )(const Double_t*, const Double_t*);//! Pointer to V2 parametrisation function
    TF1* fPtPara;              // Transverse momentum parameterisation
    TF1* fYPara;               // Rapidity parameterisation
  TF1*        fV2Para;       // v2 parametrization
  TF1*        fdNdPhi;       // Phi distribution depending on v2
    Int_t       fParam;        // Parameterisation type 
    Float_t     fdNdy0;        // central multiplicity per event
    Float_t     fYWgt;         // Y-weight
    Float_t     fPtWgt;        // Pt-weight
    Float_t     fBias;         // Biasing factor
    Int_t       fTrials;       // Number of trials
    Float_t     fDeltaPt;      // pT sampling in steps of fDeltaPt
    Bool_t      fSelectAll;    // Flag for transportation of Background while using SetForceDecay()
    AliDecayer  *fDecayer;     // ! Pointer to pythia object for decays
    Bool_t      fForceConv;    //
    Bool_t      fKeepParent;   //  Store parent even if it does not have childs within cuts
    Bool_t      fKeepIfOneChildSelected; //Accept parent and child even if other children are not within cut.

private:
    AliGenParam(const AliGenParam &Param);
    AliGenParam & operator=(const AliGenParam & rhs);

    ClassDef(AliGenParam, 2) // Generator using parameterised pt- and y-distribution
};
#endif










 AliGenParam.h:1
 AliGenParam.h:2
 AliGenParam.h:3
 AliGenParam.h:4
 AliGenParam.h:5
 AliGenParam.h:6
 AliGenParam.h:7
 AliGenParam.h:8
 AliGenParam.h:9
 AliGenParam.h:10
 AliGenParam.h:11
 AliGenParam.h:12
 AliGenParam.h:13
 AliGenParam.h:14
 AliGenParam.h:15
 AliGenParam.h:16
 AliGenParam.h:17
 AliGenParam.h:18
 AliGenParam.h:19
 AliGenParam.h:20
 AliGenParam.h:21
 AliGenParam.h:22
 AliGenParam.h:23
 AliGenParam.h:24
 AliGenParam.h:25
 AliGenParam.h:26
 AliGenParam.h:27
 AliGenParam.h:28
 AliGenParam.h:29
 AliGenParam.h:30
 AliGenParam.h:31
 AliGenParam.h:32
 AliGenParam.h:33
 AliGenParam.h:34
 AliGenParam.h:35
 AliGenParam.h:36
 AliGenParam.h:37
 AliGenParam.h:38
 AliGenParam.h:39
 AliGenParam.h:40
 AliGenParam.h:41
 AliGenParam.h:42
 AliGenParam.h:43
 AliGenParam.h:44
 AliGenParam.h:45
 AliGenParam.h:46
 AliGenParam.h:47
 AliGenParam.h:48
 AliGenParam.h:49
 AliGenParam.h:50
 AliGenParam.h:51
 AliGenParam.h:52
 AliGenParam.h:53
 AliGenParam.h:54
 AliGenParam.h:55
 AliGenParam.h:56
 AliGenParam.h:57
 AliGenParam.h:58
 AliGenParam.h:59
 AliGenParam.h:60
 AliGenParam.h:61
 AliGenParam.h:62
 AliGenParam.h:63
 AliGenParam.h:64
 AliGenParam.h:65
 AliGenParam.h:66
 AliGenParam.h:67
 AliGenParam.h:68
 AliGenParam.h:69
 AliGenParam.h:70
 AliGenParam.h:71
 AliGenParam.h:72
 AliGenParam.h:73
 AliGenParam.h:74
 AliGenParam.h:75
 AliGenParam.h:76
 AliGenParam.h:77
 AliGenParam.h:78
 AliGenParam.h:79
 AliGenParam.h:80
 AliGenParam.h:81
 AliGenParam.h:82
 AliGenParam.h:83
 AliGenParam.h:84
 AliGenParam.h:85
 AliGenParam.h:86
 AliGenParam.h:87
 AliGenParam.h:88
 AliGenParam.h:89
 AliGenParam.h:90
 AliGenParam.h:91
 AliGenParam.h:92
 AliGenParam.h:93
 AliGenParam.h:94
 AliGenParam.h:95
 AliGenParam.h:96
 AliGenParam.h:97
 AliGenParam.h:98
 AliGenParam.h:99
 AliGenParam.h:100
 AliGenParam.h:101
 AliGenParam.h:102
 AliGenParam.h:103
 AliGenParam.h:104
 AliGenParam.h:105
 AliGenParam.h:106
 AliGenParam.h:107