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() ) ) )
81 // cout<<"passed "<<pair->Particle1()->GetPdgCode()<<" "<<pair->Particle2()->GetPdgCode()<<endl;
82 return PassPairProp(pair);
84 /**********************************************************/
86 Bool_t AliHBTPairCut::PassPairProp(AliHBTPair* pair)
88 //methods which checks if given pair meets all criteria of the cut
89 //if it meets returns FALSE
91 //examine all base pair cuts
92 for (Int_t i = 0;i<fNCuts;i++)
94 if ( (fCuts[i]->Pass(pair)) ) return kTRUE; //if one of the cuts reject, then reject
96 // cout<<"passed "<<pair->Particle1()->GetPdgCode()<<" "<<pair->Particle2()->GetPdgCode()<<endl;
99 /**********************************************************/
101 void AliHBTPairCut::SetFirstPartCut(AliHBTParticleCut* cut)
105 Error("SetFirstPartCut","argument is NULL");
108 delete fFirstPartCut;
109 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
112 /**********************************************************/
114 void AliHBTPairCut::SetSecondPartCut(AliHBTParticleCut* cut)
118 Error("SetSecondPartCut","argument is NULL");
121 delete fSecondPartCut;
122 fSecondPartCut = (AliHBTParticleCut*)cut->Clone();
124 /**********************************************************/
126 void AliHBTPairCut::SetPartCut(AliHBTParticleCut* cut)
128 //sets the the same cut on both particles
131 Error("SetFirstPartCut","argument is NULL");
134 delete fFirstPartCut;
135 fFirstPartCut = (AliHBTParticleCut*)cut->Clone();
137 delete fSecondPartCut; //even if null should not be harmful
138 fSecondPartCut = fFirstPartCut;
140 /**********************************************************/
142 void AliHBTPairCut::SetQInvRange(Double_t min, Double_t max)
144 AliHBTQInvCut* cut= (AliHBTQInvCut*)FindCut(kHbtPairCutPropQInv);
145 if(cut) cut->SetRange(min,max);
146 else fCuts[fNCuts++] = new AliHBTQInvCut(min,max);
148 /**********************************************************/
149 void AliHBTPairCut::SetQOutCMSLRange(Double_t min, Double_t max)
151 AliHBTQOutCMSLCCut* cut= (AliHBTQOutCMSLCCut*)FindCut(kHbtPairCutPropQOutCMSLC);
152 if(cut) cut->SetRange(min,max);
153 else fCuts[fNCuts++] = new AliHBTQOutCMSLCCut(min,max);
156 /**********************************************************/
157 void AliHBTPairCut::SetQSideCMSLRange(Double_t min, Double_t max)
159 AliHBTQSideCMSLCCut* cut= (AliHBTQSideCMSLCCut*)FindCut(kHbtPairCutPropQSideCMSLC);
160 if(cut) cut->SetRange(min,max);
161 else fCuts[fNCuts++] = new AliHBTQSideCMSLCCut(min,max);
164 /**********************************************************/
165 void AliHBTPairCut::SetQLongCMSLRange(Double_t min, Double_t max)
167 AliHBTQLongCMSLCCut* cut= (AliHBTQLongCMSLCCut*)FindCut(kHbtPairCutPropQLongCMSLC);
168 if(cut) cut->SetRange(min,max);
169 else fCuts[fNCuts++] = new AliHBTQLongCMSLCCut(min,max);
172 /**********************************************************/
174 void AliHBTPairCut::SetKtRange(Double_t min, Double_t max)
176 AliHBTKtCut* cut= (AliHBTKtCut*)FindCut(kHbtPairCutPropKt);
177 if(cut) cut->SetRange(min,max);
178 else fCuts[fNCuts++] = new AliHBTKtCut(min,max);
180 /**********************************************************/
182 AliHbtBasePairCut* AliHBTPairCut::FindCut(AliHBTPairCutProperty property)
184 for (Int_t i = 0;i<fNCuts;i++)
186 if (fCuts[i]->GetProperty() == property)
187 return fCuts[i]; //we found the cut we were searching for
190 return 0x0; //we did not found this cut
193 /**********************************************************/
195 void AliHBTPairCut::Streamer(TBuffer &b)
197 // Stream all objects in the array to or from the I/O buffer.
202 Version_t v = b.ReadVersion(&R__s, &R__c);
205 TObject::Streamer(b);
209 for (Int_t i = 0;i<fNCuts;i++)
214 b.CheckByteCount(R__s, R__c,AliHBTPairCut::IsA());
219 R__c = b.WriteVersion(AliHBTPairCut::IsA(), kTRUE);
220 TObject::Streamer(b);
224 for (Int_t i = 0;i<fNCuts;i++)
228 b.SetByteCount(R__c, kTRUE);
232 ClassImp(AliHBTEmptyPairCut)
234 void AliHBTEmptyPairCut::Streamer(TBuffer &b)
236 AliHBTPairCut::Streamer(b);
239 ClassImp(AliHbtBasePairCut)
241 ClassImp(AliHBTQInvCut)
243 ClassImp(AliHBTKtCut)
245 ClassImp(AliHBTQSideCMSLCCut)
246 ClassImp(AliHBTQOutCMSLCCut)
247 ClassImp(AliHBTQLongCMSLCCut)