Re: [ROOT] Problems accessing protected data members of root classes

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue May 30 2000 - 12:35:32 MEST


Hi Birger,
I do not understand what you want to do with this class. Anyhow,
I suggest to modify your constructor like this:

TBand::TBand(TH1F *H){
  Float_t *fx,*fy;
  int i;

  DefaultHisto(H);
  
  int N=2*fND;
  fx=(Float_t *)new Float_t[N];
  fy=(Float_t *)new Float_t[N];
  for(i=1; i<= fND ; i++){
    fx[i-1] =H->GetBinCenter(i);
    fx[N-i] = H->GetBinCenter(i);
    fy[i-1] = fy[N-i] = H->GetBin(i);
  }
  SetPolyLine(N,fx,fy);
}


Rene Brun

Birger Koblitz wrote:
> 
> Hi,
> 
> I am trying to make a class to show the band defined by a MC using
> different of the tuning parameters. I do this via inheriting from
> TPolyLine:
> 
> ---------- TBand.h ----------------
> #ifndef TBAND_H
> #define TBAND_H
> 
> #if !defined(__CINT__) || defined(__MAKECINT__)
> #include <TPolyLine.h>
> #endif
> class TBand : public TPolyLine{
>   Int_t fND;            // Number of default Points
>   Float_t *fXD;
>   Float_t *fYD;
> 
>  public:
>   TBand();
>   TBand(TH1F *H);
>   ~TBand();
>   void AddHisto(TH1F *H);
>   void DefaultHisto();
> };
> 
> #endif
> 
> // A constructor
> TBand::TBand(){
>   fND=0;
>   fXD=0;
>   fYD=0;
> }
> 
> ------------ TBand.C ------------------
> #include "TBand.h"
> 
> TBand::TBand(TH1F *H){
>   Float_t *fx,*fy;
>   int i;
> 
>   DefaultHisto(H);
> 
>   fN=2*fND;
>   fx=(Float_t *)new Float_t[fN];
>   fy=(Float_t *)new Float_t[fN];
>   cout << "2.  " << fx << " " << fX << endl;
>   fX=(Float_t *)fx; fY=(Float_t *)fy;
>   cout << "1.  " << fx << " " << fX << endl;
>   for(i=1; i<= fND ; i++){
>     fx[i-1] =H->GetBinCenter(i);
>     fx[fN-i] = H->GetBinCenter(i);
>     fY[i-1] = fY[fN-i] = H->GetBin(i);
>   }
> }
> 
> void TBand::DefaultHisto(TH1F *H){
> 
>   fND=H->GetNbinsX();
>   if(!fND) return;
> 
>   fXD=(Float_t *)new Float_t[fND];
>   fYD=(Float_t *)new Float_t[fND];
> 
>   for(int i=1; i<= fND ; i++){
>     fXD[i]=H->GetBinCenter(i);
>     fYD[i]=H->GetBin(i);
>   }
> }
> -----------------------------------------------
> 
> Now starting the code and looking what is written into the protected data
> member fX one sees:
> root [0] .L TBand.C
> root [1] TFile f("gen/qcdins_new.root")
> root [2] h133->Draw("bsph >> hi")  // Make some histo
> root [5] TBand tb(hi)              // Init Band
> 1.  0x209895b8 0xc8
> 2.  0x209895b8 0x209898e8          ????????????????????/
> 
> which gives a nice segmentation violation some lines later. Obviously the
> class can not overwrite the protected data member!
> Could someone help me, please?
> 
> Cheers,
>   Birger
> 
> /------------------------------------------------------------\
> | Birger Koblitz                    koblitz@mail.desy.de     |
> | Max-Planck-Institut fuer Physik                            |
> | (Werner Heisenberg-Institut)                               |
> | DESY-FH1K                         Tel. (40) 8998-3971      |
> | Notkestr. 85                                               |
> | D-22603  HAMBURG                                           |
> \------------------------------------------------------------/



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:26 MET