]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EMCAL/AliCaloRawAnalyzerCrude.cxx
added macros to create and read TOF TriggerMask
[u/mrichter/AliRoot.git] / EMCAL / AliCaloRawAnalyzerCrude.cxx
index 01ba11031872274591e87548482663a957690481..52e68f4340d661abdccb40147cb2e66ba79edb2e 100644 (file)
 #include "AliCaloRawAnalyzerCrude.h"
 #include "AliCaloFitResults.h"
 #include "AliCaloBunchInfo.h"
-
+#include "TMath.h"
 using namespace std;
 
+#include "AliCaloConstants.h"
+
 ClassImp(AliCaloRawAnalyzerCrude)  
 
 
 AliCaloRawAnalyzerCrude::AliCaloRawAnalyzerCrude() : AliCaloRawAnalyzer("Crude", "Crude")
 {
-
+  fAlgo=Algo::kCrude;
 }
 
 
@@ -44,37 +46,39 @@ AliCaloRawAnalyzerCrude::~AliCaloRawAnalyzerCrude()
 
 
 AliCaloFitResults
-AliCaloRawAnalyzerCrude::Evaluate(const vector<AliCaloBunchInfo> &bunchvector, const UInt_t /*altrocfg1*/,  const UInt_t /*altrocfg2*/)
+AliCaloRawAnalyzerCrude::Evaluate(const vector<AliCaloBunchInfo> &bunchvector, const UInt_t altrocfg1,  const UInt_t altrocfg2)
 {
   // Evaluation of signal parameters
-  if( bunchvector.size()  <=  0 )
+  short maxampindex; //index of maximum amplitude
+  short maxamp; //Maximum amplitude
+  int index = SelectBunch( bunchvector,  &maxampindex,  &maxamp );
+  if( index >= 0)
     {
-      return AliCaloFitResults(AliCaloFitResults::kInvalid, AliCaloFitResults::kInvalid);
-    }
+      Float_t ped = ReverseAndSubtractPed( &(bunchvector.at(index))  ,  altrocfg1, altrocfg2, fReversed  );
+      Float_t maxf = TMath::MaxElement( bunchvector.at(index).GetLength(),  fReversed );
+      short timebinOffset = maxampindex - (bunchvector.at(index).GetLength()-1);
+
+      if(  maxf < fAmpCut  ||  ( maxamp - ped) > fOverflowCut  ) // (maxamp - ped) > fOverflowCut = Close to saturation (use low gain then)
+       {
+         return  AliCaloFitResults( maxamp, ped, Ret::kCrude, maxf, timebinOffset);
+       }
+      else if ( maxf >= fAmpCut ) // no if statement needed really; keep for readability
+       {
+         int first = 0;
+         int last = 0;
+         int maxrev =  maxampindex -  bunchvector.at(index).GetStartBin();
+         SelectSubarray( fReversed,  bunchvector.at(index).GetLength(), maxrev , &first, &last);
+
+         Float_t chi2 = CalculateChi2(maxf, maxrev, first, last);
+         Int_t ndf = last - first - 1; // nsamples - 2
+         return AliCaloFitResults( maxamp, ped, Ret::kCrude, maxf, timebinOffset,
+                                   timebinOffset, chi2, ndf, Ret::kDummy, AliCaloFitSubarray(index, maxrev, first, last) ); 
+       } // ampcut
+    } // bunch index    
+
+  return AliCaloFitResults( Ret::kInvalid , Ret::kInvalid);
 
-  Int_t amp = 0;
-  Int_t tof = -99;
-  const UShort_t *sig;
-  
-  double ped = EvaluatePedestal( bunchvector.at(0).GetData(), bunchvector.at(0).GetLength() ) ;
-
-  for( unsigned int i= 0; i < bunchvector.size(); ++i)
-    {
-      sig = bunchvector.at(i).GetData();
-      int length = bunchvector.at(i).GetLength(); 
-      
-      for(int j = 0; j < length; j ++)
-       if( sig[j] > amp  )
-         {
-           amp   = sig[j];
-           tof   = bunchvector.at(i).GetStartBin() - j;                     
-         }
-    }
-
-  //:EvaluatePedestal(const UShort_t * const data, const int length )
-  //  double ped = EvaluatePedestal(sig, length) ;
-  return  AliCaloFitResults(amp, ped, AliCaloFitResults::kCrude, amp - ped, tof);
-  
 } //end Crude