Hi Pietro,
In attachement, a slightly modified version of your script
temperature2.cpp.
You had an error when creating the branches.
See more examples in $ROOTSYS/tutorials/tree*.C
Rene Brun
On Wed, 5 Mar 2003, Pietro
Govoni wrote:
> Dear Mr. Brun,
> thak you for your immediate answer!
>
> As far as I understand if I want to be sure to save something in a TTree,
> I must create a class that inherits from TObject and contains my personal
> stuff.
>
> Now I am trying to implement a solution following this path; however, I
> also tried to save my data, instead in a stl::vector, in a simple C-like
> array, following the structure of tree2.C.
>
> Again, I got a strange behaviour; I don't have any precise clue on where
> the problem could be, but the fact that I am using arrays, since if I try
> to save a (simple) class in a TTree I can read it afterward, without any
> problem, provided that it doesn't contain any array.
> In attachment you can find the code (temperature2.cpp) with the array and
> the one that seems to work (prova.cpp).
>
> Thanks again
>
> pietro
>
>
>
> On Wed, 5 Mar 2003, Rene Brun wrote:
>
> >Hi Pietro,
> >
> >STL collections are not accepted as top level branches. They must be included
> >inside a class. Currently top level branches can only be
> > - basic types
> > - TObject*
> > - TCollection
> > - folders
> >
> >We are now in the process of including native support for STL collections
> >in the ROOT dictionary. Like we do now with TClonesArray, STL vector and
> >list vector<myclass>, vector <myclass*>, etc will be supported by
> >the Tree split mechanism. We are testing this code now and hope to include it in
> >a few weeks in the standard version. The coming release 3.05/03 will not include
> >it.
> >
> >Rene Brun
> >
> >Pietro Govoni wrote:
> >>
> >> Dear Roottalk,
> >> is there anbody who created a TTree containing an STL container?
> >> I am trying to store a simple vector<double>, following an example that I
> >> found among the tutorials.
> >> When I try to put in a TTree that vector I get a lot of different errors,
> >> depending on strange parameters, e.g. whether I put or not a line like:
> >>
> >> cout << "---------------------------------------" << endl;
> >>
> >> in the code.
> >> There should be something fundamental that I'm forgetting, does anybody
> >> know what should I do?
> >>
> >> Thanks in advance
> >>
> >> pietro
> >>
> >> PS follows my little code:
> >>
> >> #include "TFile.h"
> >> #include "TTree.h"
> >> #include <vector>
> >>
> >> //
> >> // to run the example, do:
> >> // .x temperature.cpp to execute with the CINT interpreter
> >> //
> >>
> >> void temperature_w()
> >> {
> >> TFile f("treeTemperature.root","recreate"); // create the file
> >> TTree tempo("tempo","tentativo"); // create a new tree
> >> vector <double> Temperature; // create a vector
> >> for (int i=0; i< 40; ++i) Temperature.push_back(0.); // initialize
> >> it
> >>
> >> cout << Temperature.size() << endl;
> >>
> >> tempo.Branch("Temperature",&Temperature,"temperatura 40 sonde (V)");
> >>
> >> for (int i=0; i<3; ++i)
> >> {
> >> int j = 0;
> >> for (vector<double>::iterator it = Temperature.begin();
> >> it != Temperature.end();
> >> ++it)
> >> {
> >> *it = 10 * i + (++j);
> >> cout << *it << '\t';
> >> }
> >> cout << Temperature.size() << endl;
> >> tempo.Fill();
> >> }
> >> f.Write();
> >> }
> >>
> >> void temperature_r()
> >> {
> >> TFile f("treeTemperature.root");
> >> TTree *tempo = (TTree*)f->Get("tempo"); // si puo' fare in altro
> >> modo??
> >> tempo->Print();
> >>
> >> vector <double> Temperature;
> >> for (int i=0; i< 40; ++i) Temperature.push_back(0.); // (1)
> >> cout << "ole " << Temperature.size() << endl; // (2)
> >> TBranch *b_Temperature = tempo->GetBranch("Temperature");
> >> b_Temperature->SetAddress(&Temperature);
> >>
> >> Int_t nentries = (Int_t)tempo->GetEntries();
> >> cout << nentries << endl;
> >>
> >> for (Int_t i=0; i<nentries; ++i)
> >> {
> >> b_Temperature->GetEntry(i);
> >> cout << Temperature.size() << endl;
> >> /*
> >> for (vector<double>::iterator it = Temperature.begin();
> >> it != Temperature.end();
> >> ++it)
> >> {
> >> cout << *it << '\t';
> >> }
> >> */
> >> cout << endl;
> >> }
> >>
> >> delete tempo;
> >> }
> >>
> >> void temperature()
> >> {
> >> temperature_w();
> >> temperature_r();
> >> }
> >
>
>
>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET