[ROOT] segementation violation and tlegend

From: Jan Erik Sundermann (jsunderm@pktw06.phy.tu-dresden.de)
Date: Tue Mar 19 2002 - 19:05:36 MET


Hi rooters,


i'm drawing some histograms into the same canvas. If i delete the drawn 
histograms and replace them with new ones (with the same names) it always 
ends up with a segementation violation. If i try to draw the canvas 
without the legend everything works fine. 


... this is my code.


void
TMcBReco::drawHistoLeptonSpectra() {

  gStyle->SetOptStat(10);

  TCanvas* canvas = new TCanvas("LeptonSpectra","LeptonSpectra");

  canvas->cd();
  canvas->Divide(2,0);

  // like sign
  canvas->cd(1);
  _histLeptonMomLikeSign_All_Reco->SetXTitle("p / GeV");
  _histLeptonMomLikeSign_TruthMatch_Reco->SetFillColor(18);
  _histLeptonMomLikeSign_TruthMatch_Reco->SetFillStyle(1001);
  _histLeptonMomLikeSign_FromB_Reco->SetFillColor(1);
  _histLeptonMomLikeSign_FromB_Reco->SetFillStyle(3004);
  _histLeptonMomLikeSign_All_Reco->Draw();
  _histLeptonMomLikeSign_TruthMatch_Reco->Draw("SAME");
  _histLeptonMomLikeSign_FromB_Reco->Draw("SAME");

  TLegend* leg1 = new TLegend(0.5, 0.5, 0.85, 0.75);
  leg1->SetHeader("lepton momentum (like-sign)");
  leg1->AddEntry(_histLeptonMomLikeSign_All_Reco, "all", "f");
  leg1->AddEntry(_histLeptonMomLikeSign_TruthMatch_Reco, "with truth match", "f");
  leg1->AddEntry(_histLeptonMomLikeSign_FromB_Reco, "with truth match from b", "f");
  leg1->Draw();


  ( ... )

}


    ----> Calling TMcBReco::histosLeptonSpectra a second time 
          (after calling TMcBReco::drawHistoLeptonSpectra) allways causes
          a segmentation violation


void 
TMcBReco::histosLeptonSpectra(bool CM = false) {

  removeObject("histLeptonMomLikeSign_All_Reco");
  _histLeptonMomLikeSign_All_Reco = 
    new TH1D("histLeptonMomLikeSign_All_Reco","histLeptonMomLikeSign_All_Reco",
             _nbBins_mom,_left_mom,_right_mom);

  ( ... filling histograms )

}

void 
TMcBReco::removeObject(const char* const name) {

  TObject* obj = gDirectory->Get(name);
  if (obj != 0) {
    cout << "removing object " << name << endl;
    obj->Delete();
  }
}







What am i doing wrong.


Best regards,

Jan Erik Sundermann.



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:46 MET