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