// // This script is a first version to read, with ROOT, a ELYSE.root // file having the "TTree within TTree" of the ELYSE_batch // progrem (see Analysis.cxx). // But the below way to read the data has clearly a HUGE // memory consumption problem that someone can see by using // the "top" program on a UNIX. // // Usage : // OS> // ( OS> root batch_dummy.C ) // OS> root analyis_leaks.C // // G.Barrand // void analysis_leaks() { TFile* f = new TFile("ELYSE.root"); TTree* tEvent = (TTree*)f->Get("Event"); //declare Non subTuple part Int_t eventId,inputEvtId, interMode, vtxVol; tEvent->SetBranchAddress("eventId",&eventId); tEvent->SetBranchAddress("inputEvtId",&inputEvtId); tEvent->SetBranchAddress("interMode",&interMode); tEvent->SetBranchAddress("vtxVol",&vtxVol); Int_t nPart,leptonIndex, protonIndex; tEvent->SetBranchAddress("nPart",&nPart); tEvent->SetBranchAddress("leptonIndex",&leptonIndex); tEvent->SetBranchAddress("protonIndex",&protonIndex); Int_t nHits; tEvent->SetBranchAddress("nHits",&nHits); Int_t nDigits; Double_t sumPE; tEvent->SetBranchAddress("nDigits",&nDigits); tEvent->SetBranchAddress("sumPE",&sumPE); TTree* Event_vtxPos = new TTree(); tEvent->SetBranchAddress("vtxPos",&Event_vtxPos); Double_t vx,vy,vz; //The Track Event:subTuple part TTree* Event_track = new TTree(); tEvent->SetBranchAddress("track",&Event_track); Int_t pId,parent; Float_t timeStart; Double_t mass, pTot, ETot; Int_t startVol, stopVol; //The Direction Track:subTuple TTree* Track_direction = new TTree(); Double_t dx,dy,dz; //The Momentum Track:subTuple TTree* Track_momentum = new TTree(); Double_t px,py,pz; //The StartPos Track:subTuple TTree* Track_startPos = new TTree(); Double_t start_x,start_y,start_z; //The StopPos Track:subTuple TTree* Track_stopPos = new TTree(); Double_t stop_x,stop_y,stop_z; //The Hit Event:subTuple TTree* Event_hit = new TTree(); tEvent->SetBranchAddress("hit",&Event_hit); Int_t tubeId_hit; //JEC 16/1/06 Int_t totalPE; //The Pe Hit::subTuple TTree* Hit_pe = new TTree(); Float_t hit_time; Float_t trk_length; //NV 13/6/06 //The Digit Event:subTuple TTree* Event_digit = new TTree(); tEvent->SetBranchAddress("digit",&Event_digit); Int_t tubeId; Double_t digit_pe, digit_time; Int_t nEvent = (Int_t)tEvent->GetEntries(); std::cout << " nEvents = " << nEvent << endl; //Int_t nEvent = 10000; for (Int_t i=0; iReset(); Event_track->Reset(); Track_direction->Reset(); Track_momentum->Reset(); Track_startPos->Reset(); Track_stopPos->Reset(); Event_hit->Reset(); Hit_pe->Reset(); Event_digit->Reset(); //tEvent->ResetBranchAddresses(); */ tEvent->GetEntry(i); std::cout << ">>>>>>>>>>>>> Event{" << i << "}: " << " evt Id " << eventId // << " evt Input Id " << inputEvtId // << "\n interaction mode " << interMode // << " start in volume " << vtxVol << "\n" // <<" #tracks: " << nPart // <<" #hits: " << nHits // <<" #digits: " << nDigits << std::endl; Int_t nTracks = (Int_t)Event_track->GetEntries(); Int_t nTubeHits = (Int_t)Event_hit->GetEntries(); Int_t nTubeDigits = (Int_t)Event_digit->GetEntries(); //std::cout << "Verif: nTracks = " << nTracks // << " nTube Hits = " << nTubeHits // << " nTube Digits = " << nTubeDigits // << std::endl; Event_vtxPos->SetBranchAddress("x",&vx); Event_vtxPos->SetBranchAddress("y",&vy); Event_vtxPos->SetBranchAddress("z",&vz); // Have a brand new overwritten track TTree ; we have // to rebind its user variables : Event_track->SetBranchAddress("pId",&pId); Event_track->SetBranchAddress("parent",&parent); Event_track->SetBranchAddress("timeStart",&timeStart); Event_track->SetBranchAddress("mass",&mass); Event_track->SetBranchAddress("pTot",&pTot); Event_track->SetBranchAddress("ETot",&ETot); Event_track->SetBranchAddress("startVol",&startVol); Event_track->SetBranchAddress("stopVol",&stopVol); Event_track->SetBranchAddress("direction",&Track_direction); Event_track->SetBranchAddress("momentum",&Track_momentum); Event_track->SetBranchAddress("startPos",&Track_startPos); Event_track->SetBranchAddress("stopPos",&Track_stopPos); // Have a brand new overwritten hit TTree ; we have // to rebind its user variables : Event_hit->SetBranchAddress("tubeId",&tubeId_hit); //JEC 16/1/06 Event_hit->SetBranchAddress("totalPE",&totalPE); Event_hit->SetBranchAddress("pe",&Hit_pe); // Have a brand new overwritten digit TTree ; we have // to rebind its user variables : Event_digit->SetBranchAddress("tubeId",&tubeId); Event_digit->SetBranchAddress("pe",&digit_pe); Event_digit->SetBranchAddress("time",&digit_time); for (Int_t j=0; jGetEntry(j); Track_direction->SetBranchAddress("dx",&dx); Track_direction->SetBranchAddress("dy",&dy); Track_direction->SetBranchAddress("dz",&dz); Track_direction->GetEntry(0); Track_momentum->SetBranchAddress("px",&px); Track_momentum->SetBranchAddress("py",&py); Track_momentum->SetBranchAddress("pz",&pz); Track_momentum->GetEntry(0); Track_startPos->SetBranchAddress("x",&start_x); Track_startPos->SetBranchAddress("y",&start_y); Track_startPos->SetBranchAddress("z",&start_z); Track_startPos->GetEntry(0); Track_stopPos->SetBranchAddress("x",&stop_x); Track_stopPos->SetBranchAddress("y",&stop_y); Track_stopPos->SetBranchAddress("z",&stop_z); Track_stopPos->GetEntry(0); std::cout << "----> Tk{"<GetEntry(k); Hit_pe->SetBranchAddress("time",&hit_time); //Hit_pe->SetBranchAddress("length",&trk_length); //JEC 16/1/06 add the tubeId_hit info std::cout << "----> Hit{"<GetEntries(); ++ki) { Hit_pe->GetEntry(ki); std::cout << "<" << hit_time << ">" << "<" << trk_length << ">" ; } std::cout << std::endl; }//Loop on Hits //-------- // The Digits //-------- //for (Int_t l=0; lGetEntry(l); std::cout << "----> Digit{"<