00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 #ifndef ROOT_TSpectrum2Transform
00012 #define ROOT_TSpectrum2Transform
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 #ifndef ROOT_TNamed
00027 #include "TNamed.h"
00028 #endif
00029 
00030 class TSpectrum2Transform : public TObject {
00031 protected:
00032    Int_t     fSizeX;                      
00033    Int_t     fSizeY;                      
00034    Int_t     fTransformType;              
00035    Int_t     fDegree;                     
00036    Int_t     fDirection;                  
00037    Int_t     fXmin;                       
00038    Int_t     fXmax;                       
00039    Int_t     fYmin;                       
00040    Int_t     fYmax;                       
00041    Float_t   fFilterCoeff;                
00042    Float_t   fEnhanceCoeff;               
00043 public:
00044    enum {
00045        kTransformHaar =0,
00046        kTransformWalsh =1,
00047        kTransformCos =2,
00048        kTransformSin =3,
00049        kTransformFourier =4,
00050        kTransformHartley =5,
00051        kTransformFourierWalsh =6,
00052        kTransformFourierHaar =7,
00053        kTransformWalshHaar =8,
00054        kTransformCosWalsh =9,
00055        kTransformCosHaar =10,
00056        kTransformSinWalsh =11,
00057        kTransformSinHaar =12,
00058        kTransformForward =0,
00059        kTransformInverse =1
00060    };
00061    TSpectrum2Transform();
00062    TSpectrum2Transform(Int_t sizeX, Int_t sizeY);
00063    virtual ~TSpectrum2Transform();
00064    
00065 protected:   
00066    void                BitReverse(Float_t *working_space,Int_t num);
00067    void                BitReverseHaar(Float_t *working_space,Int_t shift,Int_t num,Int_t start);
00068    void                FourCos2(Float_t **working_matrix,Float_t *working_vector,Int_t numx,Int_t numy,Int_t direction,Int_t type);   
00069    void                Fourier(Float_t *working_space,Int_t num,Int_t hartley,Int_t direction,Int_t zt_clear);
00070    void                General2(Float_t **working_matrix,Float_t *working_vector,Int_t numx,Int_t numy,Int_t direction,Int_t type,Int_t degree);   
00071    Int_t               GeneralExe(Float_t *working_space,Int_t zt_clear,Int_t num,Int_t degree,Int_t type);
00072    Int_t               GeneralInv(Float_t *working_space,Int_t num,Int_t degree,Int_t type);
00073    void                Haar(Float_t *working_space,Int_t num,Int_t direction);
00074    void                HaarWalsh2(Float_t **working_matrix,Float_t *working_vector,Int_t numx,Int_t numy,Int_t direction,Int_t type);
00075    void                Walsh(Float_t *working_space,Int_t num);   
00076 
00077 public:
00078    void                Enhance(const Float_t **fSource, Float_t **fDest);
00079    void                FilterZonal(const Float_t **fSource, Float_t **fDest);
00080    void                SetDirection(Int_t direction);
00081    void                SetEnhanceCoeff(Float_t enhanceCoeff);
00082    void                SetFilterCoeff(Float_t filterCoeff);
00083    void                SetRegion(Int_t xmin, Int_t xmax, Int_t ymin, Int_t ymax);
00084    void                SetTransformType(Int_t transType, Int_t degree);
00085    void                Transform(const Float_t **fSource, Float_t **fDest);
00086 
00087    ClassDef(TSpectrum2Transform,1)  
00088 };
00089 
00090 #endif