ROOT logo
/**************************************************************************
 * This file is property of and copyright by the Experimental Nuclear     *
 * Physics Group, Dep. of Physics                                         *
 * University of Oslo, Norway, 2007                                       *
 *                                                                        *
 * Author: Per Thomas Hille <perthi@fys.uio.no> for the ALICE HLT Project.*
 * Contributors are mentioned in the code where appropriate.              *
 * Please report bugs to perthi@fys.uio.no                                *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// Evaluation of amplitude
// as max sample value - pedestal
// Not veru accurate, but very robust
// --------------
// --------------

#include "AliCaloRawAnalyzerCrude.h"
#include "AliCaloFitResults.h"
#include "AliCaloBunchInfo.h"
#include "TMath.h"
using namespace std;

ClassImp(AliCaloRawAnalyzerCrude)  


AliCaloRawAnalyzerCrude::AliCaloRawAnalyzerCrude() : AliCaloRawAnalyzer("Crude", "Crude")
{
  // Ctor
  
  fAlgo=Algo::kCrude;
}

AliCaloFitResults
AliCaloRawAnalyzerCrude::Evaluate(const vector<AliCaloBunchInfo> &bunchvector, const UInt_t altrocfg1,  const UInt_t altrocfg2)
{
  // Evaluation of signal parameters
  short maxampindex; //index of maximum amplitude
  short maxamp; //Maximum amplitude
  int index = SelectBunch( bunchvector,  &maxampindex,  &maxamp );
 
  if( index >= 0)
    {
      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, fFitArrayCut );

	  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);

} //end Crude


 AliCaloRawAnalyzerCrude.cxx:1
 AliCaloRawAnalyzerCrude.cxx:2
 AliCaloRawAnalyzerCrude.cxx:3
 AliCaloRawAnalyzerCrude.cxx:4
 AliCaloRawAnalyzerCrude.cxx:5
 AliCaloRawAnalyzerCrude.cxx:6
 AliCaloRawAnalyzerCrude.cxx:7
 AliCaloRawAnalyzerCrude.cxx:8
 AliCaloRawAnalyzerCrude.cxx:9
 AliCaloRawAnalyzerCrude.cxx:10
 AliCaloRawAnalyzerCrude.cxx:11
 AliCaloRawAnalyzerCrude.cxx:12
 AliCaloRawAnalyzerCrude.cxx:13
 AliCaloRawAnalyzerCrude.cxx:14
 AliCaloRawAnalyzerCrude.cxx:15
 AliCaloRawAnalyzerCrude.cxx:16
 AliCaloRawAnalyzerCrude.cxx:17
 AliCaloRawAnalyzerCrude.cxx:18
 AliCaloRawAnalyzerCrude.cxx:19
 AliCaloRawAnalyzerCrude.cxx:20
 AliCaloRawAnalyzerCrude.cxx:21
 AliCaloRawAnalyzerCrude.cxx:22
 AliCaloRawAnalyzerCrude.cxx:23
 AliCaloRawAnalyzerCrude.cxx:24
 AliCaloRawAnalyzerCrude.cxx:25
 AliCaloRawAnalyzerCrude.cxx:26
 AliCaloRawAnalyzerCrude.cxx:27
 AliCaloRawAnalyzerCrude.cxx:28
 AliCaloRawAnalyzerCrude.cxx:29
 AliCaloRawAnalyzerCrude.cxx:30
 AliCaloRawAnalyzerCrude.cxx:31
 AliCaloRawAnalyzerCrude.cxx:32
 AliCaloRawAnalyzerCrude.cxx:33
 AliCaloRawAnalyzerCrude.cxx:34
 AliCaloRawAnalyzerCrude.cxx:35
 AliCaloRawAnalyzerCrude.cxx:36
 AliCaloRawAnalyzerCrude.cxx:37
 AliCaloRawAnalyzerCrude.cxx:38
 AliCaloRawAnalyzerCrude.cxx:39
 AliCaloRawAnalyzerCrude.cxx:40
 AliCaloRawAnalyzerCrude.cxx:41
 AliCaloRawAnalyzerCrude.cxx:42
 AliCaloRawAnalyzerCrude.cxx:43
 AliCaloRawAnalyzerCrude.cxx:44
 AliCaloRawAnalyzerCrude.cxx:45
 AliCaloRawAnalyzerCrude.cxx:46
 AliCaloRawAnalyzerCrude.cxx:47
 AliCaloRawAnalyzerCrude.cxx:48
 AliCaloRawAnalyzerCrude.cxx:49
 AliCaloRawAnalyzerCrude.cxx:50
 AliCaloRawAnalyzerCrude.cxx:51
 AliCaloRawAnalyzerCrude.cxx:52
 AliCaloRawAnalyzerCrude.cxx:53
 AliCaloRawAnalyzerCrude.cxx:54
 AliCaloRawAnalyzerCrude.cxx:55
 AliCaloRawAnalyzerCrude.cxx:56
 AliCaloRawAnalyzerCrude.cxx:57
 AliCaloRawAnalyzerCrude.cxx:58
 AliCaloRawAnalyzerCrude.cxx:59
 AliCaloRawAnalyzerCrude.cxx:60
 AliCaloRawAnalyzerCrude.cxx:61
 AliCaloRawAnalyzerCrude.cxx:62
 AliCaloRawAnalyzerCrude.cxx:63
 AliCaloRawAnalyzerCrude.cxx:64
 AliCaloRawAnalyzerCrude.cxx:65
 AliCaloRawAnalyzerCrude.cxx:66
 AliCaloRawAnalyzerCrude.cxx:67
 AliCaloRawAnalyzerCrude.cxx:68
 AliCaloRawAnalyzerCrude.cxx:69
 AliCaloRawAnalyzerCrude.cxx:70
 AliCaloRawAnalyzerCrude.cxx:71
 AliCaloRawAnalyzerCrude.cxx:72
 AliCaloRawAnalyzerCrude.cxx:73
 AliCaloRawAnalyzerCrude.cxx:74
 AliCaloRawAnalyzerCrude.cxx:75
 AliCaloRawAnalyzerCrude.cxx:76
 AliCaloRawAnalyzerCrude.cxx:77