Typical forms of userData

In addition to the points made above, there are a few more section to add if you are adding "userData" (reduced area detector data).  SmallDataProducer_userData.py has examples for the most standard requests. Parameters that are important for the production (ROI boundaries, centers for azimuthal projections,...) are stored in the "UserDataCfg" subdirectory.

A most current example of a producer file that show how to add both "pre packaged" feature extraction as well as more free form user data can be found in github:
https://github.com/slac-lcls/smalldata_tools/blob/master/examples/SmallDataProducer_userData.py

Each of the supported feature extraction/data reduction mechanism is described in their own subpages.
The common structure of adding user data is the addition of a "DetObject" for each detector you would like to extract information from to the producer python file. The relevant lines look like this:

 

 

have_cs140_0 = checkDet(env, 'cs140_0')
if have_cs140_0:
    cs140_0 = DetObject('cs140_0' ,ds.env(), int(run), common_mode=1, name='vonHamos')
    cs140_0.<feature extraction function>                                  
    dets.append(cs140_0)
This structure allows detectors to be only processed when they appear. We loop over the list of DetObjects in the main event loop and for each detector, we get the data and attach it to the detector objects. This is followed by a loop through the list of data extraction methods that have been added in the code block above. 
Only the first three parameters in the DetObject definition are necessary. The name will default to the alias of the detector. The common_mode will default to the typically best one. The currently recommended methods are listed below:

The common mode corrections are described <here> and DetObject simply wraps this.