Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TSpectrum2Transform.h
Go to the documentation of this file.
1 // @(#)root/spectrum:$Id$
2 // Author: Miroslav Morhac 25/09/06
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 #ifndef ROOT_TSpectrum2Transform
12 #define ROOT_TSpectrum2Transform
13 
14 #include "TNamed.h"
15 
16 class TSpectrum2Transform : public TObject {
17 protected:
18  Int_t fSizeX; ///< x length of transformed data
19  Int_t fSizeY; ///< y length of transformed data
20  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)
21  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
22  Int_t fDirection; ///< forward or inverse transform
23  Int_t fXmin; ///< first channel x of filtered or enhanced region
24  Int_t fXmax; ///< last channel x of filtered or enhanced region
25  Int_t fYmin; ///< first channel y of filtered or enhanced region
26  Int_t fYmax; ///< last channel y of filtered or enhanced region
27  Double_t fFilterCoeff; ///< value set in the filtered region
28  Double_t fEnhanceCoeff; ///< multiplication coefficient applied in enhanced region;
29 public:
30  enum {
31  kTransformHaar =0,
32  kTransformWalsh =1,
33  kTransformCos =2,
34  kTransformSin =3,
35  kTransformFourier =4,
36  kTransformHartley =5,
37  kTransformFourierWalsh =6,
38  kTransformFourierHaar =7,
39  kTransformWalshHaar =8,
40  kTransformCosWalsh =9,
41  kTransformCosHaar =10,
42  kTransformSinWalsh =11,
43  kTransformSinHaar =12,
44  kTransformForward =0,
45  kTransformInverse =1
46  };
47  TSpectrum2Transform();
48  TSpectrum2Transform(Int_t sizeX, Int_t sizeY);
49  virtual ~TSpectrum2Transform();
50 
51 protected:
52  void BitReverse(Double_t *working_space,Int_t num);
53  void BitReverseHaar(Double_t *working_space,Int_t shift,Int_t num,Int_t start);
54  void FourCos2(Double_t **working_matrix,Double_t *working_vector,Int_t numx,Int_t numy,Int_t direction,Int_t type);
55  void Fourier(Double_t *working_space,Int_t num,Int_t hartley,Int_t direction,Int_t zt_clear);
56  void General2(Double_t **working_matrix,Double_t *working_vector,Int_t numx,Int_t numy,Int_t direction,Int_t type,Int_t degree);
57  Int_t GeneralExe(Double_t *working_space,Int_t zt_clear,Int_t num,Int_t degree,Int_t type);
58  Int_t GeneralInv(Double_t *working_space,Int_t num,Int_t degree,Int_t type);
59  void Haar(Double_t *working_space,Int_t num,Int_t direction);
60  void HaarWalsh2(Double_t **working_matrix,Double_t *working_vector,Int_t numx,Int_t numy,Int_t direction,Int_t type);
61  void Walsh(Double_t *working_space,Int_t num);
62 
63 public:
64  void Enhance(const Double_t **fSource, Double_t **fDest);
65  void FilterZonal(const Double_t **fSource, Double_t **fDest);
66  void SetDirection(Int_t direction);
67  void SetEnhanceCoeff(Double_t enhanceCoeff);
68  void SetFilterCoeff(Double_t filterCoeff);
69  void SetRegion(Int_t xmin, Int_t xmax, Int_t ymin, Int_t ymax);
70  void SetTransformType(Int_t transType, Int_t degree);
71  void Transform(const Double_t **fSource, Double_t **fDest);
72 
73  ClassDef(TSpectrum2Transform,1) //Spectrum2 Transformer, it calculates classic orthogonal 2D transforms
74 };
75 
76 #endif