ROOT logo
// -*- mode: c++ -*-
#ifndef ALIEMCALRAWUTILS_H
#define ALIEMCALRAWUTILS_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice     */

/* $Id$ */


//_________________________________________________________________________
//  Utility Class for handling Raw data
//  Does all transitions from Digits to Raw and vice versa, 
//  for simu and reconstruction
//
//  Note: the current version is still simplified. Only 
//    one raw signal per digit is generated; either high-gain or low-gain
//    Need to add concurrent high and low-gain info in the future
//    No pedestal is added to the raw signal.
//
//*-- Author: Marco van Leeuwen (LBL)
//
#include "TObject.h" // for ROOT types
#include <TString.h>


class AliAnalysisManager;
class AliCaloRawStreamV3;
class AliAltroMapping;
class TGraph;
class AliRawReader;
class AliEMCALGeometry;
class AliCaloCalibPedestal;
class AliCaloRawAnalyzer;
class AliEMCALTriggerRawDigitMaker;
class AliEMCALTriggerData;

#include "AliCaloConstants.h"

class AliEMCALRawUtils : public TObject {
 
public:
  
  AliEMCALRawUtils(Algo::fitAlgorithm fitAlgo = Algo::kStandard);
  
  virtual ~AliEMCALRawUtils();
  
  void Digits2Raw();
  
  void Raw2Digits(AliRawReader *reader, TClonesArray *digitsArr, const AliCaloCalibPedestal* pedbadmap,
				  TClonesArray *digitsTRG=0x0, AliEMCALTriggerData* trgData = 0x0);
  
  void AddDigit(TClonesArray *digitsArr, Int_t id, Int_t lowGain, Float_t amp, Float_t time, Float_t chi2, Int_t ndf);
  
  void TrimDigits(TClonesArray *digitsArr);
  
  Int_t    GetNoiseThreshold()             const { return fNoiseThreshold; }
  Int_t    GetNPedSamples()                const { return fNPedSamples; }
  Bool_t   GetRemoveBadChannels() const {return fRemoveBadChannels;}
  Int_t    GetFittingAlgorithm()  const {return fFittingAlgorithm; }
  Float_t  GetTimeMax()           const {return fTimeMax ;}
  Float_t  GetTimeMin()           const {return fTimeMin ;}
  Bool_t   UseFALTRO()            const {return fUseFALTRO; }
  
  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) ;
  void     SetTimeMin(Float_t t)                       {fTimeMin   = t          ;}
  void     SetTimeMax(Float_t t)                       {fTimeMax   = t          ;}
  void     SetFALTROUsage(Bool_t val)                  {fUseFALTRO=val; }
  
  AliCaloRawAnalyzer *GetRawAnalyzer()  const { return fRawAnalyzer;}
  
  virtual Option_t* GetOption() const { return fOption.Data(); }
  void SetOption(const Option_t* opt) { fOption = opt; }
  
private:
  AliEMCALRawUtils            (const AliEMCALRawUtils& rawUtils);  //copy ctor
  AliEMCALRawUtils& operator =(const AliEMCALRawUtils& rawUtils);
  
  Int_t fNoiseThreshold;                // threshold to consider signal or noise
  Int_t fNPedSamples;                   // number of samples to use in pedestal calculation
  AliEMCALGeometry* fGeom;              // geometry
  AliAltroMapping*  fMapping[4];        // only two for now
  TString fOption;                      // option passed from Reconstructor
  Bool_t  fRemoveBadChannels;           // select if bad channels are removed before fitting
  Int_t   fFittingAlgorithm;            // select the fitting algorithm
  Float_t fTimeMin;                     // minimum threshold for the time of the signal
  Float_t fTimeMax;                     // maximum threshold for the time of the signal
  Bool_t  fUseFALTRO;			// use FALTRO and pass it to the digits
  AliCaloRawAnalyzer *fRawAnalyzer;     // e.g. for sample selection for fits
  AliEMCALTriggerRawDigitMaker* fTriggerRawDigitMaker;	// trigger raw digit info
 
  ClassDef(AliEMCALRawUtils,7)          // utilities for raw signal fitting

};

#endif
 AliEMCALRawUtils.h:1
 AliEMCALRawUtils.h:2
 AliEMCALRawUtils.h:3
 AliEMCALRawUtils.h:4
 AliEMCALRawUtils.h:5
 AliEMCALRawUtils.h:6
 AliEMCALRawUtils.h:7
 AliEMCALRawUtils.h:8
 AliEMCALRawUtils.h:9
 AliEMCALRawUtils.h:10
 AliEMCALRawUtils.h:11
 AliEMCALRawUtils.h:12
 AliEMCALRawUtils.h:13
 AliEMCALRawUtils.h:14
 AliEMCALRawUtils.h:15
 AliEMCALRawUtils.h:16
 AliEMCALRawUtils.h:17
 AliEMCALRawUtils.h:18
 AliEMCALRawUtils.h:19
 AliEMCALRawUtils.h:20
 AliEMCALRawUtils.h:21
 AliEMCALRawUtils.h:22
 AliEMCALRawUtils.h:23
 AliEMCALRawUtils.h:24
 AliEMCALRawUtils.h:25
 AliEMCALRawUtils.h:26
 AliEMCALRawUtils.h:27
 AliEMCALRawUtils.h:28
 AliEMCALRawUtils.h:29
 AliEMCALRawUtils.h:30
 AliEMCALRawUtils.h:31
 AliEMCALRawUtils.h:32
 AliEMCALRawUtils.h:33
 AliEMCALRawUtils.h:34
 AliEMCALRawUtils.h:35
 AliEMCALRawUtils.h:36
 AliEMCALRawUtils.h:37
 AliEMCALRawUtils.h:38
 AliEMCALRawUtils.h:39
 AliEMCALRawUtils.h:40
 AliEMCALRawUtils.h:41
 AliEMCALRawUtils.h:42
 AliEMCALRawUtils.h:43
 AliEMCALRawUtils.h:44
 AliEMCALRawUtils.h:45
 AliEMCALRawUtils.h:46
 AliEMCALRawUtils.h:47
 AliEMCALRawUtils.h:48
 AliEMCALRawUtils.h:49
 AliEMCALRawUtils.h:50
 AliEMCALRawUtils.h:51
 AliEMCALRawUtils.h:52
 AliEMCALRawUtils.h:53
 AliEMCALRawUtils.h:54
 AliEMCALRawUtils.h:55
 AliEMCALRawUtils.h:56
 AliEMCALRawUtils.h:57
 AliEMCALRawUtils.h:58
 AliEMCALRawUtils.h:59
 AliEMCALRawUtils.h:60
 AliEMCALRawUtils.h:61
 AliEMCALRawUtils.h:62
 AliEMCALRawUtils.h:63
 AliEMCALRawUtils.h:64
 AliEMCALRawUtils.h:65
 AliEMCALRawUtils.h:66
 AliEMCALRawUtils.h:67
 AliEMCALRawUtils.h:68
 AliEMCALRawUtils.h:69
 AliEMCALRawUtils.h:70
 AliEMCALRawUtils.h:71
 AliEMCALRawUtils.h:72
 AliEMCALRawUtils.h:73
 AliEMCALRawUtils.h:74
 AliEMCALRawUtils.h:75
 AliEMCALRawUtils.h:76
 AliEMCALRawUtils.h:77
 AliEMCALRawUtils.h:78
 AliEMCALRawUtils.h:79
 AliEMCALRawUtils.h:80
 AliEMCALRawUtils.h:81
 AliEMCALRawUtils.h:82
 AliEMCALRawUtils.h:83
 AliEMCALRawUtils.h:84
 AliEMCALRawUtils.h:85
 AliEMCALRawUtils.h:86
 AliEMCALRawUtils.h:87
 AliEMCALRawUtils.h:88
 AliEMCALRawUtils.h:89
 AliEMCALRawUtils.h:90
 AliEMCALRawUtils.h:91
 AliEMCALRawUtils.h:92
 AliEMCALRawUtils.h:93
 AliEMCALRawUtils.h:94
 AliEMCALRawUtils.h:95
 AliEMCALRawUtils.h:96
 AliEMCALRawUtils.h:97
 AliEMCALRawUtils.h:98