I am trying to figure out how to fill a Tree in one object with a
TClonesArray from another object.
My code is crashing when I try to do the copying.
In my main class, I define a tree with a branch, with a TClonesArray of
objects in it:
class MainSim
{
TTree* SimTree;
TClonesArray* CloneXftpixel;
xft2Lpixel* xftpixelB;
...
}
MainSim::MainSim()
{
CloneXftpixel = new TClonesArray("xft2Lpixel");
SimTree = new TTree("T","SimTree");
SimTree->Branch("xft2Lpixel",&CloneXftpixel,32000,2);
...
}
I then fill the TClonesArray in another class, like :
class FinderChip
{ TClonesArray* CloneXftpixel;
xft2Lpixel* xft2pixelF;
int iPixel;
...
}
FinderChip::FillBlock()
{
iPixel++;
xft2pixelF = new ((*CloneXftpixel)[iPixel]) xft2Lpixel;
xft2pixelF->Chip = this->COT_chip;
...
}
Now, I want to fill the SimTree with the array of xft2Lpixels from the
FinderChip object.
But I have many FinderChip objects, with any number of xft2pixelF
objects, so I have to gather them by checking the iPixel counter for
each FinderChip :
MainSim::FillTree()
{
CloneXftpixel->Clear()
for(int nbrd=0; nbrd<8; nbrd++) {
for (int nchp=0;nchp<8;nchp++) {
int nPix =
XFTSystem->finderCrate[crate]->FinderBoard2_4Elements[nbrd]-
>finderChipElements[nchp]->iPixel;
if (nPix > 0)
CloneXftpixel =
(TClonesArray*)XFTSystem->finderCrate[crate]-
>FinderBoard2_4Elements[nbrd]->finderChipElements[nchp]->CloneXftpixel-
>Clone();
}
}
SimTree->Fill()
This compiles and runs, but crashes filling the CloneXftpixel in the
FillTree() method.
Instead of the if (nPix>0), I also tried to do this with a loop as in
the At() statement :
for (int i=0; i < nPix; nPix++) {
xftpixelB =
(xft2Lpixel*)XFTSystem->finderCrate[crate]-
>FinderBoard2_4Elements[nbrd]->finderChipElements[nchp]->CloneXftpixel-
>At(i);
}
but this crashed in the same place.
What is the correct way to do this ?
Cheers,
Ben
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:06 MET