ROOT logo
/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// AliFemtoShareQualityPairCut - a pair cut which checks for some pair     //
// qualities that attempt to identify slit/doubly reconstructed tracks     //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////
/***************************************************************************
 *
 * $Id: AliFemtoShareQualityPairCut.cxx 53713 2011-12-20 12:31:21Z akisiel $
 *
 * Author: Adam Kisiel, Ohio State, kisiel@mps.ohio-state.edu
 ***************************************************************************
 *
 * Description: part of STAR HBT Framework: AliFemtoMaker package
 *   a cut to remove "shared" and "split" pairs
 *
 ***************************************************************************
 *
 *
 **************************************************************************/

#include "AliFemtoShareQualityPairCut.h"
#include <string>
#include <cstdio>

#ifdef __ROOT__
ClassImp(AliFemtoShareQualityPairCut)
#endif

//__________________
AliFemtoShareQualityPairCut::AliFemtoShareQualityPairCut():
  fNPairsPassed(0),
  fNPairsFailed(0),
  fShareQualityMax(1.0),
  fShareFractionMax(1.0),
  fRemoveSameLabel(0)
{
  // Default constructor
  // Nothing to do
}
//__________________
AliFemtoShareQualityPairCut::~AliFemtoShareQualityPairCut(){
  /* no-op */
}
AliFemtoShareQualityPairCut& AliFemtoShareQualityPairCut::operator=(const AliFemtoShareQualityPairCut& cut)
{
  if (this != &cut) {
    AliFemtoPairCut::operator=(cut);
    fNPairsPassed = 0;
    fNPairsFailed = 0;
    fShareQualityMax = cut.fShareQualityMax;
    fShareFractionMax = cut.fShareFractionMax;
    fRemoveSameLabel = cut.fRemoveSameLabel;
  }
  
  return *this;
}
//__________________
bool AliFemtoShareQualityPairCut::Pass(const AliFemtoPair* pair){
  // Check for pairs that are possibly shared/double reconstruction
  bool temp;
  
  Int_t nh = 0;
  Int_t an = 0;
  Int_t ns = 0;
  
  if ((fShareFractionMax >= 1.0) && ( fShareQualityMax >= 1.0)) {
     temp = true;
  }
  else {
     for (unsigned int imap=0; imap<pair->Track1()->Track()->TPCclusters().GetNbits(); imap++) {
        // If both have clusters in the same row
        if (pair->Track1()->Track()->TPCclusters().TestBitNumber(imap) && 
            pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
           // Do they share it ?
           if (pair->Track1()->Track()->TPCsharing().TestBitNumber(imap) &&
               pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
           {
              //	  cout << "A shared cluster !!!" << endl;
              //	cout << "imap idx1 idx2 " 
              //	     << imap << " "
              //	     << tP1idx[imap] << " " << tP2idx[imap] << endl;
              an++;
              nh+=2;
              ns+=2;
           }
           // Different hits on the same padrow
           else {
              an--;
              nh+=2;
           }
        }
        else if (pair->Track1()->Track()->TPCclusters().TestBitNumber(imap) ||
                 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
           // One track has a hit, the other does not
           an++;
           nh++;
        }
     }
     Float_t hsmval = 0.0;
     Float_t hsfval = 0.0;

     if (nh >0) {
        hsmval = an*1.0/nh;
        hsfval = ns*1.0/nh;
     }
    //  if (hsmval > -0.4) {
    //   cout << "Pair quality: " << hsmval << " " << an << " " << nh << " " 
    //        << (pair->Track1()->Track()) << " " 
    //        << (pair->Track2()->Track()) << endl;
    //   cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
    //  }
    //   if (hsfval > 0.0) {
    //     cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << "    " << hsmval << " " << an << " " << nh << endl;
    //   }
     if( (fShareQualityMax < 1) && (fShareFractionMax < 1)  )
        temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
     else if (fShareQualityMax < 1)
        temp = (hsmval < fShareQualityMax);
     else if (fShareFractionMax < 1)
        temp = (hsmval < fShareFractionMax);
     else temp = false;
  }

  if (fRemoveSameLabel) {
    if (abs(pair->Track1()->Track()->Label()) == abs(pair->Track2()->Track()->Label())) {
//       cout << "Found a pair with same label " << pair->Track1()->Track()->Label() << endl;
//       cout << "Quality Sharity Passed " << hsmval << " " << hsfval << " " << pair->QInv() << " " << temp << endl;
      temp = kFALSE;
    }
  }

  temp ? fNPairsPassed++ : fNPairsFailed++;
  return temp;
}
//__________________
AliFemtoString AliFemtoShareQualityPairCut::Report(){
  // Prepare the report from the execution
  string stemp = "AliFemtoShareQuality Pair Cut - remove shared and split pairs\n";  char ctemp[100];
  snprintf(ctemp , 100, "Number of pairs which passed:\t%ld  Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
  stemp += ctemp;
  AliFemtoString returnThis = stemp;
  return returnThis;}
//__________________

void AliFemtoShareQualityPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
  fShareQualityMax = aShareQualityMax;
}

Double_t AliFemtoShareQualityPairCut::GetAliFemtoShareQualityMax() const {
  return fShareQualityMax;
}

void AliFemtoShareQualityPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
  fShareFractionMax = aShareFractionMax;
}
Double_t AliFemtoShareQualityPairCut::GetAliFemtoShareFractionMax() const {
  return fShareFractionMax;
}

TList *AliFemtoShareQualityPairCut::ListSettings()
{
  // return a list of settings in a writable form
  TList *tListSetttings = new TList();
  char buf[200];
  snprintf(buf, 200, "AliFemtoShareQualityPairCut.sharequalitymax=%f", fShareQualityMax);
  snprintf(buf, 200, "AliFemtoShareQualityPairCut.sharefractionmax=%f", fShareFractionMax);
  tListSetttings->AddLast(new TObjString(buf));

  return tListSetttings;
}

void     AliFemtoShareQualityPairCut::SetRemoveSameLabel(Bool_t aRemove)
{
  fRemoveSameLabel = aRemove;
}
 AliFemtoShareQualityPairCut.cxx:1
 AliFemtoShareQualityPairCut.cxx:2
 AliFemtoShareQualityPairCut.cxx:3
 AliFemtoShareQualityPairCut.cxx:4
 AliFemtoShareQualityPairCut.cxx:5
 AliFemtoShareQualityPairCut.cxx:6
 AliFemtoShareQualityPairCut.cxx:7
 AliFemtoShareQualityPairCut.cxx:8
 AliFemtoShareQualityPairCut.cxx:9
 AliFemtoShareQualityPairCut.cxx:10
 AliFemtoShareQualityPairCut.cxx:11
 AliFemtoShareQualityPairCut.cxx:12
 AliFemtoShareQualityPairCut.cxx:13
 AliFemtoShareQualityPairCut.cxx:14
 AliFemtoShareQualityPairCut.cxx:15
 AliFemtoShareQualityPairCut.cxx:16
 AliFemtoShareQualityPairCut.cxx:17
 AliFemtoShareQualityPairCut.cxx:18
 AliFemtoShareQualityPairCut.cxx:19
 AliFemtoShareQualityPairCut.cxx:20
 AliFemtoShareQualityPairCut.cxx:21
 AliFemtoShareQualityPairCut.cxx:22
 AliFemtoShareQualityPairCut.cxx:23
 AliFemtoShareQualityPairCut.cxx:24
 AliFemtoShareQualityPairCut.cxx:25
 AliFemtoShareQualityPairCut.cxx:26
 AliFemtoShareQualityPairCut.cxx:27
 AliFemtoShareQualityPairCut.cxx:28
 AliFemtoShareQualityPairCut.cxx:29
 AliFemtoShareQualityPairCut.cxx:30
 AliFemtoShareQualityPairCut.cxx:31
 AliFemtoShareQualityPairCut.cxx:32
 AliFemtoShareQualityPairCut.cxx:33
 AliFemtoShareQualityPairCut.cxx:34
 AliFemtoShareQualityPairCut.cxx:35
 AliFemtoShareQualityPairCut.cxx:36
 AliFemtoShareQualityPairCut.cxx:37
 AliFemtoShareQualityPairCut.cxx:38
 AliFemtoShareQualityPairCut.cxx:39
 AliFemtoShareQualityPairCut.cxx:40
 AliFemtoShareQualityPairCut.cxx:41
 AliFemtoShareQualityPairCut.cxx:42
 AliFemtoShareQualityPairCut.cxx:43
 AliFemtoShareQualityPairCut.cxx:44
 AliFemtoShareQualityPairCut.cxx:45
 AliFemtoShareQualityPairCut.cxx:46
 AliFemtoShareQualityPairCut.cxx:47
 AliFemtoShareQualityPairCut.cxx:48
 AliFemtoShareQualityPairCut.cxx:49
 AliFemtoShareQualityPairCut.cxx:50
 AliFemtoShareQualityPairCut.cxx:51
 AliFemtoShareQualityPairCut.cxx:52
 AliFemtoShareQualityPairCut.cxx:53
 AliFemtoShareQualityPairCut.cxx:54
 AliFemtoShareQualityPairCut.cxx:55
 AliFemtoShareQualityPairCut.cxx:56
 AliFemtoShareQualityPairCut.cxx:57
 AliFemtoShareQualityPairCut.cxx:58
 AliFemtoShareQualityPairCut.cxx:59
 AliFemtoShareQualityPairCut.cxx:60
 AliFemtoShareQualityPairCut.cxx:61
 AliFemtoShareQualityPairCut.cxx:62
 AliFemtoShareQualityPairCut.cxx:63
 AliFemtoShareQualityPairCut.cxx:64
 AliFemtoShareQualityPairCut.cxx:65
 AliFemtoShareQualityPairCut.cxx:66
 AliFemtoShareQualityPairCut.cxx:67
 AliFemtoShareQualityPairCut.cxx:68
 AliFemtoShareQualityPairCut.cxx:69
 AliFemtoShareQualityPairCut.cxx:70
 AliFemtoShareQualityPairCut.cxx:71
 AliFemtoShareQualityPairCut.cxx:72
 AliFemtoShareQualityPairCut.cxx:73
 AliFemtoShareQualityPairCut.cxx:74
 AliFemtoShareQualityPairCut.cxx:75
 AliFemtoShareQualityPairCut.cxx:76
 AliFemtoShareQualityPairCut.cxx:77
 AliFemtoShareQualityPairCut.cxx:78
 AliFemtoShareQualityPairCut.cxx:79
 AliFemtoShareQualityPairCut.cxx:80
 AliFemtoShareQualityPairCut.cxx:81
 AliFemtoShareQualityPairCut.cxx:82
 AliFemtoShareQualityPairCut.cxx:83
 AliFemtoShareQualityPairCut.cxx:84
 AliFemtoShareQualityPairCut.cxx:85
 AliFemtoShareQualityPairCut.cxx:86
 AliFemtoShareQualityPairCut.cxx:87
 AliFemtoShareQualityPairCut.cxx:88
 AliFemtoShareQualityPairCut.cxx:89
 AliFemtoShareQualityPairCut.cxx:90
 AliFemtoShareQualityPairCut.cxx:91
 AliFemtoShareQualityPairCut.cxx:92
 AliFemtoShareQualityPairCut.cxx:93
 AliFemtoShareQualityPairCut.cxx:94
 AliFemtoShareQualityPairCut.cxx:95
 AliFemtoShareQualityPairCut.cxx:96
 AliFemtoShareQualityPairCut.cxx:97
 AliFemtoShareQualityPairCut.cxx:98
 AliFemtoShareQualityPairCut.cxx:99
 AliFemtoShareQualityPairCut.cxx:100
 AliFemtoShareQualityPairCut.cxx:101
 AliFemtoShareQualityPairCut.cxx:102
 AliFemtoShareQualityPairCut.cxx:103
 AliFemtoShareQualityPairCut.cxx:104
 AliFemtoShareQualityPairCut.cxx:105
 AliFemtoShareQualityPairCut.cxx:106
 AliFemtoShareQualityPairCut.cxx:107
 AliFemtoShareQualityPairCut.cxx:108
 AliFemtoShareQualityPairCut.cxx:109
 AliFemtoShareQualityPairCut.cxx:110
 AliFemtoShareQualityPairCut.cxx:111
 AliFemtoShareQualityPairCut.cxx:112
 AliFemtoShareQualityPairCut.cxx:113
 AliFemtoShareQualityPairCut.cxx:114
 AliFemtoShareQualityPairCut.cxx:115
 AliFemtoShareQualityPairCut.cxx:116
 AliFemtoShareQualityPairCut.cxx:117
 AliFemtoShareQualityPairCut.cxx:118
 AliFemtoShareQualityPairCut.cxx:119
 AliFemtoShareQualityPairCut.cxx:120
 AliFemtoShareQualityPairCut.cxx:121
 AliFemtoShareQualityPairCut.cxx:122
 AliFemtoShareQualityPairCut.cxx:123
 AliFemtoShareQualityPairCut.cxx:124
 AliFemtoShareQualityPairCut.cxx:125
 AliFemtoShareQualityPairCut.cxx:126
 AliFemtoShareQualityPairCut.cxx:127
 AliFemtoShareQualityPairCut.cxx:128
 AliFemtoShareQualityPairCut.cxx:129
 AliFemtoShareQualityPairCut.cxx:130
 AliFemtoShareQualityPairCut.cxx:131
 AliFemtoShareQualityPairCut.cxx:132
 AliFemtoShareQualityPairCut.cxx:133
 AliFemtoShareQualityPairCut.cxx:134
 AliFemtoShareQualityPairCut.cxx:135
 AliFemtoShareQualityPairCut.cxx:136
 AliFemtoShareQualityPairCut.cxx:137
 AliFemtoShareQualityPairCut.cxx:138
 AliFemtoShareQualityPairCut.cxx:139
 AliFemtoShareQualityPairCut.cxx:140
 AliFemtoShareQualityPairCut.cxx:141
 AliFemtoShareQualityPairCut.cxx:142
 AliFemtoShareQualityPairCut.cxx:143
 AliFemtoShareQualityPairCut.cxx:144
 AliFemtoShareQualityPairCut.cxx:145
 AliFemtoShareQualityPairCut.cxx:146
 AliFemtoShareQualityPairCut.cxx:147
 AliFemtoShareQualityPairCut.cxx:148
 AliFemtoShareQualityPairCut.cxx:149
 AliFemtoShareQualityPairCut.cxx:150
 AliFemtoShareQualityPairCut.cxx:151
 AliFemtoShareQualityPairCut.cxx:152
 AliFemtoShareQualityPairCut.cxx:153
 AliFemtoShareQualityPairCut.cxx:154
 AliFemtoShareQualityPairCut.cxx:155
 AliFemtoShareQualityPairCut.cxx:156
 AliFemtoShareQualityPairCut.cxx:157
 AliFemtoShareQualityPairCut.cxx:158
 AliFemtoShareQualityPairCut.cxx:159
 AliFemtoShareQualityPairCut.cxx:160
 AliFemtoShareQualityPairCut.cxx:161
 AliFemtoShareQualityPairCut.cxx:162
 AliFemtoShareQualityPairCut.cxx:163
 AliFemtoShareQualityPairCut.cxx:164
 AliFemtoShareQualityPairCut.cxx:165
 AliFemtoShareQualityPairCut.cxx:166
 AliFemtoShareQualityPairCut.cxx:167
 AliFemtoShareQualityPairCut.cxx:168
 AliFemtoShareQualityPairCut.cxx:169
 AliFemtoShareQualityPairCut.cxx:170
 AliFemtoShareQualityPairCut.cxx:171
 AliFemtoShareQualityPairCut.cxx:172
 AliFemtoShareQualityPairCut.cxx:173
 AliFemtoShareQualityPairCut.cxx:174
 AliFemtoShareQualityPairCut.cxx:175
 AliFemtoShareQualityPairCut.cxx:176