Reader¶
hipo::reader¶
Primary entry point for reading HIPO files.
Construction & Opening¶
reader();
reader(const char *file); // open on construction
void open(const char *filename);
Dictionary¶
void readDictionary(dictionary& dict);
Loads schema definitions from the file header. Must be called after open().
Event Iteration¶
bool next(); // advance to next event
bool next(event& evt); // advance and fill event
bool next(banklist& list); // advance and fill banks directly
bool hasNext();
Reading¶
void read(event& evt); // read current event into evt
void getStructure(structure& str, int group, int item);
Banklist Convenience¶
banklist getBanks(std::vector<std::string> names);
Creates a vector of bank objects from schema names. Use with next(banklist) for clean iteration:
auto list = reader.getBanks({"REC::Particle", "REC::Event"});
while (reader.next(list)) {
// list[0] = REC::Particle, list[1] = REC::Event
}
Navigation¶
void gotoEvent(int eventNumber);
void gotoRecord(int recordNumber);
void rewind();
gotoEvent() uses the file trailer index for O(log R) random access.
User Metadata¶
std::string readUserConfig(const char *key);
Tag Filtering¶
void setTags(std::vector<long> tags);
Only read events with matching tags. Tags are set before iteration begins.
Info¶
int getEventCount(); // total events in file (from index)
int getNRecords(); // number of records
void setVerbose(int level);
void about(); // print file info
hipo::readerIndex¶
Manages event-to-record mapping for navigation. Used internally by reader.
bool canAdvance();
void advance();
void loadRecord();
void gotoEvent(int event);
void gotoRecord(int record);
int getEventNumber();
int getRecordNumber();
int getMaxEvents();
Reading Patterns¶
Pattern 1: Event-based¶
hipo::reader reader;
reader.open("data.hipo");
hipo::dictionary dict;
reader.readDictionary(dict);
hipo::bank particles(dict.getSchema("REC::Particle"));
hipo::event event;
while (reader.next()) {
reader.read(event);
event.read(particles);
for (int row = 0; row < particles.getRows(); row++) {
int pid = particles.getInt("pid", row);
}
}
Pattern 2: Banklist (preferred)¶
auto list = reader.getBanks({"REC::Particle", "REC::Event"});
while (reader.next(list)) {
int nparts = list[0].getRows();
// ...
}
Pattern 3: Random Access¶
reader.gotoEvent(5000);
reader.read(event);
event.read(particles);