Olivier,
Please read the limitations of split mode at URL:
http://root.cern.ch/root/HowtoWriteTree.html
Loom at section "Making a Tree with many branches"
You will read:
*In split mode, a data member cannot be a pointer to an array of basic
types. A variable size array must be encapsulated inside another
object derived from TObject.
The problem is that in split mode, we have no way to know that the
length
of the array is one of your data members.
One could imagine an extension like (just to take your example)
Int_t fTps_avt_stockage; //Nb canaux entre l'origne et le 1er
FlashSpectrum *fSpectrum; //[fTps_avt_stockage]Amplitude=f(tps des
coups par
where the string between [] gives the name of the branch containing the
count.
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