#include #include "TClonesArray.h" #include "TObject.h" #include "TError.h" #include "Rtypes.h" const unsigned nComponents = 10; const unsigned nParticles = 100; struct Particle : TObject { double data_[nComponents]; ClassDef(Particle, 0) }; ClassImp(Particle) struct Event : TObject { Event(); ~Event(); void AddParticle(const double *data); void Clear(Option_t * opt); unsigned nActive_; TClonesArray particles_; ClassDef(Event, 0) }; ClassImp(Event) //______________________________________________ Event::Event() : nActive_(0), particles_("Particle", nParticles) { std::cout<<"Event::Event(), this == "<(particles_.ConstructedAt(nActive_++)); for (unsigned i = 0; i < nComponents; ++i) p->data_[i] = data[i]; } //______________________________________________ void Event::Clear(Option_t * /*not used*/) { particles_.Clear("C"); nActive_ = 0; } //______________________________________________ void cla() { //Test. const unsigned int nEvents = 10; TClonesArray events("Event", nEvents); double dummy[nComponents] = {}; while (true) { for (unsigned i = 0; i < 1000; ++i) { for (unsigned j = 0; j < nEvents; ++j) { Event * const newEvent = static_cast(events.ConstructedAt(j));//Create or reuse. for (unsigned k = 0; k < nParticles; ++k) newEvent->AddParticle(dummy); } events.Clear("C"); } char c = 0; std::cout<<"Enough?\n"; std::cin>>c; if (c == 'y') break; } }