//------------------------ detclass.C ---------------------------- // based on the example worked out in v2detclass.C and v2detclass.h #include "nestedclass.h" #include "TROOT.h" #include #include #include using std::cout; using std::endl; ClassImp(TMyAxis); ClassImp(TMySample); ClassImp(TMyEvent); void nestedclass(const char* ofname="nestedclass.root", Int_t num=10) { // just some numbers to have loops over Int_t setnaxes = 3; Int_t setnaxchannels = 32; Int_t splsize = 64; TFile* outfile = new TFile(ofname,"recreate"); cout << "detclass: output file " << outfile->GetName() << endl; TTree* tree = new TTree("t","detTree"); TMyEvent* event = new TMyEvent(); tree->Branch("event", &event, 8000, 3); cout << "nestedclass: start loop" << endl; // loop over the events for (int ievt=0; ievtclear(); // loop over samples Int_t nsample = 0; // just a counter for(int ispl = 0; ispl < splsize; ispl++){ cout << "\tEvent: " << ievt << " Sample: " << ispl; // add new object Sample for each sample // then we will have the loop over axes and add those axes // in the loop to each of the samples TMySample* spl = event->AddSample(ispl); cout << " was initialized\n"; for(int iax = 0; iax < setnaxes; iax++){ TMyAxis* axis = spl->AddAxis(iax, setnaxchannels); for(int ich = 0; ich < setnaxchannels; ich++){ axis-> chdata[ich] = 1.+ich*0.0625; // just some garbage values cout << "\t\t\tChannel[" << ich << "]: " << axis-> chdata[ich] << "\n"; } cerr << "\t\tAxis " << iax << " has been filled!\n"; }// end axis loop cerr << "\tSample " << ispl << " has been filled with " << spl->naxis << " axes\n"; nsample++; }// end loop samples in the event, three axes per each sample event->nevent = ievt; event->nsample = nsample; tree->Fill(); }// end events loop //delete event; cout<< "nestedclass: Filled events: " << tree->GetEntries() << endl; outfile = tree->GetCurrentFile(); if (outfile) { outfile->Write(); outfile->Close(); } }// end detclass()