Legend plot problem

I add two legends to two historams. The fist legend works, but second legend doesn’t appear after the code compiled. My code is below. what’s up? How can I fix it?

// divide and add 1D histograms
void format_h(TH1F* h, int linecolor){
	h->SetLineWidth(3);
	h->SetLineColor(linecolor);
}

void macro6(){
	auto sig_h=new TH1F("sig_h","Signal Hist",50,0,10);
	auto gaus_h1=new TH1F("gaus_h1","Gauss Histo 1",30,0,10);
	auto gaus_h2=new TH1F("gaus_h2","Gauss Histo 2",30,0,10);
	auto bkg_h=new TH1F("exp_h","Exponetail Histo",50,0,10);

	//simulate the measurements
	TRandom3 rndgen;
	for(int imeas=0;imeas<4000;imeas++){
		bkg_h->Fill(rndgen.Exp(4));
		if(imeas%4==0) gaus_h1->Fill(rndgen.Gaus(5,2));
		if(imeas%4==0)gaus_h2->Fill(rndgen.Gaus(5,2));
		if(imeas%10==0)sig_h->Fill(rndgen.Gaus(5,.2));
	}

	//format histograms
	int i=0;
	for(auto hist:{sig_h,bkg_h,gaus_h1,gaus_h2})
		format_h(hist,1+i++);
	//sum
	auto sum_h=new TH1F(*bkg_h);
	sum_h->Add(sig_h,1.0);
	sum_h->SetTitle("Exponential +Gaussion;X variable;Y variable");
	format_h(sum_h,kBlue);

	auto c_sum=new TCanvas();
	sum_h->Draw("hist");
	bkg_h->Draw("SameHist");
	sig_h->Draw("SameHist");
    
    //add legend 
    TLegend leg(.7,.7,.9,.9,"Signal and Background");
    leg.SetFillColor(0);
    leg.AddEntry(sum_h,"Signal and Background");
    leg.AddEntry(sig_h,"Signal");
    leg.AddEntry(bkg_h,"Background");
    leg.DrawClone("Same");
   
	//divide
	auto dividend=new TH1F(*gaus_h1);
	dividend->Divide(gaus_h2);

	//graphical maquillage
	dividend->SetTitle(";X axis; Gaus Histo 1/Gaus Histo 2");
	format_h(dividend,kOrange);
	gaus_h1->SetTitle(";;Gaus Histo 1 and Gaus Histo 2");
	gStyle->SetOptStat(0);

	TCanvas* c_divide=new TCanvas();
	c_divide->Divide(1,2,0,0);
	c_divide->cd(1);
	c_divide->GetPad(1)->SetRightMargin(0.01);
	gaus_h1->DrawNormalized("Hist");
	gaus_h2->DrawNormalized("HistSame");

	TLegend leg2(.7,.7,.9,.9,"Gaus Hist");
    leg2.SetFillColor(0);
    leg2.AddEntry(gaus_h1,"Gaus Hist 1");
    leg2.AddEntry(gaus_h2,"Gaus Hist 2");
    leg2.Draw();
    //this part legend doesn't appear in the digram after the code compiled.
	c_divide->cd(2);
	dividend->GetYaxis()->SetRangeUser(0,2.49);
	c_divide->GetPad(2)->GetGridy();
	c_divide->GetPad(2)->SetRightMargin(0.01);
	dividend->Draw();

}

Hi,

First of all, you are using TLegend::Draw() in the second case.
But object will be destroyed after end of macro6() function.
Just replace code for second legend:

   TLegend *leg2 = new TLegend(.7,.7,.9,.9,"Gaus Hist");
    leg2->SetFillColor(0);
    leg2->AddEntry(gaus_h1,"Gaus Hist 1");
    leg2->AddEntry(gaus_h2,"Gaus Hist 2");
    leg2->Draw();

Regards,
Sergey

The following macro is working for me:

// divide and add 1D histograms
void format_h(TH1F* h, int linecolor){
   h->SetLineWidth(3);
   h->SetLineColor(linecolor);
}

void macro6(){
   auto sig_h=new TH1F("sig_h","Signal Hist",50,0,10);
   auto gaus_h1=new TH1F("gaus_h1","Gauss Histo 1",30,0,10);
   auto gaus_h2=new TH1F("gaus_h2","Gauss Histo 2",30,0,10);
   auto bkg_h=new TH1F("exp_h","Exponetail Histo",50,0,10);

   //simulate the measurements
   TRandom3 rndgen;
   for(int imeas=0;imeas<4000;imeas++){
      bkg_h->Fill(rndgen.Exp(4));
      if(imeas%4==0) gaus_h1->Fill(rndgen.Gaus(5,2));
      if(imeas%4==0)gaus_h2->Fill(rndgen.Gaus(5,2));
      if(imeas%10==0)sig_h->Fill(rndgen.Gaus(5,.2));
   }

   //format histograms
   int i=0;
   for(auto hist:{sig_h,bkg_h,gaus_h1,gaus_h2})
   format_h(hist,1+i++);
   //sum
   auto sum_h=new TH1F(*bkg_h);
   sum_h->Add(sig_h,1.0);
   sum_h->SetTitle("Exponential +Gaussion;X variable;Y variable");
   format_h(sum_h,kBlue);

   auto c_sum=new TCanvas();
   sum_h->Draw("hist");
   bkg_h->Draw("SameHist");
   sig_h->Draw("SameHist");

   //add legend
   auto leg = new TLegend(.7,.7,.9,.9,"Signal and Background");
   leg->SetFillColor(0);
   leg->AddEntry(sum_h,"Signal and Background");
   leg->AddEntry(sig_h,"Signal");
   leg->AddEntry(bkg_h,"Background");
   leg->Draw();

   //divide
   auto dividend=new TH1F(*gaus_h1);
   dividend->Divide(gaus_h2);

   //graphical maquillage
   dividend->SetTitle(";X axis; Gaus Histo 1/Gaus Histo 2");
   format_h(dividend,kOrange);
   gaus_h1->SetTitle(";;Gaus Histo 1 and Gaus Histo 2");
   gStyle->SetOptStat(0);

   // 2nd canvas
   TCanvas* c_divide=new TCanvas();
   c_divide->Divide(1,2,0,0);
   c_divide->cd(1);
   c_divide->GetPad(1)->SetRightMargin(0.01);
   gaus_h1->DrawNormalized("Hist");
   gaus_h2->DrawNormalized("HistSame");

   auto leg2 = new TLegend(.7,.7,.9,.9,"Gaus Hist");
   leg2->SetFillColor(0);
   leg2->AddEntry(gaus_h1,"Gaus Hist 1");
   leg2->AddEntry(gaus_h2,"Gaus Hist 2");
   leg2->Draw();

   //this part legend doesn't appear in the digram after the code compiled.
   c_divide->cd(2);
   dividend->GetYaxis()->SetRangeUser(0,2.49);
   c_divide->GetPad(2)->GetGridy();
   c_divide->GetPad(2)->SetRightMargin(0.01);
   dividend->Draw();
}

Thanks. I do as your advice, and it works.

Thanks for your attention and your help. the problem is solved now.