diff --git a/ITS/ITSbase/AliITStrackerMI.cxx b/ITS/ITSbase/AliITStrackerMI.cxx index 01e30424815..24b957ad45f 100644 --- a/ITS/ITSbase/AliITStrackerMI.cxx +++ b/ITS/ITSbase/AliITStrackerMI.cxx @@ -629,6 +629,9 @@ Int_t AliITStrackerMI::Clusters2Tracks(AliESDEvent *event) { for (fCurrentEsdTrack=0; fCurrentEsdTrackGetESDtrack()->GetLabel(); //save the TPC track label + AliDebug(2,Form("LABEL %d pass %d",tpcLabel,fPass)); + //cout<<"========== "<GetReconstructed()&&(t->GetNUsed()<1.5)) continue; //this track was already "succesfully" reconstructed Float_t dz[2]={0}; t->GetDZ(GetX(),GetY(),GetZ(),dz); //I.B. @@ -637,8 +640,6 @@ Int_t AliITStrackerMI::Clusters2Tracks(AliESDEvent *event) { TMath::Abs(dz[1])>AliITSReconstructor::GetRecoParam()->GetMaxDZToUseConstraint()) continue; } - Int_t tpcLabel=t->GetLabel(); //save the TPC track label - AliDebug(2,Form("LABEL %d pass %d",tpcLabel,fPass)); fI = 6; ResetTrackToFollow(*t); ResetBestTrack(); diff --git a/STEER/ESD/AliESDtrack.cxx b/STEER/ESD/AliESDtrack.cxx index ae6cd45e48c..583834f4759 100644 --- a/STEER/ESD/AliESDtrack.cxx +++ b/STEER/ESD/AliESDtrack.cxx @@ -274,6 +274,7 @@ AliESDtrack::AliESDtrack() : fTRDslices(0x0), fVertexID(-2),// -2 means an orphan track fPIDForTracking(AliPID::kPion), + fPIDForTrackingIn(AliPID::kPion), fESDEvent(0), fCacheNCrossedRows(-10), fCacheChi2TPCConstrainedVsGlobal(-10), @@ -395,6 +396,7 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track): fTRDslices(0x0), fVertexID(track.fVertexID), fPIDForTracking(AliPID::kPion), + fPIDForTrackingIn(AliPID::kPion), fESDEvent(track.fESDEvent), fCacheNCrossedRows(track.fCacheNCrossedRows), fCacheChi2TPCConstrainedVsGlobal(track.fCacheChi2TPCConstrainedVsGlobal), @@ -574,6 +576,7 @@ AliESDtrack::AliESDtrack(const AliVTrack *track) : fTRDslices(0x0), fVertexID(-2), // -2 means an orphan track fPIDForTracking(track->GetPIDForTracking()), + fPIDForTrackingIn(track->GetPIDForTracking()), fESDEvent(0), fCacheNCrossedRows(-10), fCacheChi2TPCConstrainedVsGlobal(-10), @@ -774,6 +777,7 @@ AliESDtrack::AliESDtrack(TParticle * part) : fTRDslices(0x0), fVertexID(-2), // -2 means an orphan track fPIDForTracking(AliPID::kPion), + fPIDForTrackingIn(AliPID::kPion), fESDEvent(0), fCacheNCrossedRows(-10), fCacheChi2TPCConstrainedVsGlobal(-10), @@ -853,7 +857,7 @@ AliESDtrack::AliESDtrack(TParticle * part) : if (pdgCode<0) pdgCode = -pdgCode; for (i=0;iGetUniqueID()); @@ -1049,6 +1053,7 @@ AliESDtrack &AliESDtrack::operator=(const AliESDtrack &source) else {delete[] fHMPIDr; fHMPIDr = 0;} fPIDForTracking = source.fPIDForTracking; + fPIDForTrackingIn = source.fPIDForTrackingIn; fHMPIDtrkTheta = source.fHMPIDtrkTheta; fHMPIDtrkPhi = source.fHMPIDtrkPhi; @@ -1148,6 +1153,7 @@ AliESDtrack &AliESDtrack::operator=(const AliESDtrack &source) fTRDntracklets = source.fTRDntracklets; fVertexID = source.fVertexID; fPIDForTracking = source.fPIDForTracking; + fPIDForTrackingIn = source.fPIDForTrackingIn; fCacheNCrossedRows = source.fCacheNCrossedRows; fCacheChi2TPCConstrainedVsGlobal = source.fCacheChi2TPCConstrainedVsGlobal; @@ -1407,7 +1413,7 @@ void AliESDtrack::MakeMiniESDtrack(){ fGlobalChi2 = 0; fVertexID = -2; // an orphan track - fPIDForTracking = AliPID::kPion; + fPIDForTrackingIn = fPIDForTracking = AliPID::kPion; // delete fFriendTrack; fFriendTrack = 0; } diff --git a/STEER/ESD/AliESDtrack.h b/STEER/ESD/AliESDtrack.h index 3839a4eaca0..0a4b848e00d 100644 --- a/STEER/ESD/AliESDtrack.h +++ b/STEER/ESD/AliESDtrack.h @@ -97,8 +97,9 @@ class AliESDtrack : public AliExternalTrackParam { // Double_t GetMass(Bool_t tpcOnly=kFALSE) const {return AliPID::ParticleMass(GetPID(tpcOnly));} Double_t GetMassForTracking() const; - void SetPIDForTracking(Int_t pid) {fPIDForTracking = pid;} + void SetPIDForTracking(Int_t pid) {fPIDForTracking = pid; if (!IsOn(kTPCout)) fPIDForTrackingIn=pid;} Int_t GetPIDForTracking() const {return fPIDForTracking;} + Int_t GetPIDForTracking0() const {return fPIDForTrackingIn;} Double_t M() const; Double_t E() const; Double_t Y() const; @@ -657,6 +658,7 @@ class AliESDtrack : public AliExternalTrackParam { Char_t fTRDTimBin[kTRDnPlanes]; // Time bin of Max cluster from all six planes Char_t fVertexID; // ID of the primary vertex this track belongs to Char_t fPIDForTracking; // mass used for tracking + Char_t fPIDForTrackingIn; // mass used for tracking set during TPCin mutable const AliESDEvent* fESDEvent; //!Pointer back to event to which the track belongs @@ -681,7 +683,7 @@ class AliESDtrack : public AliExternalTrackParam { static bool fgkOnlineMode; //! indicate the online mode to skip some of the functionality AliESDtrack & operator=(const AliESDtrack & ); - ClassDef(AliESDtrack,72) //ESDtrack + ClassDef(AliESDtrack,73) //ESDtrack }; diff --git a/TPC/TPCrec/AliTPCtracker.cxx b/TPC/TPCrec/AliTPCtracker.cxx index d898f618ee6..eb47bfe8994 100644 --- a/TPC/TPCrec/AliTPCtracker.cxx +++ b/TPC/TPCrec/AliTPCtracker.cxx @@ -7441,11 +7441,24 @@ void AliTPCtracker::FindKinks(TObjArray * array, AliESDEvent *esd) // RemoveUsed2(array,0.5,0.4,30); UnsignClusters(); + // RS: the cluster pointers are not permanently attached to the seed during the tracking, need to attach temporarily + AliTPCclusterMI* seedClusters[kMaxRow] = {0}; + // for (Int_t i=0;iAt(i); if (!track0) continue; + //RS: if needed, attach temporary cluster array + const AliTPCclusterMI** seedClustersSave = track0->GetClusters(); + if (!seedClustersSave) { //RS: temporary attach clusters + for (int ir=kMaxRow;ir--;) { + int idx = track0->GetClusterIndex2(ir); + seedClusters[ir] = idx<0 ? 0 : GetClusterMI(idx); + } + track0->SetClustersArrayTMP(seedClusters); + } track0->CookdEdx(0.02,0.6); track0->CookPID(); + if (!seedClustersSave) track0->SetClustersArrayTMP(0); } // // RS use stack allocation instead of the heap @@ -8104,8 +8117,11 @@ Int_t AliTPCtracker::Clusters2Tracks() { // nseed=fSeeds->GetEntriesFast(); found = 0; + // RS: the cluster pointers are not permanently attached to the seed during the tracking, need to attach temporarily + AliTPCclusterMI* seedClusters[kMaxRow]; + // for (Int_t i=0; iUncheckedAt(i), &t=*pt; + AliTPCseed *pt=(AliTPCseed*)fSeeds->UncheckedAt(i), &t = *pt; if (!pt) continue; Int_t nc=t.GetNumberOfClusters(); if (nc<15) { @@ -8113,69 +8129,31 @@ Int_t AliTPCtracker::Clusters2Tracks() { continue; } t.SetUniqueID(i); - t.CookdEdx(0.02,0.6); + // CheckKinkPoint(&t,0.05); - //if ((pt->IsActive() || (pt->fRemoval==10) )&& nc>50 &&pt->GetNumberOfClusters()>0.4*pt->fNFoundable){ if ((pt->IsActive() || (pt->GetRemoval()==10) )){ found++; - if (fDebug>0){ - cerr<0) cerr<SetLab2(i); } - else - MarkSeedFree( fSeeds->RemoveAt(i) ); - //AliTPCseed * seed1 = ReSeed(pt,0.05,0.5,1); - //if (seed1){ - // FollowProlongation(*seed1,0); - // Int_t n = seed1->GetNumberOfClusters(); - // printf("fP4\t%f\t%f\n",seed1->GetC(),pt->GetC()); - // printf("fN\t%d\t%d\n", seed1->GetNumberOfClusters(),pt->GetNumberOfClusters()); + else {MarkSeedFree( fSeeds->RemoveAt(i) );} + // + // temporarilly attach clusters and cook dedx + const AliTPCclusterMI** seedClustersSave = t.GetClusters(); + if (!seedClustersSave) { //RS: temporary attach clusters + for (int ir=kMaxRow;ir--;) { + int idx = t.GetClusterIndex2(ir); + seedClusters[ir] = idx<0 ? 0 : GetClusterMI(idx); + } + t.SetClustersArrayTMP(seedClusters); + } + t.CookdEdx(0.02,0.6); + if (!seedClustersSave) t.SetClustersArrayTMP(0); // - //} - //AliTPCseed * seed2 = ReSeed(pt,0.95,0.5,0.05); - } SortTracks(fSeeds, 1); - - /* - fIteration = 1; - PrepareForBackProlongation(fSeeds,5.); - PropagateBack(fSeeds); - printf("Time for back propagation: \t");timer.Print();timer.Start(); - - fIteration = 2; - - PrepareForProlongation(fSeeds,5.); - PropagateForard2(fSeeds); - - printf("Time for FORWARD propagation: \t");timer.Print();timer.Start(); - // RemoveUsed(fSeeds,0.7,0.7,6); - //RemoveOverlap(fSeeds,0.9,7,kTRUE); - nseed=fSeeds->GetEntriesFast(); - found = 0; - for (Int_t i=0; iUncheckedAt(i), &t=*pt; - if (!pt) continue; - Int_t nc=t.GetNumberOfClusters(); - if (nc<15) { - MarkSeedFree( fSeeds->RemoveAt(i) ); - continue; - } - t.CookdEdx(0.02,0.6); - // CookLabel(pt,0.1); //For comparison only - //if ((pt->IsActive() || (pt->fRemoval==10) )&& nc>50 &&pt->GetNumberOfClusters()>0.4*pt->fNFoundable){ - if ((pt->IsActive() || (pt->fRemoval==10) )){ - cerr<RemoveAt(i) ); - pt->fLab2 = i; - } - */ - // fNTracks = found; if (fDebug>0){ Info("Clusters2Tracks","Time for overlap removal, track writing and dedx cooking: \t"); timer.Print();timer.Start();