]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDgtuTMU.cxx
Obsolete macros
[u/mrichter/AliRoot.git] / TRD / AliTRDgtuTMU.cxx
index 6043d3bb71e61d4269c38c39bb9a7a8463a14e9d..71bc880c1d2950a056db5e3a227b9bce8457b6c5 100644 (file)
@@ -50,6 +50,8 @@ AliTRDgtuTMU::AliTRDgtuTMU(Int_t stack, Int_t sector) :
   fStack(-1),
   fSector(-1)
 {
+  // constructor which initializes the position information of the TMU
+
   fGtuParam = AliTRDgtuParam::Instance();
   fTracklets = new TObjArray*[fGtuParam->GetNLayers()];
   fZChannelTracklets = new TList*[fGtuParam->GetNLayers()];
@@ -69,6 +71,8 @@ AliTRDgtuTMU::AliTRDgtuTMU(Int_t stack, Int_t sector) :
 
 AliTRDgtuTMU::~AliTRDgtuTMU() 
 {
+  // destructor
+
   for (Int_t zch = 0; zch < fGtuParam->GetNZChannels(); zch++) {
     delete [] fTracks[zch];
   }
@@ -148,12 +152,12 @@ Bool_t AliTRDgtuTMU::RunTMU(TList *ListOfTracks, AliESDEvent *esd)
   // calculation of track parameteres (pt, deflection, ???)
 
   if (fStack < 0 || fSector < 0) {
-    AliError("No valid stack/sector set for this TMU! Tracking aborted!");
+    AliError("No valid stack/sector set for this TMU! No tracking!");
     return kFALSE;
   }
 
   // ----- Input units -----
-  AliInfo("--------- Running Input units ----------");
+  AliDebug(1,"--------- Running Input units ----------");
   for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
     if (!RunInputUnit(layer)) {
       AliError(Form("Input unit in layer %i failed", layer));
@@ -162,7 +166,7 @@ Bool_t AliTRDgtuTMU::RunTMU(TList *ListOfTracks, AliESDEvent *esd)
   }
 
   // ----- Z-channel units -----
-  AliInfo("--------- Running Z-channel units ----------");
+  AliDebug(1,"--------- Running Z-channel units ----------");
   for (Int_t layer = 0;  layer <  fGtuParam->GetNLayers(); layer++) {
     fZChannelTracklets[layer] = new TList[fGtuParam->GetNZChannels()];
     if (!RunZChannelUnit(layer)) {
@@ -172,9 +176,9 @@ Bool_t AliTRDgtuTMU::RunTMU(TList *ListOfTracks, AliESDEvent *esd)
   }
 
   // ----- track finding -----
-  AliInfo("--------- Running tracking units ----------");
+  AliDebug(1,"--------- Running tracking units ----------");
   for (Int_t zch = 0; zch < fGtuParam->GetNZChannels(); zch++) {
-    AliInfo(Form("Track finder for Zchannel: %i", zch));
+    AliDebug(2,Form("Track finder for Zchannel: %i", zch));
     if (!RunTrackFinder(zch, ListOfTracks)) {
       AliError(Form("Track Finder in z-channel %i failed", zch));
       return kFALSE;
@@ -219,14 +223,14 @@ Bool_t AliTRDgtuTMU::RunInputUnit(Int_t layer)
     alpha = ( 2 * trk->GetdY() - (alpha >> fGtuParam->GetBitExcessAlpha()) + 1 ) >> 1;
     trk->SetAlpha(alpha);
 
-    Int_t yproj = trk->GetdY() * (fGtuParam->GetCiYProj(layer)); 
+    Int_t yproj = trk->GetdY() * (fGtuParam->GetCiYProj(layer)); //??? sign?
     yproj = ( ( ( (yproj >> fGtuParam->GetBitExcessYProj()) + trk->GetYbin() ) >> 2) + 1) >> 1;
     trk->SetYProj(yproj);
 
     trk->SetYPrime(trk->GetYbin() + fGtuParam->GetYt(fStack, layer, trk->GetZbin()));
 
-//    printf("InputUnit : GetIndex(): %3i, GetZbin(): %2i, GetY() : %5i, GetdY() : %3i, GetYPrime() : %5i, GetYProj() : %5i, GetAlpha() : %3i \n", 
-//        trk->GetIndex(), trk->GetZbin(), trk->GetYbin(), trk->GetdY(), trk->GetYPrime(), trk->GetYProj(), trk->GetAlpha() );
+    AliDebug(10, Form("InputUnit : GetIndex(): %3i, GetZbin(): %2i, GetY() : %5i, GetdY() : %3i, GetYPrime() : %5i, GetYProj() : %5i, GetAlpha() : %3i", 
+                     trk->GetIndex(), trk->GetZbin(), trk->GetYbin(), trk->GetdY(), trk->GetYPrime(), trk->GetYProj(), trk->GetAlpha() ));
   }
   return kTRUE;
 }
@@ -238,11 +242,11 @@ Bool_t AliTRDgtuTMU::RunZChannelUnit(Int_t layer)
   TIter next(fTracklets[layer]);
 
   while (AliTRDtrackletGTU *trk = (AliTRDtrackletGTU*) next()) {
-    printf("*TMU* Tracklet in stack %d, layer %2d: 0x%08x ", fStack, layer, trk->GetTrackletWord());
+    AliDebug(10,Form("*TMU* Tracklet in stack %d, layer %2d: 0x%08x ", fStack, layer, trk->GetTrackletWord()));
     for (Int_t zch = 0; zch < fGtuParam->GetNZChannels(); zch++) {
       if (fGtuParam->IsInZChannel(fStack, layer, zch, trk->GetZbin()) ) {
        trk->SetSubChannel(zch, fGtuParam->GetZSubchannel(fStack, layer, zch, trk->GetZbin()) );
-       printf("Z%i(%i) ", zch, trk->GetSubChannel(zch));
+//     printf("Z%i(%i) ", zch, trk->GetSubChannel(zch));
 
        TIter nexttrkl(&fZChannelTracklets[layer][zch], kIterBackward);
        AliTRDtrackletGTU *t = 0x0;
@@ -253,10 +257,10 @@ Bool_t AliTRDgtuTMU::RunZChannelUnit(Int_t layer)
        }
        fZChannelTracklets[layer][zch].AddAfter(t, trk);
       }
-      else 
-         printf("      ");
+//      else 
+//       printf("      ");
     }
-    printf("\n");
+//    printf("\n");
   }
   return kTRUE;
 }
@@ -281,15 +285,15 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
    Int_t       *incprime = new Int_t[fGtuParam->GetNLayers()];
 
 // ----- signals within current layer -----
-   Int_t       Yplus;
-   Int_t       Yminus;            
-   Int_t       YBplus;    
-   Int_t       YBminus;
-   Int_t       Alphaplus;
-   Int_t       Alphaminus; 
-   Int_t       NHits;
-   Int_t       NUnc;   
-   Int_t       NWayBeyond;
+   Int_t       yPlus;
+   Int_t       yMinus;            
+   Int_t       ybPlus;    
+   Int_t       ybMinus;
+   Int_t       alphaPlus;
+   Int_t       alphaMinus; 
+   Int_t       nHits;
+   Int_t       nUnc;   
+   Int_t       nWayBeyond;
 
    AliTRDtrackletGTU   *trkRA  = 0x0;  // reference tracklet A
    AliTRDtrackletGTU   *trkRB  = 0x0;  // reference tracklet B
@@ -305,7 +309,7 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
 
    for (Int_t refLayerIdx = 0; refLayerIdx < fGtuParam->GetNRefLayers(); refLayerIdx++) {
      Int_t reflayer = fGtuParam->GetRefLayer(refLayerIdx);
-     AliInfo(Form("~~~~~ Reflayer: %i", reflayer));
+     AliDebug(5,Form("~~~~~ Reflayer: %i", reflayer));
 
      ready = kFALSE; // ready if all channels done
 
@@ -320,7 +324,7 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
 //       ready = ready && bDone[layer];
 
        if (reflayer == 1)
-        AliInfo(Form("in layer: %i (zchannel = %i) there are: %i tracklets", layer, zch, notr[layer]));
+        AliDebug(5,Form("in layer: %i (zchannel = %i) there are: %i tracklets", layer, zch, notr[layer]));
      }
      
      if (ptrA[reflayer] < 0 && ptrB[reflayer] < 0) 
@@ -333,30 +337,30 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
        if (0 <= ptrA[reflayer] && ptrA[reflayer] < notr[reflayer])
         trkRA = (AliTRDtrackletGTU*) fZChannelTracklets[reflayer][zch].At(ptrA[reflayer]);
        else  {
-        AliInfo(Form("No valid tracklet in the reference at ptr: %i! Aborting!", ptrA[reflayer]));
+        AliDebug(10,Form("No valid tracklet in the reference at ptr: %i! Nothing done!", ptrA[reflayer]));
         break; 
        }
 
        if (0 <= ptrB[reflayer] && ptrB[reflayer] < notr[reflayer])
         trkRB = (AliTRDtrackletGTU*) fZChannelTracklets[reflayer][zch].At(ptrB[reflayer]);
 
-       AliInfo(Form("ptrRA: %i, ptrRB: %i", ptrA[reflayer], ptrB[reflayer]));
-       Yplus     = trkRA->GetYProj() + fGtuParam->GetDeltaY();
-       Yminus    = trkRA->GetYProj() - fGtuParam->GetDeltaY();
-       Alphaplus  = trkRA->GetAlpha() + fGtuParam->GetDeltaAlpha();
-       Alphaminus = trkRA->GetAlpha() - fGtuParam->GetDeltaAlpha();
+       AliDebug(10,Form("ptrRA: %i, ptrRB: %i", ptrA[reflayer], ptrB[reflayer]));
+       yPlus     = trkRA->GetYProj() + fGtuParam->GetDeltaY();
+       yMinus    = trkRA->GetYProj() - fGtuParam->GetDeltaY();
+       alphaPlus  = trkRA->GetAlpha() + fGtuParam->GetDeltaAlpha();
+       alphaMinus = trkRA->GetAlpha() - fGtuParam->GetDeltaAlpha();
        if (trkRB) {
-        YBplus           = trkRB->GetYProj() + fGtuParam->GetDeltaY();
-        YBminus          = trkRB->GetYProj() - fGtuParam->GetDeltaY();
+        ybPlus           = trkRB->GetYProj() + fGtuParam->GetDeltaY();
+        ybMinus          = trkRB->GetYProj() - fGtuParam->GetDeltaY();
        }
        else { // irrelevant (should be, is it?)
-        YBplus           = trkRA->GetYProj() + fGtuParam->GetDeltaY();
-        YBminus          = trkRA->GetYProj() - fGtuParam->GetDeltaY();
+        ybPlus           = trkRA->GetYProj() + fGtuParam->GetDeltaY();
+        ybMinus          = trkRA->GetYProj() - fGtuParam->GetDeltaY();
        }
 
-       NHits     = 0;
-       NUnc      = 0;
-       NWayBeyond = 0;
+       nHits     = 0;
+       nUnc      = 0;
+       nWayBeyond = 0;
        
        for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
         bHitA[layer] = bHitB[layer] = bAligned[layer] = kFALSE;
@@ -365,7 +369,7 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
         if (layer == reflayer) {
           bHitA[layer] = kTRUE;
           bAligned[layer] = kTRUE;
-          NHits++;
+          nHits++;
           continue; 
         }
 
@@ -380,11 +384,11 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
         bAlignedB[layer] = kFALSE;
 
         if (trkA) { 
-          bHitA[layer] = ( !(trkA->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() < Yminus) ) &&
-                           !(trkA->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() > Yplus)  ) &&
-                           !(trkA->GetAlpha() < Alphaminus) &&
-                           !(trkA->GetAlpha() > Alphaplus) );
-          bAlignedA[layer] = !(trkA->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() < Yminus) ); 
+          bHitA[layer] = ( !(trkA->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() < yMinus) ) &&
+                           !(trkA->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() > yPlus)  ) &&
+                           !(trkA->GetAlpha() < alphaMinus) &&
+                           !(trkA->GetAlpha() > alphaPlus) );
+          bAlignedA[layer] = !(trkA->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() < yMinus) ); 
         }
         else {
           bHitA[layer] = 0;
@@ -392,11 +396,11 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
         }
 
         if (trkB) {
-          bHitB[layer] = ( !(trkB->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() < Yminus) ) &&
-                           !(trkB->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() > Yplus) ) &&
-                           !(Alphaminus > trkB->GetAlpha()) &&
-                           !(Alphaplus  > trkB->GetAlpha()) );
-          bAlignedB[layer] = (trkB->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() > Yplus) );
+          bHitB[layer] = ( !(trkB->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() < yMinus) ) &&
+                           !(trkB->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() > yPlus) ) &&
+                           !(alphaMinus > trkB->GetAlpha()) &&
+                           !(alphaPlus  > trkB->GetAlpha()) );
+          bAlignedB[layer] = (trkB->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() > yPlus) );
         } 
         else {
           bHitB[layer] = 0;
@@ -407,22 +411,22 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
 //      bAligned[layer] = bAlignedA[layer]; //???
          
         if (bAligned[layer] && (bHitA[layer] || bHitB[layer]) )
-          NHits++;
+          nHits++;
         else if (!bAligned[layer] )
-          NUnc++;
+          nUnc++;
         if (trkRB) {
           if (trkA) {
-            if ((trkA->GetSubChannel(zch) > trkRB->GetSubChannel(zch)) || (trkA->GetSubChannel(zch) == trkRB->GetSubChannel(zch) && trkA->GetYProj() > YBplus) )
-              NWayBeyond++;
+            if ((trkA->GetSubChannel(zch) > trkRB->GetSubChannel(zch)) || (trkA->GetSubChannel(zch) == trkRB->GetSubChannel(zch) && trkA->GetYProj() > ybPlus) )
+              nWayBeyond++;
           }
           else 
-            NWayBeyond++;
+            nWayBeyond++;
         }
 
         //  pre-calculation for the layer shifting (alignment w. r. t. trkRB)
         if (trkA) {
             if(trkRB) {
-                if ((trkA->GetSubChannel(zch) < trkRB->GetSubChannel(zch)) || (trkA->GetSubChannel(zch) == trkRB->GetSubChannel(zch) && trkA->GetYProj() < YBminus )) // could trkA be aligned for trkRB
+                if ((trkA->GetSubChannel(zch) < trkRB->GetSubChannel(zch)) || (trkA->GetSubChannel(zch) == trkRB->GetSubChannel(zch) && trkA->GetYProj() < ybMinus )) // could trkA be aligned for trkRB
                     incprime[layer] = 1;
                 else 
                     incprime[layer] = 0;
@@ -432,7 +436,7 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
 
             if (trkB) { 
                 if (trkRB) {
-                    if ((trkB->GetSubChannel(zch) < trkRB->GetSubChannel(zch)) || (trkB->GetSubChannel(zch) == trkRB->GetSubChannel(zch) && trkB->GetYProj() < YBminus )) // could trkB be aligned for trkRB
+                    if ((trkB->GetSubChannel(zch) < trkRB->GetSubChannel(zch)) || (trkB->GetSubChannel(zch) == trkRB->GetSubChannel(zch) && trkB->GetYProj() < ybMinus )) // could trkB be aligned for trkRB
                         incprime[layer] = 2;
                 }
                 else 
@@ -441,11 +445,11 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
         }
        } // end of loop over layers
 
-       AliInfo(Form("logic calculation finished, Nhits: %i", NHits));
+       AliDebug(5,Form("logic calculation finished, Nhits: %i", nHits));
 
-       if (NHits >= 4) {
+       if (nHits >= 4) {
         // ----- track registration -----
-        AliInfo("***** TMU: Track found *****");
+        AliDebug(1,"***** TMU: Track found *****");
         AliTRDtrackGTU *track = new AliTRDtrackGTU();
         track->SetSector(fSector);
         track->SetStack(fStack);
@@ -458,8 +462,12 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
 
         Bool_t registerTrack = kTRUE;
         for (Int_t layerIdx = refLayerIdx; layerIdx > 0; layerIdx--) {
-            if (track->IsTrackletInLayer(fGtuParam->GetRefLayer(layerIdx)))
+           if (track->IsTrackletInLayer(fGtuParam->GetRefLayer(layerIdx))) {
+             if ((track->GetTracklet(fGtuParam->GetRefLayer(layerIdx)))->GetSubChannel(zch) > 0) {
+               AliDebug(1,"Not registered");
                 registerTrack = kFALSE;
+             }
+           }
         }
         if (registerTrack) {
             track->SetZChannel(zch);
@@ -468,9 +476,9 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
         }
        }
        
-       if ( (NUnc != 0) && (NUnc + NHits >= 4) ) // could this position of the reference layer give some track //??? special check in case of hit?
+       if ( (nUnc != 0) && (nUnc + nHits >= 4) ) // could this position of the reference layer give some track //??? special check in case of hit?
          inc[reflayer] = 0;
-       else if (NWayBeyond > 2) // no track possible for both reference tracklets
+       else if (nWayBeyond > 2) // no track possible for both reference tracklets
         inc[reflayer] = 2;
        else 
         inc[reflayer] = 1;
@@ -495,13 +503,13 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
             trkB = (AliTRDtrackletGTU*) fZChannelTracklets[layer][zch].At(ptrB[layer]);
 
           if (trkA) {
-              if ( !(trkA->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() < Yminus) ) && 
-                   !(trkA->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() > Yplus ) ) )  // trkA could hit trkRA
+              if ( !(trkA->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() < yMinus) ) && 
+                   !(trkA->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkA->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkA->GetYProj() > yPlus ) ) )  // trkA could hit trkRA
                   inc[layer] = 0;
               else if (trkB) {
-                  if ( trkB->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() < Yminus) )
+                  if ( trkB->GetSubChannel(zch) < trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() < yMinus) )
                       inc[layer] = 2;
-                  else if ( !(trkB->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() > Yplus) ) )
+                  else if ( !(trkB->GetSubChannel(zch) > trkRA->GetSubChannel(zch) || (trkB->GetSubChannel(zch) == trkRA->GetSubChannel(zch) && trkB->GetYProj() > yPlus) ) )
                       inc[layer] = 1;
                   else 
                       inc[layer] = incprime[layer];
@@ -522,7 +530,7 @@ Bool_t AliTRDgtuTMU::RunTrackFinder(Int_t zch, TList* /* ListOfTracks */)
           AliError(Form("Invalid increment: %i at ptrA: %i, notr: %i", inc[layer], ptrA[layer], notr[layer]));
 
 //      AliInfo(Form("Shifting layer: %i, notr: %i, ptrA: %i, ptrB: %i, inc: %i", layer, notr[layer], ptrA[layer], ptrB[layer], inc[layer]));
-        AliInfo(Form(" -- Layer: %i   %i   %i   +%i   %s  (no: %i)", layer, ptrA[layer], ptrB[layer], inc[layer], bDone[layer] ? "done" : "    ", notr[layer]));
+        AliDebug(10,Form(" -- Layer: %i   %i   %i   +%i   %s  (no: %i)", layer, ptrA[layer], ptrB[layer], inc[layer], bDone[layer] ? "done" : "    ", notr[layer]));
         ptrA[layer] += inc[layer];
         ptrB[layer] += inc[layer];
        }
@@ -592,7 +600,8 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
                    done = kFALSE;
                }
            }
-
+            if (!trkStage0)
+              break;
            tracksRefMerged[zch]->Add(trkStage0);
            fTracks[zch][minIdx].RemoveFirst();
        } while (trkStage0 != 0);
@@ -622,7 +631,8 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
            }
        }
        
-       
+       if (!trkStage0)
+          break;
        tracksZMergedStage0->Add(trkStage0);
        tracksRefUnique[minIdx]->RemoveFirst();
     } while (trkStage0 != 0);
@@ -658,6 +668,8 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
            }
        }
        
+        if (!trkStage0)
+          break;
        tracksZMergedStage1->Add(trkStage0);
        tracksZSplitted[minIdx]->RemoveFirst();
     } while (trkStage0 != 0);
@@ -669,13 +681,38 @@ Bool_t AliTRDgtuTMU::RunTrackMerging(TList* ListOfTracks)
 
 Bool_t AliTRDgtuTMU::RunTrackReconstruction(TList* ListOfTracks) 
 {
+  // run the track reconstruction for all tracks in the list
+
   TIter next(ListOfTracks);
   while (AliTRDtrackGTU *track = (AliTRDtrackGTU*) next()) {
     CalculateTrackParams(track);
+    CalculatePID(track);
   }
   return kTRUE;
 }
 
+Bool_t AliTRDgtuTMU::CalculatePID(AliTRDtrackGTU *track)
+{
+  // calculate PID for the given track
+  if (!track) {
+    AliError("No track to calculate!");
+    return kFALSE;
+  }
+
+  Int_t nTracklets = 0;
+  Int_t pidSum = 0;
+  for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
+    if (!track->IsTrackletInLayer(layer)) {
+      continue;
+    }
+    AliTRDtrackletGTU *trk = track->GetTracklet(layer);
+    pidSum += trk->GetPID();
+    nTracklets++;
+  }
+  track->SetPID(pidSum/nTracklets);
+  return kTRUE;
+}
+
 Bool_t AliTRDgtuTMU::CalculateTrackParams(AliTRDtrackGTU *track) 
 {
   // calculate the track parameters
@@ -691,7 +728,7 @@ Bool_t AliTRDgtuTMU::CalculateTrackParams(AliTRDtrackGTU *track)
   Float_t x1;
   Float_t x2;
 
-  AliInfo(Form("There are %i tracklets in this track.", track->GetNTracklets()));
+  AliDebug(5,Form("There are %i tracklets in this track.", track->GetNTracklets()));
 
   for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
     if (!track->IsTrackletInLayer(layer)) {
@@ -702,7 +739,7 @@ Bool_t AliTRDgtuTMU::CalculateTrackParams(AliTRDtrackGTU *track)
       AliError(Form("Could not get tracklet in layer %i\n", layer));
       continue;
     }
-    AliInfo(Form("trk yprime: %i", trk->GetYPrime()));
+    AliDebug(10,Form("trk yprime: %i", trk->GetYPrime()));
     a += (((Int_t) (2048 * fGtuParam->GetAki(track->GetTrackletMask(), layer))) * trk->GetYPrime() + 1) >> 8; 
     b += fGtuParam->GetBki(track->GetTrackletMask(), layer) * trk->GetYPrime() * fGtuParam->GetBinWidthY();
     c += fGtuParam->GetCki(track->GetTrackletMask(), layer) * trk->GetYPrime() * fGtuParam->GetBinWidthY();
@@ -712,8 +749,8 @@ Bool_t AliTRDgtuTMU::CalculateTrackParams(AliTRDtrackGTU *track)
   a = a >> 2;
 
   fGtuParam->GetIntersectionPoints(track->GetTrackletMask(), x1, x2);
-  AliInfo(Form("Intersection points: %f, %f", x1, x2));
-  AliInfo(Form("Sum: a = %5i, b = %9.2f, c = %9.2f\n", a, b, c));
+  AliDebug(10,Form("Intersection points: %f, %f", x1, x2));
+  AliDebug(10,Form("Sum: a = %5i, b = %9.2f, c = %9.2f\n", a, b, c));
   track->SetFitParams(a, b, c);
 
   Float_t r = fGtuParam->GetRadius(a, b, x1, x2);
@@ -724,7 +761,7 @@ Bool_t AliTRDgtuTMU::CalculateTrackParams(AliTRDtrackGTU *track)
       pt -= 29;
   pt /= 2;
   track->SetPtInt(pt);
-  AliInfo(Form("Track parameters: a = %i, b = %f, c = %f, x1 = %f, x2 = %f, r = %f, pt = %f (trkl mask: %i)", a, b, c, x1, x2, r, track->GetPt(), track->GetTrackletMask()));
+  AliDebug(5,Form("Track parameters: a = %i, b = %f, c = %f, x1 = %f, x2 = %f, r = %f, pt = %f (trkl mask: %i)", a, b, c, x1, x2, r, track->GetPt(), track->GetTrackletMask()));
   return kTRUE;
 }
 
@@ -740,11 +777,11 @@ Bool_t AliTRDgtuTMU::WriteTrackletsToTree(TTree *trklTree)
       branch = trklTree->Branch("gtutracklets", "AliTRDtrackletGTU", &trkl, 32000, 99);
   }
 
-  AliInfo(Form("---------- Writing tracklets to tree (not yet) ----------"));
+  AliDebug(5,Form("---------- Writing tracklets to tree (not yet) ----------"));
   for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
     TIter next(fTracklets[layer]);
-    while (trkl = (AliTRDtrackletGTU*) next()) {
-       AliInfo(Form("InputUnit : GetIndex(): %3i, GetZbin(): %2i, GetY() : %5i, GetdY() : %3i, GetYPrime() : %5i, GetYProj() : %5i, GetAlpha() : %3i, Zidx(2..0): %i  %i  %i", trkl->GetIndex(), trkl->GetZbin(), trkl->GetYbin(), trkl->GetdY(), trkl->GetYPrime(), trkl->GetYProj(), trkl->GetAlpha(), trkl->GetSubChannel(2), trkl->GetSubChannel(1), trkl->GetSubChannel(0) ));
+    while ((trkl = (AliTRDtrackletGTU*) next())) {
+       AliDebug(10,Form("InputUnit : GetIndex(): %3i, GetZbin(): %2i, GetY() : %5i, GetdY() : %3i, GetYPrime() : %5i, GetYProj() : %5i, GetAlpha() : %3i, Zidx(2..0): %i  %i  %i", trkl->GetIndex(), trkl->GetZbin(), trkl->GetYbin(), trkl->GetdY(), trkl->GetYPrime(), trkl->GetYProj(), trkl->GetAlpha(), trkl->GetSubChannel(2), trkl->GetSubChannel(1), trkl->GetSubChannel(0) ));
        branch->SetAddress(&trkl);
        trklTree->Fill();
     }
@@ -754,6 +791,8 @@ Bool_t AliTRDgtuTMU::WriteTrackletsToTree(TTree *trklTree)
 
 Bool_t AliTRDgtuTMU::Uniquifier(TList *inlist, TList *outlist)
 {
+  // remove multiple occurences of the same track
+
     TIter next(inlist);
     AliTRDtrackGTU *trkStage0 = 0x0;
     AliTRDtrackGTU *trkStage1 = 0x0;
@@ -761,17 +800,17 @@ Bool_t AliTRDgtuTMU::Uniquifier(TList *inlist, TList *outlist)
     do {
        trkStage0 = (AliTRDtrackGTU*) next();
 
-       Bool_t tracks_equal = kFALSE;
+       Bool_t tracksEqual = kFALSE;
        if (trkStage0 != 0 && trkStage1 != 0) {
            for (Int_t layer = 0; layer < fGtuParam->GetNLayers(); layer++) {
                if (trkStage0->GetTrackletIndex(layer) != -1 && trkStage0->GetTrackletIndex(layer) == trkStage1->GetTrackletIndex(layer)) {
-                   tracks_equal = kTRUE;
+                   tracksEqual = kTRUE;
                    break;
                }
            }
        }
 
-       if (tracks_equal) {
+       if (tracksEqual) {
            if (trkStage0->GetNTracklets() > trkStage1->GetNTracklets())
                trkStage1 = trkStage0;
        }