ROOT logo
/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// AliFemtoPairCutResonances - a pair cut which checks     //
// for some pair qualities that attempt to identify slit/doubly            //
// reconstructed tracks and also selects pairs based on their separation   //
// at the entrance to the TPC                                              //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

#include "AliFemtoPairCutResonances.h"
#include <string>
#include <cstdio>
#include <TMath.h>

#ifdef __ROOT__
ClassImp(AliFemtoPairCutResonances)
#endif

//__________________
AliFemtoPairCutResonances::AliFemtoPairCutResonances():
   AliFemtoShareQualityPairCut(),
   fMaxEEMinv(0.0),
   fMaxDTheta(0.0),
   fDataType(kAOD),
   fSwitchPassFail(0)
{
}
//__________________
AliFemtoPairCutResonances::AliFemtoPairCutResonances(const AliFemtoPairCutResonances& c) : 
  AliFemtoShareQualityPairCut(c),
  fMaxEEMinv(0.0),
  fMaxDTheta(0.0),
  fDataType(kAOD),
  fSwitchPassFail(0)
{
  fMaxEEMinv = c.fMaxEEMinv;
  fMaxDTheta = c.fMaxDTheta;
  fDataType = c.fDataType;
  fSwitchPassFail=c.fSwitchPassFail;
}

AliFemtoPairCutResonances& AliFemtoPairCutResonances::operator=(const AliFemtoPairCutResonances& c)
{
  if (this != &c) {
    fMaxEEMinv = c.fMaxEEMinv;
    fMaxDTheta = c.fMaxDTheta;
    fDataType = c.fDataType;
    fSwitchPassFail=c.fSwitchPassFail;
  }

  return *this;

}
//__________________
AliFemtoPairCutResonances::~AliFemtoPairCutResonances(){
}
//__________________
bool AliFemtoPairCutResonances::Pass(const AliFemtoPair* pair){
  // Accept pairs based on their TPC entrance separation and
  // quality and sharity
  bool temp = true;

  if(fDataType==kKine)
    return true;

  double me = 0.000511;
  double mPi = 0.13957018;
  double mp = 0.938272046;

  double mK0min = 0.00049;
  double mK0max = 0.00051;
  //double mK0 = 0.000497614;
  double mRhomin = 0.000765;
  double mRhomax = 0.000785;
  //double mRho = 0.00077526;
  double mLmin = 1.095;
  double mLmax = 1.135;
  //double mL = 1.115683;

  if ((pair->Track1()->Track()->Charge() * pair->Track2()->Track()->Charge()) < 0.0) {
    // double theta1 = pair->Track1()->Track()->P().Theta();
    // double theta2 = pair->Track2()->Track()->P().Theta();
    // double dtheta = TMath::Abs(theta1 - theta2);

    // check on ee pairs (gamma)
    double e1 = TMath::Sqrt(me*me + pair->Track1()->Track()->P().Mag2());
    double e2 = TMath::Sqrt(me*me + pair->Track2()->Track()->P().Mag2());
    double minvGamma = 2*me*me + 2*(e1*e2 -
			       pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
			       pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
			       pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
    if ( minvGamma < fMaxEEMinv )
       temp = false;
    //check on resonances
    double pi1 =  TMath::Sqrt(mPi*mPi + pair->Track1()->Track()->P().Mag2());
    double pi2 =  TMath::Sqrt(mPi*mPi + pair->Track2()->Track()->P().Mag2());
    double p1 =  TMath::Sqrt(mp*mp + pair->Track1()->Track()->P().Mag2());
    double p2 =  TMath::Sqrt(mp*mp + pair->Track2()->Track()->P().Mag2());
    //check on K0 and Rho
    double minv2pi = 2*mPi*mPi + 2*(pi1*pi2 -
			       pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
			       pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
			       pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
    if ( ((minv2pi>mK0min && minv2pi<mK0max) || (minv2pi>mRhomin && minv2pi<mRhomax)) )
       temp = false;
    //check on L0
    double minvpPi = 2*mp*mPi + 2*(p1*pi2 -
			       pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
			       pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
			       pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
    double minvPip = 2*mPi*mp + 2*(pi1*p2 -
			       pair->Track1()->Track()->P().x()*pair->Track2()->Track()->P().x() -
			       pair->Track1()->Track()->P().y()*pair->Track2()->Track()->P().y() -
			       pair->Track1()->Track()->P().z()*pair->Track2()->Track()->P().z());
    if( ((minvpPi>mLmin) && (minvpPi<mLmax)) || ((minvPip>mLmin) && (minvPip<mLmax)) )
       temp = false;
  }
  if (fSwitchPassFail) // choose only resonances
  {
     if (!temp) {
        temp = AliFemtoShareQualityPairCut::Pass(pair);
        if (temp) {fNPairsPassed++;}
        else fNPairsFailed++;
        return temp;
     }
     else
     {
        fNPairsFailed++;
        return false;
     }
  }
  else // cut resonances
  {
     if (temp) {
        temp = AliFemtoShareQualityPairCut::Pass(pair);
        if (temp) {fNPairsPassed++;}
        else fNPairsFailed++;
        return temp;
     }
     else
     {
        fNPairsFailed++;
        return false;
     }
  }
}
//__________________
AliFemtoString AliFemtoPairCutResonances::Report(){
  // Prepare a report from the execution
  string stemp = "AliFemtoPairCutResonances Pair Cut - remove pairs possibly coming from Gamma conversions\n";  
  char ctemp[100];
  stemp += ctemp;
  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;}
//__________________

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

  return tListSetttings;
}

void AliFemtoPairCutResonances::SetMaxEEMinv(Double_t maxeeminv)
{
  fMaxEEMinv = maxeeminv;
}

void AliFemtoPairCutResonances::SetMaxThetaDiff(Double_t maxdtheta)
{
  fMaxDTheta = maxdtheta;
}

void AliFemtoPairCutResonances::SetDataType(AliFemtoDataType type)
{
  fDataType = type;
}

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