ClassImp(AliTPCReconstructor)
Double_t AliTPCReconstructor::fgCtgRange = 1.05;
+Double_t AliTPCReconstructor::fgMaxSnpTracker = 0.95; // max tangent in tracker - correspond to 3
+Double_t AliTPCReconstructor::fgMaxSnpTrack = 0.999; // tangent
//_____________________________________________________________________________
void AliTPCReconstructor::Reconstruct(AliRunLoader* runLoader) const
static void SetCtgRange(Double_t ctgRange = 1.05) {fgCtgRange = ctgRange;}
static Double_t GetCtgRange(){ return fgCtgRange;}
+ static void SetMaxSnpTracker(Double_t maxSnp) {fgMaxSnpTracker = maxSnp;}
+ static Double_t GetMaxSnpTracker(){ return fgMaxSnpTracker;}
+ static void SetMaxSnpTrack(Double_t maxSnp) {fgMaxSnpTrack = maxSnp;}
+ static Double_t GetMaxSnpTrack(){ return fgMaxSnpTrack;}
+
private:
AliTPCParam* GetTPCParam(AliRunLoader* runLoader) const;
static Double_t fgCtgRange; //! +-fCtgRange is the ctg(Theta) window used for clusterization and tracking (MI)
-
+ static Double_t fgMaxSnpTracker; // max sin of local angle - for TPC tracker
+ static Double_t fgMaxSnpTrack; // max sin of local angle - for track
ClassDef(AliTPCReconstructor, 0) // class for the TPC reconstruction
};
//-----------------------------------------------------------------
#include "TClonesArray.h"
#include "AliTPCseed.h"
+#include "AliTPCReconstructor.h"
ClassImp(AliTPCseed)
Double_t x1=fX, x2=x1+(xk-x1), dx=x2-x1;
- if (TMath::Abs(fP4*xk - fP2) >= 0.999) {
+ if (TMath::Abs(fP4*xk - fP2) >= AliTPCReconstructor::GetMaxSnpTrack()) {
return 0;
}
Double_t dy=c->GetY() - fP0, dz=c->GetZ() - fP1;
Double_t cur=fP4 + k40*dy + k41*dz, eta=fP2 + k20*dy + k21*dz;
- if (TMath::Abs(cur*fX-eta) >= 0.9) {
+ if (TMath::Abs(cur*fX-eta) >= AliTPCReconstructor::GetMaxSnpTrack()) {
return 0;
}
#include "AliTPCtrack.h"
#include "AliCluster.h"
#include "AliESDtrack.h"
+#include "AliTPCReconstructor.h"
ClassImp(AliTPCtrack)
//-----------------------------------------------------------------
// This function calculates the Y-coordinate of a track at the plane x=xk.
//-----------------------------------------------------------------
- if (TMath::Abs(fP4*fX - fP2)>0.9999) return 1e10; //patch 01 jan 06
+ if (TMath::Abs(fP4*fX - fP2)>AliTPCReconstructor::GetMaxSnpTrack()) return 0.; //patch 01 jan 06
Double_t c1=fP4*fX - fP2, r1=TMath::Sqrt(1.- c1*c1);
Double_t c2=fP4*xk - fP2;
- if (c2*c2>0.99999) {
- Int_t n=GetNumberOfClusters();
- if (n>4) cerr<<n<<"AliTPCtrack::GetYat: can't evaluate the y-coord !\n";
- return 1e10;
+ if (c2*c2>AliTPCReconstructor::GetMaxSnpTrack()) {
+ // Int_t n=GetNumberOfClusters();
+ // if (n>4) cerr<<n<<"AliTPCtrack::GetYat: can't evaluate the y-coord !\n";
+ return 0;
}
Double_t r2=TMath::Sqrt(1.- c2*c2);
return fP0 + (xk-fX)*(c1+c2)/(r1+r2);
//-----------------------------------------------------------------
// This function propagates a track to a reference plane x=xk.
//-----------------------------------------------------------------
- if (TMath::Abs(fP4*xk - fP2) >= 0.9) {
+ if (TMath::Abs(fP4*xk - fP2) >= AliTPCReconstructor::GetMaxSnpTrack()) {
// Int_t n=GetNumberOfClusters();
//if (n>4) cerr<<n<<" AliTPCtrack warning: Propagation failed !\n";
return 0;
Double_t dy=c->GetY() - fP0, dz=c->GetZ() - fP1;
Double_t cur=fP4 + k40*dy + k41*dz, eta=fP2 + k20*dy + k21*dz;
- if (TMath::Abs(cur*fX-eta) >= 0.9) {
+ if (TMath::Abs(cur*fX-eta) >= AliTPCReconstructor::GetMaxSnpTrack()) {
// Int_t n=GetNumberOfClusters();
//if (n>4) cerr<<n<<" AliTPCtrack warning: Filtering failed !\n";
return 0;
Double_t ca=cos(alpha), sa=sin(alpha);
Double_t r1=fP4*fX - fP2;
- if (TMath::Abs(r1)>=0.9999) return 0; //patch 01 jan 06
+ if (TMath::Abs(r1)>=AliTPCReconstructor::GetMaxSnpTrack()) return 0; //patch 01 jan 06
fX = x1*ca + y1*sa;
fP0=-x1*sa + y1*ca;
fP2=fP2*ca + (fP4*y1 + sqrt(1.- r1*r1))*sa;
Double_t r2=fP4*fX - fP2;
- if (TMath::Abs(r2) >= 0.99999) {
- Int_t n=GetNumberOfClusters();
- if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !\n";
+ if (TMath::Abs(r2) >= AliTPCReconstructor::GetMaxSnpTrack()) {
+ //Int_t n=GetNumberOfClusters();
+ // if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !\n";
return 0;
}
Double_t y0=fP0 + sqrt(1.- r2*r2)/fP4;
if ((fP0-y0)*fP4 >= 0.) {
- Int_t n=GetNumberOfClusters();
- if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !!!\n";
+ //Int_t n=GetNumberOfClusters();
+ // if (n>4) cerr<<n<<" AliTPCtrack warning: Rotation failed !!!\n";
return 0;
}
track->fClusterPointer[track->fRow] = c;
//
- Float_t angle2 = track->GetSnp()*track->GetSnp();
+ Double_t angle2 = track->GetSnp()*track->GetSnp();
angle2 = TMath::Sqrt(angle2/(1-angle2));
//
//SET NEW Track Point
Float_t z = TMath::Abs(fParam->GetZLength()-TMath::Abs(seed->GetZ()));
Int_t ctype = cl->GetType();
Float_t padlength= GetPadPitchLength(seed->fRow);
- Float_t angle2 = seed->GetSnp()*seed->GetSnp();
+ Double_t angle2 = seed->GetSnp()*seed->GetSnp();
angle2 = angle2/(1-angle2);
//
//cluster "quality"
Int_t ctype = cl->GetType();
Float_t padlength= GetPadPitchLength(seed->fRow);
//
- Float_t angle2 = seed->GetSnp()*seed->GetSnp();
+ Double_t angle2 = seed->GetSnp()*seed->GetSnp();
// if (angle2<0.6) angle2 = 0.6;
angle2 = seed->GetTgl()*seed->GetTgl()*(1+angle2/(1-angle2));
//
if (TMath::Abs(angle-t.GetAlpha())>0.001){
Double_t rotation = angle-t.GetAlpha();
t.fRelativeSector= relativesector;
- t.Rotate(rotation);
+ if (!t.Rotate(rotation)) return 0;
}
- t.PropagateTo(x);
+ if (!t.PropagateTo(x)) return 0;
//
t.fCurrentCluster = cl;
t.fRow = nr;
}
}
}
- if (fIteration>1) {t.fNFoundable++; return 0;} // not look for new cluster during refitting
+ if (TMath::Abs(t.GetSnp())>AliTPCReconstructor::GetMaxSnpTracker()) return 0; // cut on angle
+ if (fIteration>1){
+ // not look for new cluster during refitting
+ t.fNFoundable++;
+ return 0;
+ }
//
UInt_t index=0;
// if (TMath::Abs(t.GetSnp())>0.95 || TMath::Abs(x*t.GetC()-t.GetEta())>0.95) return 0;// patch 28 fev 06
}
else
{
- if (TMath::Abs(z)<(AliTPCReconstructor::GetCtgRange()*x+10) && TMath::Abs(z)<fParam->GetZLength() ) t.fNFoundable++;
+ if (TMath::Abs(z)<(AliTPCReconstructor::GetCtgRange()*x+10) && TMath::Abs(z)<fParam->GetZLength() && (TMath::Abs(t.GetSnp())<AliTPCReconstructor::GetMaxSnpTracker()))
+ t.fNFoundable++;
else
return 0;
}
//y = t.GetY();
}
//
-
+ if (TMath::Abs(t.GetSnp())>AliTPCReconstructor::GetMaxSnpTracker()) return 0;
AliTPCRow &krow=GetRow(t.fRelativeSector,nr);
if (TMath::Abs(TMath::Abs(y)-ymax)<krow.fDeadZone){
}
else
{
- if (TMath::Abs(t.GetZ())<(AliTPCReconstructor::GetCtgRange()*t.GetX()+10)) t.fNFoundable++;
+ if (TMath::Abs(t.GetZ())<(AliTPCReconstructor::GetCtgRange()*t.GetX()+10) && (TMath::Abs(t.GetSnp())<AliTPCReconstructor::GetMaxSnpTracker())) t.fNFoundable++;
else
return 0;
}
Float_t padlength = GetPadPitchLength(row);
//
Float_t sresy = (seed->fSector < fParam->GetNSector()/2) ? 0.2 :0.3;
- Float_t angulary = seed->GetSnp();
+ Double_t angulary = seed->GetSnp();
angulary = angulary*angulary/(1-angulary*angulary);
seed->fCurrentSigmaY2 = sd2+padlength*padlength*angulary/12.+sresy*sresy;
//