Closed dudarboh closed 2 years ago
source /cvmfs/ilc.desy.de/sw/x86_64_gcc82_centos7/v02-02-02/init_ilcsoft.sh
gInterpreter->AddIncludePath("$LCIO"); gSystem->Load("${LCIO}/lib/liblcio.so"); gSystem->Load("${LCIO}/lib/liblcioDict.so");
#ifndef __CINT__ #include "lcio.h" #include "IO/LCReader.h" #include "IOIMPL/LCFactory.h" #include "EVENT/LCCollection.h" #include "EVENT/ReconstructedParticle.h" #include "EVENT/MCParticle.h" #include "EVENT/LCEvent.h" #include "UTIL/LCTOOLS.h" #endif #include "TH1F.h" #include "UTIL/LCRelationNavigator.h" // #include "TInterpreter.h" using namespace lcio; using namespace std; void bug(){ const char* file = "/pnfs/desy.de/ilc/prod/ilc/mc-2020/ild/dst-merged/1-calib/single/ILD_l5_o1_v02_nobg/v02-02-01/00015417/000/rv02-02-01.sv02-02-01.mILD_l5_o1_v02_nobg.E1-calib.I110175.Ps_310_p010.e0.p0.n001.d_dstm_15417_0.slcio"; IO::LCReader* lcReader = IOIMPL::LCFactory::getInstance()->createLCReader(); lcReader->setReadCollectionNames( { "PandoraPFOs"} ); lcReader->open(file); int nEventsInFile = lcReader->getNumberOfEvents(); int nRunsInFile = lcReader->getNumberOfRuns(); cout<<"File has "<<nRunsInFile<<" runs and "<<nEventsInFile<<" events"<<endl; vector<int> runNumbers; lcReader->getRuns(runNumbers); vector<int> eventNumbers; lcReader->getEvents(eventNumbers); for(auto run : runNumbers){ for(auto ev : eventNumbers){ cout<<"Run number "<<run<<" event number "<<ev<<endl; LCEvent* evt = nullptr; evt = lcReader->readEvent(run, ev); // evt = lcReader->readNextEvent(); if (evt == nullptr){ cout<<"Oops... I am empty :("<<endl; continue; } else{ LCCollection* pfoCol = evt->getCollection("PandoraPFOs"); cout<<"Yaay! I am working"<<endl; } } } lcReader->close(); }
run simply as root bug.C
root bug.C
/pnfs/desy.de/ilc/prod/ilc/mc-2020/ild/dst-merged/1-calib/single/ILD_l5_o1_v02_nobg/v02-02-01/00015417/000/rv02-02-01.sv02-02-01.mILD_l5_o1_v02_nobg.E1-calib.I110175.Ps_310_p010.e0.p0.n001.d_dstm_15417_0.slcio
Using evt = lcReader->readEvent(run, ev); always returns nullptr While using evt = lcReader->readNextEvent(); works fine..
evt = lcReader->readEvent(run, ev);
nullptr
evt = lcReader->readNextEvent();
Maybe falls in the else here:
else
https://github.com/iLCSoft/LCIO/blob/8f9e86b93b7d5d83221fabb872ed7e82f1638476/src/cpp/src/MT/LCReader.cc#L323-L336
Wasn't reading documentation carefully enough..
getEvents() returns both run number and event number... getRuns() is redundant then?
getEvents()
getRuns()
Closing as irrelevant
Reproducable in iLCSoft release:
source /cvmfs/ilc.desy.de/sw/x86_64_gcc82_centos7/v02-02-02/init_ilcsoft.sh
.rootlogon.C inlcudes
Reproducer bug.C
run simply as
root bug.C
Input file used as an example
/pnfs/desy.de/ilc/prod/ilc/mc-2020/ild/dst-merged/1-calib/single/ILD_l5_o1_v02_nobg/v02-02-01/00015417/000/rv02-02-01.sv02-02-01.mILD_l5_o1_v02_nobg.E1-calib.I110175.Ps_310_p010.e0.p0.n001.d_dstm_15417_0.slcio
Output vs expected
Using
evt = lcReader->readEvent(run, ev);
always returnsnullptr
While usingevt = lcReader->readNextEvent();
works fine..Guess:
Maybe falls in the
else
here:https://github.com/iLCSoft/LCIO/blob/8f9e86b93b7d5d83221fabb872ed7e82f1638476/src/cpp/src/MT/LCReader.cc#L323-L336