Writing distributions

Here is the macro which produces distributions and I want to write them in root to further read by another root macro but I got a message “is not writable”

using namespace std;
TH1F * Subtract(TH1F *data, TH1F *diboson, TH1F *wjets, TH1F *zjets, TH1F *singleTop);

void makeTrigSF ()
{
   vector<string> trigger_name;
   vector<string> variables;
   //vector<string> variable_xaxis;   

   variables.push_back("bjet1Pt");
  trigger_name.push_back("bjets_gt_2_Mu");
   trigger_name.push_back("1Mu_and_1Mu3Jet_bjets_gt_2");
  // trigger_name.push_back("bjets_gt_2_Ele");
  // trigger_name.push_back("1Ele_and_1Ele3Jet_bjets_gt_2");

   vector<string> region;
   region.push_back("SR");
   region.push_back("mBBcr");

   TH1F *subtracted[2];
   TH1F *ttbar[2][2];
   TH1F *data[2];
   TH1F *wjets[2];
   TH1F *diboson[2];
   TH1F *zjets[2];
   TH1F *singleTop[2];
   TFile *file = new TFile("/storage/local/home/atlas/msohail/trigger_analysis/hist-tot_muon_31.root");
   //TFile *file = new TFile("/storage/local/home/atlas/msohail/trigger_analysis/hist-tot_ele_31.root");
   // TFile *file = new TFile("hist-tot_26.root");
   gStyle->SetOptStat(kFALSE);

    for(unsigned int k=0; k<variables.size(); k++) {


        for(unsigned int i=0; i<trigger_name.size(); i++) {

         for(unsigned int k_region=0; k_region<2; k_region++) {
    //for(unsigned int j=0; j<variable_xaxis(); j++)
          cout <<  "Wv221_SR_PREtrigger_"+trigger_name[i]+"_"+variables[k] << endl;
          ttbar[k_region][i] = (TH1F *) file->Get(("ttbar_"+region[k_region]+"_PREtrigger_"+trigger_name[i]+"_"+variables[k]).c_str());
          diboson[k_region]  = (TH1F *) file->Get(("Dibosonsv221_"+region[k_region]+"_PREtrigger_"+trigger_name[i]+"_"+variables[k]).c_str());
          wjets[k_region]     = (TH1F *) file->Get(("Wv221_"+region[k_region]+"_PREtrigger_"+trigger_name[i]+"_"+variables[k]).c_str());
          data[k_region]      = (TH1F *) file->Get(("data_"+region[k_region]+"_PREtrigger_"+trigger_name[i]+"_"+variables[k]).c_str());
          zjets[k_region]     = (TH1F *) file->Get(("Zv221_"+region[k_region]+"_PREtrigger_"+trigger_name[i]+"_"+variables[k]).c_str());
          singleTop[k_region] = (TH1F *) file->Get(("SingleTop_"+region[k_region]+"_PREtrigger_"+trigger_name[i]+"_"+variables[k]).c_str());
         }
        if(ttbar[0][i] && ttbar[1][i]) ttbar[0][i]->Add(ttbar[1][i]);
        if(data[0] && data[1] && wjets[0] && wjets[1] && diboson[0] && diboson[1] && zjets[0] && zjets[1]  && singleTop[0] && singleTop[1]) {

             data[0]->Add(data[1]);
             diboson[0]->Add(diboson[1]);
             wjets[0]->Add(wjets[1]);
             zjets[0]->Add(zjets[1]);
             singleTop[0]->Add(singleTop[1]);

           subtracted[i] = Subtract(data[0], diboson[0], wjets[0], zjets[0], singleTop[0]);
        } else {
            if(!data) cout << "data histogram not found" << endl;
            if(!diboson) cout << "diboson histogram not found" << endl;
            if(!wjets) cout << "wjets histogram not found" << endl;
            if(!zjets) cout << "zjets histogram not found" << endl;
            if(!singleTop) cout << "singleTop histogram not found" << endl;
        }
      }
TH1F *lep3jet_trig_eff = subtracted[1];
      lep3jet_trig_eff->Divide(subtracted[0]);
      TCanvas *canvas = new TCanvas();
      lep3jet_trig_eff->Draw();
    //lep3jet_trig_eff->SetTitle("");
      lep3jet_trig_eff->SetLineColor(kRed);
      lep3jet_trig_eff->SetLineWidth(5);
      TLegend *mylegend1 = new TLegend(.7,.75,.89,.89);
    //mylegend1->SetFillColor(kRed);
      mylegend1->SetBorderSize(0);
      mylegend1->SetTextSize(0.030);
      mylegend1->AddEntry(lep3jet_trig_eff,"1Lep+3Jets_Trigger_Efficiency","l");
      mylegend1->Draw("same");

    //cout <<"the name of k varabile is " << variables.at(k)<<endl;
      lep3jet_trig_eff->GetYaxis()->SetRangeUser(0.,1.2);

      TString mystring = variables.at(k);
      lep3jet_trig_eff->GetXaxis()->SetTitle(mystring);
    //lep3jet_trig_eff->GetXaxis()->SetTitle("Lepton Pt");
      lep3jet_trig_eff->GetYaxis()->SetTitle("Efficiency");

// doing MC
      TH1F *lep3jet_MC_trig_eff = (TH1F *) ttbar[0][1]->Clone("MC_trig_eff");
      lep3jet_MC_trig_eff->Divide(ttbar[0][0]);
      lep3jet_MC_trig_eff->Draw("SAME");
      lep3jet_MC_trig_eff->SetLineColor(kGreen);
      lep3jet_MC_trig_eff->SetLineWidth(5);
      TLegend *mylegend2 = new TLegend(.7,.75,.89,.89);
    //mylegend2->SetFillColor(kGreen);
      mylegend2->SetBorderSize(0);
      mylegend2->SetTextSize(0.030);
      mylegend2->AddEntry(lep3jet_MC_trig_eff,"MC_Trigger_Efficiency","l");
      mylegend2->Draw("SAME");

      TH1F *SF = (TH1F *) lep3jet_trig_eff->Clone("SF_trig");
      SF->Divide(lep3jet_MC_trig_eff);
      SF->Write();
      SF->SetLineColor(kYellow);
      SF->Draw("SAME");

      SF->SetLineWidth(5);
      TLegend *mylegend3 = new TLegend(.7,.75,.89,.89);
    //mylegend3->SetFillColor(kBlue);
      mylegend3->SetBorderSize(0);
      mylegend3->SetTextSize(0.030);
      mylegend3->AddEntry(SF,"Trigger_Scale_Factor","l");
      mylegend3->Draw("SAME");

    //TLatex *tex = new TLatex(1,1,"#splitline{#bf{#it{ATLAS}} Work In Progress}{#sqrt{s} = 13 TeV,  15.2 fb^{-1}}");
      TLatex *tex = new TLatex(1,1,"#splitline{#bf{#it{Data}} }{#sqrt{s} = 13 TeV,  15.2 fb^{-1}}");
      tex->SetTextFont(42);
      tex->Draw();

      canvas->Modified();
}
}
   //lep3jet_trig_eff->SetTitle("")
//}

TH1F * Subtract(TH1F *data, TH1F *diboson, TH1F *wjets, TH1F *zjets, TH1F *singleTop) {
   TH1F *subtracted = (TH1F *) data->Clone("data_subtracted");
   subtracted->Add(diboson,-1.);
   subtracted->Add(wjets,-1.);
   subtracted->Add(zjets,-1);
   subtracted->Add(singleTop,-1);
   return subtracted;
}

ROOT Version: Not Provided
Platform: Not Provided
Compiler: Not Provided


TFile *file = TFile::Open("/storage/local/home/atlas/msohail/trigger_analysis/hist-tot_muon_31.root", "UPDATE");

Error is removed but it did not wrote the distribution in root format in the currently directory.

Whatever you ->Write(); should be there.

I wrote SF->Write(); only, so it should be in the current directory which is not the case.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.