You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Produced by psana/src/dgram.cc.

Accessed from psana event with a pattern like:

evt._dgrams[nDgram].detname[nSegment].drpClassName.attr1.attr2...

  • detname is defined by the hutch. For example: "xppcspad" or "xpphsd"
  • nSegment is an integer, denoting which portion of a larger detector this is (e.g. cspad panel number)
  • drpClassName is defined by the DRP segment-level software via the "Alg" parameter to xtcdata/xtcdata/xtc/ShapesData.hh:Names class.  For example: "raw", "fex", "roi1", "roi2"

A complication:  the different detector segments can be split over several datagrams (offline event-build) or be all in one datagram (online event-build)

Some Examples and Special Cases

From a conversation with Mona Uervirojnangkoorn on Aug. 27, 2020.

for epics scans:
dgram[0].scans[0].raw.motor2
det = Detector('motor2')
val = det(evt) (timestamp in the event is used to do lookup in stepstore)
could do:
val = det(step) (and get timestamp from the step to do stepstore lookup)


for epics values:
SIOC::SYS0::VARNAME maps to SIOC__SYS0__VARNAME (maybe)
dgram[0].epics[0].raw.SIOC::SYS0::VARNAME
Detector('SIOC::SYS0::VARNAME')
dgram[0].epics[0].raw.SIOC__SYS0__VARNAME
det = Detector('motor1')
val = det(evt)
for "jump" each detector owns a stepstore and the detector uses it to to return correct value.


for normal detectors:
dgram[0].tmoopal[0].raw
Detector('tmoopal')


proposal for configuration scans ... try to put it in the main detector interface:

det = Detector('tmoopal')
dgram[0].tmoopal[0].cfgscan.user.blacklevel (maybe cfgscan is similar to raw/fex: optionally present)
val = det.cfgscan.user.blacklevel(evt or step)
jumping works
"cfgscan" would be a detector base-class attribute only if being scanned
(no attribute if not being scanned!)

Implementation

1) Detectors, scan and epics, own EnvStore and their variables (e.g. motor1) an be accessed by det('motor1').

2) Detectors with cfgscan (configs[0].detName[0].cfgscan) also own EnvStore and the corresponding values (segment dependent) can be accessed by det.cfgscan.user.black_level(evt) for example.

This is done by EnvStore going through configs in __init__. Scan and epics EnvStores are hard-coded and any other detectors, if they have cfgscan in DrpClass level will also be there.

DetectorImpl uses EnvStore to decide if this detector should be added with hierarchical attributes so 2) can be achieved.

Naming

In general names should be python compatible containing only A-Z,a-z,0-9,_.  An exception is that ENUMDICT and ENUMVAL have special handling that requires a ":".  And I think if not alias is specified for epics variables then the ugly epics name is used.  This is handled correctly by psana for this special case, but it makes it difficult to enforce naming rules.


  • No labels