Hi Tom,
On Thu, 2 Aug 2001 16:41:17 +0000 (UTC)
Thomas Feser <tfeser@student.physik.uni-mainz.de> wrote
concerning ": [ROOT] Accessing TObjects in a TClonesArray":
> I say:
>
> om_values = new TClonesArray("cand", 500);
> for (Int_t i = 0; i < 500; i++)
> new(om_values[i]) cand(0.,0.,0.,0,0.,0);
There's an error here, it should be
TClonesArray* om_values = new TClonesArray("cand", 500);
for (Int_t i = 0; i < 500; i++)
new((*om_values)[i]) cand(0.,0.,0.,0,0.,0);
^^^^^^^^^^^^
||||||||||||
Note the explicit derefence.
For the same job you can also use TClonesArray::ExpandAndCreate (I
think that's the name), whic will call the default constructor for
class cand, and so you can access them later on.
But why initialise your array to a specific size? Why not create the
objects on demand, which is much more efficient anyway.
> ("cand" is the name of a class derived from TObject.)
>
> Then comes my actual analysis. For every event, I want to define the
> members of om_values[i], so my idea was:
>
> for (Int_t i = 0; om_values->After(current) != 0;
> current = om_values->After(current)) {
> i++;
> ...
It's much easier to loop over the TClonesArray, by doing
TIter next(om_values);
cand *o = 0;
while((o = (cand*)next())) {
// Do something to o
...
}
Yours,
Christian -----------------------------------------------------------
Holm Christensen Phone: (+45) 35 35 96 91
Sankt Hansgade 23, 1. th. Office: (+45) 353 25 305
DK-2200 Copenhagen N Web: www.nbi.dk/~cholm
Denmark Email: cholm@nbi.dk
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:54 MET