]>
Commit | Line | Data |
---|---|---|
1c5acb87 | 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 | /* $Id: $ */ | |
16 | ||
17 | //_________________________________________________________________________ | |
18 | // Class containing methods for the isolation cut. | |
19 | // | |
20 | // | |
21 | //*-- Author: Gustavo Conesa (LNF-INFN) | |
22 | ////////////////////////////////////////////////////////////////////////////// | |
23 | ||
24 | ||
25 | // --- ROOT system --- | |
26 | //#include <Riostream.h> | |
27 | #include <TLorentzVector.h> | |
28 | #include <TSeqCollection.h> | |
29 | ||
30 | // --- AliRoot system --- | |
31 | #include "AliIsolationCut.h" | |
32 | class AliLog ; | |
33 | #include "AliAODPWG4ParticleCorrelation.h" | |
34 | #include "AliAODTrack.h" | |
35 | #include "AliAODCaloCluster.h" | |
36 | ||
37 | ClassImp(AliIsolationCut) | |
38 | ||
39 | //____________________________________________________________________________ | |
40 | AliIsolationCut::AliIsolationCut() : | |
41 | TObject(), | |
42 | fConeSize(0.),fPtThreshold(0.), fPtFraction(0.), fICMethod(0) | |
43 | ||
44 | { | |
45 | //default ctor | |
46 | ||
47 | //Initialize parameters | |
48 | InitParameters(); | |
49 | ||
50 | } | |
51 | ||
52 | //____________________________________________________________________________ | |
53 | AliIsolationCut::AliIsolationCut(const AliIsolationCut & g) : | |
54 | TObject(g), | |
55 | fConeSize(g.fConeSize), | |
56 | fPtThreshold(g.fPtThreshold), | |
57 | fPtFraction(g.fPtFraction), | |
58 | fICMethod(g.fICMethod) | |
59 | { | |
60 | // cpy ctor | |
61 | ||
62 | } | |
63 | ||
64 | //_________________________________________________________________________ | |
65 | AliIsolationCut & AliIsolationCut::operator = (const AliIsolationCut & source) | |
66 | { | |
67 | // assignment operator | |
68 | ||
69 | if(&source == this) return *this; | |
70 | ||
71 | fConeSize = source.fConeSize ; | |
72 | fPtThreshold = source.fPtThreshold ; | |
73 | fICMethod = source.fICMethod ; | |
74 | fPtFraction = source.fPtFraction ; | |
75 | ||
76 | return *this; | |
77 | ||
78 | } | |
79 | ||
80 | ||
81 | //____________________________________________________________________________ | |
82 | TString AliIsolationCut::GetICParametersList() | |
83 | { | |
84 | //Put data member values in string to keep in output container | |
85 | ||
86 | TString parList ; //this will be list of parameters used for this analysis. | |
87 | char onePar[255] ; | |
88 | ||
89 | sprintf(onePar,"--- AliIsolationCut ---\n") ; | |
90 | parList+=onePar ; | |
91 | sprintf(onePar,"fConeSize: (isolation cone size) %1.2f\n",fConeSize) ; | |
92 | parList+=onePar ; | |
93 | sprintf(onePar,"fPtThreshold =%1.2f (isolation pt threshold) \n",fPtThreshold) ; | |
94 | parList+=onePar ; | |
95 | sprintf(onePar,"fPtFraction=%1.2f (isolation pt threshold fraction ) \n",fPtFraction) ; | |
96 | parList+=onePar ; | |
97 | sprintf(onePar,"fICMethod=%d (isolation cut case) \n",fICMethod) ; | |
98 | parList+=onePar ; | |
99 | ||
100 | return parList; | |
101 | } | |
102 | ||
103 | //____________________________________________________________________________ | |
104 | void AliIsolationCut::InitParameters() | |
105 | { | |
106 | //Initialize the parameters of the analysis. | |
107 | ||
108 | fConeSize = 0.4 ; | |
109 | fPtThreshold = 1. ; | |
110 | fPtFraction = 0.1 ; | |
111 | ||
112 | fICMethod = kPtThresIC; // 0 pt threshol method, 1 cone pt sum method | |
113 | ||
114 | } | |
115 | ||
116 | //__________________________________________________________________ | |
117 | void AliIsolationCut::MakeIsolationCut(TSeqCollection * plCTS, TSeqCollection * plNe, Double_t * vertex, | |
118 | const Bool_t fillAOD, AliAODPWG4ParticleCorrelation *pCandidate, | |
119 | Int_t & n, Int_t & nfrac, Float_t &coneptsum, Bool_t &isolated) const | |
120 | { | |
121 | //Search in cone around a candidate particle if it is isolated | |
122 | Float_t phiC = pCandidate->Phi() ; | |
123 | Float_t etaC = pCandidate->Eta() ; | |
124 | Float_t ptC = pCandidate->Pt() ; | |
125 | Float_t pt = -100. ; | |
126 | Float_t eta = -100. ; | |
127 | Float_t phi = -100. ; | |
128 | Float_t rad = -100 ; | |
129 | ||
130 | n = 0 ; | |
131 | coneptsum = 0.; | |
132 | isolated = kFALSE; | |
133 | ||
134 | //Check charged particles in cone. | |
135 | if(plCTS){ | |
136 | TVector3 p3; | |
137 | for(Int_t ipr = 0;ipr < plCTS->GetEntries() ; ipr ++ ){ | |
138 | AliAODTrack* track = (AliAODTrack *)(plCTS->At(ipr)) ; | |
139 | //Do not count the candidate (pion, conversion photon) or the daughters of the candidate | |
140 | if(track->GetID() == pCandidate->GetTrackLabel(0) || track->GetID() == pCandidate->GetTrackLabel(1)) continue ; | |
141 | p3.SetXYZ(track->Px(),track->Py(),track->Pz()); | |
142 | pt = p3.Pt(); | |
143 | eta = p3.Eta(); | |
144 | phi = p3.Phi() ; | |
145 | if(phi<0) phi+=TMath::TwoPi(); | |
146 | ||
147 | //Check if there is any particle inside cone with pt larger than fPtThreshold | |
148 | rad = TMath::Sqrt((eta-etaC)*(eta-etaC)+ (phi-phiC)*(phi-phiC)); | |
149 | ||
150 | if(rad < fConeSize){ | |
151 | if(fillAOD) pCandidate->AddIsolationConeTrack(track); | |
152 | //printf("charged in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); | |
153 | coneptsum+=pt; | |
154 | if(pt > fPtThreshold ) n++; | |
155 | if(pt > fPtFraction*ptC ) nfrac++; | |
156 | } | |
157 | }// charged particle loop | |
158 | }//Tracks | |
159 | ||
160 | //Check neutral particles in cone. | |
161 | if(plNe){ | |
162 | TLorentzVector mom ; | |
163 | for(Int_t ipr = 0;ipr < plNe->GetEntries() ; ipr ++ ){ | |
164 | AliAODCaloCluster * calo = (AliAODCaloCluster *)(plNe->At(ipr)) ; | |
165 | ||
166 | //Do not count the candidate (photon or pi0) or the daughters of the candidate | |
167 | if(calo->GetID() == pCandidate->GetCaloLabel(0) || calo->GetID() == pCandidate->GetCaloLabel(1)) continue ; //Skip matched clusters with tracks | |
168 | ||
169 | if(calo->GetNTracksMatched() > 0) continue ; | |
170 | ||
171 | calo->GetMomentum(mom,vertex);//Assume that come from vertex in straight line | |
172 | pt = mom.Pt(); | |
173 | eta = mom.Eta(); | |
174 | phi = mom.Phi() ; | |
175 | if(phi<0) phi+=TMath::TwoPi(); | |
176 | ||
177 | //Check if there is any particle inside cone with pt larger than fPtThreshold | |
178 | rad = TMath::Sqrt((eta-etaC)*(eta-etaC)+ (phi-phiC)*(phi-phiC)); | |
179 | if(rad < fConeSize){ | |
180 | if(fillAOD) pCandidate->AddIsolationConeCluster(calo); | |
181 | //printf("neutral in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); | |
182 | coneptsum+=pt; | |
183 | if(pt > fPtThreshold ) n++; | |
184 | if(pt > fPtFraction*ptC ) nfrac++; | |
185 | }//in cone | |
186 | }// neutral particle loop | |
187 | }//neutrals | |
188 | ||
189 | //printf("Isolation Cut: in cone with: pT>pTthres %d, pT > pTfrac*pTcandidate %d \n",n,nfrac); | |
190 | ||
191 | //Check isolation, depending on method. | |
192 | if( fICMethod == kPtThresIC){ | |
193 | if(n==0) isolated = kTRUE ; | |
194 | } | |
195 | else if( fICMethod == kSumPtIC){ | |
196 | if(coneptsum < fPtThreshold) | |
197 | isolated = kTRUE ; | |
198 | } | |
199 | else if( fICMethod == kPtFracIC){ | |
200 | if(nfrac==0) isolated = kTRUE ; | |
201 | } | |
202 | else if( fICMethod == kSumPtFracIC){ | |
203 | if(coneptsum < fPtFraction*ptC) | |
204 | isolated = kTRUE ; | |
205 | } | |
206 | } | |
207 | ||
208 | //__________________________________________________________________ | |
209 | void AliIsolationCut::Print(const Option_t * opt) const | |
210 | { | |
211 | ||
212 | //Print some relevant parameters set for the analysis | |
213 | if(! opt) | |
214 | return; | |
215 | ||
216 | printf("**** Print %s %s **** \n", GetName(), GetTitle() ) ; | |
217 | ||
218 | printf("IC method = %d\n", fICMethod) ; | |
219 | printf("Cone Size = %1.2f\n", fConeSize) ; | |
220 | printf("pT threshold = %2.1f\n", fPtThreshold) ; | |
221 | printf("pT fraction = %3.1f\n", fPtFraction) ; | |
222 | ||
223 | printf(" \n") ; | |
224 | ||
225 | } |