ROOT logo
// @(#)root/spectrum:$Id: TSpectrumTransform.h 20882 2007-11-19 11:31:26Z rdm $
// Author: Miroslav Morhac   25/09/06

/*************************************************************************
 * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/
#ifndef ROOT_TSpectrumTransform
#define ROOT_TSpectrumTransform

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TSpectrumTransform                                                   //
//                                                                      //
// Class to carry out transforms of 1D spectra, its filtering and       //
// enhancement. It allows to calculate classic Fourier, Cosine, Sin,    //
// Hartley, Walsh, Haar transforms as well as mixed transforms (Fourier-//
// Walsh, Fourier-Haar, Walsh-Haar, Cosine-Walsh, Cosine-Haar, Sin-Walsh//
// and Sin-Haar). All the transforms are fast.                          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

class TH1;

class TSpectrumTransform :  public TNamed {

protected:
   Int_t     fSize;                      //length of transformed data
   Int_t     fTransformType;             //type of transformation (Haar, Walsh, Cosine, Sine, Fourier, Hartley, Fourier-Walsh, Fourier-Haar, Walsh-Haar, Cosine-Walsh, Cosine-Haar, Sine-Walsh, Sine-Haar)
   Int_t     fDegree;                    //degree of mixed transform, applies only for Fourier-Walsh, Fourier-Haar, Walsh-Haar, Cosine-Walsh, Cosine-Haar, Sine-Walsh, Sine-Haar transforms
   Int_t     fDirection;                 //forward or inverse transform
   Int_t     fXmin;                      //first channel of filtered or enhanced region
   Int_t     fXmax;                      //last channel of filtered or enhanced region
   Float_t   fFilterCoeff;               //value set in the filtered region
   Float_t   fEnhanceCoeff;              //multiplication coefficient applied in enhanced region;

public:
   enum {
       kTransformHaar =0,
       kTransformWalsh =1,
       kTransformCos =2,
       kTransformSin =3,
       kTransformFourier =4,
       kTransformHartley =5,
       kTransformFourierWalsh =6,
       kTransformFourierHaar =7,
       kTransformWalshHaar =8,
       kTransformCosWalsh =9,
       kTransformCosHaar =10,
       kTransformSinWalsh =11,
       kTransformSinHaar =12,
       kTransformForward =0,
       kTransformInverse =1
   };
   TSpectrumTransform();
   TSpectrumTransform(Int_t size);
   virtual ~TSpectrumTransform();

protected:
   void                BitReverse(float *working_space,Int_t num);
   void                BitReverseHaar(float *working_space,Int_t shift,Int_t num,Int_t start);
   void                Fourier(float *working_space,Int_t num,Int_t hartley,Int_t direction,Int_t zt_clear);
   Int_t               GeneralExe(float *working_space,Int_t zt_clear,Int_t num,Int_t degree,Int_t type);
   Int_t               GeneralInv(float *working_space,Int_t num,Int_t degree,Int_t type);
   void                Haar(float *working_space,Int_t num,Int_t direction);
   void                Walsh(float *working_space,Int_t num);

public:
   void                Enhance(const float *source, float *destVector);
   void                FilterZonal(const float *source, float *destVector);
   void                SetDirection(Int_t direction);
   void                SetEnhanceCoeff(Float_t enhanceCoeff);
   void                SetFilterCoeff(Float_t filterCoeff);
   void                SetRegion(Int_t xmin, Int_t xmax);
   void                SetTransformType(Int_t transType, Int_t degree);
   void                Transform(const float *source, float *destVector);

   ClassDef(TSpectrumTransform,1)  //Spectrum Transformer, it calculates classic orthogonal 1D transforms
};


#endif

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