Hi Olivier,
Mea culpa, sorry. I was too fast to answer your mail this morning.
I did not see that your data member fSpectrum was a pointer to a
FlashSpectrum class.
What you do is correct for both split and non-split mode.
BUT, you have a problem in your class FlasSpectrum. In your default
constructor you allocate something. This is fine providing you control
the situation in FlashSpectrum::Streamer !!
You run the risk to allocate twice your array of UShort_t.
You did not send this function, so I cannot be more precise.
In general, it is bad practice to have a default constructor allocating
objects or arrays of basic types. The default constructor should only
preset pointers to 0 (protected in the destructor).
In Root, the default constructor is autonatically called by the system
for I/O and the user/interface context menu.
Rene Brun
Olivier Meplan wrote:
>
> Hi Rooters!
>
> I have a pb in reading (and perhaps in filling) a tree.
> The tree declaration I used is:
> TTree *ptree_flash = new TTree("FLASH",argv[1]);
> event_flash = new EventFlash();
> TBranch *b_flash
> =ptree_flash->Branch("EventFlash","EventFlash",
> &event_flash,bufsize,split);
> Then I fill the tree with:
> event_flash=new EventFlash(dim_bloc,nb_burst,&buf[i]);
> ptree_flash->Fill();
> where buf is UShort_t *buf=new UShort_t[lgb], (lgb being a given
> dimension).
> When I fill the tree, I used the method
> event_flash->GetFlashSpectrum()->Show();
> in order to check what I am reading (and so what I hope to put in the
> tree).
> But when I try to read again the tree, the GetFlashSpectrum()->Show()
> method give me numbers which are completly different from the one I
> (hope to) fill in the tree.
> Is there some one who can tell me what I am doing wrong?
> Thanks very much,
> Olivier Meplan.
> -----------------------------------------------------------------------------
>
> The definition of the class EventFlash is given in the file
> flash_flash.h, flash_spectrum.h (and the corresponding .C files):
>
> // ========== flash_flash.h ===========
> class EventFlash : public TObject
> {
> private:
> Int_t fNo_burst; //Numero de burst
> UShort_t fNo_voie_flash; //Numero de la voie du flash touche
> Int_t fTps_avt_stockage; //Nb canaux entre l'origne et le 1er
> canal stocke
> FlashSpectrum *fSpectrum; //Amplitude=f(tps des coups par
> rapport au burst) pour chaque voie flash
>
> public:
>
> EventFlash():fNo_burst(0),fNo_voie_flash(0),fTps_avt_stockage(0){fSpectrum=new
> FlashSpectrum();}
> EventFlash(Int_t dim,Int_t burst,UShort_t *event);
> ~EventFlash(){delete fSpectrum;}
>
> Int_t GetNbBurt() const { return fNo_burst; }
> UShort_t GetNumVoie() const {return fNo_voie_flash; }
> Int_t GetTemps_Avant_Stokage() const {return fTps_avt_stockage; }
> FlashSpectrum *GetFlashSpectrum() {return fSpectrum; }
>
> ClassDef(EventFlash,1)
>
> };
> // ========== flash_flash.C ===========
> #include "flash_flash.h"
>
> ClassImp(EventFlash)
> EventFlash::EventFlash(Int_t dim,Int_t burst,UShort_t *event) :
> TObject()
> {
> fNo_burst=burst;
> fSpectrum=new FlashSpectrum(dim);
>
> fNo_voie_flash=(*event & 0x00FF);
> fTps_avt_stockage=*(event+1);
> for(Int_t i=0 ; i<dim ; i++)
> {
> GetFlashSpectrum()->FillSpectrum(i,(event[i+2] &
> 0x0FFF));
>
> }
> }
> // ========== flash_spectrum.h ===========
> class FlashSpectrum : public TObject
> {
> private:
> UShort_t *fFlashSpectrum;
> Int_t fSize;
>
> public:
> FlashSpectrum(): fSize(10)
> {
> fFlashSpectrum = new UShort_t[fSize];
> }
> FlashSpectrum( Int_t size)
> {
> fSize=size;
> fFlashSpectrum = new UShort_t[fSize];
> }
>
> ~FlashSpectrum(){delete [] fFlashSpectrum;}
> void FillSpectrum(UShort_t *spectrum)
> {
> for(Int_t i=0; i<fSize ; i++)
> fFlashSpectrum[i]=spectrum[i];
> }
> void FillSpectrum(Int_t i,UShort_t val)
> {
> fFlashSpectrum[i]=val;
> }
> UShort_t *GetSpectrum(){return fFlashSpectrum;}
> Int_t GetSize(){return fSize;}
> void Show()
> {
> for(Int_t i=0; i<GetSize(); i++)
> cout<<"AMP:"<<fFlashSpectrum[i]<<endl;
> }
> ClassDef(FlashSpectrum,1)
> };
> //===============================
>
> --
> =========================================================
> |Olivier Meplan |E-mail:meplan@isn.in2p3.fr
> | |
> |ISN, 53 avenue des Martyrs | Tel +33(0)4 76-28-41-90
> |F-38026 GRENOBLE cedex | Fax +33(0)4 76-28-40-04
> =========================================================
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:40 MET