Line data Source code
1 : #ifndef AliGenMUONLMR_h
2 : #define AliGenMUONLMR_h
3 :
4 : #include <TH1F.h>
5 : #include <TH1D.h>
6 : #include <TF1.h>
7 : #include <TParticle.h>
8 : #include <TLorentzVector.h>
9 : #include "AliGenMC.h"
10 :
11 : class AliGenMUONLMR : public AliGenMC {
12 : public:
13 : enum parttype_t {kPionLMR, kKaonLMR, kEtaLMR, kRhoLMR, kOmegaLMR, kPhiLMR, kEtaPrimeLMR};
14 : enum CMSEnergies {kCMS2760GeV, kCMS7000GeV, kCMS8000GeV, kCMS5020GeVpPb, kCMS5020GeVPbp, kNCMSEnergies};
15 : enum process_t {kEtaDalitz, kOmegaDalitz, kEtaPrimeDalitz, kEta2Body, kRho2Body, kOmega2Body, kPhi2Body, kPionSemiMuonic, kKaonSemiMuonic, kNProcess};
16 : enum thetaOpt_t {kFlat, kPolarized};
17 : AliGenMUONLMR();
18 : AliGenMUONLMR(AliGenMUONLMR &gen);
19 : AliGenMUONLMR &operator=(const AliGenMUONLMR &gen);
20 : ~AliGenMUONLMR();
21 : static Double_t PtDistr(Double_t *x, Double_t *par);
22 : static Double_t YDistr(Double_t *x, Double_t *par);
23 0 : virtual void SetPtParams(Int_t iproc, Double_t p1, Double_t p2, Double_t p3) {fPt[iproc]->SetParameters(p1,p2,p3);}
24 0 : virtual void SetYParams(Int_t iproc, Double_t p1, Double_t p2, Double_t p3, Double_t ycm=0) {fY[iproc]->SetParameters(p1,p2,p3,ycm);}
25 : virtual void Decay2Body(TParticle *mother);
26 : virtual void DalitzDecay(TParticle *mother);
27 : virtual void DecayPiK(TParticle *mother, Bool_t &hadDecayed);
28 : virtual Double_t FormFactor(Double_t q2, Int_t decay);
29 : virtual void Generate();
30 0 : virtual TParticle* GetMuon(Int_t i) {return fMu[i];}
31 0 : virtual void SetNMuMin(Int_t nmin) {fNMuMin = nmin;}
32 0 : virtual void GenerateSingleProcess(Int_t whichproc) { fGenSingleProc = whichproc;}
33 0 : virtual void SetScaleMultiplicity(Int_t ipart, Double_t scale) { fScaleMult[ipart] = scale; }
34 : static Double_t RhoLineShapeNew(Double_t *, Double_t *);
35 : virtual void FinishRun();
36 0 : virtual TF1* GetRapidity(Int_t iproc) { return fY[iproc]; }
37 0 : virtual TF1* GetPt(Int_t iproc) { return fPt[iproc]; }
38 : void SetCMSEnergy(CMSEnergies energy);
39 0 : virtual void SetCMSRapidity(Double_t ycm) { fYCM = ycm; }
40 0 : virtual void SetThetaOption(process_t proc, thetaOpt_t opt) { fThetaOpt[proc] = opt; }
41 0 : virtual thetaOpt_t GetThetaOption(process_t proc) { return fThetaOpt[proc]; }
42 : private:
43 : static const Int_t fgkNpart = 7; // number of particles to be generated
44 : Int_t fNMuMin; // min. number of muons to accept the event for writing
45 : CMSEnergies fCMSEnergy; // CMS Energy
46 : Int_t fGenSingleProc; // flag to generate a single process (1) or the whole cocktail (0)
47 : Double_t fYCM; // center of mass rapidity (def. 0)
48 : Int_t fPDG[7]; // pdg code of particle to be generated
49 : Double_t fScaleMult[7]; // multiplicity scaling factor (w.r.t. pythia@7TeV)
50 : TF1 *fPt[7]; // pt distribution
51 : TF1 *fY[7]; // rapidity distribution
52 : TF1 *fMult[7]; // multiplicity distribution
53 : TF1 *fDecay[2]; // fDecay[0] = pion, fDecay[1] = kaon
54 : TH1F *fDalitz[3]; // Dalitz decay form factor for eta, omega, etaprime
55 : TF1 *fCosTheta; // function for polarized theta distributions
56 : TF1 *fRhoLineShape; // rho line shape
57 : TParticle* fParticle[7]; // TPaticle object for the particles to be generated
58 : TParticle* fMu[2]; // fMu[0] = mu+ fMu[1] = mu-
59 : TH1D *fHMultMu; // muon multiplicity
60 : TH1D *fHNProc; // number of events generated per process
61 : thetaOpt_t fThetaOpt[kNProcess]; // option for the cos(theta) distribution of each process
62 6 : ClassDef(AliGenMUONLMR, 1) // low mass dimuons parametric generator
63 : };
64 :
65 : #endif
66 :
|