]>
Commit | Line | Data |
---|---|---|
ba15fdfb | 1 | #ifndef ALIDIELECTRONSIGNALMC_H |
2 | #define ALIDIELECTRONSIGNALMC_H | |
3 | ||
4 | #include <TNamed.h> | |
5 | ||
6 | ||
5720c765 | 7 | /* |
8 | Ionut Cristian Arsene, iarsene@cern.ch | |
9 | */ | |
10 | ||
ba15fdfb | 11 | /* |
12 | Monte Carlo signal definition: | |
13 | Leg #1 <-- Mother #1 <-- Grandmother #1 | |
14 | | | |
15 | Leg #2 <-- Mother #2 <-- Grandmother #2 | |
5720c765 | 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 | |
c72d368f | 34 | 902 - all open charm open beauty mesons+baryons 400-439, 500-549, 4000-4399, 5000-5499 |
5720c765 | 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: | |
ba15fdfb | 49 | 1. Primary - particle originating in the physics event |
5720c765 | 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. | |
ba15fdfb | 61 | */ |
62 | ||
63 | ||
64 | //__________________________________________________________________ | |
65 | class AliDielectronSignalMC : public TNamed { | |
66 | ||
67 | public: | |
68 | enum EBranchRelation {kUndefined=0, kSame, kDifferent}; | |
1ae2dca4 | 69 | enum ESource {kDontCare=0, kPrimary, kFinalState, kDirect, kSecondary, kNoCocktail}; |
ef37a5a8 | 70 | enum EJpsiRadiativ {kAll=0, kIsRadiative, kIsNotRadiative}; |
ba15fdfb | 71 | |
72 | AliDielectronSignalMC(); | |
73 | AliDielectronSignalMC(const Char_t* name, const Char_t* title); | |
74 | virtual ~AliDielectronSignalMC(); | |
75 | ||
5720c765 | 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;} | |
ba15fdfb | 87 | void SetCheckBothChargesGrandMothers(Bool_t flag1, Bool_t flag2) {fCheckBothChargesGrandMother1 = flag1; fCheckBothChargesGrandMother2 = flag2;} |
5720c765 | 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;} | |
ba15fdfb | 105 | |
ef37a5a8 | 106 | void SetJpsiRadiative(EJpsiRadiativ rad) { fJpsiRadiative=rad; } |
107 | EJpsiRadiativ GetJpsiRadiative() const { return fJpsiRadiative; } | |
ba15fdfb | 108 | private: |
5720c765 | 109 | // PDG codes for legs, mothers and grand-mothers |
ba15fdfb | 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 | |
5720c765 | 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 | |
ba15fdfb | 126 | |
5720c765 | 127 | // Particle sources |
ba15fdfb | 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 | ||
5720c765 | 135 | // Flaggs whether to check both charges of a given PDG code |
ba15fdfb | 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) | |
ef37a5a8 | 144 | |
145 | EJpsiRadiativ fJpsiRadiative; // check for J/psi radiative decay | |
ba15fdfb | 146 | |
147 | Bool_t fFillPureMCStep; // check and fill the pure MC step | |
148 | ||
ef37a5a8 | 149 | ClassDef(AliDielectronSignalMC,2); |
ba15fdfb | 150 | }; |
151 | ||
152 | #endif |