]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoV0TrackPairCut.cxx
Adding V0 femtoscopy analysis
[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 bool AliFemtoV0TrackPairCut::Pass(const AliFemtoPair* pair){
49   // Check for pairs that are possibly shared/double reconstruction
50
51   bool temp = true;
52   //Track1 - V0
53   //Track2 - track
54
55   //!!!!!USUN MNIE!!!!
56   /*if(pair->KStar()>0.15)
57     {
58       return false;
59       }*/
60   //!!!!!!!!
61
62
63   if(!(pair->Track1()->V0() && pair->Track2()->Track()))
64     {
65       return false;
66     }
67   if(fTrackTPCOnly)
68     {
69       if( (-(pair->Track1()->V0()->IdNeg()+1)) ==pair->Track2()->TrackId() || (-(pair->Track1()->V0()->IdPos()+1)) ==pair->Track2()->TrackId())
70         {
71           return false;
72         }
73     }
74   else
75     {
76       if(pair->Track1()->V0()->IdNeg()==pair->Track2()->TrackId() || pair->Track1()->V0()->IdPos()==pair->Track2()->TrackId())
77         {
78           return false;
79         }
80     }
81   
82
83
84   //reject merged trakcs in TPC
85   
86
87   //temp = dist > fDTPCMin;
88   //koniec kopii
89   //if(!temp)
90   //return false;
91
92   //kopia z AliFemtoShareQualityPairCut.cxx
93   Int_t nh = 0;
94   Int_t an = 0;
95   Int_t ns = 0;
96
97  
98   
99   if ((fShareFractionMax < 1.0) && ( fShareQualityMax < 1.0)) {
100     for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersPos().GetNbits(); imap++) {
101       // If both have clusters in the same row
102       if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) && 
103           pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
104         // Do they share it ?
105         if (pair->Track1()->V0()->TPCsharingPos().TestBitNumber(imap) &&
106             pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
107           {
108             //    cout << "A shared cluster !!!" << endl;
109             //  cout << "imap idx1 idx2 " 
110             //       << imap << " "
111             //       << tP1idx[imap] << " " << tP2idx[imap] << endl;
112             an++;
113             nh+=2;
114             ns+=2;
115           }
116         
117         // Different hits on the same padrow
118         else {
119           an--;
120           nh+=2;
121         }
122       }
123       else if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) ||
124                pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
125         // One track has a hit, the other does not
126         an++;
127         nh++;
128       }
129     }
130     
131     Float_t hsmval = 0.0;
132     Float_t hsfval = 0.0;
133     
134     if (nh >0) {
135       hsmval = an*1.0/nh;
136       hsfval = ns*1.0/nh;
137     }
138     //  if (hsmval > -0.4) {
139     //   cout << "Pair quality: " << hsmval << " " << an << " " << nh << " " 
140     //        << (pair->Track1()->Track()) << " " 
141     //        << (pair->Track2()->Track()) << endl;
142     //   cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
143     //  }
144     //   if (hsfval > 0.0) {
145     //     cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << "    " << hsmval << " " << an << " " << nh << endl;
146     //   }
147     
148     temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
149     if(!temp) return false;
150
151     nh = 0;
152     an = 0;
153     ns = 0;
154
155     for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersNeg().GetNbits(); imap++) {
156       // If both have clusters in the same row
157       if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) && 
158           pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
159         // Do they share it ?
160         if (pair->Track1()->V0()->TPCsharingNeg().TestBitNumber(imap) &&
161             pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
162           {
163             //    cout << "A shared cluster !!!" << endl;
164             //  cout << "imap idx1 idx2 " 
165             //       << imap << " "
166             //       << tP1idx[imap] << " " << tP2idx[imap] << endl;
167             an++;
168             nh+=2;
169             ns+=2;
170           }
171         
172         // Different hits on the same padrow
173         else {
174           an--;
175           nh+=2;
176         }
177       }
178       else if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) ||
179                pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
180         // One track has a hit, the other does not
181         an++;
182         nh++;
183       }
184     }
185     
186     hsmval = 0.0;
187     hsfval = 0.0;
188     
189     if (nh >0) {
190       hsmval = an*1.0/nh;
191       hsfval = ns*1.0/nh;
192     }
193     //  if (hsmval > -0.4) {
194     //   cout << "Pair quality: " << hsmval << " " << an << " " << nh << " " 
195     //        << (pair->Track1()->Track()) << " " 
196     //        << (pair->Track2()->Track()) << endl;
197     //   cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
198     //  }
199     //   if (hsfval > 0.0) {
200     //     cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << "    " << hsmval << " " << an << " " << nh << endl;
201     //   }
202     
203     temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
204
205
206   }
207   else
208     temp = true;
209   //koniec kopii
210
211
212
213
214
215   return temp;
216 }
217 //__________________
218 AliFemtoString AliFemtoV0TrackPairCut::Report(){
219   // Prepare the report from the execution
220   string stemp = "AliFemtoV0 Pair Cut - remove shared and split pairs\n";  char ctemp[100];
221   snprintf(ctemp , 100, "Number of pairs which passed:\t%ld  Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
222   stemp += ctemp;
223   AliFemtoString returnThis = stemp;
224   return returnThis;}
225 //__________________
226
227 void AliFemtoV0TrackPairCut::SetV0Max(Double_t aV0Max) {
228   fV0Max = aV0Max;
229 }
230
231 Double_t AliFemtoV0TrackPairCut::GetAliFemtoV0Max() const {
232   return fV0Max;
233 }
234
235
236 TList *AliFemtoV0TrackPairCut::ListSettings()
237 {
238   // return a list of settings in a writable form
239   TList *tListSetttings = new TList();
240   char buf[200];
241   snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharequalitymax=%f", fV0Max);
242   snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharefractionmax=%f", fShareFractionMax);
243   tListSetttings->AddLast(new TObjString(buf));
244
245   return tListSetttings;
246 }
247
248 void     AliFemtoV0TrackPairCut::SetRemoveSameLabel(Bool_t aRemove)
249 {
250   fRemoveSameLabel = aRemove;
251 }
252
253 void AliFemtoV0TrackPairCut::SetTPCOnly(Bool_t tpconly)
254 {
255   fTrackTPCOnly = tpconly;
256 }
257
258 void AliFemtoV0TrackPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
259   fShareQualityMax = aShareQualityMax;
260 }
261
262 void AliFemtoV0TrackPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
263   fShareFractionMax = aShareFractionMax;
264 }