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