Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: moved from comment to part of the document (for printing)

...

  • Currently the mapping between blockname and blocktype is stored only in the EventHeader. This makes it hard to add additional information into the event. Frank proposes storing BlockName#Blocktype where we currently store blockname.
  • Currently SIO pointers can only point within the same block. We need the ability for pointers to point between blocks or even files.

Possible implementation

  • To implement the 'on demand' reading of LCIO collections we could store a fixed mapping of collection types and keys (names) to records in the first record. This information would then be used to read only requested blocks: when LCEvent->getCollection("MyHits") is called by the user the collection type and record is retrieved from that mapping. Later this could be extended to also automatically open another file that might have the data (through some appropriate file directory that has been created beforehand).
    The users would have to specify the mapping before opening a file with the LCWriter,e.g.
    LCWriter wrt ;
    wrt->register("montecarlo", LCIO::MCPARTICLE, "MCParticle" ) ;
    wrt->register("montecarlo", LCIO::SIMCALORIMETERHIT ) ;
    //..
    This would be similar to creating branches in root.
    If we introduce such a free but fixed (for any one file) mapping we would not need the additional "BlockKey#BlockType" - so the only change to the SIO format would be the extra 64-bit record key.