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 53713 2011-12-20 12:31:21Z 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 "AliFemtoShareQualityPairCut.h"
27 ClassImp(AliFemtoShareQualityPairCut)
31 AliFemtoShareQualityPairCut::AliFemtoShareQualityPairCut():
34 fShareQualityMax(1.0),
35 fShareFractionMax(1.0),
38 // Default constructor
42 AliFemtoShareQualityPairCut::~AliFemtoShareQualityPairCut(){
45 AliFemtoShareQualityPairCut& AliFemtoShareQualityPairCut::operator=(const AliFemtoShareQualityPairCut& cut)
48 AliFemtoPairCut::operator=(cut);
51 fShareQualityMax = cut.fShareQualityMax;
52 fShareFractionMax = cut.fShareFractionMax;
53 fRemoveSameLabel = cut.fRemoveSameLabel;
59 bool AliFemtoShareQualityPairCut::Pass(const AliFemtoPair* pair){
60 // Check for pairs that are possibly shared/double reconstruction
67 if ((fShareFractionMax >= 1.0) && ( fShareQualityMax >= 1.0)) {
71 for (unsigned int imap=0; imap<pair->Track1()->Track()->TPCclusters().GetNbits(); imap++) {
72 // If both have clusters in the same row
73 if (pair->Track1()->Track()->TPCclusters().TestBitNumber(imap) &&
74 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
76 if (pair->Track1()->Track()->TPCsharing().TestBitNumber(imap) &&
77 pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
79 // cout << "A shared cluster !!!" << endl;
80 // cout << "imap idx1 idx2 "
82 // << tP1idx[imap] << " " << tP2idx[imap] << endl;
87 // Different hits on the same padrow
93 else if (pair->Track1()->Track()->TPCclusters().TestBitNumber(imap) ||
94 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
95 // One track has a hit, the other does not
100 Float_t hsmval = 0.0;
101 Float_t hsfval = 0.0;
107 // if (hsmval > -0.4) {
108 // cout << "Pair quality: " << hsmval << " " << an << " " << nh << " "
109 // << (pair->Track1()->Track()) << " "
110 // << (pair->Track2()->Track()) << endl;
111 // cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
113 // if (hsfval > 0.0) {
114 // cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << " " << hsmval << " " << an << " " << nh << endl;
116 if( (fShareQualityMax < 1) && (fShareFractionMax < 1) )
117 temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
118 else if (fShareQualityMax < 1)
119 temp = (hsmval < fShareQualityMax);
120 else if (fShareFractionMax < 1)
121 temp = (hsmval < fShareFractionMax);
125 if (fRemoveSameLabel) {
126 if (abs(pair->Track1()->Track()->Label()) == abs(pair->Track2()->Track()->Label())) {
127 // cout << "Found a pair with same label " << pair->Track1()->Track()->Label() << endl;
128 // cout << "Quality Sharity Passed " << hsmval << " " << hsfval << " " << pair->QInv() << " " << temp << endl;
133 temp ? fNPairsPassed++ : fNPairsFailed++;
137 AliFemtoString AliFemtoShareQualityPairCut::Report(){
138 // Prepare the report from the execution
139 string stemp = "AliFemtoShareQuality Pair Cut - remove shared and split pairs\n"; char ctemp[100];
140 snprintf(ctemp , 100, "Number of pairs which passed:\t%ld Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
142 AliFemtoString returnThis = stemp;
146 void AliFemtoShareQualityPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
147 fShareQualityMax = aShareQualityMax;
150 Double_t AliFemtoShareQualityPairCut::GetAliFemtoShareQualityMax() const {
151 return fShareQualityMax;
154 void AliFemtoShareQualityPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
155 fShareFractionMax = aShareFractionMax;
157 Double_t AliFemtoShareQualityPairCut::GetAliFemtoShareFractionMax() const {
158 return fShareFractionMax;
161 TList *AliFemtoShareQualityPairCut::ListSettings()
163 // return a list of settings in a writable form
164 TList *tListSetttings = new TList();
166 snprintf(buf, 200, "AliFemtoShareQualityPairCut.sharequalitymax=%f", fShareQualityMax);
167 snprintf(buf, 200, "AliFemtoShareQualityPairCut.sharefractionmax=%f", fShareFractionMax);
168 tListSetttings->AddLast(new TObjString(buf));
170 return tListSetttings;
173 void AliFemtoShareQualityPairCut::SetRemoveSameLabel(Bool_t aRemove)
175 fRemoveSameLabel = aRemove;