Support for automatic pedestal estimation per pad (Marian and Matevz).
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCSectorData.cxx
index 06c3adf214af0a0e82e0e8c73b4021d0a43c9a2d..4bff842117a6991959ab44ee1e42f7f491630eec 100644 (file)
@@ -23,7 +23,7 @@
 using namespace Reve;
 using namespace Alieve;
 
-ClassImp(TPCSectorData);
+ClassImp(TPCSectorData)
 
 AliTPCParam* TPCSectorData::fgParam    = 0;
 Int_t        TPCSectorData::fgNAllRows = 0;
@@ -193,7 +193,7 @@ void TPCSectorData::BeginPad(Int_t row, Int_t pad, Bool_t reverseTime)
   }
 }
 
-void TPCSectorData::EndPad()
+void TPCSectorData::EndPad(Bool_t autoPedestal, Short_t threshold)
 {
   Short_t *beg, *end;
   if(fCurrentStep > 0) {
@@ -203,6 +203,34 @@ void TPCSectorData::EndPad()
     beg = fPadBuffer + fCurrentPos + 2;
     end = fPadBuffer + 2048;
   }
+
+  if(autoPedestal) {
+    Short_t array[1024];
+    Short_t* val;
+    val = beg + 1;    
+    while(val <= end) {
+      array[(val-beg)/2] = *val;
+      val += 2;
+    }    
+    Short_t pedestal = TMath::Nint(TMath::Median((end-beg)/2, array));
+    val = beg + 1;
+    while(val <= end) {
+      *val -= pedestal;
+      val += 2;
+    }
+    Short_t* wpos = beg;
+    Short_t* rpos = beg;
+    while(rpos < end) {
+      if(rpos[1] > threshold) {
+       wpos[0] = rpos[0];
+       wpos[1] = rpos[1];
+       wpos += 2;
+      }
+      rpos += 2;
+    }
+    end = wpos;
+  }
+
   Short_t* wpos = beg;
   Short_t* rpos = beg;
 
@@ -394,7 +422,7 @@ void TPCSectorData::RowIterator::Test()
 // TPCSectorData::SegmentInfo
 /**************************************************************************/
 
-ClassImp(TPCSectorData::SegmentInfo);
+ClassImp(TPCSectorData::SegmentInfo)
 
 TPCSectorData::SegmentInfo::SegmentInfo()
 {