Re: [ROOT] speed problem for unexecuted statements

From: Rene Brun (Rene.Brun@cern.ch)
Date: Mon Feb 09 2004 - 08:38:20 MET


Could you send the ROOT file containing your histogram "Chanstatus"?
and indicate which version you use?

Rene Brun

Peter Shanahan wrote:
> 
> Dear Rooters,
> 
>      I have a strange speed problem with an unnamed macro.  I am
> looping over the bins in a TH2C, getting the contents, and doing
> various things based on them, mainly plotting other histograms.  I find
> that the execution is very slow, even for cases where each of the "if
> (stat&...) shown below are false. (I've verified this with print
> statements, watching how long it takes to get to the next bin in the
> histogram.)
> 
>     I've removed the actual code inside the if{} blocks below for sake of
> brevity, but I find that just removing a reference to gPad
> (SetLogx(0 or 1)) within each of the if blocks speeds up the execution by
> factors of 10.  I need the gPad reference to set log/non-log depending on
> the case.
> 
>     Does someone know:
> 
>      1) why does the performance speed depend on the presence or absence
>         of statements that don't get executed because they are inside
>         false if statements?  Is it some interpreter optimization that
>         tries to determine whether the state of gPad has changed?
> 
>      2) is there something I can do about it?   Many thanks,
> 
> Peter Shanahan
> 
> {
> 
>         TH2C* ChanStatus=(TH2C*)f.Get("ChanStatus");
> 
>         TCanvas* myCanvas=new TCanvas();
>         gPad->SetLogx(0);
>         Bool_t doRandoms=false;
>         Bool_t doBadRes=true;
>         Bool_t doBadRms=true;
>         Bool_t doBadPed=true;
> 
>         for (Int_t ix=40; ix<=140; ix++)
>         {
>                 Int_t jx=ix-1;
>                 for (Int_t iy=1; iy<=40; iy++)
>                 {
> 
>                         Int_t jy=iy-1;
>                         Char_t stat=ChanStatus->GetBinContent(ix,iy);
>                         Int_t crate=jx/48+(jy/32)*4;
>                         Int_t module=(jx%48)/4;
>                         Int_t masterch=7-(jy%32)/4;
>                         Int_t minderch=jx%4+(jy%4)*4;
>                         cout << ix <<" "<<iy<<" "<<(Int_t) stat<<endl;
> 
>                         if (stat&1 && doRandoms)
>                         {
>                                 cout << "stat 1"<<endl;
>                         } // if Random
> 
>                         if (stat&2 && doBadRes)
>                         {
>                                 cout << "stat 2"<<endl;
>                         } // if badres
> 
>                         if (stat&4 && doBadRms)
>                         {
>                                 cout << "stat 4"<<endl;
>                         } // if Rms
> 
>                         if (stat&8 && doBadPed)
>                         {
>                                 cout << "stat 8"<<endl;
>                         } // if badped
> 
>                 }  // iy
> 
>         }  // ix
> 
>         delete myCanvas;
>         myCanvas=0;
> 
> }
> 
> =======================================================================
>   Fermilab MS-220                            Phone: (+1) 630 840 8378
>   P.O. Box 500                               Fax:   (+1) 630 840 6039
>   Batavia, IL 60510 USA



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:05 MET