ROOT logo
#include "AliRsnCutPhi.h"

ClassImp(AliRsnCutPhi)

AliRsnCutPhi::AliRsnCutPhi() :
  AliRsnCut("cut", AliRsnTarget::kDaughter),
  fOption("")
{
   //Default constructor
  SetPhiRange(0.0, 360.0);
}

//_________________________________________________________________________________________________
AliRsnCutPhi::AliRsnCutPhi(const char *name, TString opt) :
  AliRsnCut(name, AliRsnTarget::kDaughter),
  fOption(opt.Data())
{
   //main constructor
  SetPhiRange(0.0, 360.0);
}

//_________________________________________________________________________________________________
AliRsnCutPhi::AliRsnCutPhi(const AliRsnCutPhi &copy) :
  AliRsnCut(copy),
  fOption(copy.fOption)
{
  //copy constructor
  SetPhiRange(copy.fPhiRange[0], copy.fPhiRange[1]);
}
//_________________________________________________________________________________________________
AliRsnCutPhi &AliRsnCutPhi::operator=(const AliRsnCutPhi &copy)
{
  //
  // operator =
  //
  AliRsnCut::operator=(copy);
  if (this == &copy)
    return *this;
  
  fOption=copy.fOption;
  SetPhiRange(copy.fPhiRange[0], copy.fPhiRange[1]);
  return (*this); 
}
//_________________________________________________________________________________________________
Bool_t AliRsnCutPhi::IsSelected(TObject *object)
{
  //
  // Checks if the track passes the phi cut
  //
  Bool_t accept = kFALSE;
  if (!TargetOK(object)) return accept;
  
  AliVTrack *vtrack = fDaughter->Ref2Vtrack();
  if (!vtrack) {
    AliError("Referenced daughter is not a track");
    return accept;
  }
  
  if (fOption.Contains("InTRD")) {
    if (fOption.Contains("CheckTOF"))
      return IsInsideTRD2TOF(vtrack);
    else
      return IsInsideTRD(vtrack);
  }
  if (fOption.Contains("OutTRD")) {
    if (fOption.Contains("CheckTOF"))
      return IsOutsideTRD2TOF(vtrack);
    else
      return IsOutsideTRD(vtrack);
  }
  
  Double_t value = 90.0; 
  if (fOption.Contains("OuterTPC")) value = GetTrackPhi(vtrack, 278.0);
  if (fOption.Contains("InnerTOF")) value = GetTrackPhi(vtrack, 378.0);
  if ( (value>=fPhiRange[0]) && (value<=fPhiRange[1]) ) 
    accept = kTRUE;
  else 
    accept = kFALSE;
  
  return accept;
}

//_________________________________________________________________________________________________
Bool_t AliRsnCutPhi::IsInsideTRD(AliVTrack *vtrack)
{
  //
  // Checks if track falls inside the TRD sectors
  // implemented for 2010 configuration only 
  // edge effects removed by tightening the phi cut by 5 deg 
  //
  Bool_t accept = kFALSE;
  if (!vtrack) {
    AliError("Referenced daughter is not a track");
    return accept;
  }
  Double_t value = GetTrackPhi(vtrack, 278.0);
  if ( ((value>=0.0) && (value<=35.0)) ||
       ((value>=135.0) && (value<=215.0)) ||
       ((value>=345.0) && (value<=360.0)) ) 
    accept = kTRUE;
  else 
    accept = kFALSE;
  return accept;
}
//_________________________________________________________________________________________________
Bool_t AliRsnCutPhi::IsOutsideTRD(AliVTrack *vtrack)
{
  //
  // Checks if track falls inside the TRD sectors 
  // implemented for 2010 configuration only 
  // edge effects removed by tightening the phi cut by 5 deg 
  //
  Bool_t accept = kFALSE;
  if (!vtrack) {
    AliError("Referenced daughter is not a track");
    return accept;
  }
  Double_t value = GetTrackPhi(vtrack, 278.0);
  if ( ((value>=45.0) && (value<=125.0)) ||
       ((value>=225.0) && (value<=335.0)) ) 
    accept = kTRUE;
  else 
    accept = kFALSE;
  return accept;
}

//_________________________________________________________________________________________________
Bool_t AliRsnCutPhi::IsInsideTRD2TOF(AliVTrack *vtrack)
{
  //
  // Checks if track falls inside the TRD sectors
  // implemented for 2010 configuration only 
  // edge effects removed by tightening the phi cut by 5 deg 
  //
  Bool_t accept = kFALSE;
  if (!vtrack) {
    AliError("Referenced daughter is not a track");
    return accept;
  }
  Double_t value2Tpc = GetTrackPhi(vtrack, 278.0);
  Double_t value2Tof = GetTrackPhi(vtrack, 378.0);
  if ( ((value2Tpc>=0.0) && (value2Tpc<=35.0) && (value2Tof>=0.0) && (value2Tof<=35.0)  ) ||
       ((value2Tpc>=135.0) && (value2Tpc<=215.0) && (value2Tof>=135.0) && (value2Tof<=215.0)) ||
       ((value2Tpc>=345.0) && (value2Tpc<=360.0) && (value2Tof>=345.0) && (value2Tof<=360.0)) ) 
    accept = kTRUE;
  else 
    accept = kFALSE;
  return accept;
}

//----------------------------------------------------------------------------
Bool_t AliRsnCutPhi::IsOutsideTRD2TOF(AliVTrack *vtrack)
{
  //
  // Checks if track falls inside the TRD sectors
  // implemented for 2010 configuration only 
  // edge effects removed by tightening the phi cut by 5 deg 
  //
  Bool_t accept = kFALSE;
  if (!vtrack) {
    AliError("Referenced daughter is not a track");
    return accept;
  }
  Double_t value2Tpc = GetTrackPhi(vtrack, 278.0);
  Double_t value2Tof = GetTrackPhi(vtrack, 378.0);

  if ( ((value2Tpc>=45.0) && (value2Tpc<=1255.0) && (value2Tof>=45.0) && (value2Tof<=125.0)  ) ||
       ((value2Tpc>=225.0) && (value2Tpc<=335.0) && (value2Tof>=225.0) && (value2Tof<=335.0)) )
    accept = kTRUE;
  else 
    accept = kFALSE;
  return accept;
}
//----------------------------------------------------------------------------
Double_t AliRsnCutPhi::GetTrackPhi(AliVTrack * vtrack, Double_t radius = 0.0)
{
  //
  // Extract phi from vtrack object at radius r 
  // If r==0 (default), provides phi at vertex 
  //
  Double_t pos[3]={0.,0.,0.};
  Double_t phiOut = -999.0;
  
  if (!vtrack) {
    AliError("Invalid VTrack object");
    return phiOut;
  }
  if (radius==0.0){
    phiOut=vtrack->Phi()*TMath::RadToDeg();
  } else {
    AliExternalTrackParam etp; 
    etp.CopyFromVTrack(vtrack);
    if(etp.GetXYZAt(radius, 5., pos)){
      phiOut=TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
      if (phiOut<0) phiOut+= (2*TMath::Pi()*TMath::RadToDeg());
    }
  }
  return phiOut;	
}
 AliRsnCutPhi.cxx:1
 AliRsnCutPhi.cxx:2
 AliRsnCutPhi.cxx:3
 AliRsnCutPhi.cxx:4
 AliRsnCutPhi.cxx:5
 AliRsnCutPhi.cxx:6
 AliRsnCutPhi.cxx:7
 AliRsnCutPhi.cxx:8
 AliRsnCutPhi.cxx:9
 AliRsnCutPhi.cxx:10
 AliRsnCutPhi.cxx:11
 AliRsnCutPhi.cxx:12
 AliRsnCutPhi.cxx:13
 AliRsnCutPhi.cxx:14
 AliRsnCutPhi.cxx:15
 AliRsnCutPhi.cxx:16
 AliRsnCutPhi.cxx:17
 AliRsnCutPhi.cxx:18
 AliRsnCutPhi.cxx:19
 AliRsnCutPhi.cxx:20
 AliRsnCutPhi.cxx:21
 AliRsnCutPhi.cxx:22
 AliRsnCutPhi.cxx:23
 AliRsnCutPhi.cxx:24
 AliRsnCutPhi.cxx:25
 AliRsnCutPhi.cxx:26
 AliRsnCutPhi.cxx:27
 AliRsnCutPhi.cxx:28
 AliRsnCutPhi.cxx:29
 AliRsnCutPhi.cxx:30
 AliRsnCutPhi.cxx:31
 AliRsnCutPhi.cxx:32
 AliRsnCutPhi.cxx:33
 AliRsnCutPhi.cxx:34
 AliRsnCutPhi.cxx:35
 AliRsnCutPhi.cxx:36
 AliRsnCutPhi.cxx:37
 AliRsnCutPhi.cxx:38
 AliRsnCutPhi.cxx:39
 AliRsnCutPhi.cxx:40
 AliRsnCutPhi.cxx:41
 AliRsnCutPhi.cxx:42
 AliRsnCutPhi.cxx:43
 AliRsnCutPhi.cxx:44
 AliRsnCutPhi.cxx:45
 AliRsnCutPhi.cxx:46
 AliRsnCutPhi.cxx:47
 AliRsnCutPhi.cxx:48
 AliRsnCutPhi.cxx:49
 AliRsnCutPhi.cxx:50
 AliRsnCutPhi.cxx:51
 AliRsnCutPhi.cxx:52
 AliRsnCutPhi.cxx:53
 AliRsnCutPhi.cxx:54
 AliRsnCutPhi.cxx:55
 AliRsnCutPhi.cxx:56
 AliRsnCutPhi.cxx:57
 AliRsnCutPhi.cxx:58
 AliRsnCutPhi.cxx:59
 AliRsnCutPhi.cxx:60
 AliRsnCutPhi.cxx:61
 AliRsnCutPhi.cxx:62
 AliRsnCutPhi.cxx:63
 AliRsnCutPhi.cxx:64
 AliRsnCutPhi.cxx:65
 AliRsnCutPhi.cxx:66
 AliRsnCutPhi.cxx:67
 AliRsnCutPhi.cxx:68
 AliRsnCutPhi.cxx:69
 AliRsnCutPhi.cxx:70
 AliRsnCutPhi.cxx:71
 AliRsnCutPhi.cxx:72
 AliRsnCutPhi.cxx:73
 AliRsnCutPhi.cxx:74
 AliRsnCutPhi.cxx:75
 AliRsnCutPhi.cxx:76
 AliRsnCutPhi.cxx:77
 AliRsnCutPhi.cxx:78
 AliRsnCutPhi.cxx:79
 AliRsnCutPhi.cxx:80
 AliRsnCutPhi.cxx:81
 AliRsnCutPhi.cxx:82
 AliRsnCutPhi.cxx:83
 AliRsnCutPhi.cxx:84
 AliRsnCutPhi.cxx:85
 AliRsnCutPhi.cxx:86
 AliRsnCutPhi.cxx:87
 AliRsnCutPhi.cxx:88
 AliRsnCutPhi.cxx:89
 AliRsnCutPhi.cxx:90
 AliRsnCutPhi.cxx:91
 AliRsnCutPhi.cxx:92
 AliRsnCutPhi.cxx:93
 AliRsnCutPhi.cxx:94
 AliRsnCutPhi.cxx:95
 AliRsnCutPhi.cxx:96
 AliRsnCutPhi.cxx:97
 AliRsnCutPhi.cxx:98
 AliRsnCutPhi.cxx:99
 AliRsnCutPhi.cxx:100
 AliRsnCutPhi.cxx:101
 AliRsnCutPhi.cxx:102
 AliRsnCutPhi.cxx:103
 AliRsnCutPhi.cxx:104
 AliRsnCutPhi.cxx:105
 AliRsnCutPhi.cxx:106
 AliRsnCutPhi.cxx:107
 AliRsnCutPhi.cxx:108
 AliRsnCutPhi.cxx:109
 AliRsnCutPhi.cxx:110
 AliRsnCutPhi.cxx:111
 AliRsnCutPhi.cxx:112
 AliRsnCutPhi.cxx:113
 AliRsnCutPhi.cxx:114
 AliRsnCutPhi.cxx:115
 AliRsnCutPhi.cxx:116
 AliRsnCutPhi.cxx:117
 AliRsnCutPhi.cxx:118
 AliRsnCutPhi.cxx:119
 AliRsnCutPhi.cxx:120
 AliRsnCutPhi.cxx:121
 AliRsnCutPhi.cxx:122
 AliRsnCutPhi.cxx:123
 AliRsnCutPhi.cxx:124
 AliRsnCutPhi.cxx:125
 AliRsnCutPhi.cxx:126
 AliRsnCutPhi.cxx:127
 AliRsnCutPhi.cxx:128
 AliRsnCutPhi.cxx:129
 AliRsnCutPhi.cxx:130
 AliRsnCutPhi.cxx:131
 AliRsnCutPhi.cxx:132
 AliRsnCutPhi.cxx:133
 AliRsnCutPhi.cxx:134
 AliRsnCutPhi.cxx:135
 AliRsnCutPhi.cxx:136
 AliRsnCutPhi.cxx:137
 AliRsnCutPhi.cxx:138
 AliRsnCutPhi.cxx:139
 AliRsnCutPhi.cxx:140
 AliRsnCutPhi.cxx:141
 AliRsnCutPhi.cxx:142
 AliRsnCutPhi.cxx:143
 AliRsnCutPhi.cxx:144
 AliRsnCutPhi.cxx:145
 AliRsnCutPhi.cxx:146
 AliRsnCutPhi.cxx:147
 AliRsnCutPhi.cxx:148
 AliRsnCutPhi.cxx:149
 AliRsnCutPhi.cxx:150
 AliRsnCutPhi.cxx:151
 AliRsnCutPhi.cxx:152
 AliRsnCutPhi.cxx:153
 AliRsnCutPhi.cxx:154
 AliRsnCutPhi.cxx:155
 AliRsnCutPhi.cxx:156
 AliRsnCutPhi.cxx:157
 AliRsnCutPhi.cxx:158
 AliRsnCutPhi.cxx:159
 AliRsnCutPhi.cxx:160
 AliRsnCutPhi.cxx:161
 AliRsnCutPhi.cxx:162
 AliRsnCutPhi.cxx:163
 AliRsnCutPhi.cxx:164
 AliRsnCutPhi.cxx:165
 AliRsnCutPhi.cxx:166
 AliRsnCutPhi.cxx:167
 AliRsnCutPhi.cxx:168
 AliRsnCutPhi.cxx:169
 AliRsnCutPhi.cxx:170
 AliRsnCutPhi.cxx:171
 AliRsnCutPhi.cxx:172
 AliRsnCutPhi.cxx:173
 AliRsnCutPhi.cxx:174
 AliRsnCutPhi.cxx:175
 AliRsnCutPhi.cxx:176
 AliRsnCutPhi.cxx:177
 AliRsnCutPhi.cxx:178
 AliRsnCutPhi.cxx:179
 AliRsnCutPhi.cxx:180
 AliRsnCutPhi.cxx:181
 AliRsnCutPhi.cxx:182
 AliRsnCutPhi.cxx:183
 AliRsnCutPhi.cxx:184
 AliRsnCutPhi.cxx:185
 AliRsnCutPhi.cxx:186
 AliRsnCutPhi.cxx:187
 AliRsnCutPhi.cxx:188
 AliRsnCutPhi.cxx:189
 AliRsnCutPhi.cxx:190
 AliRsnCutPhi.cxx:191
 AliRsnCutPhi.cxx:192
 AliRsnCutPhi.cxx:193
 AliRsnCutPhi.cxx:194
 AliRsnCutPhi.cxx:195
 AliRsnCutPhi.cxx:196
 AliRsnCutPhi.cxx:197
 AliRsnCutPhi.cxx:198
 AliRsnCutPhi.cxx:199