]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoV0TrackPairCut.cxx
Fix Coverity
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemto / AliFemtoV0TrackPairCut.cxx
1 /////////////////////////////////////////////////////////////////////////////
2 //                                                                         //
3 // AliFemtoShareQualityPairCut - a pair cut which checks for some pair     //
4 // qualities that attempt to identify slit/doubly reconstructed tracks     //
5 //                                                                         //
6 /////////////////////////////////////////////////////////////////////////////
7 /***************************************************************************
8  *
9  * $Id: AliFemtoShareQualityPairCut.cxx 50722 2011-07-21 15:18:38Z akisiel $
10  *
11  * Author: Adam Kisiel, Ohio State, kisiel@mps.ohio-state.edu
12  ***************************************************************************
13  *
14  * Description: part of STAR HBT Framework: AliFemtoMaker package
15  *   a cut to remove "shared" and "split" pairs
16  *
17  ***************************************************************************
18  *
19  *
20  **************************************************************************/
21
22 #include "AliFemtoV0TrackPairCut.h"
23 #include <string>
24 #include <cstdio>
25
26 #ifdef __ROOT__
27 ClassImp(AliFemtoV0TrackPairCut)
28 #endif
29
30 //__________________
31 AliFemtoV0TrackPairCut::AliFemtoV0TrackPairCut():
32   fNPairsPassed(0),
33   fNPairsFailed(0),
34   fV0Max(1.0),
35   fShareQualityMax(1.0),
36   fShareFractionMax(1.0),
37   fRemoveSameLabel(0),
38   fTrackTPCOnly(0)
39 {
40   // Default constructor
41   // Nothing to do
42 }
43 //__________________
44 AliFemtoV0TrackPairCut::~AliFemtoV0TrackPairCut(){
45   /* no-op */
46 }
47 //__________________
48 AliFemtoV0TrackPairCut& AliFemtoV0TrackPairCut::operator=(const AliFemtoV0TrackPairCut& cut) 
49 {
50   if (this != &cut) {
51    
52     AliFemtoPairCut::operator=(cut);
53     fNPairsPassed = 0;
54     fNPairsFailed =0;
55     fV0Max = 1.0;
56     fShareQualityMax = 1.0;
57     fShareFractionMax = 1.0;
58     fRemoveSameLabel = 0;
59     fTrackTPCOnly =0;
60   }
61
62   return *this;
63 }
64
65 //__________________
66 bool AliFemtoV0TrackPairCut::Pass(const AliFemtoPair* pair){
67   // Check for pairs that are possibly shared/double reconstruction
68
69   bool temp = true;
70   //Track1 - V0
71   //Track2 - track
72
73   //!!!!!USUN MNIE!!!!
74   /*if(pair->KStar()>0.15)
75     {
76       return false;
77       }*/
78   //!!!!!!!!
79
80
81   if(!(pair->Track1()->V0() && pair->Track2()->Track()))
82     {
83       return false;
84     }
85   if(fTrackTPCOnly)
86     {
87       if( (-(pair->Track1()->V0()->IdNeg()+1)) ==pair->Track2()->TrackId() || (-(pair->Track1()->V0()->IdPos()+1)) ==pair->Track2()->TrackId())
88         {
89           return false;
90         }
91     }
92   else
93     {
94       if(pair->Track1()->V0()->IdNeg()==pair->Track2()->TrackId() || pair->Track1()->V0()->IdPos()==pair->Track2()->TrackId())
95         {
96           return false;
97         }
98     }
99   
100
101
102   //reject merged trakcs in TPC
103   
104
105   //temp = dist > fDTPCMin;
106   //koniec kopii
107   //if(!temp)
108   //return false;
109
110   //kopia z AliFemtoShareQualityPairCut.cxx
111   Int_t nh = 0;
112   Int_t an = 0;
113   Int_t ns = 0;
114
115  
116   
117   if ((fShareFractionMax < 1.0) && ( fShareQualityMax < 1.0)) {
118     for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersPos().GetNbits(); imap++) {
119       // If both have clusters in the same row
120       if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) && 
121           pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
122         // Do they share it ?
123         if (pair->Track1()->V0()->TPCsharingPos().TestBitNumber(imap) &&
124             pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
125           {
126             //    cout << "A shared cluster !!!" << endl;
127             //  cout << "imap idx1 idx2 " 
128             //       << imap << " "
129             //       << tP1idx[imap] << " " << tP2idx[imap] << endl;
130             an++;
131             nh+=2;
132             ns+=2;
133           }
134         
135         // Different hits on the same padrow
136         else {
137           an--;
138           nh+=2;
139         }
140       }
141       else if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) ||
142                pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
143         // One track has a hit, the other does not
144         an++;
145         nh++;
146       }
147     }
148     
149     Float_t hsmval = 0.0;
150     Float_t hsfval = 0.0;
151     
152     if (nh >0) {
153       hsmval = an*1.0/nh;
154       hsfval = ns*1.0/nh;
155     }
156     //  if (hsmval > -0.4) {
157     //   cout << "Pair quality: " << hsmval << " " << an << " " << nh << " " 
158     //        << (pair->Track1()->Track()) << " " 
159     //        << (pair->Track2()->Track()) << endl;
160     //   cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
161     //  }
162     //   if (hsfval > 0.0) {
163     //     cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << "    " << hsmval << " " << an << " " << nh << endl;
164     //   }
165     
166     temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
167     if(!temp) return false;
168
169     nh = 0;
170     an = 0;
171     ns = 0;
172
173     for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersNeg().GetNbits(); imap++) {
174       // If both have clusters in the same row
175       if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) && 
176           pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
177         // Do they share it ?
178         if (pair->Track1()->V0()->TPCsharingNeg().TestBitNumber(imap) &&
179             pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
180           {
181             //    cout << "A shared cluster !!!" << endl;
182             //  cout << "imap idx1 idx2 " 
183             //       << imap << " "
184             //       << tP1idx[imap] << " " << tP2idx[imap] << endl;
185             an++;
186             nh+=2;
187             ns+=2;
188           }
189         
190         // Different hits on the same padrow
191         else {
192           an--;
193           nh+=2;
194         }
195       }
196       else if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) ||
197                pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
198         // One track has a hit, the other does not
199         an++;
200         nh++;
201       }
202     }
203     
204     hsmval = 0.0;
205     hsfval = 0.0;
206     
207     if (nh >0) {
208       hsmval = an*1.0/nh;
209       hsfval = ns*1.0/nh;
210     }
211     //  if (hsmval > -0.4) {
212     //   cout << "Pair quality: " << hsmval << " " << an << " " << nh << " " 
213     //        << (pair->Track1()->Track()) << " " 
214     //        << (pair->Track2()->Track()) << endl;
215     //   cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
216     //  }
217     //   if (hsfval > 0.0) {
218     //     cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << "    " << hsmval << " " << an << " " << nh << endl;
219     //   }
220     
221     temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
222
223
224   }
225   else
226     temp = true;
227   //koniec kopii
228
229
230
231
232
233   return temp;
234 }
235 //__________________
236 AliFemtoString AliFemtoV0TrackPairCut::Report(){
237   // Prepare the report from the execution
238   string stemp = "AliFemtoV0 Pair Cut - remove shared and split pairs\n";  char ctemp[100];
239   snprintf(ctemp , 100, "Number of pairs which passed:\t%ld  Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
240   stemp += ctemp;
241   AliFemtoString returnThis = stemp;
242   return returnThis;}
243 //__________________
244
245 void AliFemtoV0TrackPairCut::SetV0Max(Double_t aV0Max) {
246   fV0Max = aV0Max;
247 }
248
249 Double_t AliFemtoV0TrackPairCut::GetAliFemtoV0Max() const {
250   return fV0Max;
251 }
252
253
254 TList *AliFemtoV0TrackPairCut::ListSettings()
255 {
256   // return a list of settings in a writable form
257   TList *tListSetttings = new TList();
258   char buf[200];
259   snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharequalitymax=%f", fV0Max);
260   snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharefractionmax=%f", fShareFractionMax);
261   tListSetttings->AddLast(new TObjString(buf));
262
263   return tListSetttings;
264 }
265
266 void     AliFemtoV0TrackPairCut::SetRemoveSameLabel(Bool_t aRemove)
267 {
268   fRemoveSameLabel = aRemove;
269 }
270
271 void AliFemtoV0TrackPairCut::SetTPCOnly(Bool_t tpconly)
272 {
273   fTrackTPCOnly = tpconly;
274 }
275
276 void AliFemtoV0TrackPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
277   fShareQualityMax = aShareQualityMax;
278 }
279
280 void AliFemtoV0TrackPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
281   fShareFractionMax = aShareFractionMax;
282 }