Hi,
I am using Root 3.00.06 on Windows NT/2000.
I am trying to update some existing Root classes to use TClonesArray rather
than TObjArray.
There is an Event class which contains a pointer to an object (called
AcdDigi) that contains a TClonesArray. Attached are the header files for
AcdDigi and Event clases, as well as the source for AcdDigi that defines a
method called Add(TileID *). I am having some problems with the Add
routine, where I am trying to use the new with placement as is necessary
for a TClonesArray.
I have tried to test the class by running the following macro in Root:
{
gSystem->Load("digiRootData.dll");
TFile *f = new TFile("digiroot.root", "RECREATE");
TTree *t = new TTree("T", "T");
Event *ev = new Event();
t->Branch("EventBranch", "Event", &ev, 32000, 1);
Int_t i;
for (i = 0; i<1; i++) {
TileID *id = new TileID(10);
ev->getACD()->Add(id);
ev->Clear();
}
delete ev;
f->Close();
delete f;
}
Here is the error message due to the ev->getACD()->Add(id) call:
root [0] .x testdigi.c
Error in <TList::AddFirst>: argument is a null pointer
I find that if I remove the static data members in the Event class - and
explicitly create/delete AcdDigi objects with each iteration, things work
just fine. I was hoping to use static data members in the Event class to
avoid new/delete for each iteration. Is this the cause of my problem - or
a symptom? The default constructor for the Event class looks like this:
AcdDigi *Event::m_staticAcd=0;
CalDigi *Event::m_staticCal=0;
TkrDigi *Event::m_staticTkr=0;
L1T *Event::m_staticL1T=0;
Event::Event() {
if (!m_staticAcd) m_staticAcd = new AcdDigi();
m_ACD = m_staticAcd;
if (!m_staticCal) m_staticCal = new CalDigi();
m_CAL = m_staticCal;
if (!m_staticTkr) m_staticTkr = new TkrDigi();
m_TKR = m_staticTkr;
if (!m_staticL1T) m_staticL1T = new L1T();
m_L1Trigger = m_staticL1T;
}
What am I doing incorrectly?
Thanks,
Heather
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:49 MET