Improvements of raw data processing: pedestal calculation from presamples, suppressio...
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 8 Oct 2007 07:58:14 +0000 (07:58 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 8 Oct 2007 07:58:14 +0000 (07:58 +0000)
PHOS/AliPHOSRawDecoder.cxx
PHOS/AliPHOSRawDigiProducer.cxx
PHOS/AliPHOSReconstructor.cxx

index 2b8aedb..442abd3 100644 (file)
@@ -132,11 +132,13 @@ Bool_t AliPHOSRawDecoder::NextDigit()
   Int_t    iBin     = 0;
   Int_t    mxSmps   = fSamples->GetSize();
   Int_t    tLength  = 0;
-  Int_t    ped      = 0;
   fEnergy = -111;
+  Float_t pedMean = 0;
+  Int_t   nPed = 0;
+  Float_t baseLine = 1.0;
+  const Float_t nPreSamples = 10;
   
   fSamples->Reset();
-
    while ( in->Next() ) { 
 
      if(!tLength) {
@@ -157,23 +159,29 @@ Bool_t AliPHOSRawDecoder::NextDigit()
        // Take is as a first time bin multiplied by the sample tick time
        
        if(fPedSubtract) 
-        fEnergy -= (Double_t)ped; // "pedestal subtraction"
+        fEnergy -= (Double_t)(pedMean/nPed); // "pedestal subtraction"
        
        if(fLowGainFlag)
         fEnergy *= fPulseGenerator->GetRawFormatHighLowGainFactor(); // *16 
-      
+
+       if (fEnergy < baseLine) fEnergy = 0;
+
+       pedMean = 0;
        return kTRUE;
      }
 
      fLowGainFlag = in->IsLowGain();
      fTime = fPulseGenerator->GetRawFormatTimeTrigger() * in->GetTime();
      fModule = in->GetModule()+1;
-     fRow = in->GetRow()   +1;
+     fRow    = in->GetRow()   +1;
      fColumn = in->GetColumn()+1;
 
      // Fill array with samples
      iBin++;                                                             
-     if(iBin==1) ped=in->GetSignal();
+     if(tLength-iBin < nPreSamples) {
+       pedMean += in->GetSignal();
+       nPed++;
+     }
      fSamples->AddAt(in->GetSignal(),tLength-iBin);
      if((Double_t)in->GetSignal() > fEnergy) fEnergy = (Double_t)in->GetSignal();
      
index 91c7e19..7a7a85b 100644 (file)
@@ -59,6 +59,8 @@ void AliPHOSRawDigiProducer::MakeDigits(TClonesArray *digits, AliPHOSRawDecoder*
 
   while (decoder->NextDigit()) {
 
+    if (decoder->GetEnergy() <= 0.) continue;
+
     lowGainFlag = decoder->IsLowGain();
     time = decoder->GetTime();
 
index 6c6c764..55d3239 100644 (file)
@@ -312,6 +312,7 @@ AliTracker* AliPHOSReconstructor::CreateTracker() const
   return new AliPHOSTracker();
 }
 
+//____________________________________________________________________________
 void  AliPHOSReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
 {
   // Converts raw data to
@@ -343,6 +344,19 @@ void  AliPHOSReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digits
     digit->SetEnergy(digit->GetEnergy()/AliPHOSPulseGenerator::GeV2ADC());
   }
   
+  // Clean up digits below the noise threshold
+  // Assuming the digit noise to be 4 MeV, we suppress digits within
+  // 3-sigma of the noise.
+  // This parameter should be passed via AliPHOSRecoParamEmc later
+
+  const Double_t emcDigitThreshold = 0.012;
+  for(Int_t i=0; i<digits->GetEntries(); i++) {
+    AliPHOSDigit* digit = (AliPHOSDigit*)digits->At(i);
+    if(digit->GetEnergy() < emcDigitThreshold)
+      digits->RemoveAt(i) ;
+  }
+  digits->Compress() ;  
+
   //!!!!for debug!!!
   Int_t modMax=-111;
   Int_t colMax=-111;