X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDReconstructor.cxx;h=932d06e098f88ff5fc71c63a7c3e8fcaaf53630c;hb=3c1a2e9540ecbe55922d0268cd026e93e5d41be6;hp=df5eb5c1ff1c09ec1276b22c2fe90dca5422ca07;hpb=c4daee41f7557403438015a28df8d4272c33694d;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDReconstructor.cxx b/TRD/AliTRDReconstructor.cxx index df5eb5c1ff1..932d06e098f 100644 --- a/TRD/AliTRDReconstructor.cxx +++ b/TRD/AliTRDReconstructor.cxx @@ -44,6 +44,7 @@ #include "AliESDTrdTracklet.h" #include "AliESDTrdTrigger.h" #include "AliTRDtrackletWord.h" +#include "AliTRDtrackletMCM.h" #define SETFLG(n,f) ((n) |= f) #define CLRFLG(n,f) ((n) &= ~f) @@ -221,6 +222,7 @@ void AliTRDReconstructor::Reconstruct(AliRawReader *rawReader fClusterizer->OpenOutput(clusterTree); fClusterizer->SetUseLabels(kFALSE); + fClusterizer->SetStoreRawSignals(kTRUE); fClusterizer->Raw2ClustersChamber(rawReader); fgNTimeBins = fClusterizer->GetNTimeBins(); @@ -256,6 +258,8 @@ void AliTRDReconstructor::Reconstruct(TTree *digitsTree AliTRDclusterizer clusterer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]); clusterer.SetReconstructor(this); + clusterer.SetUseLabels(kTRUE); + clusterer.SetStoreRawSignals(kTRUE); clusterer.OpenOutput(clusterTree); clusterer.ReadDigits(digitsTree); clusterer.MakeClusters(); @@ -305,81 +309,20 @@ void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/ // // ----- filling tracklets ----- - Int_t trackletIndex[1080] = { 0 }; AliDebug(1, Form("Filling tracklets from %p (%i)", fgTracklets, fgTracklets ? fgTracklets->GetEntriesFast() : 0)); - if (fgTracklets) { - Int_t nTracklets = fgTracklets->GetEntriesFast(); - - Int_t lastHC = -1; - for (Int_t iTracklet = 0; iTracklet < nTracklets; iTracklet++) { - AliTRDtrackletBase *trkl = (AliTRDtrackletBase*) ((*fgTracklets)[iTracklet]); - Int_t hc = trkl->GetHCId(); - // hc += trkl->GetY() > 0 ? 1 : 0; - if ((hc < 0) || (hc >= 1080)) { - AliError(Form("HC for tracklet: 0x%08x out of range: %i", trkl->GetTrackletWord(), trkl->GetHCId())); - continue; - } - AliDebug(5, Form("hc: %4i : 0x%08x z: %2i", hc, trkl->GetTrackletWord(), trkl->GetZbin())); - if (hc != lastHC) { - AliDebug(2, Form("set tracklet index for HC %i to %i", hc, iTracklet)); - trackletIndex[hc] = iTracklet + 1; - lastHC = hc; - } - } + Int_t trackletIndex[1080] = { 0 }; + TList trklList; + AliTRDrawStream::SortTracklets(fgTracklets, trklList, trackletIndex); + TIter trackletIter(&trklList); + while (AliTRDtrackletBase* tracklet = (AliTRDtrackletBase*) trackletIter()) { + Int_t label = -2; // mark raw tracklets with label -2 + if (AliTRDtrackletMCM *trklMCM = dynamic_cast (tracklet)) + label = trklMCM->GetLabel(); - for (Int_t iDet = 0; iDet < 540; iDet++) { - Int_t trklIndexA = trackletIndex[2*iDet + 0] - 1; - Int_t trklIndexB = trackletIndex[2*iDet + 1] - 1; - Int_t trklIndex = esd->GetNumberOfTrdTracklets(); - AliTRDtrackletBase *trklA = trklIndexA > -1 ? (AliTRDtrackletBase*) ((*fgTracklets)[trklIndexA]) : 0x0; - AliTRDtrackletBase *trklB = trklIndexB > -1 ? (AliTRDtrackletBase*) ((*fgTracklets)[trklIndexB]) : 0x0; - while (trklA != 0x0 || trklB != 0x0) { - AliDebug(5, Form("det %i - A: %i/%i -> %p, B: %i/%i -> %p", - iDet, trklIndexA, nTracklets, trklA, trklIndexB, nTracklets, trklB)); - if (trklA == 0x0) { - AliESDTrdTracklet esdTracklet(trklB->GetTrackletWord(), trklB->GetHCId()); - esd->AddTrdTracklet(&esdTracklet); - trklIndexB++; - trklB = trklIndexB < nTracklets ? (AliTRDtrackletBase*) ((*fgTracklets)[trklIndexB]) : 0x0; - if (trklB && trklB->GetHCId() != 2*iDet + 1) - trklB = 0x0; - } - else if (trklB == 0x0) { - AliESDTrdTracklet esdTracklet(trklA->GetTrackletWord(), trklA->GetHCId()); - esd->AddTrdTracklet(&esdTracklet); - trklIndexA++; - trklA = trklIndexA < nTracklets ? (AliTRDtrackletBase*) ((*fgTracklets)[trklIndexA]) : 0x0; - if (trklA && trklA->GetHCId() != 2*iDet) - trklA = 0x0; - } - else { - if ((trklA->GetZbin() < trklB->GetZbin()) || - ((trklA->GetZbin() == trklB->GetZbin()) && (trklA->GetYbin() < trklB->GetYbin()))) { - AliESDTrdTracklet esdTracklet(trklA->GetTrackletWord(), trklA->GetHCId()); - esd->AddTrdTracklet(&esdTracklet); - trklIndexA++; - trklA = trklIndexA < nTracklets ? (AliTRDtrackletBase*) ((*fgTracklets)[trklIndexA]) : 0x0; - if (trklA && trklA->GetHCId() != 2*iDet) - trklA = 0x0; - } - else { - AliESDTrdTracklet esdTracklet(trklB->GetTrackletWord(), trklB->GetHCId()); - esd->AddTrdTracklet(&esdTracklet); - trklIndexB++; - trklB = trklIndexB < nTracklets ? (AliTRDtrackletBase*) ((*fgTracklets)[trklIndexB]) : 0x0; - if (trklB && trklB->GetHCId() != 2*iDet + 1) - trklB = 0x0; - } - } - } - // updating tracklet indices as in ESD - if (esd->GetNumberOfTrdTracklets() != trklIndex) { - trackletIndex[2*iDet + 0] = trackletIndex[2*iDet + 1] = trklIndex; - } - else - trackletIndex[2*iDet + 0] = trackletIndex[2*iDet + 1] = -1; - } + AliESDTrdTracklet *esdTracklet = new AliESDTrdTracklet(tracklet->GetTrackletWord(), tracklet->GetHCId(), label); + + esd->AddTrdTracklet(esdTracklet); } // ----- filling GTU tracks ----- @@ -389,31 +332,25 @@ void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/ for (Int_t iTrack = 0; iTrack < fgTracks->GetEntriesFast(); iTrack++) { AliESDTrdTrack *trdTrack = (AliESDTrdTrack*) ((*fgTracks)[iTrack]); - UInt_t mask = trdTrack->GetLayerMask(); UInt_t stack = trdTrack->GetStack(); - for (Int_t iLayer = 0; iLayer < 6; iLayer++) { - if (mask & (1 << iLayer)) { - - Int_t det = trdTrack->GetSector()*30 + stack*6 + iLayer; - Int_t idx = trdTrack->GetTrackletIndex(iLayer); - - if ((det < 0) || (det > 539)) { - AliError(Form("Invalid detector no. from track: %i", 2*det)); - continue; - } - if (trackletIndex[2*det] >= 0) { - if ((trackletIndex[2*det] + idx > -1) && - (trackletIndex[2*det] + idx < esd->GetNumberOfTrdTracklets())) { - AliESDTrdTracklet *trkl = esd->GetTrdTracklet(trackletIndex[2*det] + idx); - if (trkl) { - AliDebug(5, Form("adding tracklet: 0x%08x", trkl->GetTrackletWord())); - trdTrack->AddTrackletReference(trkl, iLayer); - } - } - } + Int_t refIndex[6]; + AliTRDrawStream::AssignTracklets(trdTrack, trackletIndex, refIndex); + + for (Int_t iLayer = 0; iLayer < 6; ++iLayer) { + Int_t det = trdTrack->GetSector()*30 + stack*6 + iLayer; + + AliESDTrdTracklet *trkl = refIndex[iLayer] > -1 ? esd->GetTrdTracklet(refIndex[iLayer]) : 0x0; + if (trkl) { + AliDebug(5, Form("adding tracklet with index %i: 0x%08x", + refIndex[iLayer], trkl->GetTrackletWord())); + if (trkl->GetDetector() != det) + AliError(Form("inconsistent assignment of tracklet 0x%08x in det %i to track in %i", + trkl->GetTrackletWord(), trkl->GetDetector(), det)); + trdTrack->AddTrackletReference(trkl, iLayer); } } + // only add the track when it's complete (including tracklet references) esd->AddTrdTrack(trdTrack); }