ROOT logo
/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// AliFemtoShareQualityQAPairCut - a pair cut which checks for some pair     //
// qualities that attempt to identify slit/doubly reconstructed tracks     //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////
/***************************************************************************
 *
 * $Id: AliFemtoShareQualityQAPairCut.cxx 24360 2008-03-10 09:48:27Z 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 "AliFemtoShareQualityQAPairCut.h"
#include <string>
#include <cstdio>

#ifdef __ROOT__
ClassImp(AliFemtoShareQualityQAPairCut)
#endif

//__________________
AliFemtoShareQualityQAPairCut::AliFemtoShareQualityQAPairCut():
  fNPairsPassed(0),
  fNPairsFailed(0),
  fShareQualityMax(1.0),
  fShareQualitymin(-0.5),
  fShareFractionMax(1.0),
  fShareFractionmin(0.0),
  fRemoveSameLabel(0),
  fShareQualityQASwitch(0),
  fShareFractionQASwitch(0)
{ 
  fShareQualityQASwitch  = false;
  fShareQualityQAExclusionZone[0] = -0.5;
  fShareQualityQAExclusionZone[1] = 1.0;
  fShareFractionQASwitch = false; 
  fShareFractionQAExclusionZone[0] = 0.0;
  fShareFractionQAExclusionZone[1] = 1.0;
}

//__________________
AliFemtoShareQualityQAPairCut::~AliFemtoShareQualityQAPairCut(){
  /* no-op */
}
//__________________
AliFemtoShareQualityQAPairCut& AliFemtoShareQualityQAPairCut::operator=(const AliFemtoShareQualityQAPairCut& cut)
{
  if (this != &cut) {
    AliFemtoPairCut::operator=(cut);
    fNPairsPassed = 0;
    fNPairsFailed = 0;
    fShareQualityMax = 1.0;
    fShareQualitymin = -0.5;
    fShareFractionMax = 1.0;
    fShareFractionmin = 0.0;
    fRemoveSameLabel = 0;
    fShareQualityQASwitch = 0;
    fShareFractionQASwitch = 0;
    fShareQualityQASwitch  = cut.fShareQualityQASwitch;
    fShareQualityQAExclusionZone[0]  = cut.fShareQualityQAExclusionZone[0];
    fShareQualityQAExclusionZone[1]  = cut.fShareQualityQAExclusionZone[1];
    fShareFractionQASwitch = cut.fShareFractionQASwitch; 
    fShareFractionQAExclusionZone[0]  = cut.fShareFractionQAExclusionZone[0];
    fShareFractionQAExclusionZone[1]  = cut.fShareFractionQAExclusionZone[1];
  }

  return *this;
  
}
//__________________
bool AliFemtoShareQualityQAPairCut::Pass(const AliFemtoPair* pair){
  // Check for pairs that are possibly shared/double reconstruction
  bool pass;
  
  Int_t nh = 0;
  Int_t an = 0;
  Int_t ns = 0;
  
  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;
//   }

  // Determine if pair pass/fail cuts:
  if (fShareQualityQASwitch) {
    pass = (((hsmval >= fShareQualitymin)  && (hsmval < fShareQualityQAExclusionZone[0]))  || 
	    ((hsmval >= fShareQualityQAExclusionZone[1])  && (hsmval < fShareQualityMax))) &&
      (hsfval >= fShareFractionmin) && (hsfval < fShareFractionMax);
  }
  else if (fShareFractionQASwitch) {
    pass = (((hsfval >= fShareFractionmin)  && (hsfval < fShareFractionQAExclusionZone[0]))  || 
	    ((hsfval >= fShareFractionQAExclusionZone[1])  && (hsfval < fShareFractionMax))) &&
      (hsmval >= fShareQualitymin) && (hsmval < fShareQualityMax);
  }
  else {
    pass = (hsmval >= fShareQualitymin)  && (hsmval < fShareQualityMax) && 
      (hsfval >= fShareFractionmin) && (hsfval < fShareFractionMax);
  }

  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() << " " << pass << endl;
      pass = kFALSE;
    }
  }

  pass ? fNPairsPassed++ : fNPairsFailed++;
  return pass;
}
//__________________
AliFemtoString AliFemtoShareQualityQAPairCut::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 AliFemtoShareQualityQAPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
  fShareQualityMax = aShareQualityMax;
}

void AliFemtoShareQualityQAPairCut::SetShareQualitymin(Double_t aShareQualitymin) {
  fShareQualitymin = aShareQualitymin;
}

void AliFemtoShareQualityQAPairCut::SetShareQualityQASwitch(bool aSwitch) {
  fShareQualityQASwitch = aSwitch;
}

void AliFemtoShareQualityQAPairCut::SetShareQualityQAExclusionZone(Double_t lo, Double_t hi) {
  fShareQualityQAExclusionZone[0] = lo;
  fShareQualityQAExclusionZone[1] = hi;
}

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

void AliFemtoShareQualityQAPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
  fShareFractionMax = aShareFractionMax;
}

void AliFemtoShareQualityQAPairCut::SetShareFractionmin(Double_t aShareFractionmin) {
  fShareFractionmin = aShareFractionmin;
}

void AliFemtoShareQualityQAPairCut::SetShareFractionQASwitch(bool aSwitch) {
  fShareFractionQASwitch = aSwitch;
}

void AliFemtoShareQualityQAPairCut::SetShareFractionQAExclusionZone(Double_t lo, Double_t hi) {
  fShareFractionQAExclusionZone[0] = lo;
  fShareFractionQAExclusionZone[1] = hi;
}

Double_t AliFemtoShareQualityQAPairCut::GetAliFemtoShareFractionMax() const {
  return fShareFractionMax;
}

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

  return tListSetttings;
}

void     AliFemtoShareQualityQAPairCut::SetRemoveSameLabel(Bool_t aRemove)
{
  fRemoveSameLabel = aRemove;
}
 AliFemtoShareQualityQAPairCut.cxx:1
 AliFemtoShareQualityQAPairCut.cxx:2
 AliFemtoShareQualityQAPairCut.cxx:3
 AliFemtoShareQualityQAPairCut.cxx:4
 AliFemtoShareQualityQAPairCut.cxx:5
 AliFemtoShareQualityQAPairCut.cxx:6
 AliFemtoShareQualityQAPairCut.cxx:7
 AliFemtoShareQualityQAPairCut.cxx:8
 AliFemtoShareQualityQAPairCut.cxx:9
 AliFemtoShareQualityQAPairCut.cxx:10
 AliFemtoShareQualityQAPairCut.cxx:11
 AliFemtoShareQualityQAPairCut.cxx:12
 AliFemtoShareQualityQAPairCut.cxx:13
 AliFemtoShareQualityQAPairCut.cxx:14
 AliFemtoShareQualityQAPairCut.cxx:15
 AliFemtoShareQualityQAPairCut.cxx:16
 AliFemtoShareQualityQAPairCut.cxx:17
 AliFemtoShareQualityQAPairCut.cxx:18
 AliFemtoShareQualityQAPairCut.cxx:19
 AliFemtoShareQualityQAPairCut.cxx:20
 AliFemtoShareQualityQAPairCut.cxx:21
 AliFemtoShareQualityQAPairCut.cxx:22
 AliFemtoShareQualityQAPairCut.cxx:23
 AliFemtoShareQualityQAPairCut.cxx:24
 AliFemtoShareQualityQAPairCut.cxx:25
 AliFemtoShareQualityQAPairCut.cxx:26
 AliFemtoShareQualityQAPairCut.cxx:27
 AliFemtoShareQualityQAPairCut.cxx:28
 AliFemtoShareQualityQAPairCut.cxx:29
 AliFemtoShareQualityQAPairCut.cxx:30
 AliFemtoShareQualityQAPairCut.cxx:31
 AliFemtoShareQualityQAPairCut.cxx:32
 AliFemtoShareQualityQAPairCut.cxx:33
 AliFemtoShareQualityQAPairCut.cxx:34
 AliFemtoShareQualityQAPairCut.cxx:35
 AliFemtoShareQualityQAPairCut.cxx:36
 AliFemtoShareQualityQAPairCut.cxx:37
 AliFemtoShareQualityQAPairCut.cxx:38
 AliFemtoShareQualityQAPairCut.cxx:39
 AliFemtoShareQualityQAPairCut.cxx:40
 AliFemtoShareQualityQAPairCut.cxx:41
 AliFemtoShareQualityQAPairCut.cxx:42
 AliFemtoShareQualityQAPairCut.cxx:43
 AliFemtoShareQualityQAPairCut.cxx:44
 AliFemtoShareQualityQAPairCut.cxx:45
 AliFemtoShareQualityQAPairCut.cxx:46
 AliFemtoShareQualityQAPairCut.cxx:47
 AliFemtoShareQualityQAPairCut.cxx:48
 AliFemtoShareQualityQAPairCut.cxx:49
 AliFemtoShareQualityQAPairCut.cxx:50
 AliFemtoShareQualityQAPairCut.cxx:51
 AliFemtoShareQualityQAPairCut.cxx:52
 AliFemtoShareQualityQAPairCut.cxx:53
 AliFemtoShareQualityQAPairCut.cxx:54
 AliFemtoShareQualityQAPairCut.cxx:55
 AliFemtoShareQualityQAPairCut.cxx:56
 AliFemtoShareQualityQAPairCut.cxx:57
 AliFemtoShareQualityQAPairCut.cxx:58
 AliFemtoShareQualityQAPairCut.cxx:59
 AliFemtoShareQualityQAPairCut.cxx:60
 AliFemtoShareQualityQAPairCut.cxx:61
 AliFemtoShareQualityQAPairCut.cxx:62
 AliFemtoShareQualityQAPairCut.cxx:63
 AliFemtoShareQualityQAPairCut.cxx:64
 AliFemtoShareQualityQAPairCut.cxx:65
 AliFemtoShareQualityQAPairCut.cxx:66
 AliFemtoShareQualityQAPairCut.cxx:67
 AliFemtoShareQualityQAPairCut.cxx:68
 AliFemtoShareQualityQAPairCut.cxx:69
 AliFemtoShareQualityQAPairCut.cxx:70
 AliFemtoShareQualityQAPairCut.cxx:71
 AliFemtoShareQualityQAPairCut.cxx:72
 AliFemtoShareQualityQAPairCut.cxx:73
 AliFemtoShareQualityQAPairCut.cxx:74
 AliFemtoShareQualityQAPairCut.cxx:75
 AliFemtoShareQualityQAPairCut.cxx:76
 AliFemtoShareQualityQAPairCut.cxx:77
 AliFemtoShareQualityQAPairCut.cxx:78
 AliFemtoShareQualityQAPairCut.cxx:79
 AliFemtoShareQualityQAPairCut.cxx:80
 AliFemtoShareQualityQAPairCut.cxx:81
 AliFemtoShareQualityQAPairCut.cxx:82
 AliFemtoShareQualityQAPairCut.cxx:83
 AliFemtoShareQualityQAPairCut.cxx:84
 AliFemtoShareQualityQAPairCut.cxx:85
 AliFemtoShareQualityQAPairCut.cxx:86
 AliFemtoShareQualityQAPairCut.cxx:87
 AliFemtoShareQualityQAPairCut.cxx:88
 AliFemtoShareQualityQAPairCut.cxx:89
 AliFemtoShareQualityQAPairCut.cxx:90
 AliFemtoShareQualityQAPairCut.cxx:91
 AliFemtoShareQualityQAPairCut.cxx:92
 AliFemtoShareQualityQAPairCut.cxx:93
 AliFemtoShareQualityQAPairCut.cxx:94
 AliFemtoShareQualityQAPairCut.cxx:95
 AliFemtoShareQualityQAPairCut.cxx:96
 AliFemtoShareQualityQAPairCut.cxx:97
 AliFemtoShareQualityQAPairCut.cxx:98
 AliFemtoShareQualityQAPairCut.cxx:99
 AliFemtoShareQualityQAPairCut.cxx:100
 AliFemtoShareQualityQAPairCut.cxx:101
 AliFemtoShareQualityQAPairCut.cxx:102
 AliFemtoShareQualityQAPairCut.cxx:103
 AliFemtoShareQualityQAPairCut.cxx:104
 AliFemtoShareQualityQAPairCut.cxx:105
 AliFemtoShareQualityQAPairCut.cxx:106
 AliFemtoShareQualityQAPairCut.cxx:107
 AliFemtoShareQualityQAPairCut.cxx:108
 AliFemtoShareQualityQAPairCut.cxx:109
 AliFemtoShareQualityQAPairCut.cxx:110
 AliFemtoShareQualityQAPairCut.cxx:111
 AliFemtoShareQualityQAPairCut.cxx:112
 AliFemtoShareQualityQAPairCut.cxx:113
 AliFemtoShareQualityQAPairCut.cxx:114
 AliFemtoShareQualityQAPairCut.cxx:115
 AliFemtoShareQualityQAPairCut.cxx:116
 AliFemtoShareQualityQAPairCut.cxx:117
 AliFemtoShareQualityQAPairCut.cxx:118
 AliFemtoShareQualityQAPairCut.cxx:119
 AliFemtoShareQualityQAPairCut.cxx:120
 AliFemtoShareQualityQAPairCut.cxx:121
 AliFemtoShareQualityQAPairCut.cxx:122
 AliFemtoShareQualityQAPairCut.cxx:123
 AliFemtoShareQualityQAPairCut.cxx:124
 AliFemtoShareQualityQAPairCut.cxx:125
 AliFemtoShareQualityQAPairCut.cxx:126
 AliFemtoShareQualityQAPairCut.cxx:127
 AliFemtoShareQualityQAPairCut.cxx:128
 AliFemtoShareQualityQAPairCut.cxx:129
 AliFemtoShareQualityQAPairCut.cxx:130
 AliFemtoShareQualityQAPairCut.cxx:131
 AliFemtoShareQualityQAPairCut.cxx:132
 AliFemtoShareQualityQAPairCut.cxx:133
 AliFemtoShareQualityQAPairCut.cxx:134
 AliFemtoShareQualityQAPairCut.cxx:135
 AliFemtoShareQualityQAPairCut.cxx:136
 AliFemtoShareQualityQAPairCut.cxx:137
 AliFemtoShareQualityQAPairCut.cxx:138
 AliFemtoShareQualityQAPairCut.cxx:139
 AliFemtoShareQualityQAPairCut.cxx:140
 AliFemtoShareQualityQAPairCut.cxx:141
 AliFemtoShareQualityQAPairCut.cxx:142
 AliFemtoShareQualityQAPairCut.cxx:143
 AliFemtoShareQualityQAPairCut.cxx:144
 AliFemtoShareQualityQAPairCut.cxx:145
 AliFemtoShareQualityQAPairCut.cxx:146
 AliFemtoShareQualityQAPairCut.cxx:147
 AliFemtoShareQualityQAPairCut.cxx:148
 AliFemtoShareQualityQAPairCut.cxx:149
 AliFemtoShareQualityQAPairCut.cxx:150
 AliFemtoShareQualityQAPairCut.cxx:151
 AliFemtoShareQualityQAPairCut.cxx:152
 AliFemtoShareQualityQAPairCut.cxx:153
 AliFemtoShareQualityQAPairCut.cxx:154
 AliFemtoShareQualityQAPairCut.cxx:155
 AliFemtoShareQualityQAPairCut.cxx:156
 AliFemtoShareQualityQAPairCut.cxx:157
 AliFemtoShareQualityQAPairCut.cxx:158
 AliFemtoShareQualityQAPairCut.cxx:159
 AliFemtoShareQualityQAPairCut.cxx:160
 AliFemtoShareQualityQAPairCut.cxx:161
 AliFemtoShareQualityQAPairCut.cxx:162
 AliFemtoShareQualityQAPairCut.cxx:163
 AliFemtoShareQualityQAPairCut.cxx:164
 AliFemtoShareQualityQAPairCut.cxx:165
 AliFemtoShareQualityQAPairCut.cxx:166
 AliFemtoShareQualityQAPairCut.cxx:167
 AliFemtoShareQualityQAPairCut.cxx:168
 AliFemtoShareQualityQAPairCut.cxx:169
 AliFemtoShareQualityQAPairCut.cxx:170
 AliFemtoShareQualityQAPairCut.cxx:171
 AliFemtoShareQualityQAPairCut.cxx:172
 AliFemtoShareQualityQAPairCut.cxx:173
 AliFemtoShareQualityQAPairCut.cxx:174
 AliFemtoShareQualityQAPairCut.cxx:175
 AliFemtoShareQualityQAPairCut.cxx:176
 AliFemtoShareQualityQAPairCut.cxx:177
 AliFemtoShareQualityQAPairCut.cxx:178
 AliFemtoShareQualityQAPairCut.cxx:179
 AliFemtoShareQualityQAPairCut.cxx:180
 AliFemtoShareQualityQAPairCut.cxx:181
 AliFemtoShareQualityQAPairCut.cxx:182
 AliFemtoShareQualityQAPairCut.cxx:183
 AliFemtoShareQualityQAPairCut.cxx:184
 AliFemtoShareQualityQAPairCut.cxx:185
 AliFemtoShareQualityQAPairCut.cxx:186
 AliFemtoShareQualityQAPairCut.cxx:187
 AliFemtoShareQualityQAPairCut.cxx:188
 AliFemtoShareQualityQAPairCut.cxx:189
 AliFemtoShareQualityQAPairCut.cxx:190
 AliFemtoShareQualityQAPairCut.cxx:191
 AliFemtoShareQualityQAPairCut.cxx:192
 AliFemtoShareQualityQAPairCut.cxx:193
 AliFemtoShareQualityQAPairCut.cxx:194
 AliFemtoShareQualityQAPairCut.cxx:195
 AliFemtoShareQualityQAPairCut.cxx:196
 AliFemtoShareQualityQAPairCut.cxx:197
 AliFemtoShareQualityQAPairCut.cxx:198
 AliFemtoShareQualityQAPairCut.cxx:199
 AliFemtoShareQualityQAPairCut.cxx:200
 AliFemtoShareQualityQAPairCut.cxx:201
 AliFemtoShareQualityQAPairCut.cxx:202
 AliFemtoShareQualityQAPairCut.cxx:203
 AliFemtoShareQualityQAPairCut.cxx:204
 AliFemtoShareQualityQAPairCut.cxx:205
 AliFemtoShareQualityQAPairCut.cxx:206
 AliFemtoShareQualityQAPairCut.cxx:207
 AliFemtoShareQualityQAPairCut.cxx:208
 AliFemtoShareQualityQAPairCut.cxx:209
 AliFemtoShareQualityQAPairCut.cxx:210
 AliFemtoShareQualityQAPairCut.cxx:211
 AliFemtoShareQualityQAPairCut.cxx:212
 AliFemtoShareQualityQAPairCut.cxx:213
 AliFemtoShareQualityQAPairCut.cxx:214
 AliFemtoShareQualityQAPairCut.cxx:215
 AliFemtoShareQualityQAPairCut.cxx:216
 AliFemtoShareQualityQAPairCut.cxx:217
 AliFemtoShareQualityQAPairCut.cxx:218
 AliFemtoShareQualityQAPairCut.cxx:219
 AliFemtoShareQualityQAPairCut.cxx:220
 AliFemtoShareQualityQAPairCut.cxx:221
 AliFemtoShareQualityQAPairCut.cxx:222
 AliFemtoShareQualityQAPairCut.cxx:223
 AliFemtoShareQualityQAPairCut.cxx:224
 AliFemtoShareQualityQAPairCut.cxx:225
 AliFemtoShareQualityQAPairCut.cxx:226
 AliFemtoShareQualityQAPairCut.cxx:227
 AliFemtoShareQualityQAPairCut.cxx:228
 AliFemtoShareQualityQAPairCut.cxx:229
 AliFemtoShareQualityQAPairCut.cxx:230