1 #include "AliHBTParticleCut.h"
5 ClassImp(AliHBTParticleCut)
6 const Int_t AliHBTParticleCut::fkgMaxCuts = 50;
7 /******************************************************************/
9 AliHBTParticleCut::AliHBTParticleCut()
11 fCuts = new AliHbtBaseCut* [fkgMaxCuts];//last property in the property
12 //property enum => defines number of properties
16 /******************************************************************/
18 AliHBTParticleCut::AliHBTParticleCut(const AliHBTParticleCut& in):
21 fCuts = new AliHbtBaseCut* [fkgMaxCuts];//last property in the property
22 //property enum => defines number of properties
25 for (Int_t i = 0;i<fNCuts;i++)
27 fCuts[i] = (AliHbtBaseCut*)in.fCuts[i]->Clone();//create new object (clone) and rember pointer to it
30 /******************************************************************/
32 AliHBTParticleCut::~AliHBTParticleCut()
34 for (Int_t i = 0;i<fNCuts;i++)
40 /******************************************************************/
42 Bool_t AliHBTParticleCut::Pass(AliHBTParticle* p)
44 //method checks all the cuts that are set (in the list)
45 //If any of the baseCuts rejects particle False(rejection) is returned
48 Warning("Pass()","No Pasaran! We never accept NULL pointers");
51 if( (p->GetPdgCode() != fPID) && ( fPID != 0)) return kTRUE;
53 for (Int_t i = 0;i<fNCuts;i++)
55 if ( (fCuts[i]->Pass(p)) ) return kTRUE; //if one of the cuts rejects, then reject
59 /******************************************************************/
61 void AliHBTParticleCut::AddBasePartCut(AliHbtBaseCut* basecut)
63 //adds the base pair cut (cut on one value)
66 if( fNCuts == (fkgMaxCuts-1) )
68 Warning("AddBasePartCut","Not enough place for another cut");
71 fCuts[fNCuts++]=basecut;
75 /******************************************************************/
76 AliHbtBaseCut* AliHBTParticleCut::FindCut(AliHBTCutProperty property)
79 for (Int_t i = 0;i<fNCuts;i++)
81 if (fCuts[i]->GetProperty() == property)
82 return fCuts[i]; //we found the cut we were searching for
85 return 0x0; //we did not found this cut
88 /******************************************************************/
90 void AliHBTParticleCut::SetMomentumRange(Double_t min, Double_t max)
92 AliHBTMomentumCut* cut= (AliHBTMomentumCut*)FindCut(kHbtP);
93 if(cut) cut->SetRange(min,max);
94 else fCuts[fNCuts++] = new AliHBTMomentumCut(min,max);
96 /******************************************************************/
99 void AliHBTParticleCut::SetPtRange(Double_t min, Double_t max)
101 AliHBTPtCut* cut= (AliHBTPtCut*)FindCut(kHbtPt);
102 if(cut) cut->SetRange(min,max);
103 else fCuts[fNCuts++] = new AliHBTPtCut(min,max);
106 /******************************************************************/
108 void AliHBTParticleCut::SetEnergyRange(Double_t min, Double_t max)
110 AliHBTEnergyCut* cut= (AliHBTEnergyCut*)FindCut(kHbtE);
111 if(cut) cut->SetRange(min,max);
112 else fCuts[fNCuts++] = new AliHBTEnergyCut(min,max);
115 /******************************************************************/
117 void AliHBTParticleCut::SetRapidityRange(Double_t min, Double_t max)
119 AliHbtBaseCut* cut = FindCut(kHbtRapidity);
120 if(cut) cut->SetRange(min,max);
121 else fCuts[fNCuts++] = new AliHBTRapidityCut(min,max);
124 /******************************************************************/
126 void AliHBTParticleCut::SetPseudoRapidityRange(Double_t min, Double_t max)
128 AliHbtBaseCut* cut = FindCut(kHbtPseudoRapidity);
129 if(cut) cut->SetRange(min,max);
130 else fCuts[fNCuts++] = new AliHBTPseudoRapidityCut(min,max);
133 /******************************************************************/
135 void AliHBTParticleCut::SetPxRange(Double_t min, Double_t max)
137 AliHbtBaseCut* cut = FindCut(kHbtPx);
138 if(cut) cut->SetRange(min,max);
139 else fCuts[fNCuts++] = new AliHBTPxCut(min,max);
141 /******************************************************************/
143 void AliHBTParticleCut::SetPyRange(Double_t min, Double_t max)
145 AliHbtBaseCut* cut = FindCut(kHbtPy);
146 if(cut) cut->SetRange(min,max);
147 else fCuts[fNCuts++] = new AliHBTPyCut(min,max);
149 /******************************************************************/
151 void AliHBTParticleCut::SetPzRange(Double_t min, Double_t max)
153 AliHbtBaseCut* cut = FindCut(kHbtPz);
154 if(cut) cut->SetRange(min,max);
155 else fCuts[fNCuts++] = new AliHBTPzCut(min,max);
157 /******************************************************************/
159 void AliHBTParticleCut::SetPhiRange(Double_t min, Double_t max)
161 AliHbtBaseCut* cut = FindCut(kHbtPhi);
162 if(cut) cut->SetRange(min,max);
163 else fCuts[fNCuts++] = new AliHBTPhiCut(min,max);
165 /******************************************************************/
167 void AliHBTParticleCut::SetThetaRange(Double_t min, Double_t max)
169 AliHbtBaseCut* cut = FindCut(kHbtTheta);
170 if(cut) cut->SetRange(min,max);
171 else fCuts[fNCuts++] = new AliHBTThetaCut(min,max);
173 /******************************************************************/
175 void AliHBTParticleCut::SetVxRange(Double_t min, Double_t max)
177 AliHbtBaseCut* cut = FindCut(kHbtVx);
178 if(cut) cut->SetRange(min,max);
179 else fCuts[fNCuts++] = new AliHBTVxCut(min,max);
181 /******************************************************************/
183 void AliHBTParticleCut::SetVyRange(Double_t min, Double_t max)
185 AliHbtBaseCut* cut = FindCut(kHbtVy);
186 if(cut) cut->SetRange(min,max);
187 else fCuts[fNCuts++] = new AliHBTVyCut(min,max);
189 /******************************************************************/
191 void AliHBTParticleCut::SetVzRange(Double_t min, Double_t max)
193 AliHbtBaseCut* cut = FindCut(kHbtVz);
194 if(cut) cut->SetRange(min,max);
195 else fCuts[fNCuts++] = new AliHBTVzCut(min,max);
198 /******************************************************************/
199 void AliHBTParticleCut::Streamer(TBuffer &b)
201 // Stream all objects in the array to or from the I/O buffer.
207 for (i = 0;i<fNCuts;i++) delete fCuts[i];
208 b.ReadVersion(&R__s, &R__c);
209 TObject::Streamer(b);
212 for (i = 0;i<fNCuts;i++)
216 b.CheckByteCount(R__s, R__c,AliHBTParticleCut::IsA());
220 R__c = b.WriteVersion(AliHBTParticleCut::IsA(), kTRUE);
221 TObject::Streamer(b);
224 for (Int_t i = 0;i<fNCuts;i++)
228 b.SetByteCount(R__c, kTRUE);
232 void AliHBTParticleCut::Print(void)
234 cout<<"Printing AliHBTParticleCut, this = "<<this<<endl;
235 cout<<"fPID "<<fPID<<endl;
236 cout<<"fNCuts "<<fNCuts <<endl;
237 for (Int_t i = 0;i<fNCuts;i++)
239 cout<<" fCuts["<<i<<"] "<<fCuts[i]<<endl<<" ";
244 /******************************************************************/
245 /******************************************************************/
247 ClassImp(AliHBTEmptyParticleCut)
248 void AliHBTEmptyParticleCut::Streamer(TBuffer &b)
250 AliHBTParticleCut::Streamer(b);
252 /******************************************************************/
253 /******************************************************************/
254 /******************************************************************/
256 /******************************************************************/
257 /******************************************************************/
258 /******************************************************************/
260 ClassImp(AliHbtBaseCut)
261 void AliHbtBaseCut::Print(void)
263 cout<<"fMin="<<fMin <<", fMax=" <<fMax<<" ";
266 void AliHbtBaseCut::PrintProperty(void)
271 cout<<"kHbtP"; break;
273 cout<<"kHbtPt"; break;
275 cout<<"kHbtE"; break;
277 cout<<"kHbtRapidity"; break;
278 case kHbtPseudoRapidity:
279 cout<<"kHbtPseudoRapidity"; break;
281 cout<<"kHbtPx"; break;
283 cout<<"kHbtPy"; break;
285 cout<<"kHbtPz"; break;
287 cout<<"kHbtPhi"; break;
289 cout<<"kHbtTheta"; break;
291 cout<<"kHbtVx"; break;
293 cout<<"kHbtVy"; break;
295 cout<<"kHbtVz"; break;
297 cout<<"kHbtNone"; break;
299 cout<<"Property Not Found";
303 ClassImp( AliHBTMomentumCut )
305 ClassImp( AliHBTPtCut )
306 ClassImp( AliHBTEnergyCut )
307 ClassImp( AliHBTRapidityCut )
308 ClassImp( AliHBTPseudoRapidityCut )
309 ClassImp( AliHBTPxCut )
310 ClassImp( AliHBTPyCut )
311 ClassImp( AliHBTPzCut )
312 ClassImp( AliHBTPhiCut )
313 ClassImp( AliHBTThetaCut )
314 ClassImp( AliHBTVxCut )
315 ClassImp( AliHBTVyCut )
316 ClassImp( AliHBTVzCut )
318 ClassImp( AliHBTPIDCut )
320 ClassImp( AliHBTLogicalOperCut )
322 AliHBTLogicalOperCut::AliHBTLogicalOperCut():
323 AliHbtBaseCut(-10e10,10e10,kHbtNone),
324 fFirst(new AliHBTDummyBaseCut),
325 fSecond(new AliHBTDummyBaseCut)
329 /******************************************************************/
331 AliHBTLogicalOperCut::AliHBTLogicalOperCut(AliHbtBaseCut* first, AliHbtBaseCut* second):
332 AliHbtBaseCut(-10e10,10e10,kHbtNone),
333 fFirst((first)?(AliHbtBaseCut*)first->Clone():0x0),
334 fSecond((second)?(AliHbtBaseCut*)second->Clone():0x0)
336 if ( (fFirst && fSecond) == kFALSE)
338 Fatal("AliHBTLogicalOperCut","One of parameters is NULL!");
341 /******************************************************************/
343 AliHBTLogicalOperCut::~AliHBTLogicalOperCut()
349 /******************************************************************/
351 Bool_t AliHBTLogicalOperCut::AliHBTDummyBaseCut::Pass(AliHBTParticle* /*part*/)
353 Warning("Pass","You are using dummy base cut! Probobly some logical cut is not set up properly");
354 return kFALSE;//accept
356 /******************************************************************/
358 void AliHBTLogicalOperCut::Streamer(TBuffer &b)
360 // Stream all objects in the array to or from the I/O buffer.
369 b.ReadVersion(&R__s, &R__c);
370 TObject::Streamer(b);
373 b.CheckByteCount(R__s, R__c,AliHBTLogicalOperCut::IsA());
377 R__c = b.WriteVersion(AliHBTLogicalOperCut::IsA(), kTRUE);
378 TObject::Streamer(b);
381 b.SetByteCount(R__c, kTRUE);
385 /******************************************************************/
386 ClassImp(AliHBTOrCut)
388 Bool_t AliHBTOrCut::Pass(AliHBTParticle * p)
390 //returns true when rejected
391 //AND operation is a little bit misleading but is correct
392 //User wants to build logical cuts with natural (positive) logic
393 //while HBTAN use inernally reverse (returns true when rejected)
394 if (fFirst->Pass(p) && fSecond->Pass(p)) return kTRUE;//rejected (both rejected, returned kTRUE)
395 return kFALSE;//accepted, at least one accepted (returned kFALSE)
397 /******************************************************************/
399 ClassImp(AliHBTAndCut)
401 Bool_t AliHBTAndCut::Pass(AliHBTParticle * p)
403 //returns true when rejected
404 //OR operation is a little bit misleading but is correct
405 //User wants to build logical cuts with natural (positive) logic
406 //while HBTAN use inernally reverse (returns true when rejected)
407 if (fFirst->Pass(p) || fSecond->Pass(p)) return kTRUE;//rejected (any of two rejected(returned kTRUE) )
408 return kFALSE;//accepted (both accepted (returned kFALSE))
410 /******************************************************************/