1 /////////////////////////////////////////////////////////////////////////////
3 // AliFemtoShareQualityPairCut - a pair cut which checks for some pair //
4 // qualities that attempt to identify slit/doubly reconstructed tracks //
6 /////////////////////////////////////////////////////////////////////////////
7 /***************************************************************************
9 * $Id: AliFemtoShareQualityPairCut.cxx 50722 2011-07-21 15:18:38Z akisiel $
11 * Author: Adam Kisiel, Ohio State, kisiel@mps.ohio-state.edu
12 ***************************************************************************
14 * Description: part of STAR HBT Framework: AliFemtoMaker package
15 * a cut to remove "shared" and "split" pairs
17 ***************************************************************************
20 **************************************************************************/
22 #include "AliFemtoV0TrackPairCut.h"
27 ClassImp(AliFemtoV0TrackPairCut)
31 AliFemtoV0TrackPairCut::AliFemtoV0TrackPairCut():
35 fShareQualityMax(1.0),
36 fShareFractionMax(1.0),
43 // Default constructor
47 AliFemtoV0TrackPairCut::~AliFemtoV0TrackPairCut(){
50 AliFemtoV0TrackPairCut& AliFemtoV0TrackPairCut::operator=(const AliFemtoV0TrackPairCut& cut)
54 AliFemtoPairCut::operator=(cut);
58 fShareQualityMax = 1.0;
59 fShareFractionMax = 1.0;
70 bool AliFemtoV0TrackPairCut::Pass(const AliFemtoPair* pair){
71 // Check for pairs that are possibly shared/double reconstruction
77 if(!(pair->Track1()->V0() && pair->Track2()->Track()))
83 if( (-(pair->Track1()->V0()->IdNeg()+1)) ==pair->Track2()->TrackId() || (-(pair->Track1()->V0()->IdPos()+1)) ==pair->Track2()->TrackId())
90 if(pair->Track1()->V0()->IdNeg()==pair->Track2()->TrackId() || pair->Track1()->V0()->IdPos()==pair->Track2()->TrackId())
96 bool tempTPCEntrancePos = true;
97 bool tempTPCEntranceNeg = true;
98 bool tempTPCExitPos = true;
99 bool tempTPCExitNeg = true;
100 if(fDataType==kESD || fDataType==kAOD)
102 double distx = pair->Track1()->V0()->NominalTpcEntrancePointPos().x() - pair->Track2()->Track()->NominalTpcEntrancePoint().x();
103 double disty = pair->Track1()->V0()->NominalTpcEntrancePointPos().y() - pair->Track2()->Track()->NominalTpcEntrancePoint().y();
104 double distz = pair->Track1()->V0()->NominalTpcEntrancePointPos().z() - pair->Track2()->Track()->NominalTpcEntrancePoint().z();
105 double distPos = sqrt(distx*distx + disty*disty + distz*distz);
107 distx = pair->Track1()->V0()->NominalTpcEntrancePointNeg().x() - pair->Track2()->Track()->NominalTpcEntrancePoint().x();
108 disty = pair->Track1()->V0()->NominalTpcEntrancePointNeg().y() - pair->Track2()->Track()->NominalTpcEntrancePoint().y();
109 distz = pair->Track1()->V0()->NominalTpcEntrancePointNeg().z() - pair->Track2()->Track()->NominalTpcEntrancePoint().z();
110 double distNeg = sqrt(distx*distx + disty*disty + distz*distz);
112 double distExitX = pair->Track1()->V0()->NominalTpcExitPointPos().x() - pair->Track2()->Track()->NominalTpcExitPoint().x();
113 double distExitY = pair->Track1()->V0()->NominalTpcExitPointPos().y() - pair->Track2()->Track()->NominalTpcExitPoint().y();
114 double distExitZ = pair->Track1()->V0()->NominalTpcExitPointPos().z() - pair->Track2()->Track()->NominalTpcExitPoint().z();
115 double distExitPos = sqrt(distExitX*distExitX + distExitY*distExitY + distExitZ*distExitZ);
117 distExitX = pair->Track1()->V0()->NominalTpcExitPointNeg().x() - pair->Track2()->Track()->NominalTpcExitPoint().x();
118 distExitY = pair->Track1()->V0()->NominalTpcExitPointNeg().y() - pair->Track2()->Track()->NominalTpcExitPoint().y();
119 distExitZ = pair->Track1()->V0()->NominalTpcExitPointNeg().z() - pair->Track2()->Track()->NominalTpcExitPoint().z();
120 double distExitNeg = sqrt(distExitX*distExitX + distExitY*distExitY + distExitZ*distExitZ);
122 tempTPCEntrancePos = distPos > fDTPCMin;
123 tempTPCEntranceNeg = distNeg > fDTPCMin;
124 tempTPCExitPos = distExitPos > fDTPCExitMin;
125 tempTPCExitNeg = distExitNeg > fDTPCExitMin;
128 if(!tempTPCEntrancePos || !tempTPCEntranceNeg || !tempTPCExitPos || !tempTPCExitNeg) return false;
130 //reject merged trakcs in TPC
133 //temp = dist > fDTPCMin;
138 //kopia z AliFemtoShareQualityPairCut.cxx
145 if ((fShareFractionMax < 1.0) && ( fShareQualityMax < 1.0)) {
146 for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersPos().GetNbits(); imap++) {
147 // If both have clusters in the same row
148 if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) &&
149 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
150 // Do they share it ?
151 if (pair->Track1()->V0()->TPCsharingPos().TestBitNumber(imap) &&
152 pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
154 // cout << "A shared cluster !!!" << endl;
155 // cout << "imap idx1 idx2 "
157 // << tP1idx[imap] << " " << tP2idx[imap] << endl;
163 // Different hits on the same padrow
169 else if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) ||
170 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
171 // One track has a hit, the other does not
177 Float_t hsmval = 0.0;
178 Float_t hsfval = 0.0;
184 // if (hsmval > -0.4) {
185 // cout << "Pair quality: " << hsmval << " " << an << " " << nh << " "
186 // << (pair->Track1()->Track()) << " "
187 // << (pair->Track2()->Track()) << endl;
188 // cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
190 // if (hsfval > 0.0) {
191 // cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << " " << hsmval << " " << an << " " << nh << endl;
194 temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
195 if(!temp) return false;
201 for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersNeg().GetNbits(); imap++) {
202 // If both have clusters in the same row
203 if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) &&
204 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
205 // Do they share it ?
206 if (pair->Track1()->V0()->TPCsharingNeg().TestBitNumber(imap) &&
207 pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
209 // cout << "A shared cluster !!!" << endl;
210 // cout << "imap idx1 idx2 "
212 // << tP1idx[imap] << " " << tP2idx[imap] << endl;
218 // Different hits on the same padrow
224 else if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) ||
225 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
226 // One track has a hit, the other does not
239 // if (hsmval > -0.4) {
240 // cout << "Pair quality: " << hsmval << " " << an << " " << nh << " "
241 // << (pair->Track1()->Track()) << " "
242 // << (pair->Track2()->Track()) << endl;
243 // cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
245 // if (hsfval > 0.0) {
246 // cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << " " << hsmval << " " << an << " " << nh << endl;
249 temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
264 AliFemtoString AliFemtoV0TrackPairCut::Report(){
265 // Prepare the report from the execution
266 string stemp = "AliFemtoV0 Pair Cut - remove shared and split pairs\n"; char ctemp[100];
267 snprintf(ctemp , 100, "Number of pairs which passed:\t%ld Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
269 AliFemtoString returnThis = stemp;
273 void AliFemtoV0TrackPairCut::SetV0Max(Double_t aV0Max) {
277 Double_t AliFemtoV0TrackPairCut::GetAliFemtoV0Max() const {
282 TList *AliFemtoV0TrackPairCut::ListSettings()
284 // return a list of settings in a writable form
285 TList *tListSetttings = new TList();
287 snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharequalitymax=%f", fV0Max);
288 snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharefractionmax=%f", fShareFractionMax);
289 tListSetttings->AddLast(new TObjString(buf));
291 return tListSetttings;
294 void AliFemtoV0TrackPairCut::SetRemoveSameLabel(Bool_t aRemove)
296 fRemoveSameLabel = aRemove;
299 void AliFemtoV0TrackPairCut::SetTPCOnly(Bool_t tpconly)
301 fTrackTPCOnly = tpconly;
304 void AliFemtoV0TrackPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
305 fShareQualityMax = aShareQualityMax;
308 void AliFemtoV0TrackPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
309 fShareFractionMax = aShareFractionMax;
312 void AliFemtoV0TrackPairCut::SetDataType(AliFemtoDataType type)
317 void AliFemtoV0TrackPairCut::SetTPCEntranceSepMinimum(double dtpc)
322 void AliFemtoV0TrackPairCut::SetTPCExitSepMinimum(double dtpc)