Page History
...
- We don't need to number Configure:0000 and Run:0000
- we only translate one run per file.
- Lets make a root group called Data. Main groups:
/Data
/Data/Run
- Make new group for Configure Data
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
Put Epics in its own group and remove Epics Source name with Arch from Schema
/Data/EpicsConfig
/Data/Config
/Data/Run
/Data/Run/Step:0000/Epics/pvName
Invert Type/Src relationship
/Data/Config/SrcA/TypeA
/Data/Config/SrcA/TypeB
/Data/Config/SrcB/TypeA
Use DAQ aliases when possible.
/Data/Config/alias
/Data/Config/alias/TypeA
/Data/Config/alias/TypeB
/Data/Config/SrcB/TypeA
Translator option for a alias.
Having TimeTool::DataV2 under opal_1 is confusing, users just want the timetool data
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. So, while the hdf5 file has
Config
/Data/Run/Step:0000/
/Data/Run/Step:0000/opal_1/
TimeToolConfigTimeToolData
Config/TimeToolConfig
we'll also create
/Data/Run/Step:0000/TimeToolData {Soft Link to} /Data/Run/
ConfigStep:0000/opal_1/
TimeToolConfigTimeToolData
Use type aliases in place of full C++ type names with version
Basically, we will eliminate the V* and the :: from the typenames
see section below for all aliases
Use Step:000x rather than CalibCycle:000x
separate config and epics in steps
/Data/Run/Step:0000/Config
/Data/Run/Step:0000/Epics
Psana Module Keystrings treated like types
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.
...
- 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.
- 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