- correction in geometry usage for tracklets
authorjklein <jklein@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Jun 2012 15:10:12 +0000 (15:10 +0000)
committerjklein <jklein@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Jun 2012 15:10:12 +0000 (15:10 +0000)
- consistent conversion of integer PID to float
- bugfix in tracklet sorting
- consistency check for tracklet assignment to tracks

TRD/AliTRDReconstructor.cxx
TRD/AliTRDrawStream.cxx
TRD/AliTRDrawStream.h
TRD/AliTRDtrackletMCM.h
TRD/AliTRDtrackletWord.h

index be96379..3f440a0 100644 (file)
@@ -308,81 +308,14 @@ 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;
-      }
-    }
-
-    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;
-    }
+  Int_t trackletIndex[1080] = { 0 };
+  TList trklList;
+  AliTRDrawStream::SortTracklets(fgTracklets, trklList, trackletIndex);
+  TIter trackletIter(&trklList);
+  while (AliESDTrdTracklet* tracklet = (AliESDTrdTracklet*) trackletIter()) {
+    esd->AddTrdTracklet(tracklet);
   }
 
   // ----- filling GTU tracks -----
@@ -410,10 +343,18 @@ void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/
                (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()));
+               AliDebug(5, Form("adding tracklet with index %i: 0x%08x",
+                                idx, 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);
              }
+           } else {
+             AliError(Form("Requested tracklet index %i out of range", idx));
            }
+         } else {
+           AliError(Form("Non-existing tracklets requested in det %i", det));
          }
        }
       }
index ea312fc..b62edfd 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "AliLog.h"
 #include "AliRawReader.h"
+#include "AliTRDcalibDB.h"
 #include "AliTRDdigitsManager.h"
 #include "AliTRDdigitsParam.h"
 #include "AliTRDcalibDB.h"
@@ -1432,7 +1433,7 @@ Int_t AliTRDrawStream::ReadTPData(Int_t mode)
       MCMError(kPosUnexp, Form("#%i after #%i in readout order", GetMCMReadoutPos(MCM(*fPayloadCurr)), lastmcmpos));
     }
 
-    if (EvNo(*fPayloadCurr) != evno) {
+    if (EvNo(*fPayloadCurr) != (evno & 0xfffff)) {
       if (evno == -1) {
        evno = EvNo(*fPayloadCurr);
       }
@@ -1578,9 +1579,10 @@ Int_t AliTRDrawStream::ReadZSData()
                               GetMCMReadoutPos(MCM(*fPayloadCurr)), lastmcmpos, GetMCMReadoutPos(fCurrMcmPos)));
     }
 
-    if (EvNo(*fPayloadCurr) != evno) {
-      if (evno == -1)
+    if (EvNo(*fPayloadCurr) != (evno & 0xfffff)) {
+      if (evno == -1) {
        evno = EvNo(*fPayloadCurr);
+      }
       else {
        MCMError(kEvCntMismatch, "%i <-> %i", evno, EvNo(*fPayloadCurr));
       }
@@ -1594,6 +1596,9 @@ Int_t AliTRDrawStream::ReadZSData()
       MCMError(kUnknown, "Data in padrow > 11 for stack 2");
     }
 
+    if (fErrorFlags & (kDiscardMCM | kDiscardHC | kDiscardDDL))
+      break; //???
+
     // ----- Reading ADC channels -----
     AliDebug(2, DumpAdcMask("ADC mask: ", *fPayloadCurr));
 
@@ -1781,9 +1786,10 @@ Int_t AliTRDrawStream::ReadNonZSData()
       MCMError(kPosUnexp, Form("#%i after #%i in readout order", GetMCMReadoutPos(MCM(*fPayloadCurr)), lastmcmpos));
     }
 
-    if (EvNo(*fPayloadCurr) != evno) {
-      if (evno == -1)
+    if (EvNo(*fPayloadCurr) != (evno & 0xfffff)) {
+      if (evno == -1) {
        evno = EvNo(*fPayloadCurr);
+      }
       else {
        MCMError(kEvCntMismatch, "%i <-> %i", evno, EvNo(*fPayloadCurr));
       }
@@ -2220,6 +2226,9 @@ void AliTRDrawStream::SortTracklets(TClonesArray *trklArray, TList &sortedTrackl
 {
   // sort tracklets for referencing from GTU tracks
 
+  if (!trklArray)
+    return;
+
   Int_t nTracklets = trklArray->GetEntriesFast();
 
   Int_t lastHC = -1;
@@ -2263,8 +2272,7 @@ void AliTRDrawStream::SortTracklets(TClonesArray *trklArray, TList &sortedTrackl
          trklA = 0x0;
       }
       else {
-       if ((trklA->GetZbin() < trklB->GetZbin()) ||
-           ((trklA->GetZbin() == trklB->GetZbin()) && (trklA->GetYbin() < trklB->GetYbin()))) {
+       if (trklA->GetZbin() <= trklB->GetZbin()) {
          trklNext = trklA;
          trklIndexA++;
          trklA = trklIndexA < nTracklets ? (AliTRDtrackletBase*) ((*trklArray)[trklIndexA]) : 0x0;
index c078f91..c54ea24 100644 (file)
@@ -90,9 +90,10 @@ class AliTRDrawStream : public TObject
 
   enum ErrorBehav_t {
     kTolerate = 0,
-    kAbort = 1,
-    kDiscardMCM = 2,
-    kDiscardHC = 4
+    kDiscardMCM = 1,
+    kDiscardHC = 2,
+    kDiscardDDL = 4,
+    kAbort = 8
   };
 
   enum MarkerCode_t {
@@ -158,6 +159,13 @@ class AliTRDrawStream : public TObject
 
   AliTRDrawStats* GetStats() { return &fStats; }
   Int_t GetEventSize(Int_t sector)  const { return fStats.fStatsSector[sector].fBytes; }
+  Int_t GetEventSize(Int_t sector, Int_t stack)  const {
+    Int_t size = 0;
+    for (Int_t iHC = 0; iHC < 12; iHC++) {
+      size += fStats.fStatsSector[sector].fStatsHC[12*stack + iHC].fBytes;
+    }
+    return size;
+  }
   Int_t GetNTracklets(Int_t sector) const { return fStats.fStatsSector[sector].fNTracklets; }
   Int_t GetNMCMs(Int_t sector)      const { return fStats.fStatsSector[sector].fNMCMs; }
   Int_t GetNChannels(Int_t sector)  const { return fStats.fStatsSector[sector].fNChannels; }
index 3b4251a..324e7a2 100644 (file)
@@ -39,7 +39,7 @@ class AliTRDtrackletMCM : public AliTRDtrackletBase {
 
   // ----- Getters for offline corresponding values -----
   Bool_t CookPID() { return kFALSE; }
-  Double_t GetPID(Int_t /* is */) const { return GetPID()/255.; }
+  Double_t GetPID(Int_t /* is */) const { return GetPID()/256.; }
   Int_t GetDetector() const { return fHCId / 2; }
   Int_t GetHCId() const { return fHCId; }
   Float_t GetdYdX() const { return (GetdY() * 140e-4 / 3.); }
index 146e292..cdaa1fc 100644 (file)
@@ -42,7 +42,7 @@ class AliTRDtrackletWord : public AliTRDtrackletBase {
   Float_t GetY() const { return (GetYbin() * 160e-4); }
   Float_t GetZ() const { return fgGeo->GetPadPlane((fHCId % 12) / 2, (fHCId/12) % 5)->GetRowPos(GetZbin()) -
       fgGeo->GetPadPlane((fHCId % 12) / 2, (fHCId/12) % 5)->GetRowSize(GetZbin())  * .5; }
-  Float_t GetLocalZ() const { return GetZ() - fgGeo->GetPadPlane((fHCId % 12) / 2, (fHCId/12) % 5)->GetRowPos(8); }
+  Float_t GetLocalZ() const { return GetZ() - fgGeo->GetPadPlane((fHCId % 12) / 2, (fHCId/12) % 5)->GetRowPos((((fHCId/12) % 5) != 2) ? 8 : 6); }
 
   UInt_t GetTrackletWord() const { return fTrackletWord; }
   void SetTrackletWord(UInt_t trackletWord) { fTrackletWord = trackletWord; }