1 #include "AliHBTPairCut.h"
2 #include "AliHBTPair.h"
6 ClassImp(AliHBTPairCut)
7 const Int_t AliHBTPairCut::fkgMaxCuts = 50;
8 /**********************************************************/
10 AliHBTPairCut::AliHBTPairCut()
13 fFirstPartCut = new AliHBTEmptyParticleCut(); //empty cuts
14 fSecondPartCut= new AliHBTEmptyParticleCut(); //empty cuts
16 fCuts = new AliHbtBasePairCut*[fkgMaxCuts];
19 /**********************************************************/
21 AliHBTPairCut::AliHBTPairCut(const AliHBTPairCut& in)
24 fCuts = new AliHbtBasePairCut*[fkgMaxCuts];
27 fFirstPartCut = (AliHBTParticleCut*)in.fFirstPartCut->Clone();
28 fSecondPartCut = (AliHBTParticleCut*)in.fSecondPartCut->Clone();
30 for (Int_t i = 0;i<fNCuts;i++)
32 fCuts[i] = (AliHbtBasePairCut*)in.fCuts[i]->Clone();//create new object (clone) and rember pointer to it
35 /**********************************************************/
37 AliHBTPairCut::~AliHBTPairCut()
40 for (Int_t i = 0;i<fNCuts;i++)
46 /**********************************************************/
48 /**********************************************************/
50 void AliHBTPairCut::AddBasePairCut(AliHbtBasePairCut* basecut)
52 //adds the base pair cut (cut on one value)
55 if( fNCuts == (fkgMaxCuts-1) )
57 Warning("AddBasePairCut","Not enough place for another cut");
60 fCuts[fNCuts++]=basecut;
62 /**********************************************************/
64 Bool_t AliHBTPairCut::Pass(AliHBTPair* pair)
66 //methods which checks if given pair meets all criteria of the cut
67 //if it meets returns FALSE
71 Warning("Pass()","No Pasaran! We never accept NULL pointers");
75 //check particle's cuts
76 if( ( fFirstPartCut->Pass( pair->Particle1() ) ) ||
77 ( fSecondPartCut->Pass(pair->Particle2() ) ) )
82 //examine all base pair cuts
83 for (Int_t i = 0;i<fNCuts;i++)
85 if ( (fCuts[i]->Pass(pair)) ) return kTRUE; //if one of the cuts reject, then reject
88 // cout<<"passed "<<pair->Particle1()->GetPdgCode()<<" "<<pair->Particle2()->GetPdgCode()<<endl;
91 /**********************************************************/
93 void AliHBTPairCut::SetFirstPartCut(AliHBTParticleCut* cut)
97 Error("SetFirstPartCut","argument is NULL");
100 delete fFirstPartCut;
101 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
104 /**********************************************************/
106 void AliHBTPairCut::SetSecondPartCut(AliHBTParticleCut* cut)
110 Error("SetSecondPartCut","argument is NULL");
113 delete fSecondPartCut;
114 fSecondPartCut = (AliHBTParticleCut*)cut->Clone();
116 /**********************************************************/
118 void AliHBTPairCut::SetPartCut(AliHBTParticleCut* cut)
120 //sets the the same cut on both particles
123 Error("SetFirstPartCut","argument is NULL");
126 delete fFirstPartCut;
127 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
129 delete fSecondPartCut; //even if null should not be harmful
130 fSecondPartCut = fFirstPartCut;
132 /**********************************************************/
134 void AliHBTPairCut::SetQInvRange(Double_t min, Double_t max)
136 AliHBTQInvCut* cut= (AliHBTQInvCut*)FindCut(kHbtPairCutPropQInv);
137 if(cut) cut->SetRange(min,max);
138 else fCuts[fNCuts++] = new AliHBTQInvCut(min,max);
140 /**********************************************************/
141 void AliHBTPairCut::SetQOutCMSLRange(Double_t min, Double_t max)
143 AliHBTQOutCMSLCCut* cut= (AliHBTQOutCMSLCCut*)FindCut(kHbtPairCutPropQOutCMSLC);
144 if(cut) cut->SetRange(min,max);
145 else fCuts[fNCuts++] = new AliHBTQOutCMSLCCut(min,max);
148 /**********************************************************/
149 void AliHBTPairCut::SetQSideCMSLRange(Double_t min, Double_t max)
151 AliHBTQSideCMSLCCut* cut= (AliHBTQSideCMSLCCut*)FindCut(kHbtPairCutPropQSideCMSLC);
152 if(cut) cut->SetRange(min,max);
153 else fCuts[fNCuts++] = new AliHBTQSideCMSLCCut(min,max);
156 /**********************************************************/
157 void AliHBTPairCut::SetQLongCMSLRange(Double_t min, Double_t max)
159 AliHBTQLongCMSLCCut* cut= (AliHBTQLongCMSLCCut*)FindCut(kHbtPairCutPropQLongCMSLC);
160 if(cut) cut->SetRange(min,max);
161 else fCuts[fNCuts++] = new AliHBTQLongCMSLCCut(min,max);
164 /**********************************************************/
166 void AliHBTPairCut::SetKtRange(Double_t min, Double_t max)
168 AliHBTKtCut* cut= (AliHBTKtCut*)FindCut(kHbtPairCutPropKt);
169 if(cut) cut->SetRange(min,max);
170 else fCuts[fNCuts++] = new AliHBTKtCut(min,max);
172 /**********************************************************/
174 AliHbtBasePairCut* AliHBTPairCut::FindCut(AliHBTPairCutProperty property)
176 for (Int_t i = 0;i<fNCuts;i++)
178 if (fCuts[i]->GetProperty() == property)
179 return fCuts[i]; //we found the cut we were searching for
182 return 0x0; //we did not found this cut
185 /**********************************************************/
187 void AliHBTPairCut::Streamer(TBuffer &b)
189 // Stream all objects in the array to or from the I/O buffer.
194 Version_t v = b.ReadVersion(&R__s, &R__c);
197 TObject::Streamer(b);
201 for (Int_t i = 0;i<fNCuts;i++)
206 b.CheckByteCount(R__s, R__c,AliHBTPairCut::IsA());
211 R__c = b.WriteVersion(AliHBTPairCut::IsA(), kTRUE);
212 TObject::Streamer(b);
216 for (Int_t i = 0;i<fNCuts;i++)
220 b.SetByteCount(R__c, kTRUE);
224 ClassImp(AliHBTEmptyPairCut)
226 void AliHBTEmptyPairCut::Streamer(TBuffer &b)
228 AliHBTPairCut::Streamer(b);
231 ClassImp(AliHbtBasePairCut)
233 ClassImp(AliHBTQInvCut)
235 ClassImp(AliHBTKtCut)
237 ClassImp(AliHBTQSideCMSLCCut)
238 ClassImp(AliHBTQOutCMSLCCut)
239 ClassImp(AliHBTQLongCMSLCCut)