Skip to content
Snippets Groups Projects
Commit 6edd7745 authored by Johannes Elmsheuser's avatar Johannes Elmsheuser
Browse files

Merge branch 'POOLRootAccessTestsDev' into 'main'

POOLRootAccess: remove timeout on test, but added check on speed difference between...

See merge request atlas/athena!71176
......@@ -25,22 +25,19 @@ atlas_add_test( ut_basicRead_test
SOURCES test/ut_basicRead_test.cxx
INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
LINK_LIBRARIES ${ROOT_LIBRARIES} AsgMessagingLib AthAnalysisBaseCompsLib POOLRootAccessLib xAODEventInfo xAODRootAccess CxxUtils
POST_EXEC_SCRIPT noerror.sh
PROPERTIES TIMEOUT 30 )
POST_EXEC_SCRIPT noerror.sh )
atlas_add_test( ut_basicxAODRead_test
SOURCES test/ut_basicxAODRead_test.cxx
INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
LINK_LIBRARIES ${ROOT_LIBRARIES} POOLRootAccessLib xAODBase xAODEventInfo xAODRootAccess CxxUtils
POST_EXEC_SCRIPT noerror.sh
PROPERTIES TIMEOUT 30 )
POST_EXEC_SCRIPT noerror.sh )
atlas_add_test( ut_basicAlg_test
SOURCES test/ut_basicAlg_test.cxx
INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
LINK_LIBRARIES ${ROOT_LIBRARIES} POOLRootAccessLib AthAnalysisBaseCompsLib xAODEventInfo xAODRootAccess
POST_EXEC_SCRIPT noerror.sh
PROPERTIES TIMEOUT 30 )
POST_EXEC_SCRIPT noerror.sh )
atlas_add_test( basicRead_py
SCRIPT python ${CMAKE_CURRENT_SOURCE_DIR}/test/ut_basicRead_test.py
......
......@@ -84,7 +84,7 @@ TEvent::TEvent(EReadMode mode, const std::string& name) :
AAH::setProperty( m_evtLoop , "ClearStorePolicy", "BeginEvent" ).ignore(); //for interactive use of storegate
AAH::setProperty( m_evtLoop , "EvtSel", m_evtSelect.typeAndName() ).ignore(); //connect loop to selector
AAH::setProperty( m_evtLoop , "EvtStore", m_evtStore.typeAndName() ).ignore();//connect loop to store
AAH::setProperty( m_evtLoop , "EventPrintoutInterval", 999999999 ).ignore(); //disable printout (speeds up loop)
AAH::setProperty( m_evtLoop , "EventPrintoutInterval", 0 ).ignore(); //disable printout (speeds up loop)
if(m_evtSelect.type()=="Athena::xAODEventSelector") {
AAH::setProperty( m_evtSelect , "ReadMetaDataWithPool" , true).ignore(); //uses hybrid xAOD reading by default
......
......@@ -68,37 +68,24 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char* argv[]) {
std::cout << "mismatch in getEntries: " << maxEvt << " vs " << maxEvt2 << std::endl; return -1;
}
/*
std::cout << "doing preloop..." << std::endl;
//do a preloop loop through just to load the file for fair comparisons
for(int i=0;i<maxEvt2;i++) {
evt2.getEntry(i);
evt2.retrieve( evtInfo , "EventInfo" ).ignore();
evt2.retrieve( els, "Electrons" ).ignore();
evt2.retrieve( mus, "Muons" ).ignore();
evt2.retrieve( jets, "AntiKt4LCTopoJets" ).ignore();
for(int i=0;i<std::min(maxEvt,10000);i++) {
if(evt.getEntry(i)!=0) {
std::cout << "failed read of event " << i << std::endl; return -1;
}
evt.retrieve( evtInfo , "EventInfo" ).ignore();
evt.retrieve( els, "Electrons" ).ignore();
evt.retrieve( mus, "Muons" ).ignore();
evt.retrieve( jets, "AntiKt4EMPFlowJets" ).ignore();
}
std::cout << "...done.... now doing test..." << std::endl;
*/
std::cout << "doing xAODRootAccess test (using kClassAccess mode)...." <<std::endl;
evt2.getEntry(0);
TStopwatch st2;
st2.Start();
long val2[4] = {0,0,0,0};
for(int i=0; i< std::min(maxEvt2,10000); i++) {
evt2.getEntry(i);
evt2.retrieve( evtInfo , "EventInfo" ).ignore();
val2[0] += evtInfo->eventNumber();
evt2.retrieve( els, "Electrons" ).ignore();
val2[1] += els->size();
evt2.retrieve( mus, "Muons" ).ignore();
val2[2] += mus->size();
evt2.retrieve( jets, "AntiKt4EMPFlowJets" ).ignore();
val2[3] += jets->size();
}
st2.Stop();
st2.Print();
// for unclear reasons, must do POOL::TEvent loop first b.c. xAODRootAccess's TEvent
// seems to impact behaviour of the POOL::TEvent if its done first
// (result is that getEntry doesn't end up changing the event, so validation counts fail)
long val[4] = {0,0,0,0};
std::cout << "doing POOLRootAccess test (using kClassAccess mode)...." <<std::endl;
......@@ -106,7 +93,9 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char* argv[]) {
TStopwatch st;
st.Start();
for(int i=0; i< std::min(maxEvt,10000); i++) {
evt.getEntry(i);
if (evt.getEntry(i)!=0) {
std::cout << "Failed read of event " << i << std::endl; return -1;
}
evt.retrieve( evtInfo , "EventInfo" ).ignore();
val[0] += evtInfo->eventNumber();
evt.retrieve( els, "Electrons" ).ignore();
......@@ -118,8 +107,29 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char* argv[]) {
}
st.Stop();
st.Print();
std::cout << "xAODRootAccess Event rate = " << double(maxEvt2)/st2.RealTime() << " Hz " << std::endl;
std::cout << "POOLRootAccess Event rate = " << double(maxEvt)/st.RealTime() << " Hz" << std::endl;
std::cout << "doing xAODRootAccess test (using kClassAccess mode)...." <<std::endl;
evt2.getEntry(0);
TStopwatch st2;
st2.Start();
long val2[4] = {0,0,0,0};
for(int i=0; i< std::min(maxEvt2,10000); i++) {
evt2.getEntry(i);
evt2.retrieve( evtInfo , "EventInfo" ).ignore();
val2[0] += evtInfo->eventNumber();
evt2.retrieve( els, "Electrons" ).ignore();
val2[1] += els->size();
evt2.retrieve( mus, "Muons" ).ignore();
val2[2] += mus->size();
evt2.retrieve( jets, "AntiKt4EMPFlowJets" ).ignore();
val2[3] += jets->size();
}
st2.Stop();
st2.Print();
std::cout << "xAODRootAccess Event rate = " << double(std::min(maxEvt2,10000))/st2.RealTime() << " Hz " << std::endl;
std::cout << "POOLRootAccess Event rate = " << double(std::min(maxEvt,10000))/st.RealTime() << " Hz" << std::endl;
for(int i=0;i<4;i++) {
if(val[i] != val2[i]) {
......@@ -127,6 +137,14 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char* argv[]) {
}
}
// should be able to get within 25% of the xAODRootAccess read rate for such a simple I/O-limited job
// (TODO: use this test to profile athena and figure out why this threshold can't be higher)
if(st2.RealTime()*4 < st.RealTime()) {
std::cerr << " Athena event-loop is too slow " << std::endl;
return -1;
}
/*
TFile f1("ut_basicxAODRead_test.results.root","RECREATE");
TH1F* speed1 = new TH1F("speed1","xAODRootAccess Speed [Hz]",1,0,1);speed1->Sumw2();
TH1F* speed2 = new TH1F("speed2","POOLRootAccess Speed [Hz]",1,0,1);speed2->Sumw2();
......@@ -134,9 +152,8 @@ int main ATLAS_NOT_THREAD_SAFE (int argc, char* argv[]) {
speed2->SetBinContent(1,double(maxEvt)/st.RealTime());speed2->SetBinError(1,0.0001);
speed1->Write();speed2->Write();
f1.Close();
*/
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment