#include "AliRsnCutPhi.h"
ClassImp(AliRsnCutPhi)
AliRsnCutPhi::AliRsnCutPhi() :
AliRsnCut("cut", AliRsnTarget::kDaughter),
fOption("")
{
SetPhiRange(0.0, 360.0);
}
AliRsnCutPhi::AliRsnCutPhi(const char *name, TString opt) :
AliRsnCut(name, AliRsnTarget::kDaughter),
fOption(opt.Data())
{
SetPhiRange(0.0, 360.0);
}
AliRsnCutPhi::AliRsnCutPhi(const AliRsnCutPhi ©) :
AliRsnCut(copy),
fOption(copy.fOption)
{
SetPhiRange(copy.fPhiRange[0], copy.fPhiRange[1]);
}
AliRsnCutPhi &AliRsnCutPhi::operator=(const AliRsnCutPhi ©)
{
AliRsnCut::operator=(copy);
if (this == ©)
return *this;
fOption=copy.fOption;
SetPhiRange(copy.fPhiRange[0], copy.fPhiRange[1]);
return (*this);
}
Bool_t AliRsnCutPhi::IsSelected(TObject *object)
{
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)
{
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)
{
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)
{
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)
{
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)
{
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;
}