]>
Commit | Line | Data |
---|---|---|
2fbc0b17 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, 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 | /////////////////////////////////////////////////////////////////////////// | |
18 | // ---- CORRECTION FRAMEWORK ---- | |
19 | // Class to cut on V0 topology | |
20 | // -> support for : | |
21 | // DCA between V0 daughters | |
22 | // V0 daughter impact parameters wrt primary vertex | |
23 | // cosine of V0 pointing angle | |
24 | // | |
25 | /////////////////////////////////////////////////////////////////////////// | |
26 | // author : R. Vernet (renaud.vernet@cern.ch) | |
27 | /////////////////////////////////////////////////////////////////////////// | |
28 | ||
29 | #include "AliCFV0TopoCuts.h" | |
30 | #include "AliESDv0.h" | |
31 | #include "AliESDtrack.h" | |
32 | #include "AliCFPair.h" | |
10d9a8a6 | 33 | #include "AliAODv0.h" |
34 | #include "AliVEvent.h" | |
35 | #include "AliAODEvent.h" | |
2fbc0b17 | 36 | |
37 | ClassImp(AliCFV0TopoCuts) | |
38 | ||
39 | //______________________________________________________________ | |
40 | AliCFV0TopoCuts::AliCFV0TopoCuts() : | |
41 | AliCFCutBase(), | |
42 | fMaxDcaDaughters(1.e99), | |
43 | fMinDcaNeg(0), | |
44 | fMinDcaPos(0), | |
10d9a8a6 | 45 | fMinCosP(0), |
46 | fEvent(0x0) | |
2fbc0b17 | 47 | { |
48 | // | |
49 | //default constructor | |
50 | // | |
51 | } | |
52 | ||
53 | //______________________________________________________________ | |
54 | AliCFV0TopoCuts::AliCFV0TopoCuts(const Char_t* name, const Char_t* title) : | |
55 | AliCFCutBase(name,title), | |
56 | fMaxDcaDaughters(1.e99), | |
57 | fMinDcaNeg(0), | |
58 | fMinDcaPos(0), | |
10d9a8a6 | 59 | fMinCosP(0), |
60 | fEvent(0x0) | |
2fbc0b17 | 61 | { |
62 | // | |
63 | } | |
64 | ||
65 | //______________________________________________________________ | |
66 | AliCFV0TopoCuts::AliCFV0TopoCuts(const AliCFV0TopoCuts& c) : | |
67 | AliCFCutBase(c), | |
68 | fMaxDcaDaughters(c.fMaxDcaDaughters), | |
69 | fMinDcaNeg(c.fMinDcaNeg), | |
70 | fMinDcaPos(c.fMinDcaPos), | |
10d9a8a6 | 71 | fMinCosP(c.fMinCosP), |
72 | fEvent(c.fEvent) | |
2fbc0b17 | 73 | { |
74 | // | |
75 | // copy constructor | |
76 | // | |
77 | } | |
78 | ||
79 | //______________________________________________________________ | |
80 | AliCFV0TopoCuts& AliCFV0TopoCuts::operator=(const AliCFV0TopoCuts& c) | |
81 | { | |
82 | // | |
83 | // assignment operator | |
84 | // | |
85 | ||
86 | if (this != &c) { | |
87 | AliCFCutBase::operator=(c) ; | |
88 | fMaxDcaDaughters = c.fMaxDcaDaughters ; | |
89 | fMinDcaNeg = c.fMinDcaNeg ; | |
90 | fMinDcaPos = c.fMinDcaPos ; | |
91 | fMinCosP = c.fMinCosP ; | |
10d9a8a6 | 92 | fEvent = c.fEvent ; |
2fbc0b17 | 93 | } |
94 | return *this ; | |
95 | } | |
96 | ||
97 | //______________________________________________________________ | |
9eeae5d5 | 98 | Bool_t AliCFV0TopoCuts::IsSelected(TObject *obj) { |
2fbc0b17 | 99 | // |
100 | // computes V0 topological variables to cut on and return true | |
101 | // in case the V0 is accepted | |
102 | // | |
103 | ||
2fbc0b17 | 104 | |
eb15152d | 105 | AliCFPair* pair = dynamic_cast<AliCFPair*>(obj); |
106 | if (!pair) return kFALSE ; | |
107 | ||
108 | TString className(pair->ClassName()); | |
2fbc0b17 | 109 | if (className.CompareTo("AliCFPair") != 0) { |
110 | Error("IsSelected","obj must point to an AliCFPair !"); | |
111 | return kFALSE ; | |
112 | } | |
113 | ||
10d9a8a6 | 114 | AliESDv0 * esdV0 = pair->GetESDV0(); |
115 | AliAODv0 * aodV0 = pair->GetAODV0(); | |
116 | AliVParticle * negDaughter = pair->GetNeg(); | |
117 | AliVParticle * posDaughter = pair->GetPos(); | |
118 | ||
119 | Double32_t dcaDaughters = 0. ; | |
120 | Double32_t cosP = 0. ; | |
121 | Double32_t negDca = 0. ; | |
122 | Double32_t posDca = 0. ; | |
123 | ||
124 | if (esdV0) { | |
125 | dcaDaughters = esdV0->GetDcaV0Daughters() ; | |
126 | cosP = esdV0->GetV0CosineOfPointingAngle() ; | |
127 | ||
128 | Float_t tDca[2]; | |
129 | if (negDaughter) ((AliESDtrack*)negDaughter)->GetImpactParameters(tDca[0],tDca[1]); | |
186738ee | 130 | else { tDca[0]=1.e+09; tDca[1]=1.e+09;} |
10d9a8a6 | 131 | negDca = TMath::Sqrt(tDca[0]*tDca[0]+tDca[1]*tDca[1]); |
132 | if (posDaughter) ((AliESDtrack*)posDaughter)->GetImpactParameters(tDca[0],tDca[1]); | |
186738ee | 133 | else { tDca[0]=1.e+09; tDca[1]=1.e+09;} |
10d9a8a6 | 134 | posDca = TMath::Sqrt(tDca[0]*tDca[0]+tDca[1]*tDca[1]); |
135 | } | |
136 | else if (aodV0) { | |
137 | dcaDaughters = aodV0->DcaV0Daughters() ; | |
138 | negDca = aodV0->DcaNegToPrimVertex() ; | |
139 | posDca = aodV0->DcaPosToPrimVertex() ; | |
140 | cosP = aodV0->CosPointingAngle(((AliAODEvent*)fEvent)->GetPrimaryVertex()) ; | |
141 | } | |
142 | else Error("IsSelected","No V0 pointer available"); | |
2fbc0b17 | 143 | |
10d9a8a6 | 144 | if (dcaDaughters > fMaxDcaDaughters) return kFALSE ; |
145 | if (cosP < fMinCosP ) return kFALSE ; | |
146 | if (negDca < fMinDcaNeg ) return kFALSE ; | |
147 | if (posDca < fMinDcaPos ) return kFALSE ; | |
2fbc0b17 | 148 | |
149 | return kTRUE ; | |
150 | } | |
151 |