ROOT logo
// @(#)root/spectrum:$Id$
// Author: Miroslav Morhac   25/09/06

//__________________________________________________________________________
//   THIS CLASS CONTAINS ORTHOGONAL TRANSFORM  FUNCTIONS.                  //
//                                                                         //
//   These functions were written by:                                      //
//   Miroslav Morhac                                                       //
//   Institute of Physics                                                  //
//   Slovak Academy of Sciences                                            //
//   Dubravska cesta 9, 842 28 BRATISLAVA                                  //
//   SLOVAKIA                                                              //
//                                                                         //
//   email:fyzimiro@savba.sk,    fax:+421 7 54772479                       //
//                                                                         //
//  The original code in C has been repackaged as a C++ class by R.Brun    //
//                                                                         //
//  The algorithms in this class have been published in the following      //
//  references:                                                            //
//                                                                         //
//  [1] C.V. Hampton, B. Lian, Wm. C. McHarris: Fast-Fourier-transform     //
//      spectral enhancement techniques for gamma-ray spectroscopy.NIM A353//
//      (1994) 280-284.                                                    //
//  [2] Morhac M., Matousek V., New adaptive Cosine-Walsh  transform and   //
//      its application to nuclear data compression, IEEE Transactions on  //
//      Signal Processing 48 (2000) 2693.                                  //  
//  [3] Morhac M., Matousek V., Data compression using new fast adaptive   //
//      Cosine-Haar transforms, Digital Signal Processing 8 (1998) 63.     //
//  [4] Morhac M., Matousek V.: Multidimensional nuclear data compression  //
//      using fast adaptive Walsh-Haar transform. Acta Physica Slovaca 51  //
//     (2001) 307.                                                         //
//____________________________________________________________________________

#include "TSpectrumTransform.h"
#include "TMath.h"

ClassImp(TSpectrumTransform) 
 
//____________________________________________________________________________    
TSpectrumTransform::TSpectrumTransform() 
{
   //default constructor
   fSize=0;
   fTransformType=kTransformCos;
   fDegree=0;
   fDirection=kTransformForward;
   fXmin=0;
   fXmax=0;
   fFilterCoeff=0;
   fEnhanceCoeff=0.5;
}

//____________________________________________________________________________    
TSpectrumTransform::TSpectrumTransform(Int_t size):TNamed("SpectrumTransform", "Miroslav Morhac transformer") 
{
//the constructor creates TSpectrumTransform object. Its size must be > than zero and must be power of 2.
//It sets default transform type to be Cosine transform. Transform parameters can be changed using setter functions.
   Int_t j,n;
   if (size <= 0){
      Error ("TSpectrumTransform","Invalid length, must be > than 0");
      return;
   }    
   j = 0;
   n = 1;
   for (; n < size;) {
      j += 1;
      n = n * 2;
   }
   if (n != size){
      Error ("TSpectrumTransform","Invalid length, must be power of 2");
      return;   
   }
   fSize=size;
   fTransformType=kTransformCos;
   fDegree=0;
   fDirection=kTransformForward;
   fXmin=size/4;
   fXmax=size-1;
   fFilterCoeff=0;
   fEnhanceCoeff=0.5;
}


//______________________________________________________________________________
TSpectrumTransform::~TSpectrumTransform() 
{
   //destructor
}

//_____________________________________________________________________________
void TSpectrumTransform::Haar(float *working_space, int num, int direction) 
{   
//////////////////////////////////////////////////////////////////////////////////
//   AUXILIARY FUNCION                                                          //
//                                                                              //
//   This function calculates Haar transform of a part of data                   //
//      Function parameters:                                                    //
//              -working_space-pointer to vector of transformed data            //
//              -num-length of processed data                                   //
//              -direction-forward or inverse transform                         //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////
   int i, ii, li, l2, l3, j, jj, jj1, lj, iter, m, jmin, jmax;
   double a, b, c, wlk;
   float val;
   for (i = 0; i < num; i++)
      working_space[i + num] = 0;
   i = num;
   iter = 0;
   for (; i > 1;) {
      iter += 1;
      i = i / 2;
   }
   if (direction == kTransformForward) {
      for (m = 1; m <= iter; m++) {
         li = iter + 1 - m;
         l2 = (int) TMath::Power(2, li - 1);
         for (i = 0; i < (2 * l2); i++) {
            working_space[num + i] = working_space[i];
         }
         for (j = 0; j < l2; j++) {
            l3 = l2 + j;
            jj = 2 * j;
            val = working_space[jj + num] + working_space[jj + 1 + num];
            working_space[j] = val;
            val = working_space[jj + num] - working_space[jj + 1 + num];
            working_space[l3] = val;
         }
      }
   }
   val = working_space[0];
   val = val / TMath::Sqrt(TMath::Power(2, iter));
   working_space[0] = val;
   val = working_space[1];
   val = val / TMath::Sqrt(TMath::Power(2, iter));
   working_space[1] = val;
   for (ii = 2; ii <= iter; ii++) {
      i = ii - 1;
      wlk = 1 / TMath::Sqrt(TMath::Power(2, iter - i));
      jmin = (int) TMath::Power(2, i);
      jmax = (int) TMath::Power(2, ii) - 1;
      for (j = jmin; j <= jmax; j++) {
         val = working_space[j];
         a = val;
         a = a * wlk;
         val = a;
         working_space[j] = val;
      }
   }
   if (direction == kTransformInverse) {
      for (m = 1; m <= iter; m++) {
         a = 2;
         b = m - 1;
         c = TMath::Power(a, b);
         li = (int) c;
         for (i = 0; i < (2 * li); i++) {
            working_space[i + num] = working_space[i];
         }
         for (j = 0; j < li; j++) {
            lj = li + j;
            jj = 2 * (j + 1) - 1;
            jj1 = jj - 1;
            val = working_space[j + num] - working_space[lj + num];
            working_space[jj] = val;
            val = working_space[j + num] + working_space[lj + num];
            working_space[jj1] = val;
         }
      }
   }
   return;
}

//____________________________________________________________________________    
void TSpectrumTransform::Walsh(float *working_space, int num) 
{
//////////////////////////////////////////////////////////////////////////////////
//   AUXILIARY FUNCION                                                          //
//                                                                              //
//   This function calculates Walsh transform of a part of data                  //
//      Function parameters:                                                    //
//              -working_space-pointer to vector of transformed data            //
//              -num-length of processed data                                   //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////
   int i, m, nump = 1, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter;
   double a;
   float val1, val2;
   for (i = 0; i < num; i++)
      working_space[i + num] = 0;
   i = num;
   iter = 0;
   for (; i > 1;) {
      iter += 1;
      i = i / 2;
   }
   for (m = 1; m <= iter; m++) {
      if (m == 1)
         nump = 1;
      
      else
         nump = nump * 2;
      mnum = num / nump;
      mnum2 = mnum / 2;
      for (mp = 0; mp < nump; mp++) {
         ib = mp * mnum;
         for (mp2 = 0; mp2 < mnum2; mp2++) {
            mnum21 = mnum2 + mp2 + ib;
            iba = ib + mp2;
            val1 = working_space[iba];
            val2 = working_space[mnum21];
            working_space[iba + num] = val1 + val2;
            working_space[mnum21 + num] = val1 - val2;
         }
      }
      for (i = 0; i < num; i++) {
         working_space[i] = working_space[i + num];
      }
   }
   a = num;
   a = TMath::Sqrt(a);
   val2 = a;
   for (i = 0; i < num; i++) {
      val1 = working_space[i];
      val1 = val1 / val2;
      working_space[i] = val1;
   }
   return;
}

//____________________________________________________________________________    
void TSpectrumTransform::BitReverse(float *working_space, int num) 
{   
//////////////////////////////////////////////////////////////////////////////////
//   AUXILIARY FUNCION                                                          //
//                                                                              //
//   This function carries out bir-reverse reordering of data                    //
//      Function parameters:                                                    //
//              -working_space-pointer to vector of processed data              //
//              -num-length of processed data                                   //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////
   int ipower[26];
   int i, ib, il, ibd, ip, ifac, i1;
   for (i = 0; i < num; i++) {
      working_space[i + num] = working_space[i];
   }
   for (i = 1; i <= num; i++) {
      ib = i - 1;
      il = 1;
   lab9:ibd = ib / 2;
      ipower[il - 1] = 1;
      if (ib == (ibd * 2))
         ipower[il - 1] = 0;
      if (ibd == 0)
         goto lab10;
      ib = ibd;
      il = il + 1;
      goto lab9;
   lab10:ip = 1;
      ifac = num;
      for (i1 = 1; i1 <= il; i1++) {
         ifac = ifac / 2;
         ip = ip + ifac * ipower[i1 - 1];
      }
      working_space[ip - 1] = working_space[i - 1 + num];
   }
   return;
}

//____________________________________________________________________________    
void TSpectrumTransform::Fourier(float *working_space, int num, int hartley,
                          int direction, int zt_clear) 
{   
//////////////////////////////////////////////////////////////////////////////////
//   AUXILIARY FUNCION                                                          //
//                                                                              //
//   This function calculates Fourier based transform of a part of data          //
//      Function parameters:                                                    //
//              -working_space-pointer to vector of transformed data            //
//              -num-length of processed data                                   //
//              -hartley-1 if it is Hartley transform, 0 othewise               //
//              -direction-forward or inverse transform                         //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////
   int nxp2, nxp, i, j, k, m, iter, mxp, j1, j2, n1, n2, it;
   double a, b, c, d, sign, wpwr, arg, wr, wi, tr, ti, pi =
       3.14159265358979323846;
   float val1, val2, val3, val4;
   if (direction == kTransformForward && zt_clear == 0) {
      for (i = 0; i < num; i++)
         working_space[i + num] = 0;
   }
   i = num;
   iter = 0;
   for (; i > 1;) {
      iter += 1;
      i = i / 2;
   }
   sign = -1;
   if (direction == kTransformInverse)
      sign = 1;
   nxp2 = num;
   for (it = 1; it <= iter; it++) {
      nxp = nxp2;
      nxp2 = nxp / 2;
      a = nxp2;
      wpwr = pi / a;
      for (m = 1; m <= nxp2; m++) {
         a = m - 1;
         arg = a * wpwr;
         wr = TMath::Cos(arg);
         wi = sign * TMath::Sin(arg);
         for (mxp = nxp; mxp <= num; mxp += nxp) {
            j1 = mxp - nxp + m;
            j2 = j1 + nxp2;
            val1 = working_space[j1 - 1];
            val2 = working_space[j2 - 1];
            val3 = working_space[j1 - 1 + num];
            val4 = working_space[j2 - 1 + num];
            a = val1;
            b = val2;
            c = val3;
            d = val4;
            tr = a - b;
            ti = c - d;
            a = a + b;
            val1 = a;
            working_space[j1 - 1] = val1;
            c = c + d;
            val1 = c;
            working_space[j1 - 1 + num] = val1;
            a = tr * wr - ti * wi;
            val1 = a;
            working_space[j2 - 1] = val1;
            a = ti * wr + tr * wi;
            val1 = a;
            working_space[j2 - 1 + num] = val1;
         }
      }
   }
   n2 = num / 2;
   n1 = num - 1;
   j = 1;
   for (i = 1; i <= n1; i++) {
      if (i >= j)
         goto lab55;
      val1 = working_space[j - 1];
      val2 = working_space[j - 1 + num];
      val3 = working_space[i - 1];
      working_space[j - 1] = val3;
      working_space[j - 1 + num] = working_space[i - 1 + num];
      working_space[i - 1] = val1;
      working_space[i - 1 + num] = val2;
      lab55: k = n2;
      lab60: if (k >= j) goto lab65;
      j = j - k;
      k = k / 2;
      goto lab60;
      lab65: j = j + k;
   }
   a = num;
   a = TMath::Sqrt(a);
   for (i = 0; i < num; i++) {
      if (hartley == 0) {
         val1 = working_space[i];
         b = val1;
         b = b / a;
         val1 = b;
         working_space[i] = val1;
         b = working_space[i + num];
         b = b / a;
         working_space[i + num] = b;
      }
      
      else {
         b = working_space[i];
         c = working_space[i + num];
         b = (b + c) / a;
         working_space[i] = b;
         working_space[i + num] = 0;
      }
   }
   if (hartley == 1 && direction == kTransformInverse) {
      for (i = 1; i < num; i++)
         working_space[num - i + num] = working_space[i];
      working_space[0 + num] = working_space[0];
      for (i = 0; i < num; i++) {
         working_space[i] = working_space[i + num];
         working_space[i + num] = 0;
      }
   }
   return;
}

//____________________________________________________________________________    
void TSpectrumTransform::BitReverseHaar(float *working_space, int shift, int num,
                                 int start) 
{
//////////////////////////////////////////////////////////////////////////////////
//   AUXILIARY FUNCION                                                          //
//                                                                              //
//   This function carries out bir-reverse reordering for Haar transform         //
//      Function parameters:                                                    //
//              -working_space-pointer to vector of processed data              //
//              -shift-shift of position of processing                          //
//              -start-initial position of processed data                       //
//              -num-length of processed data                                   //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////
   int ipower[26];
   int i, ib, il, ibd, ip, ifac, i1;
   for (i = 0; i < num; i++) {
      working_space[i + shift + start] = working_space[i + start];
      working_space[i + shift + start + 2 * shift] =
          working_space[i + start + 2 * shift];
   }
   for (i = 1; i <= num; i++) {
      ib = i - 1;
      il = 1;
      lab9: ibd = ib / 2;
      ipower[il - 1] = 1;
      if (ib == (ibd * 2))
         ipower[il - 1] = 0;
      if (ibd == 0)
         goto lab10;
      ib = ibd;
      il = il + 1;
      goto lab9;
      lab10: ip = 1;
      ifac = num;
      for (i1 = 1; i1 <= il; i1++) {
         ifac = ifac / 2;
         ip = ip + ifac * ipower[i1 - 1];
      }
      working_space[ip - 1 + start] =
      working_space[i - 1 + shift + start];
      working_space[ip - 1 + start + 2 * shift] =
      working_space[i - 1 + shift + start + 2 * shift];
   }
   return;
}

//____________________________________________________________________________    
int TSpectrumTransform::GeneralExe(float *working_space, int zt_clear, int num,
                            int degree, int type) 
{
//////////////////////////////////////////////////////////////////////////////////
//   AUXILIARY FUNCION                                                          //
//                                                                              //
//   This function calculates generalized (mixed) transforms of different degrees//
//      Function parameters:                                                    //
//              -working_space-pointer to vector of transformed data            //
//              -zt_clear-flag to clear imaginary data before staring           //
//              -num-length of processed data                                   //
//              -degree-degree of transform (see manual)                        //
//              -type-type of mixed transform (see manual)                      //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////
   int i, j, k, m, nump, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter,
       mp2step, mppom, ring;
   double a, b, c, d, wpwr, arg, wr, wi, tr, ti, pi =
       3.14159265358979323846;
   float val1, val2, val3, val4, a0oldr = 0, b0oldr = 0, a0r, b0r;
   if (zt_clear == 0) {
      for (i = 0; i < num; i++)
         working_space[i + 2 * num] = 0;
   }
   i = num;
   iter = 0;
   for (; i > 1;) {
      iter += 1;
      i = i / 2;
   }
   a = num;
   wpwr = 2.0 * pi / a;
   nump = num;
   mp2step = 1;
   ring = num;
   for (i = 0; i < iter - degree; i++)
      ring = ring / 2;
   for (m = 1; m <= iter; m++) {
      nump = nump / 2;
      mnum = num / nump;
      mnum2 = mnum / 2;
      if (m > degree
           && (type == kTransformFourierHaar
               || type == kTransformWalshHaar
               || type == kTransformCosHaar
               || type == kTransformSinHaar))
         mp2step *= 2;
      if (ring > 1)
         ring = ring / 2;
      for (mp = 0; mp < nump; mp++) {
         if (type != kTransformWalshHaar) {
            mppom = mp;
            mppom = mppom % ring;
            a = 0;
            j = 1;
            k = num / 4;
            for (i = 0; i < (iter - 1); i++) {
               if ((mppom & j) != 0)
                  a = a + k;
               j = j * 2;
               k = k / 2;
            }
            arg = a * wpwr;
            wr = TMath::Cos(arg);
            wi = TMath::Sin(arg);
         }
         
         else {
            wr = 1;
            wi = 0;
         }
         ib = mp * mnum;
         for (mp2 = 0; mp2 < mnum2; mp2++) {
            mnum21 = mnum2 + mp2 + ib;
            iba = ib + mp2;
            if (mp2 % mp2step == 0) {
               a0r = a0oldr;
               b0r = b0oldr;
               a0r = 1 / TMath::Sqrt(2.0);
               b0r = 1 / TMath::Sqrt(2.0);
            }
            
            else {
               a0r = 1;
               b0r = 0;
            }
            val1 = working_space[iba];
            val2 = working_space[mnum21];
            val3 = working_space[iba + 2 * num];
            val4 = working_space[mnum21 + 2 * num];
            a = val1;
            b = val2;
            c = val3;
            d = val4;
            tr = a * a0r + b * b0r;
            val1 = tr;
            working_space[num + iba] = val1;
            ti = c * a0r + d * b0r;
            val1 = ti;
            working_space[num + iba + 2 * num] = val1;
            tr =
                a * b0r * wr - c * b0r * wi - b * a0r * wr + d * a0r * wi;
            val1 = tr;
            working_space[num + mnum21] = val1;
            ti =
                c * b0r * wr + a * b0r * wi - d * a0r * wr - b * a0r * wi;
            val1 = ti;
            working_space[num + mnum21 + 2 * num] = val1;
         }
      }
      for (i = 0; i < num; i++) {
         val1 = working_space[num + i];
         working_space[i] = val1;
         val1 = working_space[num + i + 2 * num];
         working_space[i + 2 * num] = val1;
      }
   }
   return (0);
}

//____________________________________________________________________________    
int TSpectrumTransform::GeneralInv(float *working_space, int num, int degree,
                            int type) 
{
//////////////////////////////////////////////////////////////////////////////////
//   AUXILIARY FUNCION                                                          //
//                                                                              //
//   This function calculates inverse generalized (mixed) transforms             //
//      Function parameters:                                                    //
//              -working_space-pointer to vector of transformed data            //
//              -num-length of processed data                                   //
//              -degree-degree of transform (see manual)                        //
//              -type-type of mixed transform (see manual)                      //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////
   int i, j, k, m, nump =
       1, mnum, mnum2, mp, ib, mp2, mnum21, iba, iter, mp2step, mppom,
       ring;
   double a, b, c, d, wpwr, arg, wr, wi, tr, ti, pi =
       3.14159265358979323846;
   float val1, val2, val3, val4, a0oldr = 0, b0oldr = 0, a0r, b0r;
   i = num;
   iter = 0;
   for (; i > 1;) {
      iter += 1;
      i = i / 2;
   }
   a = num;
   wpwr = 2.0 * pi / a;
   mp2step = 1;
   if (type == kTransformFourierHaar || type == kTransformWalshHaar
        || type == kTransformCosHaar || type == kTransformSinHaar) {
      for (i = 0; i < iter - degree; i++)
         mp2step *= 2;
   }
   ring = 1;
   for (m = 1; m <= iter; m++) {
      if (m == 1)
         nump = 1;
      
      else
         nump = nump * 2;
      mnum = num / nump;
      mnum2 = mnum / 2;
      if (m > iter - degree + 1)
         ring *= 2;
      for (mp = nump - 1; mp >= 0; mp--) {
         if (type != kTransformWalshHaar) {
            mppom = mp;
            mppom = mppom % ring;
            a = 0;
            j = 1;
            k = num / 4;
            for (i = 0; i < (iter - 1); i++) {
               if ((mppom & j) != 0)
                  a = a + k;
               j = j * 2;
               k = k / 2;
            }
            arg = a * wpwr;
            wr = TMath::Cos(arg);
            wi = TMath::Sin(arg);
         }
         
         else {
            wr = 1;
            wi = 0;
         }
         ib = mp * mnum;
         for (mp2 = 0; mp2 < mnum2; mp2++) {
            mnum21 = mnum2 + mp2 + ib;
            iba = ib + mp2;
            if (mp2 % mp2step == 0) {
               a0r = a0oldr;
               b0r = b0oldr;
               a0r = 1 / TMath::Sqrt(2.0);
               b0r = 1 / TMath::Sqrt(2.0);
            }
            
            else {
               a0r = 1;
               b0r = 0;
            }
            val1 = working_space[iba];
            val2 = working_space[mnum21];
            val3 = working_space[iba + 2 * num];
            val4 = working_space[mnum21 + 2 * num];
            a = val1;
            b = val2;
            c = val3;
            d = val4;
            tr = a * a0r + b * wr * b0r + d * wi * b0r;
            val1 = tr;
            working_space[num + iba] = val1;
            ti = c * a0r + d * wr * b0r - b * wi * b0r;
            val1 = ti;
            working_space[num + iba + 2 * num] = val1;
            tr = a * b0r - b * wr * a0r - d * wi * a0r;
            val1 = tr;
            working_space[num + mnum21] = val1;
            ti = c * b0r - d * wr * a0r + b * wi * a0r;
            val1 = ti;
            working_space[num + mnum21 + 2 * num] = val1;
         }
      }
      if (m <= iter - degree
           && (type == kTransformFourierHaar
               || type == kTransformWalshHaar
               || type == kTransformCosHaar
               || type == kTransformSinHaar))
         mp2step /= 2;
      for (i = 0; i < num; i++) {
         val1 = working_space[num + i];
         working_space[i] = val1;
         val1 = working_space[num + i + 2 * num];
         working_space[i + 2 * num] = val1;
      }
   }
   return (0);
}


//////////END OF AUXILIARY FUNCTIONS FOR TRANSFORM! FUNCTION////////////////////////
//////////TRANSFORM FUNCTION - CALCULATES DIFFERENT 1-D DIRECT AND INVERSE ORTHOGONAL TRANSFORMS//////

//____________________________________________________________________________    
void TSpectrumTransform::Transform(const float *source, float *destVector)
{   
///////////////////////////////////////////////////////////////////////////////
//        ONE-DIMENSIONAL TRANSFORM FUNCTION                                 
//        This function transforms the source spectrum. The calling program 
//        should fill in input parameters.                                    
//        Transformed data are written into dest spectrum.                  
//                                                                           
//        Function parameters:                                               
//        source-pointer to the vector of source spectrum, its length should 
//             be size except for inverse FOURIER, FOUR-WALSH, FOUR-HAAR     
//             transform. These need 2*size length to supply real and        
//             imaginary coefficients.                                       
//        destVector-pointer to the vector of dest data, its length should be
//             size except for direct FOURIER, FOUR-WALSH, FOUR-HAAR. These    
//             need 2*size length to store real and imaginary coefficients    
//                                                                         
///////////////////////////////////////////////////////////////////////////////
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal><b><span style='font-size:14.0pt'>Transform methods</span></b></p>

<p class=MsoNormal style='text-align:justify'><i>&nbsp;</i></p>

<p class=MsoNormal style='text-align:justify'><i>Goal: to analyze experimental
data using orthogonal transforms</i></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>orthogonal transforms can be successfully used for the processing of
nuclear spectra (not only) </p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>they can be used to remove high frequency noise, to increase
signal-to-background ratio as well as to enhance low intensity components [1],
to carry out e.g. Fourier analysis etc. </p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>we have implemented the function for the calculation of the commonly
used orthogonal transforms as well as functions for the filtration and
enhancement of experimental data</p>

<p class=MsoNormal><i>&nbsp;</i></p>

<p class=MsoNormal><i>Function:</i></p>

<p class=MsoNormal><b>void TSpectrumTransform::Transform(const <a
href="http://root.cern.ch/root/html/ListOfTypes.html#float">float</a> *fSource,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#float">float</a>
*fDest)</b></p>

<p class=MsoNormal style='text-align:justify'>&nbsp;</p>

<p class=MsoNormal style='text-align:justify'>This function transforms the
source spectrum according to the given input parameters. Transformed data are
written into dest spectrum. Before the Transform function is called the class
must be created by constructor and the type of the transform as well as some
other parameters must be set using a set of setter functions.</p>

<p class=MsoNormal style='text-align:justify'>&nbsp;</p>

<p class=MsoNormal><i><span style='color:red'>Member variables of
TSpectrumTransform class:</span></i></p>

<p class=MsoNormal style='margin-left:25.65pt;text-align:justify'> <b>fSource</b>-pointer
to the vector of source spectrum. Its length should be equal to the “fSize”
parameter except for inverse FOURIER, FOUR-WALSH, FOUR-HAAR transforms. These
need “2*fSize” length to supply real and imaginary coefficients.                   </p>

<p class=MsoNormal style='margin-left:25.65pt;text-align:justify'><b>fDest</b>-pointer
to the vector of destination spectrum. Its length should be equal to the
“fSize” parameter except for inverse FOURIER, FOUR-WALSH, FOUR-HAAR transforms.
These need “2*fSize” length to store real and imaginary coefficients. </p>

<p class=MsoNormal style='text-align:justify'>        <b>fSize</b>-basic length
of the source and dest spectrum. <span style='color:fuchsia'>It should be power
of 2.</span></p>

<p class=MsoNormal style='margin-left:25.65pt;text-align:justify;text-indent:
-2.85pt'><b>fType</b>-type of transform</p>

<p class=MsoNormal style='text-align:justify'>            Classic transforms:</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformHaar
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformWalsh
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformCos
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformSin
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformFourier
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformHartey
</p>

<p class=MsoNormal style='text-align:justify'>            Mixed transforms:</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformFourierWalsh
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformFourierHaar
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformWalshHaar
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformCosWalsh
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformCosHaar
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformSinWalsh
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformSinHaar
</p>

<p class=MsoNormal style='text-align:justify;text-indent:22.8pt'><b>fDirection</b>-direction-transform
direction (forward, inverse)</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformForward
</p>

<p class=MsoNormal style='text-align:justify'>                        kTransformInverse
</p>

<p class=MsoNormal style='text-align:justify;text-indent:22.8pt'><b>fDegree</b>-applies
only for mixed transforms [2], [3], [4]. </p>

<p class=MsoNormal style='text-align:justify;text-indent:22.8pt'>                
<span style='color:fuchsia'> Allowed range  <sub><img border=0 width=100
height=27 src="gif/spectrumtransform_transform_image001.gif"></sub>. </span></p>

<p class=MsoNormal style='text-align:justify'><b><i>References:</i></b></p>

<p class=MsoNormal style='text-align:justify'>[1] C.V. Hampton, B. Lian, Wm. C.
McHarris: Fast-Fourier-transform spectral enhancement techniques for gamma-ray
spectroscopy. NIM A353 (1994) 280-284. </p>

<p class=MsoNormal style='text-align:justify'>[2] Morhá&#269; M., Matoušek V.,
New adaptive Cosine-Walsh  transform and its application to nuclear data
compression, IEEE Transactions on Signal Processing 48 (2000) 2693.  </p>

<p class=MsoNormal style='text-align:justify'>[3] Morhá&#269; M., Matoušek V.,
Data compression using new fast adaptive Cosine-Haar transforms, Digital Signal
Processing 8 (1998) 63. </p>

<p class=MsoNormal style='text-align:justify'>[4] Morhá&#269; M., Matoušek V.:
Multidimensional nuclear data compression using fast adaptive Walsh-Haar
transform. Acta Physica Slovaca 51 (2001) 307. </p>

<p class=MsoNormal style='text-align:justify'>&nbsp;</p>

<p class=MsoNormal style='text-align:justify'><i>Example  – script Transform.c:</i></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:18.0pt'><img
width=600 height=324 src="gif/spectrumtransform_transform_image002.jpg"></span></p>

<p class=MsoNormal><b>Fig. 1 Original gamma-ray spectrum</b></p>

<p class=MsoNormal><b><span style='font-size:14.0pt'><img border=0 width=601
height=402 src="gif/spectrumtransform_transform_image003.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:18.0pt'>&nbsp;</span></p>

<p class=MsoNormal><b>Fig. 2 Transformed spectrum from Fig. 1 using Cosine
transform</b></p>

<p class=MsoNormal><b><span style='font-size:16.0pt;color:#339966'>&nbsp;</span></b></p>

<p class=MsoNormal><b><span style='color:#339966'>Script:</span></b></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// Example to illustrate
Transform function (class TSpectrumTransform).</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// To execute this example,
do</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// root &gt; .x Transform.C</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#include &lt;TSpectrum&gt;</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#include
&lt;TSpectrumTransform&gt;</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>&nbsp;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>void Transform() {</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Int_t i;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t nbins =
4096;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t xmin  =
0;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t xmax  =
(Double_t)nbins;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   </span><span
style='font-size:10.0pt'>Float_t * source = new float[nbins];</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   Float_t * dest = new
float[nbins];   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TH1F *h = new TH1F(&quot;h&quot;,&quot;Transformed
spectrum using Cosine transform&quot;,nbins,xmin,xmax);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TFile *f = new
TFile(&quot;spectra\\TSpectrum.root&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   h=(TH1F*)
f-&gt;Get(&quot;transform1;1&quot;);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   for (i = 0; i &lt; nbins;
i++) source[i]=h-&gt;GetBinContent(i + 1);         </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TCanvas *Transform1 =
gROOT-&gt;GetListOfCanvases()-&gt;FindObject(&quot;Transform1&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   if (!Transform1)
Transform1 = new
TCanvas(&quot;Transform&quot;,&quot;Transform1&quot;,10,10,1000,700);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TSpectrum *s = new
TSpectrum();</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TSpectrumTransform *t =
new TSpectrumTransform(4096);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   </span><span lang=FR
style='font-size:10.0pt'>t-&gt;SetTransformType(t-&gt;kTransformCos,0);</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>  
t-&gt;SetDirection(t-&gt;kTransformForward);</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   </span><span
style='font-size:10.0pt'>t-&gt;Transform(source,dest);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   for (i = 0; i &lt; nbins;
i++) h-&gt;SetBinContent(i + 1,dest[i]);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>  
h-&gt;SetLineColor(kRed);      </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   h-&gt;Draw(&quot;L&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>}</span></p>

</div>

<!-- */
// --> End_Html
   int i, j=0, k = 1, m, l;
   float val;
   double a, b, pi = 3.14159265358979323846;
   float *working_space = 0;
   if (fTransformType >= kTransformFourierWalsh && fTransformType <= kTransformSinHaar) {
      if (fTransformType >= kTransformCosWalsh)
         fDegree += 1;
      k = (int) TMath::Power(2, fDegree);
      j = fSize / k;
   }
   switch (fTransformType) {
   case kTransformHaar:
   case kTransformWalsh:
      working_space = new float[2 * fSize];
      break;
   case kTransformCos:
   case kTransformSin:
   case kTransformFourier:
   case kTransformHartley:
   case kTransformFourierWalsh:
   case kTransformFourierHaar:
   case kTransformWalshHaar:
      working_space = new float[4 * fSize];
      break;
   case kTransformCosWalsh:
   case kTransformCosHaar:
   case kTransformSinWalsh:
   case kTransformSinHaar:
      working_space = new float[8 * fSize];
      break;
   }
   if (fDirection == kTransformForward) {
      switch (fTransformType) {
      case kTransformHaar:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         Haar(working_space, fSize, fDirection);
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformWalsh:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         Walsh(working_space, fSize);
         BitReverse(working_space, fSize);
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformCos:
         fSize = 2 * fSize;
         for (i = 1; i <= (fSize / 2); i++) {
            val = source[i - 1];
            working_space[i - 1] = val;
            working_space[fSize - i] = val;
         }
         Fourier(working_space, fSize, 0, kTransformForward, 0);
         for (i = 0; i < fSize / 2; i++) {
            a = pi * (double) i / (double) fSize;
            a = TMath::Cos(a);
            b = working_space[i];
            a = b / a;
            working_space[i] = a;
            working_space[i + fSize] = 0;
         } working_space[0] = working_space[0] / TMath::Sqrt(2.0);
         for (i = 0; i < fSize / 2; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformSin:
         fSize = 2 * fSize;
         for (i = 1; i <= (fSize / 2); i++) {
            val = source[i - 1];
            working_space[i - 1] = val;
            working_space[fSize - i] = -val;
         }
         Fourier(working_space, fSize, 0, kTransformForward, 0);
         for (i = 0; i < fSize / 2; i++) {
            a = pi * (double) i / (double) fSize;
            a = TMath::Sin(a);
            b = working_space[i];
            if (a != 0)
               a = b / a;
            working_space[i - 1] = a;
            working_space[i + fSize] = 0;
         }
         working_space[fSize / 2 - 1] =
             working_space[fSize / 2] / TMath::Sqrt(2.0);
         for (i = 0; i < fSize / 2; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformFourier:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         Fourier(working_space, fSize, 0, kTransformForward, 0);
         for (i = 0; i < 2 * fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformHartley:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         Fourier(working_space, fSize, 1, kTransformForward, 0);
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformFourierWalsh:
      case kTransformFourierHaar:
      case kTransformWalshHaar:
      case kTransformCosWalsh:
      case kTransformCosHaar:
      case kTransformSinWalsh:
      case kTransformSinHaar:
         for (i = 0; i < fSize; i++) {
            val = source[i];
            if (fTransformType == kTransformCosWalsh
                 || fTransformType == kTransformCosHaar) {
               j = (int) TMath::Power(2, fDegree) / 2;
               k = i / j;
               k = 2 * k * j;
               working_space[k + i % j] = val;
               working_space[k + 2 * j - 1 - i % j] = val;
            }
            
            else if (fTransformType == kTransformSinWalsh
                     || fTransformType == kTransformSinHaar) {
               j = (int) TMath::Power(2, fDegree) / 2;
               k = i / j;
               k = 2 * k * j;
               working_space[k + i % j] = val;
               working_space[k + 2 * j - 1 - i % j] = -val;
            }
            
            else
               working_space[i] = val;
         }
         if (fTransformType == kTransformFourierWalsh
              || fTransformType == kTransformFourierHaar
              || fTransformType == kTransformWalshHaar) {
            for (i = 0; i < j; i++)
               BitReverseHaar(working_space, fSize, k, i * k);
            GeneralExe(working_space, 0, fSize, fDegree, fTransformType);
         }
         
         else if (fTransformType == kTransformCosWalsh
                  || fTransformType == kTransformCosHaar) {
            m = (int) TMath::Power(2, fDegree);
            l = 2 * fSize / m;
            for (i = 0; i < l; i++)
               BitReverseHaar(working_space, 2 * fSize, m, i * m);
            GeneralExe(working_space, 0, 2 * fSize, fDegree, fTransformType);
            for (i = 0; i < fSize; i++) {
               k = i / j;
               k = 2 * k * j;
               a = pi * (double) (i % j) / (double) (2 * j);
               a = TMath::Cos(a);
               b = working_space[k + i % j];
               if (i % j == 0)
                  a = b / TMath::Sqrt(2.0);
               
               else
                  a = b / a;
               working_space[i] = a;
               working_space[i + 2 * fSize] = 0;
            }
         }
         
         else if (fTransformType == kTransformSinWalsh
                  || fTransformType == kTransformSinHaar) {
            m = (int) TMath::Power(2, fDegree);
            l = 2 * fSize / m;
            for (i = 0; i < l; i++)
               BitReverseHaar(working_space, 2 * fSize, m, i * m);
            GeneralExe(working_space, 0, 2 * fSize, fDegree, fTransformType);
            for (i = 0; i < fSize; i++) {
               k = i / j;
               k = 2 * k * j;
               a = pi * (double) (i % j) / (double) (2 * j);
               a = TMath::Cos(a);
               b = working_space[j + k + i % j];
               if (i % j == 0)
                  a = b / TMath::Sqrt(2.0);
               
               else
                  a = b / a;
               working_space[j + k / 2 - i % j - 1] = a;
               working_space[i + 2 * fSize] = 0;
            }
         }
         if (fTransformType > kTransformWalshHaar)
            k = (int) TMath::Power(2, fDegree - 1);
         
         else
            k = (int) TMath::Power(2, fDegree);
         j = fSize / k;
         for (i = 0, l = 0; i < fSize; i++, l = (l + k) % fSize) {
            working_space[fSize + i] = working_space[l + i / j];
            working_space[fSize + i + 2 * fSize] =
                working_space[l + i / j + 2 * fSize];
         }
         for (i = 0; i < fSize; i++) {
            working_space[i] = working_space[fSize + i];
            working_space[i + 2 * fSize] =
                working_space[fSize + i + 2 * fSize];
         }
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         if (fTransformType == kTransformFourierWalsh
              || fTransformType == kTransformFourierHaar) {
            for (i = 0; i < fSize; i++) {
               destVector[fSize + i] = working_space[i + 2 * fSize];
            }
         }
         break;
      }
   }
   
   else if (fDirection == kTransformInverse) {
      switch (fTransformType) {
      case kTransformHaar:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         Haar(working_space, fSize, fDirection);
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformWalsh:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         BitReverse(working_space, fSize);
         Walsh(working_space, fSize);
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformCos:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         fSize = 2 * fSize;
         working_space[0] = working_space[0] * TMath::Sqrt(2.0);
         for (i = 0; i < fSize / 2; i++) {
            a = pi * (double) i / (double) fSize;
            b = TMath::Sin(a);
            a = TMath::Cos(a);
            working_space[i + fSize] = (double) working_space[i] * b;
            working_space[i] = (double) working_space[i] * a;
         } for (i = 2; i <= (fSize / 2); i++) {
            working_space[fSize - i + 1] = working_space[i - 1];
            working_space[fSize - i + 1 + fSize] =
                -working_space[i - 1 + fSize];
         }
         working_space[fSize / 2] = 0;
         working_space[fSize / 2 + fSize] = 0;
         Fourier(working_space, fSize, 0, kTransformInverse, 1);
         for (i = 0; i < fSize / 2; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformSin:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         fSize = 2 * fSize;
         working_space[fSize / 2] =
             working_space[fSize / 2 - 1] * TMath::Sqrt(2.0);
         for (i = fSize / 2 - 1; i > 0; i--) {
            a = pi * (double) i / (double) fSize;
            working_space[i + fSize] =
                -(double) working_space[i - 1] * TMath::Cos(a);
            working_space[i] =
                (double) working_space[i - 1] * TMath::Sin(a);
         } for (i = 2; i <= (fSize / 2); i++) {
            working_space[fSize - i + 1] = working_space[i - 1];
            working_space[fSize - i + 1 + fSize] =
                -working_space[i - 1 + fSize];
         }
         working_space[0] = 0;
         working_space[fSize] = 0;
         working_space[fSize / 2 + fSize] = 0;
         Fourier(working_space, fSize, 0, kTransformInverse, 0);
         for (i = 0; i < fSize / 2; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformFourier:
         for (i = 0; i < 2 * fSize; i++) {
            working_space[i] = source[i];
         }
         Fourier(working_space, fSize, 0, kTransformInverse, 0);
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformHartley:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         Fourier(working_space, fSize, 1, kTransformInverse, 0);
         for (i = 0; i < fSize; i++) {
            destVector[i] = working_space[i];
         }
         break;
      case kTransformFourierWalsh:
      case kTransformFourierHaar:
      case kTransformWalshHaar:
      case kTransformCosWalsh:
      case kTransformCosHaar:
      case kTransformSinWalsh:
      case kTransformSinHaar:
         for (i = 0; i < fSize; i++) {
            working_space[i] = source[i];
         }
         if (fTransformType == kTransformFourierWalsh
              || fTransformType == kTransformFourierHaar) {
            for (i = 0; i < fSize; i++) {
               working_space[i + 2 * fSize] = source[fSize + i];
            }
         }
         if (fTransformType > kTransformWalshHaar)
            k = (int) TMath::Power(2, fDegree - 1);
         
         else
            k = (int) TMath::Power(2, fDegree);
         j = fSize / k;
         for (i = 0, l = 0; i < fSize; i++, l = (l + k) % fSize) {
            working_space[fSize + l + i / j] = working_space[i];
            working_space[fSize + l + i / j + 2 * fSize] =
                working_space[i + 2 * fSize];
         }
         for (i = 0; i < fSize; i++) {
            working_space[i] = working_space[fSize + i];
            working_space[i + 2 * fSize] =
                working_space[fSize + i + 2 * fSize];
         }
         if (fTransformType == kTransformFourierWalsh
              || fTransformType == kTransformFourierHaar
              || fTransformType == kTransformWalshHaar) {
            GeneralInv(working_space, fSize, fDegree, fTransformType);
            for (i = 0; i < j; i++)
               BitReverseHaar(working_space, fSize, k, i * k);
         }
         
         else if (fTransformType == kTransformCosWalsh
                  || fTransformType == kTransformCosHaar) {
            j = (int) TMath::Power(2, fDegree) / 2;
            m = (int) TMath::Power(2, fDegree);
            l = 2 * fSize / m;
            for (i = 0; i < fSize; i++) {
               k = i / j;
               k = 2 * k * j;
               a = pi * (double) (i % j) / (double) (2 * j);
               if (i % j == 0) {
                  working_space[2 * fSize + k + i % j] =
                      working_space[i] * TMath::Sqrt(2.0);
                  working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
               }
               
               else {
                  b = TMath::Sin(a);
                  a = TMath::Cos(a);
                  working_space[4 * fSize + 2 * fSize + k + i % j] =
                      -(double) working_space[i] * b;
                  working_space[2 * fSize + k + i % j] =
                      (double) working_space[i] * a;
            } } for (i = 0; i < fSize; i++) {
               k = i / j;
               k = 2 * k * j;
               if (i % j == 0) {
                  working_space[2 * fSize + k + j] = 0;
                  working_space[4 * fSize + 2 * fSize + k + j] = 0;
               }
               
               else {
                  working_space[2 * fSize + k + 2 * j - i % j] =
                      working_space[2 * fSize + k + i % j];
                  working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
                      -working_space[4 * fSize + 2 * fSize + k + i % j];
               }
            }
            for (i = 0; i < 2 * fSize; i++) {
               working_space[i] = working_space[2 * fSize + i];
               working_space[4 * fSize + i] =
                   working_space[4 * fSize + 2 * fSize + i];
            }
            GeneralInv(working_space, 2 * fSize, fDegree, fTransformType);
            m = (int) TMath::Power(2, fDegree);
            l = 2 * fSize / m;
            for (i = 0; i < l; i++)
               BitReverseHaar(working_space, 2 * fSize, m, i * m);
         }
         
         else if (fTransformType == kTransformSinWalsh
                  || fTransformType == kTransformSinHaar) {
            j = (int) TMath::Power(2, fDegree) / 2;
            m = (int) TMath::Power(2, fDegree);
            l = 2 * fSize / m;
            for (i = 0; i < fSize; i++) {
               k = i / j;
               k = 2 * k * j;
               a = pi * (double) (i % j) / (double) (2 * j);
               if (i % j == 0) {
                  working_space[2 * fSize + k + j + i % j] =
                      working_space[j + k / 2 - i % j -
                                    1] * TMath::Sqrt(2.0);
                  working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
               }
               
               else {
                  b = TMath::Sin(a);
                  a = TMath::Cos(a);
                  working_space[4 * fSize + 2 * fSize + k + j + i % j] =
                      -(double) working_space[j + k / 2 - i % j - 1] * b;
                  working_space[2 * fSize + k + j + i % j] =
                      (double) working_space[j + k / 2 - i % j - 1] * a;
            } } for (i = 0; i < fSize; i++) {
               k = i / j;
               k = 2 * k * j;
               if (i % j == 0) {
                  working_space[2 * fSize + k] = 0;
                  working_space[4 * fSize + 2 * fSize + k] = 0;
               }
               
               else {
                  working_space[2 * fSize + k + i % j] =
                      working_space[2 * fSize + k + 2 * j - i % j];
                  working_space[4 * fSize + 2 * fSize + k + i % j] =
                      -working_space[4 * fSize + 2 * fSize + k + 2 * j -
                                     i % j];
               }
            }
            for (i = 0; i < 2 * fSize; i++) {
               working_space[i] = working_space[2 * fSize + i];
               working_space[4 * fSize + i] =
                   working_space[4 * fSize + 2 * fSize + i];
            }
            GeneralInv(working_space, 2 * fSize, fDegree, fTransformType);
            for (i = 0; i < l; i++)
               BitReverseHaar(working_space, 2 * fSize, m, i * m);
         }
         for (i = 0; i < fSize; i++) {
            if (fTransformType >= kTransformCosWalsh) {
               k = i / j;
               k = 2 * k * j;
               val = working_space[k + i % j];
            }
            
            else
               val = working_space[i];
            destVector[i] = val;
         }
         break;
      }
   }
   delete[]working_space;
   return;
}

//////////FilterZonal FUNCTION - CALCULATES DIFFERENT 1-D ORTHOGONAL TRANSFORMS, SETS GIVEN REGION TO FILTER COEFFICIENT AND TRANSFORMS IT BACK//////

//______________________________________________________________________________
void TSpectrumTransform::FilterZonal(const float *source, float *destVector)
{   
////////////////////////////////////////////////////////////////////////////////
//        ONE-DIMENSIONAL FILTER ZONAL FUNCTION                               
//        This function transforms the source spectrum. The calling program  
//        should fill in input parameters. Then it sets transformed          
//        coefficients in the given region (fXmin, fXmax) to the given         
//        fFilterCoeff and transforms it back.
//        Filtered data are written into dest spectrum.                     
//                                                                           
//        Function parameters:                                               
//        source-pointer to the vector of source spectrum, its length should 
//             be size except for inverse FOURIER, FOUR-WALSH, FOUR-HAAR    
//             transform. These need 2*size length to supply real and       
//             imaginary coefficients.                                      
//        destVector-pointer to the vector of dest data, its length should be
//           size except for direct FOURIER, FOUR-WALSH, FOUR-HAAR. These  
//           need 2*size length to store real and imaginary coefficients   
//                                                                          
////////////////////////////////////////////////////////////////////////////////
//       
//Begin_Html <!--
/* -->
<div class=Section2>

<p class=MsoNormal><b><span style='font-size:14.0pt'>Example of zonal filtering</span></b></p>

<p class=MsoNormal><i>&nbsp;</i></p>

<p class=MsoNormal><i>Function:</i></p>

<p class=MsoNormal><b>void TSpectrumTransform::FilterZonal(const <a
href="http://root.cern.ch/root/html/ListOfTypes.html#float">float</a> *fSource,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#float">float</a> *fDest)</b></p>

<p class=MsoNormal style='text-align:justify'>&nbsp;</p>

<p class=MsoNormal style='text-align:justify'>This function transforms the
source spectrum (for details see Transform function). Before the FilterZonal
function is called the class must be created by constructor and the type of the
transform as well as some other parameters must be set using a set of setter
functions. The FilterZonal function sets transformed coefficients in the given
region (fXmin, fXmax) to the given fFilterCoeff and transforms it back.
Filtered data are written into dest spectrum. </p>

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:16.0pt'>&nbsp;</span></i></p>

<p class=MsoNormal style='text-align:justify'><i>Example – script Filter.c:</i></p>

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:16.0pt'><img
border=0 width=601 height=402 src="gif/spectrumtransform_filter_image001.jpg"></span></i></p>

<p class=MsoNormal style='text-align:justify'><b>Fig. 1 Original spectrum
(black line) and filtered spectrum (red line) using Cosine transform and zonal
filtration (channels 2048-4095 were set to 0) </b></p>

<p class=MsoNormal><b><span style='color:#339966'>&nbsp;</span></b></p>

<p class=MsoNormal><b><span style='color:#339966'>Script:</span></b></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// Example to illustrate
FilterZonal function (class TSpectrumTransform).</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// To execute this example,
do</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// root &gt; .x Filter.C</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#include &lt;TSpectrum&gt;</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#include
&lt;TSpectrumTransform&gt;</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>&nbsp;</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>void Filter() {</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Int_t i;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t nbins =
4096;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t xmin  =
0;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t xmax  =
(Double_t)nbins;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   </span><span
style='font-size:10.0pt'>Float_t * source = new float[nbins];</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   Float_t * dest = new
float[nbins];   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TH1F *h = new
TH1F(&quot;h&quot;,&quot;Zonal filtering using Cosine
transform&quot;,nbins,xmin,xmax);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TH1F *d = new
TH1F(&quot;d&quot;,&quot;&quot;,nbins,xmin,xmax);         </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TFile *f = new
TFile(&quot;spectra\\TSpectrum.root&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   h=(TH1F*)
f-&gt;Get(&quot;transform1;1&quot;);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   for (i = 0; i &lt; nbins;
i++) source[i]=h-&gt;GetBinContent(i + 1);     </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TCanvas *Transform1 =
gROOT-&gt;GetListOfCanvases()-&gt;FindObject(&quot;Transform1&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   if (!Transform1)
Transform1 = new
TCanvas(&quot;Transform&quot;,&quot;Transform1&quot;,10,10,1000,700);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>  
h-&gt;SetAxisRange(700,1024);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>  
h-&gt;Draw(&quot;L&quot;);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TSpectrum *s = new
TSpectrum();</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TSpectrumTransform *t =
new TSpectrumTransform(4096);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   </span><span lang=FR
style='font-size:10.0pt'>t-&gt;SetTransformType(t-&gt;kTransformCos,0);</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>  
t-&gt;SetRegion(2048, 4095);</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>  
t-&gt;FilterZonal(source,dest);     </span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   </span><span
style='font-size:10.0pt'>for (i = 0; i &lt; nbins; i++) d-&gt;SetBinContent(i +
1,dest[i]);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>  
d-&gt;SetLineColor(kRed);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   d-&gt;Draw(&quot;SAME
L&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>}</span></p>

</div>

<!-- */
// --> End_Html
   int i, j=0, k = 1, m, l;
   float val;
   float *working_space = 0;
   double a, b, pi = 3.14159265358979323846, old_area, new_area;
   if (fTransformType >= kTransformFourierWalsh && fTransformType <= kTransformSinHaar) {
      if (fTransformType >= kTransformCosWalsh)
         fDegree += 1;
      k = (int) TMath::Power(2, fDegree);
      j = fSize / k;
   }
   switch (fTransformType) {
   case kTransformHaar:
   case kTransformWalsh:
      working_space = new float[2 * fSize];
      break;
   case kTransformCos:
   case kTransformSin:
   case kTransformFourier:
   case kTransformHartley:
   case kTransformFourierWalsh:
   case kTransformFourierHaar:
   case kTransformWalshHaar:
      working_space = new float[4 * fSize];
      break;
   case kTransformCosWalsh:
   case kTransformCosHaar:
   case kTransformSinWalsh:
   case kTransformSinHaar:
      working_space = new float[8 * fSize];
      break;
   }
   switch (fTransformType) {
   case kTransformHaar:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Haar(working_space, fSize, kTransformForward);
      break;
   case kTransformWalsh:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Walsh(working_space, fSize);
      BitReverse(working_space, fSize);
      break;
   case kTransformCos:
      fSize = 2 * fSize;
      for (i = 1; i <= (fSize / 2); i++) {
         val = source[i - 1];
         working_space[i - 1] = val;
         working_space[fSize - i] = val;
      }
      Fourier(working_space, fSize, 0, kTransformForward, 0);
      for (i = 0; i < fSize / 2; i++) {
         a = pi * (double) i / (double) fSize;
         a = TMath::Cos(a);
         b = working_space[i];
         a = b / a;
         working_space[i] = a;
         working_space[i + fSize] = 0;
      } working_space[0] = working_space[0] / TMath::Sqrt(2.0);
      fSize = fSize / 2;
      break;
   case kTransformSin:
      fSize = 2 * fSize;
      for (i = 1; i <= (fSize / 2); i++) {
         val = source[i - 1];
         working_space[i - 1] = val;
         working_space[fSize - i] = -val;
      }
      Fourier(working_space, fSize, 0, kTransformForward, 0);
      for (i = 0; i < fSize / 2; i++) {
         a = pi * (double) i / (double) fSize;
         a = TMath::Sin(a);
         b = working_space[i];
         if (a != 0)
            a = b / a;
         working_space[i - 1] = a;
         working_space[i + fSize] = 0;
      }
      working_space[fSize / 2 - 1] =
          working_space[fSize / 2] / TMath::Sqrt(2.0);
      fSize = fSize / 2;
      break;
   case kTransformFourier:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Fourier(working_space, fSize, 0, kTransformForward, 0);
      break;
   case kTransformHartley:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Fourier(working_space, fSize, 1, kTransformForward, 0);
      break;
   case kTransformFourierWalsh:
   case kTransformFourierHaar:
   case kTransformWalshHaar:
   case kTransformCosWalsh:
   case kTransformCosHaar:
   case kTransformSinWalsh:
   case kTransformSinHaar:
      for (i = 0; i < fSize; i++) {
         val = source[i];
         if (fTransformType == kTransformCosWalsh || fTransformType == kTransformCosHaar) {
            j = (int) TMath::Power(2, fDegree) / 2;
            k = i / j;
            k = 2 * k * j;
            working_space[k + i % j] = val;
            working_space[k + 2 * j - 1 - i % j] = val;
         }
         
         else if (fTransformType == kTransformSinWalsh
                  || fTransformType == kTransformSinHaar) {
            j = (int) TMath::Power(2, fDegree) / 2;
            k = i / j;
            k = 2 * k * j;
            working_space[k + i % j] = val;
            working_space[k + 2 * j - 1 - i % j] = -val;
         }
         
         else
            working_space[i] = val;
      }
      if (fTransformType == kTransformFourierWalsh
           || fTransformType == kTransformFourierHaar
           || fTransformType == kTransformWalshHaar) {
         for (i = 0; i < j; i++)
            BitReverseHaar(working_space, fSize, k, i * k);
         GeneralExe(working_space, 0, fSize, fDegree, fTransformType);
      }
      
      else if (fTransformType == kTransformCosWalsh || fTransformType == kTransformCosHaar) {
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
         GeneralExe(working_space, 0, 2 * fSize, fDegree, fTransformType);
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            a = TMath::Cos(a);
            b = working_space[k + i % j];
            if (i % j == 0)
               a = b / TMath::Sqrt(2.0);
            
            else
               a = b / a;
            working_space[i] = a;
            working_space[i + 2 * fSize] = 0;
         }
      }
      
      else if (fTransformType == kTransformSinWalsh || fTransformType == kTransformSinHaar) {
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
         GeneralExe(working_space, 0, 2 * fSize, fDegree, fTransformType);
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            a = TMath::Cos(a);
            b = working_space[j + k + i % j];
            if (i % j == 0)
               a = b / TMath::Sqrt(2.0);
            
            else
               a = b / a;
            working_space[j + k / 2 - i % j - 1] = a;
            working_space[i + 2 * fSize] = 0;
         }
      }
      if (fTransformType > kTransformWalshHaar)
         k = (int) TMath::Power(2, fDegree - 1);
      
      else
         k = (int) TMath::Power(2, fDegree);
      j = fSize / k;
      for (i = 0, l = 0; i < fSize; i++, l = (l + k) % fSize) {
         working_space[fSize + i] = working_space[l + i / j];
         working_space[fSize + i + 2 * fSize] =
             working_space[l + i / j + 2 * fSize];
      }
      for (i = 0; i < fSize; i++) {
         working_space[i] = working_space[fSize + i];
         working_space[i + 2 * fSize] = working_space[fSize + i + 2 * fSize];
      }
      break;
   }
   if (!working_space) return;
   for (i = 0, old_area = 0; i < fSize; i++) {
      old_area += working_space[i];
   }
   for (i = 0, new_area = 0; i < fSize; i++) {
      if (i >= fXmin && i <= fXmax)
         working_space[i] = fFilterCoeff;
      new_area += working_space[i];
   }
   if (new_area != 0) {
      a = old_area / new_area;
      for (i = 0; i < fSize; i++) {
         working_space[i] *= a;
      }
   }
   if (fTransformType == kTransformFourier) {
      for (i = 0, old_area = 0; i < fSize; i++) {
         old_area += working_space[i + fSize];
      }
      for (i = 0, new_area = 0; i < fSize; i++) {
         if (i >= fXmin && i <= fXmax)
            working_space[i + fSize] = fFilterCoeff;
         new_area += working_space[i + fSize];
      }
      if (new_area != 0) {
         a = old_area / new_area;
         for (i = 0; i < fSize; i++) {
            working_space[i + fSize] *= a;
         }
      }
   }
   
   else if (fTransformType == kTransformFourierWalsh
            || fTransformType == kTransformFourierHaar) {
      for (i = 0, old_area = 0; i < fSize; i++) {
         old_area += working_space[i + 2 * fSize];
      }
      for (i = 0, new_area = 0; i < fSize; i++) {
         if (i >= fXmin && i <= fXmax)
            working_space[i + 2 * fSize] = fFilterCoeff;
         new_area += working_space[i + 2 * fSize];
      }
      if (new_area != 0) {
         a = old_area / new_area;
         for (i = 0; i < fSize; i++) {
            working_space[i + 2 * fSize] *= a;
         }
      }
   }
   switch (fTransformType) {
   case kTransformHaar:
      Haar(working_space, fSize, kTransformInverse);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformWalsh:
      BitReverse(working_space, fSize);
      Walsh(working_space, fSize);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformCos:
      fSize = 2 * fSize;
      working_space[0] = working_space[0] * TMath::Sqrt(2.0);
      for (i = 0; i < fSize / 2; i++) {
         a = pi * (double) i / (double) fSize;
         b = TMath::Sin(a);
         a = TMath::Cos(a);
         working_space[i + fSize] = (double) working_space[i] * b;
         working_space[i] = (double) working_space[i] * a;
      } for (i = 2; i <= (fSize / 2); i++) {
         working_space[fSize - i + 1] = working_space[i - 1];
         working_space[fSize - i + 1 + fSize] =
             -working_space[i - 1 + fSize];
      }
      working_space[fSize / 2] = 0;
      working_space[fSize / 2 + fSize] = 0;
      Fourier(working_space, fSize, 0, kTransformInverse, 1);
      for (i = 0; i < fSize / 2; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformSin:
      fSize = 2 * fSize;
      working_space[fSize / 2] =
          working_space[fSize / 2 - 1] * TMath::Sqrt(2.0);
      for (i = fSize / 2 - 1; i > 0; i--) {
         a = pi * (double) i / (double) fSize;
         working_space[i + fSize] =
             -(double) working_space[i - 1] * TMath::Cos(a);
         working_space[i] = (double) working_space[i - 1] * TMath::Sin(a);
      } for (i = 2; i <= (fSize / 2); i++) {
         working_space[fSize - i + 1] = working_space[i - 1];
         working_space[fSize - i + 1 + fSize] =
             -working_space[i - 1 + fSize];
      }
      working_space[0] = 0;
      working_space[fSize] = 0;
      working_space[fSize / 2 + fSize] = 0;
      Fourier(working_space, fSize, 0, kTransformInverse, 0);
      for (i = 0; i < fSize / 2; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformFourier:
      Fourier(working_space, fSize, 0, kTransformInverse, 0);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformHartley:
      Fourier(working_space, fSize, 1, kTransformInverse, 0);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformFourierWalsh:
   case kTransformFourierHaar:
   case kTransformWalshHaar:
   case kTransformCosWalsh:
   case kTransformCosHaar:
   case kTransformSinWalsh:
   case kTransformSinHaar:
      if (fTransformType > kTransformWalshHaar)
         k = (int) TMath::Power(2, fDegree - 1);
      
      else
         k = (int) TMath::Power(2, fDegree);
      j = fSize / k;
      for (i = 0, l = 0; i < fSize; i++, l = (l + k) % fSize) {
         working_space[fSize + l + i / j] = working_space[i];
         working_space[fSize + l + i / j + 2 * fSize] =
             working_space[i + 2 * fSize];
      }
      for (i = 0; i < fSize; i++) {
         working_space[i] = working_space[fSize + i];
         working_space[i + 2 * fSize] = working_space[fSize + i + 2 * fSize];
      }
      if (fTransformType == kTransformFourierWalsh
           || fTransformType == kTransformFourierHaar
           || fTransformType == kTransformWalshHaar) {
         GeneralInv(working_space, fSize, fDegree, fTransformType);
         for (i = 0; i < j; i++)
            BitReverseHaar(working_space, fSize, k, i * k);
      }
      
      else if (fTransformType == kTransformCosWalsh || fTransformType == kTransformCosHaar) {
         j = (int) TMath::Power(2, fDegree) / 2;
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            if (i % j == 0) {
               working_space[2 * fSize + k + i % j] =
                   working_space[i] * TMath::Sqrt(2.0);
               working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
            }
            
            else {
               b = TMath::Sin(a);
               a = TMath::Cos(a);
               working_space[4 * fSize + 2 * fSize + k + i % j] =
                   -(double) working_space[i] * b;
               working_space[2 * fSize + k + i % j] =
                   (double) working_space[i] * a;
         } } for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            if (i % j == 0) {
               working_space[2 * fSize + k + j] = 0;
               working_space[4 * fSize + 2 * fSize + k + j] = 0;
            }
            
            else {
               working_space[2 * fSize + k + 2 * j - i % j] =
                   working_space[2 * fSize + k + i % j];
               working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
                   -working_space[4 * fSize + 2 * fSize + k + i % j];
            }
         }
         for (i = 0; i < 2 * fSize; i++) {
            working_space[i] = working_space[2 * fSize + i];
            working_space[4 * fSize + i] =
                working_space[4 * fSize + 2 * fSize + i];
         }
         GeneralInv(working_space, 2 * fSize, fDegree, fTransformType);
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
      }
      
      else if (fTransformType == kTransformSinWalsh || fTransformType == kTransformSinHaar) {
         j = (int) TMath::Power(2, fDegree) / 2;
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            if (i % j == 0) {
               working_space[2 * fSize + k + j + i % j] =
                   working_space[j + k / 2 - i % j - 1] * TMath::Sqrt(2.0);
               working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
            }
            
            else {
               b = TMath::Sin(a);
               a = TMath::Cos(a);
               working_space[4 * fSize + 2 * fSize + k + j + i % j] =
                   -(double) working_space[j + k / 2 - i % j - 1] * b;
               working_space[2 * fSize + k + j + i % j] =
                   (double) working_space[j + k / 2 - i % j - 1] * a;
         } } for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            if (i % j == 0) {
               working_space[2 * fSize + k] = 0;
               working_space[4 * fSize + 2 * fSize + k] = 0;
            }
            
            else {
               working_space[2 * fSize + k + i % j] =
                   working_space[2 * fSize + k + 2 * j - i % j];
               working_space[4 * fSize + 2 * fSize + k + i % j] =
                   -working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j];
            }
         }
         for (i = 0; i < 2 * fSize; i++) {
            working_space[i] = working_space[2 * fSize + i];
            working_space[4 * fSize + i] =
                working_space[4 * fSize + 2 * fSize + i];
         }
         GeneralInv(working_space, 2 * fSize, fDegree, fTransformType);
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
      }
      for (i = 0; i < fSize; i++) {
         if (fTransformType >= kTransformCosWalsh) {
            k = i / j;
            k = 2 * k * j;
            val = working_space[k + i % j];
         }
         
         else
            val = working_space[i];
         destVector[i] = val;
      }
      break;
   }
   delete[]working_space;
   return;
}

//////////ENHANCE FUNCTION - CALCULATES DIFFERENT 1-D ORTHOGONAL TRANSFORMS, MULTIPLIES GIVEN REGION BY ENHANCE COEFFICIENT AND TRANSFORMS IT BACK//////
//___________________________________________________________________________
void TSpectrumTransform::Enhance(const float *source, float *destVector) 
{   
////////////////////////////////////////////////////////////////////////////////
//        ONE-DIMENSIONAL ENHANCE ZONAL FUNCTION                             
//        This function transforms the source spectrum. The calling program  
//      should fill in input parameters. Then it multiplies transformed      
//      coefficients in the given region (fXmin, fXmax) by the given          
//      fEnhanceCoeff and transforms it back                                   
//        Processed data are written into dest spectrum.                      
//                                                                            
//        Function parameters:                                                
//        source-pointer to the vector of source spectrum, its length should  
//             be size except for inverse FOURIER, FOUR-WALSh, FOUR-HAAR      
//             transform. These need 2*size length to supply real and         
//             imaginary coefficients.                                        
//        destVector-pointer to the vector of dest data, its length should be 
//           size except for direct FOURIER, FOUR-WALSh, FOUR-HAAR. These     
//           need 2*size length to store real and imaginary coefficients      
//                                                                           
////////////////////////////////////////////////////////////////////////////////
//Begin_Html <!--
/* -->
<div class=Section3>

<p class=MsoNormal><b><span style='font-size:14.0pt'>Example of enhancement</span></b></p>

<p class=MsoNormal><i>&nbsp;</i></p>

<p class=MsoNormal><i>Function:</i></p>

<p class=MsoNormal><b>void TSpectrumTransform::Enhance(const <a
href="http://root.cern.ch/root/html/ListOfTypes.html#float">float</a> *fSource,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#float">float</a>
*fDest)</b></p>

<p class=MsoNormal><b>&nbsp;</b></p>

<p class=MsoNormal style='text-align:justify'>This function transforms the
source spectrum (for details see Transform function). Before the Enhance
function is called the class must be created by constructor and the type of the
transform as well as some other parameters must be set using a set of setter functions.
The Enhance function multiplies transformed coefficients in the given region
(fXmin, fXmax) by the given fEnhancCoeff and transforms it back. Enhanced data
are written into dest spectrum.</p>

<p class=MsoNormal>&nbsp;</p>

<p class=MsoNormal style='text-align:justify'><i>Example  – script Enhance.c:</i></p>

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:16.0pt'><img
border=0 width=601 height=402 src="gif/spectrumtransform_enhance_image001.jpg"></span></i></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:18.0pt'>&nbsp;</span></p>

<p class=MsoNormal style='text-align:justify'><b>Fig. 1 Original spectrum (black
line) and enhanced spectrum (red line) using Cosine transform (channels 0-1024
were multiplied by 2) </b></p>

<p class=MsoNormal><b><span style='color:#339966'>&nbsp;</span></b></p>

<p class=MsoNormal><b><span style='color:#339966'>Script:</span></b></p>

<p class=MsoNormal>&nbsp;</p>

<p class=MsoNormal><span style='font-size:10.0pt'>// Example to illustrate
Enhance function (class TSpectrumTransform).</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// To execute this example,
do</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>// root &gt; .x Enhance.C</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>&nbsp;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>void Enhance() {</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Int_t i;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t nbins =
4096;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t xmin  =
0;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   Double_t xmax  =
(Double_t)nbins;</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   </span><span
style='font-size:10.0pt'>Float_t * source = new float[nbins];</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   Float_t * dest = new
float[nbins];   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TH1F *h = new
TH1F(&quot;h&quot;,&quot;Enhancement using Cosine transform&quot;,nbins,xmin,xmax);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TH1F *d = new
TH1F(&quot;d&quot;,&quot;&quot;,nbins,xmin,xmax);         </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TFile *f = new
TFile(&quot;spectra\\TSpectrum.root&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   h=(TH1F*)
f-&gt;Get(&quot;transform1;1&quot;);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   for (i = 0; i &lt; nbins;
i++) source[i]=h-&gt;GetBinContent(i + 1);     </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TCanvas *Transform1 = gROOT-&gt;GetListOfCanvases()-&gt;FindObject(&quot;Transform1&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   if (!Transform1)
Transform1 = new
TCanvas(&quot;Transform&quot;,&quot;Transform1&quot;,10,10,1000,700);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>  
h-&gt;SetAxisRange(700,1024);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>  
h-&gt;Draw(&quot;L&quot;);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TSpectrum *s = new
TSpectrum();</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   TSpectrumTransform *t =
new TSpectrumTransform(4096);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   </span><span lang=FR
style='font-size:10.0pt'>t-&gt;SetTransformType(t-&gt;kTransformCos,0);</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   t-&gt;SetRegion(0,
1024);</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>  
t-&gt;SetEnhanceCoeff(2);</span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>  
t-&gt;Enhance(source,dest);        </span></p>

<p class=MsoNormal><span lang=FR style='font-size:10.0pt'>   </span><span
style='font-size:10.0pt'>for (i = 0; i &lt; nbins; i++) d-&gt;SetBinContent(i +
1,dest[i]);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>  
d-&gt;SetLineColor(kRed);   </span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>   d-&gt;Draw(&quot;SAME
L&quot;);</span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>}</span></p>

</div>

<!-- */
// --> End_Html
   int i, j=0, k = 1, m, l;
   float val;
   float *working_space = 0;
   double a, b, pi = 3.14159265358979323846, old_area, new_area;
   if (fTransformType >= kTransformFourierWalsh && fTransformType <= kTransformSinHaar) {
      if (fTransformType >= kTransformCosWalsh)
         fDegree += 1;
      k = (int) TMath::Power(2, fDegree);
      j = fSize / k;
   }
   switch (fTransformType) {
   case kTransformHaar:
   case kTransformWalsh:
      working_space = new float[2 * fSize];
      break;
   case kTransformCos:
   case kTransformSin:
   case kTransformFourier:
   case kTransformHartley:
   case kTransformFourierWalsh:
   case kTransformFourierHaar:
   case kTransformWalshHaar:
      working_space = new float[4 * fSize];
      break;
   case kTransformCosWalsh:
   case kTransformCosHaar:
   case kTransformSinWalsh:
   case kTransformSinHaar:
      working_space = new float[8 * fSize];
      break;
   }
   switch (fTransformType) {
   case kTransformHaar:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Haar(working_space, fSize, kTransformForward);
      break;
   case kTransformWalsh:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Walsh(working_space, fSize);
      BitReverse(working_space, fSize);
      break;
   case kTransformCos:
      fSize = 2 * fSize;
      for (i = 1; i <= (fSize / 2); i++) {
         val = source[i - 1];
         working_space[i - 1] = val;
         working_space[fSize - i] = val;
      }
      Fourier(working_space, fSize, 0, kTransformForward, 0);
      for (i = 0; i < fSize / 2; i++) {
         a = pi * (double) i / (double) fSize;
         a = TMath::Cos(a);
         b = working_space[i];
         a = b / a;
         working_space[i] = a;
         working_space[i + fSize] = 0;
      } working_space[0] = working_space[0] / TMath::Sqrt(2.0);
      fSize = fSize / 2;
      break;
   case kTransformSin:
      fSize = 2 * fSize;
      for (i = 1; i <= (fSize / 2); i++) {
         val = source[i - 1];
         working_space[i - 1] = val;
         working_space[fSize - i] = -val;
      }
      Fourier(working_space, fSize, 0, kTransformForward, 0);
      for (i = 0; i < fSize / 2; i++) {
         a = pi * (double) i / (double) fSize;
         a = TMath::Sin(a);
         b = working_space[i];
         if (a != 0)
            a = b / a;
         working_space[i - 1] = a;
         working_space[i + fSize] = 0;
      }
      working_space[fSize / 2 - 1] =
          working_space[fSize / 2] / TMath::Sqrt(2.0);
      fSize = fSize / 2;
      break;
   case kTransformFourier:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Fourier(working_space, fSize, 0, kTransformForward, 0);
      break;
   case kTransformHartley:
      for (i = 0; i < fSize; i++) {
         working_space[i] = source[i];
      }
      Fourier(working_space, fSize, 1, kTransformForward, 0);
      break;
   case kTransformFourierWalsh:
   case kTransformFourierHaar:
   case kTransformWalshHaar:
   case kTransformCosWalsh:
   case kTransformCosHaar:
   case kTransformSinWalsh:
   case kTransformSinHaar:
      for (i = 0; i < fSize; i++) {
         val = source[i];
         if (fTransformType == kTransformCosWalsh || fTransformType == kTransformCosHaar) {
            j = (int) TMath::Power(2, fDegree) / 2;
            k = i / j;
            k = 2 * k * j;
            working_space[k + i % j] = val;
            working_space[k + 2 * j - 1 - i % j] = val;
         }
         
         else if (fTransformType == kTransformSinWalsh
                  || fTransformType == kTransformSinHaar) {
            j = (int) TMath::Power(2, fDegree) / 2;
            k = i / j;
            k = 2 * k * j;
            working_space[k + i % j] = val;
            working_space[k + 2 * j - 1 - i % j] = -val;
         }
         
         else
            working_space[i] = val;
      }
      if (fTransformType == kTransformFourierWalsh
           || fTransformType == kTransformFourierHaar
           || fTransformType == kTransformWalshHaar) {
         for (i = 0; i < j; i++)
            BitReverseHaar(working_space, fSize, k, i * k);
         GeneralExe(working_space, 0, fSize, fDegree, fTransformType);
      }
      
      else if (fTransformType == kTransformCosWalsh || fTransformType == kTransformCosHaar) {
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
         GeneralExe(working_space, 0, 2 * fSize, fDegree, fTransformType);
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            a = TMath::Cos(a);
            b = working_space[k + i % j];
            if (i % j == 0)
               a = b / TMath::Sqrt(2.0);
            
            else
               a = b / a;
            working_space[i] = a;
            working_space[i + 2 * fSize] = 0;
         }
      }
      
      else if (fTransformType == kTransformSinWalsh || fTransformType == kTransformSinHaar) {
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
         GeneralExe(working_space, 0, 2 * fSize, fDegree, fTransformType);
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            a = TMath::Cos(a);
            b = working_space[j + k + i % j];
            if (i % j == 0)
               a = b / TMath::Sqrt(2.0);
            
            else
               a = b / a;
            working_space[j + k / 2 - i % j - 1] = a;
            working_space[i + 2 * fSize] = 0;
         }
      }
      if (fTransformType > kTransformWalshHaar)
         k = (int) TMath::Power(2, fDegree - 1);
      
      else
         k = (int) TMath::Power(2, fDegree);
      j = fSize / k;
      for (i = 0, l = 0; i < fSize; i++, l = (l + k) % fSize) {
         working_space[fSize + i] = working_space[l + i / j];
         working_space[fSize + i + 2 * fSize] =
             working_space[l + i / j + 2 * fSize];
      }
      for (i = 0; i < fSize; i++) {
         working_space[i] = working_space[fSize + i];
         working_space[i + 2 * fSize] = working_space[fSize + i + 2 * fSize];
      }
      break;
   }
   if (!working_space) return;
   for (i = 0, old_area = 0; i < fSize; i++) {
      old_area += working_space[i];
   }
   for (i = 0, new_area = 0; i < fSize; i++) {
      if (i >= fXmin && i <= fXmax)
         working_space[i] *= fEnhanceCoeff;
      new_area += working_space[i];
   }
   if (new_area != 0) {
      a = old_area / new_area;
      for (i = 0; i < fSize; i++) {
         working_space[i] *= a;
      }
   }
   if (fTransformType == kTransformFourier) {
      for (i = 0, old_area = 0; i < fSize; i++) {
         old_area += working_space[i + fSize];
      }
      for (i = 0, new_area = 0; i < fSize; i++) {
         if (i >= fXmin && i <= fXmax)
            working_space[i + fSize] *= fEnhanceCoeff;
         new_area += working_space[i + fSize];
      }
      if (new_area != 0) {
         a = old_area / new_area;
         for (i = 0; i < fSize; i++) {
            working_space[i + fSize] *= a;
         }
      }
   }
   
   else if (fTransformType == kTransformFourierWalsh
            || fTransformType == kTransformFourierHaar) {
      for (i = 0, old_area = 0; i < fSize; i++) {
         old_area += working_space[i + 2 * fSize];
      }
      for (i = 0, new_area = 0; i < fSize; i++) {
         if (i >= fXmin && i <= fXmax)
            working_space[i + 2 * fSize] *= fEnhanceCoeff;
         new_area += working_space[i + 2 * fSize];
      }
      if (new_area != 0) {
         a = old_area / new_area;
         for (i = 0; i < fSize; i++) {
            working_space[i + 2 * fSize] *= a;
         }
      }
   }
   switch (fTransformType) {
   case kTransformHaar:
      Haar(working_space, fSize, kTransformInverse);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformWalsh:
      BitReverse(working_space, fSize);
      Walsh(working_space, fSize);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformCos:
      fSize = 2 * fSize;
      working_space[0] = working_space[0] * TMath::Sqrt(2.0);
      for (i = 0; i < fSize / 2; i++) {
         a = pi * (double) i / (double) fSize;
         b = TMath::Sin(a);
         a = TMath::Cos(a);
         working_space[i + fSize] = (double) working_space[i] * b;
         working_space[i] = (double) working_space[i] * a;
      } for (i = 2; i <= (fSize / 2); i++) {
         working_space[fSize - i + 1] = working_space[i - 1];
         working_space[fSize - i + 1 + fSize] =
             -working_space[i - 1 + fSize];
      }
      working_space[fSize / 2] = 0;
      working_space[fSize / 2 + fSize] = 0;
      Fourier(working_space, fSize, 0, kTransformInverse, 1);
      for (i = 0; i < fSize / 2; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformSin:
      fSize = 2 * fSize;
      working_space[fSize / 2] =
          working_space[fSize / 2 - 1] * TMath::Sqrt(2.0);
      for (i = fSize / 2 - 1; i > 0; i--) {
         a = pi * (double) i / (double) fSize;
         working_space[i + fSize] =
             -(double) working_space[i - 1] * TMath::Cos(a);
         working_space[i] = (double) working_space[i - 1] * TMath::Sin(a);
      } for (i = 2; i <= (fSize / 2); i++) {
         working_space[fSize - i + 1] = working_space[i - 1];
         working_space[fSize - i + 1 + fSize] =
             -working_space[i - 1 + fSize];
      }
      working_space[0] = 0;
      working_space[fSize] = 0;
      working_space[fSize / 2 + fSize] = 0;
      Fourier(working_space, fSize, 0, kTransformInverse, 0);
      for (i = 0; i < fSize / 2; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformFourier:
      Fourier(working_space, fSize, 0, kTransformInverse, 0);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformHartley:
      Fourier(working_space, fSize, 1, kTransformInverse, 0);
      for (i = 0; i < fSize; i++) {
         destVector[i] = working_space[i];
      }
      break;
   case kTransformFourierWalsh:
   case kTransformFourierHaar:
   case kTransformWalshHaar:
   case kTransformCosWalsh:
   case kTransformCosHaar:
   case kTransformSinWalsh:
   case kTransformSinHaar:
      if (fTransformType > kTransformWalshHaar)
         k = (int) TMath::Power(2, fDegree - 1);
      
      else
         k = (int) TMath::Power(2, fDegree);
      j = fSize / k;
      for (i = 0, l = 0; i < fSize; i++, l = (l + k) % fSize) {
         working_space[fSize + l + i / j] = working_space[i];
         working_space[fSize + l + i / j + 2 * fSize] =
             working_space[i + 2 * fSize];
      }
      for (i = 0; i < fSize; i++) {
         working_space[i] = working_space[fSize + i];
         working_space[i + 2 * fSize] = working_space[fSize + i + 2 * fSize];
      }
      if (fTransformType == kTransformFourierWalsh
           || fTransformType == kTransformFourierHaar
           || fTransformType == kTransformWalshHaar) {
         GeneralInv(working_space, fSize, fDegree, fTransformType);
         for (i = 0; i < j; i++)
            BitReverseHaar(working_space, fSize, k, i * k);
      }
      
      else if (fTransformType == kTransformCosWalsh || fTransformType == kTransformCosHaar) {
         j = (int) TMath::Power(2, fDegree) / 2;
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            if (i % j == 0) {
               working_space[2 * fSize + k + i % j] =
                   working_space[i] * TMath::Sqrt(2.0);
               working_space[4 * fSize + 2 * fSize + k + i % j] = 0;
            }
            
            else {
               b = TMath::Sin(a);
               a = TMath::Cos(a);
               working_space[4 * fSize + 2 * fSize + k + i % j] =
                   -(double) working_space[i] * b;
               working_space[2 * fSize + k + i % j] =
                   (double) working_space[i] * a;
         } } for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            if (i % j == 0) {
               working_space[2 * fSize + k + j] = 0;
               working_space[4 * fSize + 2 * fSize + k + j] = 0;
            }
            
            else {
               working_space[2 * fSize + k + 2 * j - i % j] =
                   working_space[2 * fSize + k + i % j];
               working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j] =
                   -working_space[4 * fSize + 2 * fSize + k + i % j];
            }
         }
         for (i = 0; i < 2 * fSize; i++) {
            working_space[i] = working_space[2 * fSize + i];
            working_space[4 * fSize + i] =
                working_space[4 * fSize + 2 * fSize + i];
         }
         GeneralInv(working_space, 2 * fSize, fDegree, fTransformType);
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
      }
      
      else if (fTransformType == kTransformSinWalsh || fTransformType == kTransformSinHaar) {
         j = (int) TMath::Power(2, fDegree) / 2;
         m = (int) TMath::Power(2, fDegree);
         l = 2 * fSize / m;
         for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            a = pi * (double) (i % j) / (double) (2 * j);
            if (i % j == 0) {
               working_space[2 * fSize + k + j + i % j] =
                   working_space[j + k / 2 - i % j - 1] * TMath::Sqrt(2.0);
               working_space[4 * fSize + 2 * fSize + k + j + i % j] = 0;
            }
            
            else {
               b = TMath::Sin(a);
               a = TMath::Cos(a);
               working_space[4 * fSize + 2 * fSize + k + j + i % j] =
                   -(double) working_space[j + k / 2 - i % j - 1] * b;
               working_space[2 * fSize + k + j + i % j] =
                   (double) working_space[j + k / 2 - i % j - 1] * a;
         } } for (i = 0; i < fSize; i++) {
            k = i / j;
            k = 2 * k * j;
            if (i % j == 0) {
               working_space[2 * fSize + k] = 0;
               working_space[4 * fSize + 2 * fSize + k] = 0;
            }
            
            else {
               working_space[2 * fSize + k + i % j] =
                   working_space[2 * fSize + k + 2 * j - i % j];
               working_space[4 * fSize + 2 * fSize + k + i % j] =
                   -working_space[4 * fSize + 2 * fSize + k + 2 * j - i % j];
            }
         }
         for (i = 0; i < 2 * fSize; i++) {
            working_space[i] = working_space[2 * fSize + i];
            working_space[4 * fSize + i] =
                working_space[4 * fSize + 2 * fSize + i];
         }
         GeneralInv(working_space, 2 * fSize, fDegree, fTransformType);
         for (i = 0; i < l; i++)
            BitReverseHaar(working_space, 2 * fSize, m, i * m);
      }
      for (i = 0; i < fSize; i++) {
         if (fTransformType >= kTransformCosWalsh) {
            k = i / j;
            k = 2 * k * j;
            val = working_space[k + i % j];
         }
         
         else
            val = working_space[i];
         destVector[i] = val;
      }
      break;
   }
   delete[]working_space;
   return;
}

//___________________________________________________________________________
void TSpectrumTransform::SetTransformType(Int_t transType, Int_t degree)
{
//////////////////////////////////////////////////////////////////////////////
//   SETTER FUNCION                                                      
//                                                     
//   This function sets the following parameters for transform:
//         -transType - type of transform (Haar, Walsh, Cosine, Sine, Fourier, Hartley, Fourier-Walsh, Fourier-Haar, Walsh-Haar, Cosine-Walsh, Cosine-Haar, Sine-Walsh, Sine-Haar)
//         -degree - degree of mixed transform, applies only for Fourier-Walsh, Fourier-Haar, Walsh-Haar, Cosine-Walsh, Cosine-Haar, Sine-Walsh, Sine-Haar transforms
//////////////////////////////////////////////////////////////////////////////      
   Int_t j, n;
   j = 0;
   n = 1;
   for (; n < fSize;) {
      j += 1;
      n = n * 2;
   } 
   if (transType < kTransformHaar || transType > kTransformSinHaar){
      Error ("TSpectrumTransform","Invalid type of transform");
      return;       
   }
   if (transType >= kTransformFourierWalsh && transType <= kTransformSinHaar) {
      if (degree > j || degree < 1){
         Error ("TSpectrumTransform","Invalid degree of mixed transform");
         return;          
      }
   }
   fTransformType=transType;
   fDegree=degree;
}


//___________________________________________________________________________
void TSpectrumTransform::SetRegion(Int_t xmin, Int_t xmax)
{
//////////////////////////////////////////////////////////////////////////////
//   SETTER FUNCION                                                      
//                                                     
//   This function sets the filtering or enhancement region:
//         -xmin, xmax
//////////////////////////////////////////////////////////////////////////////         
   if(xmin<0 || xmax < xmin || xmax >= fSize){ 
      Error("TSpectrumTransform", "Wrong range");      
      return;
   }         
   fXmin = xmin;
   fXmax = xmax;
}

//___________________________________________________________________________
void TSpectrumTransform::SetDirection(Int_t direction)
{
//////////////////////////////////////////////////////////////////////////////
//   SETTER FUNCION                                                      
//                                                     
//   This function sets the direction of the transform:
//         -direction (forward or inverse)
//////////////////////////////////////////////////////////////////////////////   
   if(direction != kTransformForward && direction != kTransformInverse){ 
      Error("TSpectrumTransform", "Wrong direction");      
      return;
   }         
   fDirection = direction;
}

//___________________________________________________________________________
void TSpectrumTransform::SetFilterCoeff(Float_t filterCoeff)
{
//////////////////////////////////////////////////////////////////////////////
//   SETTER FUNCION                                                      
//                                                     
//   This function sets the filter coefficient:
//         -filterCoeff - after the transform the filtered region (xmin, xmax) is replaced by this coefficient. Applies only for filtereng operation.
//////////////////////////////////////////////////////////////////////////////   
   fFilterCoeff = filterCoeff;
}

//___________________________________________________________________________
void TSpectrumTransform::SetEnhanceCoeff(Float_t enhanceCoeff)
{
//////////////////////////////////////////////////////////////////////////////
//   SETTER FUNCION                                                      
//                                                     
//   This function sets the enhancement coefficient:
//         -enhanceCoeff - after the transform the enhanced region (xmin, xmax) is multiplied by this coefficient. Applies only for enhancement operation.
//////////////////////////////////////////////////////////////////////////////   
   fEnhanceCoeff = enhanceCoeff;
}
 TSpectrumTransform.cxx:1
 TSpectrumTransform.cxx:2
 TSpectrumTransform.cxx:3
 TSpectrumTransform.cxx:4
 TSpectrumTransform.cxx:5
 TSpectrumTransform.cxx:6
 TSpectrumTransform.cxx:7
 TSpectrumTransform.cxx:8
 TSpectrumTransform.cxx:9
 TSpectrumTransform.cxx:10
 TSpectrumTransform.cxx:11
 TSpectrumTransform.cxx:12
 TSpectrumTransform.cxx:13
 TSpectrumTransform.cxx:14
 TSpectrumTransform.cxx:15
 TSpectrumTransform.cxx:16
 TSpectrumTransform.cxx:17
 TSpectrumTransform.cxx:18
 TSpectrumTransform.cxx:19
 TSpectrumTransform.cxx:20
 TSpectrumTransform.cxx:21
 TSpectrumTransform.cxx:22
 TSpectrumTransform.cxx:23
 TSpectrumTransform.cxx:24
 TSpectrumTransform.cxx:25
 TSpectrumTransform.cxx:26
 TSpectrumTransform.cxx:27
 TSpectrumTransform.cxx:28
 TSpectrumTransform.cxx:29
 TSpectrumTransform.cxx:30
 TSpectrumTransform.cxx:31
 TSpectrumTransform.cxx:32
 TSpectrumTransform.cxx:33
 TSpectrumTransform.cxx:34
 TSpectrumTransform.cxx:35
 TSpectrumTransform.cxx:36
 TSpectrumTransform.cxx:37
 TSpectrumTransform.cxx:38
 TSpectrumTransform.cxx:39
 TSpectrumTransform.cxx:40
 TSpectrumTransform.cxx:41
 TSpectrumTransform.cxx:42
 TSpectrumTransform.cxx:43
 TSpectrumTransform.cxx:44
 TSpectrumTransform.cxx:45
 TSpectrumTransform.cxx:46
 TSpectrumTransform.cxx:47
 TSpectrumTransform.cxx:48
 TSpectrumTransform.cxx:49
 TSpectrumTransform.cxx:50
 TSpectrumTransform.cxx:51
 TSpectrumTransform.cxx:52
 TSpectrumTransform.cxx:53
 TSpectrumTransform.cxx:54
 TSpectrumTransform.cxx:55
 TSpectrumTransform.cxx:56
 TSpectrumTransform.cxx:57
 TSpectrumTransform.cxx:58
 TSpectrumTransform.cxx:59
 TSpectrumTransform.cxx:60
 TSpectrumTransform.cxx:61
 TSpectrumTransform.cxx:62
 TSpectrumTransform.cxx:63
 TSpectrumTransform.cxx:64
 TSpectrumTransform.cxx:65
 TSpectrumTransform.cxx:66
 TSpectrumTransform.cxx:67
 TSpectrumTransform.cxx:68
 TSpectrumTransform.cxx:69
 TSpectrumTransform.cxx:70
 TSpectrumTransform.cxx:71
 TSpectrumTransform.cxx:72
 TSpectrumTransform.cxx:73
 TSpectrumTransform.cxx:74
 TSpectrumTransform.cxx:75
 TSpectrumTransform.cxx:76
 TSpectrumTransform.cxx:77
 TSpectrumTransform.cxx:78
 TSpectrumTransform.cxx:79
 TSpectrumTransform.cxx:80
 TSpectrumTransform.cxx:81
 TSpectrumTransform.cxx:82
 TSpectrumTransform.cxx:83
 TSpectrumTransform.cxx:84
 TSpectrumTransform.cxx:85
 TSpectrumTransform.cxx:86
 TSpectrumTransform.cxx:87
 TSpectrumTransform.cxx:88
 TSpectrumTransform.cxx:89
 TSpectrumTransform.cxx:90
 TSpectrumTransform.cxx:91
 TSpectrumTransform.cxx:92
 TSpectrumTransform.cxx:93
 TSpectrumTransform.cxx:94
 TSpectrumTransform.cxx:95
 TSpectrumTransform.cxx:96
 TSpectrumTransform.cxx:97
 TSpectrumTransform.cxx:98
 TSpectrumTransform.cxx:99
 TSpectrumTransform.cxx:100
 TSpectrumTransform.cxx:101
 TSpectrumTransform.cxx:102
 TSpectrumTransform.cxx:103
 TSpectrumTransform.cxx:104
 TSpectrumTransform.cxx:105
 TSpectrumTransform.cxx:106
 TSpectrumTransform.cxx:107
 TSpectrumTransform.cxx:108
 TSpectrumTransform.cxx:109
 TSpectrumTransform.cxx:110
 TSpectrumTransform.cxx:111
 TSpectrumTransform.cxx:112
 TSpectrumTransform.cxx:113
 TSpectrumTransform.cxx:114
 TSpectrumTransform.cxx:115
 TSpectrumTransform.cxx:116
 TSpectrumTransform.cxx:117
 TSpectrumTransform.cxx:118
 TSpectrumTransform.cxx:119
 TSpectrumTransform.cxx:120
 TSpectrumTransform.cxx:121
 TSpectrumTransform.cxx:122
 TSpectrumTransform.cxx:123
 TSpectrumTransform.cxx:124
 TSpectrumTransform.cxx:125
 TSpectrumTransform.cxx:126
 TSpectrumTransform.cxx:127
 TSpectrumTransform.cxx:128
 TSpectrumTransform.cxx:129
 TSpectrumTransform.cxx:130
 TSpectrumTransform.cxx:131
 TSpectrumTransform.cxx:132
 TSpectrumTransform.cxx:133
 TSpectrumTransform.cxx:134
 TSpectrumTransform.cxx:135
 TSpectrumTransform.cxx:136
 TSpectrumTransform.cxx:137
 TSpectrumTransform.cxx:138
 TSpectrumTransform.cxx:139
 TSpectrumTransform.cxx:140
 TSpectrumTransform.cxx:141
 TSpectrumTransform.cxx:142
 TSpectrumTransform.cxx:143
 TSpectrumTransform.cxx:144
 TSpectrumTransform.cxx:145
 TSpectrumTransform.cxx:146
 TSpectrumTransform.cxx:147
 TSpectrumTransform.cxx:148
 TSpectrumTransform.cxx:149
 TSpectrumTransform.cxx:150
 TSpectrumTransform.cxx:151
 TSpectrumTransform.cxx:152
 TSpectrumTransform.cxx:153
 TSpectrumTransform.cxx:154
 TSpectrumTransform.cxx:155
 TSpectrumTransform.cxx:156
 TSpectrumTransform.cxx:157
 TSpectrumTransform.cxx:158
 TSpectrumTransform.cxx:159
 TSpectrumTransform.cxx:160
 TSpectrumTransform.cxx:161
 TSpectrumTransform.cxx:162
 TSpectrumTransform.cxx:163
 TSpectrumTransform.cxx:164
 TSpectrumTransform.cxx:165
 TSpectrumTransform.cxx:166
 TSpectrumTransform.cxx:167
 TSpectrumTransform.cxx:168
 TSpectrumTransform.cxx:169
 TSpectrumTransform.cxx:170
 TSpectrumTransform.cxx:171
 TSpectrumTransform.cxx:172
 TSpectrumTransform.cxx:173
 TSpectrumTransform.cxx:174
 TSpectrumTransform.cxx:175
 TSpectrumTransform.cxx:176
 TSpectrumTransform.cxx:177
 TSpectrumTransform.cxx:178
 TSpectrumTransform.cxx:179
 TSpectrumTransform.cxx:180
 TSpectrumTransform.cxx:181
 TSpectrumTransform.cxx:182
 TSpectrumTransform.cxx:183
 TSpectrumTransform.cxx:184
 TSpectrumTransform.cxx:185
 TSpectrumTransform.cxx:186
 TSpectrumTransform.cxx:187
 TSpectrumTransform.cxx:188
 TSpectrumTransform.cxx:189
 TSpectrumTransform.cxx:190
 TSpectrumTransform.cxx:191
 TSpectrumTransform.cxx:192
 TSpectrumTransform.cxx:193
 TSpectrumTransform.cxx:194
 TSpectrumTransform.cxx:195
 TSpectrumTransform.cxx:196
 TSpectrumTransform.cxx:197
 TSpectrumTransform.cxx:198
 TSpectrumTransform.cxx:199
 TSpectrumTransform.cxx:200
 TSpectrumTransform.cxx:201
 TSpectrumTransform.cxx:202
 TSpectrumTransform.cxx:203
 TSpectrumTransform.cxx:204
 TSpectrumTransform.cxx:205
 TSpectrumTransform.cxx:206
 TSpectrumTransform.cxx:207
 TSpectrumTransform.cxx:208
 TSpectrumTransform.cxx:209
 TSpectrumTransform.cxx:210
 TSpectrumTransform.cxx:211
 TSpectrumTransform.cxx:212
 TSpectrumTransform.cxx:213
 TSpectrumTransform.cxx:214
 TSpectrumTransform.cxx:215
 TSpectrumTransform.cxx:216
 TSpectrumTransform.cxx:217
 TSpectrumTransform.cxx:218
 TSpectrumTransform.cxx:219
 TSpectrumTransform.cxx:220
 TSpectrumTransform.cxx:221
 TSpectrumTransform.cxx:222
 TSpectrumTransform.cxx:223
 TSpectrumTransform.cxx:224
 TSpectrumTransform.cxx:225
 TSpectrumTransform.cxx:226
 TSpectrumTransform.cxx:227
 TSpectrumTransform.cxx:228
 TSpectrumTransform.cxx:229
 TSpectrumTransform.cxx:230
 TSpectrumTransform.cxx:231
 TSpectrumTransform.cxx:232
 TSpectrumTransform.cxx:233
 TSpectrumTransform.cxx:234
 TSpectrumTransform.cxx:235
 TSpectrumTransform.cxx:236
 TSpectrumTransform.cxx:237
 TSpectrumTransform.cxx:238
 TSpectrumTransform.cxx:239
 TSpectrumTransform.cxx:240
 TSpectrumTransform.cxx:241
 TSpectrumTransform.cxx:242
 TSpectrumTransform.cxx:243
 TSpectrumTransform.cxx:244
 TSpectrumTransform.cxx:245
 TSpectrumTransform.cxx:246
 TSpectrumTransform.cxx:247
 TSpectrumTransform.cxx:248
 TSpectrumTransform.cxx:249
 TSpectrumTransform.cxx:250
 TSpectrumTransform.cxx:251
 TSpectrumTransform.cxx:252
 TSpectrumTransform.cxx:253
 TSpectrumTransform.cxx:254
 TSpectrumTransform.cxx:255
 TSpectrumTransform.cxx:256
 TSpectrumTransform.cxx:257
 TSpectrumTransform.cxx:258
 TSpectrumTransform.cxx:259
 TSpectrumTransform.cxx:260
 TSpectrumTransform.cxx:261
 TSpectrumTransform.cxx:262
 TSpectrumTransform.cxx:263
 TSpectrumTransform.cxx:264
 TSpectrumTransform.cxx:265
 TSpectrumTransform.cxx:266
 TSpectrumTransform.cxx:267
 TSpectrumTransform.cxx:268
 TSpectrumTransform.cxx:269
 TSpectrumTransform.cxx:270
 TSpectrumTransform.cxx:271
 TSpectrumTransform.cxx:272
 TSpectrumTransform.cxx:273
 TSpectrumTransform.cxx:274
 TSpectrumTransform.cxx:275
 TSpectrumTransform.cxx:276
 TSpectrumTransform.cxx:277
 TSpectrumTransform.cxx:278
 TSpectrumTransform.cxx:279
 TSpectrumTransform.cxx:280
 TSpectrumTransform.cxx:281
 TSpectrumTransform.cxx:282
 TSpectrumTransform.cxx:283
 TSpectrumTransform.cxx:284
 TSpectrumTransform.cxx:285
 TSpectrumTransform.cxx:286
 TSpectrumTransform.cxx:287
 TSpectrumTransform.cxx:288
 TSpectrumTransform.cxx:289
 TSpectrumTransform.cxx:290
 TSpectrumTransform.cxx:291
 TSpectrumTransform.cxx:292
 TSpectrumTransform.cxx:293
 TSpectrumTransform.cxx:294
 TSpectrumTransform.cxx:295
 TSpectrumTransform.cxx:296
 TSpectrumTransform.cxx:297
 TSpectrumTransform.cxx:298
 TSpectrumTransform.cxx:299
 TSpectrumTransform.cxx:300
 TSpectrumTransform.cxx:301
 TSpectrumTransform.cxx:302
 TSpectrumTransform.cxx:303
 TSpectrumTransform.cxx:304
 TSpectrumTransform.cxx:305
 TSpectrumTransform.cxx:306
 TSpectrumTransform.cxx:307
 TSpectrumTransform.cxx:308
 TSpectrumTransform.cxx:309
 TSpectrumTransform.cxx:310
 TSpectrumTransform.cxx:311
 TSpectrumTransform.cxx:312
 TSpectrumTransform.cxx:313
 TSpectrumTransform.cxx:314
 TSpectrumTransform.cxx:315
 TSpectrumTransform.cxx:316
 TSpectrumTransform.cxx:317
 TSpectrumTransform.cxx:318
 TSpectrumTransform.cxx:319
 TSpectrumTransform.cxx:320
 TSpectrumTransform.cxx:321
 TSpectrumTransform.cxx:322
 TSpectrumTransform.cxx:323
 TSpectrumTransform.cxx:324
 TSpectrumTransform.cxx:325
 TSpectrumTransform.cxx:326
 TSpectrumTransform.cxx:327
 TSpectrumTransform.cxx:328
 TSpectrumTransform.cxx:329
 TSpectrumTransform.cxx:330
 TSpectrumTransform.cxx:331
 TSpectrumTransform.cxx:332
 TSpectrumTransform.cxx:333
 TSpectrumTransform.cxx:334
 TSpectrumTransform.cxx:335
 TSpectrumTransform.cxx:336
 TSpectrumTransform.cxx:337
 TSpectrumTransform.cxx:338
 TSpectrumTransform.cxx:339
 TSpectrumTransform.cxx:340
 TSpectrumTransform.cxx:341
 TSpectrumTransform.cxx:342
 TSpectrumTransform.cxx:343
 TSpectrumTransform.cxx:344
 TSpectrumTransform.cxx:345
 TSpectrumTransform.cxx:346
 TSpectrumTransform.cxx:347
 TSpectrumTransform.cxx:348
 TSpectrumTransform.cxx:349
 TSpectrumTransform.cxx:350
 TSpectrumTransform.cxx:351
 TSpectrumTransform.cxx:352
 TSpectrumTransform.cxx:353
 TSpectrumTransform.cxx:354
 TSpectrumTransform.cxx:355
 TSpectrumTransform.cxx:356
 TSpectrumTransform.cxx:357
 TSpectrumTransform.cxx:358
 TSpectrumTransform.cxx:359
 TSpectrumTransform.cxx:360
 TSpectrumTransform.cxx:361
 TSpectrumTransform.cxx:362
 TSpectrumTransform.cxx:363
 TSpectrumTransform.cxx:364
 TSpectrumTransform.cxx:365
 TSpectrumTransform.cxx:366
 TSpectrumTransform.cxx:367
 TSpectrumTransform.cxx:368
 TSpectrumTransform.cxx:369
 TSpectrumTransform.cxx:370
 TSpectrumTransform.cxx:371
 TSpectrumTransform.cxx:372
 TSpectrumTransform.cxx:373
 TSpectrumTransform.cxx:374
 TSpectrumTransform.cxx:375
 TSpectrumTransform.cxx:376
 TSpectrumTransform.cxx:377
 TSpectrumTransform.cxx:378
 TSpectrumTransform.cxx:379
 TSpectrumTransform.cxx:380
 TSpectrumTransform.cxx:381
 TSpectrumTransform.cxx:382
 TSpectrumTransform.cxx:383
 TSpectrumTransform.cxx:384
 TSpectrumTransform.cxx:385
 TSpectrumTransform.cxx:386
 TSpectrumTransform.cxx:387
 TSpectrumTransform.cxx:388
 TSpectrumTransform.cxx:389
 TSpectrumTransform.cxx:390
 TSpectrumTransform.cxx:391
 TSpectrumTransform.cxx:392
 TSpectrumTransform.cxx:393
 TSpectrumTransform.cxx:394
 TSpectrumTransform.cxx:395
 TSpectrumTransform.cxx:396
 TSpectrumTransform.cxx:397
 TSpectrumTransform.cxx:398
 TSpectrumTransform.cxx:399
 TSpectrumTransform.cxx:400
 TSpectrumTransform.cxx:401
 TSpectrumTransform.cxx:402
 TSpectrumTransform.cxx:403
 TSpectrumTransform.cxx:404
 TSpectrumTransform.cxx:405
 TSpectrumTransform.cxx:406
 TSpectrumTransform.cxx:407
 TSpectrumTransform.cxx:408
 TSpectrumTransform.cxx:409
 TSpectrumTransform.cxx:410
 TSpectrumTransform.cxx:411
 TSpectrumTransform.cxx:412
 TSpectrumTransform.cxx:413
 TSpectrumTransform.cxx:414
 TSpectrumTransform.cxx:415
 TSpectrumTransform.cxx:416
 TSpectrumTransform.cxx:417
 TSpectrumTransform.cxx:418
 TSpectrumTransform.cxx:419
 TSpectrumTransform.cxx:420
 TSpectrumTransform.cxx:421
 TSpectrumTransform.cxx:422
 TSpectrumTransform.cxx:423
 TSpectrumTransform.cxx:424
 TSpectrumTransform.cxx:425
 TSpectrumTransform.cxx:426
 TSpectrumTransform.cxx:427
 TSpectrumTransform.cxx:428
 TSpectrumTransform.cxx:429
 TSpectrumTransform.cxx:430
 TSpectrumTransform.cxx:431
 TSpectrumTransform.cxx:432
 TSpectrumTransform.cxx:433
 TSpectrumTransform.cxx:434
 TSpectrumTransform.cxx:435
 TSpectrumTransform.cxx:436
 TSpectrumTransform.cxx:437
 TSpectrumTransform.cxx:438
 TSpectrumTransform.cxx:439
 TSpectrumTransform.cxx:440
 TSpectrumTransform.cxx:441
 TSpectrumTransform.cxx:442
 TSpectrumTransform.cxx:443
 TSpectrumTransform.cxx:444
 TSpectrumTransform.cxx:445
 TSpectrumTransform.cxx:446
 TSpectrumTransform.cxx:447
 TSpectrumTransform.cxx:448
 TSpectrumTransform.cxx:449
 TSpectrumTransform.cxx:450
 TSpectrumTransform.cxx:451
 TSpectrumTransform.cxx:452
 TSpectrumTransform.cxx:453
 TSpectrumTransform.cxx:454
 TSpectrumTransform.cxx:455
 TSpectrumTransform.cxx:456
 TSpectrumTransform.cxx:457
 TSpectrumTransform.cxx:458
 TSpectrumTransform.cxx:459
 TSpectrumTransform.cxx:460
 TSpectrumTransform.cxx:461
 TSpectrumTransform.cxx:462
 TSpectrumTransform.cxx:463
 TSpectrumTransform.cxx:464
 TSpectrumTransform.cxx:465
 TSpectrumTransform.cxx:466
 TSpectrumTransform.cxx:467
 TSpectrumTransform.cxx:468
 TSpectrumTransform.cxx:469
 TSpectrumTransform.cxx:470
 TSpectrumTransform.cxx:471
 TSpectrumTransform.cxx:472
 TSpectrumTransform.cxx:473
 TSpectrumTransform.cxx:474
 TSpectrumTransform.cxx:475
 TSpectrumTransform.cxx:476
 TSpectrumTransform.cxx:477
 TSpectrumTransform.cxx:478
 TSpectrumTransform.cxx:479
 TSpectrumTransform.cxx:480
 TSpectrumTransform.cxx:481
 TSpectrumTransform.cxx:482
 TSpectrumTransform.cxx:483
 TSpectrumTransform.cxx:484
 TSpectrumTransform.cxx:485
 TSpectrumTransform.cxx:486
 TSpectrumTransform.cxx:487
 TSpectrumTransform.cxx:488
 TSpectrumTransform.cxx:489
 TSpectrumTransform.cxx:490
 TSpectrumTransform.cxx:491
 TSpectrumTransform.cxx:492
 TSpectrumTransform.cxx:493
 TSpectrumTransform.cxx:494
 TSpectrumTransform.cxx:495
 TSpectrumTransform.cxx:496
 TSpectrumTransform.cxx:497
 TSpectrumTransform.cxx:498
 TSpectrumTransform.cxx:499
 TSpectrumTransform.cxx:500
 TSpectrumTransform.cxx:501
 TSpectrumTransform.cxx:502
 TSpectrumTransform.cxx:503
 TSpectrumTransform.cxx:504
 TSpectrumTransform.cxx:505
 TSpectrumTransform.cxx:506
 TSpectrumTransform.cxx:507
 TSpectrumTransform.cxx:508
 TSpectrumTransform.cxx:509
 TSpectrumTransform.cxx:510
 TSpectrumTransform.cxx:511
 TSpectrumTransform.cxx:512
 TSpectrumTransform.cxx:513
 TSpectrumTransform.cxx:514
 TSpectrumTransform.cxx:515
 TSpectrumTransform.cxx:516
 TSpectrumTransform.cxx:517
 TSpectrumTransform.cxx:518
 TSpectrumTransform.cxx:519
 TSpectrumTransform.cxx:520
 TSpectrumTransform.cxx:521
 TSpectrumTransform.cxx:522
 TSpectrumTransform.cxx:523
 TSpectrumTransform.cxx:524
 TSpectrumTransform.cxx:525
 TSpectrumTransform.cxx:526
 TSpectrumTransform.cxx:527
 TSpectrumTransform.cxx:528
 TSpectrumTransform.cxx:529
 TSpectrumTransform.cxx:530
 TSpectrumTransform.cxx:531
 TSpectrumTransform.cxx:532
 TSpectrumTransform.cxx:533
 TSpectrumTransform.cxx:534
 TSpectrumTransform.cxx:535
 TSpectrumTransform.cxx:536
 TSpectrumTransform.cxx:537
 TSpectrumTransform.cxx:538
 TSpectrumTransform.cxx:539
 TSpectrumTransform.cxx:540
 TSpectrumTransform.cxx:541
 TSpectrumTransform.cxx:542
 TSpectrumTransform.cxx:543
 TSpectrumTransform.cxx:544
 TSpectrumTransform.cxx:545
 TSpectrumTransform.cxx:546
 TSpectrumTransform.cxx:547
 TSpectrumTransform.cxx:548
 TSpectrumTransform.cxx:549
 TSpectrumTransform.cxx:550
 TSpectrumTransform.cxx:551
 TSpectrumTransform.cxx:552
 TSpectrumTransform.cxx:553
 TSpectrumTransform.cxx:554
 TSpectrumTransform.cxx:555
 TSpectrumTransform.cxx:556
 TSpectrumTransform.cxx:557
 TSpectrumTransform.cxx:558
 TSpectrumTransform.cxx:559
 TSpectrumTransform.cxx:560
 TSpectrumTransform.cxx:561
 TSpectrumTransform.cxx:562
 TSpectrumTransform.cxx:563
 TSpectrumTransform.cxx:564
 TSpectrumTransform.cxx:565
 TSpectrumTransform.cxx:566
 TSpectrumTransform.cxx:567
 TSpectrumTransform.cxx:568
 TSpectrumTransform.cxx:569
 TSpectrumTransform.cxx:570
 TSpectrumTransform.cxx:571
 TSpectrumTransform.cxx:572
 TSpectrumTransform.cxx:573
 TSpectrumTransform.cxx:574
 TSpectrumTransform.cxx:575
 TSpectrumTransform.cxx:576
 TSpectrumTransform.cxx:577
 TSpectrumTransform.cxx:578
 TSpectrumTransform.cxx:579
 TSpectrumTransform.cxx:580
 TSpectrumTransform.cxx:581
 TSpectrumTransform.cxx:582
 TSpectrumTransform.cxx:583
 TSpectrumTransform.cxx:584
 TSpectrumTransform.cxx:585
 TSpectrumTransform.cxx:586
 TSpectrumTransform.cxx:587
 TSpectrumTransform.cxx:588
 TSpectrumTransform.cxx:589
 TSpectrumTransform.cxx:590
 TSpectrumTransform.cxx:591
 TSpectrumTransform.cxx:592
 TSpectrumTransform.cxx:593
 TSpectrumTransform.cxx:594
 TSpectrumTransform.cxx:595
 TSpectrumTransform.cxx:596
 TSpectrumTransform.cxx:597
 TSpectrumTransform.cxx:598
 TSpectrumTransform.cxx:599
 TSpectrumTransform.cxx:600
 TSpectrumTransform.cxx:601
 TSpectrumTransform.cxx:602
 TSpectrumTransform.cxx:603
 TSpectrumTransform.cxx:604
 TSpectrumTransform.cxx:605
 TSpectrumTransform.cxx:606
 TSpectrumTransform.cxx:607
 TSpectrumTransform.cxx:608
 TSpectrumTransform.cxx:609
 TSpectrumTransform.cxx:610
 TSpectrumTransform.cxx:611
 TSpectrumTransform.cxx:612
 TSpectrumTransform.cxx:613
 TSpectrumTransform.cxx:614
 TSpectrumTransform.cxx:615
 TSpectrumTransform.cxx:616
 TSpectrumTransform.cxx:617
 TSpectrumTransform.cxx:618
 TSpectrumTransform.cxx:619
 TSpectrumTransform.cxx:620
 TSpectrumTransform.cxx:621
 TSpectrumTransform.cxx:622
 TSpectrumTransform.cxx:623
 TSpectrumTransform.cxx:624
 TSpectrumTransform.cxx:625
 TSpectrumTransform.cxx:626
 TSpectrumTransform.cxx:627
 TSpectrumTransform.cxx:628
 TSpectrumTransform.cxx:629
 TSpectrumTransform.cxx:630
 TSpectrumTransform.cxx:631
 TSpectrumTransform.cxx:632
 TSpectrumTransform.cxx:633
 TSpectrumTransform.cxx:634
 TSpectrumTransform.cxx:635
 TSpectrumTransform.cxx:636
 TSpectrumTransform.cxx:637
 TSpectrumTransform.cxx:638
 TSpectrumTransform.cxx:639
 TSpectrumTransform.cxx:640
 TSpectrumTransform.cxx:641
 TSpectrumTransform.cxx:642
 TSpectrumTransform.cxx:643
 TSpectrumTransform.cxx:644
 TSpectrumTransform.cxx:645
 TSpectrumTransform.cxx:646
 TSpectrumTransform.cxx:647
 TSpectrumTransform.cxx:648
 TSpectrumTransform.cxx:649
 TSpectrumTransform.cxx:650
 TSpectrumTransform.cxx:651
 TSpectrumTransform.cxx:652
 TSpectrumTransform.cxx:653
 TSpectrumTransform.cxx:654
 TSpectrumTransform.cxx:655
 TSpectrumTransform.cxx:656
 TSpectrumTransform.cxx:657
 TSpectrumTransform.cxx:658
 TSpectrumTransform.cxx:659
 TSpectrumTransform.cxx:660
 TSpectrumTransform.cxx:661
 TSpectrumTransform.cxx:662
 TSpectrumTransform.cxx:663
 TSpectrumTransform.cxx:664
 TSpectrumTransform.cxx:665
 TSpectrumTransform.cxx:666
 TSpectrumTransform.cxx:667
 TSpectrumTransform.cxx:668
 TSpectrumTransform.cxx:669
 TSpectrumTransform.cxx:670
 TSpectrumTransform.cxx:671
 TSpectrumTransform.cxx:672
 TSpectrumTransform.cxx:673
 TSpectrumTransform.cxx:674
 TSpectrumTransform.cxx:675
 TSpectrumTransform.cxx:676
 TSpectrumTransform.cxx:677
 TSpectrumTransform.cxx:678
 TSpectrumTransform.cxx:679
 TSpectrumTransform.cxx:680
 TSpectrumTransform.cxx:681
 TSpectrumTransform.cxx:682
 TSpectrumTransform.cxx:683
 TSpectrumTransform.cxx:684
 TSpectrumTransform.cxx:685
 TSpectrumTransform.cxx:686
 TSpectrumTransform.cxx:687
 TSpectrumTransform.cxx:688
 TSpectrumTransform.cxx:689
 TSpectrumTransform.cxx:690
 TSpectrumTransform.cxx:691
 TSpectrumTransform.cxx:692
 TSpectrumTransform.cxx:693
 TSpectrumTransform.cxx:694
 TSpectrumTransform.cxx:695
 TSpectrumTransform.cxx:696
 TSpectrumTransform.cxx:697
 TSpectrumTransform.cxx:698
 TSpectrumTransform.cxx:699
 TSpectrumTransform.cxx:700
 TSpectrumTransform.cxx:701
 TSpectrumTransform.cxx:702
 TSpectrumTransform.cxx:703
 TSpectrumTransform.cxx:704
 TSpectrumTransform.cxx:705
 TSpectrumTransform.cxx:706
 TSpectrumTransform.cxx:707
 TSpectrumTransform.cxx:708
 TSpectrumTransform.cxx:709
 TSpectrumTransform.cxx:710
 TSpectrumTransform.cxx:711
 TSpectrumTransform.cxx:712
 TSpectrumTransform.cxx:713
 TSpectrumTransform.cxx:714
 TSpectrumTransform.cxx:715
 TSpectrumTransform.cxx:716
 TSpectrumTransform.cxx:717
 TSpectrumTransform.cxx:718
 TSpectrumTransform.cxx:719
 TSpectrumTransform.cxx:720
 TSpectrumTransform.cxx:721
 TSpectrumTransform.cxx:722
 TSpectrumTransform.cxx:723
 TSpectrumTransform.cxx:724
 TSpectrumTransform.cxx:725
 TSpectrumTransform.cxx:726
 TSpectrumTransform.cxx:727
 TSpectrumTransform.cxx:728
 TSpectrumTransform.cxx:729
 TSpectrumTransform.cxx:730
 TSpectrumTransform.cxx:731
 TSpectrumTransform.cxx:732
 TSpectrumTransform.cxx:733
 TSpectrumTransform.cxx:734
 TSpectrumTransform.cxx:735
 TSpectrumTransform.cxx:736
 TSpectrumTransform.cxx:737
 TSpectrumTransform.cxx:738
 TSpectrumTransform.cxx:739
 TSpectrumTransform.cxx:740
 TSpectrumTransform.cxx:741
 TSpectrumTransform.cxx:742
 TSpectrumTransform.cxx:743
 TSpectrumTransform.cxx:744
 TSpectrumTransform.cxx:745
 TSpectrumTransform.cxx:746
 TSpectrumTransform.cxx:747
 TSpectrumTransform.cxx:748
 TSpectrumTransform.cxx:749
 TSpectrumTransform.cxx:750
 TSpectrumTransform.cxx:751
 TSpectrumTransform.cxx:752
 TSpectrumTransform.cxx:753
 TSpectrumTransform.cxx:754
 TSpectrumTransform.cxx:755
 TSpectrumTransform.cxx:756
 TSpectrumTransform.cxx:757
 TSpectrumTransform.cxx:758
 TSpectrumTransform.cxx:759
 TSpectrumTransform.cxx:760
 TSpectrumTransform.cxx:761
 TSpectrumTransform.cxx:762
 TSpectrumTransform.cxx:763
 TSpectrumTransform.cxx:764
 TSpectrumTransform.cxx:765
 TSpectrumTransform.cxx:766
 TSpectrumTransform.cxx:767
 TSpectrumTransform.cxx:768
 TSpectrumTransform.cxx:769
 TSpectrumTransform.cxx:770
 TSpectrumTransform.cxx:771
 TSpectrumTransform.cxx:772
 TSpectrumTransform.cxx:773
 TSpectrumTransform.cxx:774
 TSpectrumTransform.cxx:775
 TSpectrumTransform.cxx:776
 TSpectrumTransform.cxx:777
 TSpectrumTransform.cxx:778
 TSpectrumTransform.cxx:779
 TSpectrumTransform.cxx:780
 TSpectrumTransform.cxx:781
 TSpectrumTransform.cxx:782
 TSpectrumTransform.cxx:783
 TSpectrumTransform.cxx:784
 TSpectrumTransform.cxx:785
 TSpectrumTransform.cxx:786
 TSpectrumTransform.cxx:787
 TSpectrumTransform.cxx:788
 TSpectrumTransform.cxx:789
 TSpectrumTransform.cxx:790
 TSpectrumTransform.cxx:791
 TSpectrumTransform.cxx:792
 TSpectrumTransform.cxx:793
 TSpectrumTransform.cxx:794
 TSpectrumTransform.cxx:795
 TSpectrumTransform.cxx:796
 TSpectrumTransform.cxx:797
 TSpectrumTransform.cxx:798
 TSpectrumTransform.cxx:799
 TSpectrumTransform.cxx:800
 TSpectrumTransform.cxx:801
 TSpectrumTransform.cxx:802
 TSpectrumTransform.cxx:803
 TSpectrumTransform.cxx:804
 TSpectrumTransform.cxx:805
 TSpectrumTransform.cxx:806
 TSpectrumTransform.cxx:807
 TSpectrumTransform.cxx:808
 TSpectrumTransform.cxx:809
 TSpectrumTransform.cxx:810
 TSpectrumTransform.cxx:811
 TSpectrumTransform.cxx:812
 TSpectrumTransform.cxx:813
 TSpectrumTransform.cxx:814
 TSpectrumTransform.cxx:815
 TSpectrumTransform.cxx:816
 TSpectrumTransform.cxx:817
 TSpectrumTransform.cxx:818
 TSpectrumTransform.cxx:819
 TSpectrumTransform.cxx:820
 TSpectrumTransform.cxx:821
 TSpectrumTransform.cxx:822
 TSpectrumTransform.cxx:823
 TSpectrumTransform.cxx:824
 TSpectrumTransform.cxx:825
 TSpectrumTransform.cxx:826
 TSpectrumTransform.cxx:827
 TSpectrumTransform.cxx:828
 TSpectrumTransform.cxx:829
 TSpectrumTransform.cxx:830
 TSpectrumTransform.cxx:831
 TSpectrumTransform.cxx:832
 TSpectrumTransform.cxx:833
 TSpectrumTransform.cxx:834
 TSpectrumTransform.cxx:835
 TSpectrumTransform.cxx:836
 TSpectrumTransform.cxx:837
 TSpectrumTransform.cxx:838
 TSpectrumTransform.cxx:839
 TSpectrumTransform.cxx:840
 TSpectrumTransform.cxx:841
 TSpectrumTransform.cxx:842
 TSpectrumTransform.cxx:843
 TSpectrumTransform.cxx:844
 TSpectrumTransform.cxx:845
 TSpectrumTransform.cxx:846
 TSpectrumTransform.cxx:847
 TSpectrumTransform.cxx:848
 TSpectrumTransform.cxx:849
 TSpectrumTransform.cxx:850
 TSpectrumTransform.cxx:851
 TSpectrumTransform.cxx:852
 TSpectrumTransform.cxx:853
 TSpectrumTransform.cxx:854
 TSpectrumTransform.cxx:855
 TSpectrumTransform.cxx:856
 TSpectrumTransform.cxx:857
 TSpectrumTransform.cxx:858
 TSpectrumTransform.cxx:859
 TSpectrumTransform.cxx:860
 TSpectrumTransform.cxx:861
 TSpectrumTransform.cxx:862
 TSpectrumTransform.cxx:863
 TSpectrumTransform.cxx:864
 TSpectrumTransform.cxx:865
 TSpectrumTransform.cxx:866
 TSpectrumTransform.cxx:867
 TSpectrumTransform.cxx:868
 TSpectrumTransform.cxx:869
 TSpectrumTransform.cxx:870
 TSpectrumTransform.cxx:871
 TSpectrumTransform.cxx:872
 TSpectrumTransform.cxx:873
 TSpectrumTransform.cxx:874
 TSpectrumTransform.cxx:875
 TSpectrumTransform.cxx:876
 TSpectrumTransform.cxx:877
 TSpectrumTransform.cxx:878
 TSpectrumTransform.cxx:879
 TSpectrumTransform.cxx:880
 TSpectrumTransform.cxx:881
 TSpectrumTransform.cxx:882
 TSpectrumTransform.cxx:883
 TSpectrumTransform.cxx:884
 TSpectrumTransform.cxx:885
 TSpectrumTransform.cxx:886
 TSpectrumTransform.cxx:887
 TSpectrumTransform.cxx:888
 TSpectrumTransform.cxx:889
 TSpectrumTransform.cxx:890
 TSpectrumTransform.cxx:891
 TSpectrumTransform.cxx:892
 TSpectrumTransform.cxx:893
 TSpectrumTransform.cxx:894
 TSpectrumTransform.cxx:895
 TSpectrumTransform.cxx:896
 TSpectrumTransform.cxx:897
 TSpectrumTransform.cxx:898
 TSpectrumTransform.cxx:899
 TSpectrumTransform.cxx:900
 TSpectrumTransform.cxx:901
 TSpectrumTransform.cxx:902
 TSpectrumTransform.cxx:903
 TSpectrumTransform.cxx:904
 TSpectrumTransform.cxx:905
 TSpectrumTransform.cxx:906
 TSpectrumTransform.cxx:907
 TSpectrumTransform.cxx:908
 TSpectrumTransform.cxx:909
 TSpectrumTransform.cxx:910
 TSpectrumTransform.cxx:911
 TSpectrumTransform.cxx:912
 TSpectrumTransform.cxx:913
 TSpectrumTransform.cxx:914
 TSpectrumTransform.cxx:915
 TSpectrumTransform.cxx:916
 TSpectrumTransform.cxx:917
 TSpectrumTransform.cxx:918
 TSpectrumTransform.cxx:919
 TSpectrumTransform.cxx:920
 TSpectrumTransform.cxx:921
 TSpectrumTransform.cxx:922
 TSpectrumTransform.cxx:923
 TSpectrumTransform.cxx:924
 TSpectrumTransform.cxx:925
 TSpectrumTransform.cxx:926
 TSpectrumTransform.cxx:927
 TSpectrumTransform.cxx:928
 TSpectrumTransform.cxx:929
 TSpectrumTransform.cxx:930
 TSpectrumTransform.cxx:931
 TSpectrumTransform.cxx:932
 TSpectrumTransform.cxx:933
 TSpectrumTransform.cxx:934
 TSpectrumTransform.cxx:935
 TSpectrumTransform.cxx:936
 TSpectrumTransform.cxx:937
 TSpectrumTransform.cxx:938
 TSpectrumTransform.cxx:939
 TSpectrumTransform.cxx:940
 TSpectrumTransform.cxx:941
 TSpectrumTransform.cxx:942
 TSpectrumTransform.cxx:943
 TSpectrumTransform.cxx:944
 TSpectrumTransform.cxx:945
 TSpectrumTransform.cxx:946
 TSpectrumTransform.cxx:947
 TSpectrumTransform.cxx:948
 TSpectrumTransform.cxx:949
 TSpectrumTransform.cxx:950
 TSpectrumTransform.cxx:951
 TSpectrumTransform.cxx:952
 TSpectrumTransform.cxx:953
 TSpectrumTransform.cxx:954
 TSpectrumTransform.cxx:955
 TSpectrumTransform.cxx:956
 TSpectrumTransform.cxx:957
 TSpectrumTransform.cxx:958
 TSpectrumTransform.cxx:959
 TSpectrumTransform.cxx:960
 TSpectrumTransform.cxx:961
 TSpectrumTransform.cxx:962
 TSpectrumTransform.cxx:963
 TSpectrumTransform.cxx:964
 TSpectrumTransform.cxx:965
 TSpectrumTransform.cxx:966
 TSpectrumTransform.cxx:967
 TSpectrumTransform.cxx:968
 TSpectrumTransform.cxx:969
 TSpectrumTransform.cxx:970
 TSpectrumTransform.cxx:971
 TSpectrumTransform.cxx:972
 TSpectrumTransform.cxx:973
 TSpectrumTransform.cxx:974
 TSpectrumTransform.cxx:975
 TSpectrumTransform.cxx:976
 TSpectrumTransform.cxx:977
 TSpectrumTransform.cxx:978
 TSpectrumTransform.cxx:979
 TSpectrumTransform.cxx:980
 TSpectrumTransform.cxx:981
 TSpectrumTransform.cxx:982
 TSpectrumTransform.cxx:983
 TSpectrumTransform.cxx:984
 TSpectrumTransform.cxx:985
 TSpectrumTransform.cxx:986
 TSpectrumTransform.cxx:987
 TSpectrumTransform.cxx:988
 TSpectrumTransform.cxx:989
 TSpectrumTransform.cxx:990
 TSpectrumTransform.cxx:991
 TSpectrumTransform.cxx:992
 TSpectrumTransform.cxx:993
 TSpectrumTransform.cxx:994
 TSpectrumTransform.cxx:995
 TSpectrumTransform.cxx:996
 TSpectrumTransform.cxx:997
 TSpectrumTransform.cxx:998
 TSpectrumTransform.cxx:999
 TSpectrumTransform.cxx:1000
 TSpectrumTransform.cxx:1001
 TSpectrumTransform.cxx:1002
 TSpectrumTransform.cxx:1003
 TSpectrumTransform.cxx:1004
 TSpectrumTransform.cxx:1005
 TSpectrumTransform.cxx:1006
 TSpectrumTransform.cxx:1007
 TSpectrumTransform.cxx:1008
 TSpectrumTransform.cxx:1009
 TSpectrumTransform.cxx:1010
 TSpectrumTransform.cxx:1011
 TSpectrumTransform.cxx:1012
 TSpectrumTransform.cxx:1013
 TSpectrumTransform.cxx:1014
 TSpectrumTransform.cxx:1015
 TSpectrumTransform.cxx:1016
 TSpectrumTransform.cxx:1017
 TSpectrumTransform.cxx:1018
 TSpectrumTransform.cxx:1019
 TSpectrumTransform.cxx:1020
 TSpectrumTransform.cxx:1021
 TSpectrumTransform.cxx:1022
 TSpectrumTransform.cxx:1023
 TSpectrumTransform.cxx:1024
 TSpectrumTransform.cxx:1025
 TSpectrumTransform.cxx:1026
 TSpectrumTransform.cxx:1027
 TSpectrumTransform.cxx:1028
 TSpectrumTransform.cxx:1029
 TSpectrumTransform.cxx:1030
 TSpectrumTransform.cxx:1031
 TSpectrumTransform.cxx:1032
 TSpectrumTransform.cxx:1033
 TSpectrumTransform.cxx:1034
 TSpectrumTransform.cxx:1035
 TSpectrumTransform.cxx:1036
 TSpectrumTransform.cxx:1037
 TSpectrumTransform.cxx:1038
 TSpectrumTransform.cxx:1039
 TSpectrumTransform.cxx:1040
 TSpectrumTransform.cxx:1041
 TSpectrumTransform.cxx:1042
 TSpectrumTransform.cxx:1043
 TSpectrumTransform.cxx:1044
 TSpectrumTransform.cxx:1045
 TSpectrumTransform.cxx:1046
 TSpectrumTransform.cxx:1047
 TSpectrumTransform.cxx:1048
 TSpectrumTransform.cxx:1049
 TSpectrumTransform.cxx:1050
 TSpectrumTransform.cxx:1051
 TSpectrumTransform.cxx:1052
 TSpectrumTransform.cxx:1053
 TSpectrumTransform.cxx:1054
 TSpectrumTransform.cxx:1055
 TSpectrumTransform.cxx:1056
 TSpectrumTransform.cxx:1057
 TSpectrumTransform.cxx:1058
 TSpectrumTransform.cxx:1059
 TSpectrumTransform.cxx:1060
 TSpectrumTransform.cxx:1061
 TSpectrumTransform.cxx:1062
 TSpectrumTransform.cxx:1063
 TSpectrumTransform.cxx:1064
 TSpectrumTransform.cxx:1065
 TSpectrumTransform.cxx:1066
 TSpectrumTransform.cxx:1067
 TSpectrumTransform.cxx:1068
 TSpectrumTransform.cxx:1069
 TSpectrumTransform.cxx:1070
 TSpectrumTransform.cxx:1071
 TSpectrumTransform.cxx:1072
 TSpectrumTransform.cxx:1073
 TSpectrumTransform.cxx:1074
 TSpectrumTransform.cxx:1075
 TSpectrumTransform.cxx:1076
 TSpectrumTransform.cxx:1077
 TSpectrumTransform.cxx:1078
 TSpectrumTransform.cxx:1079
 TSpectrumTransform.cxx:1080
 TSpectrumTransform.cxx:1081
 TSpectrumTransform.cxx:1082
 TSpectrumTransform.cxx:1083
 TSpectrumTransform.cxx:1084
 TSpectrumTransform.cxx:1085
 TSpectrumTransform.cxx:1086
 TSpectrumTransform.cxx:1087
 TSpectrumTransform.cxx:1088
 TSpectrumTransform.cxx:1089
 TSpectrumTransform.cxx:1090
 TSpectrumTransform.cxx:1091
 TSpectrumTransform.cxx:1092
 TSpectrumTransform.cxx:1093
 TSpectrumTransform.cxx:1094
 TSpectrumTransform.cxx:1095
 TSpectrumTransform.cxx:1096
 TSpectrumTransform.cxx:1097
 TSpectrumTransform.cxx:1098
 TSpectrumTransform.cxx:1099
 TSpectrumTransform.cxx:1100
 TSpectrumTransform.cxx:1101
 TSpectrumTransform.cxx:1102
 TSpectrumTransform.cxx:1103
 TSpectrumTransform.cxx:1104
 TSpectrumTransform.cxx:1105
 TSpectrumTransform.cxx:1106
 TSpectrumTransform.cxx:1107
 TSpectrumTransform.cxx:1108
 TSpectrumTransform.cxx:1109
 TSpectrumTransform.cxx:1110
 TSpectrumTransform.cxx:1111
 TSpectrumTransform.cxx:1112
 TSpectrumTransform.cxx:1113
 TSpectrumTransform.cxx:1114
 TSpectrumTransform.cxx:1115
 TSpectrumTransform.cxx:1116
 TSpectrumTransform.cxx:1117
 TSpectrumTransform.cxx:1118
 TSpectrumTransform.cxx:1119
 TSpectrumTransform.cxx:1120
 TSpectrumTransform.cxx:1121
 TSpectrumTransform.cxx:1122
 TSpectrumTransform.cxx:1123
 TSpectrumTransform.cxx:1124
 TSpectrumTransform.cxx:1125
 TSpectrumTransform.cxx:1126
 TSpectrumTransform.cxx:1127
 TSpectrumTransform.cxx:1128
 TSpectrumTransform.cxx:1129
 TSpectrumTransform.cxx:1130
 TSpectrumTransform.cxx:1131
 TSpectrumTransform.cxx:1132
 TSpectrumTransform.cxx:1133
 TSpectrumTransform.cxx:1134
 TSpectrumTransform.cxx:1135
 TSpectrumTransform.cxx:1136
 TSpectrumTransform.cxx:1137
 TSpectrumTransform.cxx:1138
 TSpectrumTransform.cxx:1139
 TSpectrumTransform.cxx:1140
 TSpectrumTransform.cxx:1141
 TSpectrumTransform.cxx:1142
 TSpectrumTransform.cxx:1143
 TSpectrumTransform.cxx:1144
 TSpectrumTransform.cxx:1145
 TSpectrumTransform.cxx:1146
 TSpectrumTransform.cxx:1147
 TSpectrumTransform.cxx:1148
 TSpectrumTransform.cxx:1149
 TSpectrumTransform.cxx:1150
 TSpectrumTransform.cxx:1151
 TSpectrumTransform.cxx:1152
 TSpectrumTransform.cxx:1153
 TSpectrumTransform.cxx:1154
 TSpectrumTransform.cxx:1155
 TSpectrumTransform.cxx:1156
 TSpectrumTransform.cxx:1157
 TSpectrumTransform.cxx:1158
 TSpectrumTransform.cxx:1159
 TSpectrumTransform.cxx:1160
 TSpectrumTransform.cxx:1161
 TSpectrumTransform.cxx:1162
 TSpectrumTransform.cxx:1163
 TSpectrumTransform.cxx:1164
 TSpectrumTransform.cxx:1165
 TSpectrumTransform.cxx:1166
 TSpectrumTransform.cxx:1167
 TSpectrumTransform.cxx:1168
 TSpectrumTransform.cxx:1169
 TSpectrumTransform.cxx:1170
 TSpectrumTransform.cxx:1171
 TSpectrumTransform.cxx:1172
 TSpectrumTransform.cxx:1173
 TSpectrumTransform.cxx:1174
 TSpectrumTransform.cxx:1175
 TSpectrumTransform.cxx:1176
 TSpectrumTransform.cxx:1177
 TSpectrumTransform.cxx:1178
 TSpectrumTransform.cxx:1179
 TSpectrumTransform.cxx:1180
 TSpectrumTransform.cxx:1181
 TSpectrumTransform.cxx:1182
 TSpectrumTransform.cxx:1183
 TSpectrumTransform.cxx:1184
 TSpectrumTransform.cxx:1185
 TSpectrumTransform.cxx:1186
 TSpectrumTransform.cxx:1187
 TSpectrumTransform.cxx:1188
 TSpectrumTransform.cxx:1189
 TSpectrumTransform.cxx:1190
 TSpectrumTransform.cxx:1191
 TSpectrumTransform.cxx:1192
 TSpectrumTransform.cxx:1193
 TSpectrumTransform.cxx:1194
 TSpectrumTransform.cxx:1195
 TSpectrumTransform.cxx:1196
 TSpectrumTransform.cxx:1197
 TSpectrumTransform.cxx:1198
 TSpectrumTransform.cxx:1199
 TSpectrumTransform.cxx:1200
 TSpectrumTransform.cxx:1201
 TSpectrumTransform.cxx:1202
 TSpectrumTransform.cxx:1203
 TSpectrumTransform.cxx:1204
 TSpectrumTransform.cxx:1205
 TSpectrumTransform.cxx:1206
 TSpectrumTransform.cxx:1207
 TSpectrumTransform.cxx:1208
 TSpectrumTransform.cxx:1209
 TSpectrumTransform.cxx:1210
 TSpectrumTransform.cxx:1211
 TSpectrumTransform.cxx:1212
 TSpectrumTransform.cxx:1213
 TSpectrumTransform.cxx:1214
 TSpectrumTransform.cxx:1215
 TSpectrumTransform.cxx:1216
 TSpectrumTransform.cxx:1217
 TSpectrumTransform.cxx:1218
 TSpectrumTransform.cxx:1219
 TSpectrumTransform.cxx:1220
 TSpectrumTransform.cxx:1221
 TSpectrumTransform.cxx:1222
 TSpectrumTransform.cxx:1223
 TSpectrumTransform.cxx:1224
 TSpectrumTransform.cxx:1225
 TSpectrumTransform.cxx:1226
 TSpectrumTransform.cxx:1227
 TSpectrumTransform.cxx:1228
 TSpectrumTransform.cxx:1229
 TSpectrumTransform.cxx:1230
 TSpectrumTransform.cxx:1231
 TSpectrumTransform.cxx:1232
 TSpectrumTransform.cxx:1233
 TSpectrumTransform.cxx:1234
 TSpectrumTransform.cxx:1235
 TSpectrumTransform.cxx:1236
 TSpectrumTransform.cxx:1237
 TSpectrumTransform.cxx:1238
 TSpectrumTransform.cxx:1239
 TSpectrumTransform.cxx:1240
 TSpectrumTransform.cxx:1241
 TSpectrumTransform.cxx:1242
 TSpectrumTransform.cxx:1243
 TSpectrumTransform.cxx:1244
 TSpectrumTransform.cxx:1245
 TSpectrumTransform.cxx:1246
 TSpectrumTransform.cxx:1247
 TSpectrumTransform.cxx:1248
 TSpectrumTransform.cxx:1249
 TSpectrumTransform.cxx:1250
 TSpectrumTransform.cxx:1251
 TSpectrumTransform.cxx:1252
 TSpectrumTransform.cxx:1253
 TSpectrumTransform.cxx:1254
 TSpectrumTransform.cxx:1255
 TSpectrumTransform.cxx:1256
 TSpectrumTransform.cxx:1257
 TSpectrumTransform.cxx:1258
 TSpectrumTransform.cxx:1259
 TSpectrumTransform.cxx:1260
 TSpectrumTransform.cxx:1261
 TSpectrumTransform.cxx:1262
 TSpectrumTransform.cxx:1263
 TSpectrumTransform.cxx:1264
 TSpectrumTransform.cxx:1265
 TSpectrumTransform.cxx:1266
 TSpectrumTransform.cxx:1267
 TSpectrumTransform.cxx:1268
 TSpectrumTransform.cxx:1269
 TSpectrumTransform.cxx:1270
 TSpectrumTransform.cxx:1271
 TSpectrumTransform.cxx:1272
 TSpectrumTransform.cxx:1273
 TSpectrumTransform.cxx:1274
 TSpectrumTransform.cxx:1275
 TSpectrumTransform.cxx:1276
 TSpectrumTransform.cxx:1277
 TSpectrumTransform.cxx:1278
 TSpectrumTransform.cxx:1279
 TSpectrumTransform.cxx:1280
 TSpectrumTransform.cxx:1281
 TSpectrumTransform.cxx:1282
 TSpectrumTransform.cxx:1283
 TSpectrumTransform.cxx:1284
 TSpectrumTransform.cxx:1285
 TSpectrumTransform.cxx:1286
 TSpectrumTransform.cxx:1287
 TSpectrumTransform.cxx:1288
 TSpectrumTransform.cxx:1289
 TSpectrumTransform.cxx:1290
 TSpectrumTransform.cxx:1291
 TSpectrumTransform.cxx:1292
 TSpectrumTransform.cxx:1293
 TSpectrumTransform.cxx:1294
 TSpectrumTransform.cxx:1295
 TSpectrumTransform.cxx:1296
 TSpectrumTransform.cxx:1297
 TSpectrumTransform.cxx:1298
 TSpectrumTransform.cxx:1299
 TSpectrumTransform.cxx:1300
 TSpectrumTransform.cxx:1301
 TSpectrumTransform.cxx:1302
 TSpectrumTransform.cxx:1303
 TSpectrumTransform.cxx:1304
 TSpectrumTransform.cxx:1305
 TSpectrumTransform.cxx:1306
 TSpectrumTransform.cxx:1307
 TSpectrumTransform.cxx:1308
 TSpectrumTransform.cxx:1309
 TSpectrumTransform.cxx:1310
 TSpectrumTransform.cxx:1311
 TSpectrumTransform.cxx:1312
 TSpectrumTransform.cxx:1313
 TSpectrumTransform.cxx:1314
 TSpectrumTransform.cxx:1315
 TSpectrumTransform.cxx:1316
 TSpectrumTransform.cxx:1317
 TSpectrumTransform.cxx:1318
 TSpectrumTransform.cxx:1319
 TSpectrumTransform.cxx:1320
 TSpectrumTransform.cxx:1321
 TSpectrumTransform.cxx:1322
 TSpectrumTransform.cxx:1323
 TSpectrumTransform.cxx:1324
 TSpectrumTransform.cxx:1325
 TSpectrumTransform.cxx:1326
 TSpectrumTransform.cxx:1327
 TSpectrumTransform.cxx:1328
 TSpectrumTransform.cxx:1329
 TSpectrumTransform.cxx:1330
 TSpectrumTransform.cxx:1331
 TSpectrumTransform.cxx:1332
 TSpectrumTransform.cxx:1333
 TSpectrumTransform.cxx:1334
 TSpectrumTransform.cxx:1335
 TSpectrumTransform.cxx:1336
 TSpectrumTransform.cxx:1337
 TSpectrumTransform.cxx:1338
 TSpectrumTransform.cxx:1339
 TSpectrumTransform.cxx:1340
 TSpectrumTransform.cxx:1341
 TSpectrumTransform.cxx:1342
 TSpectrumTransform.cxx:1343
 TSpectrumTransform.cxx:1344
 TSpectrumTransform.cxx:1345
 TSpectrumTransform.cxx:1346
 TSpectrumTransform.cxx:1347
 TSpectrumTransform.cxx:1348
 TSpectrumTransform.cxx:1349
 TSpectrumTransform.cxx:1350
 TSpectrumTransform.cxx:1351
 TSpectrumTransform.cxx:1352
 TSpectrumTransform.cxx:1353
 TSpectrumTransform.cxx:1354
 TSpectrumTransform.cxx:1355
 TSpectrumTransform.cxx:1356
 TSpectrumTransform.cxx:1357
 TSpectrumTransform.cxx:1358
 TSpectrumTransform.cxx:1359
 TSpectrumTransform.cxx:1360
 TSpectrumTransform.cxx:1361
 TSpectrumTransform.cxx:1362
 TSpectrumTransform.cxx:1363
 TSpectrumTransform.cxx:1364
 TSpectrumTransform.cxx:1365
 TSpectrumTransform.cxx:1366
 TSpectrumTransform.cxx:1367
 TSpectrumTransform.cxx:1368
 TSpectrumTransform.cxx:1369
 TSpectrumTransform.cxx:1370
 TSpectrumTransform.cxx:1371
 TSpectrumTransform.cxx:1372
 TSpectrumTransform.cxx:1373
 TSpectrumTransform.cxx:1374
 TSpectrumTransform.cxx:1375
 TSpectrumTransform.cxx:1376
 TSpectrumTransform.cxx:1377
 TSpectrumTransform.cxx:1378
 TSpectrumTransform.cxx:1379
 TSpectrumTransform.cxx:1380
 TSpectrumTransform.cxx:1381
 TSpectrumTransform.cxx:1382
 TSpectrumTransform.cxx:1383
 TSpectrumTransform.cxx:1384
 TSpectrumTransform.cxx:1385
 TSpectrumTransform.cxx:1386
 TSpectrumTransform.cxx:1387
 TSpectrumTransform.cxx:1388
 TSpectrumTransform.cxx:1389
 TSpectrumTransform.cxx:1390
 TSpectrumTransform.cxx:1391
 TSpectrumTransform.cxx:1392
 TSpectrumTransform.cxx:1393
 TSpectrumTransform.cxx:1394
 TSpectrumTransform.cxx:1395
 TSpectrumTransform.cxx:1396
 TSpectrumTransform.cxx:1397
 TSpectrumTransform.cxx:1398
 TSpectrumTransform.cxx:1399
 TSpectrumTransform.cxx:1400
 TSpectrumTransform.cxx:1401
 TSpectrumTransform.cxx:1402
 TSpectrumTransform.cxx:1403
 TSpectrumTransform.cxx:1404
 TSpectrumTransform.cxx:1405
 TSpectrumTransform.cxx:1406
 TSpectrumTransform.cxx:1407
 TSpectrumTransform.cxx:1408
 TSpectrumTransform.cxx:1409
 TSpectrumTransform.cxx:1410
 TSpectrumTransform.cxx:1411
 TSpectrumTransform.cxx:1412
 TSpectrumTransform.cxx:1413
 TSpectrumTransform.cxx:1414
 TSpectrumTransform.cxx:1415
 TSpectrumTransform.cxx:1416
 TSpectrumTransform.cxx:1417
 TSpectrumTransform.cxx:1418
 TSpectrumTransform.cxx:1419
 TSpectrumTransform.cxx:1420
 TSpectrumTransform.cxx:1421
 TSpectrumTransform.cxx:1422
 TSpectrumTransform.cxx:1423
 TSpectrumTransform.cxx:1424
 TSpectrumTransform.cxx:1425
 TSpectrumTransform.cxx:1426
 TSpectrumTransform.cxx:1427
 TSpectrumTransform.cxx:1428
 TSpectrumTransform.cxx:1429
 TSpectrumTransform.cxx:1430
 TSpectrumTransform.cxx:1431
 TSpectrumTransform.cxx:1432
 TSpectrumTransform.cxx:1433
 TSpectrumTransform.cxx:1434
 TSpectrumTransform.cxx:1435
 TSpectrumTransform.cxx:1436
 TSpectrumTransform.cxx:1437
 TSpectrumTransform.cxx:1438
 TSpectrumTransform.cxx:1439
 TSpectrumTransform.cxx:1440
 TSpectrumTransform.cxx:1441
 TSpectrumTransform.cxx:1442
 TSpectrumTransform.cxx:1443
 TSpectrumTransform.cxx:1444
 TSpectrumTransform.cxx:1445
 TSpectrumTransform.cxx:1446
 TSpectrumTransform.cxx:1447
 TSpectrumTransform.cxx:1448
 TSpectrumTransform.cxx:1449
 TSpectrumTransform.cxx:1450
 TSpectrumTransform.cxx:1451
 TSpectrumTransform.cxx:1452
 TSpectrumTransform.cxx:1453
 TSpectrumTransform.cxx:1454
 TSpectrumTransform.cxx:1455
 TSpectrumTransform.cxx:1456
 TSpectrumTransform.cxx:1457
 TSpectrumTransform.cxx:1458
 TSpectrumTransform.cxx:1459
 TSpectrumTransform.cxx:1460
 TSpectrumTransform.cxx:1461
 TSpectrumTransform.cxx:1462
 TSpectrumTransform.cxx:1463
 TSpectrumTransform.cxx:1464
 TSpectrumTransform.cxx:1465
 TSpectrumTransform.cxx:1466
 TSpectrumTransform.cxx:1467
 TSpectrumTransform.cxx:1468
 TSpectrumTransform.cxx:1469
 TSpectrumTransform.cxx:1470
 TSpectrumTransform.cxx:1471
 TSpectrumTransform.cxx:1472
 TSpectrumTransform.cxx:1473
 TSpectrumTransform.cxx:1474
 TSpectrumTransform.cxx:1475
 TSpectrumTransform.cxx:1476
 TSpectrumTransform.cxx:1477
 TSpectrumTransform.cxx:1478
 TSpectrumTransform.cxx:1479
 TSpectrumTransform.cxx:1480
 TSpectrumTransform.cxx:1481
 TSpectrumTransform.cxx:1482
 TSpectrumTransform.cxx:1483
 TSpectrumTransform.cxx:1484
 TSpectrumTransform.cxx:1485
 TSpectrumTransform.cxx:1486
 TSpectrumTransform.cxx:1487
 TSpectrumTransform.cxx:1488
 TSpectrumTransform.cxx:1489
 TSpectrumTransform.cxx:1490
 TSpectrumTransform.cxx:1491
 TSpectrumTransform.cxx:1492
 TSpectrumTransform.cxx:1493
 TSpectrumTransform.cxx:1494
 TSpectrumTransform.cxx:1495
 TSpectrumTransform.cxx:1496
 TSpectrumTransform.cxx:1497
 TSpectrumTransform.cxx:1498
 TSpectrumTransform.cxx:1499
 TSpectrumTransform.cxx:1500
 TSpectrumTransform.cxx:1501
 TSpectrumTransform.cxx:1502
 TSpectrumTransform.cxx:1503
 TSpectrumTransform.cxx:1504
 TSpectrumTransform.cxx:1505
 TSpectrumTransform.cxx:1506
 TSpectrumTransform.cxx:1507
 TSpectrumTransform.cxx:1508
 TSpectrumTransform.cxx:1509
 TSpectrumTransform.cxx:1510
 TSpectrumTransform.cxx:1511
 TSpectrumTransform.cxx:1512
 TSpectrumTransform.cxx:1513
 TSpectrumTransform.cxx:1514
 TSpectrumTransform.cxx:1515
 TSpectrumTransform.cxx:1516
 TSpectrumTransform.cxx:1517
 TSpectrumTransform.cxx:1518
 TSpectrumTransform.cxx:1519
 TSpectrumTransform.cxx:1520
 TSpectrumTransform.cxx:1521
 TSpectrumTransform.cxx:1522
 TSpectrumTransform.cxx:1523
 TSpectrumTransform.cxx:1524
 TSpectrumTransform.cxx:1525
 TSpectrumTransform.cxx:1526
 TSpectrumTransform.cxx:1527
 TSpectrumTransform.cxx:1528
 TSpectrumTransform.cxx:1529
 TSpectrumTransform.cxx:1530
 TSpectrumTransform.cxx:1531
 TSpectrumTransform.cxx:1532
 TSpectrumTransform.cxx:1533
 TSpectrumTransform.cxx:1534
 TSpectrumTransform.cxx:1535
 TSpectrumTransform.cxx:1536
 TSpectrumTransform.cxx:1537
 TSpectrumTransform.cxx:1538
 TSpectrumTransform.cxx:1539
 TSpectrumTransform.cxx:1540
 TSpectrumTransform.cxx:1541
 TSpectrumTransform.cxx:1542
 TSpectrumTransform.cxx:1543
 TSpectrumTransform.cxx:1544
 TSpectrumTransform.cxx:1545
 TSpectrumTransform.cxx:1546
 TSpectrumTransform.cxx:1547
 TSpectrumTransform.cxx:1548
 TSpectrumTransform.cxx:1549
 TSpectrumTransform.cxx:1550
 TSpectrumTransform.cxx:1551
 TSpectrumTransform.cxx:1552
 TSpectrumTransform.cxx:1553
 TSpectrumTransform.cxx:1554
 TSpectrumTransform.cxx:1555
 TSpectrumTransform.cxx:1556
 TSpectrumTransform.cxx:1557
 TSpectrumTransform.cxx:1558
 TSpectrumTransform.cxx:1559
 TSpectrumTransform.cxx:1560
 TSpectrumTransform.cxx:1561
 TSpectrumTransform.cxx:1562
 TSpectrumTransform.cxx:1563
 TSpectrumTransform.cxx:1564
 TSpectrumTransform.cxx:1565
 TSpectrumTransform.cxx:1566
 TSpectrumTransform.cxx:1567
 TSpectrumTransform.cxx:1568
 TSpectrumTransform.cxx:1569
 TSpectrumTransform.cxx:1570
 TSpectrumTransform.cxx:1571
 TSpectrumTransform.cxx:1572
 TSpectrumTransform.cxx:1573
 TSpectrumTransform.cxx:1574
 TSpectrumTransform.cxx:1575
 TSpectrumTransform.cxx:1576
 TSpectrumTransform.cxx:1577
 TSpectrumTransform.cxx:1578
 TSpectrumTransform.cxx:1579
 TSpectrumTransform.cxx:1580
 TSpectrumTransform.cxx:1581
 TSpectrumTransform.cxx:1582
 TSpectrumTransform.cxx:1583
 TSpectrumTransform.cxx:1584
 TSpectrumTransform.cxx:1585
 TSpectrumTransform.cxx:1586
 TSpectrumTransform.cxx:1587
 TSpectrumTransform.cxx:1588
 TSpectrumTransform.cxx:1589
 TSpectrumTransform.cxx:1590
 TSpectrumTransform.cxx:1591
 TSpectrumTransform.cxx:1592
 TSpectrumTransform.cxx:1593
 TSpectrumTransform.cxx:1594
 TSpectrumTransform.cxx:1595
 TSpectrumTransform.cxx:1596
 TSpectrumTransform.cxx:1597
 TSpectrumTransform.cxx:1598
 TSpectrumTransform.cxx:1599
 TSpectrumTransform.cxx:1600
 TSpectrumTransform.cxx:1601
 TSpectrumTransform.cxx:1602
 TSpectrumTransform.cxx:1603
 TSpectrumTransform.cxx:1604
 TSpectrumTransform.cxx:1605
 TSpectrumTransform.cxx:1606
 TSpectrumTransform.cxx:1607
 TSpectrumTransform.cxx:1608
 TSpectrumTransform.cxx:1609
 TSpectrumTransform.cxx:1610
 TSpectrumTransform.cxx:1611
 TSpectrumTransform.cxx:1612
 TSpectrumTransform.cxx:1613
 TSpectrumTransform.cxx:1614
 TSpectrumTransform.cxx:1615
 TSpectrumTransform.cxx:1616
 TSpectrumTransform.cxx:1617
 TSpectrumTransform.cxx:1618
 TSpectrumTransform.cxx:1619
 TSpectrumTransform.cxx:1620
 TSpectrumTransform.cxx:1621
 TSpectrumTransform.cxx:1622
 TSpectrumTransform.cxx:1623
 TSpectrumTransform.cxx:1624
 TSpectrumTransform.cxx:1625
 TSpectrumTransform.cxx:1626
 TSpectrumTransform.cxx:1627
 TSpectrumTransform.cxx:1628
 TSpectrumTransform.cxx:1629
 TSpectrumTransform.cxx:1630
 TSpectrumTransform.cxx:1631
 TSpectrumTransform.cxx:1632
 TSpectrumTransform.cxx:1633
 TSpectrumTransform.cxx:1634
 TSpectrumTransform.cxx:1635
 TSpectrumTransform.cxx:1636
 TSpectrumTransform.cxx:1637
 TSpectrumTransform.cxx:1638
 TSpectrumTransform.cxx:1639
 TSpectrumTransform.cxx:1640
 TSpectrumTransform.cxx:1641
 TSpectrumTransform.cxx:1642
 TSpectrumTransform.cxx:1643
 TSpectrumTransform.cxx:1644
 TSpectrumTransform.cxx:1645
 TSpectrumTransform.cxx:1646
 TSpectrumTransform.cxx:1647
 TSpectrumTransform.cxx:1648
 TSpectrumTransform.cxx:1649
 TSpectrumTransform.cxx:1650
 TSpectrumTransform.cxx:1651
 TSpectrumTransform.cxx:1652
 TSpectrumTransform.cxx:1653
 TSpectrumTransform.cxx:1654
 TSpectrumTransform.cxx:1655
 TSpectrumTransform.cxx:1656
 TSpectrumTransform.cxx:1657
 TSpectrumTransform.cxx:1658
 TSpectrumTransform.cxx:1659
 TSpectrumTransform.cxx:1660
 TSpectrumTransform.cxx:1661
 TSpectrumTransform.cxx:1662
 TSpectrumTransform.cxx:1663
 TSpectrumTransform.cxx:1664
 TSpectrumTransform.cxx:1665
 TSpectrumTransform.cxx:1666
 TSpectrumTransform.cxx:1667
 TSpectrumTransform.cxx:1668
 TSpectrumTransform.cxx:1669
 TSpectrumTransform.cxx:1670
 TSpectrumTransform.cxx:1671
 TSpectrumTransform.cxx:1672
 TSpectrumTransform.cxx:1673
 TSpectrumTransform.cxx:1674
 TSpectrumTransform.cxx:1675
 TSpectrumTransform.cxx:1676
 TSpectrumTransform.cxx:1677
 TSpectrumTransform.cxx:1678
 TSpectrumTransform.cxx:1679
 TSpectrumTransform.cxx:1680
 TSpectrumTransform.cxx:1681
 TSpectrumTransform.cxx:1682
 TSpectrumTransform.cxx:1683
 TSpectrumTransform.cxx:1684
 TSpectrumTransform.cxx:1685
 TSpectrumTransform.cxx:1686
 TSpectrumTransform.cxx:1687
 TSpectrumTransform.cxx:1688
 TSpectrumTransform.cxx:1689
 TSpectrumTransform.cxx:1690
 TSpectrumTransform.cxx:1691
 TSpectrumTransform.cxx:1692
 TSpectrumTransform.cxx:1693
 TSpectrumTransform.cxx:1694
 TSpectrumTransform.cxx:1695
 TSpectrumTransform.cxx:1696
 TSpectrumTransform.cxx:1697
 TSpectrumTransform.cxx:1698
 TSpectrumTransform.cxx:1699
 TSpectrumTransform.cxx:1700
 TSpectrumTransform.cxx:1701
 TSpectrumTransform.cxx:1702
 TSpectrumTransform.cxx:1703
 TSpectrumTransform.cxx:1704
 TSpectrumTransform.cxx:1705
 TSpectrumTransform.cxx:1706
 TSpectrumTransform.cxx:1707
 TSpectrumTransform.cxx:1708
 TSpectrumTransform.cxx:1709
 TSpectrumTransform.cxx:1710
 TSpectrumTransform.cxx:1711
 TSpectrumTransform.cxx:1712
 TSpectrumTransform.cxx:1713
 TSpectrumTransform.cxx:1714
 TSpectrumTransform.cxx:1715
 TSpectrumTransform.cxx:1716
 TSpectrumTransform.cxx:1717
 TSpectrumTransform.cxx:1718
 TSpectrumTransform.cxx:1719
 TSpectrumTransform.cxx:1720
 TSpectrumTransform.cxx:1721
 TSpectrumTransform.cxx:1722
 TSpectrumTransform.cxx:1723
 TSpectrumTransform.cxx:1724
 TSpectrumTransform.cxx:1725
 TSpectrumTransform.cxx:1726
 TSpectrumTransform.cxx:1727
 TSpectrumTransform.cxx:1728
 TSpectrumTransform.cxx:1729
 TSpectrumTransform.cxx:1730
 TSpectrumTransform.cxx:1731
 TSpectrumTransform.cxx:1732
 TSpectrumTransform.cxx:1733
 TSpectrumTransform.cxx:1734
 TSpectrumTransform.cxx:1735
 TSpectrumTransform.cxx:1736
 TSpectrumTransform.cxx:1737
 TSpectrumTransform.cxx:1738
 TSpectrumTransform.cxx:1739
 TSpectrumTransform.cxx:1740
 TSpectrumTransform.cxx:1741
 TSpectrumTransform.cxx:1742
 TSpectrumTransform.cxx:1743
 TSpectrumTransform.cxx:1744
 TSpectrumTransform.cxx:1745
 TSpectrumTransform.cxx:1746
 TSpectrumTransform.cxx:1747
 TSpectrumTransform.cxx:1748
 TSpectrumTransform.cxx:1749
 TSpectrumTransform.cxx:1750
 TSpectrumTransform.cxx:1751
 TSpectrumTransform.cxx:1752
 TSpectrumTransform.cxx:1753
 TSpectrumTransform.cxx:1754
 TSpectrumTransform.cxx:1755
 TSpectrumTransform.cxx:1756
 TSpectrumTransform.cxx:1757
 TSpectrumTransform.cxx:1758
 TSpectrumTransform.cxx:1759
 TSpectrumTransform.cxx:1760
 TSpectrumTransform.cxx:1761
 TSpectrumTransform.cxx:1762
 TSpectrumTransform.cxx:1763
 TSpectrumTransform.cxx:1764
 TSpectrumTransform.cxx:1765
 TSpectrumTransform.cxx:1766
 TSpectrumTransform.cxx:1767
 TSpectrumTransform.cxx:1768
 TSpectrumTransform.cxx:1769
 TSpectrumTransform.cxx:1770
 TSpectrumTransform.cxx:1771
 TSpectrumTransform.cxx:1772
 TSpectrumTransform.cxx:1773
 TSpectrumTransform.cxx:1774
 TSpectrumTransform.cxx:1775
 TSpectrumTransform.cxx:1776
 TSpectrumTransform.cxx:1777
 TSpectrumTransform.cxx:1778
 TSpectrumTransform.cxx:1779
 TSpectrumTransform.cxx:1780
 TSpectrumTransform.cxx:1781
 TSpectrumTransform.cxx:1782
 TSpectrumTransform.cxx:1783
 TSpectrumTransform.cxx:1784
 TSpectrumTransform.cxx:1785
 TSpectrumTransform.cxx:1786
 TSpectrumTransform.cxx:1787
 TSpectrumTransform.cxx:1788
 TSpectrumTransform.cxx:1789
 TSpectrumTransform.cxx:1790
 TSpectrumTransform.cxx:1791
 TSpectrumTransform.cxx:1792
 TSpectrumTransform.cxx:1793
 TSpectrumTransform.cxx:1794
 TSpectrumTransform.cxx:1795
 TSpectrumTransform.cxx:1796
 TSpectrumTransform.cxx:1797
 TSpectrumTransform.cxx:1798
 TSpectrumTransform.cxx:1799
 TSpectrumTransform.cxx:1800
 TSpectrumTransform.cxx:1801
 TSpectrumTransform.cxx:1802
 TSpectrumTransform.cxx:1803
 TSpectrumTransform.cxx:1804
 TSpectrumTransform.cxx:1805
 TSpectrumTransform.cxx:1806
 TSpectrumTransform.cxx:1807
 TSpectrumTransform.cxx:1808
 TSpectrumTransform.cxx:1809
 TSpectrumTransform.cxx:1810
 TSpectrumTransform.cxx:1811
 TSpectrumTransform.cxx:1812
 TSpectrumTransform.cxx:1813
 TSpectrumTransform.cxx:1814
 TSpectrumTransform.cxx:1815
 TSpectrumTransform.cxx:1816
 TSpectrumTransform.cxx:1817
 TSpectrumTransform.cxx:1818
 TSpectrumTransform.cxx:1819
 TSpectrumTransform.cxx:1820
 TSpectrumTransform.cxx:1821
 TSpectrumTransform.cxx:1822
 TSpectrumTransform.cxx:1823
 TSpectrumTransform.cxx:1824
 TSpectrumTransform.cxx:1825
 TSpectrumTransform.cxx:1826
 TSpectrumTransform.cxx:1827
 TSpectrumTransform.cxx:1828
 TSpectrumTransform.cxx:1829
 TSpectrumTransform.cxx:1830
 TSpectrumTransform.cxx:1831
 TSpectrumTransform.cxx:1832
 TSpectrumTransform.cxx:1833
 TSpectrumTransform.cxx:1834
 TSpectrumTransform.cxx:1835
 TSpectrumTransform.cxx:1836
 TSpectrumTransform.cxx:1837
 TSpectrumTransform.cxx:1838
 TSpectrumTransform.cxx:1839
 TSpectrumTransform.cxx:1840
 TSpectrumTransform.cxx:1841
 TSpectrumTransform.cxx:1842
 TSpectrumTransform.cxx:1843
 TSpectrumTransform.cxx:1844
 TSpectrumTransform.cxx:1845
 TSpectrumTransform.cxx:1846
 TSpectrumTransform.cxx:1847
 TSpectrumTransform.cxx:1848
 TSpectrumTransform.cxx:1849
 TSpectrumTransform.cxx:1850
 TSpectrumTransform.cxx:1851
 TSpectrumTransform.cxx:1852
 TSpectrumTransform.cxx:1853
 TSpectrumTransform.cxx:1854
 TSpectrumTransform.cxx:1855
 TSpectrumTransform.cxx:1856
 TSpectrumTransform.cxx:1857
 TSpectrumTransform.cxx:1858
 TSpectrumTransform.cxx:1859
 TSpectrumTransform.cxx:1860
 TSpectrumTransform.cxx:1861
 TSpectrumTransform.cxx:1862
 TSpectrumTransform.cxx:1863
 TSpectrumTransform.cxx:1864
 TSpectrumTransform.cxx:1865
 TSpectrumTransform.cxx:1866
 TSpectrumTransform.cxx:1867
 TSpectrumTransform.cxx:1868
 TSpectrumTransform.cxx:1869
 TSpectrumTransform.cxx:1870
 TSpectrumTransform.cxx:1871
 TSpectrumTransform.cxx:1872
 TSpectrumTransform.cxx:1873
 TSpectrumTransform.cxx:1874
 TSpectrumTransform.cxx:1875
 TSpectrumTransform.cxx:1876
 TSpectrumTransform.cxx:1877
 TSpectrumTransform.cxx:1878
 TSpectrumTransform.cxx:1879
 TSpectrumTransform.cxx:1880
 TSpectrumTransform.cxx:1881
 TSpectrumTransform.cxx:1882
 TSpectrumTransform.cxx:1883
 TSpectrumTransform.cxx:1884
 TSpectrumTransform.cxx:1885
 TSpectrumTransform.cxx:1886
 TSpectrumTransform.cxx:1887
 TSpectrumTransform.cxx:1888
 TSpectrumTransform.cxx:1889
 TSpectrumTransform.cxx:1890
 TSpectrumTransform.cxx:1891
 TSpectrumTransform.cxx:1892
 TSpectrumTransform.cxx:1893
 TSpectrumTransform.cxx:1894
 TSpectrumTransform.cxx:1895
 TSpectrumTransform.cxx:1896
 TSpectrumTransform.cxx:1897
 TSpectrumTransform.cxx:1898
 TSpectrumTransform.cxx:1899
 TSpectrumTransform.cxx:1900
 TSpectrumTransform.cxx:1901
 TSpectrumTransform.cxx:1902
 TSpectrumTransform.cxx:1903
 TSpectrumTransform.cxx:1904
 TSpectrumTransform.cxx:1905
 TSpectrumTransform.cxx:1906
 TSpectrumTransform.cxx:1907
 TSpectrumTransform.cxx:1908
 TSpectrumTransform.cxx:1909
 TSpectrumTransform.cxx:1910
 TSpectrumTransform.cxx:1911
 TSpectrumTransform.cxx:1912
 TSpectrumTransform.cxx:1913
 TSpectrumTransform.cxx:1914
 TSpectrumTransform.cxx:1915
 TSpectrumTransform.cxx:1916
 TSpectrumTransform.cxx:1917
 TSpectrumTransform.cxx:1918
 TSpectrumTransform.cxx:1919
 TSpectrumTransform.cxx:1920
 TSpectrumTransform.cxx:1921
 TSpectrumTransform.cxx:1922
 TSpectrumTransform.cxx:1923
 TSpectrumTransform.cxx:1924
 TSpectrumTransform.cxx:1925
 TSpectrumTransform.cxx:1926
 TSpectrumTransform.cxx:1927
 TSpectrumTransform.cxx:1928
 TSpectrumTransform.cxx:1929
 TSpectrumTransform.cxx:1930
 TSpectrumTransform.cxx:1931
 TSpectrumTransform.cxx:1932
 TSpectrumTransform.cxx:1933
 TSpectrumTransform.cxx:1934
 TSpectrumTransform.cxx:1935
 TSpectrumTransform.cxx:1936
 TSpectrumTransform.cxx:1937
 TSpectrumTransform.cxx:1938
 TSpectrumTransform.cxx:1939
 TSpectrumTransform.cxx:1940
 TSpectrumTransform.cxx:1941
 TSpectrumTransform.cxx:1942
 TSpectrumTransform.cxx:1943
 TSpectrumTransform.cxx:1944
 TSpectrumTransform.cxx:1945
 TSpectrumTransform.cxx:1946
 TSpectrumTransform.cxx:1947
 TSpectrumTransform.cxx:1948
 TSpectrumTransform.cxx:1949
 TSpectrumTransform.cxx:1950
 TSpectrumTransform.cxx:1951
 TSpectrumTransform.cxx:1952
 TSpectrumTransform.cxx:1953
 TSpectrumTransform.cxx:1954
 TSpectrumTransform.cxx:1955
 TSpectrumTransform.cxx:1956
 TSpectrumTransform.cxx:1957
 TSpectrumTransform.cxx:1958
 TSpectrumTransform.cxx:1959
 TSpectrumTransform.cxx:1960
 TSpectrumTransform.cxx:1961
 TSpectrumTransform.cxx:1962
 TSpectrumTransform.cxx:1963
 TSpectrumTransform.cxx:1964
 TSpectrumTransform.cxx:1965
 TSpectrumTransform.cxx:1966
 TSpectrumTransform.cxx:1967
 TSpectrumTransform.cxx:1968
 TSpectrumTransform.cxx:1969
 TSpectrumTransform.cxx:1970
 TSpectrumTransform.cxx:1971
 TSpectrumTransform.cxx:1972
 TSpectrumTransform.cxx:1973
 TSpectrumTransform.cxx:1974
 TSpectrumTransform.cxx:1975
 TSpectrumTransform.cxx:1976
 TSpectrumTransform.cxx:1977
 TSpectrumTransform.cxx:1978
 TSpectrumTransform.cxx:1979
 TSpectrumTransform.cxx:1980
 TSpectrumTransform.cxx:1981
 TSpectrumTransform.cxx:1982
 TSpectrumTransform.cxx:1983
 TSpectrumTransform.cxx:1984
 TSpectrumTransform.cxx:1985
 TSpectrumTransform.cxx:1986
 TSpectrumTransform.cxx:1987
 TSpectrumTransform.cxx:1988
 TSpectrumTransform.cxx:1989
 TSpectrumTransform.cxx:1990
 TSpectrumTransform.cxx:1991
 TSpectrumTransform.cxx:1992
 TSpectrumTransform.cxx:1993
 TSpectrumTransform.cxx:1994
 TSpectrumTransform.cxx:1995
 TSpectrumTransform.cxx:1996
 TSpectrumTransform.cxx:1997
 TSpectrumTransform.cxx:1998
 TSpectrumTransform.cxx:1999
 TSpectrumTransform.cxx:2000
 TSpectrumTransform.cxx:2001
 TSpectrumTransform.cxx:2002
 TSpectrumTransform.cxx:2003
 TSpectrumTransform.cxx:2004
 TSpectrumTransform.cxx:2005
 TSpectrumTransform.cxx:2006
 TSpectrumTransform.cxx:2007
 TSpectrumTransform.cxx:2008
 TSpectrumTransform.cxx:2009
 TSpectrumTransform.cxx:2010
 TSpectrumTransform.cxx:2011
 TSpectrumTransform.cxx:2012
 TSpectrumTransform.cxx:2013
 TSpectrumTransform.cxx:2014
 TSpectrumTransform.cxx:2015
 TSpectrumTransform.cxx:2016
 TSpectrumTransform.cxx:2017
 TSpectrumTransform.cxx:2018
 TSpectrumTransform.cxx:2019
 TSpectrumTransform.cxx:2020
 TSpectrumTransform.cxx:2021
 TSpectrumTransform.cxx:2022
 TSpectrumTransform.cxx:2023
 TSpectrumTransform.cxx:2024
 TSpectrumTransform.cxx:2025
 TSpectrumTransform.cxx:2026
 TSpectrumTransform.cxx:2027
 TSpectrumTransform.cxx:2028
 TSpectrumTransform.cxx:2029
 TSpectrumTransform.cxx:2030
 TSpectrumTransform.cxx:2031
 TSpectrumTransform.cxx:2032
 TSpectrumTransform.cxx:2033
 TSpectrumTransform.cxx:2034
 TSpectrumTransform.cxx:2035
 TSpectrumTransform.cxx:2036
 TSpectrumTransform.cxx:2037
 TSpectrumTransform.cxx:2038
 TSpectrumTransform.cxx:2039
 TSpectrumTransform.cxx:2040
 TSpectrumTransform.cxx:2041
 TSpectrumTransform.cxx:2042
 TSpectrumTransform.cxx:2043
 TSpectrumTransform.cxx:2044
 TSpectrumTransform.cxx:2045
 TSpectrumTransform.cxx:2046
 TSpectrumTransform.cxx:2047
 TSpectrumTransform.cxx:2048
 TSpectrumTransform.cxx:2049
 TSpectrumTransform.cxx:2050
 TSpectrumTransform.cxx:2051
 TSpectrumTransform.cxx:2052
 TSpectrumTransform.cxx:2053
 TSpectrumTransform.cxx:2054
 TSpectrumTransform.cxx:2055
 TSpectrumTransform.cxx:2056
 TSpectrumTransform.cxx:2057
 TSpectrumTransform.cxx:2058
 TSpectrumTransform.cxx:2059
 TSpectrumTransform.cxx:2060
 TSpectrumTransform.cxx:2061
 TSpectrumTransform.cxx:2062
 TSpectrumTransform.cxx:2063
 TSpectrumTransform.cxx:2064
 TSpectrumTransform.cxx:2065
 TSpectrumTransform.cxx:2066
 TSpectrumTransform.cxx:2067
 TSpectrumTransform.cxx:2068
 TSpectrumTransform.cxx:2069
 TSpectrumTransform.cxx:2070
 TSpectrumTransform.cxx:2071
 TSpectrumTransform.cxx:2072
 TSpectrumTransform.cxx:2073
 TSpectrumTransform.cxx:2074
 TSpectrumTransform.cxx:2075
 TSpectrumTransform.cxx:2076
 TSpectrumTransform.cxx:2077
 TSpectrumTransform.cxx:2078
 TSpectrumTransform.cxx:2079
 TSpectrumTransform.cxx:2080
 TSpectrumTransform.cxx:2081
 TSpectrumTransform.cxx:2082
 TSpectrumTransform.cxx:2083
 TSpectrumTransform.cxx:2084
 TSpectrumTransform.cxx:2085
 TSpectrumTransform.cxx:2086
 TSpectrumTransform.cxx:2087
 TSpectrumTransform.cxx:2088
 TSpectrumTransform.cxx:2089
 TSpectrumTransform.cxx:2090
 TSpectrumTransform.cxx:2091
 TSpectrumTransform.cxx:2092
 TSpectrumTransform.cxx:2093
 TSpectrumTransform.cxx:2094
 TSpectrumTransform.cxx:2095
 TSpectrumTransform.cxx:2096
 TSpectrumTransform.cxx:2097
 TSpectrumTransform.cxx:2098
 TSpectrumTransform.cxx:2099
 TSpectrumTransform.cxx:2100
 TSpectrumTransform.cxx:2101
 TSpectrumTransform.cxx:2102
 TSpectrumTransform.cxx:2103
 TSpectrumTransform.cxx:2104
 TSpectrumTransform.cxx:2105
 TSpectrumTransform.cxx:2106
 TSpectrumTransform.cxx:2107
 TSpectrumTransform.cxx:2108
 TSpectrumTransform.cxx:2109
 TSpectrumTransform.cxx:2110
 TSpectrumTransform.cxx:2111
 TSpectrumTransform.cxx:2112
 TSpectrumTransform.cxx:2113
 TSpectrumTransform.cxx:2114
 TSpectrumTransform.cxx:2115
 TSpectrumTransform.cxx:2116
 TSpectrumTransform.cxx:2117
 TSpectrumTransform.cxx:2118
 TSpectrumTransform.cxx:2119
 TSpectrumTransform.cxx:2120
 TSpectrumTransform.cxx:2121
 TSpectrumTransform.cxx:2122
 TSpectrumTransform.cxx:2123
 TSpectrumTransform.cxx:2124
 TSpectrumTransform.cxx:2125
 TSpectrumTransform.cxx:2126
 TSpectrumTransform.cxx:2127
 TSpectrumTransform.cxx:2128
 TSpectrumTransform.cxx:2129
 TSpectrumTransform.cxx:2130
 TSpectrumTransform.cxx:2131
 TSpectrumTransform.cxx:2132
 TSpectrumTransform.cxx:2133
 TSpectrumTransform.cxx:2134
 TSpectrumTransform.cxx:2135
 TSpectrumTransform.cxx:2136
 TSpectrumTransform.cxx:2137
 TSpectrumTransform.cxx:2138
 TSpectrumTransform.cxx:2139
 TSpectrumTransform.cxx:2140
 TSpectrumTransform.cxx:2141
 TSpectrumTransform.cxx:2142
 TSpectrumTransform.cxx:2143
 TSpectrumTransform.cxx:2144
 TSpectrumTransform.cxx:2145
 TSpectrumTransform.cxx:2146
 TSpectrumTransform.cxx:2147
 TSpectrumTransform.cxx:2148
 TSpectrumTransform.cxx:2149
 TSpectrumTransform.cxx:2150
 TSpectrumTransform.cxx:2151
 TSpectrumTransform.cxx:2152
 TSpectrumTransform.cxx:2153
 TSpectrumTransform.cxx:2154
 TSpectrumTransform.cxx:2155
 TSpectrumTransform.cxx:2156
 TSpectrumTransform.cxx:2157
 TSpectrumTransform.cxx:2158
 TSpectrumTransform.cxx:2159
 TSpectrumTransform.cxx:2160
 TSpectrumTransform.cxx:2161
 TSpectrumTransform.cxx:2162
 TSpectrumTransform.cxx:2163
 TSpectrumTransform.cxx:2164
 TSpectrumTransform.cxx:2165
 TSpectrumTransform.cxx:2166
 TSpectrumTransform.cxx:2167
 TSpectrumTransform.cxx:2168
 TSpectrumTransform.cxx:2169
 TSpectrumTransform.cxx:2170
 TSpectrumTransform.cxx:2171
 TSpectrumTransform.cxx:2172
 TSpectrumTransform.cxx:2173
 TSpectrumTransform.cxx:2174
 TSpectrumTransform.cxx:2175
 TSpectrumTransform.cxx:2176
 TSpectrumTransform.cxx:2177
 TSpectrumTransform.cxx:2178
 TSpectrumTransform.cxx:2179
 TSpectrumTransform.cxx:2180
 TSpectrumTransform.cxx:2181
 TSpectrumTransform.cxx:2182
 TSpectrumTransform.cxx:2183
 TSpectrumTransform.cxx:2184
 TSpectrumTransform.cxx:2185
 TSpectrumTransform.cxx:2186
 TSpectrumTransform.cxx:2187
 TSpectrumTransform.cxx:2188
 TSpectrumTransform.cxx:2189
 TSpectrumTransform.cxx:2190
 TSpectrumTransform.cxx:2191
 TSpectrumTransform.cxx:2192
 TSpectrumTransform.cxx:2193
 TSpectrumTransform.cxx:2194
 TSpectrumTransform.cxx:2195
 TSpectrumTransform.cxx:2196
 TSpectrumTransform.cxx:2197
 TSpectrumTransform.cxx:2198
 TSpectrumTransform.cxx:2199
 TSpectrumTransform.cxx:2200
 TSpectrumTransform.cxx:2201
 TSpectrumTransform.cxx:2202
 TSpectrumTransform.cxx:2203
 TSpectrumTransform.cxx:2204
 TSpectrumTransform.cxx:2205
 TSpectrumTransform.cxx:2206
 TSpectrumTransform.cxx:2207
 TSpectrumTransform.cxx:2208
 TSpectrumTransform.cxx:2209
 TSpectrumTransform.cxx:2210
 TSpectrumTransform.cxx:2211
 TSpectrumTransform.cxx:2212
 TSpectrumTransform.cxx:2213
 TSpectrumTransform.cxx:2214
 TSpectrumTransform.cxx:2215
 TSpectrumTransform.cxx:2216
 TSpectrumTransform.cxx:2217
 TSpectrumTransform.cxx:2218
 TSpectrumTransform.cxx:2219
 TSpectrumTransform.cxx:2220
 TSpectrumTransform.cxx:2221
 TSpectrumTransform.cxx:2222
 TSpectrumTransform.cxx:2223
 TSpectrumTransform.cxx:2224
 TSpectrumTransform.cxx:2225
 TSpectrumTransform.cxx:2226
 TSpectrumTransform.cxx:2227
 TSpectrumTransform.cxx:2228
 TSpectrumTransform.cxx:2229
 TSpectrumTransform.cxx:2230
 TSpectrumTransform.cxx:2231
 TSpectrumTransform.cxx:2232
 TSpectrumTransform.cxx:2233
 TSpectrumTransform.cxx:2234
 TSpectrumTransform.cxx:2235
 TSpectrumTransform.cxx:2236
 TSpectrumTransform.cxx:2237
 TSpectrumTransform.cxx:2238
 TSpectrumTransform.cxx:2239
 TSpectrumTransform.cxx:2240
 TSpectrumTransform.cxx:2241
 TSpectrumTransform.cxx:2242
 TSpectrumTransform.cxx:2243
 TSpectrumTransform.cxx:2244
 TSpectrumTransform.cxx:2245
 TSpectrumTransform.cxx:2246
 TSpectrumTransform.cxx:2247
 TSpectrumTransform.cxx:2248
 TSpectrumTransform.cxx:2249
 TSpectrumTransform.cxx:2250
 TSpectrumTransform.cxx:2251
 TSpectrumTransform.cxx:2252
 TSpectrumTransform.cxx:2253
 TSpectrumTransform.cxx:2254
 TSpectrumTransform.cxx:2255
 TSpectrumTransform.cxx:2256
 TSpectrumTransform.cxx:2257
 TSpectrumTransform.cxx:2258
 TSpectrumTransform.cxx:2259
 TSpectrumTransform.cxx:2260
 TSpectrumTransform.cxx:2261
 TSpectrumTransform.cxx:2262
 TSpectrumTransform.cxx:2263
 TSpectrumTransform.cxx:2264
 TSpectrumTransform.cxx:2265
 TSpectrumTransform.cxx:2266
 TSpectrumTransform.cxx:2267
 TSpectrumTransform.cxx:2268
 TSpectrumTransform.cxx:2269
 TSpectrumTransform.cxx:2270
 TSpectrumTransform.cxx:2271
 TSpectrumTransform.cxx:2272
 TSpectrumTransform.cxx:2273
 TSpectrumTransform.cxx:2274
 TSpectrumTransform.cxx:2275
 TSpectrumTransform.cxx:2276
 TSpectrumTransform.cxx:2277
 TSpectrumTransform.cxx:2278
 TSpectrumTransform.cxx:2279
 TSpectrumTransform.cxx:2280
 TSpectrumTransform.cxx:2281
 TSpectrumTransform.cxx:2282
 TSpectrumTransform.cxx:2283
 TSpectrumTransform.cxx:2284
 TSpectrumTransform.cxx:2285
 TSpectrumTransform.cxx:2286
 TSpectrumTransform.cxx:2287
 TSpectrumTransform.cxx:2288
 TSpectrumTransform.cxx:2289
 TSpectrumTransform.cxx:2290
 TSpectrumTransform.cxx:2291
 TSpectrumTransform.cxx:2292
 TSpectrumTransform.cxx:2293
 TSpectrumTransform.cxx:2294
 TSpectrumTransform.cxx:2295
 TSpectrumTransform.cxx:2296
 TSpectrumTransform.cxx:2297
 TSpectrumTransform.cxx:2298
 TSpectrumTransform.cxx:2299
 TSpectrumTransform.cxx:2300
 TSpectrumTransform.cxx:2301
 TSpectrumTransform.cxx:2302
 TSpectrumTransform.cxx:2303
 TSpectrumTransform.cxx:2304
 TSpectrumTransform.cxx:2305
 TSpectrumTransform.cxx:2306
 TSpectrumTransform.cxx:2307
 TSpectrumTransform.cxx:2308
 TSpectrumTransform.cxx:2309
 TSpectrumTransform.cxx:2310
 TSpectrumTransform.cxx:2311
 TSpectrumTransform.cxx:2312
 TSpectrumTransform.cxx:2313
 TSpectrumTransform.cxx:2314
 TSpectrumTransform.cxx:2315
 TSpectrumTransform.cxx:2316
 TSpectrumTransform.cxx:2317
 TSpectrumTransform.cxx:2318
 TSpectrumTransform.cxx:2319
 TSpectrumTransform.cxx:2320
 TSpectrumTransform.cxx:2321
 TSpectrumTransform.cxx:2322
 TSpectrumTransform.cxx:2323
 TSpectrumTransform.cxx:2324
 TSpectrumTransform.cxx:2325
 TSpectrumTransform.cxx:2326
 TSpectrumTransform.cxx:2327
 TSpectrumTransform.cxx:2328
 TSpectrumTransform.cxx:2329
 TSpectrumTransform.cxx:2330
 TSpectrumTransform.cxx:2331
 TSpectrumTransform.cxx:2332
 TSpectrumTransform.cxx:2333
 TSpectrumTransform.cxx:2334
 TSpectrumTransform.cxx:2335
 TSpectrumTransform.cxx:2336
 TSpectrumTransform.cxx:2337
 TSpectrumTransform.cxx:2338
 TSpectrumTransform.cxx:2339
 TSpectrumTransform.cxx:2340
 TSpectrumTransform.cxx:2341
 TSpectrumTransform.cxx:2342
 TSpectrumTransform.cxx:2343
 TSpectrumTransform.cxx:2344
 TSpectrumTransform.cxx:2345
 TSpectrumTransform.cxx:2346
 TSpectrumTransform.cxx:2347
 TSpectrumTransform.cxx:2348
 TSpectrumTransform.cxx:2349
 TSpectrumTransform.cxx:2350
 TSpectrumTransform.cxx:2351
 TSpectrumTransform.cxx:2352
 TSpectrumTransform.cxx:2353
 TSpectrumTransform.cxx:2354
 TSpectrumTransform.cxx:2355
 TSpectrumTransform.cxx:2356
 TSpectrumTransform.cxx:2357
 TSpectrumTransform.cxx:2358
 TSpectrumTransform.cxx:2359
 TSpectrumTransform.cxx:2360
 TSpectrumTransform.cxx:2361
 TSpectrumTransform.cxx:2362
 TSpectrumTransform.cxx:2363
 TSpectrumTransform.cxx:2364
 TSpectrumTransform.cxx:2365
 TSpectrumTransform.cxx:2366
 TSpectrumTransform.cxx:2367
 TSpectrumTransform.cxx:2368
 TSpectrumTransform.cxx:2369
 TSpectrumTransform.cxx:2370
 TSpectrumTransform.cxx:2371
 TSpectrumTransform.cxx:2372
 TSpectrumTransform.cxx:2373
 TSpectrumTransform.cxx:2374
 TSpectrumTransform.cxx:2375
 TSpectrumTransform.cxx:2376
 TSpectrumTransform.cxx:2377
 TSpectrumTransform.cxx:2378
 TSpectrumTransform.cxx:2379
 TSpectrumTransform.cxx:2380
 TSpectrumTransform.cxx:2381
 TSpectrumTransform.cxx:2382
 TSpectrumTransform.cxx:2383
 TSpectrumTransform.cxx:2384
 TSpectrumTransform.cxx:2385
 TSpectrumTransform.cxx:2386
 TSpectrumTransform.cxx:2387
 TSpectrumTransform.cxx:2388
 TSpectrumTransform.cxx:2389
 TSpectrumTransform.cxx:2390
 TSpectrumTransform.cxx:2391
 TSpectrumTransform.cxx:2392
 TSpectrumTransform.cxx:2393
 TSpectrumTransform.cxx:2394
 TSpectrumTransform.cxx:2395
 TSpectrumTransform.cxx:2396
 TSpectrumTransform.cxx:2397
 TSpectrumTransform.cxx:2398
 TSpectrumTransform.cxx:2399
 TSpectrumTransform.cxx:2400
 TSpectrumTransform.cxx:2401
 TSpectrumTransform.cxx:2402
 TSpectrumTransform.cxx:2403
 TSpectrumTransform.cxx:2404
 TSpectrumTransform.cxx:2405
 TSpectrumTransform.cxx:2406
 TSpectrumTransform.cxx:2407
 TSpectrumTransform.cxx:2408
 TSpectrumTransform.cxx:2409
 TSpectrumTransform.cxx:2410
 TSpectrumTransform.cxx:2411
 TSpectrumTransform.cxx:2412
 TSpectrumTransform.cxx:2413
 TSpectrumTransform.cxx:2414
 TSpectrumTransform.cxx:2415
 TSpectrumTransform.cxx:2416
 TSpectrumTransform.cxx:2417
 TSpectrumTransform.cxx:2418
 TSpectrumTransform.cxx:2419
 TSpectrumTransform.cxx:2420
 TSpectrumTransform.cxx:2421
 TSpectrumTransform.cxx:2422
 TSpectrumTransform.cxx:2423
 TSpectrumTransform.cxx:2424
 TSpectrumTransform.cxx:2425
 TSpectrumTransform.cxx:2426
 TSpectrumTransform.cxx:2427
 TSpectrumTransform.cxx:2428
 TSpectrumTransform.cxx:2429
 TSpectrumTransform.cxx:2430
 TSpectrumTransform.cxx:2431
 TSpectrumTransform.cxx:2432
 TSpectrumTransform.cxx:2433
 TSpectrumTransform.cxx:2434
 TSpectrumTransform.cxx:2435
 TSpectrumTransform.cxx:2436
 TSpectrumTransform.cxx:2437
 TSpectrumTransform.cxx:2438
 TSpectrumTransform.cxx:2439
 TSpectrumTransform.cxx:2440
 TSpectrumTransform.cxx:2441
 TSpectrumTransform.cxx:2442
 TSpectrumTransform.cxx:2443
 TSpectrumTransform.cxx:2444
 TSpectrumTransform.cxx:2445
 TSpectrumTransform.cxx:2446
 TSpectrumTransform.cxx:2447
 TSpectrumTransform.cxx:2448
 TSpectrumTransform.cxx:2449
 TSpectrumTransform.cxx:2450
 TSpectrumTransform.cxx:2451
 TSpectrumTransform.cxx:2452
 TSpectrumTransform.cxx:2453
 TSpectrumTransform.cxx:2454
 TSpectrumTransform.cxx:2455
 TSpectrumTransform.cxx:2456
 TSpectrumTransform.cxx:2457
 TSpectrumTransform.cxx:2458
 TSpectrumTransform.cxx:2459
 TSpectrumTransform.cxx:2460
 TSpectrumTransform.cxx:2461
 TSpectrumTransform.cxx:2462
 TSpectrumTransform.cxx:2463
 TSpectrumTransform.cxx:2464
 TSpectrumTransform.cxx:2465
 TSpectrumTransform.cxx:2466
 TSpectrumTransform.cxx:2467
 TSpectrumTransform.cxx:2468
 TSpectrumTransform.cxx:2469
 TSpectrumTransform.cxx:2470
 TSpectrumTransform.cxx:2471
 TSpectrumTransform.cxx:2472
 TSpectrumTransform.cxx:2473
 TSpectrumTransform.cxx:2474
 TSpectrumTransform.cxx:2475
 TSpectrumTransform.cxx:2476
 TSpectrumTransform.cxx:2477
 TSpectrumTransform.cxx:2478
 TSpectrumTransform.cxx:2479
 TSpectrumTransform.cxx:2480
 TSpectrumTransform.cxx:2481
 TSpectrumTransform.cxx:2482
 TSpectrumTransform.cxx:2483
 TSpectrumTransform.cxx:2484
 TSpectrumTransform.cxx:2485
 TSpectrumTransform.cxx:2486
 TSpectrumTransform.cxx:2487
 TSpectrumTransform.cxx:2488
 TSpectrumTransform.cxx:2489
 TSpectrumTransform.cxx:2490
 TSpectrumTransform.cxx:2491
 TSpectrumTransform.cxx:2492
 TSpectrumTransform.cxx:2493
 TSpectrumTransform.cxx:2494
 TSpectrumTransform.cxx:2495
 TSpectrumTransform.cxx:2496
 TSpectrumTransform.cxx:2497
 TSpectrumTransform.cxx:2498
 TSpectrumTransform.cxx:2499
 TSpectrumTransform.cxx:2500
 TSpectrumTransform.cxx:2501
 TSpectrumTransform.cxx:2502
 TSpectrumTransform.cxx:2503
 TSpectrumTransform.cxx:2504
 TSpectrumTransform.cxx:2505
 TSpectrumTransform.cxx:2506
 TSpectrumTransform.cxx:2507
 TSpectrumTransform.cxx:2508
 TSpectrumTransform.cxx:2509
 TSpectrumTransform.cxx:2510
 TSpectrumTransform.cxx:2511
 TSpectrumTransform.cxx:2512
 TSpectrumTransform.cxx:2513
 TSpectrumTransform.cxx:2514
 TSpectrumTransform.cxx:2515
 TSpectrumTransform.cxx:2516
 TSpectrumTransform.cxx:2517
 TSpectrumTransform.cxx:2518
 TSpectrumTransform.cxx:2519
 TSpectrumTransform.cxx:2520
 TSpectrumTransform.cxx:2521
 TSpectrumTransform.cxx:2522
 TSpectrumTransform.cxx:2523
 TSpectrumTransform.cxx:2524
 TSpectrumTransform.cxx:2525
 TSpectrumTransform.cxx:2526
 TSpectrumTransform.cxx:2527
 TSpectrumTransform.cxx:2528
 TSpectrumTransform.cxx:2529
 TSpectrumTransform.cxx:2530
 TSpectrumTransform.cxx:2531
 TSpectrumTransform.cxx:2532
 TSpectrumTransform.cxx:2533
 TSpectrumTransform.cxx:2534
 TSpectrumTransform.cxx:2535
 TSpectrumTransform.cxx:2536
 TSpectrumTransform.cxx:2537
 TSpectrumTransform.cxx:2538
 TSpectrumTransform.cxx:2539
 TSpectrumTransform.cxx:2540
 TSpectrumTransform.cxx:2541
 TSpectrumTransform.cxx:2542
 TSpectrumTransform.cxx:2543
 TSpectrumTransform.cxx:2544
 TSpectrumTransform.cxx:2545
 TSpectrumTransform.cxx:2546
 TSpectrumTransform.cxx:2547
 TSpectrumTransform.cxx:2548
 TSpectrumTransform.cxx:2549
 TSpectrumTransform.cxx:2550
 TSpectrumTransform.cxx:2551
 TSpectrumTransform.cxx:2552
 TSpectrumTransform.cxx:2553
 TSpectrumTransform.cxx:2554
 TSpectrumTransform.cxx:2555
 TSpectrumTransform.cxx:2556
 TSpectrumTransform.cxx:2557
 TSpectrumTransform.cxx:2558
 TSpectrumTransform.cxx:2559
 TSpectrumTransform.cxx:2560
 TSpectrumTransform.cxx:2561
 TSpectrumTransform.cxx:2562
 TSpectrumTransform.cxx:2563
 TSpectrumTransform.cxx:2564
 TSpectrumTransform.cxx:2565
 TSpectrumTransform.cxx:2566
 TSpectrumTransform.cxx:2567
 TSpectrumTransform.cxx:2568
 TSpectrumTransform.cxx:2569
 TSpectrumTransform.cxx:2570
 TSpectrumTransform.cxx:2571
 TSpectrumTransform.cxx:2572
 TSpectrumTransform.cxx:2573
 TSpectrumTransform.cxx:2574
 TSpectrumTransform.cxx:2575
 TSpectrumTransform.cxx:2576
 TSpectrumTransform.cxx:2577
 TSpectrumTransform.cxx:2578
 TSpectrumTransform.cxx:2579
 TSpectrumTransform.cxx:2580
 TSpectrumTransform.cxx:2581
 TSpectrumTransform.cxx:2582
 TSpectrumTransform.cxx:2583
 TSpectrumTransform.cxx:2584
 TSpectrumTransform.cxx:2585
 TSpectrumTransform.cxx:2586
 TSpectrumTransform.cxx:2587
 TSpectrumTransform.cxx:2588
 TSpectrumTransform.cxx:2589
 TSpectrumTransform.cxx:2590
 TSpectrumTransform.cxx:2591
 TSpectrumTransform.cxx:2592
 TSpectrumTransform.cxx:2593
 TSpectrumTransform.cxx:2594
 TSpectrumTransform.cxx:2595
 TSpectrumTransform.cxx:2596
 TSpectrumTransform.cxx:2597
 TSpectrumTransform.cxx:2598
 TSpectrumTransform.cxx:2599
 TSpectrumTransform.cxx:2600
 TSpectrumTransform.cxx:2601
 TSpectrumTransform.cxx:2602
 TSpectrumTransform.cxx:2603
 TSpectrumTransform.cxx:2604
 TSpectrumTransform.cxx:2605
 TSpectrumTransform.cxx:2606
 TSpectrumTransform.cxx:2607
 TSpectrumTransform.cxx:2608
 TSpectrumTransform.cxx:2609
 TSpectrumTransform.cxx:2610
 TSpectrumTransform.cxx:2611
 TSpectrumTransform.cxx:2612
 TSpectrumTransform.cxx:2613
 TSpectrumTransform.cxx:2614
 TSpectrumTransform.cxx:2615
 TSpectrumTransform.cxx:2616
 TSpectrumTransform.cxx:2617
 TSpectrumTransform.cxx:2618
 TSpectrumTransform.cxx:2619
 TSpectrumTransform.cxx:2620
 TSpectrumTransform.cxx:2621
 TSpectrumTransform.cxx:2622
 TSpectrumTransform.cxx:2623
 TSpectrumTransform.cxx:2624
 TSpectrumTransform.cxx:2625
 TSpectrumTransform.cxx:2626
 TSpectrumTransform.cxx:2627
 TSpectrumTransform.cxx:2628
 TSpectrumTransform.cxx:2629
 TSpectrumTransform.cxx:2630
 TSpectrumTransform.cxx:2631
 TSpectrumTransform.cxx:2632
 TSpectrumTransform.cxx:2633
 TSpectrumTransform.cxx:2634
 TSpectrumTransform.cxx:2635
 TSpectrumTransform.cxx:2636
 TSpectrumTransform.cxx:2637
 TSpectrumTransform.cxx:2638
 TSpectrumTransform.cxx:2639
 TSpectrumTransform.cxx:2640
 TSpectrumTransform.cxx:2641
 TSpectrumTransform.cxx:2642
 TSpectrumTransform.cxx:2643
 TSpectrumTransform.cxx:2644
 TSpectrumTransform.cxx:2645
 TSpectrumTransform.cxx:2646
 TSpectrumTransform.cxx:2647
 TSpectrumTransform.cxx:2648
 TSpectrumTransform.cxx:2649
 TSpectrumTransform.cxx:2650
 TSpectrumTransform.cxx:2651
 TSpectrumTransform.cxx:2652
 TSpectrumTransform.cxx:2653
 TSpectrumTransform.cxx:2654
 TSpectrumTransform.cxx:2655
 TSpectrumTransform.cxx:2656
 TSpectrumTransform.cxx:2657
 TSpectrumTransform.cxx:2658
 TSpectrumTransform.cxx:2659
 TSpectrumTransform.cxx:2660
 TSpectrumTransform.cxx:2661
 TSpectrumTransform.cxx:2662
 TSpectrumTransform.cxx:2663
 TSpectrumTransform.cxx:2664
 TSpectrumTransform.cxx:2665
 TSpectrumTransform.cxx:2666
 TSpectrumTransform.cxx:2667
 TSpectrumTransform.cxx:2668
 TSpectrumTransform.cxx:2669
 TSpectrumTransform.cxx:2670
 TSpectrumTransform.cxx:2671
 TSpectrumTransform.cxx:2672
 TSpectrumTransform.cxx:2673
 TSpectrumTransform.cxx:2674
 TSpectrumTransform.cxx:2675
 TSpectrumTransform.cxx:2676
 TSpectrumTransform.cxx:2677
 TSpectrumTransform.cxx:2678
 TSpectrumTransform.cxx:2679
 TSpectrumTransform.cxx:2680
 TSpectrumTransform.cxx:2681
 TSpectrumTransform.cxx:2682
 TSpectrumTransform.cxx:2683
 TSpectrumTransform.cxx:2684
 TSpectrumTransform.cxx:2685
 TSpectrumTransform.cxx:2686
 TSpectrumTransform.cxx:2687
 TSpectrumTransform.cxx:2688
 TSpectrumTransform.cxx:2689
 TSpectrumTransform.cxx:2690
 TSpectrumTransform.cxx:2691
 TSpectrumTransform.cxx:2692
 TSpectrumTransform.cxx:2693
 TSpectrumTransform.cxx:2694
 TSpectrumTransform.cxx:2695
 TSpectrumTransform.cxx:2696
 TSpectrumTransform.cxx:2697
 TSpectrumTransform.cxx:2698
 TSpectrumTransform.cxx:2699
 TSpectrumTransform.cxx:2700
 TSpectrumTransform.cxx:2701
 TSpectrumTransform.cxx:2702
 TSpectrumTransform.cxx:2703
 TSpectrumTransform.cxx:2704
 TSpectrumTransform.cxx:2705
 TSpectrumTransform.cxx:2706
 TSpectrumTransform.cxx:2707
 TSpectrumTransform.cxx:2708
 TSpectrumTransform.cxx:2709
 TSpectrumTransform.cxx:2710
 TSpectrumTransform.cxx:2711
 TSpectrumTransform.cxx:2712
 TSpectrumTransform.cxx:2713
 TSpectrumTransform.cxx:2714
 TSpectrumTransform.cxx:2715
 TSpectrumTransform.cxx:2716
 TSpectrumTransform.cxx:2717
 TSpectrumTransform.cxx:2718
 TSpectrumTransform.cxx:2719
 TSpectrumTransform.cxx:2720
 TSpectrumTransform.cxx:2721
 TSpectrumTransform.cxx:2722
 TSpectrumTransform.cxx:2723
 TSpectrumTransform.cxx:2724
 TSpectrumTransform.cxx:2725
 TSpectrumTransform.cxx:2726
 TSpectrumTransform.cxx:2727
 TSpectrumTransform.cxx:2728
 TSpectrumTransform.cxx:2729
 TSpectrumTransform.cxx:2730