// prepare track and do propagation in the TRD
track.SetReconstructor(fkReconstructor);
track.SetKink(Bool_t(seed->GetKinkIndex(0)));
+ track.SetPrimary(status & AliESDtrack::kTPCin);
expectedClr = FollowBackProlongation(track);
// check if track entered the TRD fiducial volume
- if(track.GetTrackLow()){
+ if(track.GetTrackIn()){
seed->UpdateTrackParams(&track, AliESDtrack::kTRDin);
nTRDseeds++;
}
// update calibration references using this track
if(calibra->GetHisto2d()) calibra->UpdateHistogramsV1(&track);
// save calibration object
- if (fkRecoParam->GetStreamLevel(AliTRDrecoParam::kTracker) > 0 &&
-fkRecoParam->IsOverPtThreshold(track.Pt())){
+ if (fkRecoParam->GetStreamLevel(AliTRDrecoParam::kTracker) > 0) {
AliTRDtrackV1 *calibTrack = new AliTRDtrackV1(track);
calibTrack->SetOwner();
seed->AddCalibObject(calibTrack);
Bool_t kUPDATE = kFALSE;
Double_t xTPC = 250.0;
if(FollowProlongation(track)){
- // Prolongate to TPC
- if (PropagateToX(track, xTPC, fgkMaxStep)) { // -with update
- seed->UpdateTrackParams(&track, AliESDtrack::kTRDrefit);
- found++;
- kUPDATE = kTRUE;
- }
-
// Update the friend track
- if (fkRecoParam->GetStreamLevel(AliTRDrecoParam::kTracker) > 0 && fkRecoParam->IsOverPtThreshold(track.Pt())){
+ if (fkRecoParam->GetStreamLevel(AliTRDrecoParam::kTracker) > 0){
TObject *o = NULL; Int_t ic = 0;
AliTRDtrackV1 *calibTrack = NULL;
while((o = seed->GetCalibObject(ic++))){
if(!(calibTrack = dynamic_cast<AliTRDtrackV1*>(o))) continue;
- calibTrack->SetTrackHigh(track.GetTrackHigh());
+ calibTrack->SetTrackOut(&track);
}
}
+
+ // Prolongate to TPC
+ if (PropagateToX(track, xTPC, fgkMaxStep)) { // -with update
+ seed->UpdateTrackParams(&track, AliESDtrack::kTRDrefit);
+ found++;
+ kUPDATE = kTRUE;
+ }
}
// Prolongate to TPC without update
// Debug level 2
//
- Bool_t kStoreIn = kTRUE;
Int_t nClustersExpected = 0;
for (Int_t iplane = kNPlanes; iplane--;) {
Int_t index(-1);
t.PropagateTo(x, xx0, xrho);
if (!AdjustSector(&t)) break;
}
- if(kStoreIn){
- t.SetTrackHigh();
- kStoreIn = kFALSE;
- }
Double_t cov[3]; tracklet->GetCovAt(x, cov);
Double_t p[2] = { tracklet->GetY(), tracklet->GetZ()};
Double_t chi2 = ((AliExternalTrackParam)t).GetPredictedChi2(p, cov);
- if (chi2 < 1e+10 && t.Update(p, cov, chi2)){
+ if (chi2 < 1e+10 && ((AliExternalTrackParam&)t).Update(p, cov)){
+ // Register info to track
+ t.SetNumberOfClusters();
+ t.UpdateChi2(chi2);
nClustersExpected += tracklet->GetN();
}
}
t.UnsetTracklet(ip);
if(tracklets[ip]->IsOK()) startLayer=ip;
kStandAlone = kTRUE;
+ kUseTRD = kTRUE;
}
AliDebug(4, Form("SA[%c] Start[%d]\n"
" [0]idx[%d] traklet[%p]\n"
}
// mark track as entering the FIDUCIAL volume of TRD
if(kStoreIn){
- t.SetTrackLow();
+ t.SetTrackIn();
kStoreIn = kFALSE;
}
ptrTracklet = new(&tracklet) AliTRDseedV1(det);
ptrTracklet->SetReconstructor(fkReconstructor);
ptrTracklet->SetKink(t.IsKink());
+ ptrTracklet->SetPrimary(t.IsPrimary());
ptrTracklet->SetPadPlane(fGeom->GetPadPlane(ily, stk));
ptrTracklet->SetX0(glb[0]+driftLength);
if(!tracklet.Init(&t)){
} else AliDebug(2, Form("Use external tracklet ly[%d]", ily));
// propagate track to the radial position of the tracklet
- // fit tracklet no tilt correction
- if(!ptrTracklet->Fit(kFALSE)){
+ // fit tracklet
+ // tilt correction options
+ // 0 : no correction
+ // 2 : pseudo tilt correction
+ if(!ptrTracklet->Fit(2)){
t.SetStatus(AliTRDtrackV1::kNoFit, ily);
AliDebug(4, "Failed Tracklet Fit");
continue;
break;
}
if(kPropagateIn){
- t.SetTrackLow();
+ t.SetTrackIn();
kPropagateIn = kFALSE;
}
Double_t cov[3]; ptrTracklet->GetCovAt(x, cov);
AliDebug(4, Form("Failed Chi2[%f]", chi2));
continue;
}
- if(!t.Update(p, cov, chi2, kUseTRD)) {
- n=-1;
- t.SetStatus(AliTRDtrackV1::kUpdate);
- if(debugLevel > 2){
- UChar_t status(t.GetStatusTRD());
- AliTRDseedV1 trackletCp(*ptrTracklet);
- AliTRDtrackV1 trackCp(t);
- trackCp.SetOwner();
- (*cstreamer) << "FollowBackProlongation1"
- << "status=" << status
- << "tracklet.=" << &trackletCp
- << "track.=" << &trackCp
- << "\n";
+ if(kUseTRD){
+ if(!((AliExternalTrackParam&)t).Update(p, cov)) {
+ n=-1;
+ t.SetStatus(AliTRDtrackV1::kUpdate);
+ if(debugLevel > 2){
+ UChar_t status(t.GetStatusTRD());
+ AliTRDseedV1 trackletCp(*ptrTracklet);
+ AliTRDtrackV1 trackCp(t);
+ trackCp.SetOwner();
+ (*cstreamer) << "FollowBackProlongation1"
+ << "status=" << status
+ << "tracklet.=" << &trackletCp
+ << "track.=" << &trackCp
+ << "\n";
+ }
+ AliDebug(4, Form("Failed Track Update @ y[%7.2f] z[%7.2f] s2y[%f] s2z[%f] covyz[%f]", p[0], p[1], cov[0], cov[2], cov[1]));
+ break;
}
- AliDebug(4, Form("Failed Track Update @ y[%7.2f] z[%7.2f] s2y[%f] s2z[%f] covyz[%f]", p[0], p[1], cov[0], cov[2], cov[1]));
- break;
}
if(!kStandAlone) ptrTracklet->UseClusters();
// fill residuals ?!
ptrTracklet = SetTracklet(ptrTracklet);
Int_t index(fTracklets->GetEntriesFast()-1);
t.SetTracklet(ptrTracklet, index);
+ // Register info to track
+ t.SetNumberOfClusters();
+ t.UpdateChi2(chi2);
+
n += ptrTracklet->GetN();
AliDebug(2, Form("Setting Tracklet[%d] @ Idx[%d]", ily, index));
for(Int_t itb = 0; itb < AliTRDseedV1::kNclusters; itb++){
if(!(cl = tracklets[ipl].GetClusters(itb))) continue;
if(!cl->IsInChamber()) continue;
- //if (!tracklets[ipl].IsUsable(itb)) continue;
+ if (!tracklets[ipl].IsUsable(itb)) continue;
x = cl->GetX();
y = cl->GetY();
z = cl->GetZ();
nPoints++;
}
}
- fitter->Eval();
+ if (fitter->Eval()) return 1.e10;
zfitter.Eval();
Double_t offset = fitter->GetParameter(3);
Double_t cov[3]; ptrTracklet->GetCovAt(x, cov);
Double_t p[2] = { ptrTracklet->GetY(), ptrTracklet->GetZ()};
Double_t chi2 = ((AliExternalTrackParam*)track)->GetPredictedChi2(p, cov);
- if(chi2<1e+10) track->Update(p, cov, chi2);
+ if(chi2<1e+10) ((AliExternalTrackParam*)track)->Update(p, cov);
if(!up) continue;
//Reset material budget if 2 consecutive gold
{
// Building tracking containers for clusters
- Int_t nin =0, icl = fClusters->GetEntriesFast();
- while (icl--) {
- AliTRDcluster *c = (AliTRDcluster *) fClusters->UncheckedAt(icl);
+ Int_t nin(0), ncl(fClusters->GetEntriesFast());
+ while (ncl--) {
+ AliTRDcluster *c = (AliTRDcluster *) fClusters->UncheckedAt(ncl);
if(c->IsInChamber()) nin++;
if(fkReconstructor->IsHLT()) c->SetRPhiMethod(AliTRDcluster::kCOG);
Int_t detector = c->GetDetector();
Int_t stack = fGeom->GetStack(detector);
Int_t layer = fGeom->GetLayer(detector);
- fTrSec[sector].GetChamber(stack, layer, kTRUE)->InsertCluster(c, icl);
+ fTrSec[sector].GetChamber(stack, layer, kTRUE)->InsertCluster(c, ncl);
}
- const AliTRDCalDet *cal = AliTRDcalibDB::Instance()->GetT0Det();
for(int isector =0; isector<AliTRDgeometry::kNsector; isector++){
if(!fTrSec[isector].GetNChambers()) continue;
- fTrSec[isector].Init(fkReconstructor, cal);
+ fTrSec[isector].Init(fkReconstructor);
}
return nin;
// 8. Build ESD track and register it to the output list
//
- const AliTRDCalDet *cal = AliTRDcalibDB::Instance()->GetT0Det();
AliTRDtrackingChamber *chamber = NULL;
AliTRDtrackingChamber **ci = NULL;
AliTRDseedV1 sseed[kMaxTracksStack*6]; // to be initialized
do{
// Loop over seeding configurations
ntracks = 0; ntracks1 = 0;
- for (Int_t iconf = 0; iconf<3; iconf++) {
+ for (Int_t iconf = 0; iconf<fkRecoParam->GetNumberOfSeedConfigs(); iconf++) {
pars[0] = configs[iconf];
pars[1] = ntracks;
pars[2] = istack;
for(Int_t ip = 0; ip < kNPlanes; ip++){
if(!(chamber = stack[ip])) continue;
- chamber->Build(fGeom, cal);//Indices(fSieveSeeding);
+ chamber->Build(fGeom);//Indices(fSieveSeeding);
}
if(fkRecoParam->GetStreamLevel(AliTRDrecoParam::kTracker) > 10){
}
TMath::Sort((Int_t)kNConfigs, tconfig, configs, kTRUE);
- // AliInfo(Form("q[%d] = %f", configs[0], tconfig[configs[0]]));
+ // AliInfo(Form("q[%d] = %f", configs[0], tconfig[configs[0]]));
// AliInfo(Form("q[%d] = %f", configs[1], tconfig[configs[1]]));
// AliInfo(Form("q[%d] = %f", configs[2], tconfig[configs[2]]));
if(!cseed[jLayer].AttachClusters(chamber, kTRUE)) continue;
cseed[jLayer].Fit();
}
+ //FitTiltedRiemanConstraint(&cseed[0], GetZ());
fTrackQuality[ntracks] = 1.; // dummy value
ntracks++;
if(ntracks == kMaxTracksStack) return ntracks;
chi2Vals[0] = FitTiltedRieman(&cseed[0], kTRUE);
for(int iLayer=0; iLayer<kNSeedPlanes; iLayer++){
Int_t jLayer = planes[iLayer];
- cseed[jLayer].Fit(kTRUE);
+ cseed[jLayer].Fit(1);
}
Double_t like = CookLikelihood(&cseed[0], planes); // to be checked
if ((jLayer == 5) && !(cseed[4].IsOK())) continue;
AliTRDseedV1 pseed = cseed[jLayer];
if(!pseed.AttachClusters(chamber, kTRUE)) continue;
- pseed.Fit(kTRUE);
+ pseed.Fit(1);
cseed[jLayer] = pseed;
chi2Vals[0] = FitTiltedRieman(cseed, kTRUE);
- cseed[jLayer].Fit(kTRUE);
+ cseed[jLayer].Fit(1);
elayers++;
}
// offline case perform a full Kalman filter on the already found tracklets (see AliTRDtrackerV1::FollowBackProlongation()
// for details). Do also MC label calculation and PID if propagation successfully.
-
+ if(fkReconstructor->IsHLT()) FitTiltedRiemanConstraint(tracklet, 0);
Double_t alpha = AliTRDgeometry::GetAlpha();
Double_t shift = AliTRDgeometry::GetAlpha()/2.0;
bseed[bLayer].Reset("c");
if(!(chamber = stack[bLayer])) continue;
if(!bseed[bLayer].AttachClusters(chamber, kTRUE)) continue;
- bseed[bLayer].Fit(kTRUE);
+ bseed[bLayer].Fit(1);
if(!bseed[bLayer].IsOK()) continue;
nLayers++;
lQuality[jLayer] = bseed[jLayer].GetQuality(kTRUE);