]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDgtuTMU.cxx
#101318: Patch for various problems in AliROOT
[u/mrichter/AliRoot.git] / TRD / AliTRDgtuTMU.cxx
index 9a3be5028d66f19f80563dc9f805a96eb3f09ff6..8a333da3b2b599e6a5bdeff996e95ea6927717ea 100644 (file)
@@ -213,13 +213,15 @@ Bool_t AliTRDgtuTMU::RunTMU(TList *ListOfTracks, AliESDEvent *esd)
     return kFALSE;
   }
 
-  if (esd) {
-      TIter next(ListOfTracks);
-      while (AliTRDtrackGTU *trk = (AliTRDtrackGTU*) next()) {
-         AliESDTrdTrack *trdtrack = trk->CreateTrdTrack();
-         esd->AddTrdTrack(trdtrack);
-         delete trdtrack;
-      }
+  // ----- label calculation and ESD storage -----
+  TIter next(ListOfTracks);
+  while (AliTRDtrackGTU *trk = (AliTRDtrackGTU*) next()) {
+    trk->CookLabel();
+    if (esd) {
+      AliESDTrdTrack *trdtrack = trk->CreateTrdTrack();
+      esd->AddTrdTrack(trdtrack);
+      delete trdtrack;
+    }
   }
 
   return kTRUE;
@@ -656,14 +658,14 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
 
     AliTRDtrackGTU **trkInRefLayer = new AliTRDtrackGTU*[fGtuParam->GetNRefLayers()];
 
-    Bool_t done = kFALSE;
+    // Bool_t done = kFALSE;
     Int_t minIdx = 0;
     AliTRDtrackGTU *trkStage0 = 0x0;
 
     for (Int_t zch = 0; zch < fGtuParam->GetNZChannels(); zch++) {
         // ----- Merging and Unification in Reflayers (seed_merger) -----
        do {
-           done = kTRUE;
+         // done = kTRUE;
            trkStage0 = 0x0;
            for (Int_t refLayerIdx = 0; refLayerIdx < fGtuParam->GetNRefLayers(); refLayerIdx++) {
                trkInRefLayer[refLayerIdx] = (AliTRDtrackGTU*) fTracks[zch][refLayerIdx].First();
@@ -673,13 +675,13 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
                else if (trkStage0 == 0x0 ) {
                    trkStage0 = trkInRefLayer[refLayerIdx];
                    minIdx = refLayerIdx;
-                   done = kFALSE;
+                   // done = kFALSE;
                }
                else if (trkInRefLayer[refLayerIdx]->GetZSubChannel() < trkStage0->GetZSubChannel() ||
                         (trkInRefLayer[refLayerIdx]->GetZSubChannel() == trkStage0->GetZSubChannel() && trkInRefLayer[refLayerIdx]->GetYapprox() < trkStage0->GetYapprox()) ) {
                    minIdx = refLayerIdx;
                    trkStage0 = trkInRefLayer[refLayerIdx];
-                   done = kFALSE;
+                   // done = kFALSE;
                }
            }
             if (!trkStage0)
@@ -721,7 +723,7 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
 // ----- Merging in zchannels - 1st stage -----
 
     do {
-       done = kTRUE;
+      // done = kTRUE;
        trkStage0 = 0x0;
         for (Int_t zch = fGtuParam->GetNZChannels() - 1; zch > -1; zch--) {
            AliTRDtrackGTU *trk = (AliTRDtrackGTU*) tracksRefUnique[zch]->First();
@@ -731,13 +733,13 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
            else if (trkStage0 == 0x0 ) {
                trkStage0 = trk;
                minIdx = zch;
-               done = kFALSE;
+               // done = kFALSE;
            }
            else if ( ((trk->GetZChannel() + 3 * trk->GetZSubChannel()) / 2 - 1) <  ((trkStage0->GetZChannel() + 3 * trkStage0->GetZSubChannel()) / 2 -1 ) ||
                      (((trk->GetZChannel() + 3 * trk->GetZSubChannel()) / 2 - 1) == ((trkStage0->GetZChannel() + 3 * trkStage0->GetZSubChannel()) / 2 -1 ) && (trk->GetYapprox() < trkStage0->GetYapprox()) ) ) {
                minIdx = zch;
                trkStage0 = trk;
-               done = kFALSE;
+               // done = kFALSE;
            }
        }
 
@@ -806,7 +808,7 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
 // ----- Merging in zchanels - 2nd stage -----
 
     do {
-       done = kTRUE;
+      // done = kTRUE;
        trkStage0 = 0x0;
        for (Int_t i = 1; i >= 0; i--) {
            AliTRDtrackGTU *trk = (AliTRDtrackGTU*) tracksZSplitted[i]->First();
@@ -816,13 +818,13 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
            else if (trkStage0 == 0x0 ) {
                trkStage0 = trk;
                minIdx = i;
-               done = kFALSE;
+               // done = kFALSE;
            }
            else if ( (((trk->GetZChannel() + 3 * (trk->GetZSubChannel() - 1)) / 2) <  ((trkStage0->GetZChannel() + 3 * (trkStage0->GetZSubChannel() - 1)) / 2)) ||
                      ((((trk->GetZChannel() + 3 * (trk->GetZSubChannel() - 1)) / 2) == ((trkStage0->GetZChannel() + 3 * (trkStage0->GetZSubChannel() - 1)) / 2)) && (trk->GetYapprox() < trkStage0->GetYapprox()) ) ) {
                minIdx = i;
                trkStage0 = trk;
-               done = kFALSE;
+               // done = kFALSE;
            }
        }
 
@@ -963,8 +965,11 @@ Bool_t AliTRDgtuTMU::CalculatePID(AliTRDtrackGTU *track)
       pidSum += trk->GetPID();
       nTracklets++;
     }
+
     if (nTracklets>0)
       track->SetPID(pidSum/nTracklets);
+    else
+      AliError("Track without contributing tracklets, no PID assigned");
 
     return kTRUE;
   }
@@ -1015,7 +1020,7 @@ Bool_t AliTRDgtuTMU::CalculateTrackParams(AliTRDtrackGTU *track)
 }
 
 
-Bool_t AliTRDgtuTMU::Uniquifier(TList *inlist, TList *outlist)
+Bool_t AliTRDgtuTMU::Uniquifier(const TList *inlist, TList *outlist)
 {
   // remove multiple occurences of the same track