Move initizalization of fiitting algorithm RawAnalyzer to SetFittingAlgorithm, now...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Feb 2010 22:16:52 +0000 (22:16 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Feb 2010 22:16:52 +0000 (22:16 +0000)
EMCAL/AliEMCALRawUtils.cxx
EMCAL/AliEMCALRawUtils.h

index 98edf2d..30651a1 100644 (file)
@@ -28,9 +28,8 @@
 
 #include "AliEMCALRawUtils.h"
   
-#include <TF1.h>
-#include <TGraph.h>
-#include <TRandom.h>
+#include "TF1.h"
+#include "TGraph.h"
 class TSystem;
   
 class AliLog;
@@ -87,26 +86,7 @@ AliEMCALRawUtils::AliEMCALRawUtils(fitAlgorithm fitAlgo)
   fNoiseThreshold = 3; // 3 ADC counts is approx. noise level
   fNPedSamples = 4;    // less than this value => likely pedestal samples
   fRemoveBadChannels = kTRUE; //Remove bad channels before fitting
-  fFittingAlgorithm  = fitAlgo;
-
-  if (fitAlgo == kFastFit) {
-    fRawAnalyzer = new AliCaloRawAnalyzerFastFit();
-  }
-  else if (fitAlgo == kNeuralNet) {
-    fRawAnalyzer = new AliCaloRawAnalyzerNN();
-  }
-  else if (fitAlgo == kLMS) {
-    fRawAnalyzer = new AliCaloRawAnalyzerLMS();
-  }
-  else if (fitAlgo == kPeakFinder) {
-    fRawAnalyzer = new AliCaloRawAnalyzerPeakFinder();
-  }
-  else if (fitAlgo == kCrude) {
-    fRawAnalyzer = new AliCaloRawAnalyzerCrude();
-  }
-  else {
-    fRawAnalyzer = new AliCaloRawAnalyzer();
-  }
+  SetFittingAlgorithm(fitAlgo);
 
   //Get Mapping RCU files from the AliEMCALRecParam                                 
   const TObjArray* maps = AliEMCALRecParam::GetMappings();
@@ -153,27 +133,9 @@ AliEMCALRawUtils::AliEMCALRawUtils(AliEMCALGeometry *pGeometry, fitAlgorithm fit
   fNoiseThreshold = 3; // 3 ADC counts is approx. noise level
   fNPedSamples = 4;    // less than this value => likely pedestal samples
   fRemoveBadChannels = kTRUE; //Remove bad channels before fitting
-  fFittingAlgorithm  = fitAlgo;
-
-  if (fitAlgo == kFastFit) {
-    fRawAnalyzer = new AliCaloRawAnalyzerFastFit();
-  }
-  else if (fitAlgo == kNeuralNet) {
-    fRawAnalyzer = new AliCaloRawAnalyzerNN();
-  }
-  else if (fitAlgo == kLMS) {
-    fRawAnalyzer = new AliCaloRawAnalyzerLMS();
-  }
-  else if (fitAlgo == kPeakFinder) {
-    fRawAnalyzer = new AliCaloRawAnalyzerPeakFinder();
-  }
-  else if (fitAlgo == kCrude) {
-    fRawAnalyzer = new AliCaloRawAnalyzerCrude();
-  }
-  else {
-    fRawAnalyzer = new AliCaloRawAnalyzer();
-  }
-
+  SetFittingAlgorithm(fitAlgo);
+       
   //Get Mapping RCU files from the AliEMCALRecParam
   const TObjArray* maps = AliEMCALRecParam::GetMappings();
   if(!maps) AliFatal("Cannot retrieve ALTRO mappings!!");
@@ -728,8 +690,8 @@ Double_t AliEMCALRawUtils::RawResponseFunctionLog(Double_t *x, Double_t *par)
 }
 
 //__________________________________________________________________
-Bool_t AliEMCALRawUtils::RawSampledResponse(const Double_t dtime, const Double_t damp, 
-Int_t * adcH, Int_t * adcL, const Int_t keyErr) const  
+Bool_t AliEMCALRawUtils::RawSampledResponse(
+const Double_t dtime, const Double_t damp, Int_t * adcH, Int_t * adcL) const 
 {
   // for a start time dtime and an amplitude damp given by digit, 
   // calculates the raw sampled response AliEMCAL::RawResponseFunction
@@ -749,9 +711,8 @@ Int_t * adcH, Int_t * adcL, const Int_t keyErr) const
   signalF.SetParameter(3, fOrder);
   signalF.SetParameter(4, fgPedestalValue);
 
-  Double_t signal=0.0, noise=0.0;
   for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
-    signal = signalF.Eval(iTime) ;     
+    Double_t signal = signalF.Eval(iTime) ;     
 
     // Next lines commeted for the moment but in principle it is not necessary to add
     // extra noise since noise already added at the digits level.      
@@ -762,11 +723,9 @@ Int_t * adcH, Int_t * adcL, const Int_t keyErr) const
     //signal = sqrt(signal*signal + noise*noise);
 
     // March 17,09 for fast fit simulations by Alexei Pavlinov.
-    // Get from PHOS analysis. In some sense it is open question.
-    if(keyErr>0) {
-      noise = gRandom->Gaus(0.,fgFEENoise);
-      signal += noise;
-    } 
+    // Get from PHOS analysis. In some sense it is open questions.
+    //Double_t noise = gRandom->Gaus(0.,fgFEENoise);
+    //signal += noise; 
 
     adcH[iTime] =  static_cast<Int_t>(signal + 0.5) ;
     if ( adcH[iTime] > fgkRawSignalOverflow ){  // larger than 10 bits 
@@ -782,3 +741,44 @@ Int_t * adcH, Int_t * adcL, const Int_t keyErr) const
   }
   return lowGain ; 
 }
+
+//__________________________________________________________________
+void AliEMCALRawUtils::SetFittingAlgorithm(Int_t fitAlgo)              
+{
+       //Set fitting algorithm and initialize it if this same algorithm was not set before.
+       
+       if(fitAlgo == fFittingAlgorithm && fRawAnalyzer) {
+               //Do nothing, this same algorithm already set before.
+               //printf("**** Algorithm already set before, number %d, %s ****\n",fitAlgo, fRawAnalyzer->GetName());
+               return;
+       }
+       //Initialize the requested algorithm
+       if(fitAlgo != fFittingAlgorithm || !fRawAnalyzer) {
+               //printf("**** Init Algorithm , number %d ****\n",fitAlgo);
+               
+               fFittingAlgorithm = fitAlgo; 
+               if (fRawAnalyzer) delete fRawAnalyzer;  // delete prev. analyzer if existed.
+               
+               if (fitAlgo == kFastFit) {
+                       fRawAnalyzer = new AliCaloRawAnalyzerFastFit();
+               }
+               else if (fitAlgo == kNeuralNet) {
+                       fRawAnalyzer = new AliCaloRawAnalyzerNN();
+               }
+               else if (fitAlgo == kLMS) {
+                       fRawAnalyzer = new AliCaloRawAnalyzerLMS();
+               }
+               else if (fitAlgo == kPeakFinder) {
+                       fRawAnalyzer = new AliCaloRawAnalyzerPeakFinder();
+               }
+               else if (fitAlgo == kCrude) {
+                       fRawAnalyzer = new AliCaloRawAnalyzerCrude();
+               }
+               else {
+                       fRawAnalyzer = new AliCaloRawAnalyzer();
+               }
+       }
+       
+}
+
+
index 46ed9b8..e075653 100644 (file)
@@ -54,8 +54,8 @@ class AliEMCALRawUtils : public TObject {
   Double_t GetPedestalValue()  const {return fgPedestalValue;}
   Double_t GetFEENoise()       const {return fgFEENoise;}
 
-  Bool_t GetRemoveBadChannels()   const {return fRemoveBadChannels;}
-  Int_t  GetFittingAlgorithm()    const {return fFittingAlgorithm; }
+  Bool_t GetRemoveBadChannels() const {return fRemoveBadChannels;}
+  Int_t  GetFittingAlgorithm()  const {return fFittingAlgorithm; }
        
   void SetRawFormatHighLowGainFactor(Double_t val) {fHighLowGainFactor=val;}
   void SetRawFormatOrder(Int_t val)                {fOrder=val; }   
@@ -63,7 +63,7 @@ class AliEMCALRawUtils : public TObject {
   void SetNoiseThreshold(Int_t val)                {fNoiseThreshold=val; }
   void SetNPedSamples(Int_t val)                   {fNPedSamples=val; }
   void SetRemoveBadChannels(Bool_t val)            {fRemoveBadChannels=val; }
-  void SetFittingAlgorithm(Int_t val)              {fFittingAlgorithm=val; } // not enough to set this variable to switch between algorithms, so should be modified 
+  void SetFittingAlgorithm(Int_t val) ;             
 
   // set methods for fast fit simulation
   void SetFEENoise(Double_t val)                   {fgFEENoise = val;}
@@ -88,8 +88,7 @@ class AliEMCALRawUtils : public TObject {
   void FitParabola(const TGraph *gSig, Float_t & amp) const ; 
   static Double_t RawResponseFunction(Double_t *x, Double_t *par); 
   static Double_t RawResponseFunctionLog(Double_t *x, Double_t *par); 
-  Bool_t   RawSampledResponse(Double_t dtime, Double_t damp, 
-  Int_t * adcH, Int_t * adcL, const Int_t keyErr=0) const;   
+  Bool_t   RawSampledResponse(Double_t dtime, Double_t damp, Int_t * adcH, Int_t * adcL) const;  
 
 
  private: