Re: Problem with tpavetext and histogram cloning

From: Melinda Siciliano <mellybinda_at_gmail.com>
Date: Tue, 13 Mar 2012 09:50:49 +0100


Hi Olivier,

Thanks a lot!

I have a second question: how can I avoid the multiple TPavetext on the histogram? Every time that I add a TPaveText is superimposed on the previous and I want that only one TPavetext.

Thanks for you help,

Melinda

On Mon, Mar 12, 2012 at 11:43 AM, Olivier Couet <Olivier.Couet_at_cern.ch>wrote:

> 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 Tue Mar 13 2012 - 09:51:16 CET

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