ROOT logo
//
// script with functions to use AliJetSpectrumUnfolding class
//


void loadlibs(){
  // load all the needed libs to run wit root only

  gSystem->Load("libTree");
  gSystem->Load("libPhysics");
  gSystem->Load("libHist");
  gSystem->Load("libVMC");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libAOD");
  gSystem->Load("libESD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libJETAN");
  gSystem->Load("libPWG4JetTasks");


}



void draw(const char* fileName = "unfolded_pwg4spec.root", const char* folder = "unfolding", Bool_t proj = kTRUE)
{

  loadlibs();

  AliJetSpectrumUnfolding* jetSpec = new AliJetSpectrumUnfolding(folder, folder);

  TFile::Open(fileName);
  jetSpec->LoadHistograms();
  
  
  if (proj)
  {
    canvas1 = new TCanvas("Response Map Projection", "Response Map Projection", 500, 500);
    canvas1->Divide(2);
  
    Int_t style = 1;
    const Int_t NRGBs = 5;
    const Int_t NCont = 500;

    Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
    Double_t red[NRGBs]   = { 0.00, 0.00, 0.87, 1.00, 0.51 };
    Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
    Double_t blue[NRGBs]  = { 0.51, 1.00, 0.12, 0.00, 0.00 };
    TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
    gStyle->SetNumberContours(NCont);
    gStyle->SetPalette(style);

    canvas1->cd(1);
    gPad->SetLogz();
    h2 = (jetSpec->GetCorrelation())->Projection(2,3);
    h2->SetXTitle("z^{lp}_{gen}");
    h2->SetYTitle("z^{lp}_{rec}");    
    h2->DrawCopy("colz");
  
    canvas1->cd(2);
    gPad->SetLogz();  
    h3 = (jetSpec->GetCorrelation())->Projection(0,1);
    h3->SetXTitle("E^{jet}_{gen} [GeV]");
    h3->SetYTitle("E^{jet}_{rec} [GeV]");    
    h3->DrawCopy("colz");
  }
  jetSpec->DrawComparison("Draw_unfolded_pwg4spec", jetSpec->GetGenSpectrum());

  return;
}

//________________________________________________________________________________________________________________
void unfold(const char* fileNameGen = "gen_pwg4spec.root", const char* folder = "unfolding", const char* fileNameRec = "rec_pwg4spec.root", const char* fileNameUnf = "unfolded_pwg4spec.root")
{
  // function to load jet spectra from the output file of the task AliAnalysisTaskJetSpectrum
  // to do the unfolding

  loadlibs();

  AliJetSpectrumUnfolding* jetSpec = new AliJetSpectrumUnfolding(folder, folder);

  TFile::Open(fileNameGen);
  jetSpec->LoadHistograms();

  TFile::Open(fileNameRec);
  TH2F* hist = (TH2F*) gFile->Get("unfolding/fRecSpectrum");
  jetSpec->SetRecSpectrum(hist);
  hist = (TH2F*) gFile->Get("unfolding/fGenSpectrum");
  if(hist->GetEntries()>0)jetSpec->SetGenSpectrum(hist);

  jetSpec->ApplyBayesianMethod(0.3, 20, 0, 0);
  // last parameter = calculateErrors  <- this method to calculate the errors takes a lot of time
   
  TFile* file = TFile::Open(fileNameUnf,"RECREATE");
  jetSpec->SaveHistograms();
  file->Close();
}

//___________________________________________________________________________
void buildSpectra(Int_t caseNo, const char* inFile, const char* outFile)
{
  // function to test 2D Bayesian unfolding with other spectra
  // build from a function

  loadlibs();



  AliJetSpectrumUnfolding* jetSpec = new AliJetSpectrumUnfolding("unfolding", "unfolding");

  TFile::Open(inFile);
  jetSpec->LoadHistograms("unfolding");
  
  TCanvas *c1 = new TCanvas();TH2 *h2 = (jetSpec->GetCorrelation())->Projection(0,3);
  h2->DrawCopy("colz");
  c1->Update();
  if(getchar()=='q')return;
  

  switch (caseNo)
  {
    case 1: func = new TF2("func", "501-x-y"); break;
    case 2: func = new TF2("func", "1000 * 1/(y+x+1)"); break;
    case 3: func = new TF2("func", "1./(y*pow(x,5.7))"); break;
    case 4: func = new TF2("func", "exp(-0.1*x - 0.1*y)"); break;
    case 5: func = new TF2("func", "x*x + (y**3)/100."); break;
    case 6: func = new TF2("func", "1000*y*exp(-0.1*x)"); break;
    case 7: func = new TF2("func", "exp(-((x-100.)/(0.3*x))**2 - ((y-0.6)/(0.8*y))**2)"); break;
    default: return;
  }

  //new TCanvas; func->Draw();

  jetSpec->SetGenRecFromFunc(func);
              
  TFile* file = TFile::Open(outFile,"RECREATE");
  jetSpec->SaveHistograms();
  
  h2 = (jetSpec->GetCorrelation())->Projection(0,3);
  h2->DrawCopy("colz");
  c1->Update();
  file->Close();

  //new TCanvas; jetSpec->GetRecSpectrum()->DrawCopy("colz");
  //new TCanvas; jetSpec->GetGenSpectrum()->DrawCopy("colz");
}

//_____________________________________________________________________________________________
void buildResponseMap(const char* fileName = "responseMap.root")
{
  // function to build a Response Map with a gaussian distribution
  loadlibs();

  AliJetSpectrumUnfolding* jetSpec = new AliJetSpectrumUnfolding("unfolding", "unfolding");

  TF2* func = new TF2("func", "exp(-((x-[0])/[1])**2 - ((y-[2])/[3])**2)");
  
  bool bPerfect = false;
  
  Double_t var[4];
  Float_t sigmax, sigmay;
  for (Int_t tx=1; tx<=jetSpec->GetCorrelation()->GetAxis(0)->GetNbins(); tx++)
    for (Int_t ty=1; ty<=jetSpec->GetCorrelation()->GetAxis(2)->GetNbins(); ty++)
    {
      var[0] = jetSpec->GetCorrelation()->GetAxis(0)->GetBinCenter(tx);
      var[2] = jetSpec->GetCorrelation()->GetAxis(2)->GetBinCenter(ty);
      sigmax = 0.2*var[0];
      sigmay = 0.2*var[2];
      func->SetParameters(var[0],sigmax,var[2],sigmay);
      for (Int_t mx=1; mx<=jetSpec->GetCorrelation()->GetAxis(1)->GetNbins(); mx++)
        for (Int_t my=1; my<=jetSpec->GetCorrelation()->GetAxis(3)->GetNbins(); my++)
        {
          var[1] = jetSpec->GetCorrelation()->GetAxis(1)->GetBinCenter(mx);
	  var[3] = jetSpec->GetCorrelation()->GetAxis(3)->GetBinCenter(my);


	  if(bPerfect){
	    if (var[1]==var[0] && var[3]==var[2])
	      jetSpec->GetCorrelation()->Fill(var,1);
	  }
	  else {
	    // cut at  sigma
	    if (TMath::Abs(var[1]-var[0]) < sigmax || TMath::Abs(var[3]-var[2]) < sigmay)
	      jetSpec->GetCorrelation()->Fill(var,func->Eval(var[1],var[3]));
	  }
        }
    }


  TFile* file = TFile::Open(fileName,"RECREATE");
  jetSpec->SaveHistograms();
  file->Close();
}

//_____________________________________________________________________________
void StatisticalUncertainties(const char* fileNameGen = "gen_pwg4spec.root", const char* folder = "unfolding", const char* fileNameRec = "rec_pwg4spec.root", const char* fileNameOut = "Uncertainties2DBayesUnf.root")
{
  // This function gives the statistical uncertainties due to the 2D Bayesian Unfolding

  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libJETAN");
  gSystem->Load("libPWG4JetTasks");

  AliJetSpectrumUnfolding* jetSpec = new AliJetSpectrumUnfolding(folder, folder);

  TFile::Open(fileNameRec);
  jetSpec->LoadHistograms();

  TFile::Open(fileNameGen);
  TH2F* hist = (TH2F*) gFile->Get("unfolding/fGenSpectrum");
  jetSpec->SetGenSpectrum(hist);
    
  // create sigma histogram
  TH2F* sigma = (TH2F*)(jetSpec->GetGenSpectrum())->Clone("sigma");
  sigma->Reset();
    
  THnSparseF* hcorr = (THnSparseF*)(jetSpec->GetCorrelation())->Clone();
  TH2F*       htrue = (TH2F*)(jetSpec->GetGenSpectrum())->Clone();  
  TH2F*       hmeas = (TH2F*)(jetSpec->GetRecSpectrum())->Clone();    
  TH2F*       hunfo = (TH2F*)(jetSpec->GetUnfSpectrum())->Clone();      
  
  Int_t nIterations = 1000;
  Float_t binContent;
  for(Int_t i=0; i<nIterations; i++)
  {
    printf("iteration = %d\n", i);
    // reset histograms
    jetSpec->GetRecSpectrum()->Reset();
    jetSpec->GetGenSpectrum()->Reset();
    jetSpec->GetCorrelation()->Reset();
    jetSpec->GetUnfSpectrum()->Reset();
  
    THnSparseF* tmpcorr = (THnSparseF*)hcorr->Clone("tmpcorr"); 
    TH2F*       tmptrue = (TH2F*)htrue->Clone("tmptrue");  
    
    jetSpec->SetGenSpectrum(tmptrue);
    jetSpec->SetCorrelation(tmpcorr);
  
    // randomize reconstructed distribution
    for (Int_t me=1; me<=hmeas->GetNbinsX(); me++)
      for (Int_t mz=1; mz<=hmeas->GetNbinsY(); mz++)
      {
        binContent = hmeas->GetBinContent(me,mz);
        if (binContent>0)
        {
          TF1* poisson = new TF1("poisson", "TMath::Poisson(x,[0])",binContent*0.25, binContent*1.25);
          poisson->SetParameters(binContent,0.);
          binContent = poisson->GetRandom();
          delete poisson;
        }  
        jetSpec->GetRecSpectrum()->SetBinContent(me,mz, binContent);
      } 
        
    // unfold
    jetSpec->ApplyBayesianMethod(0.2, 20, 0, 0);
    
    // calculate sigma^2
    for (Int_t te=1; te<=sigma->GetNbinsX(); te++)
      for (Int_t tz=1; tz<=sigma->GetNbinsY(); tz++)
      {
        if (htrue->GetBinContent(te,tz)!=0)
        {
          binContent = (jetSpec->GetUnfSpectrum()->GetBinContent(te,tz) -
                        htrue->GetBinContent(te,tz))/htrue->GetBinContent(te,tz);
          binContent *= binContent;
          sigma->SetBinContent(te,tz, binContent + sigma->GetBinContent(te,tz));
        }  
      } 
  }
 
  // calculate sigma   
  for (Int_t te=1; te<=sigma->GetNbinsX(); te++)
    for (Int_t tz=1; tz<=sigma->GetNbinsY(); tz++)
    {
      binContent = sigma->GetBinContent(te,tz);
      binContent = TMath::Sqrt(binContent/(Float_t)nIterations);
      sigma->SetBinContent(te,tz, binContent);
    } 
          
  const Int_t NRGBs = 5;
  const Int_t NCont = 500;

  Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
  Double_t red[NRGBs]   = { 0.00, 0.00, 0.87, 1.00, 0.51 };
  Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
  Double_t blue[NRGBs]  = { 0.51, 1.00, 0.12, 0.00, 0.00 };
  TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
  gStyle->SetNumberContours(NCont);   
  gStyle->SetPalette(1);  

  new TCanvas();
  gPad->SetLogz();
  sigma->SetTitle("#sigma((U_{R} - U)/U)");
  sigma->SetXTitle("E^{jet} [GeV]");
  sigma->SetYTitle("z^{lp}");  
  sigma->DrawCopy();
  
  TFile* file = TFile::Open(fileNameOut,"RECREATE");
  sigma->Write();
  file->Close();   
}

//_______________________________________________________________________________________________________________
void FillSpecFromFiles(const char* fileNameReal = "histos_pwg4spec.root",const char* fileNameSim = "histos_pwg4spec.root")
{
  // This functions avoids problems when the number of bins or the bin limits
  // in the histograms of the AliJetSpectrumUnfolding and AliAnalysisTaskJetSpectrum classes
  // are different.

  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libJETAN");
  gSystem->Load("libPWG4JetTasks");

  file = new TFile(fileNameSim,"read");
  tlist = dynamic_cast<TList*> (file->Get("pwg4spec"));

  THnSparseF *fhCorrelation  = 0;
  for(int ic = 0;ic<3;++ic){
    THnSparseF *hTmp = (THnSparseF*)(tlist->FindObject(Form("fhnCorrelation_%d",ic)));    
    if(fhCorrelation==0)fhCorrelation =  (THnSparseF*)hTmp->Clone("fhnCorrelation");
    else fhCorrelation->Add(hTmp);
  }
  TH2F *fhEGenZGen = (TH2F*)(tlist->FindObject("fh2EGenZGen"));

  AliJetSpectrumUnfolding *jetSpec = new AliJetSpectrumUnfolding("unfolding","unfolding");

  // generated jets (true distribution)
  for (Int_t te=1; te<=fhEGenZGen->GetNbinsX(); te++)
    for (Int_t tz=1; tz<=fhEGenZGen->GetNbinsY(); tz++)
    {
       Float_t ej = fhEGenZGen->GetXaxis()->GetBinCenter(te);
       Float_t  z = fhEGenZGen->GetYaxis()->GetBinCenter(tz);
       Int_t bine = jetSpec->GetGenSpectrum()->GetXaxis()->FindBin(ej);
       Int_t binz = jetSpec->GetGenSpectrum()->GetYaxis()->FindBin(z);
       Float_t cont = jetSpec->GetGenSpectrum()->GetBinContent(bine,binz);
       Float_t err  = jetSpec->GetGenSpectrum()->GetBinError(bine,binz);
       // merging of bins happens here!
       jetSpec->GetGenSpectrum()->SetBinContent(bine, binz, cont + fhEGenZGen->GetBinContent(te, tz));
       jetSpec->GetGenSpectrum()->SetBinError(bine, binz, err + fhEGenZGen->GetBinError(te, tz));
    }


  Printf("Bins %.0E",jetSpec->GetCorrelation()->GetNbins());
  for (Int_t idx=1; idx<=fhCorrelation->GetNbins(); idx++)
  {
    //printf("idx: %d\n",idx);
    Double_t var[4];
    Int_t bin[4];
    Float_t BinContent = fhCorrelation->GetBinContent(idx, bin);
    var[0] = fhCorrelation->GetAxis(0)->GetBinCenter(bin[0]);
    var[1] = fhCorrelation->GetAxis(1)->GetBinCenter(bin[1]);
    var[2] = fhCorrelation->GetAxis(2)->GetBinCenter(bin[2]);
    var[3] = fhCorrelation->GetAxis(3)->GetBinCenter(bin[3]);
    bin[0] = jetSpec->GetCorrelation()->GetAxis(0)->FindBin(var[0]);
    bin[1] = jetSpec->GetCorrelation()->GetAxis(1)->FindBin(var[1]);    
    bin[2] = jetSpec->GetCorrelation()->GetAxis(2)->FindBin(var[2]);
    bin[3] = jetSpec->GetCorrelation()->GetAxis(3)->FindBin(var[3]);        
    Float_t cont = jetSpec->GetCorrelation()->GetBinContent(bin);
    Float_t err  = jetSpec->GetCorrelation()->GetBinError(bin);
    // merging of bins happens here!
    jetSpec->GetCorrelation()->SetBinContent(bin, cont + fhCorrelation->GetBinContent(idx));
    jetSpec->GetCorrelation()->SetBinError(bin, err + fhCorrelation->GetBinError(idx));
  }
  // need number of entries for correct drawing
  jetSpec->GetCorrelation()->SetEntries(fhCorrelation->GetEntries());


  file = TFile::Open("gen_pwg4spec.root", "RECREATE");
  jetSpec->SaveHistograms();
  Printf("Bins %.0E",jetSpec->GetCorrelation()->GetNbins());
  file->Close();
  jetSpec->GetGenSpectrum()->Reset();
  printf("true distribution has been set\n");

  // reconstructed jets (measured distribution)


  // Response function
  jetSpec->GetCorrelation()->Reset();
  jetSpec->GetCorrelation()->Sumw2();
  jetSpec->GetGenSpectrum()->Reset();
  jetSpec->GetRecSpectrum()->Reset();


  file = new TFile(fileNameReal,"read");
  tlist = dynamic_cast<TList*> (file->Get("pwg4spec"));

  
  TH2F *fhERecZRec = (TH2F*)(tlist->FindObject("fh2ERecZRec"));  

  for (Int_t me=1; me<=fhERecZRec->GetNbinsX(); me++)
    for (Int_t mz=1; mz<=fhERecZRec->GetNbinsY(); mz++)
    {
       Float_t erec = fhERecZRec->GetXaxis()->GetBinCenter(me);
       Float_t   zm = fhERecZRec->GetYaxis()->GetBinCenter(mz);
       Int_t bine   = jetSpec->GetRecSpectrum()->GetXaxis()->FindBin(erec);
       Int_t binz   = jetSpec->GetRecSpectrum()->GetYaxis()->FindBin(zm);
       Float_t cont = jetSpec->GetRecSpectrum()->GetBinContent(bine, binz);
       Float_t err  = jetSpec->GetRecSpectrum()->GetBinError(bine, binz);
       jetSpec->GetRecSpectrum()->SetBinContent(bine, binz, cont + fhERecZRec->GetBinContent(me, mz));
       jetSpec->GetRecSpectrum()->SetBinError(bine, binz, err + fhERecZRec->GetBinError(me, mz));
    }


  // for control again, but now from the rec file
  // generated jets (true distribution)
  TH2F *fhEGenZGen = (TH2F*)(tlist->FindObject("fh2EGenZGen"));  
  for (Int_t te=1; te<=fhEGenZGen->GetNbinsX(); te++)
    for (Int_t tz=1; tz<=fhEGenZGen->GetNbinsY(); tz++)
    {
       Float_t ej = fhEGenZGen->GetXaxis()->GetBinCenter(te);
       Float_t  z = fhEGenZGen->GetYaxis()->GetBinCenter(tz);
       Int_t bine = jetSpec->GetGenSpectrum()->GetXaxis()->FindBin(ej);
       Int_t binz = jetSpec->GetGenSpectrum()->GetYaxis()->FindBin(z);
       Float_t cont = jetSpec->GetGenSpectrum()->GetBinContent(bine,binz);
       Float_t err  = jetSpec->GetGenSpectrum()->GetBinError(bine,binz);
       jetSpec->GetGenSpectrum()->SetBinContent(bine, binz, cont + fhEGenZGen->GetBinContent(te, tz));
       jetSpec->GetGenSpectrum()->SetBinError(bine, binz, err + fhEGenZGen->GetBinError(te, tz));
    }


  file = TFile::Open("rec_pwg4spec.root", "RECREATE");
  jetSpec->SaveHistograms();
  file->Close();

  printf("reconstructed distribution has been set\n");    
  printf("response map has been set\n");
  
}

void correct(){
  // simple steering to correct a given distribution;
  loadlibs();
  // rec and gen
  //  FillSpecFromFiles("pwg4spec_15-50_all.root","pwg4spec_allpt.root");
  FillSpecFromFiles("pwg4spec_allpt_16.root","pwg4spec_allpt_16.root");

  char name[100];
  sprintf(name, "unfolded_pwg4spec_16.root");

  unfold("gen_pwg4spec.root", "unfolding", "rec_pwg4spec.root", name);
  //draw(name, "unfolding", 1); 

}

void mergeJetAnaOutput(){
  // This is used to merge the analysis-output from different 
  // data samples/pt_hard bins
  // in case the eventweigth was set to xsection/ntrials already, this
  // is not needed. Both methods only work in case we do not mix different 
  // pt_hard bins, and do not have overlapping bins

  const Int_t nBins = 2;
  // LHC08q jetjet100: Mean = 1.42483e-03, RMS = 6.642e-05
  // LHC08r jetjet50: Mean = 2.44068e-02, RMS = 1.144e-03
  // LHC08v jetjet15-50: Mean = 2.168291 , RMS = 7.119e-02
  // const Float_t xsection[nBins] = {2.168291,2.44068e-02};
  Float_t xsection[nBins] = {0,0};
  Float_t nTrials[nBins] = {0,0};
  Float_t sf[nBins] = {0,0};

  const char *cFile[nBins] = {"pwg4spec_0000000-1000000_LHC08v_jetjet15-50.root",
			      "pwg4spec_0000000-1000000_LHC08r_jetjet50.root"};


  TList *lIn[nBins];
  TFile *fIn[nBins];
  for(int ib = 0;ib < nBins;++ib){
    fIn[ib] = TFile::Open(cFile[ib]);
    lIn[ib] = (TList*)fIn[ib]->Get("pwg4spec");
    TH1* hTrials = (TH1F*)lIn[ib]->FindObject("fh1PtHard_Trials");
    TProfile* hXsec = (TProfile*)lIn[ib]->FindObject("fh1Xsec");
    xsection[ib] = hXsec->GetBinContent(1);
    nTrials[ib] = hTrials->Integral();
    sf[ib] = xsection[ib]/ nTrials[ib];
  }

  TFile *fOut = new TFile("pwg4spec_allpt.root","RECREATE");
  TList *lOut = new TList();
  lOut->SetName(lIn[0]->GetName());
  // for the start scale all...
  for(int ie = 0; ie < lIn[0]->GetEntries();++ie){
    TH1 *h1Add = 0;
    THnSparse *hnAdd = 0;
    Printf("%d: %s",ie, lIn[0]->At(ie)->GetName());
    for(int ib = 0;ib < nBins;++ib){
      // dynamic cast does not work with cint
      TObject *h = lIn[ib]->At(ie);
      if(h->InheritsFrom("TH1")){
	Printf("ib %d",ib);
	TH1 *h1 = (TH1*)h;
	if(ib==0){
	  h1Add = (TH1*)h1->Clone(h1->GetName());
	  h1Add->Scale(sf[ib]);
	}
	else{
	  h1Add->Add(h1,sf[ib]);
	}
      }
      else if(h->InheritsFrom("THnSparse")){
	Printf("ib %d",ib);
	THnSparse *hn = (THnSparse*)h;
	if(ib==0){
	  hnAdd = (THnSparse*)hn->Clone(hn->GetName());
	  hnAdd->Scale(sf[ib]);
	}
	else{
	  hnAdd->Add(hn,sf[ib]);
	}
      }
      

    }// ib
    if(h1Add)lOut->Add(h1Add);
    else if(hnAdd)lOut->Add(hnAdd);
  }
  fOut->cd();
  lOut->Write(lOut->GetName(),TObject::kSingleKey);
  fOut->Close();



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