Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. We don't need to number Configure:0000 and Run:0000
    1. we only translate one run per file.
    2. Lets make a root group called Data. Main groups:

      /Data

      /Data/Run

  2. Make new group for Configure Data
    1. Now, we have

      /Configure:0000/TypeA

      /Configure:0000/TypeB

      /Configure:0000/Run:0000

      why not put all Config data, TypeA, TypeB in one place?

      /Data

      /Data/Config   this in turn will have TypeA and TypeB as children

      /Data/Run

  3. Put Epics in its own group and remove Epics Source name with Arch from Schema

    1. /Data/EpicsConfig

      /Data/Config

      /Data/Run
      /Data/Run/Step:0000/Epics/pvName

  4. Invert Type/Src relationship

    1. /Data/Config/SrcA/TypeA

      /Data/Config/SrcA/TypeB

      /Data/Config/SrcB/TypeA

  5. Use DAQ aliases when possible.

    /Data/Config/alias  

    /Data/Config/alias/TypeA

    /Data/Config/alias/TypeB

    /Data/Config/SrcB/TypeA

  6. Translator option for a alias.
    Sometimes inverting type/src makes it harder to find data. Allow users An example is timetool data. It will be attached to a source like opal_1, but the user may not know this. They will be looking for timetool data and now they have to go through all the sources, for all the ipimb's, etc. The thought is to allow the user to specify a one group alias name for a src/type combination

    Having TimeTool::DataV2 under opal_1 is confusing, users just want the timetool data

    . So, while the hdf5 file has
    /Data/Run/Step:0000/
    /Data/

    Config

    Run/Step:0000/opal_1/

    TimeToolConfig

    TimeToolData
    we'll also create
    /Data/Run/

    Config/TimeToolConfig       

    Step:0000/TimeToolData       {Soft Link to}   /Data/Run/

    Config

    Step:0000/opal_1/

    TimeToolConfig

    TimeToolData

  7. Use type aliases in place of full C++ type names with version

    1. Basically, we will eliminate the V* and the :: from the typenames

    2. see section below for all aliases

  8. Use Step:000x rather than CalibCycle:000x

  9. separate config and epics in steps

    1. /Data/Run/Step:0000/Config

      /Data/Run/Step:0000/Epics

  10. Psana Module Keystrings treated like types

    1. if a module does

      evt.put(myndarray,src,"mykey")

      then we translate

      /Data/Run/Step:0000/src/mykey

...

Problems/Issues/Surprises

Collisions

Group Name Collisions

A group name collision occurs when the Translator has already made a group for one kind of data, when all of a sudden another kind of data comes along with the same name.

Presently, there should Presently, there should not be a collision. If one happens, it is treated as a fatal error.

...

That means one can always add a new TypeName parallel to the list of existing typenames, as long as the Translator uses a fully qualified C++ typename for the group name.Likewise for DAQ sources - but we currently do simplify some of these, in particular the messy sources that have a distinct ipaddress in them from each stream.group name.

Likewise for DAQ sources - but we currently do simplify some of these, in particular the messy sources that have a distinct ipaddress in them from each stream.

An example of a collision would be

  • Daq Alias called noSrc
  • user does evt.put(myndarray,'mykey')

The Translator uses the string noSrc for user data without a source - collision.

Another example would be

  • user does evt.put( myarray, psana.Source('cspad_front'), "CsPadElement")    # myarray is a ndarray
  • user does evt.put( mystring, psana.Source('cspad_front'), 'CsPadElement")    # mystring is a Python string
  • The xtc files include CsPad::DataV2 from source 'cspad_front'

All three of these want to go to /Data/Run/Step:0000/cspad_front/CsPadElement

I think though, collisions will be rare and most likely something a user can change by specifying different output keys for the psana modules they load. So the default will be to throw a fatal error, but I'll add an option to make this a non-fatal error and have the Translator rename the colliding group.

...

  1. Rename the first, then the users gets the original messy names CsPad::ElementV1 and CsPadElementV2. However if reading while writing ever works, this seems very problematic. I was What if you started reading from a group that no longer existsgot renames? I don't like it.
  2. So making  a new name for the second - CsPadElement_01 - this seems more reasonable.

...

/Data/Config/evr0/Evr                            daq alias
/Data/Config/NoDetector.0:Evr.1/Evr      no alias