1 #include "AliHBTPairCut.h"
2 #include "AliHBTPair.h"
4 ClassImp(AliHBTPairCut)
5 const Int_t AliHBTPairCut::fkgMaxCuts = 50;
6 /**********************************************************/
8 AliHBTPairCut::AliHBTPairCut():
12 fFirstPartCut = new AliHBTEmptyParticleCut(); //empty cuts
13 fSecondPartCut= new AliHBTEmptyParticleCut(); //empty cuts
15 fCuts = new AliHbtBasePairCut*[fkgMaxCuts];
17 /**********************************************************/
19 AliHBTPairCut::AliHBTPairCut(const AliHBTPairCut& in)
22 fCuts = new AliHbtBasePairCut*[fkgMaxCuts];
25 fFirstPartCut = (AliHBTParticleCut*)in.fFirstPartCut->Clone();
26 fSecondPartCut = (AliHBTParticleCut*)in.fSecondPartCut->Clone();
28 for (Int_t i = 0;i<fNCuts;i++)
30 fCuts[i] = (AliHbtBasePairCut*)in.fCuts[i]->Clone();//create new object (clone) and rember pointer to it
33 /**********************************************************/
35 AliHBTPairCut::~AliHBTPairCut()
38 if (fFirstPartCut != fSecondPartCut)
40 delete fSecondPartCut;
43 for (Int_t i = 0;i<fNCuts;i++)
49 /**********************************************************/
51 /**********************************************************/
53 void AliHBTPairCut::AddBasePairCut(AliHbtBasePairCut* basecut)
55 //adds the base pair cut (cut on one value)
58 if( fNCuts == (fkgMaxCuts-1) )
60 Warning("AddBasePairCut","Not enough place for another cut");
63 fCuts[fNCuts++]=basecut;
65 /**********************************************************/
67 Bool_t AliHBTPairCut::Pass(AliHBTPair* pair)
69 //methods which checks if given pair meets all criteria of the cut
70 //if it meets returns FALSE
74 Warning("Pass","No Pasaran! We never accept NULL pointers");
78 //check particle's cuts
79 if( ( fFirstPartCut->Pass( pair->Particle1()) ) ||
80 ( fSecondPartCut->Pass(pair->Particle2()) ) )
84 return PassPairProp(pair);
86 /**********************************************************/
88 Bool_t AliHBTPairCut::PassPairProp(AliHBTPair* pair)
90 //methods which checks if given pair meets all criteria of the cut
91 //if it meets returns FALSE
93 //examine all base pair cuts
94 for (Int_t i = 0;i<fNCuts;i++)
96 if ( (fCuts[i]->Pass(pair)) ) return kTRUE; //if one of the cuts reject, then reject
100 /**********************************************************/
102 void AliHBTPairCut::SetFirstPartCut(AliHBTParticleCut* cut)
106 Error("SetFirstPartCut","argument is NULL");
109 delete fFirstPartCut;
110 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
113 /**********************************************************/
115 void AliHBTPairCut::SetSecondPartCut(AliHBTParticleCut* cut)
119 Error("SetSecondPartCut","argument is NULL");
122 delete fSecondPartCut;
123 fSecondPartCut = (AliHBTParticleCut*)cut->Clone();
125 /**********************************************************/
127 void AliHBTPairCut::SetPartCut(AliHBTParticleCut* cut)
129 //sets the the same cut on both particles
132 Error("SetFirstPartCut","argument is NULL");
135 delete fFirstPartCut;
136 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
138 delete fSecondPartCut; //even if null should not be harmful
139 fSecondPartCut = fFirstPartCut;
141 /**********************************************************/
143 void AliHBTPairCut::SetQInvRange(Double_t min, Double_t max)
145 AliHBTQInvCut* cut= (AliHBTQInvCut*)FindCut(kHbtPairCutPropQInv);
146 if(cut) cut->SetRange(min,max);
147 else fCuts[fNCuts++] = new AliHBTQInvCut(min,max);
149 /**********************************************************/
150 void AliHBTPairCut::SetQOutCMSLRange(Double_t min, Double_t max)
152 AliHBTQOutCMSLCCut* cut= (AliHBTQOutCMSLCCut*)FindCut(kHbtPairCutPropQOutCMSLC);
153 if(cut) cut->SetRange(min,max);
154 else fCuts[fNCuts++] = new AliHBTQOutCMSLCCut(min,max);
157 /**********************************************************/
158 void AliHBTPairCut::SetQSideCMSLRange(Double_t min, Double_t max)
160 AliHBTQSideCMSLCCut* cut= (AliHBTQSideCMSLCCut*)FindCut(kHbtPairCutPropQSideCMSLC);
161 if(cut) cut->SetRange(min,max);
162 else fCuts[fNCuts++] = new AliHBTQSideCMSLCCut(min,max);
165 /**********************************************************/
166 void AliHBTPairCut::SetQLongCMSLRange(Double_t min, Double_t max)
168 AliHBTQLongCMSLCCut* cut= (AliHBTQLongCMSLCCut*)FindCut(kHbtPairCutPropQLongCMSLC);
169 if(cut) cut->SetRange(min,max);
170 else fCuts[fNCuts++] = new AliHBTQLongCMSLCCut(min,max);
173 /**********************************************************/
175 void AliHBTPairCut::SetKtRange(Double_t min, Double_t max)
177 AliHBTKtCut* cut= (AliHBTKtCut*)FindCut(kHbtPairCutPropKt);
178 if(cut) cut->SetRange(min,max);
179 else fCuts[fNCuts++] = new AliHBTKtCut(min,max);
181 /**********************************************************/
183 void AliHBTPairCut::SetKStarRange(Double_t min, Double_t max)
185 AliHBTKStarCut* cut= (AliHBTKStarCut*)FindCut(kHbtPairCutPropKStar);
186 if(cut) cut->SetRange(min,max);
187 else fCuts[fNCuts++] = new AliHBTKStarCut(min,max);
189 /**********************************************************/
191 AliHbtBasePairCut* AliHBTPairCut::FindCut(AliHBTPairCutProperty property)
193 for (Int_t i = 0;i<fNCuts;i++)
195 if (fCuts[i]->GetProperty() == property)
196 return fCuts[i]; //we found the cut we were searching for
199 return 0x0; //we did not found this cut
202 /**********************************************************/
204 void AliHBTPairCut::Streamer(TBuffer &b)
206 // Stream all objects in the array to or from the I/O buffer.
211 Version_t v = b.ReadVersion(&R__s, &R__c);
214 delete fFirstPartCut;
215 delete fSecondPartCut;
217 fSecondPartCut = 0x0;
218 TObject::Streamer(b);
222 for (Int_t i = 0;i<fNCuts;i++)
227 b.CheckByteCount(R__s, R__c,AliHBTPairCut::IsA());
232 R__c = b.WriteVersion(AliHBTPairCut::IsA(), kTRUE);
233 TObject::Streamer(b);
237 for (Int_t i = 0;i<fNCuts;i++)
241 b.SetByteCount(R__c, kTRUE);
245 ClassImp(AliHBTEmptyPairCut)
247 void AliHBTEmptyPairCut::Streamer(TBuffer &b)
249 AliHBTPairCut::Streamer(b);
252 ClassImp(AliHbtBasePairCut)
254 ClassImp(AliHBTQInvCut)
256 ClassImp(AliHBTKtCut)
258 ClassImp(AliHBTQSideCMSLCCut)
259 ClassImp(AliHBTQOutCMSLCCut)
260 ClassImp(AliHBTQLongCMSLCCut)