nsamples check needed for zero-suppressed data, for DA classes and RawUtils
authordsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Sep 2009 09:12:01 +0000 (09:12 +0000)
committerdsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Sep 2009 09:12:01 +0000 (09:12 +0000)
EMCAL/AliCaloCalibPedestal.cxx
EMCAL/AliCaloCalibSignal.cxx
EMCAL/AliEMCALCalibHistoProducer.cxx
EMCAL/AliEMCALRawUtils.cxx

index 264e427..d69d650 100644 (file)
@@ -352,7 +352,8 @@ Bool_t AliCaloCalibPedestal::ProcessEvent(AliCaloRawStreamV3 *in)
 
       // counters
       int max = AliEMCALGeoParams::fgkSampleMin, min = AliEMCALGeoParams::fgkSampleMax; // min and max sample values
-      
+      int nsamples = 0;
+
       // for the pedestal calculation
       int sampleSum = 0; // sum of samples
       int squaredSampleSum = 0; // sum of samples squared
@@ -363,6 +364,7 @@ Bool_t AliCaloCalibPedestal::ProcessEvent(AliCaloRawStreamV3 *in)
       while (in->NextBunch()) {
        const UShort_t *sig = in->GetSignals();
        startBin = in->GetStartTimeBin();
+       nsamples += in->GetBunchLength();
        for (i = 0; i < in->GetBunchLength(); i++) {
          sample = sig[i];
          time = startBin--;
@@ -382,6 +384,8 @@ Bool_t AliCaloCalibPedestal::ProcessEvent(AliCaloRawStreamV3 *in)
        } // loop over samples in bunch
       } // loop over bunches
 
+      if (nsamples > 0) { // this check is needed for when we have zero-supp. on, but not sparse readout
+
       // calculate pedesstal estimate: mean of possibly selected samples
       if (nSum > 0) {
        mean = sampleSum / (1.0 * nSum);
@@ -434,7 +438,7 @@ Bool_t AliCaloCalibPedestal::ProcessEvent(AliCaloRawStreamV3 *in)
        }
       }//end if valid gain
 
-    
+      } // nsamples>0 check, some data found for this channel; not only trailer/header
     }// end while over channel   
   }//end while over DDL's, of input stream 
 
index 446733c..e83ee0c 100644 (file)
@@ -364,9 +364,11 @@ Bool_t AliCaloCalibSignal::ProcessEvent(AliCaloRawStreamV3 *in, AliRawEventHeade
 
       // counters
       int max = AliEMCALGeoParams::fgkSampleMin, min = AliEMCALGeoParams::fgkSampleMax; // min and max sample values
-      
+      int nsamples = 0;
+
       while (in->NextBunch()) {
        const UShort_t *sig = in->GetSignals();
+       nsamples += in->GetBunchLength();
        for (Int_t i = 0; i < in->GetBunchLength(); i++) {
          sample = sig[i];
 
@@ -377,6 +379,8 @@ Bool_t AliCaloCalibSignal::ProcessEvent(AliCaloRawStreamV3 *in, AliRawEventHeade
        } // loop over samples in bunch
       } // loop over bunches
 
+      if (nsamples > 0) { // this check is needed for when we have zero-supp. on, but not sparse readout
+
       gain = -1; // init to not valid value
       //If we're here then we're done with this tower
       if ( in->IsLowGain() ) {
@@ -417,7 +421,8 @@ Bool_t AliCaloCalibSignal::ProcessEvent(AliCaloRawStreamV3 *in, AliRawEventHeade
        RefNum = GetRefNum(arrayPos, in->GetColumn(), gain); 
        LEDAmpVal[RefNum] = max - min;
       } // end of LED ref
-      
+
+      } // nsamples>0 check, some data found for this channel; not only trailer/header      
     } // end while over channel 
    
   }//end while over DDL's, of input stream
index e779b2f..4522fb4 100644 (file)
@@ -201,6 +201,19 @@ void AliEMCALCalibHistoProducer::Run()
 
        if(fSMInstalled[in.GetModule()]==kFALSE) continue;
 
+       // loop over samples
+       int nsamples = 0;
+       Int_t maxSample = 0;
+       while (in.NextBunch()) {
+         const UShort_t *sig = in.GetSignals();
+         nsamples += in.GetBunchLength();
+         for (Int_t i = 0; i < in.GetBunchLength(); i++) {
+           if (sig[i] > maxSample) maxSample = sig[i];
+         }
+       } // bunches
+
+       if (nsamples > 0) { // this check is needed for when we have zero-supp. on, but not sparse readout
+
        // indices
        Int_t mod = in.GetModule();
        Int_t col = in.GetColumn();
@@ -217,21 +230,15 @@ void AliEMCALCalibHistoProducer::Run()
          sprintf(hname,"mod%d",mod);
          fAmpProf[mod] = new TProfile(hname,hname,nEvtBins,0.,nEvtBins);
        }
-       
-       // loop over samples
-       Int_t maxSample = 0;
-       while (in.NextBunch()) {
-         const UShort_t *sig = in.GetSignals();
-         for (Int_t i = 0; i < in.GetBunchLength(); i++) {
-           if (sig[i] > maxSample) maxSample = sig[i];
-         }
-       } // bunches
-       
+               
        //Fill histogram/profile 
        if(HighGainFlag) {
          fAmpHisto[mod][col][row]->Fill(maxSample);
          fAmpProf[mod]->Fill(evtbin, maxSample);
        }
+
+      } // nsamples>0 check, some data found for this channel; not only trailer/header
+
       } // channels
     } // DDL's
 
index d93ff4a..23fb4dd 100644 (file)
@@ -331,10 +331,6 @@ void AliEMCALRawUtils::Raw2Digits(AliRawReader* reader,TClonesArray *digitsArr)
   while (in.NextDDL()) {
     while (in.NextChannel()) {
       
-      id =  fGeom->GetAbsCellIdFromCellIndexes(in.GetModule(), in.GetRow(), in.GetColumn()) ;
-      caloFlag = in.GetCaloFlag();
-      lowGain = in.IsLowGain();
-
       // There can be zero-suppression in the raw data, 
       // so set up the TGraph in advance
       for (i=0; i < GetRawFormatTimeBins(); i++) {
@@ -342,7 +338,7 @@ void AliEMCALRawUtils::Raw2Digits(AliRawReader* reader,TClonesArray *digitsArr)
       }
                
       Int_t maxTime = 0;
-
+      int nsamples = 0;
       while (in.NextBunch()) {
        const UShort_t *sig = in.GetSignals();
        startBin = in.GetStartTimeBin();
@@ -355,13 +351,19 @@ void AliEMCALRawUtils::Raw2Digits(AliRawReader* reader,TClonesArray *digitsArr)
          AliWarning(Form("Invalid time bin %d",maxTime));
          maxTime = GetRawFormatTimeBins();
        }
-
+       nsamples += in.GetBunchLength();
        for (i = 0; i < in.GetBunchLength(); i++) {
          time = startBin--;
          gSig->SetPoint(time, time, sig[i]) ;
        }
       } // loop over bunches
     
+      if (nsamples > 0) { // this check is needed for when we have zero-supp. on, but not sparse readout
+
+      id =  fGeom->GetAbsCellIdFromCellIndexes(in.GetModule(), in.GetRow(), in.GetColumn()) ;
+      caloFlag = in.GetCaloFlag();
+      lowGain = in.IsLowGain();
+
       gSig->Set(maxTime+1);
       FitRaw(gSig, signalF, amp, time) ; 
     
@@ -382,6 +384,7 @@ void AliEMCALRawUtils::Raw2Digits(AliRawReader* reader,TClonesArray *digitsArr)
       // Reset starting parameters for fit function
       signalF->SetParameters(10.,0.,fTau,fOrder,5.); //reset all defaults just to be safe
 
+      } // nsamples>0 check, some data found for this channel; not only trailer/header
    } // end while over channel   
   } //end while over DDL's, of input stream