ROOT logo
#include "CommonDefs.C"

/**************************************************************/
Char_t *partChargeName[AliPID::kSPECIES][2] = {
  "", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"
};
 /**************************************************************/

FinalSpectra()
{

  doFinalSpectra(1., "TOF_rawSpectra.root", "TOF_matchingEfficiency.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra.root");
  doFinalSpectra(1., "TOF_rawSpectra.root", "TOF_matchingEfficiency.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra_centCorr.root", kFALSE);

  doFinalRatios("TOF_finalSpectra.root", "TOF_finalRatios.root");

  FinalSpectra_mismatchCorrected();
}

FinalSpectra_mismatchCorrected()
{
  doFinalSpectra(1., "TOF_rawSpectra_mismatchCorrected.root", "TOF_matchingEfficiency_mismatchCorrected.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra_mismatchCorrected.root");
  doFinalSpectra(1., "TOF_rawSpectra_mismatchCorrected.root", "TOF_matchingEfficiency_mismatchCorrected.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra_mismatchCorrected_centCorr.root", kFALSE);

  doFinalRatios("TOF_finalSpectra_mismatchCorrected.root", "TOF_finalRatios_mismatchCorrected.root");
}

doFinalSpectra(Double_t scaleFact = 1., const Char_t *rawfilename = "TOF_rawSpectra.root", const Char_t *matchfilename = "TOF_matchingEfficiency.root", const Char_t *trackfilename = "TOF_trackingEfficiency.root", const Char_t *primaryfilename = "TOF_primaryFraction.root", const Char_t *electronfilename = "TOF_electronCorrection.root", const Char_t *outputfilename = "TOF_finalSpectra.root", Bool_t useMB = kTRUE)
 {

   Int_t marker[2] = {20, 25};
   Int_t color[AliPID::kSPECIES] = {1, 1, 4, 8, 2};

   TFile *rawfile = TFile::Open(rawfilename);
   TFile *matchfile = TFile::Open(matchfilename);
   TFile *trackfile = TFile::Open(trackfilename);
   TFile *primaryfile = TFile::Open(primaryfilename);
   TFile *electronfile = TFile::Open(electronfilename);

   TFile *fileout = TFile::Open(outputfilename, "RECREATE");
   TH1D *hRaw, *hMatch, *hTrack, *hPrim, *hElectron;
   TH1D *hSpectrum[NcentralityBins+1][5][2];
   Char_t title[1024];
   for (Int_t icent = -1; icent < NcentralityBins; icent++)
     for (Int_t icharge = 0; icharge < kNCharges; icharge++)
       for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
	 if (icent == -1)
	   hRaw = (TH1D *)rawfile->Get(Form("hRaw_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	 else
	   hRaw = (TH1D *)rawfile->Get(Form("hRaw_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	 if (!hRaw) {
	   printf("cannot find %s in %s\n", Form("hRaw_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), rawfilename);
	   continue;
	 }
	 if (0)
	   hMatch = (TH1D *)matchfile->Get(Form("hMatchEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	 else
	   hMatch = (TH1D *)matchfile->Get(Form("hMatchEff_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	 if (!hMatch) {
	   printf("cannot find %s in %s\n", Form("hMatchEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), matchfilename);
	   continue;
	 }
	 if (0)
	   hTrack = (TH1D *)trackfile->Get(Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	 else
	   hTrack = (TH1D *)trackfile->Get(Form("hTrackingEff_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	 if (!hTrack) {
	   printf("cannot find %s in %s\n", Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), trackfilename);
	   continue;
	 }
	 if (useMB || icent == -1) {
	   hPrim = (TH1D *)primaryfile->Get(Form("hPrimaryFrac_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	   if (ipart != 3 && !hPrim) {
	     printf("cannot find %s in %s\n", Form("hPrimaryFrac_MB_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), primaryfilename);
	     continue;
	   }
	 }
	 else {
	   hPrim = (TH1D *)primaryfile->Get(Form("hPrimaryFrac_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	   if (ipart != 3 && !hPrim) {
	     printf("cannot find %s in %s\n", Form("hPrimaryFrac_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), primaryfilename);
	     continue;
	   }
	 }
	 hElectron = (TH1D *)electronfile->Get("hElectronCorr_average");
	 if (!hElectron) {
	   printf("cannot find hElectronCorr_average in %s\n", electronfilename);
	   continue;
	 }
	 hRaw->Divide(hMatch);
	 hRaw->Divide(hTrack);
	 if (hPrim) hRaw->Multiply(hPrim);
	 if (ipart == 2) hRaw->Multiply(hElectron);
	 if (icent == -1) 
	   sprintf(title, "%s (MB);p_{T} (GeV/c);#frac{d^{2}N}{dy dp_{T}} (c/GeV);", partChargeName[ipart][icharge]);
	 else
	   sprintf(title, "%s (%d-%d%%);p_{T} (GeV/c);#frac{d^{2}N}{dy dp_{T}} (c/GeV);", partChargeName[ipart][icharge], centralityBin[icent], centralityBin[icent + 1]);
	 if (icent == -1)
	   hRaw->SetName(Form("hFinal_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	 else
	   hRaw->SetName(Form("hFinal_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	 hRaw->SetTitle(title);
	 hRaw->SetMarkerStyle(marker[icharge]);
	 hRaw->SetMarkerColor(color[ipart]);
	 fileout->cd();
	 hRaw->Scale(scaleFact);
	 hRaw->Write();
	 if (icent == -1)
	   hSpectrum[NcentralityBins][ipart][icharge] = hRaw;
	 else
	   hSpectrum[icent][ipart][icharge] = hRaw;
       }

   TH1 *hRatioMB;
   for (Int_t icent = 0; icent < NcentralityBins; icent++)
     for (Int_t icharge = 0; icharge < kNCharges; icharge++)
       for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
	 hRatioMB = (TH1 *)hSpectrum[icent][ipart][icharge]->Clone(Form("hRatioMB_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
	 hRatioMB->Divide(hRatioMB, hSpectrum[NcentralityBins][ipart][icharge], 1., 1., "");
	 fileout->cd();
	 hRatioMB->Write();
       }
   
   fileout->Close();

 }


/**************************************************************/

doFinalRatios(const Char_t *filename = "TOF_finalSpectra.root", const Char_t *outputfilename = "TOF_finalRatios.root")
{

  //  printf("WARNING: skipping ratios\n");
  //  return;

  Int_t marker[2] = {20, 25};
  Int_t color[AliPID::kSPECIES] = {1, 1, 4, 8, 2};

  /* open data */
  TFile *filein = TFile::Open(filename);
  /* get spectra */
  TH1D *hSpectrum[NcentralityBins+1][AliPID::kSPECIES][kNCharges];
  for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
    for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
      for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
	if (icent == NcentralityBins)
	  hSpectrum[icent][ipart][icharge] = (TH1D *)filein->Get(Form("hFinal_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
	else
	  hSpectrum[icent][ipart][icharge] = (TH1D *)filein->Get(Form("hFinal_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
      }
    }
  }

  /* output */
  TFile *fileout = TFile::Open(outputfilename, "RECREATE");

  /* particle/anti-particle ratios */
  TH1D *hRatio;
  TH1D *hPosNegRatio[NcentralityBins+1][5];
  for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
    for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
      if (!hSpectrum[icent][ipart][kNegative] ||
	  !hSpectrum[icent][ipart][kPositive]) continue;
      hRatio = new TH1D(*hSpectrum[icent][ipart][kNegative]);
      hRatio->Divide(hSpectrum[icent][ipart][kPositive]);
      if (icent == NcentralityBins) {
	hRatio->SetName(Form("hRatio_MB_%s_negative_%s_positive", AliPID::ParticleName(ipart), AliPID::ParticleName(ipart)));
	hRatio->SetTitle(Form("%s/%s (MB);p_{T} (GeV/c);%s/%s;", partChargeName[ipart][kNegative], partChargeName[ipart][kPositive], partChargeName[ipart][kNegative], partChargeName[ipart][kPositive]));
      }
      else {
	hRatio->SetName(Form("hRatio_cent%d_%s_negative_%s_positive", icent, AliPID::ParticleName(ipart), AliPID::ParticleName(ipart)));
	hRatio->SetTitle(Form("%s/%s (%d-%d%%);p_{T} (GeV/c);%s/%s;", partChargeName[ipart][kNegative], partChargeName[ipart][kPositive], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[ipart][kNegative], partChargeName[ipart][kPositive]));
      }
      hRatio->SetMarkerStyle(20);
      hRatio->SetMarkerColor(color[ipart]);
      fileout->cd();
      hRatio->Write();
      hPosNegRatio[icent][ipart] = hRatio;
    }
  }
  
  TH1 *hRatioMB;
  for (Int_t icent = 0; icent < NcentralityBins; icent++)
    for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
      hRatioMB = (TH1 *)hPosNegRatio[icent][ipart]->Clone(Form("hDoubleRatioMB_cent%d_%s_negative_%s_positive", icent, AliPID::ParticleName(ipart), AliPID::ParticleName(ipart)));
      hRatioMB->Divide(hRatioMB, hPosNegRatio[NcentralityBins][ipart], 1., 1., "");
      fileout->cd();
      hRatioMB->Write();
    }
  
  /* kaon/pion ratios */
  TH1D *hSum1, *hSum2;
  TH1D *hKaToPi[NcentralityBins+1][3];
  for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
    for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
      if (!hSpectrum[icent][AliPID::kKaon][icharge] ||
	  !hSpectrum[icent][AliPID::kPion][icharge]) continue;
      hRatio = new TH1D(*hSpectrum[icent][AliPID::kKaon][icharge]);
      hRatio->Divide(hSpectrum[icent][AliPID::kPion][icharge]);
      if (icent == NcentralityBins) {
	hRatio->SetName(Form("hRatio_MB_kaon_%s_pion_%s", chargeName[icharge], chargeName[icharge]));
	hRatio->SetTitle(Form("%s/%s (MB);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge], partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge]));
      }
      else {
	hRatio->SetName(Form("hRatio_cent%d_kaon_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
	hRatio->SetTitle(Form("%s/%s (%d-%d%%);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge]));
      }
      hRatio->SetMarkerStyle(marker[icharge]);
      hRatio->SetMarkerColor(color[AliPID::kKaon]);
      fileout->cd();
      hRatio->Write();
      hKaToPi[icent][icharge] = hRatio;
    }
    if (!hSpectrum[icent][AliPID::kKaon][kPositive] ||
	!hSpectrum[icent][AliPID::kKaon][kNegative] ||
	!hSpectrum[icent][AliPID::kPion][kPositive] ||
	!hSpectrum[icent][AliPID::kPion][kNegative]) continue;
    hSum1 = new TH1D(*hSpectrum[icent][AliPID::kKaon][kPositive]);
    hSum1->Add(hSpectrum[icent][AliPID::kKaon][kNegative]);
    hSum2 = new TH1D(*hSpectrum[icent][AliPID::kPion][kPositive]);
    hSum2->Add(hSpectrum[icent][AliPID::kPion][kNegative]);
    hRatio = new TH1D(*hSum1);
    hRatio->Divide(hSum2);
    if (icent == NcentralityBins) {
      hRatio->SetName(Form("hRatio_MB_kaon_pion"));
      hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (MB);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
    }
    else {
      hRatio->SetName(Form("hRatio_cent%d_kaon_pion", icent));
      hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (%d-%d%%);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
    }
    hRatio->SetMarkerStyle(20);
    hRatio->SetMarkerColor(color[AliPID::kKaon]);
    fileout->cd();
    hRatio->Write();
    hKaToPi[icent][2] = hRatio;
  }

  for (Int_t icent = 0; icent < NcentralityBins; icent++) {
    for (Int_t icharge = 0; icharge < 2; icharge++) {
      hRatioMB = (TH1 *)hKaToPi[icent][icharge]->Clone(Form("hDoubleRatioMB_cent%d_kaon_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
      hRatioMB->Divide(hRatioMB, hKaToPi[NcentralityBins][icharge], 1., 1., "");
      fileout->cd();
      hRatioMB->Write();
    }
    hRatioMB = (TH1 *)hKaToPi[icent][2]->Clone(Form("hDoubleRatioMB_cent%d_kaon_pion", icent));
    hRatioMB->Divide(hRatioMB, hKaToPi[NcentralityBins][2], 1., 1., "");
    fileout->cd();
    hRatioMB->Write();
  }

  
  /* proton/pion ratios */
  TH1D *hSum1, *hSum2;
  TH1D *hPrToPi[NcentralityBins+1][3];
  for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
    for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
      if (!hSpectrum[icent][AliPID::kProton][icharge] ||
	  !hSpectrum[icent][AliPID::kPion][icharge]) continue;
      hRatio = new TH1D(*hSpectrum[icent][AliPID::kProton][icharge]);
      hRatio->Divide(hSpectrum[icent][AliPID::kPion][icharge]);
      if (icent == NcentralityBins) {
	hRatio->SetName(Form("hRatio_MB_proton_%s_pion_%s", chargeName[icharge], chargeName[icharge]));
	hRatio->SetTitle(Form("%s/%s (MB);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge], partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge]));
      }
      else {
	hRatio->SetName(Form("hRatio_cent%d_proton_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
	hRatio->SetTitle(Form("%s/%s (%d-%d%%);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge]));
      }
      hRatio->SetMarkerStyle(marker[icharge]);
      hRatio->SetMarkerColor(color[AliPID::kProton]);
      fileout->cd();
      hRatio->Write();
      hPrToPi[icent][icharge] = hRatio;
    }
    if (!hSpectrum[icent][AliPID::kProton][kPositive] ||
	!hSpectrum[icent][AliPID::kProton][kNegative] ||
	!hSpectrum[icent][AliPID::kPion][kPositive] ||
	!hSpectrum[icent][AliPID::kPion][kNegative]) continue;
    hSum1 = new TH1D(*hSpectrum[icent][AliPID::kProton][kPositive]);
    hSum1->Add(hSpectrum[icent][AliPID::kProton][kNegative]);
    hSum2 = new TH1D(*hSpectrum[icent][AliPID::kPion][kPositive]);
    hSum2->Add(hSpectrum[icent][AliPID::kPion][kNegative]);
    hRatio = new TH1D(*hSum1);
    hRatio->Divide(hSum2);
    if (icent == NcentralityBins) {
      hRatio->SetName(Form("hRatio_MB_proton_pion"));
      hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (MB);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
    }
    else {
      hRatio->SetName(Form("hRatio_cent%d_proton_pion", icent));
      hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (%d-%d%%);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
    }
    hRatio->SetMarkerStyle(20);
    hRatio->SetMarkerColor(color[AliPID::kProton]);
    fileout->cd();
    hRatio->Write();
    hPrToPi[icent][2] = hRatio;
  }
  
  for (Int_t icent = 0; icent < NcentralityBins; icent++) {
    for (Int_t icharge = 0; icharge < 2; icharge++) {
      hRatioMB = (TH1 *)hPrToPi[icent][icharge]->Clone(Form("hDoubleRatioMB_cent%d_proton_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
      hRatioMB->Divide(hRatioMB, hPrToPi[NcentralityBins][icharge], 1., 1., "");
      fileout->cd();
      hRatioMB->Write();
    }
    hRatioMB = (TH1 *)hPrToPi[icent][2]->Clone(Form("hDoubleRatioMB_cent%d_proton_pion", icent));
    hRatioMB->Divide(hRatioMB, hPrToPi[NcentralityBins][2], 1., 1., "");
    fileout->cd();
    hRatioMB->Write();
  }


  fileout->Close();
}

 FinalSpectra.C:1
 FinalSpectra.C:2
 FinalSpectra.C:3
 FinalSpectra.C:4
 FinalSpectra.C:5
 FinalSpectra.C:6
 FinalSpectra.C:7
 FinalSpectra.C:8
 FinalSpectra.C:9
 FinalSpectra.C:10
 FinalSpectra.C:11
 FinalSpectra.C:12
 FinalSpectra.C:13
 FinalSpectra.C:14
 FinalSpectra.C:15
 FinalSpectra.C:16
 FinalSpectra.C:17
 FinalSpectra.C:18
 FinalSpectra.C:19
 FinalSpectra.C:20
 FinalSpectra.C:21
 FinalSpectra.C:22
 FinalSpectra.C:23
 FinalSpectra.C:24
 FinalSpectra.C:25
 FinalSpectra.C:26
 FinalSpectra.C:27
 FinalSpectra.C:28
 FinalSpectra.C:29
 FinalSpectra.C:30
 FinalSpectra.C:31
 FinalSpectra.C:32
 FinalSpectra.C:33
 FinalSpectra.C:34
 FinalSpectra.C:35
 FinalSpectra.C:36
 FinalSpectra.C:37
 FinalSpectra.C:38
 FinalSpectra.C:39
 FinalSpectra.C:40
 FinalSpectra.C:41
 FinalSpectra.C:42
 FinalSpectra.C:43
 FinalSpectra.C:44
 FinalSpectra.C:45
 FinalSpectra.C:46
 FinalSpectra.C:47
 FinalSpectra.C:48
 FinalSpectra.C:49
 FinalSpectra.C:50
 FinalSpectra.C:51
 FinalSpectra.C:52
 FinalSpectra.C:53
 FinalSpectra.C:54
 FinalSpectra.C:55
 FinalSpectra.C:56
 FinalSpectra.C:57
 FinalSpectra.C:58
 FinalSpectra.C:59
 FinalSpectra.C:60
 FinalSpectra.C:61
 FinalSpectra.C:62
 FinalSpectra.C:63
 FinalSpectra.C:64
 FinalSpectra.C:65
 FinalSpectra.C:66
 FinalSpectra.C:67
 FinalSpectra.C:68
 FinalSpectra.C:69
 FinalSpectra.C:70
 FinalSpectra.C:71
 FinalSpectra.C:72
 FinalSpectra.C:73
 FinalSpectra.C:74
 FinalSpectra.C:75
 FinalSpectra.C:76
 FinalSpectra.C:77
 FinalSpectra.C:78
 FinalSpectra.C:79
 FinalSpectra.C:80
 FinalSpectra.C:81
 FinalSpectra.C:82
 FinalSpectra.C:83
 FinalSpectra.C:84
 FinalSpectra.C:85
 FinalSpectra.C:86
 FinalSpectra.C:87
 FinalSpectra.C:88
 FinalSpectra.C:89
 FinalSpectra.C:90
 FinalSpectra.C:91
 FinalSpectra.C:92
 FinalSpectra.C:93
 FinalSpectra.C:94
 FinalSpectra.C:95
 FinalSpectra.C:96
 FinalSpectra.C:97
 FinalSpectra.C:98
 FinalSpectra.C:99
 FinalSpectra.C:100
 FinalSpectra.C:101
 FinalSpectra.C:102
 FinalSpectra.C:103
 FinalSpectra.C:104
 FinalSpectra.C:105
 FinalSpectra.C:106
 FinalSpectra.C:107
 FinalSpectra.C:108
 FinalSpectra.C:109
 FinalSpectra.C:110
 FinalSpectra.C:111
 FinalSpectra.C:112
 FinalSpectra.C:113
 FinalSpectra.C:114
 FinalSpectra.C:115
 FinalSpectra.C:116
 FinalSpectra.C:117
 FinalSpectra.C:118
 FinalSpectra.C:119
 FinalSpectra.C:120
 FinalSpectra.C:121
 FinalSpectra.C:122
 FinalSpectra.C:123
 FinalSpectra.C:124
 FinalSpectra.C:125
 FinalSpectra.C:126
 FinalSpectra.C:127
 FinalSpectra.C:128
 FinalSpectra.C:129
 FinalSpectra.C:130
 FinalSpectra.C:131
 FinalSpectra.C:132
 FinalSpectra.C:133
 FinalSpectra.C:134
 FinalSpectra.C:135
 FinalSpectra.C:136
 FinalSpectra.C:137
 FinalSpectra.C:138
 FinalSpectra.C:139
 FinalSpectra.C:140
 FinalSpectra.C:141
 FinalSpectra.C:142
 FinalSpectra.C:143
 FinalSpectra.C:144
 FinalSpectra.C:145
 FinalSpectra.C:146
 FinalSpectra.C:147
 FinalSpectra.C:148
 FinalSpectra.C:149
 FinalSpectra.C:150
 FinalSpectra.C:151
 FinalSpectra.C:152
 FinalSpectra.C:153
 FinalSpectra.C:154
 FinalSpectra.C:155
 FinalSpectra.C:156
 FinalSpectra.C:157
 FinalSpectra.C:158
 FinalSpectra.C:159
 FinalSpectra.C:160
 FinalSpectra.C:161
 FinalSpectra.C:162
 FinalSpectra.C:163
 FinalSpectra.C:164
 FinalSpectra.C:165
 FinalSpectra.C:166
 FinalSpectra.C:167
 FinalSpectra.C:168
 FinalSpectra.C:169
 FinalSpectra.C:170
 FinalSpectra.C:171
 FinalSpectra.C:172
 FinalSpectra.C:173
 FinalSpectra.C:174
 FinalSpectra.C:175
 FinalSpectra.C:176
 FinalSpectra.C:177
 FinalSpectra.C:178
 FinalSpectra.C:179
 FinalSpectra.C:180
 FinalSpectra.C:181
 FinalSpectra.C:182
 FinalSpectra.C:183
 FinalSpectra.C:184
 FinalSpectra.C:185
 FinalSpectra.C:186
 FinalSpectra.C:187
 FinalSpectra.C:188
 FinalSpectra.C:189
 FinalSpectra.C:190
 FinalSpectra.C:191
 FinalSpectra.C:192
 FinalSpectra.C:193
 FinalSpectra.C:194
 FinalSpectra.C:195
 FinalSpectra.C:196
 FinalSpectra.C:197
 FinalSpectra.C:198
 FinalSpectra.C:199
 FinalSpectra.C:200
 FinalSpectra.C:201
 FinalSpectra.C:202
 FinalSpectra.C:203
 FinalSpectra.C:204
 FinalSpectra.C:205
 FinalSpectra.C:206
 FinalSpectra.C:207
 FinalSpectra.C:208
 FinalSpectra.C:209
 FinalSpectra.C:210
 FinalSpectra.C:211
 FinalSpectra.C:212
 FinalSpectra.C:213
 FinalSpectra.C:214
 FinalSpectra.C:215
 FinalSpectra.C:216
 FinalSpectra.C:217
 FinalSpectra.C:218
 FinalSpectra.C:219
 FinalSpectra.C:220
 FinalSpectra.C:221
 FinalSpectra.C:222
 FinalSpectra.C:223
 FinalSpectra.C:224
 FinalSpectra.C:225
 FinalSpectra.C:226
 FinalSpectra.C:227
 FinalSpectra.C:228
 FinalSpectra.C:229
 FinalSpectra.C:230
 FinalSpectra.C:231
 FinalSpectra.C:232
 FinalSpectra.C:233
 FinalSpectra.C:234
 FinalSpectra.C:235
 FinalSpectra.C:236
 FinalSpectra.C:237
 FinalSpectra.C:238
 FinalSpectra.C:239
 FinalSpectra.C:240
 FinalSpectra.C:241
 FinalSpectra.C:242
 FinalSpectra.C:243
 FinalSpectra.C:244
 FinalSpectra.C:245
 FinalSpectra.C:246
 FinalSpectra.C:247
 FinalSpectra.C:248
 FinalSpectra.C:249
 FinalSpectra.C:250
 FinalSpectra.C:251
 FinalSpectra.C:252
 FinalSpectra.C:253
 FinalSpectra.C:254
 FinalSpectra.C:255
 FinalSpectra.C:256
 FinalSpectra.C:257
 FinalSpectra.C:258
 FinalSpectra.C:259
 FinalSpectra.C:260
 FinalSpectra.C:261
 FinalSpectra.C:262
 FinalSpectra.C:263
 FinalSpectra.C:264
 FinalSpectra.C:265
 FinalSpectra.C:266
 FinalSpectra.C:267
 FinalSpectra.C:268
 FinalSpectra.C:269
 FinalSpectra.C:270
 FinalSpectra.C:271
 FinalSpectra.C:272
 FinalSpectra.C:273
 FinalSpectra.C:274
 FinalSpectra.C:275
 FinalSpectra.C:276
 FinalSpectra.C:277
 FinalSpectra.C:278
 FinalSpectra.C:279
 FinalSpectra.C:280
 FinalSpectra.C:281
 FinalSpectra.C:282
 FinalSpectra.C:283
 FinalSpectra.C:284
 FinalSpectra.C:285
 FinalSpectra.C:286
 FinalSpectra.C:287
 FinalSpectra.C:288
 FinalSpectra.C:289
 FinalSpectra.C:290
 FinalSpectra.C:291
 FinalSpectra.C:292
 FinalSpectra.C:293
 FinalSpectra.C:294
 FinalSpectra.C:295
 FinalSpectra.C:296
 FinalSpectra.C:297
 FinalSpectra.C:298
 FinalSpectra.C:299
 FinalSpectra.C:300
 FinalSpectra.C:301
 FinalSpectra.C:302
 FinalSpectra.C:303
 FinalSpectra.C:304
 FinalSpectra.C:305
 FinalSpectra.C:306
 FinalSpectra.C:307
 FinalSpectra.C:308
 FinalSpectra.C:309
 FinalSpectra.C:310
 FinalSpectra.C:311
 FinalSpectra.C:312
 FinalSpectra.C:313
 FinalSpectra.C:314
 FinalSpectra.C:315
 FinalSpectra.C:316
 FinalSpectra.C:317
 FinalSpectra.C:318
 FinalSpectra.C:319