Using the new altro raw-data format. Removing some obsolete macros.
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTPCData.cxx
index 9709acf04115d97d733d9f24d7965134a050528a..d8aaa766787cd0a480f48d118ef040964cde58ab 100644 (file)
 
 #include <AliSimDigits.h>
 #include <AliTPCParam.h>
-#include <AliTPCRawStream.h>
+#include <AliTPCRawStreamV3.h>
 #include <TTree.h>
 
+//==============================================================================
+//==============================================================================
+// AliEveTPCData
+//==============================================================================
 
 //______________________________________________________________________________
-// AliEveTPCData
 //
 // A central manager for TPC data of an event.  Can read digits (from
 // a tree: LoadDigits()) and raw-data (via AliRawReader: LoadRaw()).
@@ -41,11 +44,15 @@ AliEveTPCData::AliEveTPCData() :
   fSectors(36), fSectorBlockSize(65536),
   fLoadThreshold(0), fLoadPedestal(0), fAutoPedestal(kFALSE)
 {
+  // Constructor.
+
   AliEveTPCSectorData::InitStatics();
 }
 
 AliEveTPCData::~AliEveTPCData()
 {
+  // Destructor, deletes all sector-data.
+
   DeleteAllSectors();
 }
 
@@ -53,27 +60,35 @@ AliEveTPCData::~AliEveTPCData()
 
 void AliEveTPCData::CreateSector(Int_t sector)
 {
-  if(fSectors[sector] == 0)
+  // Create sector-data for sector if it does not exist already.
+
+  if (fSectors[sector] == 0)
     fSectors[sector] = new AliEveTPCSectorData(sector, fSectorBlockSize);
 }
 
 void AliEveTPCData::CreateAllSectors()
 {
-  for(Int_t s=0; s<36; ++s)
+  // Create all 36 sectors.
+
+  for (Int_t s=0; s<36; ++s)
     CreateSector(s);
 }
 
 void AliEveTPCData::DropAllSectors()
 {
-  for(Int_t s=0; s<36; ++s) {
-    if(fSectors[s] != 0)
+  // Drop data of all existing sectors.
+
+  for (Int_t s=0; s<36; ++s) {
+    if (fSectors[s] != 0)
       fSectors[s]->DropData();
   }
 }
 
 void AliEveTPCData::DeleteAllSectors()
 {
-  for(Int_t s=0; s<36; ++s) {
+  // Delete all sector-data.
+
+  for (Int_t s=0; s<36; ++s) {
     delete fSectors[s];
     fSectors[s] = 0;
   }
@@ -83,8 +98,11 @@ void AliEveTPCData::DeleteAllSectors()
 
 AliEveTPCSectorData* AliEveTPCData::GetSectorData(Int_t sector, Bool_t spawnSectors)
 {
-  if(sector < 0 || sector > 35) return 0;
-  if(fSectors[sector] == 0 && spawnSectors)
+  // Get sector-data for sector. If spawnSectors is true, the
+  // sector-data is created if it does not exist already.
+
+  if (sector < 0 || sector > 35) return 0;
+  if (fSectors[sector] == 0 && spawnSectors)
     CreateSector(sector);
   return fSectors[sector];
 }
@@ -110,15 +128,15 @@ void AliEveTPCData::LoadDigits(TTree* tree, Bool_t spawnSectors)
   for (Int_t ent=0; ent<numEnt; ent++) {
     tree->GetEntry(ent);
     AliEveTPCSectorData::GetParam().AdjustSectorRow(digit.GetID(), sector, row);
-    if(sector >= 36) {
+    if (sector >= 36) {
       sector -= 36;
       row    += AliEveTPCSectorData::GetInnSeg().GetNRows();
     }
     secData = GetSectorData(sector, spawnSectors);
-    if(secData == 0)
+    if (secData == 0)
       continue;
 
-    if(digit.First() == kFALSE)
+    if (digit.First() == kFALSE)
       continue;
     curPad = -1;
     do {
@@ -126,55 +144,57 @@ void AliEveTPCData::LoadDigits(TTree* tree, Bool_t spawnSectors)
       time   = digit.CurrentRow();
       signal = digit.CurrentDigit();
 
-      if(pad != curPad) {
-       if(inFill)
+      if (pad != curPad) {
+       if (inFill)
          secData->EndPad(fAutoPedestal, fLoadThreshold);
        secData->BeginPad(row, pad, kFALSE);
        curPad = pad;
        inFill = kTRUE;
       }
-      if(fAutoPedestal) {
+      if (fAutoPedestal) {
        secData->RegisterData(time, signal);
       } else {
        signal -= fLoadPedestal;
-       if(signal >= fLoadThreshold)
+       if (signal >= fLoadThreshold)
          secData->RegisterData(time, signal);
       }
 
     } while (digit.Next());
-    if(inFill) {
+    if (inFill) {
       secData->EndPad(fAutoPedestal, fLoadThreshold);
       inFill = kFALSE;
     }
   }
 }
 
-void AliEveTPCData::LoadRaw(AliTPCRawStream& input, Bool_t spawnSectors, Bool_t warn)
+void AliEveTPCData::LoadRaw(AliTPCRawStreamV3& input, Bool_t spawnSectors, Bool_t warn)
 {
-  // Load data from AliTPCRawStream.
+  // Load data from AliTPCRawStreamV3.
   // If spawnSectors is false only sectors that have been created previously
   // via CreateSector() are loaded.
   // If spawnSectors is true sectors are created if data for them is encountered.
 
-  static const TEveException eH("AliEveTPCData::LoadRaw ");
+  static const TEveException kEH("AliEveTPCData::LoadRaw ");
 
   Int_t   sector = -1, row = -1, pad = -1, rowOffset = 0;
   Short_t time,  signal;
-  Bool_t  inFill   = kFALSE;
-  Short_t lastTime = 9999;
+  Bool_t  inFill       = kFALSE;
+  Short_t pdrwCnt      = 9999; // Count time-bins in padrow; needed to detect more than 1024 time-bins per padrow.
+  Short_t lastTime     = 9999; // Last time-bin stored; needed to check for out-of-order time bins.
+  Bool_t  pdrwCntWarn  = kFALSE;
   Bool_t  lastTimeWarn = kFALSE;
   AliEveTPCSectorData* secData = 0;
 
   Short_t threshold = fLoadThreshold;
 
-  while (input.Next()) {
+  while (input.NextDDL()) {
     if (input.IsNewSector()) {
-      if(inFill) {
+      if (inFill) {
        secData->EndPad(fAutoPedestal, threshold);
        inFill = kFALSE;
       }
       sector = input.GetSector();
-      if(sector >= 36) {
+      if (sector >= 36) {
        sector -= 36;
        rowOffset = AliEveTPCSectorData::GetInnSeg().GetNRows();
       } else {
@@ -185,56 +205,71 @@ void AliEveTPCData::LoadRaw(AliTPCRawStream& input, Bool_t spawnSectors, Bool_t
     if (secData == 0)
       continue;
 
-    if (input.IsNewPad()) {
-      if(inFill) {
-       secData->EndPad(fAutoPedestal, threshold);
-       inFill = kFALSE;
-      }
-      row = input.GetRow() + rowOffset;
-      pad = input.GetPad();
-
-      if(pad >= AliEveTPCSectorData::GetNPadsInRow(row)) {
-       if(warn) {
-         Warning(eH.Data(), "pad out of range (row=%d, pad=%d, maxpad=%d).",
-                 row, pad, AliEveTPCSectorData::GetNPadsInRow(row));
+    while (input.NextChannel()) {
+      if (input.IsNewPad()) {
+       if (inFill) {
+         secData->EndPad(fAutoPedestal, threshold);
+         inFill = kFALSE;
+       }
+       row = input.GetRow() + rowOffset;
+       pad = input.GetPad();
+
+       if (pad >= AliEveTPCSectorData::GetNPadsInRow(row) || pad < 0) {
+         if (warn) {
+           Warning(kEH.Data(), "pad out of range (row=%d, pad=%d, maxpad=%d).",
+                   row, pad, AliEveTPCSectorData::GetNPadsInRow(row));
+         }
+         continue;
        }
-       continue;
-      }
 
-      AliEveTPCSectorData::PadRowHack* prh = secData->GetPadRowHack(row, pad);
-      if(prh != 0) {
-       threshold = prh->fThrExt + Short_t(prh->fThrFac*fLoadThreshold);
-      } else {
        threshold = fLoadThreshold;
-      }
 
-      secData->BeginPad(row, pad, kTRUE);
-      inFill   = kTRUE;
-      lastTime = 1024;  lastTimeWarn = kFALSE;
-    }
+       secData->BeginPad(row, pad, kTRUE);
+       inFill   = kTRUE;
+       pdrwCnt  = 0;     pdrwCntWarn  = kFALSE;
+       lastTime = 1024;  lastTimeWarn = kFALSE;
+      }
 
-    time   = input.GetTime();
-    signal = input.GetSignal();
-    if(time >= lastTime) {
-      if(lastTimeWarn == kFALSE) {
-       if(warn)
-         Warning(eH.Data(), "time out of order (row=%d, pad=%d, time=%d, lastTime=%d).",
-                 row, pad, time, lastTime);
-        lastTimeWarn = kTRUE;
+      while (input.NextBunch()) {
+       const UShort_t *signalarr = input.GetSignals();
+
+       Int_t starttime = input.GetStartTimeBin();
+       for (Int_t i = 0; i < input.GetBunchLength(); i++) {
+         time   = starttime--;;
+         signal = signalarr[i];
+         ++pdrwCnt;
+         if (pdrwCnt > 1024) {
+           if (pdrwCntWarn == kFALSE) {
+             if (warn)
+               Warning(kEH.Data(), "more than 1024 time-bins (row=%d, pad=%d, time=%d).\nFurther warnings of this type will be suppressed for this padrow.",
+                       row, pad, time);
+             pdrwCntWarn = kTRUE;
+           }
+           continue;
+         }
+         if (time >= lastTime) {
+           if (lastTimeWarn == kFALSE) {
+             if (warn)
+               Warning(kEH.Data(), "time out of order (row=%d, pad=%d, time=%d, lastTime=%d).\nFurther warnings of this type will be suppressed for this padrow.",
+                       row, pad, time, lastTime);
+             lastTimeWarn = kTRUE;
+           }
+           continue;
+         }
+         lastTime = time;
+         if (fAutoPedestal) {
+           secData->RegisterData(time, signal);
+         } else {
+           signal -= fLoadPedestal;
+           if (signal > threshold)
+             secData->RegisterData(time, signal);
+         }
+       }
       }
-      continue;
-    }
-    lastTime = time;
-    if(fAutoPedestal) {
-      secData->RegisterData(time, signal);
-    } else {
-      signal -= fLoadPedestal;
-      if(signal > threshold)
-       secData->RegisterData(time, signal);
     }
   }
 
-  if(inFill) {
+  if (inFill) {
     secData->EndPad(fAutoPedestal, threshold);
     inFill = kFALSE;
   }