]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HBTAN/AliHBTPairCut.cxx
Track Points Added. Class needed for Anti-Merging cut
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPairCut.cxx
CommitLineData
ea197c3e 1/* $Id$ */
2
3//-------------------------------------------------------------------
4// Class AliHBTPairCut:
5// implements cut on the pair of particles
6// more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
7// Author: Piotr.Skowronski@cern.ch
8//-------------------------------------------------------------------
9
1b446896 10#include "AliHBTPairCut.h"
11#include "AliHBTPair.h"
ea197c3e 12#include "AliHBTParticleCut.h"
1b446896 13
14ClassImp(AliHBTPairCut)
ea197c3e 15const Int_t AliHBTPairCut::fgkMaxCuts = 50;
1b446896 16/**********************************************************/
17
e3131968 18AliHBTPairCut::AliHBTPairCut():
19 fNCuts(0)
1b446896 20{
ea197c3e 21 //constructor
1b446896 22 fFirstPartCut = new AliHBTEmptyParticleCut(); //empty cuts
23 fSecondPartCut= new AliHBTEmptyParticleCut(); //empty cuts
24
ea197c3e 25 fCuts = new AliHbtBasePairCut*[fgkMaxCuts];
1b446896 26}
27/**********************************************************/
28
bed069a4 29AliHBTPairCut::AliHBTPairCut(const AliHBTPairCut& in):
30 TNamed(in)
1b446896 31{
ea197c3e 32 //copy constructor
33 fCuts = new AliHbtBasePairCut*[fgkMaxCuts];
34 fNCuts = in.fNCuts;
35
36 fFirstPartCut = (AliHBTParticleCut*)in.fFirstPartCut->Clone();
37 fSecondPartCut = (AliHBTParticleCut*)in.fSecondPartCut->Clone();
38
39 for (Int_t i = 0;i<fNCuts;i++)
40 {
41 fCuts[i] = (AliHbtBasePairCut*)in.fCuts[i]->Clone();//create new object (clone) and rember pointer to it
42 }
43}
44/**********************************************************/
45
46AliHBTPairCut& AliHBTPairCut::operator=(const AliHBTPairCut& in)
47{
48 //assignment operator
49 fCuts = new AliHbtBasePairCut*[fgkMaxCuts];
50 fNCuts = in.fNCuts;
1b446896 51
ea197c3e 52 fFirstPartCut = (AliHBTParticleCut*)in.fFirstPartCut->Clone();
53 fSecondPartCut = (AliHBTParticleCut*)in.fSecondPartCut->Clone();
1b446896 54
ea197c3e 55 for (Int_t i = 0;i<fNCuts;i++)
56 {
57 fCuts[i] = (AliHbtBasePairCut*)in.fCuts[i]->Clone();//create new object (clone) and rember pointer to it
58 }
59 return * this;
1b446896 60}
61/**********************************************************/
62
63AliHBTPairCut::~AliHBTPairCut()
64{
ea197c3e 65 //destructor
e3131968 66 if (fFirstPartCut != fSecondPartCut)
ea197c3e 67 {
68 delete fSecondPartCut;
69 }
e3131968 70 delete fFirstPartCut;
1b446896 71 for (Int_t i = 0;i<fNCuts;i++)
ea197c3e 72 {
73 delete fCuts[i];
74 }
1b446896 75 delete []fCuts;
76}
77/**********************************************************/
78
79/**********************************************************/
80
81void AliHBTPairCut::AddBasePairCut(AliHbtBasePairCut* basecut)
ea197c3e 82{
83 //adds the base pair cut (cut on one value)
84
85 if (!basecut) return;
86 if( fNCuts == (fgkMaxCuts-1) )
1b446896 87 {
88 Warning("AddBasePairCut","Not enough place for another cut");
89 return;
90 }
ea197c3e 91 fCuts[fNCuts++]=basecut;
92}
1b446896 93/**********************************************************/
94
ea197c3e 95Bool_t AliHBTPairCut::Pass(AliHBTPair* pair) const
1b446896 96{
ea197c3e 97 //methods which checks if given pair meets all criteria of the cut
98 //if it meets returns FALSE
99 //if NOT returns TRUE
100 if(!pair)
101 {
102 Warning("Pass","No Pasaran! We never accept NULL pointers");
103 return kTRUE;
104 }
105
106 //check particle's cuts
107 if( ( fFirstPartCut->Pass( pair->Particle1()) ) ||
108 ( fSecondPartCut->Pass(pair->Particle2()) ) )
109 {
110 return kTRUE;
111 }
112 return PassPairProp(pair);
48704f50 113}
114/**********************************************************/
115
ea197c3e 116Bool_t AliHBTPairCut::PassPairProp(AliHBTPair* pair) const
48704f50 117{
ea197c3e 118 //methods which checks if given pair meets all criteria of the cut
119 //if it meets returns FALSE
120 //if NOT returns TRUE
121 //examine all base pair cuts
122 for (Int_t i = 0;i<fNCuts;i++)
123 {
124 if ( (fCuts[i]->Pass(pair)) ) return kTRUE; //if one of the cuts reject, then reject
125 }
126 return kFALSE;
1b446896 127}
128/**********************************************************/
129
130void AliHBTPairCut::SetFirstPartCut(AliHBTParticleCut* cut)
131{
ea197c3e 132 // set cut for the first particle
133 if(!cut)
134 {
135 Error("SetFirstPartCut","argument is NULL");
136 return;
137 }
138 delete fFirstPartCut;
139 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
140
1b446896 141}
142/**********************************************************/
143
144void AliHBTPairCut::SetSecondPartCut(AliHBTParticleCut* cut)
145{
ea197c3e 146 // set cut for the second particle
147 if(!cut)
148 {
149 Error("SetSecondPartCut","argument is NULL");
150 return;
151 }
152 delete fSecondPartCut;
153 fSecondPartCut = (AliHBTParticleCut*)cut->Clone();
1b446896 154}
155/**********************************************************/
156
157void AliHBTPairCut::SetPartCut(AliHBTParticleCut* cut)
158{
ea197c3e 159 //sets the the same cut on both particles
160 if(!cut)
161 {
162 Error("SetFirstPartCut","argument is NULL");
163 return;
164 }
9aaf37fe 165 if (fFirstPartCut == fSecondPartCut) fSecondPartCut = 0x0;
166
ea197c3e 167 delete fFirstPartCut;
168 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
169
170 delete fSecondPartCut; //even if null should not be harmful
171 fSecondPartCut = fFirstPartCut;
1b446896 172}
173/**********************************************************/
174
175void AliHBTPairCut::SetQInvRange(Double_t min, Double_t max)
176{
ea197c3e 177 // set range of accepted invariant masses
1b446896 178 AliHBTQInvCut* cut= (AliHBTQInvCut*)FindCut(kHbtPairCutPropQInv);
179 if(cut) cut->SetRange(min,max);
180 else fCuts[fNCuts++] = new AliHBTQInvCut(min,max);
a37908e0 181}
182/**********************************************************/
183void AliHBTPairCut::SetQOutCMSLRange(Double_t min, Double_t max)
184{
ea197c3e 185 // set range of accepted QOut in CMS
a37908e0 186 AliHBTQOutCMSLCCut* cut= (AliHBTQOutCMSLCCut*)FindCut(kHbtPairCutPropQOutCMSLC);
187 if(cut) cut->SetRange(min,max);
188 else fCuts[fNCuts++] = new AliHBTQOutCMSLCCut(min,max);
189}
1b446896 190
a37908e0 191/**********************************************************/
192void AliHBTPairCut::SetQSideCMSLRange(Double_t min, Double_t max)
193{
ea197c3e 194 // set range of accepted QSide in CMS
a37908e0 195 AliHBTQSideCMSLCCut* cut= (AliHBTQSideCMSLCCut*)FindCut(kHbtPairCutPropQSideCMSLC);
196 if(cut) cut->SetRange(min,max);
197 else fCuts[fNCuts++] = new AliHBTQSideCMSLCCut(min,max);
1b446896 198}
199
a37908e0 200/**********************************************************/
201void AliHBTPairCut::SetQLongCMSLRange(Double_t min, Double_t max)
202{
ea197c3e 203 // set range of accepted QLong in CMS
a37908e0 204 AliHBTQLongCMSLCCut* cut= (AliHBTQLongCMSLCCut*)FindCut(kHbtPairCutPropQLongCMSLC);
205 if(cut) cut->SetRange(min,max);
206 else fCuts[fNCuts++] = new AliHBTQLongCMSLCCut(min,max);
207}
208
209/**********************************************************/
210
bce80f3b 211void AliHBTPairCut::SetKtRange(Double_t min, Double_t max)
212{
ea197c3e 213 // set range of accepted Kt (?)
bce80f3b 214 AliHBTKtCut* cut= (AliHBTKtCut*)FindCut(kHbtPairCutPropKt);
215 if(cut) cut->SetRange(min,max);
216 else fCuts[fNCuts++] = new AliHBTKtCut(min,max);
217}
218/**********************************************************/
219
e3131968 220void AliHBTPairCut::SetKStarRange(Double_t min, Double_t max)
221{
ea197c3e 222 // set range of accepted KStar (?)
e3131968 223 AliHBTKStarCut* cut= (AliHBTKStarCut*)FindCut(kHbtPairCutPropKStar);
224 if(cut) cut->SetRange(min,max);
225 else fCuts[fNCuts++] = new AliHBTKStarCut(min,max);
226}
227/**********************************************************/
228
1b446896 229AliHbtBasePairCut* AliHBTPairCut::FindCut(AliHBTPairCutProperty property)
230{
ea197c3e 231 // Find the cut corresponding to "property"
232 for (Int_t i = 0;i<fNCuts;i++)
233 {
234 if (fCuts[i]->GetProperty() == property)
235 return fCuts[i]; //we found the cut we were searching for
236 }
237
238 return 0x0; //we did not found this cut
1b446896 239
240}
241/**********************************************************/
242
243void AliHBTPairCut::Streamer(TBuffer &b)
244{
e3131968 245 // Stream all objects in the array to or from the I/O buffer.
ea197c3e 246
247 UInt_t R__s, R__c;
248 if (b.IsReading())
1b446896 249 {
250 Version_t v = b.ReadVersion(&R__s, &R__c);
1b934a85 251 if (v > -1)
88cb7938 252 {
253 delete fFirstPartCut;
254 delete fSecondPartCut;
255 fFirstPartCut = 0x0;
256 fSecondPartCut = 0x0;
257 TObject::Streamer(b);
258 b >> fFirstPartCut;
259 b >> fSecondPartCut;
260 b >> fNCuts;
261 for (Int_t i = 0;i<fNCuts;i++)
262 {
263 b >> fCuts[i];
264 }
1b934a85 265 }
ea197c3e 266 b.CheckByteCount(R__s, R__c,AliHBTPairCut::IsA());
1b446896 267 }
ea197c3e 268 else
1b446896 269 {
ea197c3e 270 R__c = b.WriteVersion(AliHBTPairCut::IsA(), kTRUE);
271 TObject::Streamer(b);
9aaf37fe 272
273// printf("Streamer Cut 1 %#x Cut 2 %#x\n",fFirstPartCut,fSecondPartCut);
274// this->Dump();
275// fFirstPartCut->Dump();
276
ea197c3e 277 b << fFirstPartCut;
278 b << fSecondPartCut;
279 b << fNCuts;
280 for (Int_t i = 0;i<fNCuts;i++)
88cb7938 281 {
282 b << fCuts[i];
283 }
ea197c3e 284 b.SetByteCount(R__c, kTRUE);
285 }
1b446896 286}
287
288ClassImp(AliHBTEmptyPairCut)
ea197c3e 289
1b446896 290void AliHBTEmptyPairCut::Streamer(TBuffer &b)
ea197c3e 291{
88cb7938 292//streamer for empty pair cut
ea197c3e 293 AliHBTPairCut::Streamer(b);
294}
1b446896 295
296ClassImp(AliHbtBasePairCut)
1b446896 297ClassImp(AliHBTQInvCut)
bce80f3b 298ClassImp(AliHBTKtCut)
c6b93712 299ClassImp(AliHBTQSideCMSLCCut)
300ClassImp(AliHBTQOutCMSLCCut)
301ClassImp(AliHBTQLongCMSLCCut)