ROOT logo
// -*- mode: c++ -*-
/**************************************************************************
 * This file is property of and copyright by                              *
 * the Relativistic Heavy Ion Group (RHIG), Yale University, US, 2009     *
 *                                                                        *
 * Primary Author: Per Thomas Hille <perthomas.hille@yale.edu>            *
 *                                                                        *
 * Contributors are mentioned in the code where appropriate.              *
 * Please report bugs to p.t.hille@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.                  *
 **************************************************************************/


// Base class for extraction 
// of signal amplitude and peak position
// From CALO Calorimeter RAW data (from the RCU)
// Contains some utilities for preparing / selecting
// Signals suitable for signal extraction
// By derived classes

#include "AliLog.h"
#include "AliCaloRawAnalyzer.h"
#include "AliCaloBunchInfo.h"
#include "AliCaloFitResults.h"
#include "TMath.h"
#include <iostream>
using namespace std;

ClassImp(AliCaloRawAnalyzer)  

AliCaloRawAnalyzer::AliCaloRawAnalyzer(const char *name, const char *nameshort) :  TObject(),
  fMinTimeIndex(-1),
  fMaxTimeIndex(-1),
  fFitArrayCut(5),
  fAmpCut(4),
  fNsampleCut(5),
  fOverflowCut(950),
  fNsamplePed(3),
  fIsZerosupressed( false ),
  fVerbose( false ),
  fAlgo(Algo::kNONE), 
  fL1Phase(0),
  fAmp(0),
  fTof(0),
  fTau( EMCAL::TAU ),
  fFixTau( true )
{
  // Ctor
  
  snprintf(fName,     256, "%s", name);
  snprintf(fNameShort,256, "%s", nameshort);
  
  for(int i=0; i < ALTROMAXSAMPLES; i++ )
    {
      fReversed[i] = 0;
    }
}


void 
AliCaloRawAnalyzer::SetTimeConstraint(const int min, const int max ) 
{
  //Require that the bin if the maximum ADC value is between min and max (timebin)
  
  if(  ( min > max ) || min > ALTROMAXSAMPLES  || max > ALTROMAXSAMPLES  )
    {
      AliWarning( Form( "Attempt to set Invalid time bin range (Min , Max) = (%d, %d), Ingored",  min, max ) ); 
    }
  else
    {
      fMinTimeIndex  = min;
      fMaxTimeIndex  = max;
    }
}


UShort_t 
AliCaloRawAnalyzer::Max(const UShort_t *data, const int length ) const
{
  // Get maximum of array
  
  UShort_t tmpmax  = data[0];

  for(int i=0; i < length; i++)
    {
      if( tmpmax  <  data[i] )
	{
	  tmpmax = data[i];
	}
    }
  return tmpmax;
}


void 
AliCaloRawAnalyzer::SelectSubarray( const Double_t *data, int length, short maxindex,
                                    int * first, int * last, int cut) const
{
  //Selection of subset of data from one bunch that will be used for fitting or
  //Peak finding.  Go to the left and right of index of the maximum time bin
  //Until the ADC value is less that fFitArrayCut, or derivative changes sign (data jump)
  int tmpfirst =  maxindex;
  int tmplast  =  maxindex;
  Double_t prevFirst =  data[maxindex];
  Double_t prevLast  =  data[maxindex];  
  bool firstJump = false;
  bool lastJump = false;

  while( (tmpfirst >= 0) && (data[tmpfirst] >= cut ) && (!firstJump) ) 
    {
      // jump check:
      if (tmpfirst != maxindex) { // neighbor to maxindex can share peak with maxindex
	if ( data[tmpfirst] >= prevFirst) {
	  firstJump = true;
	}
      }
      prevFirst = data[tmpfirst];
      tmpfirst -- ;
    }
  
  while( (tmplast < length) && (data[tmplast] >=  cut ) && (!lastJump) ) 
    {
      // jump check:
      if (tmplast != maxindex) { // neighbor to maxindex can share peak with maxindex
	if ( data[tmplast] >= prevLast) {
	  lastJump = true;
	}
      }
      prevLast = data[tmplast];
      tmplast ++;
    }

  // we keep one pre- or post- sample if we can (as in online)
  // check though if we ended up on a 'jump', or out of bounds: if so, back up
  if (firstJump || tmpfirst<0) tmpfirst ++;
  if (lastJump || tmplast>=length) tmplast --;

  *first = tmpfirst;
  *last =  tmplast;
  
  return;
}



Float_t 
AliCaloRawAnalyzer::ReverseAndSubtractPed( const AliCaloBunchInfo *bunch,
                                           UInt_t /*altrocfg1*/, UInt_t /*altrocfg2*/,
                                           double *outarray ) const
{
  //Time sample comes in reversed order, revers them back
  //Subtract the baseline based on content of altrocfg1 and altrocfg2.
  
  Int_t length =  bunch->GetLength(); 
  const UShort_t *sig = bunch->GetData();

  double ped = EvaluatePedestal( sig , length);

  for( int i=0; i < length; i++ )
    {
      outarray[i] = sig[length -i -1] - ped;
    }

  return ped;
}



Float_t 
AliCaloRawAnalyzer::EvaluatePedestal(const UShort_t * data, int /*length*/ ) const
{
  //  Pedestal evaluation if not zero suppressed
  
  double tmp = 0;

  if( fIsZerosupressed == false ) 
    {
      for(int i=0; i < fNsamplePed; i++ )
	{
	  tmp += data[i];
	}
   }

  return  tmp/fNsamplePed;
 }


short  
AliCaloRawAnalyzer::Max( const AliCaloBunchInfo * bunch , int * maxindex ) const
{
  // Get maximum in bunch array
  
  short tmpmax = -1;
  int tmpindex = -1;
  const UShort_t *sig = bunch->GetData();

  for(int i=0; i < bunch->GetLength(); i++ )
    {
      if( sig[i] > tmpmax )
	{
	  tmpmax   =  sig[i];
	  tmpindex =  i; 
	}
    }
  
  if(maxindex != 0 )
    {
      //   *maxindex =  bunch->GetLength() -1 - tmpindex + bunch->GetStartBin(); 
       *maxindex =  bunch->GetLength() -1 - tmpindex + bunch->GetStartBin(); 
    }
  
  return  tmpmax;
}


bool  
AliCaloRawAnalyzer::CheckBunchEdgesForMax( const AliCaloBunchInfo *const bunch ) const
{
  // a bunch is considered invalid if the maximum is in the first or last time-bin
  short tmpmax = -1;
  int tmpindex = -1;
  const UShort_t *sig = bunch->GetData();

  for(int i=0; i < bunch->GetLength(); i++ )
    {
      if( sig[i] > tmpmax )
	{
	  tmpmax   =  sig[i];
	  tmpindex =  i; 
	}
    }
  
  bool bunchOK = true;
  if (tmpindex == 0 || tmpindex == (bunch->GetLength()-1) )
    {
      bunchOK = false;
    }
  
  return  bunchOK;
}


int 
AliCaloRawAnalyzer::SelectBunch( const vector<AliCaloBunchInfo> &bunchvector,
                                 short * maxampbin, short * maxamplitude )
{
  //We select the bunch with the highest amplitude unless any time constraints is set
  short max = -1;
  short bunchindex = -1;
  short maxall = -1;
  int indx = -1;

  for(unsigned int i=0; i < bunchvector.size(); i++ )
    {
      max = Max(  &bunchvector.at(i), &indx ); // CRAP PTH, bug fix, trouble if more than one bunches  
      if( IsInTimeRange( indx, fMaxTimeIndex, fMinTimeIndex) )
	{
	  if( max > maxall )
	    {
	      maxall = max;
	      bunchindex = i;
	      *maxampbin     = indx;
	      *maxamplitude  = max;
	    }
	}
    }
 
  if (bunchindex >= 0) {
    bool bunchOK = CheckBunchEdgesForMax( &bunchvector.at(bunchindex) );
    if (! bunchOK) { 
      bunchindex = -1; 
    }
  }

  return  bunchindex;
}


bool 
AliCaloRawAnalyzer::IsInTimeRange( const int maxindex, const int maxtindx, const int mintindx ) const
{
  // Ckeck if the index of the max ADC vaue is consistent with trigger.
  if( ( mintindx  < 0 && maxtindx   < 0) ||maxtindx  < 0 )
    {
      return true; 
    }
  return ( maxindex < maxtindx ) && ( maxindex > mintindx  ) ? true : false;
}


void 
AliCaloRawAnalyzer::PrintBunches( const vector<AliCaloBunchInfo> &bvctr ) 
{
  // Print bunch vector info
  cout << __FILE__ << __LINE__<< "*************** Printing Bunches *******************" << endl;
  cout << __FILE__ << __LINE__<< "*** There are " << bvctr.size() << ", bunches" << endl;

  for(unsigned int i=0; i < bvctr.size() ; i++ )
    {
      PrintBunch( bvctr.at(i) );
      cout << " bunch = "  <<  i  << endl;
    }
  cout << __FILE__ << __LINE__<< "*************** Done ... *******************" << endl;
}


void 
AliCaloRawAnalyzer::PrintBunch( const AliCaloBunchInfo &bunch )
{
  // Print bunch infor
  cout << __FILE__ << ":" << __LINE__ << endl;
  cout << __FILE__ << __LINE__   << ", startimebin = " << bunch.GetStartBin() << ", length =" <<  bunch.GetLength() << endl;
  const UShort_t *sig =  bunch.GetData();  
  
  for ( Int_t j = 0; j <  bunch.GetLength();  j++) 
    {
      printf("%d\t", sig[j] );
    }
  cout << endl; 
}


Double_t
AliCaloRawAnalyzer::CalculateChi2( Double_t amp,    Double_t time,
                                   Int_t    first,  Int_t    last,
                                   Double_t adcErr, Double_t tau) const
{
  //   Input:
  //   amp   - max amplitude;
  //   time    - time of max amplitude; 
  //   first, last - sample array indices to be used
  //   adcErr   - nominal error of amplitude measurement (one value for all channels)
  //           if adcErr<0 that mean adcErr=1.
  //   tau   - filter time response (in timebin units)
  // Output:
  //   chi2 - chi2

  if (first == last || first<0 ) { // signal consists of single sample, chi2 estimate (0) not too well defined.. 
    // or, first is negative, the indices are not valid
    return Ret::kDummy;
  }

  int nsamples =  last - first + 1;
  // printf(" AliCaloRawAnalyzer::CalculateChi2 : first %i last %i : nsamples %i : amp %3.2f time %3.2f \n", first, last, nsamples, amp, time); 

  Int_t x = 0;
  Double_t chi2 = 0;
  Double_t dy = 0.0, xx = 0.0, f=0.0;

  for (Int_t i=0; i<nsamples; i++) {
    x     = first + i; // timebin
    xx    = (x - time + tau) / tau; // help variable
    f     = 0;
    if (xx > 0) {
      f = amp * xx*xx * TMath::Exp(2 * (1 - xx )) ;
    }
    dy    = fReversed[x] - f; 
    chi2 += dy*dy;
    // printf(" AliCaloRawAnalyzer::CalculateChi2 : %i : y %f -> f %f : dy %f \n", i, fReversed[first+i], f, dy); 
  }

  if (adcErr>0.0) { // weight chi2
    chi2 /= (adcErr*adcErr);
  }
  return chi2;
}


void
AliCaloRawAnalyzer::CalculateMeanAndRMS(Int_t first, Int_t last,
                                        Double_t & mean, Double_t & rms)
{
  //   Input:
  //   first, last - sample array indices to be used
  // Output:
  //   mean and RMS of samples 
  //
  // To possibly be used to differentiate good signals from bad before fitting
  // 
  mean = Ret::kDummy;
  rms =  Ret::kDummy;

  if (first == last || first<0 ) { // signal consists of single sample, chi2 estimate (0) not too well defined.. 
    // or, first is negative, the indices are not valid
    return;
  }

  int nsamples =  last - first + 1;
  //  printf(" AliCaloRawAnalyzer::CalculateMeanAndRMS : first %i last %i : nsamples %i \n", first, last, nsamples); 

  int x = 0;
  Double_t sampleSum = 0; // sum of samples
  Double_t squaredSampleSum = 0; // sum of samples squared

  for (Int_t i=0; i<nsamples; i++) {
    x = first + i;
    sampleSum += fReversed[x];
    squaredSampleSum += (fReversed[x] * fReversed[x]);
  }

  mean = sampleSum / nsamples; 	 
  Double_t squaredMean = squaredSampleSum / nsamples; 	 
  // The variance (rms squared) is equal to the mean of the squares minus the square of the mean.. 	 
  rms = sqrt(squaredMean - mean*mean);

  return;
}



int
AliCaloRawAnalyzer::PreFitEvaluateSamples( const vector<AliCaloBunchInfo>  &bunchvector,
                                          UInt_t altrocfg1, UInt_t altrocfg2, Int_t & index,
                                          Float_t & maxf, short & maxamp,
                                          short & maxrev, Float_t & ped,
                                          int & first, int & last, int acut )
{
  // method to do the selection of what should possibly be fitted
  
  int nsamples  = 0;
  short maxampindex = 0;
  index = SelectBunch( bunchvector,  &maxampindex,  &maxamp ); // select the bunch with the highest amplitude unless any time constraints is set

  
  if( index >= 0 && maxamp >= acut ) // something valid was found, and non-zero amplitude
    {
      // use more convenient numbering and possibly subtract pedestal
      ped  = ReverseAndSubtractPed( &(bunchvector.at(index)),  altrocfg1, altrocfg2, fReversed  );
      maxf = TMath::MaxElement( bunchvector.at(index).GetLength(),  fReversed );
      
      if ( maxf >= acut  ) // possibly significant signal
	{
	  // select array around max to possibly be used in fit
	  maxrev = maxampindex - bunchvector.at(index).GetStartBin(); 
	  SelectSubarray( fReversed,  bunchvector.at(index).GetLength(),  maxrev, &first, &last, acut );

	  // sanity check: maximum should not be in first or last bin
	  // if we should do a fit
	  if (first!=maxrev && last!=maxrev) 
	    {
	      // calculate how many samples we have 
	      nsamples =  last - first + 1;	  
	    }
	}
    }

  return nsamples;
}

 AliCaloRawAnalyzer.cxx:1
 AliCaloRawAnalyzer.cxx:2
 AliCaloRawAnalyzer.cxx:3
 AliCaloRawAnalyzer.cxx:4
 AliCaloRawAnalyzer.cxx:5
 AliCaloRawAnalyzer.cxx:6
 AliCaloRawAnalyzer.cxx:7
 AliCaloRawAnalyzer.cxx:8
 AliCaloRawAnalyzer.cxx:9
 AliCaloRawAnalyzer.cxx:10
 AliCaloRawAnalyzer.cxx:11
 AliCaloRawAnalyzer.cxx:12
 AliCaloRawAnalyzer.cxx:13
 AliCaloRawAnalyzer.cxx:14
 AliCaloRawAnalyzer.cxx:15
 AliCaloRawAnalyzer.cxx:16
 AliCaloRawAnalyzer.cxx:17
 AliCaloRawAnalyzer.cxx:18
 AliCaloRawAnalyzer.cxx:19
 AliCaloRawAnalyzer.cxx:20
 AliCaloRawAnalyzer.cxx:21
 AliCaloRawAnalyzer.cxx:22
 AliCaloRawAnalyzer.cxx:23
 AliCaloRawAnalyzer.cxx:24
 AliCaloRawAnalyzer.cxx:25
 AliCaloRawAnalyzer.cxx:26
 AliCaloRawAnalyzer.cxx:27
 AliCaloRawAnalyzer.cxx:28
 AliCaloRawAnalyzer.cxx:29
 AliCaloRawAnalyzer.cxx:30
 AliCaloRawAnalyzer.cxx:31
 AliCaloRawAnalyzer.cxx:32
 AliCaloRawAnalyzer.cxx:33
 AliCaloRawAnalyzer.cxx:34
 AliCaloRawAnalyzer.cxx:35
 AliCaloRawAnalyzer.cxx:36
 AliCaloRawAnalyzer.cxx:37
 AliCaloRawAnalyzer.cxx:38
 AliCaloRawAnalyzer.cxx:39
 AliCaloRawAnalyzer.cxx:40
 AliCaloRawAnalyzer.cxx:41
 AliCaloRawAnalyzer.cxx:42
 AliCaloRawAnalyzer.cxx:43
 AliCaloRawAnalyzer.cxx:44
 AliCaloRawAnalyzer.cxx:45
 AliCaloRawAnalyzer.cxx:46
 AliCaloRawAnalyzer.cxx:47
 AliCaloRawAnalyzer.cxx:48
 AliCaloRawAnalyzer.cxx:49
 AliCaloRawAnalyzer.cxx:50
 AliCaloRawAnalyzer.cxx:51
 AliCaloRawAnalyzer.cxx:52
 AliCaloRawAnalyzer.cxx:53
 AliCaloRawAnalyzer.cxx:54
 AliCaloRawAnalyzer.cxx:55
 AliCaloRawAnalyzer.cxx:56
 AliCaloRawAnalyzer.cxx:57
 AliCaloRawAnalyzer.cxx:58
 AliCaloRawAnalyzer.cxx:59
 AliCaloRawAnalyzer.cxx:60
 AliCaloRawAnalyzer.cxx:61
 AliCaloRawAnalyzer.cxx:62
 AliCaloRawAnalyzer.cxx:63
 AliCaloRawAnalyzer.cxx:64
 AliCaloRawAnalyzer.cxx:65
 AliCaloRawAnalyzer.cxx:66
 AliCaloRawAnalyzer.cxx:67
 AliCaloRawAnalyzer.cxx:68
 AliCaloRawAnalyzer.cxx:69
 AliCaloRawAnalyzer.cxx:70
 AliCaloRawAnalyzer.cxx:71
 AliCaloRawAnalyzer.cxx:72
 AliCaloRawAnalyzer.cxx:73
 AliCaloRawAnalyzer.cxx:74
 AliCaloRawAnalyzer.cxx:75
 AliCaloRawAnalyzer.cxx:76
 AliCaloRawAnalyzer.cxx:77
 AliCaloRawAnalyzer.cxx:78
 AliCaloRawAnalyzer.cxx:79
 AliCaloRawAnalyzer.cxx:80
 AliCaloRawAnalyzer.cxx:81
 AliCaloRawAnalyzer.cxx:82
 AliCaloRawAnalyzer.cxx:83
 AliCaloRawAnalyzer.cxx:84
 AliCaloRawAnalyzer.cxx:85
 AliCaloRawAnalyzer.cxx:86
 AliCaloRawAnalyzer.cxx:87
 AliCaloRawAnalyzer.cxx:88
 AliCaloRawAnalyzer.cxx:89
 AliCaloRawAnalyzer.cxx:90
 AliCaloRawAnalyzer.cxx:91
 AliCaloRawAnalyzer.cxx:92
 AliCaloRawAnalyzer.cxx:93
 AliCaloRawAnalyzer.cxx:94
 AliCaloRawAnalyzer.cxx:95
 AliCaloRawAnalyzer.cxx:96
 AliCaloRawAnalyzer.cxx:97
 AliCaloRawAnalyzer.cxx:98
 AliCaloRawAnalyzer.cxx:99
 AliCaloRawAnalyzer.cxx:100
 AliCaloRawAnalyzer.cxx:101
 AliCaloRawAnalyzer.cxx:102
 AliCaloRawAnalyzer.cxx:103
 AliCaloRawAnalyzer.cxx:104
 AliCaloRawAnalyzer.cxx:105
 AliCaloRawAnalyzer.cxx:106
 AliCaloRawAnalyzer.cxx:107
 AliCaloRawAnalyzer.cxx:108
 AliCaloRawAnalyzer.cxx:109
 AliCaloRawAnalyzer.cxx:110
 AliCaloRawAnalyzer.cxx:111
 AliCaloRawAnalyzer.cxx:112
 AliCaloRawAnalyzer.cxx:113
 AliCaloRawAnalyzer.cxx:114
 AliCaloRawAnalyzer.cxx:115
 AliCaloRawAnalyzer.cxx:116
 AliCaloRawAnalyzer.cxx:117
 AliCaloRawAnalyzer.cxx:118
 AliCaloRawAnalyzer.cxx:119
 AliCaloRawAnalyzer.cxx:120
 AliCaloRawAnalyzer.cxx:121
 AliCaloRawAnalyzer.cxx:122
 AliCaloRawAnalyzer.cxx:123
 AliCaloRawAnalyzer.cxx:124
 AliCaloRawAnalyzer.cxx:125
 AliCaloRawAnalyzer.cxx:126
 AliCaloRawAnalyzer.cxx:127
 AliCaloRawAnalyzer.cxx:128
 AliCaloRawAnalyzer.cxx:129
 AliCaloRawAnalyzer.cxx:130
 AliCaloRawAnalyzer.cxx:131
 AliCaloRawAnalyzer.cxx:132
 AliCaloRawAnalyzer.cxx:133
 AliCaloRawAnalyzer.cxx:134
 AliCaloRawAnalyzer.cxx:135
 AliCaloRawAnalyzer.cxx:136
 AliCaloRawAnalyzer.cxx:137
 AliCaloRawAnalyzer.cxx:138
 AliCaloRawAnalyzer.cxx:139
 AliCaloRawAnalyzer.cxx:140
 AliCaloRawAnalyzer.cxx:141
 AliCaloRawAnalyzer.cxx:142
 AliCaloRawAnalyzer.cxx:143
 AliCaloRawAnalyzer.cxx:144
 AliCaloRawAnalyzer.cxx:145
 AliCaloRawAnalyzer.cxx:146
 AliCaloRawAnalyzer.cxx:147
 AliCaloRawAnalyzer.cxx:148
 AliCaloRawAnalyzer.cxx:149
 AliCaloRawAnalyzer.cxx:150
 AliCaloRawAnalyzer.cxx:151
 AliCaloRawAnalyzer.cxx:152
 AliCaloRawAnalyzer.cxx:153
 AliCaloRawAnalyzer.cxx:154
 AliCaloRawAnalyzer.cxx:155
 AliCaloRawAnalyzer.cxx:156
 AliCaloRawAnalyzer.cxx:157
 AliCaloRawAnalyzer.cxx:158
 AliCaloRawAnalyzer.cxx:159
 AliCaloRawAnalyzer.cxx:160
 AliCaloRawAnalyzer.cxx:161
 AliCaloRawAnalyzer.cxx:162
 AliCaloRawAnalyzer.cxx:163
 AliCaloRawAnalyzer.cxx:164
 AliCaloRawAnalyzer.cxx:165
 AliCaloRawAnalyzer.cxx:166
 AliCaloRawAnalyzer.cxx:167
 AliCaloRawAnalyzer.cxx:168
 AliCaloRawAnalyzer.cxx:169
 AliCaloRawAnalyzer.cxx:170
 AliCaloRawAnalyzer.cxx:171
 AliCaloRawAnalyzer.cxx:172
 AliCaloRawAnalyzer.cxx:173
 AliCaloRawAnalyzer.cxx:174
 AliCaloRawAnalyzer.cxx:175
 AliCaloRawAnalyzer.cxx:176
 AliCaloRawAnalyzer.cxx:177
 AliCaloRawAnalyzer.cxx:178
 AliCaloRawAnalyzer.cxx:179
 AliCaloRawAnalyzer.cxx:180
 AliCaloRawAnalyzer.cxx:181
 AliCaloRawAnalyzer.cxx:182
 AliCaloRawAnalyzer.cxx:183
 AliCaloRawAnalyzer.cxx:184
 AliCaloRawAnalyzer.cxx:185
 AliCaloRawAnalyzer.cxx:186
 AliCaloRawAnalyzer.cxx:187
 AliCaloRawAnalyzer.cxx:188
 AliCaloRawAnalyzer.cxx:189
 AliCaloRawAnalyzer.cxx:190
 AliCaloRawAnalyzer.cxx:191
 AliCaloRawAnalyzer.cxx:192
 AliCaloRawAnalyzer.cxx:193
 AliCaloRawAnalyzer.cxx:194
 AliCaloRawAnalyzer.cxx:195
 AliCaloRawAnalyzer.cxx:196
 AliCaloRawAnalyzer.cxx:197
 AliCaloRawAnalyzer.cxx:198
 AliCaloRawAnalyzer.cxx:199
 AliCaloRawAnalyzer.cxx:200
 AliCaloRawAnalyzer.cxx:201
 AliCaloRawAnalyzer.cxx:202
 AliCaloRawAnalyzer.cxx:203
 AliCaloRawAnalyzer.cxx:204
 AliCaloRawAnalyzer.cxx:205
 AliCaloRawAnalyzer.cxx:206
 AliCaloRawAnalyzer.cxx:207
 AliCaloRawAnalyzer.cxx:208
 AliCaloRawAnalyzer.cxx:209
 AliCaloRawAnalyzer.cxx:210
 AliCaloRawAnalyzer.cxx:211
 AliCaloRawAnalyzer.cxx:212
 AliCaloRawAnalyzer.cxx:213
 AliCaloRawAnalyzer.cxx:214
 AliCaloRawAnalyzer.cxx:215
 AliCaloRawAnalyzer.cxx:216
 AliCaloRawAnalyzer.cxx:217
 AliCaloRawAnalyzer.cxx:218
 AliCaloRawAnalyzer.cxx:219
 AliCaloRawAnalyzer.cxx:220
 AliCaloRawAnalyzer.cxx:221
 AliCaloRawAnalyzer.cxx:222
 AliCaloRawAnalyzer.cxx:223
 AliCaloRawAnalyzer.cxx:224
 AliCaloRawAnalyzer.cxx:225
 AliCaloRawAnalyzer.cxx:226
 AliCaloRawAnalyzer.cxx:227
 AliCaloRawAnalyzer.cxx:228
 AliCaloRawAnalyzer.cxx:229
 AliCaloRawAnalyzer.cxx:230
 AliCaloRawAnalyzer.cxx:231
 AliCaloRawAnalyzer.cxx:232
 AliCaloRawAnalyzer.cxx:233
 AliCaloRawAnalyzer.cxx:234
 AliCaloRawAnalyzer.cxx:235
 AliCaloRawAnalyzer.cxx:236
 AliCaloRawAnalyzer.cxx:237
 AliCaloRawAnalyzer.cxx:238
 AliCaloRawAnalyzer.cxx:239
 AliCaloRawAnalyzer.cxx:240
 AliCaloRawAnalyzer.cxx:241
 AliCaloRawAnalyzer.cxx:242
 AliCaloRawAnalyzer.cxx:243
 AliCaloRawAnalyzer.cxx:244
 AliCaloRawAnalyzer.cxx:245
 AliCaloRawAnalyzer.cxx:246
 AliCaloRawAnalyzer.cxx:247
 AliCaloRawAnalyzer.cxx:248
 AliCaloRawAnalyzer.cxx:249
 AliCaloRawAnalyzer.cxx:250
 AliCaloRawAnalyzer.cxx:251
 AliCaloRawAnalyzer.cxx:252
 AliCaloRawAnalyzer.cxx:253
 AliCaloRawAnalyzer.cxx:254
 AliCaloRawAnalyzer.cxx:255
 AliCaloRawAnalyzer.cxx:256
 AliCaloRawAnalyzer.cxx:257
 AliCaloRawAnalyzer.cxx:258
 AliCaloRawAnalyzer.cxx:259
 AliCaloRawAnalyzer.cxx:260
 AliCaloRawAnalyzer.cxx:261
 AliCaloRawAnalyzer.cxx:262
 AliCaloRawAnalyzer.cxx:263
 AliCaloRawAnalyzer.cxx:264
 AliCaloRawAnalyzer.cxx:265
 AliCaloRawAnalyzer.cxx:266
 AliCaloRawAnalyzer.cxx:267
 AliCaloRawAnalyzer.cxx:268
 AliCaloRawAnalyzer.cxx:269
 AliCaloRawAnalyzer.cxx:270
 AliCaloRawAnalyzer.cxx:271
 AliCaloRawAnalyzer.cxx:272
 AliCaloRawAnalyzer.cxx:273
 AliCaloRawAnalyzer.cxx:274
 AliCaloRawAnalyzer.cxx:275
 AliCaloRawAnalyzer.cxx:276
 AliCaloRawAnalyzer.cxx:277
 AliCaloRawAnalyzer.cxx:278
 AliCaloRawAnalyzer.cxx:279
 AliCaloRawAnalyzer.cxx:280
 AliCaloRawAnalyzer.cxx:281
 AliCaloRawAnalyzer.cxx:282
 AliCaloRawAnalyzer.cxx:283
 AliCaloRawAnalyzer.cxx:284
 AliCaloRawAnalyzer.cxx:285
 AliCaloRawAnalyzer.cxx:286
 AliCaloRawAnalyzer.cxx:287
 AliCaloRawAnalyzer.cxx:288
 AliCaloRawAnalyzer.cxx:289
 AliCaloRawAnalyzer.cxx:290
 AliCaloRawAnalyzer.cxx:291
 AliCaloRawAnalyzer.cxx:292
 AliCaloRawAnalyzer.cxx:293
 AliCaloRawAnalyzer.cxx:294
 AliCaloRawAnalyzer.cxx:295
 AliCaloRawAnalyzer.cxx:296
 AliCaloRawAnalyzer.cxx:297
 AliCaloRawAnalyzer.cxx:298
 AliCaloRawAnalyzer.cxx:299
 AliCaloRawAnalyzer.cxx:300
 AliCaloRawAnalyzer.cxx:301
 AliCaloRawAnalyzer.cxx:302
 AliCaloRawAnalyzer.cxx:303
 AliCaloRawAnalyzer.cxx:304
 AliCaloRawAnalyzer.cxx:305
 AliCaloRawAnalyzer.cxx:306
 AliCaloRawAnalyzer.cxx:307
 AliCaloRawAnalyzer.cxx:308
 AliCaloRawAnalyzer.cxx:309
 AliCaloRawAnalyzer.cxx:310
 AliCaloRawAnalyzer.cxx:311
 AliCaloRawAnalyzer.cxx:312
 AliCaloRawAnalyzer.cxx:313
 AliCaloRawAnalyzer.cxx:314
 AliCaloRawAnalyzer.cxx:315
 AliCaloRawAnalyzer.cxx:316
 AliCaloRawAnalyzer.cxx:317
 AliCaloRawAnalyzer.cxx:318
 AliCaloRawAnalyzer.cxx:319
 AliCaloRawAnalyzer.cxx:320
 AliCaloRawAnalyzer.cxx:321
 AliCaloRawAnalyzer.cxx:322
 AliCaloRawAnalyzer.cxx:323
 AliCaloRawAnalyzer.cxx:324
 AliCaloRawAnalyzer.cxx:325
 AliCaloRawAnalyzer.cxx:326
 AliCaloRawAnalyzer.cxx:327
 AliCaloRawAnalyzer.cxx:328
 AliCaloRawAnalyzer.cxx:329
 AliCaloRawAnalyzer.cxx:330
 AliCaloRawAnalyzer.cxx:331
 AliCaloRawAnalyzer.cxx:332
 AliCaloRawAnalyzer.cxx:333
 AliCaloRawAnalyzer.cxx:334
 AliCaloRawAnalyzer.cxx:335
 AliCaloRawAnalyzer.cxx:336
 AliCaloRawAnalyzer.cxx:337
 AliCaloRawAnalyzer.cxx:338
 AliCaloRawAnalyzer.cxx:339
 AliCaloRawAnalyzer.cxx:340
 AliCaloRawAnalyzer.cxx:341
 AliCaloRawAnalyzer.cxx:342
 AliCaloRawAnalyzer.cxx:343
 AliCaloRawAnalyzer.cxx:344
 AliCaloRawAnalyzer.cxx:345
 AliCaloRawAnalyzer.cxx:346
 AliCaloRawAnalyzer.cxx:347
 AliCaloRawAnalyzer.cxx:348
 AliCaloRawAnalyzer.cxx:349
 AliCaloRawAnalyzer.cxx:350
 AliCaloRawAnalyzer.cxx:351
 AliCaloRawAnalyzer.cxx:352
 AliCaloRawAnalyzer.cxx:353
 AliCaloRawAnalyzer.cxx:354
 AliCaloRawAnalyzer.cxx:355
 AliCaloRawAnalyzer.cxx:356
 AliCaloRawAnalyzer.cxx:357
 AliCaloRawAnalyzer.cxx:358
 AliCaloRawAnalyzer.cxx:359
 AliCaloRawAnalyzer.cxx:360
 AliCaloRawAnalyzer.cxx:361
 AliCaloRawAnalyzer.cxx:362
 AliCaloRawAnalyzer.cxx:363
 AliCaloRawAnalyzer.cxx:364
 AliCaloRawAnalyzer.cxx:365
 AliCaloRawAnalyzer.cxx:366
 AliCaloRawAnalyzer.cxx:367
 AliCaloRawAnalyzer.cxx:368
 AliCaloRawAnalyzer.cxx:369
 AliCaloRawAnalyzer.cxx:370
 AliCaloRawAnalyzer.cxx:371
 AliCaloRawAnalyzer.cxx:372
 AliCaloRawAnalyzer.cxx:373
 AliCaloRawAnalyzer.cxx:374
 AliCaloRawAnalyzer.cxx:375
 AliCaloRawAnalyzer.cxx:376
 AliCaloRawAnalyzer.cxx:377
 AliCaloRawAnalyzer.cxx:378
 AliCaloRawAnalyzer.cxx:379
 AliCaloRawAnalyzer.cxx:380
 AliCaloRawAnalyzer.cxx:381
 AliCaloRawAnalyzer.cxx:382
 AliCaloRawAnalyzer.cxx:383
 AliCaloRawAnalyzer.cxx:384
 AliCaloRawAnalyzer.cxx:385
 AliCaloRawAnalyzer.cxx:386
 AliCaloRawAnalyzer.cxx:387
 AliCaloRawAnalyzer.cxx:388
 AliCaloRawAnalyzer.cxx:389
 AliCaloRawAnalyzer.cxx:390
 AliCaloRawAnalyzer.cxx:391
 AliCaloRawAnalyzer.cxx:392
 AliCaloRawAnalyzer.cxx:393
 AliCaloRawAnalyzer.cxx:394
 AliCaloRawAnalyzer.cxx:395
 AliCaloRawAnalyzer.cxx:396
 AliCaloRawAnalyzer.cxx:397
 AliCaloRawAnalyzer.cxx:398
 AliCaloRawAnalyzer.cxx:399
 AliCaloRawAnalyzer.cxx:400
 AliCaloRawAnalyzer.cxx:401
 AliCaloRawAnalyzer.cxx:402
 AliCaloRawAnalyzer.cxx:403
 AliCaloRawAnalyzer.cxx:404
 AliCaloRawAnalyzer.cxx:405
 AliCaloRawAnalyzer.cxx:406
 AliCaloRawAnalyzer.cxx:407
 AliCaloRawAnalyzer.cxx:408
 AliCaloRawAnalyzer.cxx:409
 AliCaloRawAnalyzer.cxx:410
 AliCaloRawAnalyzer.cxx:411
 AliCaloRawAnalyzer.cxx:412
 AliCaloRawAnalyzer.cxx:413
 AliCaloRawAnalyzer.cxx:414
 AliCaloRawAnalyzer.cxx:415
 AliCaloRawAnalyzer.cxx:416
 AliCaloRawAnalyzer.cxx:417
 AliCaloRawAnalyzer.cxx:418
 AliCaloRawAnalyzer.cxx:419
 AliCaloRawAnalyzer.cxx:420
 AliCaloRawAnalyzer.cxx:421
 AliCaloRawAnalyzer.cxx:422
 AliCaloRawAnalyzer.cxx:423
 AliCaloRawAnalyzer.cxx:424
 AliCaloRawAnalyzer.cxx:425
 AliCaloRawAnalyzer.cxx:426
 AliCaloRawAnalyzer.cxx:427
 AliCaloRawAnalyzer.cxx:428
 AliCaloRawAnalyzer.cxx:429
 AliCaloRawAnalyzer.cxx:430
 AliCaloRawAnalyzer.cxx:431
 AliCaloRawAnalyzer.cxx:432
 AliCaloRawAnalyzer.cxx:433
 AliCaloRawAnalyzer.cxx:434
 AliCaloRawAnalyzer.cxx:435
 AliCaloRawAnalyzer.cxx:436
 AliCaloRawAnalyzer.cxx:437
 AliCaloRawAnalyzer.cxx:438
 AliCaloRawAnalyzer.cxx:439
 AliCaloRawAnalyzer.cxx:440
 AliCaloRawAnalyzer.cxx:441
 AliCaloRawAnalyzer.cxx:442
 AliCaloRawAnalyzer.cxx:443
 AliCaloRawAnalyzer.cxx:444
 AliCaloRawAnalyzer.cxx:445
 AliCaloRawAnalyzer.cxx:446
 AliCaloRawAnalyzer.cxx:447
 AliCaloRawAnalyzer.cxx:448
 AliCaloRawAnalyzer.cxx:449
 AliCaloRawAnalyzer.cxx:450
 AliCaloRawAnalyzer.cxx:451
 AliCaloRawAnalyzer.cxx:452
 AliCaloRawAnalyzer.cxx:453
 AliCaloRawAnalyzer.cxx:454
 AliCaloRawAnalyzer.cxx:455
 AliCaloRawAnalyzer.cxx:456