8fb7ba899c6dec6411f2673539c7382c7ded0f47
[u/mrichter/AliRoot.git] / PWG3 / muon / AliMCMuonPair.cxx
1 #include "AliAODMuonPair.h"
2 #include "AliMCMuonTrack.h"
3 #include "AliMCMuonPair.h"
4
5 ClassImp(AliAODMuonPair)
6
7 //-----------------------------------------------------------------------------
8 AliMCMuonPair::AliMCMuonPair() :
9 AliAODMuonPair(),
10 fIsFull(kFALSE),
11 fPGen(),
12 fSource(-1)
13 {
14   //
15   // default constructor
16   //
17   for (Int_t i=0; i<2; i++) fTrk[i] = 0;
18
19 }
20
21 //-----------------------------------------------------------------------------
22 AliMCMuonPair::AliMCMuonPair(AliMCMuonTrack *trk0, AliMCMuonTrack *trk1, Bool_t full) :
23 AliAODMuonPair(),
24 fIsFull(full),
25 fPGen(),
26 fSource(-1)
27 {
28   //
29   // default constructor
30   //
31   fTrk[0] = trk0;
32   fTrk[1] = trk1;
33   fPGen = trk0->GetPGen() + trk1->GetPGen();
34   AliAODMuonPair::FillPairInfo();
35   if (fIsFull) this->FindDimuonSourceFull();
36   else this->FindDimuonSourceFast();
37 }
38
39 //-----------------------------------------------------------------------------
40 AliMCMuonPair::~AliMCMuonPair()
41 {
42   //
43   // destructor
44   //
45 }
46
47 //-----------------------------------------------------------------------------
48 void AliMCMuonPair::FindDimuonSourceFast()
49 {
50   AliMCMuonTrack *trk0 = (AliMCMuonTrack*)fTrk[0].GetObject();
51   Int_t src0 = trk0->GetSource();
52   if (src0<0 || src0==4 || src0==3) {
53     fSource=5; return;
54   }
55
56   AliMCMuonTrack *trk1 = (AliMCMuonTrack*)fTrk[1].GetObject();
57   Int_t src1 = trk1->GetSource();
58   if (src1<0 || src1==4 || src1==3) {
59     fSource=5; return;
60   }
61
62   // Drell-Yan is expected very small at LHC, we ingore it
63   Int_t np0 = trk0->GetNParents() - 1;
64   if (np0<0) {
65     fSource=5; return;
66   }
67
68   Int_t np1 = trk1->GetNParents() - 1;
69   if (np1<0) {
70     fSource=5; return;
71   }
72
73   if (trk0->IsMotherAResonance(np0) && trk1->IsMotherAResonance(np1) &&
74       (trk0->GetParentIndex(np0))==(trk1->GetParentIndex(np1))) {
75     fSource=4; return;
76   }
77
78   if (src0==0 && src1==0) {
79     if ((trk0->GetParentIndex(0))==(trk1->GetParentIndex(0)))
80       fSource = 1;
81     else
82       fSource = 0;
83     return;
84   }
85
86   if (src0==1 && src1==1) {
87     if ((trk0->GetParentIndex(0))==(trk1->GetParentIndex(0)))
88       fSource = 3;
89     else
90       fSource = 2;
91     return;
92   }
93
94   fSource = 5;
95   return;
96 }