ROOT logo
static  int      myAliceBlue    = TColor::GetColor(0,0,192);
static  int      myAliceRed    = TColor::GetColor(192,0,0);
void FitLambdaSpectrum(const char* name, const char * listName = "clambdak0Histo_00", const char* HistName = "h2PtVsMassLambda", const char* SaveName = "SPECTRA_MK_Lambda_7TeV.root")  	
    									    		
////////////////////////zaciatok FitLambdaSpectrum//////////////////////////////////////////////////////////
{

  gROOT->SetStyle("Plain");
  gROOT->LoadMacro("run.C");
  InitAndLoadLibs();
 
  TFile *myFile = new TFile(name);
  myFile->ls();
  TList *myList = myFile->Get(listName); // FIXME: find suffix?

  if(!myList) {
    cout << "Cannot get list " << listName << " from file " << name << endl;
    return;
  }

  TCanvas *myCan = new TCanvas("spectra","lambda");
  myCan->Draw();
  myCan->cd();

  TLatex *myKind = new TLatex(0.15,0.92,"ALICE: LHC10b Pass1 7 TeV"); // FIXME
  myKind->SetNDC();
  myKind->SetTextSize(0.03);
  myKind->SetTextColor(myAliceBlue);
  myKind->Draw();


  TText *textTitle = new TText(0.6,0.86,"");
  textTitle->SetNDC();
  textTitle->SetTextSize(0.04);
  textTitle->Draw();

  TPad *myPad1 = new TPad("myPad1","myPad1",0,0,1,0.85);
  myPadSetUp(myPad1,0.12,0.02,0.02,0.15);
  myPad1->Draw();
  myPad1->cd();

  //    gStyle->SetOptTitle(0);
  //    gStyle->SetOptStat(0);

  TH1F * SaveParameters= new TH1F("SaveParameters","parameters",6,0,6);

  ///zaciatok binovania/////////////
  const Int_t range=33;

  Double_t b[range];

  b[0]=0;     
  b[1]=0.5;
  for (Int_t i = 2;i<17;i++)
    {
      b[i]=b[i-1]+0.1;
      cout<<b[i]<<endl;
    }

  for (Int_t i = 17;i<27;i++)
    {
      b[i]=b[i-1]+0.2;
      cout<<b[i]<<endl;
    }
  b[27]=4.5;
  b[28]=5.0;
  b[29]=5.5;
  b[30]=6.5;
  b[31]=8.0;
  b[32]=12.0;


  //koniec binovania
  TH1F *DrawSpectrumLambda = new TH1F("DrawSpectrumLambda","#Lambda Spectrum;p_{t} [GeV/c]; N",32,b);

  ///////////////////////////////////////////////run over all bins//////////////////////////////////////////////////////////////
  int iLoBin = 15, iHiBin = 16;
  //	int iLoBin = 71, iHiBin = 72, hMax = 250;

  for (Int_t rBin = 4;rBin<33;rBin++){
    //for (Int_t rBin = 36;rBin<51;rBin++){


    myBinCounting(myList, DrawSpectrumLambda, rBin,iLoBin ,iHiBin,HistName,SaveParameters);  
  
    if ((rBin>=1)&&(rBin<16)) {iLoBin = iLoBin+2; iHiBin = iHiBin+2;}
	
    if  (rBin==16) {iLoBin = iLoBin+2; iHiBin = iHiBin+4;}

    if ((rBin>=17)&&(rBin<26)){iLoBin = iLoBin+4; iHiBin = iHiBin+4;}

    if  (rBin==26) {iLoBin = iLoBin+4; iHiBin = iHiBin+10;}

    if  (rBin==27) {iLoBin = iLoBin+10; iHiBin = iHiBin+10;}

    if  (rBin==28) {iLoBin = iLoBin+10; iHiBin = iHiBin+10;}

    if  (rBin==29) {iLoBin = iLoBin+10; iHiBin = iHiBin+20;}

    if  (rBin==30) {iLoBin = iLoBin+20; iHiBin = iHiBin+30;}

    if  (rBin==31) {iLoBin = iLoBin+30; iHiBin = iHiBin+80;}



    char saveFileName[60]; 
    char saveFileName1[60];   
    sprintf(saveFileName,"hm_InvariantMassLambdafit_bin%d.gif",rBin);
    sprintf(saveFileName1,"hm_InvariantMassLambdafit_bin%d.root",rBin);
    myCan->SaveAs(saveFileName); 
    myCan->SaveAs(saveFileName1);
    myCan->Clear();
 	
  }
  //////////////////////////koniec cyklu cez jednotlive biny/////////////////////////////



  //////////////////////////vykreslenie a ulozenie histogramu///////////////////////////
  DrawSpectrumLambda->Draw();

  TFile *SPECTRA_MK_Lambda = new TFile(SaveName,"RECREATE");
  SPECTRA_MK_Lambda->WriteObject(DrawSpectrumLambda,"DrawSpectrumLambda");

  SPECTRA_MK_Lambda->Close();
  //////////////////////////koniec ulozenia a vykreslenia/////////////////////////////////


}
/////////end FitLambdaSpectrum///////////////////////////////////////////////////////////////////////////////  






//////////////////////funkcia pre fitovanie////////////////////////////////////////////////////////


void myBinCounting(TList *myList = 0, TH1F *DrawSpectrumLambda = 0, Int_t rBin = 0, Int_t iLoBin =0, Int_t iHiBin =0, const char* HistName =0,TH1F *SaveParameters = 0){


  TH2F *h2PtVsMassLambda = (TH2F*)myList->FindObject(HistName);
  TH1D *h1MassLambdaPtBin = h2PtVsMassLambda->ProjectionX("h1MassLambdaPtBin",iLoBin,iHiBin);
  h1MassLambdaPtBin->SetFillColor(0);
  //	h1MassLambdaPtBin->SetTitle("h1MassLambdaPtBin;invariant mass (GeV/c^{2});Counts");
  //h1MassLambdaPtBin->Draw("SAME");
	   

  ///////////////////////////////////////Gauss+2nd pol fit////////////////////////////////////////////

  TH1D *myHistGauss = h1MassLambdaPtBin;
  //Double_t hMax=myHistGauss->GetMaximum();
  //myHistGauss->SetMaximum(hMax);
  myHistGauss->Draw();
  //   double myLevel = 500, mySlope = 0, mySlope2 = 0 ;
  //   double myNorm  = 100, myMean = 0.497, myWidth = 0.003;
  double myRange[2]={0,0};  
 
  // Gaussain Fit

  double    myLevel = 0, mySlope = 0, mySlope2 = 0; 
  double     myNorm  = 0, myMean  = 1.116, myWidth = 0.003;
  //	myNorm=(myHistGauss->GetMaximum()*TMath::Sqrt(2*TMath::Pi()));
  myNorm=myHistGauss->GetMaximum();
  //     myRange[0]=1.09; myRange[1]=1.14;
  myRange[0]=1.095; myRange[1]=1.135;

  if(rBin==4)
    {
      //myLevel =-2.46E5; mySlope = 3.39E5; mySlope2 = -1.03E5; myNorm  = 5.12E3;
      myRange[0]=1.10; myRange[1]=1.14;
    }

  if(rBin==3)
    {
      myLevel =-2.91E6; mySlope = 5.21E6; mySlope2 = -2.33E6; myNorm  = 9.32E3;
      myRange[0]=1.104; myRange[1]=1.14;
    }

  char cRange[30],cInterval[30],cIntegration[30],cFitInfo[100], cFitInfo2[100], cFitInfo3[100];
     
  TF1 *fPolGauss = new TF1("fpolgauss",myPolGauss,myRange[0],myRange[1],6);
  fPolGauss->SetTitle("The gaussian function");
  fPolGauss->SetParNames("level","slope","slope2","norm","mean","width");
  fPolGauss->SetParameters(myLevel,mySlope,mySlope2,myNorm,myMean,myWidth);
  fPolGauss->SetLineStyle(2);
  fPolGauss->SetLineWidth(2);
  fPolGauss->SetLineColor(602);
  ///    fPolGauss->Draw("SAME");
  myHistGauss->Fit(fPolGauss,"IREM");
  fPolGauss->Draw("SAME");

  //myHistGauss->Fit(fPolGauss,"LIREM");
     
  myNorm  = fPolGauss->GetParameter(3);
  myMean  = fPolGauss->GetParameter(4);
  myWidth = fPolGauss->GetParameter(5);



  /////store parameters for next fit if own will fall////
  //if ((myMean-(4*myWidth))<(myMean+(4*myWidth)))
  //if (myWidth>0.0005)
  if ((myWidth>0.0005)&&(myWidth<0.004))
    {
      for (Int_t i=1;i<7;i++) SaveParameters->SetBinContent(i,0);
      SaveParameters->SetBinContent(1,fPolGauss->GetParameter(0));
      SaveParameters->SetBinContent(2,fPolGauss->GetParameter(1));
      SaveParameters->SetBinContent(3,fPolGauss->GetParameter(2));
      SaveParameters->SetBinContent(4,fPolGauss->GetParameter(3));
      SaveParameters->SetBinContent(5,fPolGauss->GetParameter(4));
      SaveParameters->SetBinContent(6,fPolGauss->GetParameter(5));


    }
  ///////////////////////////////////////////////////////

  ///////////if parameters are wrong use previous/////
  //if ((myMean-(4*myWidth))>=(myMean+(4*myWidth)))
  //if (myWidth<=0.0005)
  if ((myWidth<=0.0005)||(myWidth>=0.004))
    {
      cout<<"Previous parameters"<<endl;
      for (Int_t i=1;i<7;i++) cout<<SaveParameters->GetBinContent(i)<<endl;
      myLevel=SaveParameters->GetBinContent(1);
      mySlope=SaveParameters->GetBinContent(2);
      mySlope2=SaveParameters->GetBinContent(3);
      myNorm=SaveParameters->GetBinContent(4);
      myMean=SaveParameters->GetBinContent(5);
      myWidth=SaveParameters->GetBinContent(6);

      cout<<"nova sirka"<<myWidth<<endl;
    }
  ////////////////////////////////////////////////////

     
  TF1 *fGauss = new TF1("fgauss",myGauss,myRange[0],myRange[1],3);
  fGauss->SetTitle("The gaussian function");
  fGauss->SetParNames("norm","mean","width");
  fGauss->SetParameters(myNorm,myMean,myWidth);
  fGauss->SetLineColor(myAliceRed);
  fGauss->SetFillColor(myAliceRed);
  fGauss->SetFillStyle(3005);
  fGauss->SetLineWidth(1);
  fGauss->Draw("SAME");
     
  int    NumSigmaSignal      = 4;
  int    NumSigmaBackground   =6;
  double integralWidth = NumSigmaSignal*myWidth;
     
  double binWidth      = myHistGauss->GetBinWidth(1);
  double integralGauss = fGauss->Integral(myMean-integralWidth,myMean+integralWidth);
  sprintf(cRange,"%d#sigma range (GeV/c^{2})",NumSigmaSignal);
  sprintf(cInterval,"[%.3f;%.3f]",myMean-integralWidth,myMean+integralWidth);
  sprintf(cIntegration,"integral: %.0f",integralGauss/binWidth);
  sprintf(cFitInfo,"#Chi^{2}/ndf = %.1f/%d",fPolGauss->GetChisquare(),fPolGauss->GetNDF());
  //     sprintf(cFitInfo2,"mean = %.4f #pm %.4f",fPolGauss->GetParameter(4),fPolGauss->GetParError(4));
  //     sprintf(cFitInfo3,"width = %.5f #pm %.5f",fPolGauss->GetParameter(5),fPolGauss->GetParError(5));

  cout<<cRange<<endl;
  cout<<cInterval<<endl;
  cout<<cIntegration<<endl;
  cout<<cFitInfo<<endl;
  //cout<<cFitInfo2<<endl;
  //cout<<cFitInfo3<<endl;


  //break;

  ////////////////////////////////////////koniec Gauss+2nd pol fit////////////////////////////////////


  Double_t GaussMean =myMean; //fPolGauss->GetParameter(4); //stredna hodnota gausovskeho fitu 
  Double_t GaussSigma =myWidth; //fPolGauss->GetParameter(5); //sigma gausovskeho fitu 

  Double_t LeftSide = myHistGauss->FindBin(GaussMean - NumSigmaSignal*GaussSigma);  // hranice signalu
  Double_t RightSide = myHistGauss->FindBin(GaussMean + NumSigmaSignal*GaussSigma);

  Double_t NumberBinsSignal = (RightSide - LeftSide) + 1; //pocet binov ktore obsahuju signal

  Double_t LeftB_Side_Left = myHistGauss->FindBin(myRange[0]); //bacground on left side of peak
  Double_t LeftB_Side_Right = myHistGauss->FindBin(GaussMean - NumSigmaBackground*GaussSigma);

  Double_t RightB_Side_Left = myHistGauss->FindBin(GaussMean + NumSigmaBackground*GaussSigma); //bacground on Right side of peak
  Double_t RightB_Side_Right = myHistGauss->FindBin(myRange[1]);



  Double_t NumberBinsBackground = (LeftB_Side_Right - LeftB_Side_Left) + 1 + (RightB_Side_Right - RightB_Side_Left) + 1; // pocet binov co 


  //
  // Bin Counting Method 
  //

  // Compute the whole content for Signal in 4 sigma 
  Float_t SignalContentCount = h1MassLambdaPtBin->Integral(LeftSide,RightSide );


  // Create a histo with the Noise only.   

  Double_t  nCountNoise   = 0;
  TH1D *myHistNoise = new TH1D(*h1MassLambdaPtBin);
  myHistNoise->SetName("myHistNoise");
  myHistNoise->SetTitle("myHistNoise");
  myHistNoise->Scale(0);
  myHistNoise->SetFillColor(myAliceBlue);



  for (Int_t iBin = LeftB_Side_Left; iBin <= LeftB_Side_Right; iBin++) {
   
    nCountNoise      +=h1MassLambdaPtBin ->GetBinContent(iBin);
    myHistNoise->SetBinContent(iBin,h1MassLambdaPtBin->GetBinContent(iBin));
    myHistNoise->SetBinError(iBin,h1MassLambdaPtBin->GetBinError(iBin));
  }

  for (Int_t iBin = RightB_Side_Left; iBin <= RightB_Side_Right; iBin++) {
    
    nCountNoise      +=h1MassLambdaPtBin ->GetBinContent(iBin);
    myHistNoise->SetBinContent(iBin,h1MassLambdaPtBin->GetBinContent(iBin));
    myHistNoise->SetBinError(iBin,h1MassLambdaPtBin->GetBinError(iBin));
  }

  // Create a histo with the Signal in 4 sigma.
  int totInHistSignal = 0;
  TH1D *myHistSignal = new TH1D(*h1MassLambdaPtBin);
  myHistSignal->SetName("myHistSignal");
  myHistSignal->SetTitle("myHistSignal");
  myHistSignal->Scale(0);
  myHistSignal->SetFillStyle(3004);


  for (Int_t iBin = LeftSide; iBin <= RightSide; iBin++){
    myHistSignal->SetBinContent(iBin,h1MassLambdaPtBin->GetBinContent(iBin));
    myHistSignal->SetBinError(iBin,h1MassLambdaPtBin->GetBinError(iBin));    
    totInHistSignal += h1MassLambdaPtBin->GetBinContent(iBin);
   
  }


  //
  // Background Fit
  //


  cout<<"zaciatok background fit casti "<<endl;
  cout<<endl;
  cout<<endl;

  //   if  (rOrderPoly == 1 ) {
  //     TF1*fitNoise = new TF1("fitNoise",myPol1,LeftB_Side_Left,RightB_Side_Right,4);
  //
  //     fitNoise->FixParameter(2,(GaussMean - 6*GaussSigma));
  //     fitNoise->FixParameter(3,(GaussMean + 6*GaussSigma));   
  //   }


  TF1*fitNoise = new TF1("fitNoise",myPol2,myRange[0],myRange[1],5);
  fitNoise->SetParLimits(2,-1E8,0);
  fitNoise->SetParameter(0,fPolGauss->GetParameter(0));
  fitNoise->SetParameter(1,fPolGauss->GetParameter(1));
  fitNoise->SetParameter(2,fPolGauss->GetParameter(2));

  fitNoise->FixParameter(3,(GaussMean - NumSigmaBackground*GaussSigma));
  fitNoise->FixParameter(4,(GaussMean + NumSigmaBackground*GaussSigma));    



  Double_t inteGrapmyHistNoise = 0;
  Double_t inteGrapmyHistSignal = 0;

    
  myHistNoise->Fit("fitNoise","irem+");
  //myHistNoise->Fit("fitNoise","Lirem+");

  Double_t hMax=myHistGauss->GetMaximum();
  myHistNoise->SetMaximum(hMax);

  myHistNoise->GetYaxis()->SetTitle("counts");
  myHistNoise->GetYaxis()->SetTitleOffset(1.2);
  myHistNoise->SetMaximum(hMax);
  myHistNoise->Draw("HIST");
  myHistSignal->SetFillColor(myAliceRed);
  myHistSignal->Draw("A BAR E SAME");
  myHistGauss->SetLineWidth(1);
  myHistGauss->Draw("A H E SAME");

  //fitNoise->Draw("same");

  //****************************************
  // Bin Counting
  //****************************************

  // Noise Under Peak 

  //     TF1*fNoise = new TF1("fNoise","[0]+x*[1]",LeftB_Side_Left,RightB_Side_Right); 
  //    fNoise->FixParameter(0,fitNoise->GetParameter(0));
  //     fNoise->FixParameter(1,fitNoise->GetParameter(1));



  TF1*fNoise = new TF1("fNoise","[0]+x*[1]+x*x*[2]",myRange[0],myRange[1]); 
  fNoise->FixParameter(0,fitNoise->GetParameter(0));
  fNoise->FixParameter(1,fitNoise->GetParameter(1));
  fNoise->FixParameter(2,fitNoise->GetParameter(2));


  fNoise->Draw("same");

  //   Double_t nNoiseUnderPeak    = fNoise->Integral(GaussMean - NumSigmaSignal*GaussSigma,GaussMean + NumSigmaSignal*GaussSigma)/(myHistNoise->GetBinWidth(1));
  Double_t lBinWidth = myHistNoise->GetBinWidth(1);
  cout<<"sirka binu"<< lBinWidth<<endl;
  Double_t nNoiseUnderPeak    = fNoise->Integral(h1MassLambdaPtBin->GetBinCenter(LeftSide)-0.5*lBinWidth,h1MassLambdaPtBin->GetBinCenter(RightSide)+0.5*lBinWidth)/lBinWidth;


  Double_t nNoiseUnderPeakErr = TMath::Sqrt(nNoiseUnderPeak);


  // Signal
  Double_t   Signal[2]; // Signal[0]=signal and Signal[1]=error
  Signal[0] = Signal[1]=0.0;
  Signal[0] = totInHistSignal-nNoiseUnderPeak;
  Signal[1] = TMath::Sqrt(Signal[0]+nNoiseUnderPeak);

  //	DrawSpectrumLambda->SetBinContent(rBin,Signal[0]/DrawSpectrumLambda->GetBinWidth(rBin);
  //	DrawSpectrumLambda->SetBinError(rBin,Signal[1]/DrawSpectrumLambda->GetBinWidth(rBin));
  DrawSpectrumLambda->SetBinContent(rBin,Signal[0]);
  DrawSpectrumLambda->SetBinError(rBin,Signal[1]);
     
  printf("BoInfo: Noise intervals [%.3f;%.3f],[%.3f;%.3f]\n",myRange[0],(GaussMean - NumSigmaBackground*GaussSigma),(GaussMean +NumSigmaBackground *GaussSigma),myRange[1]);
  printf("BoInfo: nBinNoise(left+right)=%d  nCountNoise(left+right)=%f \n",NumberBinsBackground,nCountNoise);
  printf("BoInfo: nBinCentral=%d  totInHistSignal=%f \n",NumberBinsSignal,totInHistSignal);
  printf("BoInfo: Noise under peak %.2f +-%.2f \n",nNoiseUnderPeak, nNoiseUnderPeakErr);
  printf("BoInfo: Signal %f \n",Signal[0]);
   
   
  // printf only and keep only on plot the Signal, noise and S/N.
  Char_t     cIntervalSignal[50], cSignalOverNoise[50], cNoiseUnderPeak[50], cFitNoiseInfo[50];
  Double_t   SignalOverNoise    = 0.0;
  Double_t   SignalOverNoiseErr = 0.0;
   
  sprintf(cIntervalSignal,"Signal [%.3f;%.3f] = %.0f #pm %.0f",LeftSide,RightSide,Signal[0], Signal[1]);
  sprintf(cNoiseUnderPeak,"Noise under peak = %.0f #pm %.0f",nNoiseUnderPeak, nNoiseUnderPeakErr);
  SignalOverNoise    = Signal[0]/nNoiseUnderPeak;
  SignalOverNoiseErr = TMath::Sqrt(Signal[0]+2*nNoiseUnderPeak);
  sprintf(cSignalOverNoise,"S/N= %.2f #pm %.2f",SignalOverNoise,SignalOverNoiseErr);
  cout<<"cSignalOverNoise"<<cSignalOverNoise<<endl;
  sprintf(cFitNoiseInfo,"#Chi^{2}/ndf = %.1f/%d",fitNoise->GetChisquare(),fitNoise->GetNDF());
   
  cout<<cIntervalSignal<<endl;
  cout<<cNoiseUnderPeak<<endl;
  cout<<cFitNoiseInfo<<endl;

}

/////////////////////////////////////koniec funkcie////////////////////////////////////////



/////////////////////////////////////////funkcie///////////////////////////////////////////////////////


void myPadSetUp(TPad *currentPad=0, float rLeft=0, float rTop=0, float rRight=0, float rBottom=0){
  currentPad->SetLeftMargin(rLeft); 
  currentPad->SetTopMargin(rTop);  
  currentPad->SetRightMargin(rRight);
  currentPad->SetBottomMargin(rBottom);
  return;
}


double myGauss(double *x, double *par){
  double absc  = x[0];
  double norm  = par[0];
  double mean  = par[1];
  double width = par[2];
  //  double mygauss = (norm/TMath::Sqrt(2*TMath::Pi()))*TMath::Exp(-0.5*(absc-mean)*(absc-mean)/(width*width));
  double mygauss = (norm)*TMath::Exp(-0.5*(absc-mean)*(absc-mean)/(width*width));
  return mygauss;
}

double myPolGauss(double *x, double *pars){
  double absc   = x[0];
  double level  = pars[0];
  double slope  = pars[1];
  double slope2 = pars[2];
  double norm   = pars[3];
  double mean   = pars[4];
  double width  = pars[5];
  //  double ordo = level + slope * absc +slope2 * absc*absc + (norm/TMath::Sqrt(2*TMath::Pi()))*TMath::Exp(-0.5*(absc-mean)*(absc-mean)/(width*width));
  double ordo = level + slope * absc +slope2 * absc*absc + (norm)*TMath::Exp(-0.5*(absc-mean)*(absc-mean)/(width*width));
  return ordo;
}

double myPol1(double *x, double *pars) {

  double absc    = x[0];
  double level   = pars[0];
  double slope   = pars[1];
  double abscMin = pars[2];
  double abscMax = pars[3];

  if (absc >= abscMin && absc < abscMax) {
    TF1::RejectPoint();
    return 0;
  }
  
  double ordo = level + slope * absc;
  return ordo;

}

double myPol2(double *x, double *pars) {

  double absc    = x[0];
  double level   = pars[0];
  double slope   = pars[1];
  double slope2  = pars[2];
  double abscMin = pars[3];
  double abscMax = pars[4];

  if (absc >= abscMin && absc < abscMax) {
    TF1::RejectPoint();
    return 0;
  }
 
  double ordo = level + slope * absc +slope2 * absc*absc;
  return ordo;

}



void LoadLibs(){

  gSystem->Load("libCore.so");  
  gSystem->Load("libTree.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");   
}
 FitLambdaSpectrum.C:1
 FitLambdaSpectrum.C:2
 FitLambdaSpectrum.C:3
 FitLambdaSpectrum.C:4
 FitLambdaSpectrum.C:5
 FitLambdaSpectrum.C:6
 FitLambdaSpectrum.C:7
 FitLambdaSpectrum.C:8
 FitLambdaSpectrum.C:9
 FitLambdaSpectrum.C:10
 FitLambdaSpectrum.C:11
 FitLambdaSpectrum.C:12
 FitLambdaSpectrum.C:13
 FitLambdaSpectrum.C:14
 FitLambdaSpectrum.C:15
 FitLambdaSpectrum.C:16
 FitLambdaSpectrum.C:17
 FitLambdaSpectrum.C:18
 FitLambdaSpectrum.C:19
 FitLambdaSpectrum.C:20
 FitLambdaSpectrum.C:21
 FitLambdaSpectrum.C:22
 FitLambdaSpectrum.C:23
 FitLambdaSpectrum.C:24
 FitLambdaSpectrum.C:25
 FitLambdaSpectrum.C:26
 FitLambdaSpectrum.C:27
 FitLambdaSpectrum.C:28
 FitLambdaSpectrum.C:29
 FitLambdaSpectrum.C:30
 FitLambdaSpectrum.C:31
 FitLambdaSpectrum.C:32
 FitLambdaSpectrum.C:33
 FitLambdaSpectrum.C:34
 FitLambdaSpectrum.C:35
 FitLambdaSpectrum.C:36
 FitLambdaSpectrum.C:37
 FitLambdaSpectrum.C:38
 FitLambdaSpectrum.C:39
 FitLambdaSpectrum.C:40
 FitLambdaSpectrum.C:41
 FitLambdaSpectrum.C:42
 FitLambdaSpectrum.C:43
 FitLambdaSpectrum.C:44
 FitLambdaSpectrum.C:45
 FitLambdaSpectrum.C:46
 FitLambdaSpectrum.C:47
 FitLambdaSpectrum.C:48
 FitLambdaSpectrum.C:49
 FitLambdaSpectrum.C:50
 FitLambdaSpectrum.C:51
 FitLambdaSpectrum.C:52
 FitLambdaSpectrum.C:53
 FitLambdaSpectrum.C:54
 FitLambdaSpectrum.C:55
 FitLambdaSpectrum.C:56
 FitLambdaSpectrum.C:57
 FitLambdaSpectrum.C:58
 FitLambdaSpectrum.C:59
 FitLambdaSpectrum.C:60
 FitLambdaSpectrum.C:61
 FitLambdaSpectrum.C:62
 FitLambdaSpectrum.C:63
 FitLambdaSpectrum.C:64
 FitLambdaSpectrum.C:65
 FitLambdaSpectrum.C:66
 FitLambdaSpectrum.C:67
 FitLambdaSpectrum.C:68
 FitLambdaSpectrum.C:69
 FitLambdaSpectrum.C:70
 FitLambdaSpectrum.C:71
 FitLambdaSpectrum.C:72
 FitLambdaSpectrum.C:73
 FitLambdaSpectrum.C:74
 FitLambdaSpectrum.C:75
 FitLambdaSpectrum.C:76
 FitLambdaSpectrum.C:77
 FitLambdaSpectrum.C:78
 FitLambdaSpectrum.C:79
 FitLambdaSpectrum.C:80
 FitLambdaSpectrum.C:81
 FitLambdaSpectrum.C:82
 FitLambdaSpectrum.C:83
 FitLambdaSpectrum.C:84
 FitLambdaSpectrum.C:85
 FitLambdaSpectrum.C:86
 FitLambdaSpectrum.C:87
 FitLambdaSpectrum.C:88
 FitLambdaSpectrum.C:89
 FitLambdaSpectrum.C:90
 FitLambdaSpectrum.C:91
 FitLambdaSpectrum.C:92
 FitLambdaSpectrum.C:93
 FitLambdaSpectrum.C:94
 FitLambdaSpectrum.C:95
 FitLambdaSpectrum.C:96
 FitLambdaSpectrum.C:97
 FitLambdaSpectrum.C:98
 FitLambdaSpectrum.C:99
 FitLambdaSpectrum.C:100
 FitLambdaSpectrum.C:101
 FitLambdaSpectrum.C:102
 FitLambdaSpectrum.C:103
 FitLambdaSpectrum.C:104
 FitLambdaSpectrum.C:105
 FitLambdaSpectrum.C:106
 FitLambdaSpectrum.C:107
 FitLambdaSpectrum.C:108
 FitLambdaSpectrum.C:109
 FitLambdaSpectrum.C:110
 FitLambdaSpectrum.C:111
 FitLambdaSpectrum.C:112
 FitLambdaSpectrum.C:113
 FitLambdaSpectrum.C:114
 FitLambdaSpectrum.C:115
 FitLambdaSpectrum.C:116
 FitLambdaSpectrum.C:117
 FitLambdaSpectrum.C:118
 FitLambdaSpectrum.C:119
 FitLambdaSpectrum.C:120
 FitLambdaSpectrum.C:121
 FitLambdaSpectrum.C:122
 FitLambdaSpectrum.C:123
 FitLambdaSpectrum.C:124
 FitLambdaSpectrum.C:125
 FitLambdaSpectrum.C:126
 FitLambdaSpectrum.C:127
 FitLambdaSpectrum.C:128
 FitLambdaSpectrum.C:129
 FitLambdaSpectrum.C:130
 FitLambdaSpectrum.C:131
 FitLambdaSpectrum.C:132
 FitLambdaSpectrum.C:133
 FitLambdaSpectrum.C:134
 FitLambdaSpectrum.C:135
 FitLambdaSpectrum.C:136
 FitLambdaSpectrum.C:137
 FitLambdaSpectrum.C:138
 FitLambdaSpectrum.C:139
 FitLambdaSpectrum.C:140
 FitLambdaSpectrum.C:141
 FitLambdaSpectrum.C:142
 FitLambdaSpectrum.C:143
 FitLambdaSpectrum.C:144
 FitLambdaSpectrum.C:145
 FitLambdaSpectrum.C:146
 FitLambdaSpectrum.C:147
 FitLambdaSpectrum.C:148
 FitLambdaSpectrum.C:149
 FitLambdaSpectrum.C:150
 FitLambdaSpectrum.C:151
 FitLambdaSpectrum.C:152
 FitLambdaSpectrum.C:153
 FitLambdaSpectrum.C:154
 FitLambdaSpectrum.C:155
 FitLambdaSpectrum.C:156
 FitLambdaSpectrum.C:157
 FitLambdaSpectrum.C:158
 FitLambdaSpectrum.C:159
 FitLambdaSpectrum.C:160
 FitLambdaSpectrum.C:161
 FitLambdaSpectrum.C:162
 FitLambdaSpectrum.C:163
 FitLambdaSpectrum.C:164
 FitLambdaSpectrum.C:165
 FitLambdaSpectrum.C:166
 FitLambdaSpectrum.C:167
 FitLambdaSpectrum.C:168
 FitLambdaSpectrum.C:169
 FitLambdaSpectrum.C:170
 FitLambdaSpectrum.C:171
 FitLambdaSpectrum.C:172
 FitLambdaSpectrum.C:173
 FitLambdaSpectrum.C:174
 FitLambdaSpectrum.C:175
 FitLambdaSpectrum.C:176
 FitLambdaSpectrum.C:177
 FitLambdaSpectrum.C:178
 FitLambdaSpectrum.C:179
 FitLambdaSpectrum.C:180
 FitLambdaSpectrum.C:181
 FitLambdaSpectrum.C:182
 FitLambdaSpectrum.C:183
 FitLambdaSpectrum.C:184
 FitLambdaSpectrum.C:185
 FitLambdaSpectrum.C:186
 FitLambdaSpectrum.C:187
 FitLambdaSpectrum.C:188
 FitLambdaSpectrum.C:189
 FitLambdaSpectrum.C:190
 FitLambdaSpectrum.C:191
 FitLambdaSpectrum.C:192
 FitLambdaSpectrum.C:193
 FitLambdaSpectrum.C:194
 FitLambdaSpectrum.C:195
 FitLambdaSpectrum.C:196
 FitLambdaSpectrum.C:197
 FitLambdaSpectrum.C:198
 FitLambdaSpectrum.C:199
 FitLambdaSpectrum.C:200
 FitLambdaSpectrum.C:201
 FitLambdaSpectrum.C:202
 FitLambdaSpectrum.C:203
 FitLambdaSpectrum.C:204
 FitLambdaSpectrum.C:205
 FitLambdaSpectrum.C:206
 FitLambdaSpectrum.C:207
 FitLambdaSpectrum.C:208
 FitLambdaSpectrum.C:209
 FitLambdaSpectrum.C:210
 FitLambdaSpectrum.C:211
 FitLambdaSpectrum.C:212
 FitLambdaSpectrum.C:213
 FitLambdaSpectrum.C:214
 FitLambdaSpectrum.C:215
 FitLambdaSpectrum.C:216
 FitLambdaSpectrum.C:217
 FitLambdaSpectrum.C:218
 FitLambdaSpectrum.C:219
 FitLambdaSpectrum.C:220
 FitLambdaSpectrum.C:221
 FitLambdaSpectrum.C:222
 FitLambdaSpectrum.C:223
 FitLambdaSpectrum.C:224
 FitLambdaSpectrum.C:225
 FitLambdaSpectrum.C:226
 FitLambdaSpectrum.C:227
 FitLambdaSpectrum.C:228
 FitLambdaSpectrum.C:229
 FitLambdaSpectrum.C:230
 FitLambdaSpectrum.C:231
 FitLambdaSpectrum.C:232
 FitLambdaSpectrum.C:233
 FitLambdaSpectrum.C:234
 FitLambdaSpectrum.C:235
 FitLambdaSpectrum.C:236
 FitLambdaSpectrum.C:237
 FitLambdaSpectrum.C:238
 FitLambdaSpectrum.C:239
 FitLambdaSpectrum.C:240
 FitLambdaSpectrum.C:241
 FitLambdaSpectrum.C:242
 FitLambdaSpectrum.C:243
 FitLambdaSpectrum.C:244
 FitLambdaSpectrum.C:245
 FitLambdaSpectrum.C:246
 FitLambdaSpectrum.C:247
 FitLambdaSpectrum.C:248
 FitLambdaSpectrum.C:249
 FitLambdaSpectrum.C:250
 FitLambdaSpectrum.C:251
 FitLambdaSpectrum.C:252
 FitLambdaSpectrum.C:253
 FitLambdaSpectrum.C:254
 FitLambdaSpectrum.C:255
 FitLambdaSpectrum.C:256
 FitLambdaSpectrum.C:257
 FitLambdaSpectrum.C:258
 FitLambdaSpectrum.C:259
 FitLambdaSpectrum.C:260
 FitLambdaSpectrum.C:261
 FitLambdaSpectrum.C:262
 FitLambdaSpectrum.C:263
 FitLambdaSpectrum.C:264
 FitLambdaSpectrum.C:265
 FitLambdaSpectrum.C:266
 FitLambdaSpectrum.C:267
 FitLambdaSpectrum.C:268
 FitLambdaSpectrum.C:269
 FitLambdaSpectrum.C:270
 FitLambdaSpectrum.C:271
 FitLambdaSpectrum.C:272
 FitLambdaSpectrum.C:273
 FitLambdaSpectrum.C:274
 FitLambdaSpectrum.C:275
 FitLambdaSpectrum.C:276
 FitLambdaSpectrum.C:277
 FitLambdaSpectrum.C:278
 FitLambdaSpectrum.C:279
 FitLambdaSpectrum.C:280
 FitLambdaSpectrum.C:281
 FitLambdaSpectrum.C:282
 FitLambdaSpectrum.C:283
 FitLambdaSpectrum.C:284
 FitLambdaSpectrum.C:285
 FitLambdaSpectrum.C:286
 FitLambdaSpectrum.C:287
 FitLambdaSpectrum.C:288
 FitLambdaSpectrum.C:289
 FitLambdaSpectrum.C:290
 FitLambdaSpectrum.C:291
 FitLambdaSpectrum.C:292
 FitLambdaSpectrum.C:293
 FitLambdaSpectrum.C:294
 FitLambdaSpectrum.C:295
 FitLambdaSpectrum.C:296
 FitLambdaSpectrum.C:297
 FitLambdaSpectrum.C:298
 FitLambdaSpectrum.C:299
 FitLambdaSpectrum.C:300
 FitLambdaSpectrum.C:301
 FitLambdaSpectrum.C:302
 FitLambdaSpectrum.C:303
 FitLambdaSpectrum.C:304
 FitLambdaSpectrum.C:305
 FitLambdaSpectrum.C:306
 FitLambdaSpectrum.C:307
 FitLambdaSpectrum.C:308
 FitLambdaSpectrum.C:309
 FitLambdaSpectrum.C:310
 FitLambdaSpectrum.C:311
 FitLambdaSpectrum.C:312
 FitLambdaSpectrum.C:313
 FitLambdaSpectrum.C:314
 FitLambdaSpectrum.C:315
 FitLambdaSpectrum.C:316
 FitLambdaSpectrum.C:317
 FitLambdaSpectrum.C:318
 FitLambdaSpectrum.C:319
 FitLambdaSpectrum.C:320
 FitLambdaSpectrum.C:321
 FitLambdaSpectrum.C:322
 FitLambdaSpectrum.C:323
 FitLambdaSpectrum.C:324
 FitLambdaSpectrum.C:325
 FitLambdaSpectrum.C:326
 FitLambdaSpectrum.C:327
 FitLambdaSpectrum.C:328
 FitLambdaSpectrum.C:329
 FitLambdaSpectrum.C:330
 FitLambdaSpectrum.C:331
 FitLambdaSpectrum.C:332
 FitLambdaSpectrum.C:333
 FitLambdaSpectrum.C:334
 FitLambdaSpectrum.C:335
 FitLambdaSpectrum.C:336
 FitLambdaSpectrum.C:337
 FitLambdaSpectrum.C:338
 FitLambdaSpectrum.C:339
 FitLambdaSpectrum.C:340
 FitLambdaSpectrum.C:341
 FitLambdaSpectrum.C:342
 FitLambdaSpectrum.C:343
 FitLambdaSpectrum.C:344
 FitLambdaSpectrum.C:345
 FitLambdaSpectrum.C:346
 FitLambdaSpectrum.C:347
 FitLambdaSpectrum.C:348
 FitLambdaSpectrum.C:349
 FitLambdaSpectrum.C:350
 FitLambdaSpectrum.C:351
 FitLambdaSpectrum.C:352
 FitLambdaSpectrum.C:353
 FitLambdaSpectrum.C:354
 FitLambdaSpectrum.C:355
 FitLambdaSpectrum.C:356
 FitLambdaSpectrum.C:357
 FitLambdaSpectrum.C:358
 FitLambdaSpectrum.C:359
 FitLambdaSpectrum.C:360
 FitLambdaSpectrum.C:361
 FitLambdaSpectrum.C:362
 FitLambdaSpectrum.C:363
 FitLambdaSpectrum.C:364
 FitLambdaSpectrum.C:365
 FitLambdaSpectrum.C:366
 FitLambdaSpectrum.C:367
 FitLambdaSpectrum.C:368
 FitLambdaSpectrum.C:369
 FitLambdaSpectrum.C:370
 FitLambdaSpectrum.C:371
 FitLambdaSpectrum.C:372
 FitLambdaSpectrum.C:373
 FitLambdaSpectrum.C:374
 FitLambdaSpectrum.C:375
 FitLambdaSpectrum.C:376
 FitLambdaSpectrum.C:377
 FitLambdaSpectrum.C:378
 FitLambdaSpectrum.C:379
 FitLambdaSpectrum.C:380
 FitLambdaSpectrum.C:381
 FitLambdaSpectrum.C:382
 FitLambdaSpectrum.C:383
 FitLambdaSpectrum.C:384
 FitLambdaSpectrum.C:385
 FitLambdaSpectrum.C:386
 FitLambdaSpectrum.C:387
 FitLambdaSpectrum.C:388
 FitLambdaSpectrum.C:389
 FitLambdaSpectrum.C:390
 FitLambdaSpectrum.C:391
 FitLambdaSpectrum.C:392
 FitLambdaSpectrum.C:393
 FitLambdaSpectrum.C:394
 FitLambdaSpectrum.C:395
 FitLambdaSpectrum.C:396
 FitLambdaSpectrum.C:397
 FitLambdaSpectrum.C:398
 FitLambdaSpectrum.C:399
 FitLambdaSpectrum.C:400
 FitLambdaSpectrum.C:401
 FitLambdaSpectrum.C:402
 FitLambdaSpectrum.C:403
 FitLambdaSpectrum.C:404
 FitLambdaSpectrum.C:405
 FitLambdaSpectrum.C:406
 FitLambdaSpectrum.C:407
 FitLambdaSpectrum.C:408
 FitLambdaSpectrum.C:409
 FitLambdaSpectrum.C:410
 FitLambdaSpectrum.C:411
 FitLambdaSpectrum.C:412
 FitLambdaSpectrum.C:413
 FitLambdaSpectrum.C:414
 FitLambdaSpectrum.C:415
 FitLambdaSpectrum.C:416
 FitLambdaSpectrum.C:417
 FitLambdaSpectrum.C:418
 FitLambdaSpectrum.C:419
 FitLambdaSpectrum.C:420
 FitLambdaSpectrum.C:421
 FitLambdaSpectrum.C:422
 FitLambdaSpectrum.C:423
 FitLambdaSpectrum.C:424
 FitLambdaSpectrum.C:425
 FitLambdaSpectrum.C:426
 FitLambdaSpectrum.C:427
 FitLambdaSpectrum.C:428
 FitLambdaSpectrum.C:429
 FitLambdaSpectrum.C:430
 FitLambdaSpectrum.C:431
 FitLambdaSpectrum.C:432
 FitLambdaSpectrum.C:433
 FitLambdaSpectrum.C:434
 FitLambdaSpectrum.C:435
 FitLambdaSpectrum.C:436
 FitLambdaSpectrum.C:437
 FitLambdaSpectrum.C:438
 FitLambdaSpectrum.C:439
 FitLambdaSpectrum.C:440
 FitLambdaSpectrum.C:441
 FitLambdaSpectrum.C:442
 FitLambdaSpectrum.C:443
 FitLambdaSpectrum.C:444
 FitLambdaSpectrum.C:445
 FitLambdaSpectrum.C:446
 FitLambdaSpectrum.C:447
 FitLambdaSpectrum.C:448
 FitLambdaSpectrum.C:449
 FitLambdaSpectrum.C:450
 FitLambdaSpectrum.C:451
 FitLambdaSpectrum.C:452
 FitLambdaSpectrum.C:453
 FitLambdaSpectrum.C:454
 FitLambdaSpectrum.C:455
 FitLambdaSpectrum.C:456
 FitLambdaSpectrum.C:457
 FitLambdaSpectrum.C:458
 FitLambdaSpectrum.C:459
 FitLambdaSpectrum.C:460
 FitLambdaSpectrum.C:461
 FitLambdaSpectrum.C:462
 FitLambdaSpectrum.C:463
 FitLambdaSpectrum.C:464
 FitLambdaSpectrum.C:465
 FitLambdaSpectrum.C:466
 FitLambdaSpectrum.C:467
 FitLambdaSpectrum.C:468
 FitLambdaSpectrum.C:469
 FitLambdaSpectrum.C:470
 FitLambdaSpectrum.C:471
 FitLambdaSpectrum.C:472
 FitLambdaSpectrum.C:473
 FitLambdaSpectrum.C:474
 FitLambdaSpectrum.C:475
 FitLambdaSpectrum.C:476
 FitLambdaSpectrum.C:477
 FitLambdaSpectrum.C:478
 FitLambdaSpectrum.C:479
 FitLambdaSpectrum.C:480
 FitLambdaSpectrum.C:481
 FitLambdaSpectrum.C:482
 FitLambdaSpectrum.C:483
 FitLambdaSpectrum.C:484
 FitLambdaSpectrum.C:485
 FitLambdaSpectrum.C:486
 FitLambdaSpectrum.C:487
 FitLambdaSpectrum.C:488
 FitLambdaSpectrum.C:489
 FitLambdaSpectrum.C:490
 FitLambdaSpectrum.C:491
 FitLambdaSpectrum.C:492
 FitLambdaSpectrum.C:493
 FitLambdaSpectrum.C:494
 FitLambdaSpectrum.C:495
 FitLambdaSpectrum.C:496
 FitLambdaSpectrum.C:497
 FitLambdaSpectrum.C:498
 FitLambdaSpectrum.C:499
 FitLambdaSpectrum.C:500
 FitLambdaSpectrum.C:501
 FitLambdaSpectrum.C:502
 FitLambdaSpectrum.C:503
 FitLambdaSpectrum.C:504
 FitLambdaSpectrum.C:505
 FitLambdaSpectrum.C:506
 FitLambdaSpectrum.C:507
 FitLambdaSpectrum.C:508
 FitLambdaSpectrum.C:509
 FitLambdaSpectrum.C:510
 FitLambdaSpectrum.C:511
 FitLambdaSpectrum.C:512
 FitLambdaSpectrum.C:513
 FitLambdaSpectrum.C:514
 FitLambdaSpectrum.C:515
 FitLambdaSpectrum.C:516
 FitLambdaSpectrum.C:517
 FitLambdaSpectrum.C:518
 FitLambdaSpectrum.C:519
 FitLambdaSpectrum.C:520
 FitLambdaSpectrum.C:521
 FitLambdaSpectrum.C:522
 FitLambdaSpectrum.C:523
 FitLambdaSpectrum.C:524
 FitLambdaSpectrum.C:525
 FitLambdaSpectrum.C:526
 FitLambdaSpectrum.C:527
 FitLambdaSpectrum.C:528
 FitLambdaSpectrum.C:529
 FitLambdaSpectrum.C:530
 FitLambdaSpectrum.C:531
 FitLambdaSpectrum.C:532
 FitLambdaSpectrum.C:533
 FitLambdaSpectrum.C:534
 FitLambdaSpectrum.C:535
 FitLambdaSpectrum.C:536
 FitLambdaSpectrum.C:537
 FitLambdaSpectrum.C:538
 FitLambdaSpectrum.C:539
 FitLambdaSpectrum.C:540
 FitLambdaSpectrum.C:541
 FitLambdaSpectrum.C:542
 FitLambdaSpectrum.C:543
 FitLambdaSpectrum.C:544
 FitLambdaSpectrum.C:545
 FitLambdaSpectrum.C:546
 FitLambdaSpectrum.C:547
 FitLambdaSpectrum.C:548
 FitLambdaSpectrum.C:549