ClassImp(AliTRDtrack)
- AliTRDtracklet::AliTRDtracklet():fY(0),fX(0),fAlpha(0),fSigma2(0),fP0(0),fP1(0),fNFound(0),fNCross(0),fPlane(0),fExpectedSigma2(0),fChi2(0){
+ AliTRDtracklet::AliTRDtracklet():fY(0),fX(0),fAlpha(0),fSigma2(0),fP0(0),fP1(0),fNFound(0),fNCross(0),fPlane(0),fExpectedSigma2(0),fChi2(0),fMaxPos(0),fMaxPos4(0),fMaxPos5(0){
}
//_____________________________________________________________________________
SetNumberOfClusters(1);
fdEdx=0.;
+ fdEdxT=0.;
fDE=0.;
for (Int_t i=0;i<kNPlane;i++){
fdEdxPlane[i] = 0.;
fIndex[i] = 0;
fIndexBackup[i] = 0; //bacup indexes MI
}
+ for (Int_t i=0;i<3;i++) { fBudget[i]=0;};
fBackupTrack =0;
}
SetChi2(t.GetChi2());
fdEdx=t.fdEdx;
+ fdEdxT=t.fdEdxT;
fDE=t.fDE;
for (Int_t i=0;i<kNPlane;i++){
fdEdxPlane[i] = t.fdEdxPlane[i];
fIndex[i] = 0;
fIndexBackup[i] = 0; //MI backup indexes
}
+ for (Int_t i=0;i<6;i++){
+ fTracklets[i] = t.fTracklets[i];
+ }
+ for (Int_t i=0;i<3;i++) { fBudget[i]=t.fBudget[i];};
}
//_____________________________________________________________________________
fIndexBackup[i] = 0; // MI backup indexes
}
+ for (Int_t i=0;i<3;i++) { fBudget[i]=0;};
}
//_____________________________________________________________________________
AliTRDtrack::AliTRDtrack(const AliESDtrack& t)
//
// Constructor from AliESDtrack
//
-
+ fDE =0;
SetLabel(t.GetLabel());
SetChi2(0.);
SetMass(t.GetMass());
// fIndex[i] = 0; //MI store indexes
}
+ for (Int_t i=0;i<3;i++) { fBudget[i]=0;};
if ((t.GetStatus()&AliESDtrack::kTIME) == 0) return;
StartTimeIntegral();
Double_t times[10]; t.GetIntegratedTimes(times); SetIntegratedTimes(times);
Float_t AliTRDtrack::StatusForTOF()
{
+
+ Float_t res = (0.2 + 0.8*(fN/(fNExpected+5.)))*(0.4+0.6*fTracklets[5].GetN()/20.);
+ res *= (0.25+0.8*40./(40.+fBudget[2]));
+ return res;
+
Int_t status=0;
if (GetNumberOfClusters()<20) return 0; //
if (fN>110&&fChi2/(Float_t(fN))<3) return 3; //gold
for (i=0; i < nc; i++) {
sorted[i]=fdQdl[i];
}
- /*
- Int_t swap;
-
- do {
- swap=0;
- for (i=0; i<nc-1; i++) {
- if (sorted[i]<=sorted[i+1]) continue;
- Float_t tmp=sorted[i];
- sorted[i]=sorted[i+1]; sorted[i+1]=tmp;
- swap++;
- }
- } while (swap);
- */
Int_t nl=Int_t(low*nc), nu=Int_t(up*nc);
Float_t dedx=0;
//for (i=nl; i<=nu; i++) dedx += sorted[i];
if((nu-nl)) dedx /= (nu-nl); // ADDED by PS
SetdEdx(dedx);
+ //
+ // now real truncated mean
+ for (i=0; i < nc; i++) {
+ sorted[i]=TMath::Abs(fdQdl[i]);
+ }
+ Int_t * index = new Int_t[nc];
+ TMath::Sort(nc, sorted, index,kFALSE);
+ dedx=0;
+ for (i=nl; i<=nu; i++) dedx += sorted[index[i]];
+ dedx /= (nu-nl+1);
+ fdEdxT = dedx;
+ delete [] index;
}
fC*=(1.- sqrt(p2+GetMass()*GetMass())/p2*dE);
fE+=fX*(fC-cc);
// Double_t sigmade = 0.1*dE*TMath::Sqrt(TMath::Sqrt(1+fT*fT)*90./(d+0.0001)); // 20 percent fluctuation - normalized to some length
- Double_t sigmade = 0.02*TMath::Sqrt(TMath::Abs(dE)); // energy loss fluctuation
+ Double_t sigmade = 0.07*TMath::Sqrt(TMath::Abs(dE)); // energy loss fluctuation
Double_t sigmac2 = sigmade*sigmade*fC*fC*(p2+GetMass()*GetMass())/(p2*p2);
fCcc += sigmac2;
fCee += fX*fX*sigmac2;
// track time measurement [SR, GSI 17.02.2002]
if (x1 < x2)
if (IsStartedTimeIntegral()) {
- Double_t l2 = (fX-oldX)*(fX-oldX) + (fY-oldY)*(fY-oldY) + (fZ-oldZ)*(fZ-oldZ);
- AddTimeStep(TMath::Sqrt(l2));
+ Double_t l2 = TMath::Sqrt((fX-oldX)*(fX-oldX) + (fY-oldY)*(fY-oldY) + (fZ-oldZ)*(fZ-oldZ));
+ if (TMath::Abs(l2*fC)>0.0001){
+ // make correction for curvature if neccesary
+ l2 = 0.5*TMath::Sqrt((fX-oldX)*(fX-oldX) + (fY-oldY)*(fY-oldY));
+ l2 = 2*TMath::ASin(l2*fC)/fC;
+ l2 = TMath::Sqrt(l2*l2+(fZ-oldZ)*(fZ-oldZ));
+ }
+ AddTimeStep(l2);
}
return 1;
void SetSigma2(Float_t sigma2){fExpectedSigma2=sigma2;}
void SetChi2(Float_t chi2){fChi2=chi2;}
void SetTilt(Float_t tilt){fTilt=tilt;}
+ void SetMaxPos(Short_t pos, Short_t pos4, Short_t pos5){fMaxPos = pos; fMaxPos4 = pos4; fMaxPos5 = pos5;}
Float_t GetX() const { return fX;}
Float_t GetY() const { return fY;}
Float_t GetZ() const {return fZ;}
Float_t fExpectedSigma2; // expected sigma of residual distribution of clusters
Float_t fChi2; // chi2 of the tracklet
Float_t fTilt; // tilt factor
+ Short_t fMaxPos; // time bin with max charge
+ Short_t fMaxPos4; // time bin with max charge
+ Short_t fMaxPos5; // time bin with max charge
ClassDef(AliTRDtracklet,2)
};
Int_t fSeedLab; // track label taken from seeding
Float_t fdEdx; // dE/dx
+ Float_t fdEdxT; // dE/dx - truncated mean
Float_t fDE; // integrated delta energy
Float_t fdEdxPlane[kNPlane]; // dE/dx from all 6 planes
Int_t fTimBinPlane[kNPlane]; // time bin of Max cluster from all 6 planes
Int_t fNdedx; //number of clusters for dEdx measurment
Float_t fChi2Last; //chi2 in the last 2 layers
AliTRDtracklet fTracklets[6]; //tracklets
+ Float_t fBudget[3]; // integrated material budget
AliTRDtrack * fBackupTrack; //! backup track
- ClassDef(AliTRDtrack,2) // TRD reconstructed tracks
+ ClassDef(AliTRDtrack,3) // TRD reconstructed tracks
};
inline void AliTRDtrack::GetXYZ(Float_t r[3]) const {