]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGDQ/dielectron/AliDielectronTrackRotator.cxx
ALIROOT-5488 Remove build/include from the include directories
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronTrackRotator.cxx
1 /*************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  *
14 **************************************************************************/
15
16 ///////////////////////////////////////////////////////////////////////////
17 //                Dielectron TrackRotator                                  //
18 //                                                                       //
19 //                                                                       //
20 /*
21 Detailed description
22
23
24 */
25 //                                                                       //
26 ///////////////////////////////////////////////////////////////////////////
27
28 #include <TMath.h>
29 #include <TRandom3.h>
30 #include <TObjArray.h>
31
32 #include <AliVTrack.h>
33
34 #include "AliDielectronHelper.h"
35
36 #include "AliDielectronTrackRotator.h"
37
38 ClassImp(AliDielectronTrackRotator)
39
40 AliDielectronTrackRotator::AliDielectronTrackRotator() :
41   TNamed(),
42   fIterations(1),
43   fRotationType(kRotateBothRandom),
44   fStartAnglePhi(TMath::Pi()),
45   fConeAnglePhi(TMath::Pi()/6.),
46   fkArrTracksP(0x0),
47   fkArrTracksN(0x0),
48   fCurrentIteration(0),
49   fCurrentTackP(0),
50   fCurrentTackN(0),
51   fEvent(0x0),
52   fTrackP(),
53   fTrackN(),
54   fVTrackP(0x0),
55   fVTrackN(0x0),
56   fPdgLeg1(-11),
57   fPdgLeg2(11)
58 {
59   //
60   // Default Constructor
61   //
62   gRandom->SetSeed();
63 }
64
65 //______________________________________________
66 AliDielectronTrackRotator::AliDielectronTrackRotator(const char* name, const char* title) :
67   TNamed(name, title),
68   fIterations(1),
69   fRotationType(kRotateBothRandom),
70   fStartAnglePhi(TMath::Pi()),
71   fConeAnglePhi(TMath::Pi()/6.),
72   fkArrTracksP(0x0),
73   fkArrTracksN(0x0),
74   fCurrentIteration(0),
75   fCurrentTackP(0),
76   fCurrentTackN(0),
77   fEvent(0x0),
78   fTrackP(),
79   fTrackN(),
80   fVTrackP(0x0),
81   fVTrackN(0x0),
82   fPdgLeg1(-11),
83   fPdgLeg2(11)
84 {
85   //
86   // Named Constructor
87   //
88   gRandom->SetSeed();
89 }
90
91 //______________________________________________
92 AliDielectronTrackRotator::~AliDielectronTrackRotator()
93 {
94   //
95   // Default Destructor
96   //
97   
98 }
99
100 //______________________________________________
101 void AliDielectronTrackRotator::Reset()
102 {
103   //
104   // Reset the current iterators
105   //
106   fCurrentIteration=0;
107   fCurrentTackP=0;
108   fCurrentTackN=0;
109 }
110
111 //______________________________________________
112 Bool_t AliDielectronTrackRotator::NextCombination()
113 {
114   //
115   // Perform track rotation of the tracks in the track arrays as long as there are possible combinations
116   //
117   if (!fkArrTracksP || !fkArrTracksP) {
118     Reset();
119     return kFALSE;
120   }
121
122   Int_t nP=fkArrTracksP->GetEntriesFast();
123   Int_t nN=fkArrTracksN->GetEntriesFast();
124   if (nP==0||nN==0){
125     Reset();
126     return kFALSE;
127   }
128   
129   if (fCurrentIteration==fIterations){
130     fCurrentIteration=0;
131     ++fCurrentTackP;
132   }
133   
134   if (fCurrentTackP==nP){
135     ++fCurrentTackN;
136     fCurrentTackP=0;
137   }
138   
139   if (fCurrentTackN==nN){
140     Reset();
141     return kFALSE;
142   }
143   
144   if (!RotateTracks()){
145     Reset();
146     return kFALSE;
147   }
148   
149   ++fCurrentIteration;
150   return kTRUE;
151 }
152
153 //______________________________________________
154 Bool_t AliDielectronTrackRotator::RotateTracks()
155 {
156   //
157   // Actual track rotation
158   // Find out particle type and perform the rotation
159   //
160
161   AliVTrack *trackP=dynamic_cast<AliVTrack*>(fkArrTracksP->UncheckedAt(fCurrentTackP));
162   AliVTrack *trackN=dynamic_cast<AliVTrack*>(fkArrTracksN->UncheckedAt(fCurrentTackN));
163   fTrackP.Initialize();
164   fTrackN.Initialize();
165   fVTrackP=0x0;
166   fVTrackN=0x0;
167   if (!trackP||!trackN) return kFALSE;
168   fTrackP+=AliKFParticle(*trackP,fPdgLeg1);
169   fTrackN+=AliKFParticle(*trackN,fPdgLeg2);
170
171   fVTrackP=trackP;
172   fVTrackN=trackN;
173   
174   Double_t angle  = fStartAnglePhi+(2*gRandom->Rndm()-1)*fConeAnglePhi;
175   Int_t    charge = TMath::Nint(gRandom->Rndm());
176   
177   if (fRotationType==kRotatePositive||(fRotationType==kRotateBothRandom&&charge==0)){
178     AliDielectronHelper::RotateKFParticle(&fTrackP, angle, fEvent);
179   }
180   
181   if (fRotationType==kRotateNegative||(fRotationType==kRotateBothRandom&&charge==1)){
182     AliDielectronHelper::RotateKFParticle(&fTrackN, angle, fEvent);
183   }
184
185   return kTRUE;
186 }