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 <perthomas.hille@yale.edu>                    *
 * 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 peak position
// and amplitude using Neural Networks (NN)
// ------------------
// ------------------
// ------------------


#include "AliCaloRawAnalyzerNN.h"
#include "AliCaloNeuralFit.h"
#include "AliCaloFitResults.h"
#include "AliCaloBunchInfo.h"
#include <iostream>
using namespace std;

#include "AliCaloConstants.h"

ClassImp( AliCaloRawAnalyzerNN )

AliCaloRawAnalyzerNN::AliCaloRawAnalyzerNN() : AliCaloRawAnalyzer("Neural Network", "NN"), fNeuralNet(0)
{
  // Ctor
  
  fAlgo=Algo::kNeuralNet;

  fNeuralNet = new AliCaloNeuralFit();

  for(int i=0; i < 5 ; i++)
    {
      fNNInput[i]  = 0;
    }

}


AliCaloRawAnalyzerNN::~AliCaloRawAnalyzerNN()
{
  // Dtor
  delete fNeuralNet;
}


AliCaloFitResults 
AliCaloRawAnalyzerNN::Evaluate( const vector<AliCaloBunchInfo> &bunchvector, 
                                UInt_t altrocfg1,  UInt_t altrocfg2 )
{
  // The eveluation of  Peak position and amplitude using the Neural Network
  if( bunchvector.size()  <=  0 )
    {
      //  cout << __FILE__ << __LINE__<< " INVALID "<< endl;

      return AliCaloFitResults( Ret::kInvalid, Ret::kInvalid);
    } 
 
  short maxampindex;
  short maxamp;

  int index = SelectBunch( bunchvector, &maxampindex , &maxamp ) ;
  
  if( index   < 0 )
    {
      //  cout << __FILE__ << __LINE__<< "INVALID !!!!!!" << endl;
      return AliCaloFitResults( Ret::kInvalid, Ret::kInvalid);
    }
  
  Float_t ped = ReverseAndSubtractPed( &(bunchvector.at( index ) )  ,  altrocfg1, altrocfg2, fReversed  );  
  short timebinOffset = maxampindex - (bunchvector.at(index).GetLength()-1);
  double maxf =  maxamp - ped;

  if(  maxf < fAmpCut  ||  ( maxamp - ped) > fOverflowCut  ) // (maxamp - ped) > fOverflowCut = Close to saturation (use low gain then)
    {
      //   cout << __FILE__ << __LINE__<< ":  timebinOffset = " <<  timebinOffset  << "  maxf "<< maxf  << endl; 
      return  AliCaloFitResults( maxamp, ped, Ret::kCrude, maxf, timebinOffset);
    }

  int first = 0;
  int last = 0; 
  short maxrev = maxampindex  -  bunchvector.at(index).GetStartBin();
  SelectSubarray( fReversed,  bunchvector.at(index).GetLength(),  maxrev , &first, &last, fFitArrayCut );

  Float_t chi2 = 0;
  Int_t ndf = 0;
  if(maxrev  < 1000 )
    {
      if (  ( maxrev   - first) < 2  &&  (last -   maxrev ) < 2)
	{
	  chi2 = CalculateChi2(maxf, maxrev, first, last);
	  ndf = last - first - 1; // nsamples - 2
	  //	  cout << __FILE__ << __LINE__<< ":  timebinOffset = " <<  timebinOffset << "  maxf\t"<< maxf <<endl;
	  return AliCaloFitResults( maxamp, ped, Ret::kCrude, maxf, timebinOffset,
				    timebinOffset, chi2, ndf, Ret::kDummy, AliCaloFitSubarray(index, maxrev, first, last) ); 
	}
      else
	{

	  for(int i=0; i < 5 ; i++)
	    {
	      fNNInput[i]  = fReversed[maxrev-2 +i]/(maxamp -ped);
	    } 

	  	  
	  double amp = (maxamp - ped)*fNeuralNet->Value( 0,  fNNInput[0],  fNNInput[1], fNNInput[2], fNNInput[3], fNNInput[4]);
	  double tof = (fNeuralNet->Value( 1,  fNNInput[0],  fNNInput[1], fNNInput[2], fNNInput[3], fNNInput[4]) + timebinOffset ) ;

	  // use local-array time for chi2 estimate
	  chi2 = CalculateChi2(amp, tof-timebinOffset+maxrev, first, last);
	  ndf = last - first - 1; // nsamples - 2
	  //cout << __FILE__ << __LINE__<< ":  tof = " <<  tof << "   amp" << amp <<endl;
	  return AliCaloFitResults( maxamp, ped , Ret::kFitPar, amp , tof, timebinOffset, chi2, ndf,
				    Ret::kDummy, AliCaloFitSubarray(index, maxrev, first, last) );

	}
    }
  chi2 = CalculateChi2(maxf, maxrev, first, last);
  ndf = last - first - 1; // nsamples - 2
  
  // cout << __FILE__ << __LINE__<< ":  timebinOffset = " << timebinOffset <<  "   maxf ="<< maxf  << endl;
  return AliCaloFitResults( maxamp, ped, Ret::kCrude, maxf, timebinOffset,
			    timebinOffset, chi2, ndf, Ret::kDummy, AliCaloFitSubarray(index, maxrev, first, last) ); 

}


 AliCaloRawAnalyzerNN.cxx:1
 AliCaloRawAnalyzerNN.cxx:2
 AliCaloRawAnalyzerNN.cxx:3
 AliCaloRawAnalyzerNN.cxx:4
 AliCaloRawAnalyzerNN.cxx:5
 AliCaloRawAnalyzerNN.cxx:6
 AliCaloRawAnalyzerNN.cxx:7
 AliCaloRawAnalyzerNN.cxx:8
 AliCaloRawAnalyzerNN.cxx:9
 AliCaloRawAnalyzerNN.cxx:10
 AliCaloRawAnalyzerNN.cxx:11
 AliCaloRawAnalyzerNN.cxx:12
 AliCaloRawAnalyzerNN.cxx:13
 AliCaloRawAnalyzerNN.cxx:14
 AliCaloRawAnalyzerNN.cxx:15
 AliCaloRawAnalyzerNN.cxx:16
 AliCaloRawAnalyzerNN.cxx:17
 AliCaloRawAnalyzerNN.cxx:18
 AliCaloRawAnalyzerNN.cxx:19
 AliCaloRawAnalyzerNN.cxx:20
 AliCaloRawAnalyzerNN.cxx:21
 AliCaloRawAnalyzerNN.cxx:22
 AliCaloRawAnalyzerNN.cxx:23
 AliCaloRawAnalyzerNN.cxx:24
 AliCaloRawAnalyzerNN.cxx:25
 AliCaloRawAnalyzerNN.cxx:26
 AliCaloRawAnalyzerNN.cxx:27
 AliCaloRawAnalyzerNN.cxx:28
 AliCaloRawAnalyzerNN.cxx:29
 AliCaloRawAnalyzerNN.cxx:30
 AliCaloRawAnalyzerNN.cxx:31
 AliCaloRawAnalyzerNN.cxx:32
 AliCaloRawAnalyzerNN.cxx:33
 AliCaloRawAnalyzerNN.cxx:34
 AliCaloRawAnalyzerNN.cxx:35
 AliCaloRawAnalyzerNN.cxx:36
 AliCaloRawAnalyzerNN.cxx:37
 AliCaloRawAnalyzerNN.cxx:38
 AliCaloRawAnalyzerNN.cxx:39
 AliCaloRawAnalyzerNN.cxx:40
 AliCaloRawAnalyzerNN.cxx:41
 AliCaloRawAnalyzerNN.cxx:42
 AliCaloRawAnalyzerNN.cxx:43
 AliCaloRawAnalyzerNN.cxx:44
 AliCaloRawAnalyzerNN.cxx:45
 AliCaloRawAnalyzerNN.cxx:46
 AliCaloRawAnalyzerNN.cxx:47
 AliCaloRawAnalyzerNN.cxx:48
 AliCaloRawAnalyzerNN.cxx:49
 AliCaloRawAnalyzerNN.cxx:50
 AliCaloRawAnalyzerNN.cxx:51
 AliCaloRawAnalyzerNN.cxx:52
 AliCaloRawAnalyzerNN.cxx:53
 AliCaloRawAnalyzerNN.cxx:54
 AliCaloRawAnalyzerNN.cxx:55
 AliCaloRawAnalyzerNN.cxx:56
 AliCaloRawAnalyzerNN.cxx:57
 AliCaloRawAnalyzerNN.cxx:58
 AliCaloRawAnalyzerNN.cxx:59
 AliCaloRawAnalyzerNN.cxx:60
 AliCaloRawAnalyzerNN.cxx:61
 AliCaloRawAnalyzerNN.cxx:62
 AliCaloRawAnalyzerNN.cxx:63
 AliCaloRawAnalyzerNN.cxx:64
 AliCaloRawAnalyzerNN.cxx:65
 AliCaloRawAnalyzerNN.cxx:66
 AliCaloRawAnalyzerNN.cxx:67
 AliCaloRawAnalyzerNN.cxx:68
 AliCaloRawAnalyzerNN.cxx:69
 AliCaloRawAnalyzerNN.cxx:70
 AliCaloRawAnalyzerNN.cxx:71
 AliCaloRawAnalyzerNN.cxx:72
 AliCaloRawAnalyzerNN.cxx:73
 AliCaloRawAnalyzerNN.cxx:74
 AliCaloRawAnalyzerNN.cxx:75
 AliCaloRawAnalyzerNN.cxx:76
 AliCaloRawAnalyzerNN.cxx:77
 AliCaloRawAnalyzerNN.cxx:78
 AliCaloRawAnalyzerNN.cxx:79
 AliCaloRawAnalyzerNN.cxx:80
 AliCaloRawAnalyzerNN.cxx:81
 AliCaloRawAnalyzerNN.cxx:82
 AliCaloRawAnalyzerNN.cxx:83
 AliCaloRawAnalyzerNN.cxx:84
 AliCaloRawAnalyzerNN.cxx:85
 AliCaloRawAnalyzerNN.cxx:86
 AliCaloRawAnalyzerNN.cxx:87
 AliCaloRawAnalyzerNN.cxx:88
 AliCaloRawAnalyzerNN.cxx:89
 AliCaloRawAnalyzerNN.cxx:90
 AliCaloRawAnalyzerNN.cxx:91
 AliCaloRawAnalyzerNN.cxx:92
 AliCaloRawAnalyzerNN.cxx:93
 AliCaloRawAnalyzerNN.cxx:94
 AliCaloRawAnalyzerNN.cxx:95
 AliCaloRawAnalyzerNN.cxx:96
 AliCaloRawAnalyzerNN.cxx:97
 AliCaloRawAnalyzerNN.cxx:98
 AliCaloRawAnalyzerNN.cxx:99
 AliCaloRawAnalyzerNN.cxx:100
 AliCaloRawAnalyzerNN.cxx:101
 AliCaloRawAnalyzerNN.cxx:102
 AliCaloRawAnalyzerNN.cxx:103
 AliCaloRawAnalyzerNN.cxx:104
 AliCaloRawAnalyzerNN.cxx:105
 AliCaloRawAnalyzerNN.cxx:106
 AliCaloRawAnalyzerNN.cxx:107
 AliCaloRawAnalyzerNN.cxx:108
 AliCaloRawAnalyzerNN.cxx:109
 AliCaloRawAnalyzerNN.cxx:110
 AliCaloRawAnalyzerNN.cxx:111
 AliCaloRawAnalyzerNN.cxx:112
 AliCaloRawAnalyzerNN.cxx:113
 AliCaloRawAnalyzerNN.cxx:114
 AliCaloRawAnalyzerNN.cxx:115
 AliCaloRawAnalyzerNN.cxx:116
 AliCaloRawAnalyzerNN.cxx:117
 AliCaloRawAnalyzerNN.cxx:118
 AliCaloRawAnalyzerNN.cxx:119
 AliCaloRawAnalyzerNN.cxx:120
 AliCaloRawAnalyzerNN.cxx:121
 AliCaloRawAnalyzerNN.cxx:122
 AliCaloRawAnalyzerNN.cxx:123
 AliCaloRawAnalyzerNN.cxx:124
 AliCaloRawAnalyzerNN.cxx:125
 AliCaloRawAnalyzerNN.cxx:126
 AliCaloRawAnalyzerNN.cxx:127
 AliCaloRawAnalyzerNN.cxx:128
 AliCaloRawAnalyzerNN.cxx:129
 AliCaloRawAnalyzerNN.cxx:130
 AliCaloRawAnalyzerNN.cxx:131
 AliCaloRawAnalyzerNN.cxx:132
 AliCaloRawAnalyzerNN.cxx:133
 AliCaloRawAnalyzerNN.cxx:134
 AliCaloRawAnalyzerNN.cxx:135
 AliCaloRawAnalyzerNN.cxx:136
 AliCaloRawAnalyzerNN.cxx:137
 AliCaloRawAnalyzerNN.cxx:138
 AliCaloRawAnalyzerNN.cxx:139
 AliCaloRawAnalyzerNN.cxx:140
 AliCaloRawAnalyzerNN.cxx:141