Trouble drawing TLatex object on frame

Hi,

I am simply trying to draw a title on four frames using TLatex

  TCanvas* ca3 = new TCanvas("ca3","ca3",1000,1000);
  ca3->Divide(2,2);

  RooPlot* frameEff1 = muonPt.frame(Title("0-10%"));
  RooPlot* frameEff2 = muonPt.frame(Title("10-20%"));
  RooPlot* frameEff3 = muonPt.frame(Title("20-40%"));
  RooPlot* frameEff4 = muonPt.frame(Title("40-100%"));

  TLatex l;
  l.SetNDC();

    for( int i=0; i<nPtBins; i++){
       for (int j=0; j<nEtaBins; j++){
          for (int k=0; k<nCentralityBins; k++){
             effPdf.fitTo(*dataSubSet[i][j][k],ConditionalObservables(muonPt)) ;
             std::cout << "Fit ends here. Plotting efficiency curve..." << std::endl;
             if(k==0){
               dataSubSet[i][j][k]->plotOn(frameEff1,Efficiency(cut),Binning(b0)) ;
               effFunc.plotOn(frameEff1,LineColor(kRed)) ;
               frameEff1->SetMaximum(1.2); frameEff1->SetMinimum(-0.1) ;
               frameEff1->SetXTitle("#font[52]{p}_{T}^{#mu} [GeV]"); frameEff1->SetYTitle("#epsilon_{trigger}");
               ca3->cd(1); gPad->SetLeftMargin(0.15); frameEff1->GetYaxis()->SetTitleOffset(1.4);
               l.DrawLatex(0.3,0.75, "0-10%" );
               frameEff1->Draw();
             }else if(k==1){
               dataSubSet[i][j][k]->plotOn(frameEff2,Efficiency(cut),Binning(b0)) ;
               effFunc.plotOn(frameEff2,LineColor(kRed)) ;
               frameEff2->SetMaximum(1.2); frameEff2->SetMinimum(-0.1) ;
               frameEff2->SetXTitle("#font[52]{p}_{T}^{#mu} [GeV]"); frameEff2->SetYTitle("#epsilon_{trigger}");
               ca3->cd(2); gPad->SetLeftMargin(0.15); frameEff2->GetYaxis()->SetTitleOffset(1.4);
               l.DrawLatex(0.3,0.75,"10-20%" );
               frameEff2->Draw();
             }else if(k==2){
               dataSubSet[i][j][k]->plotOn(frameEff3,Efficiency(cut),Binning(b0)) ;
               effFunc.plotOn(frameEff3,LineColor(kRed)) ;
               frameEff3->SetMaximum(1.2); frameEff3->SetMinimum(-0.1) ;
               frameEff3->SetXTitle("#font[52]{p}_{T}^{#mu} [GeV]"); frameEff3->SetYTitle("#epsilon_{trigger}");
               ca3->cd(3); gPad->SetLeftMargin(0.15); frameEff3->GetYaxis()->SetTitleOffset(1.4);
               l.DrawLatex(0.3,0.75,"20-40%" );
               frameEff3->Draw();
             }else if(k==3){
               dataSubSet[i][j][k]->plotOn(frameEff4,Efficiency(cut),Binning(b0)) ;
               effFunc.plotOn(frameEff4,LineColor(kRed)) ;
               frameEff4->SetMaximum(1.2); frameEff4->SetMinimum(-0.1) ;
               frameEff4->SetXTitle("#font[52]{p}_{T}^{#mu} [GeV]"); frameEff4->SetYTitle("#epsilon_{trigger}");
               ca3->cd(4); gPad->SetLeftMargin(0.15); frameEff4->GetYaxis()->SetTitleOffset(1.4);
               l.DrawLatex(0.3,0.75,"40-100%" );
               frameEff4->Draw();
             }
          }
       }

The output either puts the label on 3 of the 4 frames, or it doesn’t draw at all. Can anyone provide a quick fix? Thanks.

Nevermind. The call to TLatexObject.DrawLatex("") must be used after drawing the frame.

1 Like