Re: Problem with tpavetext and histogram cloning

From: Olivier Couet <Olivier.Couet_at_cern.ch>
Date: Mon, 12 Mar 2012 10:43:53 +0000


Here is your macro modified
Add(pave) was wrong ... pave is an array ... I put pave[1] you need to revisit the logic. I did some other mods .. do a diff...

void tryhistos()
{

   TH1F *histos[3];
   for (Int_t i=0;i<3;i++) {

      histos[i]=new TH1F(Form("histoname%d",i),Form("histotitle%d",i),300,-0.5,29.5);    }
   TCanvas *c1=new TCanvas("c1","c1");
   c1->Divide(1,3);
   TCanvas *c2=new TCanvas("c2","c2");
   c2->Divide(1,3);

   for(Int_t iii=0;iii<5;iii++){

      printf("n1 %d\n",iii);
      for (Int_t j=0;j<3;j++) {
         histos[0]->FillRandom("gaus",10000);
         histos[1]->FillRandom("landau",10000);
         histos[2]->FillRandom("expo",10000);
      }

   }

   TPaveText *pave[2];
   TH1 *histos2[3];

   for (Int_t hh=0;hh<5;hh++) {

      for (Int_t uu=0;uu<2;uu++) {
         pave[uu]=new TPaveText(0.3,0.88,0.9,0.99,"NDC");
         pave[uu]->AddText(Form("text %d",uu));
         pave[uu]->AddText(Form("text 2 %d",uu));
         pave[uu]->SetFillColor(4);
         pave[uu]->SetBorderSize(1);
         pave[uu]->SetLineWidth(1);
      }
      histos[0]->GetListOfFunctions()->Add(pave[1]);
      histos[1]->GetListOfFunctions()->Add(pave[1]);
      histos[2]->GetListOfFunctions()->Add(pave[1]);
      for(Int_t gg=0;gg<3;gg++) histos2[gg]=(TH1*)histos[gg]->Clone(Form("%s_cpy",histos[gg]->GetName()));
      c1->cd();



      for (Int_t z =0;z<3;z++) {
         c1->cd(z+1);
         histos[z]->Draw();
         c1->Update();
      }



      c2->cd();
      for (Int_t z =0;z<3;z++) {
         c2->cd(z+1);
         histos2[z]->DrawCopy();
         c2->Update();
      }

   }
}

On Mar 10, 2012, at 3:50 PM, Melinda Siciliano wrote:

Dear all,

I have a problem with the histograms cloning and it is reproduced in the macro I attached in the email. The error appears only if I add I the TPaveText to the histograms. I would like to know also how it is possible to avoid that the TPavetext are superimposed at every cycle. Have I to remove the TPaveText at the beginning of the new cycle? Does the clones have problems if some functions are attached to the histogram?

I added below the log of the error.

Cheers,

Melinda

The lines below might hint at the cause of the crash. If they do not help you then please submit a bug report at http://root.cern.ch/bugs. Please post the ENTIRE stack trace from above as an attachment in addition to anything else that might help us fixing this issue.



#5 0x0000000000000000 in ?? ()
#6 0x00007fba5d57555c in TClass::GetActualClass(void const*) const ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libCore.so.5.33
#7 0x00007fba59f4078b in TBufferFile::WriteObjectAny(void const*, TClass const*) () from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#8 0x00007fba5d559a30 in TList::Streamer(TBuffer&) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libCore.so.5.33
#9 0x00007fba59f428f2 in TBufferFile::WriteFastArray(void**, TClass const*, int, bool, TMemberStreamer*) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#10 0x00007fba5a0107b8 in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#11 0x00007fba59f88ebe in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#12 0x00007fba59f3d2b5 in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#13 0x00007fba59f3d355 in TBufferFile::WriteClassBuffer(TClass const*, void*)

    () from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#14 0x00007fba594d941a in TH1::Streamer(TBuffer&) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libHist.so
#15 0x00007fba5d59e76a in TStreamerBase::WriteBuffer(TBuffer&, char*) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libCore.so.5.33
#16 0x00007fba5a0117f5 in int TStreamerInfo::WriteBufferAux<char**>(TBuffer&, char** const&, int, int, int, int) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#17 0x00007fba59f88ebe in TStreamerInfoActions::GenericWriteAction(TBuffer&, void*, TStreamerInfoActions::TConfiguration const*) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#18 0x00007fba59f3d2b5 in TBufferFile::ApplySequence(TStreamerInfoActions::TActionSequence const&, void*) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#19 0x00007fba59f3d355 in TBufferFile::WriteClassBuffer(TClass const*, void*)

    () from /home/msicilia/work/alisoft/alice/root/trunk/lib/libRIO.so
#20 0x00007fba5d4d1bdc in TDirectory::CloneObject(TObject const*, bool) ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libCore.so.5.33
#21 0x00007fba5d4ea09d in TNamed::Clone(char const*) const ()

   from /home/msicilia/work/alisoft/alice/root/trunk/lib/libCore.so.5.33


<tryhistos.C> Received on Mon Mar 12 2012 - 11:44:01 CET

This archive was generated by hypermail 2.2.0 : Tue Mar 13 2012 - 11:50:01 CET