////////////////////////////////////////////////////////////////////////////
#include "TMath.h"
-#include "TLinearFitter.h"
-#include "TClonesArray.h" // tmp
#include <TTreeStream.h>
#include "AliLog.h"
ClassImp(AliTRDseedV1)
-TLinearFitter *AliTRDseedV1::fgFitterY = NULL;
-TLinearFitter *AliTRDseedV1::fgFitterZ = NULL;
-
//____________________________________________________________________
AliTRDseedV1::AliTRDseedV1(Int_t det)
:AliTRDtrackletBase()
return fClusters[ic] ? fClusters[ic]->GetVolumeId() : 0;
}
-//____________________________________________________________________
-TLinearFitter* AliTRDseedV1::GetFitterY()
-{
- if(!fgFitterY) fgFitterY = new TLinearFitter(1, "pol1");
- fgFitterY->ClearPoints();
- return fgFitterY;
-}
-
-//____________________________________________________________________
-TLinearFitter* AliTRDseedV1::GetFitterZ()
-{
- if(!fgFitterZ) fgFitterZ = new TLinearFitter(1, "pol1");
- fgFitterZ->ClearPoints();
- return fgFitterZ;
-}
//____________________________________________________________________
void AliTRDseedV1::Calibrate()
void GetCalibParam(Float_t &exb, Float_t &vd, Float_t &t0, Float_t &s2, Float_t &dl, Float_t &dt) const {
exb = fExB; vd = fVD; t0 = fT0; s2 = fS2PRF; dl = fDiffL; dt = fDiffT;}
AliTRDcluster* GetClusters(Int_t i) const { return i<0 || i>=kNclusters ? NULL: fClusters[i];}
- static TLinearFitter* GetFitterY();
- static TLinearFitter* GetFitterZ();
Int_t GetIndexes(Int_t i) const{ return i<0 || i>=kNclusters ? -1 : fIndexes[i];}
Int_t GetLabels(Int_t i) const { return fLabels[i];}
Float_t GetMomentum(Float_t *err = NULL) const;
Int_t fLabels[3]; // most frequent MC labels and total number of different labels
Double_t fRefCov[7]; // covariance matrix of the track in the yz plane + the rest of the diagonal elements
Double_t fCov[3]; // covariance matrix of the tracklet in the xy plane
- static TLinearFitter *fgFitterY; // Linear Fitter for tracklet fit in xy-plane
- static TLinearFitter *fgFitterZ; // Linear Fitter for tracklet fit in xz-plane
- ClassDef(AliTRDseedV1, 9) // The offline TRD tracklet
+ ClassDef(AliTRDseedV1, 10) // The offline TRD tracklet
};
//____________________________________________________________
for(int is =0; is<AliPID::kSPECIES; is++) fPID[is] = pid;
for(int ip=0; ip<kNplane; ip++){
- fTrackletIndex[ip] = 0xffff;
+ fTrackletIndex[ip] = -1;
fTracklet[ip] = NULL;
}
}
SetMass(t.GetMass()/*0.000510*/);
AliKalmanTrack::SetNumberOfClusters(t.GetTRDncls());
- Int_t ti[kNplane]; t.GetTRDtracklets(&ti[0]);
+ Int_t ti[]={-1, -1, -1, -1, -1, -1}; t.GetTRDtracklets(&ti[0]);
for(int ip=0; ip<kNplane; ip++){
- fTrackletIndex[ip] = ti[ip] < 0 ? 0xffff : ti[ip];
+ fTrackletIndex[ip] = ti[ip];
fTracklet[ip] = NULL;
}
for(int i =0; i<3; i++) fBudget[i] = 0.;
AliDebug(2, Form("Init @ x[%6.2f] pt[%5.3f]", x, 1./pp[4]));
Int_t ncls = 0;
for(int iplane=0; iplane<kNplane; iplane++){
- fTrackletIndex[iplane] = 0xffff;
+ fTrackletIndex[iplane] = -1;
if(!trklts[iplane].IsOK()) fTracklet[iplane] = NULL;
else{
fTracklet[iplane] = &trklts[iplane];
for(Int_t ip=0; ip<kNplane; ip++){
if(TestBit(kOwner) && fTracklet[ip]) delete fTracklet[ip];
fTracklet[ip] = NULL;
- fTrackletIndex[ip] = 0xffff;
+ fTrackletIndex[ip] = -1;
}
}
Int_t label;
AliTRDcluster *c = NULL;
for (Int_t ip = 0; ip < kNplane; ip++) {
- if(fTrackletIndex[ip] == 0xffff) continue;
+ if(fTrackletIndex[ip] == -1) continue;
for (Int_t ic = 0; ic < AliTRDseedV1::kNclusters; ic++) {
if(!(c = fTracklet[ip]->GetClusters(ic))) continue;
for (Int_t k = 0; k < 3; k++) {
UChar_t nPID = 0;
Float_t *prob = NULL;
for(int ip=0; ip<kNplane; ip++){
- if(fTrackletIndex[ip] == 0xffff) continue;
+ if(fTrackletIndex[ip] == -1) continue;
if(!fTracklet[ip]->IsOK()) continue;
if(!(prob = fTracklet[ip]->GetProbability(kFALSE))) continue;
// steer PID calculation @ tracklet level
Float_t *prob = NULL;
for(int ip=0; ip<kNplane; ip++){
- if(fTrackletIndex[ip] == 0xffff) continue;
+ if(fTrackletIndex[ip] == -1) continue;
if(!fTracklet[ip]->IsOK()) continue;
if(!(prob = fTracklet[ip]->GetProbability(recalc))) return 0;
Int_t ncls = 0;
for(int ip=0; ip<kNplane; ip++){
- if(fTracklet[ip] && fTrackletIndex[ip] != 0xffff) ncls += fTracklet[ip]->GetN();
+ if(fTracklet[ip] && fTrackletIndex[ip] != -1) ncls += fTracklet[ip]->GetN();
}
AliKalmanTrack::SetNumberOfClusters(ncls);
}
if(TestBit(kOwner)) return;
for (Int_t ip = 0; ip < kNplane; ip++) {
- if(fTrackletIndex[ip] == 0xffff) continue;
+ if(fTrackletIndex[ip] == -1) continue;
fTracklet[ip] = new AliTRDseedV1(*fTracklet[ip]);
fTracklet[ip]->SetOwner();
}
void AliTRDtrackV1::UnsetTracklet(Int_t plane)
{
if(plane<0 && plane >= kNplane) return;
- fTrackletIndex[plane] = 0xffff;
+ fTrackletIndex[plane] = -1;
fTracklet[plane] = NULL;
}
// store raw signals
Float_t p, sp; Double_t spd;
for (Int_t ip = 0; ip < kNplane; ip++) {
- if(fTrackletIndex[ip] == 0xffff) continue;
+ if(fTrackletIndex[ip] == -1) continue;
if(!fTracklet[ip]->HasPID()) continue;
const Float_t *dedx = fTracklet[ip]->GetdEdx();
for (Int_t js = 0; js < nslices; js++, dedx++) track->SetTRDslice(*dedx, ip, js);
GetTrackLow() const { return fTrackLow;}
AliExternalTrackParam*
GetTrackHigh() const { return fTrackHigh;}
- const UShort_t* GetTrackletIndexes() const { return &fTrackletIndex[0];}
+ const Int_t* GetTrackletIndexes() const { return &fTrackletIndex[0];}
Bool_t IsEqual(const TObject *inTrack) const;
Bool_t IsKink() const { return TestBit(kKink);}
private:
UInt_t fStatus; // Bit map for the status of propagation
- UShort_t fTrackletIndex[kNplane];// Tracklets index in the tracker list
+ Int_t fTrackletIndex[kNplane];// Tracklets index in the tracker list
Double32_t fPID[AliPID::kSPECIES]; // PID probabilities
Double32_t fBudget[3]; // Integrated material budget
Double32_t fDE; // Integrated delta energy
const AliTRDReconstructor *fkReconstructor;//! reconstructor link
AliTRDtrackV1 *fBackupTrack; //! Backup track
- AliTRDseedV1 *fTracklet[kNplane]; // Tracklets array defining the track
+ AliTRDseedV1 *fTracklet[kNplane]; // Tracklets array defining the track
AliExternalTrackParam *fTrackLow; // parameters of the track which enter TRD from below (TPC)
- AliExternalTrackParam *fTrackHigh; // parameters of the track which enter TRD from above (HMPID, PHOS)
+ AliExternalTrackParam *fTrackHigh; // parameters of the track which enter TRD from above (HMPID, PHOS)
- ClassDef(AliTRDtrackV1, 5) // TRD track - tracklet based
+ ClassDef(AliTRDtrackV1, 6) // TRD track - tracklet based
};
//____________________________________________________
inline Float_t AliTRDtrackV1::GetMomentum(Int_t plane) const
{
- return plane >=0 && plane < kNplane && fTrackletIndex[plane] != 0xff ? fTracklet[plane]->GetMomentum() : -1.;
+ return plane >=0 && plane < kNplane && fTrackletIndex[plane] != -1 ? fTracklet[plane]->GetMomentum() : -1.;
}
//____________________________________________________
Bool_t kStoreIn = kTRUE;
Int_t nClustersExpected = 0;
for (Int_t iplane = kNPlanes; iplane--;) {
- Int_t index = 0;
+ Int_t index(-1);
AliTRDseedV1 *tracklet = GetTracklet(&t, iplane, index);
+ AliDebug(2, Form("Tracklet[%p] ly[%d] idx[%d]", (void*)tracklet, iplane, index));
if(!tracklet) continue;
if(!tracklet->IsOK()){
AliDebug(1, Form("Tracklet Det[%d] !OK", tracklet->GetDetector()));
// load tracklet to the tracker
ptrTracklet->Update(&t);
ptrTracklet = SetTracklet(ptrTracklet);
- t.SetTracklet(ptrTracklet, fTracklets->GetEntriesFast()-1);
+ Int_t index(fTracklets->GetEntriesFast()-1);
+ t.SetTracklet(ptrTracklet, index);
n += ptrTracklet->GetN();
+ AliDebug(2, Form("Setting Tracklet[%d] @ Idx[%d]", ily, index));
// Reset material budget if 2 consecutive gold
// if(ilayer>0 && t.GetTracklet(ilayer-1) && ptrTracklet->GetN() + t.GetTracklet(ilayer-1)->GetN() > 20) t.SetBudget(2, 0.);
// Detailed description
//
idx = track->GetTrackletIndex(p);
- AliTRDseedV1 *tracklet = (idx==0xffff) ? NULL : (AliTRDseedV1*)fTracklets->UncheckedAt(idx);
+ AliTRDseedV1 *tracklet = (idx<0) ? NULL : (AliTRDseedV1*)fTracklets->UncheckedAt(idx);
return tracklet;
}