]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/AliDielectronSignalMC.h
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronSignalMC.h
1 #ifndef ALIDIELECTRONSIGNALMC_H
2 #define ALIDIELECTRONSIGNALMC_H
3
4 #include <TNamed.h>
5
6
7 /*
8    Ionut Cristian Arsene, iarsene@cern.ch
9  */
10
11 /*
12    Monte Carlo signal definition:
13       Leg #1  <-- Mother #1  <--  Grandmother #1
14                       |
15       Leg #2  <-- Mother #2  <--  Grandmother #2
16   
17    For every leg, mother or grand-mother, a PDG code and a source can be specified.
18
19    1.) For the PDG codes, the PYTHIA standard is used. 
20    A few non-existent PYTHIA codes are used to select more than one PYTHIA code. All these are described below
21    and implemented in AliDielectronMC::ComparePDG() function:
22       0 - default, accepts all PYTHIA codes
23     100 - light unflavoured mesons in the code range 100-199
24     200 -        --"--                               200-299
25     300 - strange mesons in the code range           300-399
26     400 - charmed mesons in the code range           400-499
27     401 - open charm mesons (all D and D* mesons)    400-439
28     402 - open charm mesons and baryons together     400-439, 4000-4399
29     403 - all charm hadrons (mesons and baryons)     400-499, 4000-4999
30     500 - beauty mesons in the code range            500-599
31     501 - open beauty mesons                         500-549
32     502 - open beauty mesons and baryons             500-549, 5000-5499
33     503 - all beauty hadrons                         500-599, 5000-5999
34     902 - all open charm open beauty mesons+baryons  400-439, 500-549, 4000-4399, 5000-5499
35    1000 - light unflavoured baryons in the code range 1000-1999
36    2000 -        --"--                                2000-2999
37    3000 - strange baryons in the code range           3000-3999
38    4000 - charmed baryons in the code range           4000-4999
39    4001 - open charm baryons                          4000-4399
40    5000 - beauty baryons in the code range            5000-5999
41    5001 - open beauty baryons                         5000-5499
42
43    2.) If the exclusion flags are turned ON then the PDG codes required and the conventional codes described above
44        are used to exclude the selected particles. 
45
46    3.) If the selection of both charges is switched ON then the PDG codes act on both particles and anti-particles.
47
48    4.) Particles sources implemented:
49      1. Primary   - particle originating in the physics event
50      2. FinalState- stable(final state) particles which reach the detector -> according to AliStack::IsPhysicalPrimary() 
51      3. Direct    - primary particle which has no mother (e.g. J/psi's added to pythia MC events via generator cocktails,
52                     particles generated in a sudden freeze-out in thermal models, initial state particles)
53      4. Secondary - particle created during the GEANT propagation due to interaction of final state primaries with the material
54
55    5.) The 2 legs can originate from the same or different mother particles. This can be specified via the SetMotherRelation()
56        method call.
57
58    6.) The filling of the pure MC step can be switched on using SetFillPureMCStep() method call. This should be used
59        with care since at the pure MC information level there is no cut applied and for abundant particles the combinatorics
60        can be very high.
61 */
62
63
64 //__________________________________________________________________
65 class AliDielectronSignalMC : public TNamed {
66   
67  public:
68   enum EBranchRelation {kUndefined=0, kSame, kDifferent};
69   enum ESource {kDontCare=0, kPrimary, kFinalState, kDirect, kSecondary, kNoCocktail, kSecondaryFromWeakDecay, kSecondaryFromMaterial};
70   enum EJpsiRadiativ {kAll=0, kIsRadiative, kIsNotRadiative};
71   
72   AliDielectronSignalMC();
73   AliDielectronSignalMC(const Char_t* name, const Char_t* title);
74   virtual ~AliDielectronSignalMC();
75   
76   void SetLegPDGs(Int_t pdg1, Int_t pdg2, Bool_t exclude1=kFALSE, Bool_t exclude2=kFALSE)  
77     {fLeg1 = pdg1; fLeg2 = pdg2; fLeg1Exclude=exclude1; fLeg2Exclude=exclude2;}
78   void SetMotherPDGs(Int_t pdg1, Int_t pdg2, Bool_t exclude1=kFALSE, Bool_t exclude2=kFALSE)              
79     {fMother1 = pdg1; fMother2 = pdg2; fMother1Exclude=exclude1; fMother2Exclude=exclude2;}
80   void SetGrandMotherPDGs(Int_t pdg1, Int_t pdg2, Bool_t exclude1=kFALSE, Bool_t exclude2=kFALSE)         
81     {fGrandMother1 = pdg1; fGrandMother2 = pdg2; fGrandMother1Exclude=exclude1; fGrandMother2Exclude=exclude2;}
82   void SetLegSources(ESource s1, ESource s2)                       {fLeg1Source = s1;                      fLeg2Source = s2;}
83   void SetMotherSources(ESource s1, ESource s2)                    {fMother1Source = s1;                   fMother2Source = s2;}
84   void SetGrandMotherSources(ESource s1, ESource s2)               {fGrandMother1Source = s1;              fGrandMother2Source = s2;}
85   void SetCheckBothChargesLegs(Bool_t flag1, Bool_t flag2)         {fCheckBothChargesLeg1 = flag1;         fCheckBothChargesLeg2 = flag2;}
86   void SetCheckBothChargesMothers(Bool_t flag1, Bool_t flag2)      {fCheckBothChargesMother1 = flag1;      fCheckBothChargesMother2 = flag2;}
87   void SetCheckBothChargesGrandMothers(Bool_t flag1, Bool_t flag2) {fCheckBothChargesGrandMother1 = flag1; fCheckBothChargesGrandMother2 = flag2;}
88   void SetMothersRelation(EBranchRelation relation)                {fMothersRelation = relation;}
89   void SetFillPureMCStep(Bool_t fill=kTRUE)                        {fFillPureMCStep = fill;}
90
91   Int_t GetLegPDG(Int_t branch)                        const {return (branch==1 ? fLeg1 : fLeg2);}
92   Int_t GetMotherPDG(Int_t branch)                     const {return (branch==1 ? fMother1 : fMother2);}
93   Int_t GetGrandMotherPDG(Int_t branch)                const {return (branch==1 ? fGrandMother1 : fGrandMother2);}
94   Bool_t GetLegPDGexclude(Int_t branch)                const {return (branch==1 ? fLeg1Exclude : fLeg2Exclude);}
95   Bool_t GetMotherPDGexclude(Int_t branch)             const {return (branch==1 ? fMother1Exclude : fMother2Exclude);}
96   Bool_t GetGrandMotherPDGexclude(Int_t branch)        const {return (branch==1 ? fGrandMother1Exclude : fGrandMother2Exclude);}
97   ESource GetLegSource(Int_t branch)                   const {return (branch==1 ? fLeg1Source : fLeg2Source);}
98   ESource GetMotherSource(Int_t branch)                const {return (branch==1 ? fMother1Source : fMother2Source);}
99   ESource GetGrandMotherSource(Int_t branch)           const {return (branch==1 ? fGrandMother1Source : fGrandMother2Source);}
100   Bool_t GetCheckBothChargesLegs(Int_t branch)         const {return (branch==1 ? fCheckBothChargesLeg1 : fCheckBothChargesLeg2);}
101   Bool_t GetCheckBothChargesMothers(Int_t branch)      const {return (branch==1 ? fCheckBothChargesMother1 : fCheckBothChargesMother2);}
102   Bool_t GetCheckBothChargesGrandMothers(Int_t branch) const {return (branch==1 ? fCheckBothChargesGrandMother1 : fCheckBothChargesGrandMother2);}
103   EBranchRelation GetMothersRelation()                 const {return fMothersRelation;}
104   Bool_t GetFillPureMCStep()                           const {return fFillPureMCStep;}
105
106   void SetJpsiRadiative(EJpsiRadiativ rad) { fJpsiRadiative=rad;    }
107   EJpsiRadiativ GetJpsiRadiative() const   { return fJpsiRadiative; }
108  private:
109   // PDG codes for legs, mothers and grand-mothers
110   Int_t fLeg1;                        // leg 1 PDG
111   Int_t fLeg2;                        // leg 2 PDG
112   Int_t fMother1;                     // mother 1 PDG
113   Int_t fMother2;                     // mother 2 PDG
114   Int_t fGrandMother1;                // grandmother 1 PDG
115   Int_t fGrandMother2;                // grandmother 2 PDG
116
117   // Toggle on/off the use of the PDG codes as inclusion or exclusion
118   // Example: if fLeg1=211 and fLeg1Exclude=kTRUE than all codes will be accepted for leg 1 with
119   //          the exception of 211 (pions)
120   Bool_t fLeg1Exclude;                // leg 1 
121   Bool_t fLeg2Exclude;                // leg 2 
122   Bool_t fMother1Exclude;             // mother 1 
123   Bool_t fMother2Exclude;             // mother 2 
124   Bool_t fGrandMother1Exclude;        // grandmother 1 
125   Bool_t fGrandMother2Exclude;        // grandmother 2 
126     
127   // Particle sources
128   ESource fLeg1Source;                // leg 1 source
129   ESource fLeg2Source;                // leg 2 source
130   ESource fMother1Source;             // mother 1 source
131   ESource fMother2Source;             // mother 2 source
132   ESource fGrandMother1Source;        // grandmother 1 source
133   ESource fGrandMother2Source;        // grandmother 2 source
134
135   // Flaggs whether to check both charges of a given PDG code
136   Bool_t fCheckBothChargesLeg1;         // check both charges of the legs pdg
137   Bool_t fCheckBothChargesLeg2;         //                leg2
138   Bool_t fCheckBothChargesMother1;      //                mother 1
139   Bool_t fCheckBothChargesMother2;      //                mother 2
140   Bool_t fCheckBothChargesGrandMother1; //              grand mother 1
141   Bool_t fCheckBothChargesGrandMother2; //              grand mother 2
142   
143   EBranchRelation fMothersRelation;   // mother 1&2 relation (same, different or whatever)
144
145   EJpsiRadiativ fJpsiRadiative;      // check for J/psi radiative decay
146   
147   Bool_t fFillPureMCStep;             // check and fill the pure MC step
148   
149   ClassDef(AliDielectronSignalMC,2);
150 };
151
152 #endif