// @(#)root/spectrum:$Id$
// Author: Miroslav Morhac   17/01/2006

/////////////////////////////////////////////////////////////////////////////
//   THIS CLASS CONTAINS ADVANCED SPECTRA PROCESSING FUNCTIONS.            //
//                                                                         //
//   ONE-DIMENSIONAL BACKGROUND ESTIMATION FUNCTIONS                       //
//   TWO-DIMENSIONAL BACKGROUND ESTIMATION FUNCTIONS                       //
//   ONE-DIMENSIONAL SMOOTHING FUNCTIONS                                   //
//   TWO-DIMENSIONAL SMOOTHING FUNCTIONS                                   //
//   ONE-DIMENSIONAL DECONVOLUTION FUNCTIONS                               //
//   TWO-DIMENSIONAL DECONVOLUTION FUNCTIONS                               //
//   ONE-DIMENSIONAL PEAK SEARCH FUNCTIONS                                 //
//   TWO-DIMENSIONAL PEAK SEARCH 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]  M.Morhac et al.: Background elimination methods for              //
//   multidimensional coincidence gamma-ray spectra. Nuclear               //
//   Instruments and Methods in Physics Research A 401 (1997) 113-         //
//   132.                                                                  //
//                                                                         //
//   [2]  M.Morhac et al.: Efficient one- and two-dimensional Gold         //
//   deconvolution and its application to gamma-ray spectra                //
//   decomposition. Nuclear Instruments and Methods in Physics             //
//   Research A 401 (1997) 385-408.                                        //
//                                                                         //
//   [3]  M.Morhac et al.: Identification of peaks in multidimensional     //
//   coincidence gamma-ray spectra. Nuclear Instruments and Methods in     //
//   Research Physics A  443(2000), 108-125.                               //
//                                                                         //
//   These NIM papers are also available as Postscript files from:         //
//
/*
   ftp://root.cern.ch/root/SpectrumDec.ps.gz
   ftp://root.cern.ch/root/SpectrumSrc.ps.gz
   ftp://root.cern.ch/root/SpectrumBck.ps.gz
*/
//
/////////////////////////////////////////////////////////////////////////////
//
/////////////////////NEW FUNCTIONS  January 2006
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal style='text-align:justify'><i><span lang=EN-US
style='font-size:16.0pt'>All figures in this page were prepared using DaqProVis
system, Data Acquisition, Processing and Visualization system, which is being
developed at the Institute of Physics, Slovak Academy of Sciences, Bratislava,
Slovakia:  </span></i></p>

<p class=MsoNormal style='text-align:justify'><i><span lang=EN-US
style='font-size:16.0pt'><a href="http://www.fu.sav.sk/nph/projects/DaqProVis/">http://www.fu.sav.sk/nph/projects/DaqProVis/</a>
under construction</span></i></p>

<p class=MsoNormal style='text-align:justify'><i><span lang=EN-US
style='font-size:16.0pt'><a href="http://www.fu.sav.sk/nph/projects/ProcFunc/">http://www.fu.sav.sk/nph/projects/ProcFunc/</a>
.</span></i></p>

</div>

<!-- */
// --> End_Html

//______________________________________________________________________________



#include "TSpectrum2.h"
#include "TPolyMarker.h"
#include "TList.h"
#include "TH1.h"
#include "TMath.h"
#define PEAK_WINDOW 1024

Int_t TSpectrum2::fgIterations    = 3;
Int_t TSpectrum2::fgAverageWindow = 3;

ClassImp(TSpectrum2)

//______________________________________________________________________________
TSpectrum2::TSpectrum2() :TNamed("Spectrum", "Miroslav Morhac peak finder")
{
   // Constructor.

   Int_t n = 100;
   fMaxPeaks   = n;
   fPosition   = new Double_t[n];
   fPositionX  = new Double_t[n];
   fPositionY  = new Double_t[n];
   fResolution = 1;
   fHistogram  = 0;
   fNPeaks     = 0;
}


//______________________________________________________________________________
TSpectrum2::TSpectrum2(Int_t maxpositions, Double_t resolution) :TNamed("Spectrum", "Miroslav Morhac peak finder")
{
//  maxpositions:  maximum number of peaks
//  resolution:    determines resolution of the neighboring peaks
//                 default value is 1 correspond to 3 sigma distance
//                 between peaks. Higher values allow higher resolution
//                 (smaller distance between peaks.
//                 May be set later through SetResolution.

   Int_t n = maxpositions;
   fMaxPeaks  = n;
   fPosition  = new Double_t[n];
   fPositionX = new Double_t[n];
   fPositionY = new Double_t[n];
   fHistogram = 0;
   fNPeaks    = 0;
   SetResolution(resolution);
}


//______________________________________________________________________________
TSpectrum2::~TSpectrum2()
{
   // Destructor.

   delete [] fPosition;
   delete [] fPositionX;
   delete [] fPositionY;
   delete    fHistogram;
}


//______________________________________________________________________________
void TSpectrum2::SetAverageWindow(Int_t w)
{
  // static function: Set average window of searched peaks
  // see TSpectrum2::SearchHighRes

   fgAverageWindow = w;
}

//______________________________________________________________________________
void TSpectrum2::SetDeconIterations(Int_t n)
{
  // static function: Set max number of decon iterations in deconvolution operation
  // see TSpectrum2::SearchHighRes

   fgIterations = n;
}


//______________________________________________________________________________
TH1 *TSpectrum2::Background(const TH1 * h, Int_t number_of_iterations,
                                   Option_t * option)
{
/////////////////////////////////////////////////////////////////////////////
//   TWO-DIMENSIONAL BACKGROUND ESTIMATION FUNCTION                        //
//   This function calculates the background spectrum in the input histogram h.
//   The background is returned as a histogram.
//
//   Function parameters:
//   -h: input 2-d histogram
//   -numberIterations, (default value = 20)
//      Increasing numberIterations make the result smoother and lower.
//   -option: may contain one of the following options
//      - to set the direction parameter
//        "BackIncreasingWindow". By default the direction is BackDecreasingWindow
//      - filterOrder-order of clipping filter,  (default "BackOrder2"
//                  -possible values= "BackOrder4"
//                                    "BackOrder6"
//                                    "BackOrder8"
//      - "nosmoothing"- if selected, the background is not smoothed
//           By default the background is smoothed.
//      - smoothWindow-width of smoothing window, (default is "BackSmoothing3")
//                  -possible values= "BackSmoothing5"
//                                    "BackSmoothing7"
//                                    "BackSmoothing9"
//                                    "BackSmoothing11"
//                                    "BackSmoothing13"
//                                    "BackSmoothing15"
//      - "Compton" if selected the estimation of Compton edge
//                  will be included.
//      - "same" : if this option is specified, the resulting background
//                 histogram is superimposed on the picture in the current pad.
//
//  NOTE that the background is only evaluated in the current range of h.
//  ie, if h has a bin range (set via h->GetXaxis()->SetRange(binmin,binmax),
//  the returned histogram will be created with the same number of bins
//  as the input histogram h, but only bins from binmin to binmax will be filled
//  with the estimated background.
//                                                                         //
/////////////////////////////////////////////////////////////////////////////
   Error("Background","function not yet implemented: h=%s, iter=%d, option=%sn"
        , h->GetName(), number_of_iterations, option);
   return 0;
}

//______________________________________________________________________________
void TSpectrum2::Print(Option_t *) const
{
   // Print the array of positions

   printf("\nNumber of positions = %d\n",fNPeaks);
   for (Int_t i=0;i<fNPeaks;i++) {
      printf(" x[%d] = %g, y[%d] = %g\n",i,fPositionX[i],i,fPositionY[i]);
   }
}



//______________________________________________________________________________
Int_t TSpectrum2::Search(const TH1 * hin, Double_t sigma,
                             Option_t * option, Double_t threshold)
{
/////////////////////////////////////////////////////////////////////////////
//   TWO-DIMENSIONAL PEAK SEARCH FUNCTION                                  //
//   This function searches for peaks in source spectrum in hin            //
//   The number of found peaks and their positions are written into        //
//   the members fNpeaks and fPositionX.                                   //
//   The search is performed in the current histogram range.               //
//                                                                         //
//   Function parameters:                                                  //
//   hin:       pointer to the histogram of source spectrum                //
//   sigma:   sigma of searched peaks, for details we refer to manual      //
//   threshold: (default=0.05)  peaks with amplitude less than             //
//       threshold*highest_peak are discarded.  0<threshold<1              //
//                                                                         //
//   By default, the background is removed before deconvolution.           //
//   Specify the option "nobackground" to not remove the background.       //                //
//                                                                         //
//   By default the "Markov" chain algorithm is used.                      //
//   Specify the option "noMarkov" to disable this algorithm               //
//   Note that by default the source spectrum is replaced by a new spectrum//          //
//                                                                         //
//   By default a polymarker object is created and added to the list of    //
//   functions of the histogram. The histogram is drawn with the specified //
//   option and the polymarker object drawn on top of the histogram.       //
//   The polymarker coordinates correspond to the npeaks peaks found in    //
//   the histogram.                                                        //
//   A pointer to the polymarker object can be retrieved later via:        //
//    TList *functions = hin->GetListOfFunctions();                        //
//    TPolyMarker *pm = (TPolyMarker*)functions->FindObject("TPolyMarker") //
//   Specify the option "goff" to disable the storage and drawing of the   //
//   polymarker.                                                           //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

   if (hin == 0)
      return 0;
   Int_t dimension = hin->GetDimension();
   if (dimension != 2) {
      Error("Search", "Must be a 2-d histogram");
      return 0;
   }

   TString opt = option;
   opt.ToLower();
   Bool_t background = kTRUE;
   if (opt.Contains("nobackground")) {
      background = kFALSE;
      opt.ReplaceAll("nobackground","");
   }
   Bool_t markov = kTRUE;
   if (opt.Contains("nomarkov")) {
      markov = kFALSE;
      opt.ReplaceAll("nomarkov","");
   }

   Int_t sizex = hin->GetXaxis()->GetNbins();
   Int_t sizey = hin->GetYaxis()->GetNbins();
   Int_t i, j, binx,biny, npeaks;
   Double_t ** source = new Double_t*[sizex];
   Double_t ** dest   = new Double_t*[sizex];
   for (i = 0; i < sizex; i++) {
      source[i] = new Double_t[sizey];
      dest[i]   = new Double_t[sizey];
      for (j = 0; j < sizey; j++) {
         source[i][j] = hin->GetBinContent(i + 1, j + 1);
      }
   }
   //npeaks = SearchHighRes(source, dest, sizex, sizey, sigma, 100*threshold, kTRUE, 3, kTRUE, 10);
   //the smoothing option is used for 1-d but not for 2-d histograms
   npeaks = SearchHighRes(source, dest, sizex, sizey, sigma, 100*threshold,  background, fgIterations, markov, fgAverageWindow);

   //The logic in the loop should be improved to use the fact
   //that fPositionX,Y give a precise position inside a bin.
   //The current algorithm takes the center of the bin only.
   for (i = 0; i < npeaks; i++) {
      binx = 1 + Int_t(fPositionX[i] + 0.5);
      biny = 1 + Int_t(fPositionY[i] + 0.5);
      fPositionX[i] = hin->GetXaxis()->GetBinCenter(binx);
      fPositionY[i] = hin->GetYaxis()->GetBinCenter(biny);
   }
   for (i = 0; i < sizex; i++) {
      delete [] source[i];
      delete [] dest[i];
   }
   delete [] source;
   delete [] dest;

   if (opt.Contains("goff"))
      return npeaks;
   if (!npeaks) return 0;
   TPolyMarker * pm = (TPolyMarker*)hin->GetListOfFunctions()->FindObject("TPolyMarker");
   if (pm) {
      hin->GetListOfFunctions()->Remove(pm);
      delete pm;
   }
   pm = new TPolyMarker(npeaks, fPositionX, fPositionY);
   hin->GetListOfFunctions()->Add(pm);
   pm->SetMarkerStyle(23);
   pm->SetMarkerColor(kRed);
   pm->SetMarkerSize(1.3);
   ((TH1*)hin)->Draw(option);
   return npeaks;
}


//______________________________________________________________________________
void TSpectrum2::SetResolution(Double_t resolution)
{
//  resolution: determines resolution of the neighboring peaks
//              default value is 1 correspond to 3 sigma distance
//              between peaks. Higher values allow higher resolution
//              (smaller distance between peaks.
//              May be set later through SetResolution.
   if (resolution > 1)
      fResolution = resolution;
   else
      fResolution = 1;
}


//_____________________________________________________________________________
//_____________________________________________________________________________

/////////////////////NEW FUNCTIONS  JANUARY 2006
//______________________________________________________________________________
const char *TSpectrum2::Background(Double_t **spectrum,
                       Int_t ssizex, Int_t ssizey,
                       Int_t numberIterationsX,
                       Int_t numberIterationsY,
                       Int_t direction,
                       Int_t filterType)
{
/////////////////////////////////////////////////////////////////////////////
//   TWO-DIMENSIONAL BACKGROUND ESTIMATION FUNCTION - RECTANGULAR RIDGES   //
//   This function calculates background spectrum from source spectrum.    //
//   The result is placed to the array pointed by spectrum pointer.        //
//                                                                         //
//   Function parameters:                                                  //
//   spectrum-pointer to the array of source spectrum                      //
//   ssizex-x length of spectrum                                           //
//   ssizey-y length of spectrum                                           //
//   numberIterationsX-maximal x width of clipping window                  //
//   numberIterationsY-maximal y width of clipping window                  //
//                           for details we refer to manual                //
//   direction- direction of change of clipping window                     //
//               - possible values=kBackIncreasingWindow                   //
//                                 kBackDecreasingWindow                   //
//   filterType-determines the algorithm of the filtering                  //
//                  -possible values=kBackSuccessiveFiltering              //
//                                   kBackOneStepFiltering                 //
//                                                                         //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////
//
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:20.0pt'>Background
estimation</span></b></p>

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

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:18.0pt'>Goal:
Separation of useful information (peaks) from useless information (background)</span></i><span
style='font-size:18.0pt'> </span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>method is based on Sensitive
Nonlinear Iterative Peak (SNIP) clipping algorithm [1]</span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>there exist two algorithms for the
estimation of new value in the channel “<sub><img width=28 height=24
src="gif/TSpectrum2_Background1.gif"></sub>”</span></p>

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

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:16.0pt'>Algorithm
based on Successive Comparisons</span></i></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>It
is an extension of one-dimensional SNIP algorithm to another dimension. For
details we refer to [2].</span></p>

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

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:16.0pt'>Algorithm
based on One Step Filtering</span></i></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>New
value in the estimated channel is calculated as</span></p>

<p class=MsoNormal style='text-align:justify'><sub><img width=133 height=39
src="gif/TSpectrum2_Background2.gif"></sub></p>

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

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

<p class=MsoNormal style='text-align:justify'><sub><img width=600 height=128
src="gif/TSpectrum2_Background3.gif"></sub></p>

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

<p class=MsoNormal><sub><img width=190 height=38
src="gif/TSpectrum2_Background4.gif"></sub>.</p>

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

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>where
p = 1, 2, …, number_of_iterations. </span></p>

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

<p class=MsoNormal><i><span style='font-size:18.0pt'>Function:</span></i></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:18.0pt'>const
<a href="http://root.cern.ch/root/html/ListOfTypes.html#char" target="_parent">char</a>*
</span></b><span style='font-size:18.0pt'><a
href="http://root.cern.ch/root/html/TSpectrum.html#TSpectrum:Fit1Awmi"><b>TSpectrum2::Background</b></a><b>
(<a href="http://root.cern.ch/root/html/ListOfTypes.html#double" target="_parent">double</a>
**spectrum, <a href="http://root.cern.ch/root/html/ListOfTypes.html#int"
target="_parent">int</a> ssizex, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#int" target="_parent">int</a>
ssizey, <a href="http://root.cern.ch/root/html/ListOfTypes.html#int"
target="_parent">int</a> numberIterationsX, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#int" target="_parent">int</a>
numberIterationsY, <a href="http://root.cern.ch/root/html/ListOfTypes.html#int"
target="_parent">int</a> direction, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#int" target="_parent">int</a>
filterType)  </b></span></p>

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

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>This
function calculates background spectrum from the source spectrum.  The result
is placed in the matrix pointed by spectrum pointer.  One can also switch the
direction of the change of the clipping window and to select one of the two
above given algorithms.</span><span style='font-size:18.0pt'> </span><span
style='font-size:16.0pt'>On successful completion it returns 0. On error it
returns pointer to the string describing error.</span></p>

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

<p class=MsoNormal><i><span style='font-size:16.0pt;color:red'>Parameters:</span></i></p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>spectrum</span></b>-pointer
to the matrix of source spectrum                  </p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>ssizex, ssizey</span></b>-lengths
of the spectrum matrix                                 </p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>numberIterationsX, numberIterationsY</span></b>maximal
widths of clipping</p>

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

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>direction</span></b>-
direction of change of clipping window                  </p>

<p class=MsoNormal>               - possible
values=kBackIncreasingWindow                      </p>

<p class=MsoNormal>                                           
kBackDecreasingWindow                      </p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>filterType</span></b>-type
of the clipping algorithm,                              </p>

<p class=MsoNormal>                  -possible values=kBack SuccessiveFiltering</p>

<p class=MsoNormal>                                             
kBackOneStepFiltering                              </p>

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

<p class=MsoNormal><b><i><span style='font-size:18.0pt'>References:</span></i></b></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>[1] 
C. G Ryan et al.: SNIP, a statistics-sensitive background treatment for the
quantitative analysis of PIXE spectra in geoscience applications. NIM, B34
(1988), 396-402.</span></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>[2]
</span><span lang=SK style='font-size:16.0pt'> M. Morhá&#269;, J. Kliman, V.
Matoušek, M. Veselský, I. Turzo</span><span style='font-size:16.0pt'>.:
Background elimination methods for multidimensional gamma-ray spectra. NIM,
A401 (1997) 113-132.</span></p>

</div>

<!-- */
// --> End_Html
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal><i><span style='font-size:18.0pt'>Example 1– script Back_gamma64.c
:</span></i></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Background1.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
1 Original two-dimensional gamma-gamma-ray spectrum</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
width=602 height=418 src="gif/TSpectrum2_Background2.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
2 Background estimated from data from Fig. 1 using decreasing clipping window with
widths 4, 4 and algorithm based on successive comparisons. The estimate
includes not only continuously changing background but also one-dimensional
ridges.</span></b></p>

<p class=MsoNormal><b><span style='font-size:14.0pt;color:green'><img
width=602 height=418 src="gif/TSpectrum2_Background3.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
3 Resulting peaks after subtraction of the estimated background (Fig. 2) from original
two-dimensional gamma-gamma-ray spectrum (Fig. 1).</span></b></p>

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

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

<p class=MsoNormal><b><span style='font-size:16.0pt;color:green'>Script:</span></b></p>

<p class=MsoNormal>// Example to illustrate the background estimator (class
TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Back_gamma64.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum&gt; </p>

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

<p class=MsoNormal>void Back_gamma64() {</p>

<p class=MsoNormal>   Int_t i, j;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t ** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>      source[i]=new Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *back = new TH2F(&quot;back&quot;,&quot;Background estimation&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   back=(TH2F*) f-&gt;Get(&quot;back1;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Background = new
TCanvas(&quot;Background&quot;,&quot;Estimation of background with increasing
window&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum *s = new TSpectrum();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = back-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }     </p>

<p class=MsoNormal> s-&gt;Background(source,nbinsx,nbinsy,4,4,kBackDecreasingWindow,kBackSuccessiveFiltering);</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++)</p>

<p class=MsoNormal>       back-&gt;SetBinContent(i + 1,j + 1, source[i][j]);   </p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   back-&gt;Draw(&quot;SURF&quot;);  </p>

<p class=MsoNormal>   }</p>

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

<p class=MsoNormal><i><span style='font-size:18.0pt'>Example 2– script Back_gamma256.c
:</span></i></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Background4.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
4 Original two-dimensional gamma-gamma-ray spectrum 256x256 channels</span></b></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Background5.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
5 Peaks after subtraction of the estimated background (increasing clipping
window with widths 8, 8 and algorithm based on successive comparisons) from original
two-dimensional gamma-gamma-ray spectrum (Fig. 4).</span></b></p>

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

<p class=MsoNormal><b><span style='font-size:16.0pt;color:green'>Script:</span></b></p>

<p class=MsoNormal>// Example to illustrate the background estimator (class
TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Back_gamma256.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum&gt; </p>

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

<p class=MsoNormal>void Back_gamma256() {</p>

<p class=MsoNormal>   Int_t i, j;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>      source[i]=new Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *back = new TH2F(&quot;back&quot;,&quot;Background estimation&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   back=(TH2F*) f-&gt;Get(&quot;back2;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Background = new
TCanvas(&quot;Background&quot;,&quot;Estimation of background with increasing
window&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum *s = new TSpectrum();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = back-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }     </p>

<p class=MsoNormal> s-&gt;Background(source,nbinsx,nbinsy,8,8,kBackIncreasingWindow,kBackSuccessiveFiltering);</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++)</p>

<p class=MsoNormal>       back-&gt;SetBinContent(i + 1,j + 1, source[i][j]);   </p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   back-&gt;Draw(&quot;SURF&quot;);  </p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal><i><span style='font-size:18.0pt'>Example 3– script Back_synt256.c
:</span></i></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Background6.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
6 Original two-dimensional synthetic spectrum 256x256 channels</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
width=602 height=418 src="gif/TSpectrum2_Background7.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
7 Peaks after subtraction of the estimated background (increasing clipping
window with widths 8, 8 and algorithm based on successive comparisons) from original
two-dimensional gamma-gamma-ray spectrum (Fig. 6). One can observe artifacts
(ridges) around the peaks due to the employed algorithm.</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
width=602 height=418 src="gif/TSpectrum2_Background8.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
8 Peaks after subtraction of the estimated background (increasing clipping
window with widths 8, 8 and algorithm based on one step filtering) from original
two-dimensional gamma-gamma-ray spectrum (Fig. 6).  The artifacts from the
above given Fig. 7 disappeared.</span></b></p>

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

<p class=MsoNormal><b><span style='font-size:16.0pt;color:green'>Script:</span></b></p>

<p class=MsoNormal>// Example to illustrate the background estimator (class
TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Back_synt256.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum&gt; </p>

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

<p class=MsoNormal>void Back_synt256() {</p>

<p class=MsoNormal>   Int_t i, j;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>      source[i]=new Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *back = new TH2F(&quot;back&quot;,&quot;Background estimation&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   back=(TH2F*) f-&gt;Get(&quot;back3;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Background = new
TCanvas(&quot;Background&quot;,&quot;Estimation of background with increasing
window&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum *s = new TSpectrum();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = back-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }     </p>

<p class=MsoNormal> s-&gt;Background(source,nbinsx,nbinsy,8,8,kBackIncreasingWindow,kBackSuccessiveFiltering);//kBackOneStepFiltering</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++)</p>

<p class=MsoNormal>       back-&gt;SetBinContent(i + 1,j + 1, source[i][j]);   </p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   back-&gt;Draw(&quot;SURF&quot;);  </p>

<p class=MsoNormal>   }</p>

</div>

<!-- */
// --> End_Html

   Int_t i, x, y, sampling, r1, r2;
   Double_t a, b, p1, p2, p3, p4, s1, s2, s3, s4;
   if (ssizex <= 0 || ssizey <= 0)
      return "Wrong parameters";
   if (numberIterationsX < 1 || numberIterationsY < 1)
      return "Width of Clipping Window Must Be Positive";
   if (ssizex < 2 * numberIterationsX + 1
        || ssizey < 2 * numberIterationsY + 1)
      return ("Too Large Clipping Window");
   Double_t **working_space = new Double_t*[ssizex];
   for (i = 0; i < ssizex; i++)
      working_space[i] = new Double_t[ssizey];
   sampling =
       (Int_t) TMath::Max(numberIterationsX, numberIterationsY);
   if (direction == kBackIncreasingWindow) {
      if (filterType == kBackSuccessiveFiltering) {
         for (i = 1; i <= sampling; i++) {
            r1 = (Int_t) TMath::Min(i, numberIterationsX), r2 =
                (Int_t) TMath::Min(i, numberIterationsY);
            for (y = r2; y < ssizey - r2; y++) {
               for (x = r1; x < ssizex - r1; x++) {
                  a = spectrum[x][y];
                  p1 = spectrum[x - r1][y - r2];
                  p2 = spectrum[x - r1][y + r2];
                  p3 = spectrum[x + r1][y - r2];
                  p4 = spectrum[x + r1][y + r2];
                  s1 = spectrum[x][y - r2];
                  s2 = spectrum[x - r1][y];
                  s3 = spectrum[x + r1][y];
                  s4 = spectrum[x][y + r2];
                  b = (p1 + p2) / 2.0;
                  if (b > s2)
                     s2 = b;
                  b = (p1 + p3) / 2.0;
                  if (b > s1)
                     s1 = b;
                  b = (p2 + p4) / 2.0;
                  if (b > s4)
                     s4 = b;
                  b = (p3 + p4) / 2.0;
                  if (b > s3)
                     s3 = b;
                  s1 = s1 - (p1 + p3) / 2.0;
                  s2 = s2 - (p1 + p2) / 2.0;
                  s3 = s3 - (p3 + p4) / 2.0;
                  s4 = s4 - (p2 + p4) / 2.0;
                  b = (s1 + s4) / 2.0 + (s2 + s3) / 2.0 + (p1 + p2 +
                                                            p3 +
                                                            p4) / 4.0;
                  if (b < a && b > 0)
                     a = b;
                  working_space[x][y] = a;
               }
            }
            for (y = r2; y < ssizey - r2; y++) {
               for (x = r1; x < ssizex - r1; x++) {
                  spectrum[x][y] = working_space[x][y];
               }
            }
         }
      }

      else if (filterType == kBackOneStepFiltering) {
         for (i = 1; i <= sampling; i++) {
            r1 = (Int_t) TMath::Min(i, numberIterationsX), r2 =
                (Int_t) TMath::Min(i, numberIterationsY);
            for (y = r2; y < ssizey - r2; y++) {
               for (x = r1; x < ssizex - r1; x++) {
                  a = spectrum[x][y];
                  b = -(spectrum[x - r1][y - r2] +
                         spectrum[x - r1][y + r2] + spectrum[x + r1][y -
                                                                     r2]
                         + spectrum[x + r1][y + r2]) / 4 +
                      (spectrum[x][y - r2] + spectrum[x - r1][y] +
                       spectrum[x + r1][y] + spectrum[x][y + r2]) / 2;
                  if (b < a && b > 0)
                     a = b;
                  working_space[x][y] = a;
               }
            }
            for (y = i; y < ssizey - i; y++) {
               for (x = i; x < ssizex - i; x++) {
                  spectrum[x][y] = working_space[x][y];
               }
            }
         }
      }
   }

   else if (direction == kBackDecreasingWindow) {
      if (filterType == kBackSuccessiveFiltering) {
         for (i = sampling; i >= 1; i--) {
            r1 = (Int_t) TMath::Min(i, numberIterationsX), r2 =
                (Int_t) TMath::Min(i, numberIterationsY);
            for (y = r2; y < ssizey - r2; y++) {
               for (x = r1; x < ssizex - r1; x++) {
                  a = spectrum[x][y];
                  p1 = spectrum[x - r1][y - r2];
                  p2 = spectrum[x - r1][y + r2];
                  p3 = spectrum[x + r1][y - r2];
                  p4 = spectrum[x + r1][y + r2];
                  s1 = spectrum[x][y - r2];
                  s2 = spectrum[x - r1][y];
                  s3 = spectrum[x + r1][y];
                  s4 = spectrum[x][y + r2];
                  b = (p1 + p2) / 2.0;
                  if (b > s2)
                     s2 = b;
                  b = (p1 + p3) / 2.0;
                  if (b > s1)
                     s1 = b;
                  b = (p2 + p4) / 2.0;
                  if (b > s4)
                     s4 = b;
                  b = (p3 + p4) / 2.0;
                  if (b > s3)
                     s3 = b;
                  s1 = s1 - (p1 + p3) / 2.0;
                  s2 = s2 - (p1 + p2) / 2.0;
                  s3 = s3 - (p3 + p4) / 2.0;
                  s4 = s4 - (p2 + p4) / 2.0;
                  b = (s1 + s4) / 2.0 + (s2 + s3) / 2.0 + (p1 + p2 +
                                                            p3 +
                                                            p4) / 4.0;
                  if (b < a && b > 0)
                     a = b;
                  working_space[x][y] = a;
               }
            }
            for (y = r2; y < ssizey - r2; y++) {
               for (x = r1; x < ssizex - r1; x++) {
                  spectrum[x][y] = working_space[x][y];
               }
            }
         }
      }

      else if (filterType == kBackOneStepFiltering) {
         for (i = sampling; i >= 1; i--) {
            r1 = (Int_t) TMath::Min(i, numberIterationsX), r2 =
                (Int_t) TMath::Min(i, numberIterationsY);
            for (y = r2; y < ssizey - r2; y++) {
               for (x = r1; x < ssizex - r1; x++) {
                  a = spectrum[x][y];
                  b = -(spectrum[x - r1][y - r2] +
                         spectrum[x - r1][y + r2] + spectrum[x + r1][y -
                                                                     r2]
                         + spectrum[x + r1][y + r2]) / 4 +
                      (spectrum[x][y - r2] + spectrum[x - r1][y] +
                       spectrum[x + r1][y] + spectrum[x][y + r2]) / 2;
                  if (b < a && b > 0)
                     a = b;
                  working_space[x][y] = a;
               }
            }
            for (y = i; y < ssizey - i; y++) {
               for (x = i; x < ssizex - i; x++) {
                  spectrum[x][y] = working_space[x][y];
               }
            }
         }
      }
   }
   for (i = 0; i < ssizex; i++)
      delete[]working_space[i];
   delete[]working_space;
   return 0;
}

//_____________________________________________________________________________
const char* TSpectrum2::SmoothMarkov(Double_t **source, Int_t ssizex, Int_t ssizey, Int_t averWindow)
{
/////////////////////////////////////////////////////////////////////////////
//   TWO-DIMENSIONAL MARKOV SPECTRUM SMOOTHING FUNCTION
//
//   This function calculates smoothed spectrum from source spectrum
//      based on Markov chain method.
//   The result is placed in the array pointed by source pointer.
//
//   Function parameters:
//   source-pointer to the array of source spectrum
//   ssizex-x length of source
//   ssizey-y length of source
//   averWindow-width of averaging smoothing window
//
/////////////////////////////////////////////////////////////////////////////
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:20.0pt'>Smoothing</span></b></p>

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

<p class=MsoNormal><i><span style='font-size:18.0pt'>Goal: Suppression of
statistical fluctuations</span></i></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>the algorithm is based on discrete
Markov chain, which has very simple invariant distribution</span></p>

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

<p class=MsoNormal>            <sub><img width=551 height=63
src="gif/TSpectrum2_Smoothing1.gif"></sub><span style='font-size:16.0pt;
font-family:Arial'>     </span></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
font-family:Arial'>        </span><sub><img width=28 height=36
src="gif/TSpectrum2_Smoothing2.gif"></sub><span style='font-size:16.0pt;
font-family:Arial'>  being defined from the normalization condition </span><sub><img
width=70 height=52 src="gif/TSpectrum2_Smoothing3.gif"></sub></p>

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

<p class=MsoNormal><span style='font-size:16.0pt;font-family:Arial'>         n
is the length of the smoothed spectrum and </span></p>

<p class=MsoNormal>

<table cellpadding=0 cellspacing=0 align=left>
 <tr>
  <td width=57 height=15></td>
 </tr>
 <tr>
  <td></td>
  <td><img width=258 height=60 src="gif/TSpectrum2_Smoothing4.gif"></td>
 </tr>
</table>

<span style='font-size:16.0pt;font-family:Arial'>&nbsp;</span></p>

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

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

<br clear=ALL>

<p class=MsoNormal style='margin-left:34.2pt;text-align:justify'><span
style='font-size:16.0pt;font-family:Arial'>is the probability of the change of
the peak position from channel i to the channel i+1. </span> <sub><img
width=28 height=36 src="gif/TSpectrum2_Smoothing5.gif"></sub><span
style='font-size:16.0pt;font-family:Arial'>is the normalization constant so
that </span><span style='font-family:Arial'><sub><img width=133 height=34
src="gif/TSpectrum2_Smoothing6.gif"></sub> </span><span style='font-size:16.0pt;
font-family:Arial'>and m is a width of smoothing window. We have extended this
algortihm to two dimensions. </span></p>

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

<p class=MsoNormal><i><span style='font-size:18.0pt'>Function:</span></i></p>

<p class=MsoNormal><b><span style='font-size:18.0pt'>const <a
href="http://root.cern.ch/root/html/ListOfTypes.html#char" target="_parent">char</a>*
</span></b><span style='font-size:18.0pt'><a
href="http://root.cern.ch/root/html/TSpectrum.html#TSpectrum:Fit1Awmi"><b>TSpectrum2::SmoothMarkov</b></a><b>(<a
href="http://root.cern.ch/root/html/ListOfTypes.html#double" target="_parent">double</a>
**fSpectrum, <a href="http://root.cern.ch/root/html/ListOfTypes.html#int"
target="_parent">int</a> ssizex, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#int" target="_parent">int</a>
ssizey,  <a href="http://root.cern.ch/root/html/ListOfTypes.html#int"
target="_parent">int</a> averWindow)  </b></span></p>

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

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>This
function calculates smoothed spectrum from the source spectrum based on Markov
chain method. The result is placed in the vector pointed by source pointer. On
successful completion it returns 0. On error it returns pointer to the string
describing error.</span></p>

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

<p class=MsoNormal><i><span style='font-size:16.0pt;color:red'>Parameters:</span></i></p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>fSpectrum</span></b>-pointer
to the matrix of source spectrum                  </p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>ssizex, ssizey</span></b>
-lengths of the spectrum matrix                                 </p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>averWindow</span></b>-width
of averaging smoothing window </p>

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

<p class=MsoNormal><b><i><span style='font-size:18.0pt'>Reference:</span></i></b></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>[1]
Z.K. Silagadze, A new algorithm for automatic photopeak searches. NIM A 376
(1996), 451<b>.</b>  </span></p>

</div>

<!-- */
// --> End_Html
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 4 – script Smooth.c
:</span></i></p>

<p class=MsoNormal><span style='font-size:16.0pt'><img width=300 height=209
src="gif/TSpectrum2_Smoothing1.jpg"><img width=297 height=207
src="gif/TSpectrum2_Smoothing2.jpg"></span></p>

<p class=MsoNormal><b><span style='font-size:16.0pt'>Fig. 9 Original noisy
spectrum.</span></b><b><span style='font-size:14.0pt'>    </span></b><b><span
style='font-size:16.0pt'>Fig. 10 Smoothed spectrum m=3</span></b></p>

<p class=MsoNormal><b><span style='font-size:16.0pt'>Peaks can hardly be
observed.     Peaks become apparent.</span></b></p>

<p class=MsoNormal><b><span style='font-size:14.0pt'><img width=293 height=203
src="gif/TSpectrum2_Smoothing3.jpg"><img width=297 height=205
src="gif/TSpectrum2_Smoothing4.jpg"></span></b></p>

<p class=MsoNormal><b><span style='font-size:16.0pt'>Fig. 11 Smoothed spectrum
m=5 Fig.12 Smoothed spectrum m=7</span></b></p>

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

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

<p class=MsoNormal>// Example to illustrate the Markov smoothing (class
TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Smooth.C</p>

<p class=MsoNormal>#include &lt;TSpectrum&gt; </p>

<p class=MsoNormal>void Smooth() {</p>

<p class=MsoNormal>   Int_t i, j;</p>

<p class=MsoNormal>   Double_t nbinsx = 256;</p>

<p class=MsoNormal>   Double_t nbinsy = 256;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *smooth = new
TH2F(&quot;smooth&quot;,&quot;Background
estimation&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   smooth=(TH2F*) f-&gt;Get(&quot;smooth1;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Smoothing = new
TCanvas(&quot;Smoothing&quot;,&quot;Markov smoothing&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum *s = new TSpectrum();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = smooth-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   s-&gt;SmoothMarkov(source,nbinsx,nbinsx,3);//5,7</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++)</p>

<p class=MsoNormal>       smooth-&gt;SetBinContent(i + 1,j + 1,
source[i][j]);   </p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   smooth-&gt;Draw(&quot;SURF&quot;);  </p>

<p class=MsoNormal>   }</p>

</div>

<!-- */
// --> End_Html
   Int_t xmin, xmax, ymin, ymax, i, j, l;
   Double_t a, b, maxch;
   Double_t nom, nip, nim, sp, sm, spx, spy, smx, smy, plocha = 0;
   if(averWindow <= 0)
      return "Averaging Window must be positive";
   Double_t **working_space = new Double_t*[ssizex];
   for(i = 0; i < ssizex; i++)
      working_space[i] = new Double_t[ssizey];
   xmin = 0;
   xmax = ssizex - 1;
   ymin = 0;
   ymax = ssizey - 1;
   for(i = 0, maxch = 0; i < ssizex; i++){
      for(j = 0; j < ssizey; j++){
         working_space[i][j] = 0;
         if(maxch < source[i][j])
            maxch = source[i][j];

         plocha += source[i][j];
      }
   }
   if(maxch == 0) {
      delete [] working_space;
      return 0;
   }

   nom = 0;
   working_space[xmin][ymin] = 1;
   for(i = xmin; i < xmax; i++){
      nip = source[i][ymin] / maxch;
      nim = source[i + 1][ymin] / maxch;
      sp = 0,sm = 0;
      for(l = 1; l <= averWindow; l++){
         if((i + l) > xmax)
            a = source[xmax][ymin] / maxch;

         else
            a = source[i + l][ymin] / maxch;
         b = a - nip;
         if(a + nip <= 0)
            a = 1;

         else
            a = TMath::Sqrt(a + nip);
         b = b / a;
         b = TMath::Exp(b);
         sp = sp + b;
         if(i - l + 1 < xmin)
            a = source[xmin][ymin] / maxch;

         else
            a = source[i - l + 1][ymin] / maxch;
         b = a - nim;
         if(a + nim <= 0)
            a = 1;

         else
            a = TMath::Sqrt(a + nim);
         b = b / a;
         b = TMath::Exp(b);
         sm = sm + b;
      }
      a = sp / sm;
      a = working_space[i + 1][ymin] = a * working_space[i][ymin];
      nom = nom + a;
   }
   for(i = ymin; i < ymax; i++){
      nip = source[xmin][i] / maxch;
      nim = source[xmin][i + 1] / maxch;
      sp = 0,sm = 0;
      for(l = 1; l <= averWindow; l++){
         if((i + l) > ymax)
            a = source[xmin][ymax] / maxch;

         else
            a = source[xmin][i + l] / maxch;
         b = a - nip;
         if(a + nip <= 0)
            a = 1;

         else
            a = TMath::Sqrt(a + nip);
         b = b / a;
         b = TMath::Exp(b);
         sp = sp + b;
         if(i - l + 1 < ymin)
            a = source[xmin][ymin] / maxch;

         else
            a = source[xmin][i - l + 1] / maxch;
         b = a - nim;
         if(a + nim <= 0)
            a = 1;

         else
            a = TMath::Sqrt(a + nim);
         b = b / a;
         b = TMath::Exp(b);
         sm = sm + b;
      }
      a = sp / sm;
      a = working_space[xmin][i + 1] = a * working_space[xmin][i];
      nom = nom + a;
   }
   for(i = xmin; i < xmax; i++){
      for(j = ymin; j < ymax; j++){
         nip = source[i][j + 1] / maxch;
         nim = source[i + 1][j + 1] / maxch;
         spx = 0,smx = 0;
         for(l = 1; l <= averWindow; l++){
            if(i + l > xmax)
               a = source[xmax][j] / maxch;

            else
               a = source[i + l][j] / maxch;
            b = a - nip;
            if(a + nip <= 0)
               a = 1;

            else
               a = TMath::Sqrt(a + nip);
            b = b / a;
            b = TMath::Exp(b);
            spx = spx + b;
            if(i - l + 1 < xmin)
               a = source[xmin][j] / maxch;

            else
               a = source[i - l + 1][j] / maxch;
            b = a - nim;
            if(a + nim <= 0)
               a = 1;

            else
               a = TMath::Sqrt(a + nim);
            b = b / a;
            b = TMath::Exp(b);
            smx = smx + b;
         }
         spy = 0,smy = 0;
         nip = source[i + 1][j] / maxch;
         nim = source[i + 1][j + 1] / maxch;
         for (l = 1; l <= averWindow; l++) {
            if (j + l > ymax) a = source[i][ymax]/maxch;
            else              a = source[i][j + l] / maxch;
            b = a - nip;
            if (a + nip <= 0) a = 1;
            else              a = TMath::Sqrt(a + nip);
            b = b / a;
            b = TMath::Exp(b);
            spy = spy + b;
            if (j - l + 1 < ymin) a = source[i][ymin] / maxch;
            else                  a = source[i][j - l + 1] / maxch;
            b = a - nim;
            if (a + nim <= 0) a = 1;
            else              a = TMath::Sqrt(a + nim);
            b = b / a;
            b = TMath::Exp(b);
            smy = smy + b;
         }
         a = (spx * working_space[i][j + 1] + spy * working_space[i + 1][j]) / (smx +smy);
         working_space[i + 1][j + 1] = a;
         nom = nom + a;
      }
   }
   for(i = xmin; i <= xmax; i++){
      for(j = ymin; j <= ymax; j++){
         working_space[i][j] = working_space[i][j] / nom;
      }
   }
   for(i = 0;i < ssizex; i++){
      for(j = 0; j < ssizey; j++){
         source[i][j] = plocha * working_space[i][j];
      }
   }
   for (i = 0; i < ssizex; i++)
      delete[]working_space[i];
   delete[]working_space;
   return 0;
}

//______________________________________________________________________________________________________________________________
const char *TSpectrum2::Deconvolution(Double_t **source, Double_t **resp,
                                       Int_t ssizex, Int_t ssizey,
                                       Int_t numberIterations,
                                       Int_t numberRepetitions,
                                       Double_t boost)
{
/////////////////////////////////////////////////////////////////////////////
//   TWO-DIMENSIONAL DECONVOLUTION FUNCTION
//   This function calculates deconvolution from source spectrum
//   according to response spectrum
//   The result is placed in the matrix pointed by source pointer.
//
//   Function parameters:
//   source-pointer to the matrix of source spectrum
//   resp-pointer to the matrix of response spectrum
//   ssizex-x length of source and response spectra
//   ssizey-y length of source and response spectra
//   numberIterations, for details we refer to manual
//   numberRepetitions, for details we refer to manual
//   boost, boosting factor, for details we refer to manual
//
/////////////////////////////////////////////////////////////////////////////
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:20.0pt'>Deconvolution</span></b></p>

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

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:18.0pt'>Goal:
Improvement of the resolution in spectra, decomposition of multiplets</span></i></p>

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

<p class=MsoNormal><span style='font-size:16.0pt'>Mathematical formulation of
the 2-dimensional convolution system is</span></p>

<p class=MsoNormal style='margin-left:18.0pt'>

<table cellpadding=0 cellspacing=0 align=left>
 <tr>
  <td width=0 height=18></td>
 </tr>
 <tr>
  <td></td>
  <td><img width=577 height=138 src="gif/TSpectrum2_Deconvolution1.gif"></td>
 </tr>
</table>

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

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

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

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

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

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

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

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

<br clear=ALL>

<p class=MsoNormal><span style='font-size:16.0pt'>where h(i,j) is the impulse
response function, x, y are input and output matrices, respectively, <sub><img
width=45 height=24 src="gif/TSpectrum2_Deconvolution2.gif"></sub> are the lengths
of x and h matrices</span><i><span style='font-size:18.0pt'> </span></i></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>let us assume that we know the
response and the output matrices (spectra) of the above given system. </span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>the deconvolution represents
solution of the overdetermined system of linear equations, i.e.,  the
calculation of the matrix <b>x.</b></span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>from numerical stability point of
view the operation of deconvolution is extremely critical (ill-posed  problem)
as well as time consuming operation. </span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>the Gold deconvolution algorithm
proves to work very well even for 2-dimensional systems. Generalization of the
algorithm for 2-dimensional systems was presented in [1], [2].</span></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>for Gold deconvolution algorithm
as well as for boosted deconvolution algorithm we refer also to TSpectrum </span></p>

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

<p class=MsoNormal><i><span style='font-size:18.0pt'>Function:</span></i></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:18.0pt'>const
<a href="http://root.cern.ch/root/html/ListOfTypes.html#char">char</a>* </span></b><a
name="TSpectrum:Deconvolution1"></a><a
href="http://root.cern.ch/root/html/TSpectrum.html#TSpectrum:Fit1Awmi"><b><span
style='font-size:18.0pt'>TSpectrum2::Deconvolution</span></b></a><b><span
style='font-size:18.0pt'>(<a
href="http://root.cern.ch/root/html/ListOfTypes.html#double">double</a> **source,
const <a href="http://root.cern.ch/root/html/ListOfTypes.html#double">double</a>
**resp, <a href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> ssizex,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> ssizey, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> numberIterations,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> numberRepetitions,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#double">double</a></span></b><b><span
style='font-size:16.0pt'> </span></b><b><span style='font-size:18.0pt'>boost)</span></b></p>

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

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>This
function calculates deconvolution from source spectrum according to response
spectrum using Gold deconvolution algorithm. The result is placed in the matrix
pointed by source pointer. On successful completion it returns 0. On error it
returns pointer to the string describing error. If desired after every
numberIterations one can apply boosting operation (exponential function with
exponent given by boost coefficient) and repeat it numberRepetitions times.</span></p>

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

<p class=MsoNormal><i><span style='font-size:16.0pt;color:red'>Parameters:</span></i></p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>source</span></b>-pointer
to the matrix of source spectrum                  </p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>resp</span></b>-pointer
to the matrix of response spectrum                  </p>

<p class=MsoNormal>        <b><span style='font-size:14.0pt'>ssizex, ssizey</span></b>-lengths
of the spectrum matrix                                 </p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>numberIterations</span></b>-number of iterations </p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>numberRepetitions</span></b>-number of repetitions
for boosted deconvolution. It must be </p>

<p class=MsoNormal style='text-align:justify'>        greater or equal to one.</p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>boost</span></b>-boosting coefficient, applies only
if numberRepetitions is greater than one.  </p>

<p class=MsoNormal style='text-align:justify'>        <span style='font-size:
14.0pt;color:fuchsia'>Recommended range &lt;1,2&gt;.</span></p>

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

<p class=MsoNormal><b><i><span style='font-size:18.0pt'>References:</span></i></b></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'> [1]
</span><span lang=SK style='font-size:16.0pt'>M. Morhá&#269;, J. Kliman, V.
Matoušek, M. Veselský, I. Turzo</span><span style='font-size:16.0pt'>.:
Efficient one- and two-dimensional Gold deconvolution and its application to
gamma-ray spectra decomposition. NIM, A401 (1997) 385-408.</span></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>[2]
Morhá&#269; M., Matoušek V., Kliman J., Efficient algorithm of multidimensional
deconvolution and its application to nuclear data processing, Digital Signal
Processing 13 (2003) 144. </span></p>

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

</div>

<!-- */
// --> End_Html
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 5 – script Decon.c
:</span></i></p>

<p class=MsoNormal style='margin-left:36.0pt;text-align:justify;text-indent:
-18.0pt'><span style='font-size:16.0pt'>•<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style='font-size:16.0pt'>response function (usually peak)
should be shifted to the beginning of the coordinate system (see Fig. 13)</span></p>

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

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Deconvolution1.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
13 2-dimensional response spectrum</span></b></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Deconvolution2.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
14 2-dimensional gamma-gamma-ray input spectrum (before deconvolution)</span></b></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Deconvolution3.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
15 Spectrum from Fig. 14 after deconvolution (1000 iterations)</span></b></p>

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

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

<p class=MsoNormal>// Example to illustrate the Gold deconvolution (class
TSpectrum2).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Decon.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum2&gt; </p>

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

<p class=MsoNormal>void Decon() {</p>

<p class=MsoNormal>   Int_t i, j;</p>

<p class=MsoNormal>   Double_t nbinsx = 256;</p>

<p class=MsoNormal>   Double_t nbinsy = 256;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *decon = new TH2F(&quot;decon&quot;,&quot;Gold
deconvolution&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   decon=(TH2F*) f-&gt;Get(&quot;decon1;1&quot;);</p>

<p class=MsoNormal>   Double_t** response = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    response[i]=new
Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *resp = new TH2F(&quot;resp&quot;,&quot;Response
matrix&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   resp=(TH2F*) f-&gt;Get(&quot;resp1;1&quot;);   </p>

<p class=MsoNormal>   TCanvas *Deconvol = new
TCanvas(&quot;Deconvolution&quot;,&quot;Gold deconvolution&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum *s = new TSpectrum();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = decon-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                response[i][j] = resp-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   s-&gt;Deconvolution(source,response,nbinsx,nbinsy,1000,1,1);  
</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++)</p>

<p class=MsoNormal>       decon-&gt;SetBinContent(i + 1,j + 1, source[i][j]);  
</p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   </p>

<p class=MsoNormal>   decon-&gt;Draw(&quot;SURF&quot;);  </p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 6 – script
Decon2.c :</span></i></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Deconvolution4.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
16 Response spectrum</span></b></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Deconvolution5.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
17 Original synthetic input spectrum (before deconvolution). It is composed of
17 peaks. 5 peaks are overlapping in the outlined multiplet and two peaks in
doublet.</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
width=602 height=418 src="gif/TSpectrum2_Deconvolution6.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
18 Spectrum from Fig. 17 after deconvolution (1000 iterations). Resolution is
improved but the peaks in multiplet remained unresolved.</span></b></p>

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

<p class=MsoNormal>// Example to illustrate the Gold deconvolution (class
TSpectrum2).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Decon2.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum2&gt; </p>

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

<p class=MsoNormal>void Decon2() {</p>

<p class=MsoNormal>   Int_t i, j;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *decon = new TH2F(&quot;decon&quot;,&quot;Gold
deconvolution&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   decon=(TH2F*) f-&gt;Get(&quot;decon2;1&quot;);</p>

<p class=MsoNormal>   Double_t** response = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    response[i]=new
Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *resp = new TH2F(&quot;resp&quot;,&quot;Response
matrix&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   resp=(TH2F*) f-&gt;Get(&quot;resp2;1&quot;);   </p>

<p class=MsoNormal>   TCanvas *Deconvol = new
TCanvas(&quot;Deconvolution&quot;,&quot;Gold
deconvolution&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum *s = new TSpectrum();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = decon-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                response[i][j] = resp-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   s-&gt;Deconvolution(source,response,nbinsx,nbinsy,1000,1,1);  
</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++)</p>

<p class=MsoNormal>       decon-&gt;SetBinContent(i + 1,j + 1, source[i][j]);  
</p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   decon-&gt;Draw(&quot;SURF&quot;);  </p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 7 – script
Decon2HR.c :</span></i></p>

<p class=MsoNormal><img width=602 height=418
src="gif/TSpectrum2_Deconvolution7.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
19 Spectrum from Fig. 17 after boosted deconvolution (50 iterations repeated 20
times, boosting coefficient was 1.2). All the peaks in multiplet as well as in
doublet are completely decomposed.</span></b></p>

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

<p class=MsoNormal>// Example to illustrate boosted Gold deconvolution (class
TSpectrum2).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Decon2HR.C</p>

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

<p class=MsoNormal>//#include &lt;TSpectrum2&gt; </p>

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

<p class=MsoNormal>void Decon2HR() {</p>

<p class=MsoNormal>   Int_t i, j;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *decon = new TH2F(&quot;decon&quot;,&quot;Boosted
Gold deconvolution&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   decon=(TH2F*) f-&gt;Get(&quot;decon2;1&quot;);</p>

<p class=MsoNormal>   Double_t** response = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    response[i]=new
Double_t[nbinsy];     </p>

<p class=MsoNormal>   TH2F *resp = new TH2F(&quot;resp&quot;,&quot;Response
matrix&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   resp=(TH2F*) f-&gt;Get(&quot;resp2;1&quot;);   </p>

<p class=MsoNormal>   TCanvas *Deconvol = new
TCanvas(&quot;Deconvolution&quot;,&quot;Gold
deconvolution&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum *s = new TSpectrum();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = decon-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                response[i][j] = resp-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   s-&gt;Deconvolution(source,response,nbinsx,nbinsy,1000,1,1);  
</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++)</p>

<p class=MsoNormal>       decon-&gt;SetBinContent(i + 1,j + 1, source[i][j]);  
</p>

<p class=MsoNormal>   }</p>

<p class=MsoNormal>   decon-&gt;Draw(&quot;SURF&quot;);  </p>

<p class=MsoNormal>   }</p>

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

</div>

<!-- */
// --> End_Html
   Int_t i, j, lhx, lhy, i1, i2, j1, j2, k1, k2, lindex, i1min, i1max,
       i2min, i2max, j1min, j1max, j2min, j2max, positx = 0, posity = 0, repet;
   Double_t lda, ldb, ldc, area, maximum = 0;
   if (ssizex <= 0 || ssizey <= 0)
      return "Wrong parameters";
   if (numberIterations <= 0)
      return "Number of iterations must be positive";
   if (numberRepetitions <= 0)
      return "Number of repetitions must be positive";
   Double_t **working_space = new Double_t *[ssizex];
   for (i = 0; i < ssizex; i++)
      working_space[i] = new Double_t[5 * ssizey];
   area = 0;
   lhx = -1, lhy = -1;
   for (i = 0; i < ssizex; i++) {
      for (j = 0; j < ssizey; j++) {
         lda = resp[i][j];
         if (lda != 0) {
            if ((i + 1) > lhx)
               lhx = i + 1;
            if ((j + 1) > lhy)
               lhy = j + 1;
         }
         working_space[i][j] = lda;
         area = area + lda;
         if (lda > maximum) {
            maximum = lda;
            positx = i, posity = j;
         }
      }
   }
   if (lhx == -1 || lhy == -1) {
      delete [] working_space;
      return ("Zero response data");
   }

//calculate ht*y and write into p
   for (i2 = 0; i2 < ssizey; i2++) {
      for (i1 = 0; i1 < ssizex; i1++) {
         ldc = 0;
         for (j2 = 0; j2 <= (lhy - 1); j2++) {
            for (j1 = 0; j1 <= (lhx - 1); j1++) {
               k2 = i2 + j2, k1 = i1 + j1;
               if (k2 >= 0 && k2 < ssizey && k1 >= 0 && k1 < ssizex) {
                  lda = working_space[j1][j2];
                  ldb = source[k1][k2];
                  ldc = ldc + lda * ldb;
               }
            }
         }
         working_space[i1][i2 + ssizey] = ldc;
      }
   }

//calculate matrix b=ht*h
   i1min = -(lhx - 1), i1max = lhx - 1;
   i2min = -(lhy - 1), i2max = lhy - 1;
   for (i2 = i2min; i2 <= i2max; i2++) {
      for (i1 = i1min; i1 <= i1max; i1++) {
         ldc = 0;
         j2min = -i2;
         if (j2min < 0)
            j2min = 0;
         j2max = lhy - 1 - i2;
         if (j2max > lhy - 1)
            j2max = lhy - 1;
         for (j2 = j2min; j2 <= j2max; j2++) {
            j1min = -i1;
            if (j1min < 0)
               j1min = 0;
            j1max = lhx - 1 - i1;
            if (j1max > lhx - 1)
               j1max = lhx - 1;
            for (j1 = j1min; j1 <= j1max; j1++) {
               lda = working_space[j1][j2];
               if (i1 + j1 < ssizex && i2 + j2 < ssizey)
                  ldb = working_space[i1 + j1][i2 + j2];
               else
                  ldb = 0;
               ldc = ldc + lda * ldb;
            }
         }
         working_space[i1 - i1min][i2 - i2min + 2 * ssizey ] = ldc;
      }
   }

//initialization in x1 matrix
   for (i2 = 0; i2 < ssizey; i2++) {
      for (i1 = 0; i1 < ssizex; i1++) {
         working_space[i1][i2 + 3 * ssizey] = 1;
         working_space[i1][i2 + 4 * ssizey] = 0;
      }
   }

   //START OF ITERATIONS
   for (repet = 0; repet < numberRepetitions; repet++) {
      if (repet != 0) {
         for (i = 0; i < ssizex; i++) {
            for (j = 0; j < ssizey; j++) {
               working_space[i][j + 3 * ssizey] =
                   TMath::Power(working_space[i][j + 3 * ssizey], boost);
            }
         }
      }
      for (lindex = 0; lindex < numberIterations; lindex++) {
         for (i2 = 0; i2 < ssizey; i2++) {
            for (i1 = 0; i1 < ssizex; i1++) {
               ldb = 0;
               j2min = i2;
               if (j2min > lhy - 1)
                  j2min = lhy - 1;
               j2min = -j2min;
               j2max = ssizey - i2 - 1;
               if (j2max > lhy - 1)
                  j2max = lhy - 1;
               j1min = i1;
               if (j1min > lhx - 1)
                  j1min = lhx - 1;
               j1min = -j1min;
               j1max = ssizex - i1 - 1;
               if (j1max > lhx - 1)
                  j1max = lhx - 1;
               for (j2 = j2min; j2 <= j2max; j2++) {
                  for (j1 = j1min; j1 <= j1max; j1++) {
                     ldc =  working_space[j1 - i1min][j2 - i2min + 2 * ssizey];
                     lda = working_space[i1 + j1][i2 + j2 + 3 * ssizey];
                     ldb = ldb + lda * ldc;
                  }
               }
               lda = working_space[i1][i2 + 3 * ssizey];
               ldc = working_space[i1][i2 + 1 * ssizey];
               if (ldc * lda != 0 && ldb != 0) {
                  lda = lda * ldc / ldb;
               }

               else
                  lda = 0;
               working_space[i1][i2 + 4 * ssizey] = lda;
            }
         }
         for (i2 = 0; i2 < ssizey; i2++) {
            for (i1 = 0; i1 < ssizex; i1++)
               working_space[i1][i2 + 3 * ssizey] =
                   working_space[i1][i2 + 4 * ssizey];
         }
      }
   }
   for (i = 0; i < ssizex; i++) {
      for (j = 0; j < ssizey; j++)
         source[(i + positx) % ssizex][(j + posity) % ssizey] =
             area * working_space[i][j + 3 * ssizey];
   }
   for (i = 0; i < ssizex; i++)
      delete[]working_space[i];
   delete[]working_space;
   return 0;
}

//____________________________________________________________________________
Int_t TSpectrum2::SearchHighRes(Double_t **source, Double_t **dest, Int_t ssizex, Int_t ssizey,
                                 Double_t sigma, Double_t threshold,
                                 Bool_t backgroundRemove,Int_t deconIterations,
                                 Bool_t markov, Int_t averWindow)

{
/////////////////////////////////////////////////////////////////////////////
//   TWO-DIMENSIONAL HIGH-RESOLUTION PEAK SEARCH FUNCTION                  //
//   This function searches for peaks in source spectrum                   //
//      It is based on deconvolution method. First the background is       //
//      removed (if desired), then Markov spectrum is calculated           //
//      (if desired), then the response function is generated              //
//      according to given sigma and deconvolution is carried out.         //
//                                                                         //
//   Function parameters:                                                  //
//   source-pointer to the matrix of source spectrum                       //
//   dest-pointer to the matrix of resulting deconvolved spectrum          //
//   ssizex-x length of source spectrum                                    //
//   ssizey-y length of source spectrum                                    //
//   sigma-sigma of searched peaks, for details we refer to manual         //
//   threshold-threshold value in % for selected peaks, peaks with         //
//                amplitude less than threshold*highest_peak/100           //
//                are ignored, see manual                                  //
//      backgroundRemove-logical variable, set if the removal of           //
//                background before deconvolution is desired               //
//      deconIterations-number of iterations in deconvolution operation    //
//      markov-logical variable, if it is true, first the source spectrum  //
//             is replaced by new spectrum calculated using Markov         //
//             chains method.                                              //
//   averWindow-averanging window of searched peaks, for details           //
//                  we refer to manual (applies only for Markov method)    //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal><b><span style='font-size:20.0pt'>Peaks searching</span></b></p>

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

<p class=MsoNormal style='text-align:justify'><i><span style='font-size:18.0pt'>Goal:
to identify automatically the peaks in spectrum with the presence of the
continuous background, one-fold coincidences (ridges) and statistical
fluctuations - noise.</span></i><span style='font-size:18.0pt'> </span></p>

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

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
font-family:Arial'>The common problems connected with correct peak
identification in two-dimensional coincidence spectra are</span></p>

<ul style='margin-top:0mm' type=disc>
 <li class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
     font-family:Arial'>non-sensitivity to noise, i.e., only statistically
     relevant peaks should be identified</span></li>
 <li class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
     font-family:Arial'>non-sensitivity of the algorithm to continuous
     background</span></li>
 <li class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
     font-family:Arial'>non-sensitivity to one-fold coincidences (coincidences
     peak – background in both dimensions) and their crossings</span></li>
 <li class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
     font-family:Arial'>ability to identify peaks close to the edges of the
     spectrum region. Usually peak finders fail to detect them</span></li>
 <li class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
     font-family:Arial'>resolution, decomposition of doublets and multiplets.
     The algorithm should be able to recognize close positioned peaks.</span><span
     style='font-size:18.0pt'> </span></li>
 <li class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt;
     font-family:Arial'>ability to identify peaks with different sigma</span></li>
</ul>

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

<p class=MsoNormal><i><span style='font-size:18.0pt'>Function:</span></i></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:18.0pt'><a
href="http://root.cern.ch/root/html/ListOfTypes.html#Int_t">Int_t</a> </span></b><a
name="TSpectrum:Search1HighRes"></a><a
href="http://root.cern.ch/root/html/TSpectrum.html#TSpectrum:Fit1Awmi"><b><span
style='font-size:18.0pt'>TSpectrum2::SearchHighRes</span></b></a><b><span
style='font-size:18.0pt'> (<a
href="http://root.cern.ch/root/html/ListOfTypes.html#double">double</a> **source,<a
href="http://root.cern.ch/root/html/ListOfTypes.html#double">double</a> **dest, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> ssizex, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> ssizey, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#double">double</a> sigma, <a
href="http://root.cern.ch/root/html/ListOfTypes.html#double">double</a> threshold,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#bool">bool</a> backgroundRemove,<a
href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> deconIterations,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#bool">bool</a> markov,
<a href="http://root.cern.ch/root/html/ListOfTypes.html#int">int</a> averWindow)
  </span></b></p>

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

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>This
function searches for peaks in source spectrum. It is based on deconvolution
method. First the background is removed (if desired), then Markov smoothed
spectrum is calculated (if desired), then the response function is generated
according to given sigma and deconvolution is carried out. The order of peaks
is arranged according to their heights in the spectrum after background
elimination. The highest peak is the first in the list. On success it returns
number of found peaks.</span></p>

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

<p class=MsoNormal><i><span style='font-size:16.0pt;color:red'>Parameters:</span></i></p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>source</span></b>-pointer to the matrix of source
spectrum                  </p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>dest</span></b>-resulting spectrum after deconvolution</p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>ssizex, ssizey</span></b>-lengths of the source and
destination spectra                </p>

<p class=MsoNormal style='text-align:justify'>        <b><span
style='font-size:14.0pt'>sigma</span></b>-sigma of searched peaks</p>

<p class=MsoNormal style='margin-left:22.8pt;text-align:justify'><b><span
style='font-size:14.0pt'>threshold</span></b>-<span style='font-size:16.0pt'> </span>threshold
value in % for selected peaks, peaks with amplitude less than
threshold*highest_peak/100 are ignored</p>

<p class=MsoNormal style='margin-left:22.8pt;text-align:justify'><b><span
style='font-size:14.0pt'>backgroundRemove</span></b>-<span style='font-size:
16.0pt'> </span>background_remove-logical variable, true if the removal of
background before deconvolution is desired  </p>

<p class=MsoNormal style='margin-left:22.8pt;text-align:justify'><b><span
style='font-size:14.0pt'>deconIterations</span></b>-number of iterations in
deconvolution operation</p>

<p class=MsoNormal style='margin-left:22.8pt;text-align:justify'><b><span
style='font-size:14.0pt'>markov</span></b>-logical variable, if it is true,
first the source spectrum is replaced by new spectrum calculated using Markov
chains method </p>

<p class=MsoNormal style='margin-left:19.95pt;text-align:justify;text-indent:
2.85pt'><b><span style='font-size:14.0pt'>averWindow</span></b>-width of
averaging smoothing window </p>

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

<p class=MsoNormal><b><i><span style='font-size:18.0pt'>References:</span></i></b></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>[1]
M.A. Mariscotti: A method for identification of peaks in the presence of
background and its application to spectrum analysis. NIM 50 (1967), 309-320.</span></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>[2]
</span><span lang=SK style='font-size:16.0pt'> M. Morhá&#269;, J. Kliman, V.
Matoušek, M. Veselský, I. Turzo</span><span style='font-size:16.0pt'>.:Identification
of peaks in multidimensional coincidence gamma-ray spectra. NIM, A443 (2000)
108-125.</span></p>

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'>[3]
Z.K. Silagadze, A new algorithm for automatic photopeak searches. NIM A 376
(1996), 451.</span></p>

</div>

<!-- */
// --> End_Html
//Begin_Html <!--
/* -->
<div class=Section1>

<p class=MsoNormal><b><span style='font-size:18.0pt'>Examples of peak searching
method</span></b></p>

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

<p class=MsoNormal style='text-align:justify'><span style='font-size:16.0pt'><a
href="http://root.cern.ch/root/html/src/TSpectrum.cxx.html#TSpectrum:Search1HighRes"
target="_parent">SearchHighRes</a> function provides users with the possibility
to vary the input parameters and with the access to the output deconvolved data
in the destination spectrum. Based on the output data one can tune the
parameters. </span></p>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 8 – script Src.c:</span></i></p>

<p class=MsoNormal><span style='font-size:16.0pt'><img border=0 width=602
height=455 src="gif/TSpectrum2_Searching1.jpg"></span></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
20 Two-dimensional spectrum with found peaks denoted by markers (<sub><img
border=0 width=40 height=19 src="gif/TSpectrum2_Searching2.gif"></sub>,
threshold=5%, 3 iterations steps in the deconvolution)</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching3.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
21 Spectrum from Fig. 20 after background elimination and deconvolution</span></b></p>

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

<p class=MsoNormal>// Example to illustrate high resolution peak searching
function (class TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Src.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum2&gt;</p>

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

<p class=MsoNormal>void Src() {</p>

<p class=MsoNormal>   Int_t i, j, nfound;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   Double_t** dest = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    dest[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   TH2F *search = new TH2F(&quot;search&quot;,&quot;High
resolution peak searching&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   search=(TH2F*) f-&gt;Get(&quot;search4;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Searching = new
TCanvas(&quot;Searching&quot;,&quot;High resolution peak
searching&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum2 *s = new TSpectrum2();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = search-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   nfound = s-&gt;SearchHighRes(source, dest, nbinsx,
nbinsy, 2, 5, kTRUE, 3, kFALSE, 3);   </p>

<p class=MsoNormal>   printf(&quot;Found %d candidate peaks\n&quot;,nfound);</p>

<p class=MsoNormal>   for(i=0;i&lt;nfound;i++)</p>

<p class=MsoNormal>             printf(&quot;posx= %d, posy= %d, value=
%d\n&quot;,(Int_t)(fPositionX[i]+0.5), (Int_t)(fPositionY[i]+0.5),
(Int_t)source[(Int_t)(fPositionX[i]+0.5)][(Int_t)(fPositionY[i]+0.5)]);        </p>

<p class=MsoNormal>}</p>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 9 – script Src2.c:</span></i></p>

<p class=MsoNormal><img border=0 width=602 height=455
src="gif/TSpectrum2_Searching4.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
22 Two-dimensional noisy spectrum with found peaks denoted by markers (<sub><img
border=0 width=40 height=19 src="gif/TSpectrum2_Searching2.gif"></sub>,
threshold=10%, 10 iterations steps in the deconvolution). One can observe that
the algorithm is insensitive to the crossings of one-dimensional ridges. It
identifies only two-cooincidence peaks.</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching5.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
23 Spectrum from Fig. 22 after background elimination and deconvolution</span></b></p>

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

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

<p class=MsoNormal>// Example to illustrate high resolution peak searching
function (class TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Src2.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum2&gt;</p>

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

<p class=MsoNormal>void Src2() {</p>

<p class=MsoNormal>   Int_t i, j, nfound;</p>

<p class=MsoNormal>   Double_t nbinsx = 256;</p>

<p class=MsoNormal>   Double_t nbinsy = 256;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   Double_t** dest = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    dest[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   TH2F *search = new TH2F(&quot;search&quot;,&quot;High
resolution peak searching&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   search=(TH2F*) f-&gt;Get(&quot;back3;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Searching = new
TCanvas(&quot;Searching&quot;,&quot;High resolution peak
searching&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum2 *s = new TSpectrum2();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = search-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   nfound = s-&gt;SearchHighRes(source, dest, nbinsx,
nbinsy, 2, 10, kTRUE, 10, kFALSE, 3);   </p>

<p class=MsoNormal>   printf(&quot;Found %d candidate peaks\n&quot;,nfound);</p>

<p class=MsoNormal>   for(i=0;i&lt;nfound;i++)</p>

<p class=MsoNormal>             printf(&quot;posx= %d, posy= %d, value=
%d\n&quot;,(Int_t)(fPositionX[i]+0.5), (Int_t)(fPositionY[i]+0.5),
(Int_t)source[(Int_t)(fPositionX[i]+0.5)][(Int_t)(fPositionY[i]+0.5)]);        </p>

<p class=MsoNormal>}</p>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 10 – script Src3.c:</span></i></p>

<p class=MsoNormal><img border=0 width=602 height=455
src="gif/TSpectrum2_Searching6.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
24 Two-dimensional spectrum with 15 found peaks denoted by markers. Some peaks
are positioned close to each other. It is necessary to increase number of
iterations in the deconvolution. In next 3 Figs. we shall study the influence
of this parameter.</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching7.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
25 Spectrum from Fig. 24 after deconvolution (# of iterations = 3). Number of
identified peaks = 13.</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching8.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
26 Spectrum from Fig. 24 after deconvolution (# of iterations = 10). Number of
identified peaks = 13.</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching9.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
27 Spectrum from Fig. 24 after deconvolution (# of iterations = 100). Number of
identified peaks = 15. Now the algorithm is able to decompose two doublets in
the spectrum.</span></b></p>

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

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

<p class=MsoNormal>// Example to illustrate high resolution peak searching
function (class TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Src3.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum2&gt;</p>

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

<p class=MsoNormal>void Src3() {</p>

<p class=MsoNormal>   Int_t i, j, nfound;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   Double_t** dest = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    dest[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   TH2F *search = new TH2F(&quot;search&quot;,&quot;High
resolution peak searching&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   search=(TH2F*) f-&gt;Get(&quot;search1;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Searching = new
TCanvas(&quot;Searching&quot;,&quot;High resolution peak
searching&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum2 *s = new TSpectrum2();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = search-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   nfound = s-&gt;SearchHighRes(source, dest, nbinsx,
nbinsy, 2, 2, kFALSE, 3, kFALSE, 1);//3, 10, 100   </p>

<p class=MsoNormal>   printf(&quot;Found %d candidate peaks\n&quot;,nfound);</p>

<p class=MsoNormal> </p>

<p class=MsoNormal>   for(i=0;i&lt;nfound;i++)</p>

<p class=MsoNormal>             printf(&quot;posx= %d, posy= %d, value=
%d\n&quot;,(Int_t)(fPositionX[i]+0.5), (Int_t)(fPositionY[i]+0.5),
(Int_t)source[(Int_t)(fPositionX[i]+0.5)][(Int_t)(fPositionY[i]+0.5)]);        </p>

<p class=MsoNormal>}</p>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 11 – script Src4.c:</span></i></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching10.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
28 Two-dimensional spectrum with peaks with different sigma denoted by markers (<sub><img
border=0 width=39 height=19 src="gif/TSpectrum2_Searching11.gif"></sub>,
threshold=5%, 10 iterations steps in the deconvolution, Markov smoothing with
window=3)</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching12.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
29 Spectrum from Fig. 28 after smoothing and deconvolution.</span></b></p>

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

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

<p class=MsoNormal>// Example to illustrate high resolution peak searching
function (class TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Src4.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum2&gt;</p>

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

<p class=MsoNormal>void Src4() {</p>

<p class=MsoNormal>   Int_t i, j, nfound;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   Double_t** dest = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    dest[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   TH2F *search = new TH2F(&quot;search&quot;,&quot;High
resolution peak searching&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   search=(TH2F*) f-&gt;Get(&quot;search2;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Searching = new
TCanvas(&quot;Searching&quot;,&quot;High resolution peak
searching&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum2 *s = new TSpectrum2();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = search-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   nfound = s-&gt;SearchHighRes(source, dest, nbinsx,
nbinsy, 3, 5, kFALSE, 10, kTRUE, 3);   </p>

<p class=MsoNormal>   printf(&quot;Found %d candidate peaks\n&quot;,nfound);</p>

<p class=MsoNormal>   for(i=0;i&lt;nfound;i++)</p>

<p class=MsoNormal>             printf(&quot;posx= %d, posy= %d, value=
%d\n&quot;,(Int_t)(fPositionX[i]+0.5), (Int_t)(fPositionY[i]+0.5),
(Int_t)source[(Int_t)(fPositionX[i]+0.5)][(Int_t)(fPositionY[i]+0.5)]);        </p>

<p class=MsoNormal>}</p>

<p class=MsoNormal><i><span style='font-size:16.0pt'>Example 12 – script Src5.c:</span></i></p>

<p class=MsoNormal><img border=0 width=602 height=455
src="gif/TSpectrum2_Searching13.jpg"></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
30 Two-dimensional spectrum with peaks positioned close to the edges denoted by
markers (<sub><img border=0 width=40 height=19
src="gif/TSpectrum2_Searching2.gif"></sub>, threshold=5%, 10 iterations
steps in the deconvolution)</span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'><img
border=0 width=602 height=455 src="gif/TSpectrum2_Searching14.jpg"></span></b></p>

<p class=MsoNormal style='text-align:justify'><b><span style='font-size:16.0pt'>Fig.
31 Spectrum from Fig. 30 after deconvolution.</span></b></p>

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

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

<p class=MsoNormal>// Example to illustrate high resolution peak searching
function (class TSpectrum).</p>

<p class=MsoNormal>// To execute this example, do</p>

<p class=MsoNormal>// root &gt; .x Src5.C</p>

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

<p class=MsoNormal>#include &lt;TSpectrum2&gt;</p>

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

<p class=MsoNormal>void Src5() {</p>

<p class=MsoNormal>   Int_t i, j, nfound;</p>

<p class=MsoNormal>   Double_t nbinsx = 64;</p>

<p class=MsoNormal>   Double_t nbinsy = 64;   </p>

<p class=MsoNormal>   Double_t xmin  = 0;</p>

<p class=MsoNormal>   Double_t xmax  = (Double_t)nbinsx;</p>

<p class=MsoNormal>   Double_t ymin  = 0;</p>

<p class=MsoNormal>   Double_t ymax  = (Double_t)nbinsy;   </p>

<p class=MsoNormal>   Double_t** source = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    source[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   Double_t** dest = new Double_t*[nbinsx];   </p>

<p class=MsoNormal>   for (i=0;i&lt;nbinsx;i++)</p>

<p class=MsoNormal>                                    dest[i]=new
Double_t[nbinsy];</p>

<p class=MsoNormal>   TH2F *search = new TH2F(&quot;search&quot;,&quot;High
resolution peak searching&quot;,nbinsx,xmin,xmax,nbinsy,ymin,ymax);</p>

<p class=MsoNormal>   TFile *f = new
TFile(&quot;spectra2\\TSpectrum2.root&quot;);</p>

<p class=MsoNormal>   search=(TH2F*) f-&gt;Get(&quot;search3;1&quot;);</p>

<p class=MsoNormal>   TCanvas *Searching = new
TCanvas(&quot;Searching&quot;,&quot;High resolution peak
searching&quot;,10,10,1000,700);</p>

<p class=MsoNormal>   TSpectrum2 *s = new TSpectrum2();</p>

<p class=MsoNormal>   for (i = 0; i &lt; nbinsx; i++){</p>

<p class=MsoNormal>     for (j = 0; j &lt; nbinsy; j++){</p>

<p class=MsoNormal>                source[i][j] = search-&gt;GetBinContent(i +
1,j + 1); </p>

<p class=MsoNormal>             }</p>

<p class=MsoNormal>   }   </p>

<p class=MsoNormal>   nfound = s-&gt;SearchHighRes(source, dest, nbinsx,
nbinsy, 2, 5, kFALSE, 10, kFALSE, 1);   </p>

<p class=MsoNormal>   printf(&quot;Found %d candidate peaks\n&quot;,nfound);</p>

<p class=MsoNormal>   for(i=0;i&lt;nfound;i++)</p>

<p class=MsoNormal>             printf(&quot;posx= %d, posy= %d, value=
%d\n&quot;,(Int_t)(fPositionX[i]+0.5), (Int_t)(fPositionY[i]+0.5),
(Int_t)source[(Int_t)(fPositionX[i]+0.5)][(Int_t)(fPositionY[i]+0.5)]);        </p>

<p class=MsoNormal>}</p>

</div>

<!-- */
// --> End_Html
   Int_t number_of_iterations = (Int_t)(4 * sigma + 0.5);
   Int_t k, lindex, priz;
   Double_t lda, ldb, ldc, area, maximum;
   Int_t xmin, xmax, l, peak_index = 0, ssizex_ext = ssizex + 4 * number_of_iterations, ssizey_ext = ssizey + 4 * number_of_iterations, shift = 2 * number_of_iterations;
   Int_t ymin, ymax, i, j;
   Double_t a, b, ax, ay, maxch, plocha = 0;
   Double_t nom, nip, nim, sp, sm, spx, spy, smx, smy;
   Double_t p1, p2, p3, p4, s1, s2, s3, s4;
   Int_t x, y;
   Int_t lhx, lhy, i1, i2, j1, j2, k1, k2, i1min, i1max, i2min, i2max, j1min, j1max, j2min, j2max, positx, posity;
   if (sigma < 1) {
      Error("SearchHighRes", "Invalid sigma, must be greater than or equal to 1");
      return 0;
   }

   if(threshold<=0||threshold>=100){
      Error("SearchHighRes", "Invalid threshold, must be positive and less than 100");
      return 0;
   }

   j = (Int_t) (5.0 * sigma + 0.5);
   if (j >= PEAK_WINDOW / 2) {
      Error("SearchHighRes", "Too large sigma");
      return 0;
   }

   if (markov == true) {
      if (averWindow <= 0) {
         Error("SearchHighRes", "Averanging window must be positive");
         return 0;
      }
   }
   if(backgroundRemove == true){
      if(ssizex_ext < 2 * number_of_iterations + 1 || ssizey_ext < 2 * number_of_iterations + 1){
         Error("SearchHighRes", "Too large clipping window");
         return 0;
      }
   }
   i = (Int_t)(4 * sigma + 0.5);
   i = 4 * i;
   Double_t **working_space = new Double_t *[ssizex + i];
   for (j = 0; j < ssizex + i; j++) {
      Double_t *wsk = working_space[j] = new Double_t[16 * (ssizey + i)];
      for (k=0;k<16 * (ssizey + i);k++) wsk[k] = 0;
   }
   for(j = 0; j < ssizey_ext; j++){
      for(i = 0; i < ssizex_ext; i++){
         if(i < shift){
            if(j < shift)
                  working_space[i][j + ssizey_ext] = source[0][0];

            else if(j >= ssizey + shift)
                  working_space[i][j + ssizey_ext] = source[0][ssizey - 1];

            else
                  working_space[i][j + ssizey_ext] = source[0][j - shift];
         }

         else if(i >= ssizex + shift){
            if(j < shift)
               working_space[i][j + ssizey_ext] = source[ssizex - 1][0];

            else if(j >= ssizey + shift)
               working_space[i][j + ssizey_ext] = source[ssizex - 1][ssizey - 1];

            else
               working_space[i][j + ssizey_ext] = source[ssizex - 1][j - shift];
         }

         else{
            if(j < shift)
               working_space[i][j + ssizey_ext] = source[i - shift][0];

            else if(j >= ssizey + shift)
               working_space[i][j + ssizey_ext] = source[i - shift][ssizey - 1];

            else
               working_space[i][j + ssizey_ext] = source[i - shift][j - shift];
         }
      }
   }
   if(backgroundRemove == true){
      for(i = 1; i <= number_of_iterations; i++){
         for(y = i; y < ssizey_ext - i; y++){
            for(x = i; x < ssizex_ext - i; x++){
               a = working_space[x][y + ssizey_ext];
               p1 = working_space[x - i][y + ssizey_ext - i];
               p2 = working_space[x - i][y + ssizey_ext + i];
               p3 = working_space[x + i][y + ssizey_ext - i];
               p4 = working_space[x + i][y + ssizey_ext + i];
               s1 = working_space[x][y + ssizey_ext - i];
               s2 = working_space[x - i][y + ssizey_ext];
               s3 = working_space[x + i][y + ssizey_ext];
               s4 = working_space[x][y + ssizey_ext + i];
               b = (p1 + p2) / 2.0;
               if(b > s2)
                  s2 = b;
               b = (p1 + p3) / 2.0;
               if(b > s1)
                  s1 = b;
               b = (p2 + p4) / 2.0;
               if(b > s4)
                  s4 = b;
               b = (p3 + p4) / 2.0;
               if(b > s3)
                  s3 = b;
               s1 = s1 - (p1 + p3) / 2.0;
               s2 = s2 - (p1 + p2) / 2.0;
               s3 = s3 - (p3 + p4) / 2.0;
               s4 = s4 - (p2 + p4) / 2.0;
               b = (s1 + s4) / 2.0 + (s2 + s3) / 2.0 + (p1 + p2 + p3 + p4) / 4.0;
               if(b < a)
                  a = b;
               working_space[x][y] = a;
            }
         }
         for(y = i;y < ssizey_ext - i; y++){
            for(x = i; x < ssizex_ext - i; x++){
               working_space[x][y + ssizey_ext] = working_space[x][y];
            }
         }
      }
      for(j = 0;j < ssizey_ext; j++){
         for(i = 0; i < ssizex_ext; i++){
            if(i < shift){
               if(j < shift)
                  working_space[i][j + ssizey_ext] = source[0][0] - working_space[i][j + ssizey_ext];

               else if(j >= ssizey + shift)
                  working_space[i][j + ssizey_ext] = source[0][ssizey - 1] - working_space[i][j + ssizey_ext];

               else
                  working_space[i][j + ssizey_ext] = source[0][j - shift] - working_space[i][j + ssizey_ext];
            }

            else if(i >= ssizex + shift){
               if(j < shift)
                  working_space[i][j + ssizey_ext] = source[ssizex - 1][0] - working_space[i][j + ssizey_ext];

               else if(j >= ssizey + shift)
                  working_space[i][j + ssizey_ext] = source[ssizex - 1][ssizey - 1] - working_space[i][j + ssizey_ext];

               else
                  working_space[i][j + ssizey_ext] = source[ssizex - 1][j - shift] - working_space[i][j + ssizey_ext];
            }

            else{
               if(j < shift)
                  working_space[i][j + ssizey_ext] = source[i - shift][0] - working_space[i][j + ssizey_ext];

               else if(j >= ssizey + shift)
                  working_space[i][j + ssizey_ext] = source[i - shift][ssizey - 1] - working_space[i][j + ssizey_ext];

               else
                  working_space[i][j + ssizey_ext] = source[i - shift][j - shift] - working_space[i][j + ssizey_ext];
            }
         }
      }
   }
   for(j = 0; j < ssizey_ext; j++){
      for(i = 0; i < ssizex_ext; i++){
         working_space[i][j + 15*ssizey_ext] = working_space[i][j + ssizey_ext];
      }
   }
   if(markov == true){
      for(i = 0;i < ssizex_ext; i++){
         for(j = 0; j < ssizey_ext; j++)
         working_space[i][j + 2 * ssizex_ext] = working_space[i][ssizey_ext + j];
      }
      xmin = 0;
      xmax = ssizex_ext - 1;
      ymin = 0;
      ymax = ssizey_ext - 1;
      for(i = 0, maxch = 0; i < ssizex_ext; i++){
         for(j = 0; j < ssizey_ext; j++){
            working_space[i][j] = 0;
            if(maxch < working_space[i][j + 2 * ssizey_ext])
               maxch = working_space[i][j + 2 * ssizey_ext];
            plocha += working_space[i][j + 2 * ssizey_ext];
         }
      }
      if(maxch == 0) {
         delete [] working_space;
         return 0;
      }

      nom=0;
      working_space[xmin][ymin] = 1;
      for(i = xmin; i < xmax; i++){
         nip = working_space[i][ymin + 2 * ssizey_ext] / maxch;
         nim = working_space[i + 1][ymin + 2 * ssizey_ext] / maxch;
         sp = 0,sm = 0;
         for(l = 1;l <= averWindow; l++){
            if((i + l) > xmax)
               a = working_space[xmax][ymin + 2 * ssizey_ext] / maxch;

            else
               a = working_space[i + l][ymin + 2 * ssizey_ext] / maxch;

            b = a - nip;
            if(a + nip <= 0)
               a = 1;

            else
               a=TMath::Sqrt(a + nip);
            b = b / a;
            b = TMath::Exp(b);
            sp = sp + b;
            if(i - l + 1 < xmin)
               a = working_space[xmin][ymin + 2 * ssizey_ext] / maxch;

            else
               a = working_space[i - l + 1][ymin + 2 * ssizey_ext] / maxch;
            b = a - nim;
            if(a + nim <= 0)
               a = 1;

            else
               a=TMath::Sqrt(a + nim);
            b = b / a;
            b = TMath::Exp(b);
            sm = sm + b;
         }
         a = sp / sm;
         a = working_space[i + 1][ymin] = a * working_space[i][ymin];
         nom = nom + a;
      }
      for(i = ymin; i < ymax; i++){
         nip = working_space[xmin][i + 2 * ssizey_ext] / maxch;
         nim = working_space[xmin][i + 1 + 2 * ssizey_ext] / maxch;
         sp = 0,sm = 0;
         for(l = 1; l <= averWindow; l++){
            if((i + l) > ymax)
               a = working_space[xmin][ymax + 2 * ssizey_ext] / maxch;

            else
               a = working_space[xmin][i + l + 2 * ssizey_ext] / maxch;
            b = a - nip;
            if(a + nip <= 0)
               a=1;

            else
               a=TMath::Sqrt(a + nip);
            b = b / a;
            b = TMath::Exp(b);
            sp = sp + b;
            if(i - l + 1 < ymin)
               a = working_space[xmin][ymin + 2 * ssizey_ext] / maxch;

            else
               a = working_space[xmin][i - l + 1 + 2 * ssizey_ext] / maxch;
            b = a - nim;
            if(a + nim <= 0)
               a = 1;

            else
               a=TMath::Sqrt(a + nim);
            b = b / a;
            b = TMath::Exp(b);
            sm = sm + b;
         }
         a = sp / sm;
         a = working_space[xmin][i + 1] = a * working_space[xmin][i];
         nom = nom + a;
      }
      for(i = xmin; i < xmax; i++){
         for(j = ymin; j < ymax; j++){
            nip = working_space[i][j + 1 + 2 * ssizey_ext] / maxch;
            nim = working_space[i + 1][j + 1 + 2 * ssizey_ext] / maxch;
            spx = 0,smx = 0;
            for(l = 1; l <= averWindow; l++){
               if(i + l > xmax)
                  a = working_space[xmax][j + 2 * ssizey_ext] / maxch;

               else
                  a = working_space[i + l][j + 2 * ssizey_ext] / maxch;
               b = a - nip;
               if(a + nip <= 0)
                  a = 1;

               else
                  a=TMath::Sqrt(a + nip);
               b = b / a;
               b = TMath::Exp(b);
               spx = spx + b;
               if(i - l + 1 < xmin)
                  a = working_space[xmin][j + 2 * ssizey_ext] / maxch;

               else
                  a = working_space[i - l + 1][j + 2 * ssizey_ext] / maxch;
               b = a - nim;
               if(a + nim <= 0)
                  a=1;

               else
                  a=TMath::Sqrt(a + nim);
               b = b / a;
               b = TMath::Exp(b);
               smx = smx + b;
            }
            spy = 0,smy = 0;
            nip = working_space[i + 1][j + 2 * ssizey_ext] / maxch;
            nim = working_space[i + 1][j + 1 + 2 * ssizey_ext] / maxch;
            for(l = 1; l <= averWindow; l++){
               if(j + l > ymax)
                  a = working_space[i][ymax + 2 * ssizey_ext] / maxch;

               else
                  a = working_space[i][j + l + 2 * ssizey_ext] / maxch;
               b = a - nip;
               if(a + nip <= 0)
                  a = 1;

               else
                  a=TMath::Sqrt(a + nip);
               b = b / a;
               b = TMath::Exp(b);
               spy = spy + b;
               if(j - l + 1 < ymin)
                  a = working_space[i][ymin + 2 * ssizey_ext] / maxch;

               else
                  a = working_space[i][j - l + 1 + 2 * ssizey_ext] / maxch;
               b=a-nim;
               if(a + nim <= 0)
                  a = 1;
               else
                  a=TMath::Sqrt(a + nim);
               b = b / a;
               b = TMath::Exp(b);
               smy = smy + b;
            }
            a = (spx * working_space[i][j + 1] + spy * working_space[i + 1][j]) / (smx + smy);
            working_space[i + 1][j + 1] = a;
            nom = nom + a;
         }
      }
      for(i = xmin; i <= xmax; i++){
         for(j = ymin; j <= ymax; j++){
            working_space[i][j] = working_space[i][j] / nom;
         }
      }
      for(i = 0; i < ssizex_ext; i++){
         for(j = 0; j < ssizey_ext; j++){
            working_space[i][j + ssizey_ext] = working_space[i][j] * plocha;
            working_space[i][2 * ssizey_ext + j] = working_space[i][ssizey_ext + j];
         }
      }
   }
   //deconvolution starts
   area = 0;
   lhx = -1,lhy = -1;
   positx = 0,posity = 0;
   maximum = 0;
   //generate response matrix
   for(i = 0; i < ssizex_ext; i++){
      for(j = 0; j < ssizey_ext; j++){
         lda = (Double_t)i - 3 * sigma;
         ldb = (Double_t)j - 3 * sigma;
         lda = (lda * lda + ldb * ldb) / (2 * sigma * sigma);
         k=(Int_t)(1000 * TMath::Exp(-lda));
         lda = k;
         if(lda != 0){
            if((i + 1) > lhx)
               lhx = i + 1;

            if((j + 1) > lhy)
               lhy = j + 1;
         }
         working_space[i][j] = lda;
         area = area + lda;
         if(lda > maximum){
            maximum = lda;
            positx = i,posity = j;
         }
      }
   }
   //read source matrix
   for(i = 0;i < ssizex_ext; i++){
      for(j = 0;j < ssizey_ext; j++){
         working_space[i][j + 14 * ssizey_ext] = TMath::Abs(working_space[i][j + ssizey_ext]);
      }
   }
   //calculate matrix b=ht*h
   i = lhx - 1;
   if(i > ssizex_ext)
      i = ssizex_ext;

   j = lhy - 1;
   if(j>ssizey_ext)
      j = ssizey_ext;

   i1min = -i,i1max = i;
   i2min = -j,i2max = j;
   for(i2 = i2min; i2 <= i2max; i2++){
      for(i1 = i1min; i1 <= i1max; i1++){
         ldc = 0;
         j2min = -i2;
         if(j2min < 0)
            j2min = 0;

         j2max = lhy - 1 - i2;
         if(j2max > lhy - 1)
            j2max = lhy - 1;

         for(j2 = j2min; j2 <= j2max; j2++){
            j1min = -i1;
            if(j1min < 0)
               j1min = 0;

            j1max = lhx - 1 - i1;
            if(j1max > lhx - 1)
               j1max = lhx - 1;

            for(j1 = j1min; j1 <= j1max; j1++){
               lda = working_space[j1][j2];
               ldb = working_space[i1 + j1][i2 + j2];
               ldc = ldc + lda * ldb;
            }
         }
         k = (i1 + ssizex_ext) / ssizex_ext;
         working_space[(i1 + ssizex_ext) % ssizex_ext][i2 + ssizey_ext + 10 * ssizey_ext + k * 2 * ssizey_ext] = ldc;
      }
   }
   //calculate at*y and write into p
   i = lhx - 1;
   if(i > ssizex_ext)
      i = ssizex_ext;

   j = lhy - 1;
   if(j > ssizey_ext)
      j = ssizey_ext;

   i2min = -j,i2max = ssizey_ext + j - 1;
   i1min = -i,i1max = ssizex_ext + i - 1;
   for(i2 = i2min; i2 <= i2max; i2++){
      for(i1=i1min;i1<=i1max;i1++){
         ldc=0;
         for(j2 = 0; j2 <= (lhy - 1); j2++){
            for(j1 = 0; j1 <= (lhx - 1); j1++){
               k2 = i2 + j2,k1 = i1 + j1;
               if(k2 >= 0 && k2 < ssizey_ext && k1 >= 0 && k1 < ssizex_ext){
                  lda = working_space[j1][j2];
                  ldb = working_space[k1][k2 + 14 * ssizey_ext];
                  ldc = ldc + lda * ldb;
               }
            }
         }
         k = (i1 + ssizex_ext) / ssizex_ext;
         working_space[(i1 + ssizex_ext) % ssizex_ext][i2 + ssizey_ext + ssizey_ext + k * 3 * ssizey_ext] = ldc;
      }
   }
   //move matrix p
   for(i2 = 0; i2 < ssizey_ext; i2++){
      for(i1 = 0; i1 < ssizex_ext; i1++){
         k = (i1 + ssizex_ext) / ssizex_ext;
         ldb = working_space[(i1 + ssizex_ext) % ssizex_ext][i2 + ssizey_ext + ssizey_ext + k * 3 * ssizey_ext];
         working_space[i1][i2 + 14 * ssizey_ext] = ldb;
      }
   }
   //initialization in x1 matrix
   for(i2 = 0; i2 < ssizey_ext; i2++){
      for(i1 = 0; i1 < ssizex_ext; i1++){
         working_space[i1][i2 + ssizey_ext] = 1;
         working_space[i1][i2 + 2 * ssizey_ext] = 0;
      }
   }
   //START OF ITERATIONS
   for(lindex = 0; lindex < deconIterations; lindex++){
      for(i2 = 0; i2 < ssizey_ext; i2++){
         for(i1 = 0; i1 < ssizex_ext; i1++){
            lda = working_space[i1][i2 + ssizey_ext];
            ldc = working_space[i1][i2 + 14 * ssizey_ext];
            if(lda > 0.000001 && ldc > 0.000001){
               ldb=0;
               j2min=i2;
               if(j2min > lhy - 1)
                  j2min = lhy - 1;

               j2min = -j2min;
               j2max = ssizey_ext - i2 - 1;
               if(j2max > lhy - 1)
                  j2max = lhy - 1;

               j1min = i1;
               if(j1min > lhx - 1)
                  j1min = lhx - 1;

               j1min = -j1min;
               j1max = ssizex_ext - i1 - 1;
               if(j1max > lhx - 1)
                  j1max = lhx - 1;

               for(j2 = j2min; j2 <= j2max; j2++){
                  for(j1 = j1min; j1 <= j1max; j1++){
                     k = (j1 + ssizex_ext) / ssizex_ext;
                     ldc = working_space[(j1 + ssizex_ext) % ssizex_ext][j2 + ssizey_ext + 10 * ssizey_ext + k * 2 * ssizey_ext];
                     lda = working_space[i1 + j1][i2 + j2 + ssizey_ext];
                     ldb = ldb + lda * ldc;
                  }
               }
               lda = working_space[i1][i2 + ssizey_ext];
               ldc = working_space[i1][i2 + 14 * ssizey_ext];
               if(ldc * lda != 0 && ldb != 0){
                  lda =lda * ldc / ldb;
               }

               else
                  lda=0;
               working_space[i1][i2 + 2 * ssizey_ext] = lda;
            }
         }
      }
      for(i2 = 0; i2 < ssizey_ext; i2++){
         for(i1 = 0; i1 < ssizex_ext; i1++)
            working_space[i1][i2 + ssizey_ext] = working_space[i1][i2 + 2 * ssizey_ext];
      }
   }
   //looking for maximum
   maximum=0;
   for(i = 0; i < ssizex_ext; i++){
      for(j = 0; j < ssizey_ext; j++){
         working_space[(i + positx) % ssizex_ext][(j + posity) % ssizey_ext] = area * working_space[i][j + ssizey_ext];
         if(maximum < working_space[(i + positx) % ssizex_ext][(j + posity) % ssizey_ext])
            maximum = working_space[(i + positx) % ssizex_ext][(j + posity) % ssizey_ext];

      }
   }
   //searching for peaks in deconvolved spectrum
   for(i = 1; i < ssizex_ext - 1; i++){
      for(j = 1; j < ssizey_ext - 1; j++){
         if(working_space[i][j] > working_space[i - 1][j] && working_space[i][j] > working_space[i - 1][j - 1] && working_space[i][j] > working_space[i][j - 1] && working_space[i][j] > working_space[i + 1][j - 1] && working_space[i][j] > working_space[i + 1][j] && working_space[i][j] > working_space[i + 1][j + 1] && working_space[i][j] > working_space[i][j + 1] && working_space[i][j] > working_space[i - 1][j + 1]){
            if(i >= shift && i < ssizex + shift && j >= shift && j < ssizey + shift){
               if(working_space[i][j] > threshold * maximum / 100.0){
                  if(peak_index < fMaxPeaks){
                     for(k = i - 1,a = 0,b = 0; k <= i + 1; k++){
                        a += (Double_t)(k - shift) * working_space[k][j];
                        b += working_space[k][j];
                     }
                     ax=a/b;
                     if(ax < 0)
                        ax = 0;

                     if(ax >= ssizex)
                        ax = ssizex - 1;

                     for(k = j - 1,a = 0,b = 0; k <= j + 1; k++){
                        a += (Double_t)(k - shift) * working_space[i][k];
                        b += working_space[i][k];
                     }
                     ay=a/b;
                     if(ay < 0)
                        ay = 0;

                     if(ay >= ssizey)
                        ay = ssizey - 1;

                     if(peak_index == 0){
                        fPositionX[0] = ax;
                        fPositionY[0] = ay;
                        peak_index = 1;
                     }

                     else{
                        for(k = 0, priz = 0; k < peak_index && priz == 0; k++){
                           if(working_space[shift+(Int_t)(ax+0.5)][15 * ssizey_ext + shift + (Int_t)(ay+0.5)] > working_space[shift+(Int_t)(fPositionX[k]+0.5)][15 * ssizey_ext + shift + (Int_t)(fPositionY[k]+0.5)])
                              priz = 1;
                        }
                        if(priz == 0){
                           if(k < fMaxPeaks){
                              fPositionX[k] = ax;
                              fPositionY[k] = ay;
                           }
                        }

                        else{
                           for(l = peak_index; l >= k; l--){
                              if(l < fMaxPeaks){
                                 fPositionX[l] = fPositionX[l - 1];
                                 fPositionY[l] = fPositionY[l - 1];
                              }
                           }
                           fPositionX[k - 1] = ax;
                           fPositionY[k - 1] = ay;
                        }
                        if(peak_index < fMaxPeaks)
                           peak_index += 1;
                     }
                  }
               }
            }
         }
      }
   }
   //writing back deconvolved spectrum
   for(i = 0; i < ssizex; i++){
      for(j = 0; j < ssizey; j++){
         dest[i][j] = working_space[i + shift][j + shift];
      }
   }
   i = (Int_t)(4 * sigma + 0.5);
   i = 4 * i;
   for (j = 0; j < ssizex + i; j++)
      delete[]working_space[j];
   delete[]working_space;
   fNPeaks = peak_index;
   return fNPeaks;
}


// STATIC functions (called by TH1)

//_______________________________________________________________________________
Int_t TSpectrum2::StaticSearch(const TH1 *hist, Double_t sigma, Option_t *option, Double_t threshold)
{
   //static function, interface to TSpectrum2::Search

   TSpectrum2 s;
   return s.Search(hist,sigma,option,threshold);
}

//_______________________________________________________________________________
TH1 *TSpectrum2::StaticBackground(const TH1 *hist,Int_t niter, Option_t *option)
{
   //static function, interface to TSpectrum2::Background

   TSpectrum2 s;
   return s.Background(hist,niter,option);
}
 TSpectrum2.cxx:1
 TSpectrum2.cxx:2
 TSpectrum2.cxx:3
 TSpectrum2.cxx:4
 TSpectrum2.cxx:5
 TSpectrum2.cxx:6
 TSpectrum2.cxx:7
 TSpectrum2.cxx:8
 TSpectrum2.cxx:9
 TSpectrum2.cxx:10
 TSpectrum2.cxx:11
 TSpectrum2.cxx:12
 TSpectrum2.cxx:13
 TSpectrum2.cxx:14
 TSpectrum2.cxx:15
 TSpectrum2.cxx:16
 TSpectrum2.cxx:17
 TSpectrum2.cxx:18
 TSpectrum2.cxx:19
 TSpectrum2.cxx:20
 TSpectrum2.cxx:21
 TSpectrum2.cxx:22
 TSpectrum2.cxx:23
 TSpectrum2.cxx:24
 TSpectrum2.cxx:25
 TSpectrum2.cxx:26
 TSpectrum2.cxx:27
 TSpectrum2.cxx:28
 TSpectrum2.cxx:29
 TSpectrum2.cxx:30
 TSpectrum2.cxx:31
 TSpectrum2.cxx:32
 TSpectrum2.cxx:33
 TSpectrum2.cxx:34
 TSpectrum2.cxx:35
 TSpectrum2.cxx:36
 TSpectrum2.cxx:37
 TSpectrum2.cxx:38
 TSpectrum2.cxx:39
 TSpectrum2.cxx:40
 TSpectrum2.cxx:41
 TSpectrum2.cxx:42
 TSpectrum2.cxx:43
 TSpectrum2.cxx:44
 TSpectrum2.cxx:45
 TSpectrum2.cxx:46
 TSpectrum2.cxx:47
 TSpectrum2.cxx:48
 TSpectrum2.cxx:49
 TSpectrum2.cxx:50
 TSpectrum2.cxx:51
 TSpectrum2.cxx:52
 TSpectrum2.cxx:53
 TSpectrum2.cxx:54
 TSpectrum2.cxx:55
 TSpectrum2.cxx:56
 TSpectrum2.cxx:57
 TSpectrum2.cxx:58
 TSpectrum2.cxx:59
 TSpectrum2.cxx:60
 TSpectrum2.cxx:61
 TSpectrum2.cxx:62
 TSpectrum2.cxx:63
 TSpectrum2.cxx:64
 TSpectrum2.cxx:65
 TSpectrum2.cxx:66
 TSpectrum2.cxx:67
 TSpectrum2.cxx:68
 TSpectrum2.cxx:69
 TSpectrum2.cxx:70
 TSpectrum2.cxx:71
 TSpectrum2.cxx:72
 TSpectrum2.cxx:73
 TSpectrum2.cxx:74
 TSpectrum2.cxx:75
 TSpectrum2.cxx:76
 TSpectrum2.cxx:77
 TSpectrum2.cxx:78
 TSpectrum2.cxx:79
 TSpectrum2.cxx:80
 TSpectrum2.cxx:81
 TSpectrum2.cxx:82
 TSpectrum2.cxx:83
 TSpectrum2.cxx:84
 TSpectrum2.cxx:85
 TSpectrum2.cxx:86
 TSpectrum2.cxx:87
 TSpectrum2.cxx:88
 TSpectrum2.cxx:89
 TSpectrum2.cxx:90
 TSpectrum2.cxx:91
 TSpectrum2.cxx:92
 TSpectrum2.cxx:93
 TSpectrum2.cxx:94
 TSpectrum2.cxx:95
 TSpectrum2.cxx:96
 TSpectrum2.cxx:97
 TSpectrum2.cxx:98
 TSpectrum2.cxx:99
 TSpectrum2.cxx:100
 TSpectrum2.cxx:101
 TSpectrum2.cxx:102
 TSpectrum2.cxx:103
 TSpectrum2.cxx:104
 TSpectrum2.cxx:105
 TSpectrum2.cxx:106
 TSpectrum2.cxx:107
 TSpectrum2.cxx:108
 TSpectrum2.cxx:109
 TSpectrum2.cxx:110
 TSpectrum2.cxx:111
 TSpectrum2.cxx:112
 TSpectrum2.cxx:113
 TSpectrum2.cxx:114
 TSpectrum2.cxx:115
 TSpectrum2.cxx:116
 TSpectrum2.cxx:117
 TSpectrum2.cxx:118
 TSpectrum2.cxx:119
 TSpectrum2.cxx:120
 TSpectrum2.cxx:121
 TSpectrum2.cxx:122
 TSpectrum2.cxx:123
 TSpectrum2.cxx:124
 TSpectrum2.cxx:125
 TSpectrum2.cxx:126
 TSpectrum2.cxx:127
 TSpectrum2.cxx:128
 TSpectrum2.cxx:129
 TSpectrum2.cxx:130
 TSpectrum2.cxx:131
 TSpectrum2.cxx:132
 TSpectrum2.cxx:133
 TSpectrum2.cxx:134
 TSpectrum2.cxx:135
 TSpectrum2.cxx:136
 TSpectrum2.cxx:137
 TSpectrum2.cxx:138
 TSpectrum2.cxx:139
 TSpectrum2.cxx:140
 TSpectrum2.cxx:141
 TSpectrum2.cxx:142
 TSpectrum2.cxx:143
 TSpectrum2.cxx:144
 TSpectrum2.cxx:145
 TSpectrum2.cxx:146
 TSpectrum2.cxx:147
 TSpectrum2.cxx:148
 TSpectrum2.cxx:149
 TSpectrum2.cxx:150
 TSpectrum2.cxx:151
 TSpectrum2.cxx:152
 TSpectrum2.cxx:153
 TSpectrum2.cxx:154
 TSpectrum2.cxx:155
 TSpectrum2.cxx:156
 TSpectrum2.cxx:157
 TSpectrum2.cxx:158
 TSpectrum2.cxx:159
 TSpectrum2.cxx:160
 TSpectrum2.cxx:161
 TSpectrum2.cxx:162
 TSpectrum2.cxx:163
 TSpectrum2.cxx:164
 TSpectrum2.cxx:165
 TSpectrum2.cxx:166
 TSpectrum2.cxx:167
 TSpectrum2.cxx:168
 TSpectrum2.cxx:169
 TSpectrum2.cxx:170
 TSpectrum2.cxx:171
 TSpectrum2.cxx:172
 TSpectrum2.cxx:173
 TSpectrum2.cxx:174
 TSpectrum2.cxx:175
 TSpectrum2.cxx:176
 TSpectrum2.cxx:177
 TSpectrum2.cxx:178
 TSpectrum2.cxx:179
 TSpectrum2.cxx:180
 TSpectrum2.cxx:181
 TSpectrum2.cxx:182
 TSpectrum2.cxx:183
 TSpectrum2.cxx:184
 TSpectrum2.cxx:185
 TSpectrum2.cxx:186
 TSpectrum2.cxx:187
 TSpectrum2.cxx:188
 TSpectrum2.cxx:189
 TSpectrum2.cxx:190
 TSpectrum2.cxx:191
 TSpectrum2.cxx:192
 TSpectrum2.cxx:193
 TSpectrum2.cxx:194
 TSpectrum2.cxx:195
 TSpectrum2.cxx:196
 TSpectrum2.cxx:197
 TSpectrum2.cxx:198
 TSpectrum2.cxx:199
 TSpectrum2.cxx:200
 TSpectrum2.cxx:201
 TSpectrum2.cxx:202
 TSpectrum2.cxx:203
 TSpectrum2.cxx:204
 TSpectrum2.cxx:205
 TSpectrum2.cxx:206
 TSpectrum2.cxx:207
 TSpectrum2.cxx:208
 TSpectrum2.cxx:209
 TSpectrum2.cxx:210
 TSpectrum2.cxx:211
 TSpectrum2.cxx:212
 TSpectrum2.cxx:213
 TSpectrum2.cxx:214
 TSpectrum2.cxx:215
 TSpectrum2.cxx:216
 TSpectrum2.cxx:217
 TSpectrum2.cxx:218
 TSpectrum2.cxx:219
 TSpectrum2.cxx:220
 TSpectrum2.cxx:221
 TSpectrum2.cxx:222
 TSpectrum2.cxx:223
 TSpectrum2.cxx:224
 TSpectrum2.cxx:225
 TSpectrum2.cxx:226
 TSpectrum2.cxx:227
 TSpectrum2.cxx:228
 TSpectrum2.cxx:229
 TSpectrum2.cxx:230
 TSpectrum2.cxx:231
 TSpectrum2.cxx:232
 TSpectrum2.cxx:233
 TSpectrum2.cxx:234
 TSpectrum2.cxx:235
 TSpectrum2.cxx:236
 TSpectrum2.cxx:237
 TSpectrum2.cxx:238
 TSpectrum2.cxx:239
 TSpectrum2.cxx:240
 TSpectrum2.cxx:241
 TSpectrum2.cxx:242
 TSpectrum2.cxx:243
 TSpectrum2.cxx:244
 TSpectrum2.cxx:245
 TSpectrum2.cxx:246
 TSpectrum2.cxx:247
 TSpectrum2.cxx:248
 TSpectrum2.cxx:249
 TSpectrum2.cxx:250
 TSpectrum2.cxx:251
 TSpectrum2.cxx:252
 TSpectrum2.cxx:253
 TSpectrum2.cxx:254
 TSpectrum2.cxx:255
 TSpectrum2.cxx:256
 TSpectrum2.cxx:257
 TSpectrum2.cxx:258
 TSpectrum2.cxx:259
 TSpectrum2.cxx:260
 TSpectrum2.cxx:261
 TSpectrum2.cxx:262
 TSpectrum2.cxx:263
 TSpectrum2.cxx:264
 TSpectrum2.cxx:265
 TSpectrum2.cxx:266
 TSpectrum2.cxx:267
 TSpectrum2.cxx:268
 TSpectrum2.cxx:269
 TSpectrum2.cxx:270
 TSpectrum2.cxx:271
 TSpectrum2.cxx:272
 TSpectrum2.cxx:273
 TSpectrum2.cxx:274
 TSpectrum2.cxx:275
 TSpectrum2.cxx:276
 TSpectrum2.cxx:277
 TSpectrum2.cxx:278
 TSpectrum2.cxx:279
 TSpectrum2.cxx:280
 TSpectrum2.cxx:281
 TSpectrum2.cxx:282
 TSpectrum2.cxx:283
 TSpectrum2.cxx:284
 TSpectrum2.cxx:285
 TSpectrum2.cxx:286
 TSpectrum2.cxx:287
 TSpectrum2.cxx:288
 TSpectrum2.cxx:289
 TSpectrum2.cxx:290
 TSpectrum2.cxx:291
 TSpectrum2.cxx:292
 TSpectrum2.cxx:293
 TSpectrum2.cxx:294
 TSpectrum2.cxx:295
 TSpectrum2.cxx:296
 TSpectrum2.cxx:297
 TSpectrum2.cxx:298
 TSpectrum2.cxx:299
 TSpectrum2.cxx:300
 TSpectrum2.cxx:301
 TSpectrum2.cxx:302
 TSpectrum2.cxx:303
 TSpectrum2.cxx:304
 TSpectrum2.cxx:305
 TSpectrum2.cxx:306
 TSpectrum2.cxx:307
 TSpectrum2.cxx:308
 TSpectrum2.cxx:309
 TSpectrum2.cxx:310
 TSpectrum2.cxx:311
 TSpectrum2.cxx:312
 TSpectrum2.cxx:313
 TSpectrum2.cxx:314
 TSpectrum2.cxx:315
 TSpectrum2.cxx:316
 TSpectrum2.cxx:317
 TSpectrum2.cxx:318
 TSpectrum2.cxx:319
 TSpectrum2.cxx:320
 TSpectrum2.cxx:321
 TSpectrum2.cxx:322
 TSpectrum2.cxx:323
 TSpectrum2.cxx:324
 TSpectrum2.cxx:325
 TSpectrum2.cxx:326
 TSpectrum2.cxx:327
 TSpectrum2.cxx:328
 TSpectrum2.cxx:329
 TSpectrum2.cxx:330
 TSpectrum2.cxx:331
 TSpectrum2.cxx:332
 TSpectrum2.cxx:333
 TSpectrum2.cxx:334
 TSpectrum2.cxx:335
 TSpectrum2.cxx:336
 TSpectrum2.cxx:337
 TSpectrum2.cxx:338
 TSpectrum2.cxx:339
 TSpectrum2.cxx:340
 TSpectrum2.cxx:341
 TSpectrum2.cxx:342
 TSpectrum2.cxx:343
 TSpectrum2.cxx:344
 TSpectrum2.cxx:345
 TSpectrum2.cxx:346
 TSpectrum2.cxx:347
 TSpectrum2.cxx:348
 TSpectrum2.cxx:349
 TSpectrum2.cxx:350
 TSpectrum2.cxx:351
 TSpectrum2.cxx:352
 TSpectrum2.cxx:353
 TSpectrum2.cxx:354
 TSpectrum2.cxx:355
 TSpectrum2.cxx:356
 TSpectrum2.cxx:357
 TSpectrum2.cxx:358
 TSpectrum2.cxx:359
 TSpectrum2.cxx:360
 TSpectrum2.cxx:361
 TSpectrum2.cxx:362
 TSpectrum2.cxx:363
 TSpectrum2.cxx:364
 TSpectrum2.cxx:365
 TSpectrum2.cxx:366
 TSpectrum2.cxx:367
 TSpectrum2.cxx:368
 TSpectrum2.cxx:369
 TSpectrum2.cxx:370
 TSpectrum2.cxx:371
 TSpectrum2.cxx:372
 TSpectrum2.cxx:373
 TSpectrum2.cxx:374
 TSpectrum2.cxx:375
 TSpectrum2.cxx:376
 TSpectrum2.cxx:377
 TSpectrum2.cxx:378
 TSpectrum2.cxx:379
 TSpectrum2.cxx:380
 TSpectrum2.cxx:381
 TSpectrum2.cxx:382
 TSpectrum2.cxx:383
 TSpectrum2.cxx:384
 TSpectrum2.cxx:385
 TSpectrum2.cxx:386
 TSpectrum2.cxx:387
 TSpectrum2.cxx:388
 TSpectrum2.cxx:389
 TSpectrum2.cxx:390
 TSpectrum2.cxx:391
 TSpectrum2.cxx:392
 TSpectrum2.cxx:393
 TSpectrum2.cxx:394
 TSpectrum2.cxx:395
 TSpectrum2.cxx:396
 TSpectrum2.cxx:397
 TSpectrum2.cxx:398
 TSpectrum2.cxx:399
 TSpectrum2.cxx:400
 TSpectrum2.cxx:401
 TSpectrum2.cxx:402
 TSpectrum2.cxx:403
 TSpectrum2.cxx:404
 TSpectrum2.cxx:405
 TSpectrum2.cxx:406
 TSpectrum2.cxx:407
 TSpectrum2.cxx:408
 TSpectrum2.cxx:409
 TSpectrum2.cxx:410
 TSpectrum2.cxx:411
 TSpectrum2.cxx:412
 TSpectrum2.cxx:413
 TSpectrum2.cxx:414
 TSpectrum2.cxx:415
 TSpectrum2.cxx:416
 TSpectrum2.cxx:417
 TSpectrum2.cxx:418
 TSpectrum2.cxx:419
 TSpectrum2.cxx:420
 TSpectrum2.cxx:421
 TSpectrum2.cxx:422
 TSpectrum2.cxx:423
 TSpectrum2.cxx:424
 TSpectrum2.cxx:425
 TSpectrum2.cxx:426
 TSpectrum2.cxx:427
 TSpectrum2.cxx:428
 TSpectrum2.cxx:429
 TSpectrum2.cxx:430
 TSpectrum2.cxx:431
 TSpectrum2.cxx:432
 TSpectrum2.cxx:433
 TSpectrum2.cxx:434
 TSpectrum2.cxx:435
 TSpectrum2.cxx:436
 TSpectrum2.cxx:437
 TSpectrum2.cxx:438
 TSpectrum2.cxx:439
 TSpectrum2.cxx:440
 TSpectrum2.cxx:441
 TSpectrum2.cxx:442
 TSpectrum2.cxx:443
 TSpectrum2.cxx:444
 TSpectrum2.cxx:445
 TSpectrum2.cxx:446
 TSpectrum2.cxx:447
 TSpectrum2.cxx:448
 TSpectrum2.cxx:449
 TSpectrum2.cxx:450
 TSpectrum2.cxx:451
 TSpectrum2.cxx:452
 TSpectrum2.cxx:453
 TSpectrum2.cxx:454
 TSpectrum2.cxx:455
 TSpectrum2.cxx:456
 TSpectrum2.cxx:457
 TSpectrum2.cxx:458
 TSpectrum2.cxx:459
 TSpectrum2.cxx:460
 TSpectrum2.cxx:461
 TSpectrum2.cxx:462
 TSpectrum2.cxx:463
 TSpectrum2.cxx:464
 TSpectrum2.cxx:465
 TSpectrum2.cxx:466
 TSpectrum2.cxx:467
 TSpectrum2.cxx:468
 TSpectrum2.cxx:469
 TSpectrum2.cxx:470
 TSpectrum2.cxx:471
 TSpectrum2.cxx:472
 TSpectrum2.cxx:473
 TSpectrum2.cxx:474
 TSpectrum2.cxx:475
 TSpectrum2.cxx:476
 TSpectrum2.cxx:477
 TSpectrum2.cxx:478
 TSpectrum2.cxx:479
 TSpectrum2.cxx:480
 TSpectrum2.cxx:481
 TSpectrum2.cxx:482
 TSpectrum2.cxx:483
 TSpectrum2.cxx:484
 TSpectrum2.cxx:485
 TSpectrum2.cxx:486
 TSpectrum2.cxx:487
 TSpectrum2.cxx:488
 TSpectrum2.cxx:489
 TSpectrum2.cxx:490
 TSpectrum2.cxx:491
 TSpectrum2.cxx:492
 TSpectrum2.cxx:493
 TSpectrum2.cxx:494
 TSpectrum2.cxx:495
 TSpectrum2.cxx:496
 TSpectrum2.cxx:497
 TSpectrum2.cxx:498
 TSpectrum2.cxx:499
 TSpectrum2.cxx:500
 TSpectrum2.cxx:501
 TSpectrum2.cxx:502
 TSpectrum2.cxx:503
 TSpectrum2.cxx:504
 TSpectrum2.cxx:505
 TSpectrum2.cxx:506
 TSpectrum2.cxx:507
 TSpectrum2.cxx:508
 TSpectrum2.cxx:509
 TSpectrum2.cxx:510
 TSpectrum2.cxx:511
 TSpectrum2.cxx:512
 TSpectrum2.cxx:513
 TSpectrum2.cxx:514
 TSpectrum2.cxx:515
 TSpectrum2.cxx:516
 TSpectrum2.cxx:517
 TSpectrum2.cxx:518
 TSpectrum2.cxx:519
 TSpectrum2.cxx:520
 TSpectrum2.cxx:521
 TSpectrum2.cxx:522
 TSpectrum2.cxx:523
 TSpectrum2.cxx:524
 TSpectrum2.cxx:525
 TSpectrum2.cxx:526
 TSpectrum2.cxx:527
 TSpectrum2.cxx:528
 TSpectrum2.cxx:529
 TSpectrum2.cxx:530
 TSpectrum2.cxx:531
 TSpectrum2.cxx:532
 TSpectrum2.cxx:533
 TSpectrum2.cxx:534
 TSpectrum2.cxx:535
 TSpectrum2.cxx:536
 TSpectrum2.cxx:537
 TSpectrum2.cxx:538
 TSpectrum2.cxx:539
 TSpectrum2.cxx:540
 TSpectrum2.cxx:541
 TSpectrum2.cxx:542
 TSpectrum2.cxx:543
 TSpectrum2.cxx:544
 TSpectrum2.cxx:545
 TSpectrum2.cxx:546
 TSpectrum2.cxx:547
 TSpectrum2.cxx:548
 TSpectrum2.cxx:549
 TSpectrum2.cxx:550
 TSpectrum2.cxx:551
 TSpectrum2.cxx:552
 TSpectrum2.cxx:553
 TSpectrum2.cxx:554
 TSpectrum2.cxx:555
 TSpectrum2.cxx:556
 TSpectrum2.cxx:557
 TSpectrum2.cxx:558
 TSpectrum2.cxx:559
 TSpectrum2.cxx:560
 TSpectrum2.cxx:561
 TSpectrum2.cxx:562
 TSpectrum2.cxx:563
 TSpectrum2.cxx:564
 TSpectrum2.cxx:565
 TSpectrum2.cxx:566
 TSpectrum2.cxx:567
 TSpectrum2.cxx:568
 TSpectrum2.cxx:569
 TSpectrum2.cxx:570
 TSpectrum2.cxx:571
 TSpectrum2.cxx:572
 TSpectrum2.cxx:573
 TSpectrum2.cxx:574
 TSpectrum2.cxx:575
 TSpectrum2.cxx:576
 TSpectrum2.cxx:577
 TSpectrum2.cxx:578
 TSpectrum2.cxx:579
 TSpectrum2.cxx:580
 TSpectrum2.cxx:581
 TSpectrum2.cxx:582
 TSpectrum2.cxx:583
 TSpectrum2.cxx:584
 TSpectrum2.cxx:585
 TSpectrum2.cxx:586
 TSpectrum2.cxx:587
 TSpectrum2.cxx:588
 TSpectrum2.cxx:589
 TSpectrum2.cxx:590
 TSpectrum2.cxx:591
 TSpectrum2.cxx:592
 TSpectrum2.cxx:593
 TSpectrum2.cxx:594
 TSpectrum2.cxx:595
 TSpectrum2.cxx:596
 TSpectrum2.cxx:597
 TSpectrum2.cxx:598
 TSpectrum2.cxx:599
 TSpectrum2.cxx:600
 TSpectrum2.cxx:601
 TSpectrum2.cxx:602
 TSpectrum2.cxx:603
 TSpectrum2.cxx:604
 TSpectrum2.cxx:605
 TSpectrum2.cxx:606
 TSpectrum2.cxx:607
 TSpectrum2.cxx:608
 TSpectrum2.cxx:609
 TSpectrum2.cxx:610
 TSpectrum2.cxx:611
 TSpectrum2.cxx:612
 TSpectrum2.cxx:613
 TSpectrum2.cxx:614
 TSpectrum2.cxx:615
 TSpectrum2.cxx:616
 TSpectrum2.cxx:617
 TSpectrum2.cxx:618
 TSpectrum2.cxx:619
 TSpectrum2.cxx:620
 TSpectrum2.cxx:621
 TSpectrum2.cxx:622
 TSpectrum2.cxx:623
 TSpectrum2.cxx:624
 TSpectrum2.cxx:625
 TSpectrum2.cxx:626
 TSpectrum2.cxx:627
 TSpectrum2.cxx:628
 TSpectrum2.cxx:629
 TSpectrum2.cxx:630
 TSpectrum2.cxx:631
 TSpectrum2.cxx:632
 TSpectrum2.cxx:633
 TSpectrum2.cxx:634
 TSpectrum2.cxx:635
 TSpectrum2.cxx:636
 TSpectrum2.cxx:637
 TSpectrum2.cxx:638
 TSpectrum2.cxx:639
 TSpectrum2.cxx:640
 TSpectrum2.cxx:641
 TSpectrum2.cxx:642
 TSpectrum2.cxx:643
 TSpectrum2.cxx:644
 TSpectrum2.cxx:645
 TSpectrum2.cxx:646
 TSpectrum2.cxx:647
 TSpectrum2.cxx:648
 TSpectrum2.cxx:649
 TSpectrum2.cxx:650
 TSpectrum2.cxx:651
 TSpectrum2.cxx:652
 TSpectrum2.cxx:653
 TSpectrum2.cxx:654
 TSpectrum2.cxx:655
 TSpectrum2.cxx:656
 TSpectrum2.cxx:657
 TSpectrum2.cxx:658
 TSpectrum2.cxx:659
 TSpectrum2.cxx:660
 TSpectrum2.cxx:661
 TSpectrum2.cxx:662
 TSpectrum2.cxx:663
 TSpectrum2.cxx:664
 TSpectrum2.cxx:665
 TSpectrum2.cxx:666
 TSpectrum2.cxx:667
 TSpectrum2.cxx:668
 TSpectrum2.cxx:669
 TSpectrum2.cxx:670
 TSpectrum2.cxx:671
 TSpectrum2.cxx:672
 TSpectrum2.cxx:673
 TSpectrum2.cxx:674
 TSpectrum2.cxx:675
 TSpectrum2.cxx:676
 TSpectrum2.cxx:677
 TSpectrum2.cxx:678
 TSpectrum2.cxx:679
 TSpectrum2.cxx:680
 TSpectrum2.cxx:681
 TSpectrum2.cxx:682
 TSpectrum2.cxx:683
 TSpectrum2.cxx:684
 TSpectrum2.cxx:685
 TSpectrum2.cxx:686
 TSpectrum2.cxx:687
 TSpectrum2.cxx:688
 TSpectrum2.cxx:689
 TSpectrum2.cxx:690
 TSpectrum2.cxx:691
 TSpectrum2.cxx:692
 TSpectrum2.cxx:693
 TSpectrum2.cxx:694
 TSpectrum2.cxx:695
 TSpectrum2.cxx:696
 TSpectrum2.cxx:697
 TSpectrum2.cxx:698
 TSpectrum2.cxx:699
 TSpectrum2.cxx:700
 TSpectrum2.cxx:701
 TSpectrum2.cxx:702
 TSpectrum2.cxx:703
 TSpectrum2.cxx:704
 TSpectrum2.cxx:705
 TSpectrum2.cxx:706
 TSpectrum2.cxx:707
 TSpectrum2.cxx:708
 TSpectrum2.cxx:709
 TSpectrum2.cxx:710
 TSpectrum2.cxx:711
 TSpectrum2.cxx:712
 TSpectrum2.cxx:713
 TSpectrum2.cxx:714
 TSpectrum2.cxx:715
 TSpectrum2.cxx:716
 TSpectrum2.cxx:717
 TSpectrum2.cxx:718
 TSpectrum2.cxx:719
 TSpectrum2.cxx:720
 TSpectrum2.cxx:721
 TSpectrum2.cxx:722
 TSpectrum2.cxx:723
 TSpectrum2.cxx:724
 TSpectrum2.cxx:725
 TSpectrum2.cxx:726
 TSpectrum2.cxx:727
 TSpectrum2.cxx:728
 TSpectrum2.cxx:729
 TSpectrum2.cxx:730
 TSpectrum2.cxx:731
 TSpectrum2.cxx:732
 TSpectrum2.cxx:733
 TSpectrum2.cxx:734
 TSpectrum2.cxx:735
 TSpectrum2.cxx:736
 TSpectrum2.cxx:737
 TSpectrum2.cxx:738
 TSpectrum2.cxx:739
 TSpectrum2.cxx:740
 TSpectrum2.cxx:741
 TSpectrum2.cxx:742
 TSpectrum2.cxx:743
 TSpectrum2.cxx:744
 TSpectrum2.cxx:745
 TSpectrum2.cxx:746
 TSpectrum2.cxx:747
 TSpectrum2.cxx:748
 TSpectrum2.cxx:749
 TSpectrum2.cxx:750
 TSpectrum2.cxx:751
 TSpectrum2.cxx:752
 TSpectrum2.cxx:753
 TSpectrum2.cxx:754
 TSpectrum2.cxx:755
 TSpectrum2.cxx:756
 TSpectrum2.cxx:757
 TSpectrum2.cxx:758
 TSpectrum2.cxx:759
 TSpectrum2.cxx:760
 TSpectrum2.cxx:761
 TSpectrum2.cxx:762
 TSpectrum2.cxx:763
 TSpectrum2.cxx:764
 TSpectrum2.cxx:765
 TSpectrum2.cxx:766
 TSpectrum2.cxx:767
 TSpectrum2.cxx:768
 TSpectrum2.cxx:769
 TSpectrum2.cxx:770
 TSpectrum2.cxx:771
 TSpectrum2.cxx:772
 TSpectrum2.cxx:773
 TSpectrum2.cxx:774
 TSpectrum2.cxx:775
 TSpectrum2.cxx:776
 TSpectrum2.cxx:777
 TSpectrum2.cxx:778
 TSpectrum2.cxx:779
 TSpectrum2.cxx:780
 TSpectrum2.cxx:781
 TSpectrum2.cxx:782
 TSpectrum2.cxx:783
 TSpectrum2.cxx:784
 TSpectrum2.cxx:785
 TSpectrum2.cxx:786
 TSpectrum2.cxx:787
 TSpectrum2.cxx:788
 TSpectrum2.cxx:789
 TSpectrum2.cxx:790
 TSpectrum2.cxx:791
 TSpectrum2.cxx:792
 TSpectrum2.cxx:793
 TSpectrum2.cxx:794
 TSpectrum2.cxx:795
 TSpectrum2.cxx:796
 TSpectrum2.cxx:797
 TSpectrum2.cxx:798
 TSpectrum2.cxx:799
 TSpectrum2.cxx:800
 TSpectrum2.cxx:801
 TSpectrum2.cxx:802
 TSpectrum2.cxx:803
 TSpectrum2.cxx:804
 TSpectrum2.cxx:805
 TSpectrum2.cxx:806
 TSpectrum2.cxx:807
 TSpectrum2.cxx:808
 TSpectrum2.cxx:809
 TSpectrum2.cxx:810
 TSpectrum2.cxx:811
 TSpectrum2.cxx:812
 TSpectrum2.cxx:813
 TSpectrum2.cxx:814
 TSpectrum2.cxx:815
 TSpectrum2.cxx:816
 TSpectrum2.cxx:817
 TSpectrum2.cxx:818
 TSpectrum2.cxx:819
 TSpectrum2.cxx:820
 TSpectrum2.cxx:821
 TSpectrum2.cxx:822
 TSpectrum2.cxx:823
 TSpectrum2.cxx:824
 TSpectrum2.cxx:825
 TSpectrum2.cxx:826
 TSpectrum2.cxx:827
 TSpectrum2.cxx:828
 TSpectrum2.cxx:829
 TSpectrum2.cxx:830
 TSpectrum2.cxx:831
 TSpectrum2.cxx:832
 TSpectrum2.cxx:833
 TSpectrum2.cxx:834
 TSpectrum2.cxx:835
 TSpectrum2.cxx:836
 TSpectrum2.cxx:837
 TSpectrum2.cxx:838
 TSpectrum2.cxx:839
 TSpectrum2.cxx:840
 TSpectrum2.cxx:841
 TSpectrum2.cxx:842
 TSpectrum2.cxx:843
 TSpectrum2.cxx:844
 TSpectrum2.cxx:845
 TSpectrum2.cxx:846
 TSpectrum2.cxx:847
 TSpectrum2.cxx:848
 TSpectrum2.cxx:849
 TSpectrum2.cxx:850
 TSpectrum2.cxx:851
 TSpectrum2.cxx:852
 TSpectrum2.cxx:853
 TSpectrum2.cxx:854
 TSpectrum2.cxx:855
 TSpectrum2.cxx:856
 TSpectrum2.cxx:857
 TSpectrum2.cxx:858
 TSpectrum2.cxx:859
 TSpectrum2.cxx:860
 TSpectrum2.cxx:861
 TSpectrum2.cxx:862
 TSpectrum2.cxx:863
 TSpectrum2.cxx:864
 TSpectrum2.cxx:865
 TSpectrum2.cxx:866
 TSpectrum2.cxx:867
 TSpectrum2.cxx:868
 TSpectrum2.cxx:869
 TSpectrum2.cxx:870
 TSpectrum2.cxx:871
 TSpectrum2.cxx:872
 TSpectrum2.cxx:873
 TSpectrum2.cxx:874
 TSpectrum2.cxx:875
 TSpectrum2.cxx:876
 TSpectrum2.cxx:877
 TSpectrum2.cxx:878
 TSpectrum2.cxx:879
 TSpectrum2.cxx:880
 TSpectrum2.cxx:881
 TSpectrum2.cxx:882
 TSpectrum2.cxx:883
 TSpectrum2.cxx:884
 TSpectrum2.cxx:885
 TSpectrum2.cxx:886
 TSpectrum2.cxx:887
 TSpectrum2.cxx:888
 TSpectrum2.cxx:889
 TSpectrum2.cxx:890
 TSpectrum2.cxx:891
 TSpectrum2.cxx:892
 TSpectrum2.cxx:893
 TSpectrum2.cxx:894
 TSpectrum2.cxx:895
 TSpectrum2.cxx:896
 TSpectrum2.cxx:897
 TSpectrum2.cxx:898
 TSpectrum2.cxx:899
 TSpectrum2.cxx:900
 TSpectrum2.cxx:901
 TSpectrum2.cxx:902
 TSpectrum2.cxx:903
 TSpectrum2.cxx:904
 TSpectrum2.cxx:905
 TSpectrum2.cxx:906
 TSpectrum2.cxx:907
 TSpectrum2.cxx:908
 TSpectrum2.cxx:909
 TSpectrum2.cxx:910
 TSpectrum2.cxx:911
 TSpectrum2.cxx:912
 TSpectrum2.cxx:913
 TSpectrum2.cxx:914
 TSpectrum2.cxx:915
 TSpectrum2.cxx:916
 TSpectrum2.cxx:917
 TSpectrum2.cxx:918
 TSpectrum2.cxx:919
 TSpectrum2.cxx:920
 TSpectrum2.cxx:921
 TSpectrum2.cxx:922
 TSpectrum2.cxx:923
 TSpectrum2.cxx:924
 TSpectrum2.cxx:925
 TSpectrum2.cxx:926
 TSpectrum2.cxx:927
 TSpectrum2.cxx:928
 TSpectrum2.cxx:929
 TSpectrum2.cxx:930
 TSpectrum2.cxx:931
 TSpectrum2.cxx:932
 TSpectrum2.cxx:933
 TSpectrum2.cxx:934
 TSpectrum2.cxx:935
 TSpectrum2.cxx:936
 TSpectrum2.cxx:937
 TSpectrum2.cxx:938
 TSpectrum2.cxx:939
 TSpectrum2.cxx:940
 TSpectrum2.cxx:941
 TSpectrum2.cxx:942
 TSpectrum2.cxx:943
 TSpectrum2.cxx:944
 TSpectrum2.cxx:945
 TSpectrum2.cxx:946
 TSpectrum2.cxx:947
 TSpectrum2.cxx:948
 TSpectrum2.cxx:949
 TSpectrum2.cxx:950
 TSpectrum2.cxx:951
 TSpectrum2.cxx:952
 TSpectrum2.cxx:953
 TSpectrum2.cxx:954
 TSpectrum2.cxx:955
 TSpectrum2.cxx:956
 TSpectrum2.cxx:957
 TSpectrum2.cxx:958
 TSpectrum2.cxx:959
 TSpectrum2.cxx:960
 TSpectrum2.cxx:961
 TSpectrum2.cxx:962
 TSpectrum2.cxx:963
 TSpectrum2.cxx:964
 TSpectrum2.cxx:965
 TSpectrum2.cxx:966
 TSpectrum2.cxx:967
 TSpectrum2.cxx:968
 TSpectrum2.cxx:969
 TSpectrum2.cxx:970
 TSpectrum2.cxx:971
 TSpectrum2.cxx:972
 TSpectrum2.cxx:973
 TSpectrum2.cxx:974
 TSpectrum2.cxx:975
 TSpectrum2.cxx:976
 TSpectrum2.cxx:977
 TSpectrum2.cxx:978
 TSpectrum2.cxx:979
 TSpectrum2.cxx:980
 TSpectrum2.cxx:981
 TSpectrum2.cxx:982
 TSpectrum2.cxx:983
 TSpectrum2.cxx:984
 TSpectrum2.cxx:985
 TSpectrum2.cxx:986
 TSpectrum2.cxx:987
 TSpectrum2.cxx:988
 TSpectrum2.cxx:989
 TSpectrum2.cxx:990
 TSpectrum2.cxx:991
 TSpectrum2.cxx:992
 TSpectrum2.cxx:993
 TSpectrum2.cxx:994
 TSpectrum2.cxx:995
 TSpectrum2.cxx:996
 TSpectrum2.cxx:997
 TSpectrum2.cxx:998
 TSpectrum2.cxx:999
 TSpectrum2.cxx:1000
 TSpectrum2.cxx:1001
 TSpectrum2.cxx:1002
 TSpectrum2.cxx:1003
 TSpectrum2.cxx:1004
 TSpectrum2.cxx:1005
 TSpectrum2.cxx:1006
 TSpectrum2.cxx:1007
 TSpectrum2.cxx:1008
 TSpectrum2.cxx:1009
 TSpectrum2.cxx:1010
 TSpectrum2.cxx:1011
 TSpectrum2.cxx:1012
 TSpectrum2.cxx:1013
 TSpectrum2.cxx:1014
 TSpectrum2.cxx:1015
 TSpectrum2.cxx:1016
 TSpectrum2.cxx:1017
 TSpectrum2.cxx:1018
 TSpectrum2.cxx:1019
 TSpectrum2.cxx:1020
 TSpectrum2.cxx:1021
 TSpectrum2.cxx:1022
 TSpectrum2.cxx:1023
 TSpectrum2.cxx:1024
 TSpectrum2.cxx:1025
 TSpectrum2.cxx:1026
 TSpectrum2.cxx:1027
 TSpectrum2.cxx:1028
 TSpectrum2.cxx:1029
 TSpectrum2.cxx:1030
 TSpectrum2.cxx:1031
 TSpectrum2.cxx:1032
 TSpectrum2.cxx:1033
 TSpectrum2.cxx:1034
 TSpectrum2.cxx:1035
 TSpectrum2.cxx:1036
 TSpectrum2.cxx:1037
 TSpectrum2.cxx:1038
 TSpectrum2.cxx:1039
 TSpectrum2.cxx:1040
 TSpectrum2.cxx:1041
 TSpectrum2.cxx:1042
 TSpectrum2.cxx:1043
 TSpectrum2.cxx:1044
 TSpectrum2.cxx:1045
 TSpectrum2.cxx:1046
 TSpectrum2.cxx:1047
 TSpectrum2.cxx:1048
 TSpectrum2.cxx:1049
 TSpectrum2.cxx:1050
 TSpectrum2.cxx:1051
 TSpectrum2.cxx:1052
 TSpectrum2.cxx:1053
 TSpectrum2.cxx:1054
 TSpectrum2.cxx:1055
 TSpectrum2.cxx:1056
 TSpectrum2.cxx:1057
 TSpectrum2.cxx:1058
 TSpectrum2.cxx:1059
 TSpectrum2.cxx:1060
 TSpectrum2.cxx:1061
 TSpectrum2.cxx:1062
 TSpectrum2.cxx:1063
 TSpectrum2.cxx:1064
 TSpectrum2.cxx:1065
 TSpectrum2.cxx:1066
 TSpectrum2.cxx:1067
 TSpectrum2.cxx:1068
 TSpectrum2.cxx:1069
 TSpectrum2.cxx:1070
 TSpectrum2.cxx:1071
 TSpectrum2.cxx:1072
 TSpectrum2.cxx:1073
 TSpectrum2.cxx:1074
 TSpectrum2.cxx:1075
 TSpectrum2.cxx:1076
 TSpectrum2.cxx:1077
 TSpectrum2.cxx:1078
 TSpectrum2.cxx:1079
 TSpectrum2.cxx:1080
 TSpectrum2.cxx:1081
 TSpectrum2.cxx:1082
 TSpectrum2.cxx:1083
 TSpectrum2.cxx:1084
 TSpectrum2.cxx:1085
 TSpectrum2.cxx:1086
 TSpectrum2.cxx:1087
 TSpectrum2.cxx:1088
 TSpectrum2.cxx:1089
 TSpectrum2.cxx:1090
 TSpectrum2.cxx:1091
 TSpectrum2.cxx:1092
 TSpectrum2.cxx:1093
 TSpectrum2.cxx:1094
 TSpectrum2.cxx:1095
 TSpectrum2.cxx:1096
 TSpectrum2.cxx:1097
 TSpectrum2.cxx:1098
 TSpectrum2.cxx:1099
 TSpectrum2.cxx:1100
 TSpectrum2.cxx:1101
 TSpectrum2.cxx:1102
 TSpectrum2.cxx:1103
 TSpectrum2.cxx:1104
 TSpectrum2.cxx:1105
 TSpectrum2.cxx:1106
 TSpectrum2.cxx:1107
 TSpectrum2.cxx:1108
 TSpectrum2.cxx:1109
 TSpectrum2.cxx:1110
 TSpectrum2.cxx:1111
 TSpectrum2.cxx:1112
 TSpectrum2.cxx:1113
 TSpectrum2.cxx:1114
 TSpectrum2.cxx:1115
 TSpectrum2.cxx:1116
 TSpectrum2.cxx:1117
 TSpectrum2.cxx:1118
 TSpectrum2.cxx:1119
 TSpectrum2.cxx:1120
 TSpectrum2.cxx:1121
 TSpectrum2.cxx:1122
 TSpectrum2.cxx:1123
 TSpectrum2.cxx:1124
 TSpectrum2.cxx:1125
 TSpectrum2.cxx:1126
 TSpectrum2.cxx:1127
 TSpectrum2.cxx:1128
 TSpectrum2.cxx:1129
 TSpectrum2.cxx:1130
 TSpectrum2.cxx:1131
 TSpectrum2.cxx:1132
 TSpectrum2.cxx:1133
 TSpectrum2.cxx:1134
 TSpectrum2.cxx:1135
 TSpectrum2.cxx:1136
 TSpectrum2.cxx:1137
 TSpectrum2.cxx:1138
 TSpectrum2.cxx:1139
 TSpectrum2.cxx:1140
 TSpectrum2.cxx:1141
 TSpectrum2.cxx:1142
 TSpectrum2.cxx:1143
 TSpectrum2.cxx:1144
 TSpectrum2.cxx:1145
 TSpectrum2.cxx:1146
 TSpectrum2.cxx:1147
 TSpectrum2.cxx:1148
 TSpectrum2.cxx:1149
 TSpectrum2.cxx:1150
 TSpectrum2.cxx:1151
 TSpectrum2.cxx:1152
 TSpectrum2.cxx:1153
 TSpectrum2.cxx:1154
 TSpectrum2.cxx:1155
 TSpectrum2.cxx:1156
 TSpectrum2.cxx:1157
 TSpectrum2.cxx:1158
 TSpectrum2.cxx:1159
 TSpectrum2.cxx:1160
 TSpectrum2.cxx:1161
 TSpectrum2.cxx:1162
 TSpectrum2.cxx:1163
 TSpectrum2.cxx:1164
 TSpectrum2.cxx:1165
 TSpectrum2.cxx:1166
 TSpectrum2.cxx:1167
 TSpectrum2.cxx:1168
 TSpectrum2.cxx:1169
 TSpectrum2.cxx:1170
 TSpectrum2.cxx:1171
 TSpectrum2.cxx:1172
 TSpectrum2.cxx:1173
 TSpectrum2.cxx:1174
 TSpectrum2.cxx:1175
 TSpectrum2.cxx:1176
 TSpectrum2.cxx:1177
 TSpectrum2.cxx:1178
 TSpectrum2.cxx:1179
 TSpectrum2.cxx:1180
 TSpectrum2.cxx:1181
 TSpectrum2.cxx:1182
 TSpectrum2.cxx:1183
 TSpectrum2.cxx:1184
 TSpectrum2.cxx:1185
 TSpectrum2.cxx:1186
 TSpectrum2.cxx:1187
 TSpectrum2.cxx:1188
 TSpectrum2.cxx:1189
 TSpectrum2.cxx:1190
 TSpectrum2.cxx:1191
 TSpectrum2.cxx:1192
 TSpectrum2.cxx:1193
 TSpectrum2.cxx:1194
 TSpectrum2.cxx:1195
 TSpectrum2.cxx:1196
 TSpectrum2.cxx:1197
 TSpectrum2.cxx:1198
 TSpectrum2.cxx:1199
 TSpectrum2.cxx:1200
 TSpectrum2.cxx:1201
 TSpectrum2.cxx:1202
 TSpectrum2.cxx:1203
 TSpectrum2.cxx:1204
 TSpectrum2.cxx:1205
 TSpectrum2.cxx:1206
 TSpectrum2.cxx:1207
 TSpectrum2.cxx:1208
 TSpectrum2.cxx:1209
 TSpectrum2.cxx:1210
 TSpectrum2.cxx:1211
 TSpectrum2.cxx:1212
 TSpectrum2.cxx:1213
 TSpectrum2.cxx:1214
 TSpectrum2.cxx:1215
 TSpectrum2.cxx:1216
 TSpectrum2.cxx:1217
 TSpectrum2.cxx:1218
 TSpectrum2.cxx:1219
 TSpectrum2.cxx:1220
 TSpectrum2.cxx:1221
 TSpectrum2.cxx:1222
 TSpectrum2.cxx:1223
 TSpectrum2.cxx:1224
 TSpectrum2.cxx:1225
 TSpectrum2.cxx:1226
 TSpectrum2.cxx:1227
 TSpectrum2.cxx:1228
 TSpectrum2.cxx:1229
 TSpectrum2.cxx:1230
 TSpectrum2.cxx:1231
 TSpectrum2.cxx:1232
 TSpectrum2.cxx:1233
 TSpectrum2.cxx:1234
 TSpectrum2.cxx:1235
 TSpectrum2.cxx:1236
 TSpectrum2.cxx:1237
 TSpectrum2.cxx:1238
 TSpectrum2.cxx:1239
 TSpectrum2.cxx:1240
 TSpectrum2.cxx:1241
 TSpectrum2.cxx:1242
 TSpectrum2.cxx:1243
 TSpectrum2.cxx:1244
 TSpectrum2.cxx:1245
 TSpectrum2.cxx:1246
 TSpectrum2.cxx:1247
 TSpectrum2.cxx:1248
 TSpectrum2.cxx:1249
 TSpectrum2.cxx:1250
 TSpectrum2.cxx:1251
 TSpectrum2.cxx:1252
 TSpectrum2.cxx:1253
 TSpectrum2.cxx:1254
 TSpectrum2.cxx:1255
 TSpectrum2.cxx:1256
 TSpectrum2.cxx:1257
 TSpectrum2.cxx:1258
 TSpectrum2.cxx:1259
 TSpectrum2.cxx:1260
 TSpectrum2.cxx:1261
 TSpectrum2.cxx:1262
 TSpectrum2.cxx:1263
 TSpectrum2.cxx:1264
 TSpectrum2.cxx:1265
 TSpectrum2.cxx:1266
 TSpectrum2.cxx:1267
 TSpectrum2.cxx:1268
 TSpectrum2.cxx:1269
 TSpectrum2.cxx:1270
 TSpectrum2.cxx:1271
 TSpectrum2.cxx:1272
 TSpectrum2.cxx:1273
 TSpectrum2.cxx:1274
 TSpectrum2.cxx:1275
 TSpectrum2.cxx:1276
 TSpectrum2.cxx:1277
 TSpectrum2.cxx:1278
 TSpectrum2.cxx:1279
 TSpectrum2.cxx:1280
 TSpectrum2.cxx:1281
 TSpectrum2.cxx:1282
 TSpectrum2.cxx:1283
 TSpectrum2.cxx:1284
 TSpectrum2.cxx:1285
 TSpectrum2.cxx:1286
 TSpectrum2.cxx:1287
 TSpectrum2.cxx:1288
 TSpectrum2.cxx:1289
 TSpectrum2.cxx:1290
 TSpectrum2.cxx:1291
 TSpectrum2.cxx:1292
 TSpectrum2.cxx:1293
 TSpectrum2.cxx:1294
 TSpectrum2.cxx:1295
 TSpectrum2.cxx:1296
 TSpectrum2.cxx:1297
 TSpectrum2.cxx:1298
 TSpectrum2.cxx:1299
 TSpectrum2.cxx:1300
 TSpectrum2.cxx:1301
 TSpectrum2.cxx:1302
 TSpectrum2.cxx:1303
 TSpectrum2.cxx:1304
 TSpectrum2.cxx:1305
 TSpectrum2.cxx:1306
 TSpectrum2.cxx:1307
 TSpectrum2.cxx:1308
 TSpectrum2.cxx:1309
 TSpectrum2.cxx:1310
 TSpectrum2.cxx:1311
 TSpectrum2.cxx:1312
 TSpectrum2.cxx:1313
 TSpectrum2.cxx:1314
 TSpectrum2.cxx:1315
 TSpectrum2.cxx:1316
 TSpectrum2.cxx:1317
 TSpectrum2.cxx:1318
 TSpectrum2.cxx:1319
 TSpectrum2.cxx:1320
 TSpectrum2.cxx:1321
 TSpectrum2.cxx:1322
 TSpectrum2.cxx:1323
 TSpectrum2.cxx:1324
 TSpectrum2.cxx:1325
 TSpectrum2.cxx:1326
 TSpectrum2.cxx:1327
 TSpectrum2.cxx:1328
 TSpectrum2.cxx:1329
 TSpectrum2.cxx:1330
 TSpectrum2.cxx:1331
 TSpectrum2.cxx:1332
 TSpectrum2.cxx:1333
 TSpectrum2.cxx:1334
 TSpectrum2.cxx:1335
 TSpectrum2.cxx:1336
 TSpectrum2.cxx:1337
 TSpectrum2.cxx:1338
 TSpectrum2.cxx:1339
 TSpectrum2.cxx:1340
 TSpectrum2.cxx:1341
 TSpectrum2.cxx:1342
 TSpectrum2.cxx:1343
 TSpectrum2.cxx:1344
 TSpectrum2.cxx:1345
 TSpectrum2.cxx:1346
 TSpectrum2.cxx:1347
 TSpectrum2.cxx:1348
 TSpectrum2.cxx:1349
 TSpectrum2.cxx:1350
 TSpectrum2.cxx:1351
 TSpectrum2.cxx:1352
 TSpectrum2.cxx:1353
 TSpectrum2.cxx:1354
 TSpectrum2.cxx:1355
 TSpectrum2.cxx:1356
 TSpectrum2.cxx:1357
 TSpectrum2.cxx:1358
 TSpectrum2.cxx:1359
 TSpectrum2.cxx:1360
 TSpectrum2.cxx:1361
 TSpectrum2.cxx:1362
 TSpectrum2.cxx:1363
 TSpectrum2.cxx:1364
 TSpectrum2.cxx:1365
 TSpectrum2.cxx:1366
 TSpectrum2.cxx:1367
 TSpectrum2.cxx:1368
 TSpectrum2.cxx:1369
 TSpectrum2.cxx:1370
 TSpectrum2.cxx:1371
 TSpectrum2.cxx:1372
 TSpectrum2.cxx:1373
 TSpectrum2.cxx:1374
 TSpectrum2.cxx:1375
 TSpectrum2.cxx:1376
 TSpectrum2.cxx:1377
 TSpectrum2.cxx:1378
 TSpectrum2.cxx:1379
 TSpectrum2.cxx:1380
 TSpectrum2.cxx:1381
 TSpectrum2.cxx:1382
 TSpectrum2.cxx:1383
 TSpectrum2.cxx:1384
 TSpectrum2.cxx:1385
 TSpectrum2.cxx:1386
 TSpectrum2.cxx:1387
 TSpectrum2.cxx:1388
 TSpectrum2.cxx:1389
 TSpectrum2.cxx:1390
 TSpectrum2.cxx:1391
 TSpectrum2.cxx:1392
 TSpectrum2.cxx:1393
 TSpectrum2.cxx:1394
 TSpectrum2.cxx:1395
 TSpectrum2.cxx:1396
 TSpectrum2.cxx:1397
 TSpectrum2.cxx:1398
 TSpectrum2.cxx:1399
 TSpectrum2.cxx:1400
 TSpectrum2.cxx:1401
 TSpectrum2.cxx:1402
 TSpectrum2.cxx:1403
 TSpectrum2.cxx:1404
 TSpectrum2.cxx:1405
 TSpectrum2.cxx:1406
 TSpectrum2.cxx:1407
 TSpectrum2.cxx:1408
 TSpectrum2.cxx:1409
 TSpectrum2.cxx:1410
 TSpectrum2.cxx:1411
 TSpectrum2.cxx:1412
 TSpectrum2.cxx:1413
 TSpectrum2.cxx:1414
 TSpectrum2.cxx:1415
 TSpectrum2.cxx:1416
 TSpectrum2.cxx:1417
 TSpectrum2.cxx:1418
 TSpectrum2.cxx:1419
 TSpectrum2.cxx:1420
 TSpectrum2.cxx:1421
 TSpectrum2.cxx:1422
 TSpectrum2.cxx:1423
 TSpectrum2.cxx:1424
 TSpectrum2.cxx:1425
 TSpectrum2.cxx:1426
 TSpectrum2.cxx:1427
 TSpectrum2.cxx:1428
 TSpectrum2.cxx:1429
 TSpectrum2.cxx:1430
 TSpectrum2.cxx:1431
 TSpectrum2.cxx:1432
 TSpectrum2.cxx:1433
 TSpectrum2.cxx:1434
 TSpectrum2.cxx:1435
 TSpectrum2.cxx:1436
 TSpectrum2.cxx:1437
 TSpectrum2.cxx:1438
 TSpectrum2.cxx:1439
 TSpectrum2.cxx:1440
 TSpectrum2.cxx:1441
 TSpectrum2.cxx:1442
 TSpectrum2.cxx:1443
 TSpectrum2.cxx:1444
 TSpectrum2.cxx:1445
 TSpectrum2.cxx:1446
 TSpectrum2.cxx:1447
 TSpectrum2.cxx:1448
 TSpectrum2.cxx:1449
 TSpectrum2.cxx:1450
 TSpectrum2.cxx:1451
 TSpectrum2.cxx:1452
 TSpectrum2.cxx:1453
 TSpectrum2.cxx:1454
 TSpectrum2.cxx:1455
 TSpectrum2.cxx:1456
 TSpectrum2.cxx:1457
 TSpectrum2.cxx:1458
 TSpectrum2.cxx:1459
 TSpectrum2.cxx:1460
 TSpectrum2.cxx:1461
 TSpectrum2.cxx:1462
 TSpectrum2.cxx:1463
 TSpectrum2.cxx:1464
 TSpectrum2.cxx:1465
 TSpectrum2.cxx:1466
 TSpectrum2.cxx:1467
 TSpectrum2.cxx:1468
 TSpectrum2.cxx:1469
 TSpectrum2.cxx:1470
 TSpectrum2.cxx:1471
 TSpectrum2.cxx:1472
 TSpectrum2.cxx:1473
 TSpectrum2.cxx:1474
 TSpectrum2.cxx:1475
 TSpectrum2.cxx:1476
 TSpectrum2.cxx:1477
 TSpectrum2.cxx:1478
 TSpectrum2.cxx:1479
 TSpectrum2.cxx:1480
 TSpectrum2.cxx:1481
 TSpectrum2.cxx:1482
 TSpectrum2.cxx:1483
 TSpectrum2.cxx:1484
 TSpectrum2.cxx:1485
 TSpectrum2.cxx:1486
 TSpectrum2.cxx:1487
 TSpectrum2.cxx:1488
 TSpectrum2.cxx:1489
 TSpectrum2.cxx:1490
 TSpectrum2.cxx:1491
 TSpectrum2.cxx:1492
 TSpectrum2.cxx:1493
 TSpectrum2.cxx:1494
 TSpectrum2.cxx:1495
 TSpectrum2.cxx:1496
 TSpectrum2.cxx:1497
 TSpectrum2.cxx:1498
 TSpectrum2.cxx:1499
 TSpectrum2.cxx:1500
 TSpectrum2.cxx:1501
 TSpectrum2.cxx:1502
 TSpectrum2.cxx:1503
 TSpectrum2.cxx:1504
 TSpectrum2.cxx:1505
 TSpectrum2.cxx:1506
 TSpectrum2.cxx:1507
 TSpectrum2.cxx:1508
 TSpectrum2.cxx:1509
 TSpectrum2.cxx:1510
 TSpectrum2.cxx:1511
 TSpectrum2.cxx:1512
 TSpectrum2.cxx:1513
 TSpectrum2.cxx:1514
 TSpectrum2.cxx:1515
 TSpectrum2.cxx:1516
 TSpectrum2.cxx:1517
 TSpectrum2.cxx:1518
 TSpectrum2.cxx:1519
 TSpectrum2.cxx:1520
 TSpectrum2.cxx:1521
 TSpectrum2.cxx:1522
 TSpectrum2.cxx:1523
 TSpectrum2.cxx:1524
 TSpectrum2.cxx:1525
 TSpectrum2.cxx:1526
 TSpectrum2.cxx:1527
 TSpectrum2.cxx:1528
 TSpectrum2.cxx:1529
 TSpectrum2.cxx:1530
 TSpectrum2.cxx:1531
 TSpectrum2.cxx:1532
 TSpectrum2.cxx:1533
 TSpectrum2.cxx:1534
 TSpectrum2.cxx:1535
 TSpectrum2.cxx:1536
 TSpectrum2.cxx:1537
 TSpectrum2.cxx:1538
 TSpectrum2.cxx:1539
 TSpectrum2.cxx:1540
 TSpectrum2.cxx:1541
 TSpectrum2.cxx:1542
 TSpectrum2.cxx:1543
 TSpectrum2.cxx:1544
 TSpectrum2.cxx:1545
 TSpectrum2.cxx:1546
 TSpectrum2.cxx:1547
 TSpectrum2.cxx:1548
 TSpectrum2.cxx:1549
 TSpectrum2.cxx:1550
 TSpectrum2.cxx:1551
 TSpectrum2.cxx:1552
 TSpectrum2.cxx:1553
 TSpectrum2.cxx:1554
 TSpectrum2.cxx:1555
 TSpectrum2.cxx:1556
 TSpectrum2.cxx:1557
 TSpectrum2.cxx:1558
 TSpectrum2.cxx:1559
 TSpectrum2.cxx:1560
 TSpectrum2.cxx:1561
 TSpectrum2.cxx:1562
 TSpectrum2.cxx:1563
 TSpectrum2.cxx:1564
 TSpectrum2.cxx:1565
 TSpectrum2.cxx:1566
 TSpectrum2.cxx:1567
 TSpectrum2.cxx:1568
 TSpectrum2.cxx:1569
 TSpectrum2.cxx:1570
 TSpectrum2.cxx:1571
 TSpectrum2.cxx:1572
 TSpectrum2.cxx:1573
 TSpectrum2.cxx:1574
 TSpectrum2.cxx:1575
 TSpectrum2.cxx:1576
 TSpectrum2.cxx:1577
 TSpectrum2.cxx:1578
 TSpectrum2.cxx:1579
 TSpectrum2.cxx:1580
 TSpectrum2.cxx:1581
 TSpectrum2.cxx:1582
 TSpectrum2.cxx:1583
 TSpectrum2.cxx:1584
 TSpectrum2.cxx:1585
 TSpectrum2.cxx:1586
 TSpectrum2.cxx:1587
 TSpectrum2.cxx:1588
 TSpectrum2.cxx:1589
 TSpectrum2.cxx:1590
 TSpectrum2.cxx:1591
 TSpectrum2.cxx:1592
 TSpectrum2.cxx:1593
 TSpectrum2.cxx:1594
 TSpectrum2.cxx:1595
 TSpectrum2.cxx:1596
 TSpectrum2.cxx:1597
 TSpectrum2.cxx:1598
 TSpectrum2.cxx:1599
 TSpectrum2.cxx:1600
 TSpectrum2.cxx:1601
 TSpectrum2.cxx:1602
 TSpectrum2.cxx:1603
 TSpectrum2.cxx:1604
 TSpectrum2.cxx:1605
 TSpectrum2.cxx:1606
 TSpectrum2.cxx:1607
 TSpectrum2.cxx:1608
 TSpectrum2.cxx:1609
 TSpectrum2.cxx:1610
 TSpectrum2.cxx:1611
 TSpectrum2.cxx:1612
 TSpectrum2.cxx:1613
 TSpectrum2.cxx:1614
 TSpectrum2.cxx:1615
 TSpectrum2.cxx:1616
 TSpectrum2.cxx:1617
 TSpectrum2.cxx:1618
 TSpectrum2.cxx:1619
 TSpectrum2.cxx:1620
 TSpectrum2.cxx:1621
 TSpectrum2.cxx:1622
 TSpectrum2.cxx:1623
 TSpectrum2.cxx:1624
 TSpectrum2.cxx:1625
 TSpectrum2.cxx:1626
 TSpectrum2.cxx:1627
 TSpectrum2.cxx:1628
 TSpectrum2.cxx:1629
 TSpectrum2.cxx:1630
 TSpectrum2.cxx:1631
 TSpectrum2.cxx:1632
 TSpectrum2.cxx:1633
 TSpectrum2.cxx:1634
 TSpectrum2.cxx:1635
 TSpectrum2.cxx:1636
 TSpectrum2.cxx:1637
 TSpectrum2.cxx:1638
 TSpectrum2.cxx:1639
 TSpectrum2.cxx:1640
 TSpectrum2.cxx:1641
 TSpectrum2.cxx:1642
 TSpectrum2.cxx:1643
 TSpectrum2.cxx:1644
 TSpectrum2.cxx:1645
 TSpectrum2.cxx:1646
 TSpectrum2.cxx:1647
 TSpectrum2.cxx:1648
 TSpectrum2.cxx:1649
 TSpectrum2.cxx:1650
 TSpectrum2.cxx:1651
 TSpectrum2.cxx:1652
 TSpectrum2.cxx:1653
 TSpectrum2.cxx:1654
 TSpectrum2.cxx:1655
 TSpectrum2.cxx:1656
 TSpectrum2.cxx:1657
 TSpectrum2.cxx:1658
 TSpectrum2.cxx:1659
 TSpectrum2.cxx:1660
 TSpectrum2.cxx:1661
 TSpectrum2.cxx:1662
 TSpectrum2.cxx:1663
 TSpectrum2.cxx:1664
 TSpectrum2.cxx:1665
 TSpectrum2.cxx:1666
 TSpectrum2.cxx:1667
 TSpectrum2.cxx:1668
 TSpectrum2.cxx:1669
 TSpectrum2.cxx:1670
 TSpectrum2.cxx:1671
 TSpectrum2.cxx:1672
 TSpectrum2.cxx:1673
 TSpectrum2.cxx:1674
 TSpectrum2.cxx:1675
 TSpectrum2.cxx:1676
 TSpectrum2.cxx:1677
 TSpectrum2.cxx:1678
 TSpectrum2.cxx:1679
 TSpectrum2.cxx:1680
 TSpectrum2.cxx:1681
 TSpectrum2.cxx:1682
 TSpectrum2.cxx:1683
 TSpectrum2.cxx:1684
 TSpectrum2.cxx:1685
 TSpectrum2.cxx:1686
 TSpectrum2.cxx:1687
 TSpectrum2.cxx:1688
 TSpectrum2.cxx:1689
 TSpectrum2.cxx:1690
 TSpectrum2.cxx:1691
 TSpectrum2.cxx:1692
 TSpectrum2.cxx:1693
 TSpectrum2.cxx:1694
 TSpectrum2.cxx:1695
 TSpectrum2.cxx:1696
 TSpectrum2.cxx:1697
 TSpectrum2.cxx:1698
 TSpectrum2.cxx:1699
 TSpectrum2.cxx:1700
 TSpectrum2.cxx:1701
 TSpectrum2.cxx:1702
 TSpectrum2.cxx:1703
 TSpectrum2.cxx:1704
 TSpectrum2.cxx:1705
 TSpectrum2.cxx:1706
 TSpectrum2.cxx:1707
 TSpectrum2.cxx:1708
 TSpectrum2.cxx:1709
 TSpectrum2.cxx:1710
 TSpectrum2.cxx:1711
 TSpectrum2.cxx:1712
 TSpectrum2.cxx:1713
 TSpectrum2.cxx:1714
 TSpectrum2.cxx:1715
 TSpectrum2.cxx:1716
 TSpectrum2.cxx:1717
 TSpectrum2.cxx:1718
 TSpectrum2.cxx:1719
 TSpectrum2.cxx:1720
 TSpectrum2.cxx:1721
 TSpectrum2.cxx:1722
 TSpectrum2.cxx:1723
 TSpectrum2.cxx:1724
 TSpectrum2.cxx:1725
 TSpectrum2.cxx:1726
 TSpectrum2.cxx:1727
 TSpectrum2.cxx:1728
 TSpectrum2.cxx:1729
 TSpectrum2.cxx:1730
 TSpectrum2.cxx:1731
 TSpectrum2.cxx:1732
 TSpectrum2.cxx:1733
 TSpectrum2.cxx:1734
 TSpectrum2.cxx:1735
 TSpectrum2.cxx:1736
 TSpectrum2.cxx:1737
 TSpectrum2.cxx:1738
 TSpectrum2.cxx:1739
 TSpectrum2.cxx:1740
 TSpectrum2.cxx:1741
 TSpectrum2.cxx:1742
 TSpectrum2.cxx:1743
 TSpectrum2.cxx:1744
 TSpectrum2.cxx:1745
 TSpectrum2.cxx:1746
 TSpectrum2.cxx:1747
 TSpectrum2.cxx:1748
 TSpectrum2.cxx:1749
 TSpectrum2.cxx:1750
 TSpectrum2.cxx:1751
 TSpectrum2.cxx:1752
 TSpectrum2.cxx:1753
 TSpectrum2.cxx:1754
 TSpectrum2.cxx:1755
 TSpectrum2.cxx:1756
 TSpectrum2.cxx:1757
 TSpectrum2.cxx:1758
 TSpectrum2.cxx:1759
 TSpectrum2.cxx:1760
 TSpectrum2.cxx:1761
 TSpectrum2.cxx:1762
 TSpectrum2.cxx:1763
 TSpectrum2.cxx:1764
 TSpectrum2.cxx:1765
 TSpectrum2.cxx:1766
 TSpectrum2.cxx:1767
 TSpectrum2.cxx:1768
 TSpectrum2.cxx:1769
 TSpectrum2.cxx:1770
 TSpectrum2.cxx:1771
 TSpectrum2.cxx:1772
 TSpectrum2.cxx:1773
 TSpectrum2.cxx:1774
 TSpectrum2.cxx:1775
 TSpectrum2.cxx:1776
 TSpectrum2.cxx:1777
 TSpectrum2.cxx:1778
 TSpectrum2.cxx:1779
 TSpectrum2.cxx:1780
 TSpectrum2.cxx:1781
 TSpectrum2.cxx:1782
 TSpectrum2.cxx:1783
 TSpectrum2.cxx:1784
 TSpectrum2.cxx:1785
 TSpectrum2.cxx:1786
 TSpectrum2.cxx:1787
 TSpectrum2.cxx:1788
 TSpectrum2.cxx:1789
 TSpectrum2.cxx:1790
 TSpectrum2.cxx:1791
 TSpectrum2.cxx:1792
 TSpectrum2.cxx:1793
 TSpectrum2.cxx:1794
 TSpectrum2.cxx:1795
 TSpectrum2.cxx:1796
 TSpectrum2.cxx:1797
 TSpectrum2.cxx:1798
 TSpectrum2.cxx:1799
 TSpectrum2.cxx:1800
 TSpectrum2.cxx:1801
 TSpectrum2.cxx:1802
 TSpectrum2.cxx:1803
 TSpectrum2.cxx:1804
 TSpectrum2.cxx:1805
 TSpectrum2.cxx:1806
 TSpectrum2.cxx:1807
 TSpectrum2.cxx:1808
 TSpectrum2.cxx:1809
 TSpectrum2.cxx:1810
 TSpectrum2.cxx:1811
 TSpectrum2.cxx:1812
 TSpectrum2.cxx:1813
 TSpectrum2.cxx:1814
 TSpectrum2.cxx:1815
 TSpectrum2.cxx:1816
 TSpectrum2.cxx:1817
 TSpectrum2.cxx:1818
 TSpectrum2.cxx:1819
 TSpectrum2.cxx:1820
 TSpectrum2.cxx:1821
 TSpectrum2.cxx:1822
 TSpectrum2.cxx:1823
 TSpectrum2.cxx:1824
 TSpectrum2.cxx:1825
 TSpectrum2.cxx:1826
 TSpectrum2.cxx:1827
 TSpectrum2.cxx:1828
 TSpectrum2.cxx:1829
 TSpectrum2.cxx:1830
 TSpectrum2.cxx:1831
 TSpectrum2.cxx:1832
 TSpectrum2.cxx:1833
 TSpectrum2.cxx:1834
 TSpectrum2.cxx:1835
 TSpectrum2.cxx:1836
 TSpectrum2.cxx:1837
 TSpectrum2.cxx:1838
 TSpectrum2.cxx:1839
 TSpectrum2.cxx:1840
 TSpectrum2.cxx:1841
 TSpectrum2.cxx:1842
 TSpectrum2.cxx:1843
 TSpectrum2.cxx:1844
 TSpectrum2.cxx:1845
 TSpectrum2.cxx:1846
 TSpectrum2.cxx:1847
 TSpectrum2.cxx:1848
 TSpectrum2.cxx:1849
 TSpectrum2.cxx:1850
 TSpectrum2.cxx:1851
 TSpectrum2.cxx:1852
 TSpectrum2.cxx:1853
 TSpectrum2.cxx:1854
 TSpectrum2.cxx:1855
 TSpectrum2.cxx:1856
 TSpectrum2.cxx:1857
 TSpectrum2.cxx:1858
 TSpectrum2.cxx:1859
 TSpectrum2.cxx:1860
 TSpectrum2.cxx:1861
 TSpectrum2.cxx:1862
 TSpectrum2.cxx:1863
 TSpectrum2.cxx:1864
 TSpectrum2.cxx:1865
 TSpectrum2.cxx:1866
 TSpectrum2.cxx:1867
 TSpectrum2.cxx:1868
 TSpectrum2.cxx:1869
 TSpectrum2.cxx:1870
 TSpectrum2.cxx:1871
 TSpectrum2.cxx:1872
 TSpectrum2.cxx:1873
 TSpectrum2.cxx:1874
 TSpectrum2.cxx:1875
 TSpectrum2.cxx:1876
 TSpectrum2.cxx:1877
 TSpectrum2.cxx:1878
 TSpectrum2.cxx:1879
 TSpectrum2.cxx:1880
 TSpectrum2.cxx:1881
 TSpectrum2.cxx:1882
 TSpectrum2.cxx:1883
 TSpectrum2.cxx:1884
 TSpectrum2.cxx:1885
 TSpectrum2.cxx:1886
 TSpectrum2.cxx:1887
 TSpectrum2.cxx:1888
 TSpectrum2.cxx:1889
 TSpectrum2.cxx:1890
 TSpectrum2.cxx:1891
 TSpectrum2.cxx:1892
 TSpectrum2.cxx:1893
 TSpectrum2.cxx:1894
 TSpectrum2.cxx:1895
 TSpectrum2.cxx:1896
 TSpectrum2.cxx:1897
 TSpectrum2.cxx:1898
 TSpectrum2.cxx:1899
 TSpectrum2.cxx:1900
 TSpectrum2.cxx:1901
 TSpectrum2.cxx:1902
 TSpectrum2.cxx:1903
 TSpectrum2.cxx:1904
 TSpectrum2.cxx:1905
 TSpectrum2.cxx:1906
 TSpectrum2.cxx:1907
 TSpectrum2.cxx:1908
 TSpectrum2.cxx:1909
 TSpectrum2.cxx:1910
 TSpectrum2.cxx:1911
 TSpectrum2.cxx:1912
 TSpectrum2.cxx:1913
 TSpectrum2.cxx:1914
 TSpectrum2.cxx:1915
 TSpectrum2.cxx:1916
 TSpectrum2.cxx:1917
 TSpectrum2.cxx:1918
 TSpectrum2.cxx:1919
 TSpectrum2.cxx:1920
 TSpectrum2.cxx:1921
 TSpectrum2.cxx:1922
 TSpectrum2.cxx:1923
 TSpectrum2.cxx:1924
 TSpectrum2.cxx:1925
 TSpectrum2.cxx:1926
 TSpectrum2.cxx:1927
 TSpectrum2.cxx:1928
 TSpectrum2.cxx:1929
 TSpectrum2.cxx:1930
 TSpectrum2.cxx:1931
 TSpectrum2.cxx:1932
 TSpectrum2.cxx:1933
 TSpectrum2.cxx:1934
 TSpectrum2.cxx:1935
 TSpectrum2.cxx:1936
 TSpectrum2.cxx:1937
 TSpectrum2.cxx:1938
 TSpectrum2.cxx:1939
 TSpectrum2.cxx:1940
 TSpectrum2.cxx:1941
 TSpectrum2.cxx:1942
 TSpectrum2.cxx:1943
 TSpectrum2.cxx:1944
 TSpectrum2.cxx:1945
 TSpectrum2.cxx:1946
 TSpectrum2.cxx:1947
 TSpectrum2.cxx:1948
 TSpectrum2.cxx:1949
 TSpectrum2.cxx:1950
 TSpectrum2.cxx:1951
 TSpectrum2.cxx:1952
 TSpectrum2.cxx:1953
 TSpectrum2.cxx:1954
 TSpectrum2.cxx:1955
 TSpectrum2.cxx:1956
 TSpectrum2.cxx:1957
 TSpectrum2.cxx:1958
 TSpectrum2.cxx:1959
 TSpectrum2.cxx:1960
 TSpectrum2.cxx:1961
 TSpectrum2.cxx:1962
 TSpectrum2.cxx:1963
 TSpectrum2.cxx:1964
 TSpectrum2.cxx:1965
 TSpectrum2.cxx:1966
 TSpectrum2.cxx:1967
 TSpectrum2.cxx:1968
 TSpectrum2.cxx:1969
 TSpectrum2.cxx:1970
 TSpectrum2.cxx:1971
 TSpectrum2.cxx:1972
 TSpectrum2.cxx:1973
 TSpectrum2.cxx:1974
 TSpectrum2.cxx:1975
 TSpectrum2.cxx:1976
 TSpectrum2.cxx:1977
 TSpectrum2.cxx:1978
 TSpectrum2.cxx:1979
 TSpectrum2.cxx:1980
 TSpectrum2.cxx:1981
 TSpectrum2.cxx:1982
 TSpectrum2.cxx:1983
 TSpectrum2.cxx:1984
 TSpectrum2.cxx:1985
 TSpectrum2.cxx:1986
 TSpectrum2.cxx:1987
 TSpectrum2.cxx:1988
 TSpectrum2.cxx:1989
 TSpectrum2.cxx:1990
 TSpectrum2.cxx:1991
 TSpectrum2.cxx:1992
 TSpectrum2.cxx:1993
 TSpectrum2.cxx:1994
 TSpectrum2.cxx:1995
 TSpectrum2.cxx:1996
 TSpectrum2.cxx:1997
 TSpectrum2.cxx:1998
 TSpectrum2.cxx:1999
 TSpectrum2.cxx:2000
 TSpectrum2.cxx:2001
 TSpectrum2.cxx:2002
 TSpectrum2.cxx:2003
 TSpectrum2.cxx:2004
 TSpectrum2.cxx:2005
 TSpectrum2.cxx:2006
 TSpectrum2.cxx:2007
 TSpectrum2.cxx:2008
 TSpectrum2.cxx:2009
 TSpectrum2.cxx:2010
 TSpectrum2.cxx:2011
 TSpectrum2.cxx:2012
 TSpectrum2.cxx:2013
 TSpectrum2.cxx:2014
 TSpectrum2.cxx:2015
 TSpectrum2.cxx:2016
 TSpectrum2.cxx:2017
 TSpectrum2.cxx:2018
 TSpectrum2.cxx:2019
 TSpectrum2.cxx:2020
 TSpectrum2.cxx:2021
 TSpectrum2.cxx:2022
 TSpectrum2.cxx:2023
 TSpectrum2.cxx:2024
 TSpectrum2.cxx:2025
 TSpectrum2.cxx:2026
 TSpectrum2.cxx:2027
 TSpectrum2.cxx:2028
 TSpectrum2.cxx:2029
 TSpectrum2.cxx:2030
 TSpectrum2.cxx:2031
 TSpectrum2.cxx:2032
 TSpectrum2.cxx:2033
 TSpectrum2.cxx:2034
 TSpectrum2.cxx:2035
 TSpectrum2.cxx:2036
 TSpectrum2.cxx:2037
 TSpectrum2.cxx:2038
 TSpectrum2.cxx:2039
 TSpectrum2.cxx:2040
 TSpectrum2.cxx:2041
 TSpectrum2.cxx:2042
 TSpectrum2.cxx:2043
 TSpectrum2.cxx:2044
 TSpectrum2.cxx:2045
 TSpectrum2.cxx:2046
 TSpectrum2.cxx:2047
 TSpectrum2.cxx:2048
 TSpectrum2.cxx:2049
 TSpectrum2.cxx:2050
 TSpectrum2.cxx:2051
 TSpectrum2.cxx:2052
 TSpectrum2.cxx:2053
 TSpectrum2.cxx:2054
 TSpectrum2.cxx:2055
 TSpectrum2.cxx:2056
 TSpectrum2.cxx:2057
 TSpectrum2.cxx:2058
 TSpectrum2.cxx:2059
 TSpectrum2.cxx:2060
 TSpectrum2.cxx:2061
 TSpectrum2.cxx:2062
 TSpectrum2.cxx:2063
 TSpectrum2.cxx:2064
 TSpectrum2.cxx:2065
 TSpectrum2.cxx:2066
 TSpectrum2.cxx:2067
 TSpectrum2.cxx:2068
 TSpectrum2.cxx:2069
 TSpectrum2.cxx:2070
 TSpectrum2.cxx:2071
 TSpectrum2.cxx:2072
 TSpectrum2.cxx:2073
 TSpectrum2.cxx:2074
 TSpectrum2.cxx:2075
 TSpectrum2.cxx:2076
 TSpectrum2.cxx:2077
 TSpectrum2.cxx:2078
 TSpectrum2.cxx:2079
 TSpectrum2.cxx:2080
 TSpectrum2.cxx:2081
 TSpectrum2.cxx:2082
 TSpectrum2.cxx:2083
 TSpectrum2.cxx:2084
 TSpectrum2.cxx:2085
 TSpectrum2.cxx:2086
 TSpectrum2.cxx:2087
 TSpectrum2.cxx:2088
 TSpectrum2.cxx:2089
 TSpectrum2.cxx:2090
 TSpectrum2.cxx:2091
 TSpectrum2.cxx:2092
 TSpectrum2.cxx:2093
 TSpectrum2.cxx:2094
 TSpectrum2.cxx:2095
 TSpectrum2.cxx:2096
 TSpectrum2.cxx:2097
 TSpectrum2.cxx:2098
 TSpectrum2.cxx:2099
 TSpectrum2.cxx:2100
 TSpectrum2.cxx:2101
 TSpectrum2.cxx:2102
 TSpectrum2.cxx:2103
 TSpectrum2.cxx:2104
 TSpectrum2.cxx:2105
 TSpectrum2.cxx:2106
 TSpectrum2.cxx:2107
 TSpectrum2.cxx:2108
 TSpectrum2.cxx:2109
 TSpectrum2.cxx:2110
 TSpectrum2.cxx:2111
 TSpectrum2.cxx:2112
 TSpectrum2.cxx:2113
 TSpectrum2.cxx:2114
 TSpectrum2.cxx:2115
 TSpectrum2.cxx:2116
 TSpectrum2.cxx:2117
 TSpectrum2.cxx:2118
 TSpectrum2.cxx:2119
 TSpectrum2.cxx:2120
 TSpectrum2.cxx:2121
 TSpectrum2.cxx:2122
 TSpectrum2.cxx:2123
 TSpectrum2.cxx:2124
 TSpectrum2.cxx:2125
 TSpectrum2.cxx:2126
 TSpectrum2.cxx:2127
 TSpectrum2.cxx:2128
 TSpectrum2.cxx:2129
 TSpectrum2.cxx:2130
 TSpectrum2.cxx:2131
 TSpectrum2.cxx:2132
 TSpectrum2.cxx:2133
 TSpectrum2.cxx:2134
 TSpectrum2.cxx:2135
 TSpectrum2.cxx:2136
 TSpectrum2.cxx:2137
 TSpectrum2.cxx:2138
 TSpectrum2.cxx:2139
 TSpectrum2.cxx:2140
 TSpectrum2.cxx:2141
 TSpectrum2.cxx:2142
 TSpectrum2.cxx:2143
 TSpectrum2.cxx:2144
 TSpectrum2.cxx:2145
 TSpectrum2.cxx:2146
 TSpectrum2.cxx:2147
 TSpectrum2.cxx:2148
 TSpectrum2.cxx:2149
 TSpectrum2.cxx:2150
 TSpectrum2.cxx:2151
 TSpectrum2.cxx:2152
 TSpectrum2.cxx:2153
 TSpectrum2.cxx:2154
 TSpectrum2.cxx:2155
 TSpectrum2.cxx:2156
 TSpectrum2.cxx:2157
 TSpectrum2.cxx:2158
 TSpectrum2.cxx:2159
 TSpectrum2.cxx:2160
 TSpectrum2.cxx:2161
 TSpectrum2.cxx:2162
 TSpectrum2.cxx:2163
 TSpectrum2.cxx:2164
 TSpectrum2.cxx:2165
 TSpectrum2.cxx:2166
 TSpectrum2.cxx:2167
 TSpectrum2.cxx:2168
 TSpectrum2.cxx:2169
 TSpectrum2.cxx:2170
 TSpectrum2.cxx:2171
 TSpectrum2.cxx:2172
 TSpectrum2.cxx:2173
 TSpectrum2.cxx:2174
 TSpectrum2.cxx:2175
 TSpectrum2.cxx:2176
 TSpectrum2.cxx:2177
 TSpectrum2.cxx:2178
 TSpectrum2.cxx:2179
 TSpectrum2.cxx:2180
 TSpectrum2.cxx:2181
 TSpectrum2.cxx:2182
 TSpectrum2.cxx:2183
 TSpectrum2.cxx:2184
 TSpectrum2.cxx:2185
 TSpectrum2.cxx:2186
 TSpectrum2.cxx:2187
 TSpectrum2.cxx:2188
 TSpectrum2.cxx:2189
 TSpectrum2.cxx:2190
 TSpectrum2.cxx:2191
 TSpectrum2.cxx:2192
 TSpectrum2.cxx:2193
 TSpectrum2.cxx:2194
 TSpectrum2.cxx:2195
 TSpectrum2.cxx:2196
 TSpectrum2.cxx:2197
 TSpectrum2.cxx:2198
 TSpectrum2.cxx:2199
 TSpectrum2.cxx:2200
 TSpectrum2.cxx:2201
 TSpectrum2.cxx:2202
 TSpectrum2.cxx:2203
 TSpectrum2.cxx:2204
 TSpectrum2.cxx:2205
 TSpectrum2.cxx:2206
 TSpectrum2.cxx:2207
 TSpectrum2.cxx:2208
 TSpectrum2.cxx:2209
 TSpectrum2.cxx:2210
 TSpectrum2.cxx:2211
 TSpectrum2.cxx:2212
 TSpectrum2.cxx:2213
 TSpectrum2.cxx:2214
 TSpectrum2.cxx:2215
 TSpectrum2.cxx:2216
 TSpectrum2.cxx:2217
 TSpectrum2.cxx:2218
 TSpectrum2.cxx:2219
 TSpectrum2.cxx:2220
 TSpectrum2.cxx:2221
 TSpectrum2.cxx:2222
 TSpectrum2.cxx:2223
 TSpectrum2.cxx:2224
 TSpectrum2.cxx:2225
 TSpectrum2.cxx:2226
 TSpectrum2.cxx:2227
 TSpectrum2.cxx:2228
 TSpectrum2.cxx:2229
 TSpectrum2.cxx:2230
 TSpectrum2.cxx:2231
 TSpectrum2.cxx:2232
 TSpectrum2.cxx:2233
 TSpectrum2.cxx:2234
 TSpectrum2.cxx:2235
 TSpectrum2.cxx:2236
 TSpectrum2.cxx:2237
 TSpectrum2.cxx:2238
 TSpectrum2.cxx:2239
 TSpectrum2.cxx:2240
 TSpectrum2.cxx:2241
 TSpectrum2.cxx:2242
 TSpectrum2.cxx:2243
 TSpectrum2.cxx:2244
 TSpectrum2.cxx:2245
 TSpectrum2.cxx:2246
 TSpectrum2.cxx:2247
 TSpectrum2.cxx:2248
 TSpectrum2.cxx:2249
 TSpectrum2.cxx:2250
 TSpectrum2.cxx:2251
 TSpectrum2.cxx:2252
 TSpectrum2.cxx:2253
 TSpectrum2.cxx:2254
 TSpectrum2.cxx:2255
 TSpectrum2.cxx:2256
 TSpectrum2.cxx:2257
 TSpectrum2.cxx:2258
 TSpectrum2.cxx:2259
 TSpectrum2.cxx:2260
 TSpectrum2.cxx:2261
 TSpectrum2.cxx:2262
 TSpectrum2.cxx:2263
 TSpectrum2.cxx:2264
 TSpectrum2.cxx:2265
 TSpectrum2.cxx:2266
 TSpectrum2.cxx:2267
 TSpectrum2.cxx:2268
 TSpectrum2.cxx:2269
 TSpectrum2.cxx:2270
 TSpectrum2.cxx:2271
 TSpectrum2.cxx:2272
 TSpectrum2.cxx:2273
 TSpectrum2.cxx:2274
 TSpectrum2.cxx:2275
 TSpectrum2.cxx:2276
 TSpectrum2.cxx:2277
 TSpectrum2.cxx:2278
 TSpectrum2.cxx:2279
 TSpectrum2.cxx:2280
 TSpectrum2.cxx:2281
 TSpectrum2.cxx:2282
 TSpectrum2.cxx:2283
 TSpectrum2.cxx:2284
 TSpectrum2.cxx:2285
 TSpectrum2.cxx:2286
 TSpectrum2.cxx:2287
 TSpectrum2.cxx:2288
 TSpectrum2.cxx:2289
 TSpectrum2.cxx:2290
 TSpectrum2.cxx:2291
 TSpectrum2.cxx:2292
 TSpectrum2.cxx:2293
 TSpectrum2.cxx:2294
 TSpectrum2.cxx:2295
 TSpectrum2.cxx:2296
 TSpectrum2.cxx:2297
 TSpectrum2.cxx:2298
 TSpectrum2.cxx:2299
 TSpectrum2.cxx:2300
 TSpectrum2.cxx:2301
 TSpectrum2.cxx:2302
 TSpectrum2.cxx:2303
 TSpectrum2.cxx:2304
 TSpectrum2.cxx:2305
 TSpectrum2.cxx:2306
 TSpectrum2.cxx:2307
 TSpectrum2.cxx:2308
 TSpectrum2.cxx:2309
 TSpectrum2.cxx:2310
 TSpectrum2.cxx:2311
 TSpectrum2.cxx:2312
 TSpectrum2.cxx:2313
 TSpectrum2.cxx:2314
 TSpectrum2.cxx:2315
 TSpectrum2.cxx:2316
 TSpectrum2.cxx:2317
 TSpectrum2.cxx:2318
 TSpectrum2.cxx:2319
 TSpectrum2.cxx:2320
 TSpectrum2.cxx:2321
 TSpectrum2.cxx:2322
 TSpectrum2.cxx:2323
 TSpectrum2.cxx:2324
 TSpectrum2.cxx:2325
 TSpectrum2.cxx:2326
 TSpectrum2.cxx:2327
 TSpectrum2.cxx:2328
 TSpectrum2.cxx:2329
 TSpectrum2.cxx:2330
 TSpectrum2.cxx:2331
 TSpectrum2.cxx:2332
 TSpectrum2.cxx:2333
 TSpectrum2.cxx:2334
 TSpectrum2.cxx:2335
 TSpectrum2.cxx:2336
 TSpectrum2.cxx:2337
 TSpectrum2.cxx:2338
 TSpectrum2.cxx:2339
 TSpectrum2.cxx:2340
 TSpectrum2.cxx:2341
 TSpectrum2.cxx:2342
 TSpectrum2.cxx:2343
 TSpectrum2.cxx:2344
 TSpectrum2.cxx:2345
 TSpectrum2.cxx:2346
 TSpectrum2.cxx:2347
 TSpectrum2.cxx:2348
 TSpectrum2.cxx:2349
 TSpectrum2.cxx:2350
 TSpectrum2.cxx:2351
 TSpectrum2.cxx:2352
 TSpectrum2.cxx:2353
 TSpectrum2.cxx:2354
 TSpectrum2.cxx:2355
 TSpectrum2.cxx:2356
 TSpectrum2.cxx:2357
 TSpectrum2.cxx:2358
 TSpectrum2.cxx:2359
 TSpectrum2.cxx:2360
 TSpectrum2.cxx:2361
 TSpectrum2.cxx:2362
 TSpectrum2.cxx:2363
 TSpectrum2.cxx:2364
 TSpectrum2.cxx:2365
 TSpectrum2.cxx:2366
 TSpectrum2.cxx:2367
 TSpectrum2.cxx:2368
 TSpectrum2.cxx:2369
 TSpectrum2.cxx:2370
 TSpectrum2.cxx:2371
 TSpectrum2.cxx:2372
 TSpectrum2.cxx:2373
 TSpectrum2.cxx:2374
 TSpectrum2.cxx:2375
 TSpectrum2.cxx:2376
 TSpectrum2.cxx:2377
 TSpectrum2.cxx:2378
 TSpectrum2.cxx:2379
 TSpectrum2.cxx:2380
 TSpectrum2.cxx:2381
 TSpectrum2.cxx:2382
 TSpectrum2.cxx:2383
 TSpectrum2.cxx:2384
 TSpectrum2.cxx:2385
 TSpectrum2.cxx:2386
 TSpectrum2.cxx:2387
 TSpectrum2.cxx:2388
 TSpectrum2.cxx:2389
 TSpectrum2.cxx:2390
 TSpectrum2.cxx:2391
 TSpectrum2.cxx:2392
 TSpectrum2.cxx:2393
 TSpectrum2.cxx:2394
 TSpectrum2.cxx:2395
 TSpectrum2.cxx:2396
 TSpectrum2.cxx:2397
 TSpectrum2.cxx:2398
 TSpectrum2.cxx:2399
 TSpectrum2.cxx:2400
 TSpectrum2.cxx:2401
 TSpectrum2.cxx:2402
 TSpectrum2.cxx:2403
 TSpectrum2.cxx:2404
 TSpectrum2.cxx:2405
 TSpectrum2.cxx:2406
 TSpectrum2.cxx:2407
 TSpectrum2.cxx:2408
 TSpectrum2.cxx:2409
 TSpectrum2.cxx:2410
 TSpectrum2.cxx:2411
 TSpectrum2.cxx:2412
 TSpectrum2.cxx:2413
 TSpectrum2.cxx:2414
 TSpectrum2.cxx:2415
 TSpectrum2.cxx:2416
 TSpectrum2.cxx:2417
 TSpectrum2.cxx:2418
 TSpectrum2.cxx:2419
 TSpectrum2.cxx:2420
 TSpectrum2.cxx:2421
 TSpectrum2.cxx:2422
 TSpectrum2.cxx:2423
 TSpectrum2.cxx:2424
 TSpectrum2.cxx:2425
 TSpectrum2.cxx:2426
 TSpectrum2.cxx:2427
 TSpectrum2.cxx:2428
 TSpectrum2.cxx:2429
 TSpectrum2.cxx:2430
 TSpectrum2.cxx:2431
 TSpectrum2.cxx:2432
 TSpectrum2.cxx:2433
 TSpectrum2.cxx:2434
 TSpectrum2.cxx:2435
 TSpectrum2.cxx:2436
 TSpectrum2.cxx:2437
 TSpectrum2.cxx:2438
 TSpectrum2.cxx:2439
 TSpectrum2.cxx:2440
 TSpectrum2.cxx:2441
 TSpectrum2.cxx:2442
 TSpectrum2.cxx:2443
 TSpectrum2.cxx:2444
 TSpectrum2.cxx:2445
 TSpectrum2.cxx:2446
 TSpectrum2.cxx:2447
 TSpectrum2.cxx:2448
 TSpectrum2.cxx:2449
 TSpectrum2.cxx:2450
 TSpectrum2.cxx:2451
 TSpectrum2.cxx:2452
 TSpectrum2.cxx:2453
 TSpectrum2.cxx:2454
 TSpectrum2.cxx:2455
 TSpectrum2.cxx:2456
 TSpectrum2.cxx:2457
 TSpectrum2.cxx:2458
 TSpectrum2.cxx:2459
 TSpectrum2.cxx:2460
 TSpectrum2.cxx:2461
 TSpectrum2.cxx:2462
 TSpectrum2.cxx:2463
 TSpectrum2.cxx:2464
 TSpectrum2.cxx:2465
 TSpectrum2.cxx:2466
 TSpectrum2.cxx:2467
 TSpectrum2.cxx:2468
 TSpectrum2.cxx:2469
 TSpectrum2.cxx:2470
 TSpectrum2.cxx:2471
 TSpectrum2.cxx:2472
 TSpectrum2.cxx:2473
 TSpectrum2.cxx:2474
 TSpectrum2.cxx:2475
 TSpectrum2.cxx:2476
 TSpectrum2.cxx:2477
 TSpectrum2.cxx:2478
 TSpectrum2.cxx:2479
 TSpectrum2.cxx:2480
 TSpectrum2.cxx:2481
 TSpectrum2.cxx:2482
 TSpectrum2.cxx:2483
 TSpectrum2.cxx:2484
 TSpectrum2.cxx:2485
 TSpectrum2.cxx:2486
 TSpectrum2.cxx:2487
 TSpectrum2.cxx:2488
 TSpectrum2.cxx:2489
 TSpectrum2.cxx:2490
 TSpectrum2.cxx:2491
 TSpectrum2.cxx:2492
 TSpectrum2.cxx:2493
 TSpectrum2.cxx:2494
 TSpectrum2.cxx:2495
 TSpectrum2.cxx:2496
 TSpectrum2.cxx:2497
 TSpectrum2.cxx:2498
 TSpectrum2.cxx:2499
 TSpectrum2.cxx:2500
 TSpectrum2.cxx:2501
 TSpectrum2.cxx:2502
 TSpectrum2.cxx:2503
 TSpectrum2.cxx:2504
 TSpectrum2.cxx:2505
 TSpectrum2.cxx:2506
 TSpectrum2.cxx:2507
 TSpectrum2.cxx:2508
 TSpectrum2.cxx:2509
 TSpectrum2.cxx:2510
 TSpectrum2.cxx:2511
 TSpectrum2.cxx:2512
 TSpectrum2.cxx:2513
 TSpectrum2.cxx:2514
 TSpectrum2.cxx:2515
 TSpectrum2.cxx:2516
 TSpectrum2.cxx:2517
 TSpectrum2.cxx:2518
 TSpectrum2.cxx:2519
 TSpectrum2.cxx:2520
 TSpectrum2.cxx:2521
 TSpectrum2.cxx:2522
 TSpectrum2.cxx:2523
 TSpectrum2.cxx:2524
 TSpectrum2.cxx:2525
 TSpectrum2.cxx:2526
 TSpectrum2.cxx:2527
 TSpectrum2.cxx:2528
 TSpectrum2.cxx:2529
 TSpectrum2.cxx:2530
 TSpectrum2.cxx:2531
 TSpectrum2.cxx:2532
 TSpectrum2.cxx:2533
 TSpectrum2.cxx:2534
 TSpectrum2.cxx:2535
 TSpectrum2.cxx:2536
 TSpectrum2.cxx:2537
 TSpectrum2.cxx:2538
 TSpectrum2.cxx:2539
 TSpectrum2.cxx:2540
 TSpectrum2.cxx:2541
 TSpectrum2.cxx:2542
 TSpectrum2.cxx:2543
 TSpectrum2.cxx:2544
 TSpectrum2.cxx:2545
 TSpectrum2.cxx:2546
 TSpectrum2.cxx:2547
 TSpectrum2.cxx:2548
 TSpectrum2.cxx:2549
 TSpectrum2.cxx:2550
 TSpectrum2.cxx:2551
 TSpectrum2.cxx:2552
 TSpectrum2.cxx:2553
 TSpectrum2.cxx:2554
 TSpectrum2.cxx:2555
 TSpectrum2.cxx:2556
 TSpectrum2.cxx:2557
 TSpectrum2.cxx:2558
 TSpectrum2.cxx:2559
 TSpectrum2.cxx:2560
 TSpectrum2.cxx:2561
 TSpectrum2.cxx:2562
 TSpectrum2.cxx:2563
 TSpectrum2.cxx:2564
 TSpectrum2.cxx:2565
 TSpectrum2.cxx:2566
 TSpectrum2.cxx:2567
 TSpectrum2.cxx:2568
 TSpectrum2.cxx:2569
 TSpectrum2.cxx:2570
 TSpectrum2.cxx:2571
 TSpectrum2.cxx:2572
 TSpectrum2.cxx:2573
 TSpectrum2.cxx:2574
 TSpectrum2.cxx:2575
 TSpectrum2.cxx:2576
 TSpectrum2.cxx:2577
 TSpectrum2.cxx:2578
 TSpectrum2.cxx:2579
 TSpectrum2.cxx:2580
 TSpectrum2.cxx:2581
 TSpectrum2.cxx:2582
 TSpectrum2.cxx:2583
 TSpectrum2.cxx:2584
 TSpectrum2.cxx:2585
 TSpectrum2.cxx:2586
 TSpectrum2.cxx:2587
 TSpectrum2.cxx:2588
 TSpectrum2.cxx:2589
 TSpectrum2.cxx:2590
 TSpectrum2.cxx:2591
 TSpectrum2.cxx:2592
 TSpectrum2.cxx:2593
 TSpectrum2.cxx:2594
 TSpectrum2.cxx:2595
 TSpectrum2.cxx:2596
 TSpectrum2.cxx:2597
 TSpectrum2.cxx:2598
 TSpectrum2.cxx:2599
 TSpectrum2.cxx:2600
 TSpectrum2.cxx:2601
 TSpectrum2.cxx:2602
 TSpectrum2.cxx:2603
 TSpectrum2.cxx:2604
 TSpectrum2.cxx:2605
 TSpectrum2.cxx:2606
 TSpectrum2.cxx:2607
 TSpectrum2.cxx:2608
 TSpectrum2.cxx:2609
 TSpectrum2.cxx:2610
 TSpectrum2.cxx:2611
 TSpectrum2.cxx:2612
 TSpectrum2.cxx:2613
 TSpectrum2.cxx:2614
 TSpectrum2.cxx:2615
 TSpectrum2.cxx:2616
 TSpectrum2.cxx:2617
 TSpectrum2.cxx:2618
 TSpectrum2.cxx:2619
 TSpectrum2.cxx:2620
 TSpectrum2.cxx:2621
 TSpectrum2.cxx:2622
 TSpectrum2.cxx:2623
 TSpectrum2.cxx:2624
 TSpectrum2.cxx:2625
 TSpectrum2.cxx:2626
 TSpectrum2.cxx:2627
 TSpectrum2.cxx:2628
 TSpectrum2.cxx:2629
 TSpectrum2.cxx:2630
 TSpectrum2.cxx:2631
 TSpectrum2.cxx:2632
 TSpectrum2.cxx:2633
 TSpectrum2.cxx:2634
 TSpectrum2.cxx:2635
 TSpectrum2.cxx:2636
 TSpectrum2.cxx:2637
 TSpectrum2.cxx:2638
 TSpectrum2.cxx:2639
 TSpectrum2.cxx:2640
 TSpectrum2.cxx:2641
 TSpectrum2.cxx:2642
 TSpectrum2.cxx:2643
 TSpectrum2.cxx:2644
 TSpectrum2.cxx:2645
 TSpectrum2.cxx:2646
 TSpectrum2.cxx:2647
 TSpectrum2.cxx:2648
 TSpectrum2.cxx:2649
 TSpectrum2.cxx:2650
 TSpectrum2.cxx:2651
 TSpectrum2.cxx:2652
 TSpectrum2.cxx:2653
 TSpectrum2.cxx:2654
 TSpectrum2.cxx:2655
 TSpectrum2.cxx:2656
 TSpectrum2.cxx:2657
 TSpectrum2.cxx:2658
 TSpectrum2.cxx:2659
 TSpectrum2.cxx:2660
 TSpectrum2.cxx:2661
 TSpectrum2.cxx:2662
 TSpectrum2.cxx:2663
 TSpectrum2.cxx:2664
 TSpectrum2.cxx:2665
 TSpectrum2.cxx:2666
 TSpectrum2.cxx:2667
 TSpectrum2.cxx:2668
 TSpectrum2.cxx:2669
 TSpectrum2.cxx:2670
 TSpectrum2.cxx:2671
 TSpectrum2.cxx:2672
 TSpectrum2.cxx:2673
 TSpectrum2.cxx:2674
 TSpectrum2.cxx:2675
 TSpectrum2.cxx:2676
 TSpectrum2.cxx:2677
 TSpectrum2.cxx:2678
 TSpectrum2.cxx:2679
 TSpectrum2.cxx:2680
 TSpectrum2.cxx:2681
 TSpectrum2.cxx:2682
 TSpectrum2.cxx:2683
 TSpectrum2.cxx:2684
 TSpectrum2.cxx:2685
 TSpectrum2.cxx:2686
 TSpectrum2.cxx:2687
 TSpectrum2.cxx:2688
 TSpectrum2.cxx:2689
 TSpectrum2.cxx:2690
 TSpectrum2.cxx:2691
 TSpectrum2.cxx:2692
 TSpectrum2.cxx:2693
 TSpectrum2.cxx:2694
 TSpectrum2.cxx:2695
 TSpectrum2.cxx:2696
 TSpectrum2.cxx:2697
 TSpectrum2.cxx:2698
 TSpectrum2.cxx:2699
 TSpectrum2.cxx:2700
 TSpectrum2.cxx:2701
 TSpectrum2.cxx:2702
 TSpectrum2.cxx:2703
 TSpectrum2.cxx:2704
 TSpectrum2.cxx:2705
 TSpectrum2.cxx:2706
 TSpectrum2.cxx:2707
 TSpectrum2.cxx:2708
 TSpectrum2.cxx:2709
 TSpectrum2.cxx:2710
 TSpectrum2.cxx:2711
 TSpectrum2.cxx:2712
 TSpectrum2.cxx:2713
 TSpectrum2.cxx:2714
 TSpectrum2.cxx:2715
 TSpectrum2.cxx:2716
 TSpectrum2.cxx:2717
 TSpectrum2.cxx:2718
 TSpectrum2.cxx:2719
 TSpectrum2.cxx:2720
 TSpectrum2.cxx:2721
 TSpectrum2.cxx:2722
 TSpectrum2.cxx:2723
 TSpectrum2.cxx:2724
 TSpectrum2.cxx:2725
 TSpectrum2.cxx:2726
 TSpectrum2.cxx:2727
 TSpectrum2.cxx:2728
 TSpectrum2.cxx:2729
 TSpectrum2.cxx:2730
 TSpectrum2.cxx:2731
 TSpectrum2.cxx:2732
 TSpectrum2.cxx:2733
 TSpectrum2.cxx:2734
 TSpectrum2.cxx:2735
 TSpectrum2.cxx:2736
 TSpectrum2.cxx:2737
 TSpectrum2.cxx:2738
 TSpectrum2.cxx:2739
 TSpectrum2.cxx:2740
 TSpectrum2.cxx:2741
 TSpectrum2.cxx:2742
 TSpectrum2.cxx:2743
 TSpectrum2.cxx:2744
 TSpectrum2.cxx:2745
 TSpectrum2.cxx:2746
 TSpectrum2.cxx:2747
 TSpectrum2.cxx:2748
 TSpectrum2.cxx:2749
 TSpectrum2.cxx:2750
 TSpectrum2.cxx:2751
 TSpectrum2.cxx:2752
 TSpectrum2.cxx:2753
 TSpectrum2.cxx:2754
 TSpectrum2.cxx:2755
 TSpectrum2.cxx:2756
 TSpectrum2.cxx:2757
 TSpectrum2.cxx:2758
 TSpectrum2.cxx:2759
 TSpectrum2.cxx:2760
 TSpectrum2.cxx:2761
 TSpectrum2.cxx:2762
 TSpectrum2.cxx:2763
 TSpectrum2.cxx:2764
 TSpectrum2.cxx:2765
 TSpectrum2.cxx:2766
 TSpectrum2.cxx:2767
 TSpectrum2.cxx:2768
 TSpectrum2.cxx:2769
 TSpectrum2.cxx:2770
 TSpectrum2.cxx:2771
 TSpectrum2.cxx:2772
 TSpectrum2.cxx:2773
 TSpectrum2.cxx:2774
 TSpectrum2.cxx:2775
 TSpectrum2.cxx:2776
 TSpectrum2.cxx:2777
 TSpectrum2.cxx:2778
 TSpectrum2.cxx:2779
 TSpectrum2.cxx:2780
 TSpectrum2.cxx:2781
 TSpectrum2.cxx:2782
 TSpectrum2.cxx:2783
 TSpectrum2.cxx:2784
 TSpectrum2.cxx:2785
 TSpectrum2.cxx:2786
 TSpectrum2.cxx:2787
 TSpectrum2.cxx:2788
 TSpectrum2.cxx:2789
 TSpectrum2.cxx:2790
 TSpectrum2.cxx:2791
 TSpectrum2.cxx:2792
 TSpectrum2.cxx:2793
 TSpectrum2.cxx:2794
 TSpectrum2.cxx:2795
 TSpectrum2.cxx:2796
 TSpectrum2.cxx:2797
 TSpectrum2.cxx:2798
 TSpectrum2.cxx:2799
 TSpectrum2.cxx:2800
 TSpectrum2.cxx:2801
 TSpectrum2.cxx:2802
 TSpectrum2.cxx:2803
 TSpectrum2.cxx:2804
 TSpectrum2.cxx:2805
 TSpectrum2.cxx:2806
 TSpectrum2.cxx:2807
 TSpectrum2.cxx:2808
 TSpectrum2.cxx:2809
 TSpectrum2.cxx:2810
 TSpectrum2.cxx:2811
 TSpectrum2.cxx:2812
 TSpectrum2.cxx:2813
 TSpectrum2.cxx:2814
 TSpectrum2.cxx:2815
 TSpectrum2.cxx:2816
 TSpectrum2.cxx:2817
 TSpectrum2.cxx:2818
 TSpectrum2.cxx:2819
 TSpectrum2.cxx:2820
 TSpectrum2.cxx:2821
 TSpectrum2.cxx:2822
 TSpectrum2.cxx:2823
 TSpectrum2.cxx:2824
 TSpectrum2.cxx:2825
 TSpectrum2.cxx:2826
 TSpectrum2.cxx:2827
 TSpectrum2.cxx:2828
 TSpectrum2.cxx:2829
 TSpectrum2.cxx:2830
 TSpectrum2.cxx:2831
 TSpectrum2.cxx:2832
 TSpectrum2.cxx:2833
 TSpectrum2.cxx:2834
 TSpectrum2.cxx:2835
 TSpectrum2.cxx:2836
 TSpectrum2.cxx:2837
 TSpectrum2.cxx:2838
 TSpectrum2.cxx:2839
 TSpectrum2.cxx:2840
 TSpectrum2.cxx:2841
 TSpectrum2.cxx:2842
 TSpectrum2.cxx:2843
 TSpectrum2.cxx:2844
 TSpectrum2.cxx:2845
 TSpectrum2.cxx:2846
 TSpectrum2.cxx:2847
 TSpectrum2.cxx:2848
 TSpectrum2.cxx:2849
 TSpectrum2.cxx:2850
 TSpectrum2.cxx:2851
 TSpectrum2.cxx:2852
 TSpectrum2.cxx:2853
 TSpectrum2.cxx:2854
 TSpectrum2.cxx:2855
 TSpectrum2.cxx:2856
 TSpectrum2.cxx:2857
 TSpectrum2.cxx:2858
 TSpectrum2.cxx:2859
 TSpectrum2.cxx:2860
 TSpectrum2.cxx:2861
 TSpectrum2.cxx:2862
 TSpectrum2.cxx:2863
 TSpectrum2.cxx:2864
 TSpectrum2.cxx:2865
 TSpectrum2.cxx:2866
 TSpectrum2.cxx:2867
 TSpectrum2.cxx:2868
 TSpectrum2.cxx:2869
 TSpectrum2.cxx:2870
 TSpectrum2.cxx:2871
 TSpectrum2.cxx:2872
 TSpectrum2.cxx:2873
 TSpectrum2.cxx:2874
 TSpectrum2.cxx:2875
 TSpectrum2.cxx:2876
 TSpectrum2.cxx:2877
 TSpectrum2.cxx:2878
 TSpectrum2.cxx:2879
 TSpectrum2.cxx:2880
 TSpectrum2.cxx:2881
 TSpectrum2.cxx:2882
 TSpectrum2.cxx:2883
 TSpectrum2.cxx:2884
 TSpectrum2.cxx:2885
 TSpectrum2.cxx:2886
 TSpectrum2.cxx:2887
 TSpectrum2.cxx:2888
 TSpectrum2.cxx:2889
 TSpectrum2.cxx:2890
 TSpectrum2.cxx:2891
 TSpectrum2.cxx:2892
 TSpectrum2.cxx:2893
 TSpectrum2.cxx:2894
 TSpectrum2.cxx:2895
 TSpectrum2.cxx:2896
 TSpectrum2.cxx:2897
 TSpectrum2.cxx:2898
 TSpectrum2.cxx:2899
 TSpectrum2.cxx:2900
 TSpectrum2.cxx:2901
 TSpectrum2.cxx:2902
 TSpectrum2.cxx:2903
 TSpectrum2.cxx:2904
 TSpectrum2.cxx:2905
 TSpectrum2.cxx:2906
 TSpectrum2.cxx:2907
 TSpectrum2.cxx:2908
 TSpectrum2.cxx:2909
 TSpectrum2.cxx:2910
 TSpectrum2.cxx:2911
 TSpectrum2.cxx:2912
 TSpectrum2.cxx:2913
 TSpectrum2.cxx:2914
 TSpectrum2.cxx:2915
 TSpectrum2.cxx:2916
 TSpectrum2.cxx:2917
 TSpectrum2.cxx:2918
 TSpectrum2.cxx:2919
 TSpectrum2.cxx:2920
 TSpectrum2.cxx:2921
 TSpectrum2.cxx:2922
 TSpectrum2.cxx:2923
 TSpectrum2.cxx:2924
 TSpectrum2.cxx:2925
 TSpectrum2.cxx:2926
 TSpectrum2.cxx:2927
 TSpectrum2.cxx:2928
 TSpectrum2.cxx:2929
 TSpectrum2.cxx:2930
 TSpectrum2.cxx:2931
 TSpectrum2.cxx:2932
 TSpectrum2.cxx:2933
 TSpectrum2.cxx:2934
 TSpectrum2.cxx:2935
 TSpectrum2.cxx:2936
 TSpectrum2.cxx:2937
 TSpectrum2.cxx:2938
 TSpectrum2.cxx:2939
 TSpectrum2.cxx:2940
 TSpectrum2.cxx:2941
 TSpectrum2.cxx:2942
 TSpectrum2.cxx:2943
 TSpectrum2.cxx:2944
 TSpectrum2.cxx:2945
 TSpectrum2.cxx:2946
 TSpectrum2.cxx:2947
 TSpectrum2.cxx:2948
 TSpectrum2.cxx:2949
 TSpectrum2.cxx:2950
 TSpectrum2.cxx:2951
 TSpectrum2.cxx:2952
 TSpectrum2.cxx:2953
 TSpectrum2.cxx:2954
 TSpectrum2.cxx:2955
 TSpectrum2.cxx:2956
 TSpectrum2.cxx:2957
 TSpectrum2.cxx:2958
 TSpectrum2.cxx:2959
 TSpectrum2.cxx:2960
 TSpectrum2.cxx:2961
 TSpectrum2.cxx:2962
 TSpectrum2.cxx:2963
 TSpectrum2.cxx:2964
 TSpectrum2.cxx:2965
 TSpectrum2.cxx:2966
 TSpectrum2.cxx:2967
 TSpectrum2.cxx:2968
 TSpectrum2.cxx:2969
 TSpectrum2.cxx:2970
 TSpectrum2.cxx:2971
 TSpectrum2.cxx:2972
 TSpectrum2.cxx:2973
 TSpectrum2.cxx:2974
 TSpectrum2.cxx:2975
 TSpectrum2.cxx:2976
 TSpectrum2.cxx:2977
 TSpectrum2.cxx:2978
 TSpectrum2.cxx:2979
 TSpectrum2.cxx:2980
 TSpectrum2.cxx:2981
 TSpectrum2.cxx:2982
 TSpectrum2.cxx:2983
 TSpectrum2.cxx:2984
 TSpectrum2.cxx:2985
 TSpectrum2.cxx:2986
 TSpectrum2.cxx:2987
 TSpectrum2.cxx:2988
 TSpectrum2.cxx:2989
 TSpectrum2.cxx:2990
 TSpectrum2.cxx:2991
 TSpectrum2.cxx:2992
 TSpectrum2.cxx:2993
 TSpectrum2.cxx:2994
 TSpectrum2.cxx:2995
 TSpectrum2.cxx:2996
 TSpectrum2.cxx:2997
 TSpectrum2.cxx:2998
 TSpectrum2.cxx:2999
 TSpectrum2.cxx:3000
 TSpectrum2.cxx:3001
 TSpectrum2.cxx:3002
 TSpectrum2.cxx:3003
 TSpectrum2.cxx:3004
 TSpectrum2.cxx:3005
 TSpectrum2.cxx:3006
 TSpectrum2.cxx:3007
 TSpectrum2.cxx:3008
 TSpectrum2.cxx:3009
 TSpectrum2.cxx:3010
 TSpectrum2.cxx:3011
 TSpectrum2.cxx:3012
 TSpectrum2.cxx:3013
 TSpectrum2.cxx:3014
 TSpectrum2.cxx:3015
 TSpectrum2.cxx:3016
 TSpectrum2.cxx:3017
 TSpectrum2.cxx:3018
 TSpectrum2.cxx:3019
 TSpectrum2.cxx:3020
 TSpectrum2.cxx:3021
 TSpectrum2.cxx:3022
 TSpectrum2.cxx:3023
 TSpectrum2.cxx:3024
 TSpectrum2.cxx:3025
 TSpectrum2.cxx:3026
 TSpectrum2.cxx:3027
 TSpectrum2.cxx:3028
 TSpectrum2.cxx:3029
 TSpectrum2.cxx:3030
 TSpectrum2.cxx:3031
 TSpectrum2.cxx:3032
 TSpectrum2.cxx:3033
 TSpectrum2.cxx:3034
 TSpectrum2.cxx:3035
 TSpectrum2.cxx:3036
 TSpectrum2.cxx:3037
 TSpectrum2.cxx:3038
 TSpectrum2.cxx:3039
 TSpectrum2.cxx:3040
 TSpectrum2.cxx:3041
 TSpectrum2.cxx:3042
 TSpectrum2.cxx:3043
 TSpectrum2.cxx:3044
 TSpectrum2.cxx:3045
 TSpectrum2.cxx:3046
 TSpectrum2.cxx:3047
 TSpectrum2.cxx:3048
 TSpectrum2.cxx:3049
 TSpectrum2.cxx:3050
 TSpectrum2.cxx:3051
 TSpectrum2.cxx:3052
 TSpectrum2.cxx:3053
 TSpectrum2.cxx:3054
 TSpectrum2.cxx:3055
 TSpectrum2.cxx:3056
 TSpectrum2.cxx:3057
 TSpectrum2.cxx:3058
 TSpectrum2.cxx:3059
 TSpectrum2.cxx:3060
 TSpectrum2.cxx:3061
 TSpectrum2.cxx:3062
 TSpectrum2.cxx:3063
 TSpectrum2.cxx:3064
 TSpectrum2.cxx:3065
 TSpectrum2.cxx:3066
 TSpectrum2.cxx:3067
 TSpectrum2.cxx:3068
 TSpectrum2.cxx:3069
 TSpectrum2.cxx:3070
 TSpectrum2.cxx:3071
 TSpectrum2.cxx:3072
 TSpectrum2.cxx:3073
 TSpectrum2.cxx:3074
 TSpectrum2.cxx:3075
 TSpectrum2.cxx:3076
 TSpectrum2.cxx:3077
 TSpectrum2.cxx:3078
 TSpectrum2.cxx:3079
 TSpectrum2.cxx:3080
 TSpectrum2.cxx:3081
 TSpectrum2.cxx:3082
 TSpectrum2.cxx:3083
 TSpectrum2.cxx:3084
 TSpectrum2.cxx:3085
 TSpectrum2.cxx:3086
 TSpectrum2.cxx:3087
 TSpectrum2.cxx:3088
 TSpectrum2.cxx:3089
 TSpectrum2.cxx:3090
 TSpectrum2.cxx:3091
 TSpectrum2.cxx:3092
 TSpectrum2.cxx:3093
 TSpectrum2.cxx:3094
 TSpectrum2.cxx:3095
 TSpectrum2.cxx:3096
 TSpectrum2.cxx:3097
 TSpectrum2.cxx:3098
 TSpectrum2.cxx:3099
 TSpectrum2.cxx:3100
 TSpectrum2.cxx:3101
 TSpectrum2.cxx:3102
 TSpectrum2.cxx:3103
 TSpectrum2.cxx:3104
 TSpectrum2.cxx:3105
 TSpectrum2.cxx:3106
 TSpectrum2.cxx:3107
 TSpectrum2.cxx:3108
 TSpectrum2.cxx:3109
 TSpectrum2.cxx:3110
 TSpectrum2.cxx:3111
 TSpectrum2.cxx:3112
 TSpectrum2.cxx:3113
 TSpectrum2.cxx:3114
 TSpectrum2.cxx:3115
 TSpectrum2.cxx:3116
 TSpectrum2.cxx:3117
 TSpectrum2.cxx:3118
 TSpectrum2.cxx:3119
 TSpectrum2.cxx:3120
 TSpectrum2.cxx:3121
 TSpectrum2.cxx:3122
 TSpectrum2.cxx:3123
 TSpectrum2.cxx:3124
 TSpectrum2.cxx:3125
 TSpectrum2.cxx:3126
 TSpectrum2.cxx:3127
 TSpectrum2.cxx:3128
 TSpectrum2.cxx:3129
 TSpectrum2.cxx:3130
 TSpectrum2.cxx:3131
 TSpectrum2.cxx:3132
 TSpectrum2.cxx:3133
 TSpectrum2.cxx:3134
 TSpectrum2.cxx:3135
 TSpectrum2.cxx:3136
 TSpectrum2.cxx:3137
 TSpectrum2.cxx:3138
 TSpectrum2.cxx:3139
 TSpectrum2.cxx:3140
 TSpectrum2.cxx:3141
 TSpectrum2.cxx:3142
 TSpectrum2.cxx:3143
 TSpectrum2.cxx:3144
 TSpectrum2.cxx:3145
 TSpectrum2.cxx:3146
 TSpectrum2.cxx:3147
 TSpectrum2.cxx:3148
 TSpectrum2.cxx:3149
 TSpectrum2.cxx:3150
 TSpectrum2.cxx:3151
 TSpectrum2.cxx:3152
 TSpectrum2.cxx:3153
 TSpectrum2.cxx:3154
 TSpectrum2.cxx:3155
 TSpectrum2.cxx:3156
 TSpectrum2.cxx:3157
 TSpectrum2.cxx:3158
 TSpectrum2.cxx:3159
 TSpectrum2.cxx:3160
 TSpectrum2.cxx:3161
 TSpectrum2.cxx:3162
 TSpectrum2.cxx:3163
 TSpectrum2.cxx:3164
 TSpectrum2.cxx:3165
 TSpectrum2.cxx:3166
 TSpectrum2.cxx:3167
 TSpectrum2.cxx:3168
 TSpectrum2.cxx:3169
 TSpectrum2.cxx:3170
 TSpectrum2.cxx:3171
 TSpectrum2.cxx:3172
 TSpectrum2.cxx:3173
 TSpectrum2.cxx:3174
 TSpectrum2.cxx:3175
 TSpectrum2.cxx:3176
 TSpectrum2.cxx:3177
 TSpectrum2.cxx:3178
 TSpectrum2.cxx:3179
 TSpectrum2.cxx:3180
 TSpectrum2.cxx:3181
 TSpectrum2.cxx:3182
 TSpectrum2.cxx:3183
 TSpectrum2.cxx:3184
 TSpectrum2.cxx:3185
 TSpectrum2.cxx:3186
 TSpectrum2.cxx:3187
 TSpectrum2.cxx:3188
 TSpectrum2.cxx:3189
 TSpectrum2.cxx:3190
 TSpectrum2.cxx:3191
 TSpectrum2.cxx:3192
 TSpectrum2.cxx:3193
 TSpectrum2.cxx:3194
 TSpectrum2.cxx:3195
 TSpectrum2.cxx:3196
 TSpectrum2.cxx:3197
 TSpectrum2.cxx:3198
 TSpectrum2.cxx:3199
 TSpectrum2.cxx:3200
 TSpectrum2.cxx:3201
 TSpectrum2.cxx:3202
 TSpectrum2.cxx:3203
 TSpectrum2.cxx:3204
 TSpectrum2.cxx:3205
 TSpectrum2.cxx:3206
 TSpectrum2.cxx:3207
 TSpectrum2.cxx:3208
 TSpectrum2.cxx:3209
 TSpectrum2.cxx:3210
 TSpectrum2.cxx:3211
 TSpectrum2.cxx:3212
 TSpectrum2.cxx:3213
 TSpectrum2.cxx:3214
 TSpectrum2.cxx:3215
 TSpectrum2.cxx:3216
 TSpectrum2.cxx:3217
 TSpectrum2.cxx:3218
 TSpectrum2.cxx:3219
 TSpectrum2.cxx:3220
 TSpectrum2.cxx:3221
 TSpectrum2.cxx:3222
 TSpectrum2.cxx:3223
 TSpectrum2.cxx:3224
 TSpectrum2.cxx:3225
 TSpectrum2.cxx:3226
 TSpectrum2.cxx:3227
 TSpectrum2.cxx:3228
 TSpectrum2.cxx:3229
 TSpectrum2.cxx:3230
 TSpectrum2.cxx:3231
 TSpectrum2.cxx:3232
 TSpectrum2.cxx:3233
 TSpectrum2.cxx:3234
 TSpectrum2.cxx:3235
 TSpectrum2.cxx:3236
 TSpectrum2.cxx:3237
 TSpectrum2.cxx:3238
 TSpectrum2.cxx:3239
 TSpectrum2.cxx:3240
 TSpectrum2.cxx:3241
 TSpectrum2.cxx:3242
 TSpectrum2.cxx:3243
 TSpectrum2.cxx:3244
 TSpectrum2.cxx:3245
 TSpectrum2.cxx:3246
 TSpectrum2.cxx:3247
 TSpectrum2.cxx:3248
 TSpectrum2.cxx:3249
 TSpectrum2.cxx:3250
 TSpectrum2.cxx:3251
 TSpectrum2.cxx:3252
 TSpectrum2.cxx:3253
 TSpectrum2.cxx:3254
 TSpectrum2.cxx:3255
 TSpectrum2.cxx:3256
 TSpectrum2.cxx:3257
 TSpectrum2.cxx:3258
 TSpectrum2.cxx:3259
 TSpectrum2.cxx:3260
 TSpectrum2.cxx:3261
 TSpectrum2.cxx:3262
 TSpectrum2.cxx:3263
 TSpectrum2.cxx:3264
 TSpectrum2.cxx:3265
 TSpectrum2.cxx:3266
 TSpectrum2.cxx:3267
 TSpectrum2.cxx:3268
 TSpectrum2.cxx:3269
 TSpectrum2.cxx:3270
 TSpectrum2.cxx:3271
 TSpectrum2.cxx:3272
 TSpectrum2.cxx:3273
 TSpectrum2.cxx:3274
 TSpectrum2.cxx:3275
 TSpectrum2.cxx:3276
 TSpectrum2.cxx:3277
 TSpectrum2.cxx:3278
 TSpectrum2.cxx:3279
 TSpectrum2.cxx:3280
 TSpectrum2.cxx:3281
 TSpectrum2.cxx:3282
 TSpectrum2.cxx:3283
 TSpectrum2.cxx:3284
 TSpectrum2.cxx:3285
 TSpectrum2.cxx:3286
 TSpectrum2.cxx:3287
 TSpectrum2.cxx:3288
 TSpectrum2.cxx:3289
 TSpectrum2.cxx:3290
 TSpectrum2.cxx:3291
 TSpectrum2.cxx:3292
 TSpectrum2.cxx:3293
 TSpectrum2.cxx:3294
 TSpectrum2.cxx:3295
 TSpectrum2.cxx:3296
 TSpectrum2.cxx:3297
 TSpectrum2.cxx:3298
 TSpectrum2.cxx:3299
 TSpectrum2.cxx:3300
 TSpectrum2.cxx:3301
 TSpectrum2.cxx:3302
 TSpectrum2.cxx:3303
 TSpectrum2.cxx:3304
 TSpectrum2.cxx:3305
 TSpectrum2.cxx:3306
 TSpectrum2.cxx:3307
 TSpectrum2.cxx:3308
 TSpectrum2.cxx:3309
 TSpectrum2.cxx:3310
 TSpectrum2.cxx:3311
 TSpectrum2.cxx:3312
 TSpectrum2.cxx:3313
 TSpectrum2.cxx:3314
 TSpectrum2.cxx:3315
 TSpectrum2.cxx:3316
 TSpectrum2.cxx:3317
 TSpectrum2.cxx:3318
 TSpectrum2.cxx:3319
 TSpectrum2.cxx:3320
 TSpectrum2.cxx:3321
 TSpectrum2.cxx:3322
 TSpectrum2.cxx:3323
 TSpectrum2.cxx:3324
 TSpectrum2.cxx:3325
 TSpectrum2.cxx:3326
 TSpectrum2.cxx:3327
 TSpectrum2.cxx:3328
 TSpectrum2.cxx:3329
 TSpectrum2.cxx:3330
 TSpectrum2.cxx:3331
 TSpectrum2.cxx:3332
 TSpectrum2.cxx:3333
 TSpectrum2.cxx:3334
 TSpectrum2.cxx:3335
 TSpectrum2.cxx:3336
 TSpectrum2.cxx:3337
 TSpectrum2.cxx:3338
 TSpectrum2.cxx:3339
 TSpectrum2.cxx:3340
 TSpectrum2.cxx:3341
 TSpectrum2.cxx:3342
 TSpectrum2.cxx:3343
 TSpectrum2.cxx:3344
 TSpectrum2.cxx:3345
 TSpectrum2.cxx:3346
 TSpectrum2.cxx:3347
 TSpectrum2.cxx:3348
 TSpectrum2.cxx:3349
 TSpectrum2.cxx:3350
 TSpectrum2.cxx:3351
 TSpectrum2.cxx:3352
 TSpectrum2.cxx:3353
 TSpectrum2.cxx:3354
 TSpectrum2.cxx:3355
 TSpectrum2.cxx:3356
 TSpectrum2.cxx:3357
 TSpectrum2.cxx:3358
 TSpectrum2.cxx:3359
 TSpectrum2.cxx:3360
 TSpectrum2.cxx:3361
 TSpectrum2.cxx:3362
 TSpectrum2.cxx:3363
 TSpectrum2.cxx:3364
 TSpectrum2.cxx:3365
 TSpectrum2.cxx:3366
 TSpectrum2.cxx:3367
 TSpectrum2.cxx:3368
 TSpectrum2.cxx:3369
 TSpectrum2.cxx:3370
 TSpectrum2.cxx:3371
 TSpectrum2.cxx:3372
 TSpectrum2.cxx:3373
 TSpectrum2.cxx:3374
 TSpectrum2.cxx:3375
 TSpectrum2.cxx:3376
 TSpectrum2.cxx:3377
 TSpectrum2.cxx:3378
 TSpectrum2.cxx:3379
 TSpectrum2.cxx:3380
 TSpectrum2.cxx:3381
 TSpectrum2.cxx:3382
 TSpectrum2.cxx:3383
 TSpectrum2.cxx:3384
 TSpectrum2.cxx:3385
 TSpectrum2.cxx:3386
 TSpectrum2.cxx:3387
 TSpectrum2.cxx:3388
 TSpectrum2.cxx:3389
 TSpectrum2.cxx:3390
 TSpectrum2.cxx:3391
 TSpectrum2.cxx:3392
 TSpectrum2.cxx:3393
 TSpectrum2.cxx:3394
 TSpectrum2.cxx:3395
 TSpectrum2.cxx:3396
 TSpectrum2.cxx:3397
 TSpectrum2.cxx:3398
 TSpectrum2.cxx:3399
 TSpectrum2.cxx:3400
 TSpectrum2.cxx:3401
 TSpectrum2.cxx:3402
 TSpectrum2.cxx:3403
 TSpectrum2.cxx:3404
 TSpectrum2.cxx:3405
 TSpectrum2.cxx:3406
 TSpectrum2.cxx:3407
 TSpectrum2.cxx:3408
 TSpectrum2.cxx:3409
 TSpectrum2.cxx:3410
 TSpectrum2.cxx:3411
 TSpectrum2.cxx:3412
 TSpectrum2.cxx:3413
 TSpectrum2.cxx:3414
 TSpectrum2.cxx:3415
 TSpectrum2.cxx:3416
 TSpectrum2.cxx:3417
 TSpectrum2.cxx:3418
 TSpectrum2.cxx:3419
 TSpectrum2.cxx:3420
 TSpectrum2.cxx:3421
 TSpectrum2.cxx:3422
 TSpectrum2.cxx:3423
 TSpectrum2.cxx:3424
 TSpectrum2.cxx:3425
 TSpectrum2.cxx:3426
 TSpectrum2.cxx:3427
 TSpectrum2.cxx:3428
 TSpectrum2.cxx:3429
 TSpectrum2.cxx:3430
 TSpectrum2.cxx:3431
 TSpectrum2.cxx:3432
 TSpectrum2.cxx:3433
 TSpectrum2.cxx:3434
 TSpectrum2.cxx:3435
 TSpectrum2.cxx:3436
 TSpectrum2.cxx:3437
 TSpectrum2.cxx:3438
 TSpectrum2.cxx:3439
 TSpectrum2.cxx:3440
 TSpectrum2.cxx:3441
 TSpectrum2.cxx:3442
 TSpectrum2.cxx:3443
 TSpectrum2.cxx:3444
 TSpectrum2.cxx:3445
 TSpectrum2.cxx:3446
 TSpectrum2.cxx:3447
 TSpectrum2.cxx:3448
 TSpectrum2.cxx:3449
 TSpectrum2.cxx:3450
 TSpectrum2.cxx:3451
 TSpectrum2.cxx:3452
 TSpectrum2.cxx:3453
 TSpectrum2.cxx:3454
 TSpectrum2.cxx:3455
 TSpectrum2.cxx:3456
 TSpectrum2.cxx:3457
 TSpectrum2.cxx:3458
 TSpectrum2.cxx:3459
 TSpectrum2.cxx:3460
 TSpectrum2.cxx:3461
 TSpectrum2.cxx:3462
 TSpectrum2.cxx:3463
 TSpectrum2.cxx:3464
 TSpectrum2.cxx:3465
 TSpectrum2.cxx:3466
 TSpectrum2.cxx:3467
 TSpectrum2.cxx:3468
 TSpectrum2.cxx:3469
 TSpectrum2.cxx:3470
 TSpectrum2.cxx:3471
 TSpectrum2.cxx:3472
 TSpectrum2.cxx:3473
 TSpectrum2.cxx:3474
 TSpectrum2.cxx:3475
 TSpectrum2.cxx:3476
 TSpectrum2.cxx:3477
 TSpectrum2.cxx:3478
 TSpectrum2.cxx:3479
 TSpectrum2.cxx:3480