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),
40 // Default constructor
44 AliFemtoV0TrackPairCut::~AliFemtoV0TrackPairCut(){
48 bool AliFemtoV0TrackPairCut::Pass(const AliFemtoPair* pair){
49 // Check for pairs that are possibly shared/double reconstruction
56 /*if(pair->KStar()>0.15)
63 if(!(pair->Track1()->V0() && pair->Track2()->Track()))
69 if( (-(pair->Track1()->V0()->IdNeg()+1)) ==pair->Track2()->TrackId() || (-(pair->Track1()->V0()->IdPos()+1)) ==pair->Track2()->TrackId())
76 if(pair->Track1()->V0()->IdNeg()==pair->Track2()->TrackId() || pair->Track1()->V0()->IdPos()==pair->Track2()->TrackId())
84 //reject merged trakcs in TPC
87 //temp = dist > fDTPCMin;
92 //kopia z AliFemtoShareQualityPairCut.cxx
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))
108 // cout << "A shared cluster !!!" << endl;
109 // cout << "imap idx1 idx2 "
111 // << tP1idx[imap] << " " << tP2idx[imap] << endl;
117 // Different hits on the same padrow
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
131 Float_t hsmval = 0.0;
132 Float_t hsfval = 0.0;
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;
144 // if (hsfval > 0.0) {
145 // cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << " " << hsmval << " " << an << " " << nh << endl;
148 temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
149 if(!temp) return false;
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))
163 // cout << "A shared cluster !!!" << endl;
164 // cout << "imap idx1 idx2 "
166 // << tP1idx[imap] << " " << tP2idx[imap] << endl;
172 // Different hits on the same padrow
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
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;
199 // if (hsfval > 0.0) {
200 // cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << " " << hsmval << " " << an << " " << nh << endl;
203 temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
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);
223 AliFemtoString returnThis = stemp;
227 void AliFemtoV0TrackPairCut::SetV0Max(Double_t aV0Max) {
231 Double_t AliFemtoV0TrackPairCut::GetAliFemtoV0Max() const {
236 TList *AliFemtoV0TrackPairCut::ListSettings()
238 // return a list of settings in a writable form
239 TList *tListSetttings = new TList();
241 snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharequalitymax=%f", fV0Max);
242 snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharefractionmax=%f", fShareFractionMax);
243 tListSetttings->AddLast(new TObjString(buf));
245 return tListSetttings;
248 void AliFemtoV0TrackPairCut::SetRemoveSameLabel(Bool_t aRemove)
250 fRemoveSameLabel = aRemove;
253 void AliFemtoV0TrackPairCut::SetTPCOnly(Bool_t tpconly)
255 fTrackTPCOnly = tpconly;
258 void AliFemtoV0TrackPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
259 fShareQualityMax = aShareQualityMax;
262 void AliFemtoV0TrackPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
263 fShareFractionMax = aShareFractionMax;