]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/AliDielectronSignalMC.h
Transition PWG3/dielectron --> PWGDQ/dielectron
[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    Monte Carlo signal definition:
9       Leg #1  <-- Mother #1  <--  Grandmother #1
10                       |
11       Leg #2  <-- Mother #2  <--  Grandmother #2
12    All particles can be classified as:
13      1. Primary   - particle originating in the physics event
14      2. Secondary - particle created during the GEANT propagation due to interaction of primaries with the material
15      3. Direct    - particle directly created in the collision (has no mother)
16      4. Secondary - particle which is the product of the decay or reinteraction of another particle
17    The 2 legs can originate from the same or different mother particles.
18 */
19
20
21 //__________________________________________________________________
22 class AliDielectronSignalMC : public TNamed {
23   
24  public:
25   enum EBranchRelation {kUndefined=0, kSame, kDifferent};
26   enum ESource {kDontCare=0, kPrimary, kSecondary, kDirect, kDecayProduct};
27   
28   AliDielectronSignalMC();
29   AliDielectronSignalMC(const Char_t* name, const Char_t* title);
30   virtual ~AliDielectronSignalMC();
31   
32   void SetLegPDGs(Int_t pdg1, Int_t pdg2)                 {fLeg1 = pdg1; fLeg2 = pdg2;}
33   void SetMotherPDGs(Int_t pdg1, Int_t pdg2)              {fMother1 = pdg1; fMother2 = pdg2;}
34   void SetGrandMotherPDGs(Int_t pdg1, Int_t pdg2)         {fGrandMother1 = pdg1; fGrandMother2 = pdg2;}
35   void SetLegSources(ESource s1, ESource s2)              {fLeg1Source = s1; fLeg2Source = s2;}
36   void SetMotherSources(ESource s1, ESource s2)           {fMother1Source = s1; fMother2Source = s2;}
37   void SetGrandMotherSources(ESource s1, ESource s2)      {fGrandMother1Source = s1; fGrandMother2Source = s2;}
38   void SetCheckBothChargesLegs(Bool_t flag1, Bool_t flag2) {fCheckBothChargesLeg1 = flag1; fCheckBothChargesLeg2 = flag2;}
39   void SetCheckBothChargesMothers(Bool_t flag1, Bool_t flag2) {fCheckBothChargesMother1 = flag1; fCheckBothChargesMother2 = flag2;}
40   void SetCheckBothChargesGrandMothers(Bool_t flag1, Bool_t flag2) {fCheckBothChargesGrandMother1 = flag1; fCheckBothChargesGrandMother2 = flag2;}
41   void SetMothersRelation(EBranchRelation relation)       {fMothersRelation = relation;}
42   void SetFillPureMCStep(Bool_t fill=kTRUE)               {fFillPureMCStep = fill;}
43
44   Int_t GetLegPDG(Int_t branch) const                     {return (branch==1 ? fLeg1 : fLeg2);}
45   Int_t GetMotherPDG(Int_t branch) const                  {return (branch==1 ? fMother1 : fMother2);}
46   Int_t GetGrandMotherPDG(Int_t branch) const             {return (branch==1 ? fGrandMother1 : fGrandMother2);}
47   ESource GetLegSource(Int_t branch) const                {return (branch==1 ? fLeg1Source : fLeg2Source);}
48   ESource GetMotherSource(Int_t branch) const             {return (branch==1 ? fMother1Source : fMother2Source);}
49   ESource GetGrandMotherSource(Int_t branch) const        {return (branch==1 ? fGrandMother1Source : fGrandMother2Source);}
50   Bool_t GetCheckBothChargesLegs(Int_t branch) const      {return (branch==1 ? fCheckBothChargesLeg1 : fCheckBothChargesLeg2);}
51   Bool_t GetCheckBothChargesMothers(Int_t branch) const   {return (branch==1 ? fCheckBothChargesMother1 : fCheckBothChargesMother2);}
52   Bool_t GetCheckBothChargesGrandMothers(Int_t branch) const   {return (branch==1 ? fCheckBothChargesGrandMother1 : fCheckBothChargesGrandMother2);}
53   EBranchRelation GetMothersRelation() const              {return fMothersRelation;}
54   Bool_t GetFillPureMCStep() const                        {return fFillPureMCStep;}
55
56  private:
57   Int_t fLeg1;                        // leg 1 PDG
58   Int_t fLeg2;                        // leg 2 PDG
59   Int_t fMother1;                     // mother 1 PDG
60   Int_t fMother2;                     // mother 2 PDG
61   Int_t fGrandMother1;                // grandmother 1 PDG
62   Int_t fGrandMother2;                // grandmother 2 PDG
63     
64   ESource fLeg1Source;                // leg 1 source
65   ESource fLeg2Source;                // leg 2 source
66   ESource fMother1Source;             // mother 1 source
67   ESource fMother2Source;             // mother 2 source
68   ESource fGrandMother1Source;        // grandmother 1 source
69   ESource fGrandMother2Source;        // grandmother 2 source
70
71   Bool_t fCheckBothChargesLeg1;         // check both charges of the legs pdg
72   Bool_t fCheckBothChargesLeg2;         //                leg2
73   Bool_t fCheckBothChargesMother1;      //                mother 1
74   Bool_t fCheckBothChargesMother2;      //                mother 2
75   Bool_t fCheckBothChargesGrandMother1; //              grand mother 1
76   Bool_t fCheckBothChargesGrandMother2; //              grand mother 2
77   
78   EBranchRelation fMothersRelation;   // mother 1&2 relation (same, different or whatever)
79   
80   Bool_t fFillPureMCStep;             // check and fill the pure MC step
81   
82   ClassDef(AliDielectronSignalMC,1);
83 };
84
85 #endif