]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/macros/runJetSpectrumUnfolding.C
moved macros
[u/mrichter/AliRoot.git] / PWG4 / macros / runJetSpectrumUnfolding.C
diff --git a/PWG4/macros/runJetSpectrumUnfolding.C b/PWG4/macros/runJetSpectrumUnfolding.C
deleted file mode 100644 (file)
index e6456cf..0000000
+++ /dev/null
@@ -1,526 +0,0 @@
-//
-// 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();
-
-
-
-}