Versions Compared

Key

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

...

The data recorded from the LCLS experiments are stored in xtc (extended containereXtended Tagged Container) files. These files contain "datagrams" which are an object of some type (TypeId) with associated status (Damage), source (Src) and extent (size). It is not an indexed file and does not provide random access, and can only be read seqencially, one event (shot) at a time.

...

Panel

package

description

ipimb

Intensity position, intensity monitor board
Four diodes positioned around the beam measure scattered X-rays. Based on the output voltage from the four sensors, we can determine pulse intensity and position of the beam.

encoder

SXR SLE Info (Laser Mirror Position Encoder)

pnCCD

for device used by the CAMP collaboration

acqiris

software for DAQ interface to the aquiris digitizer hardware. Waveform data.

camera

camera frames, configurations, feature extractions process

evr

Event EVent Receiver (event code, beam code?)

opal1k

for Opal1000 camera

pulnix

for Pulnix TM6740CL monochrome camera

control

utility for DAQ control, PV (process variable) control and monitoring

xtc

This package defines all the datagrams for the xtc file.

epics

DAQ interface to epics (process variables (PV))

bld defines some build data classes

DAQ interface to BeamLine Data, e.g. FeeGasDetEnergy, EBeam, PhaseCavity

princeton

software for DAQ interface to the Princeton camera

fccd

LBNL/ANL Fast CCD monochrome camera

cspad

CXI CsPad detector

lusi

LCLS Ultrafast Science Instruments Configs for diode, ipm, pim.

app

Xtc and Epics readers

...

This is the main control of the analysis, but you should avoid editing this file. After When all the all utility functions (in main) and user functions (in myana) have been read, main() is executed and controls the flow of the analysis. For each xtc file it calls

anafile(xtcname, maxevt, skip, iDebugLevel);

which iterates through the xtc file, keeps track of uses a special iterator to loop through all the datagrams in itthe file, and makes sure to execute your the beginjob() and event() functions that you implemented in myana.cc.

All the functionality needed to get data from the xtc file is (or should be) defined in main.cc and in the files it includes (including the pdsdata library).cc and in the files it includes (including the pdsdata library). You just need to call the appropriate functions from your myana.cc to extract the information you need from the file. Get an uppdated list of all the available functions by looking at main.hh (implementations are in main.cc).

...

Fetches waveform data from any of the Acquiris devices. Fills your arrays with the waveform time and voltage, and optionally gives you the trigger time. This should be called from within the event() function.

In the myana.cc example, we fetch data from the AmoITof device (AMO Ion Time-of-flight).
Other Acquiris devices (see main.hh for an up-to-date list):

Code Block
AMO:
   AmoIms      - ion momentum spectrometer (2 detectors, 7 channels)
   AmoGasdet   - gas detector (in the Front End Enclusure)
   AmoETof     - electron time-of-flight (5 detectors)
   AmoMbes     - magnetic bottle electron spectrometer
   AmoVmiAcq   - (Vmi = Velocity mappingmap imaging)
   AmoBpsAcq   - (Bps = Beam position screen)
   Camp        - for the CAMP experimental setup
SXR:
   SxrBeamlineAcq1
   SxrBeamlineAcq2
   SxrEndstationAcq1
   SxrEndstationAcq2

...

  • Opal1000 camera:
    getOpal1kValue (an alias for getFrameValue)
  • Which Pulnix6740CL camera?:
    getTm6740Value (an alias for getFrameValue)
  • FrameDetector (general):
    Code Block
    int getFrameConfig   (FrameDetector det);
    int getFrameValue(FrameDetector det, int& frameWidth, int& frameHeight, unsigned short*& image );
    
    Gives you the width and height (in pixels) of the image, and a pointer to the start of the pixel array of a Pds::Camera::FrameV1 object. Specify the detector (using an appropriate enum).
    Code Block
    Available frame detectors:
      AMO:
    Available frame detectors:
      AMO:
          AmoVmi        - velocity map AmoVmiimaging
          AmoBps1       - beam position screen
          AmoBps2       - beam position screen
      SXR:
          SxrBeamlineOpal1
          SxrBeamlineOpal2
          SxrEndstationOpal1
          SxrEndstationOpal2
          SxrFccd
       XPP:
          XppSb1PimCvd
          XppMonPimCvd
          XppSb3PimCvd
          XppSb4PimCvd
    

...

  • Fast CCD camera:
    Code Block
     int getFccdConfig(FrameDetector det, uint16_t& outputMode, bool& ccdEnable,
                      bool& focusMode, uint32_t& exposureTime,
                      float& dacVoltage1, float& dacVoltage2, float& dacVoltage3, float& dacVoltage4,
                      float& dacVoltage5, float& dacVoltage6, float& dacVoltage7, float& dacVoltage8,
                      float& dacVoltage9, float& dacVoltage10, float& dacVoltage11, float& dacVoltage12,
                      float& dacVoltage13, float& dacVoltage14, float& dacVoltage15, float& dacVoltage16,
                      float& dacVoltage17,
                      uint16_t& waveform0, uint16_t& waveform1, uint16_t& waveform2, uint16_t& waveform3,
                      uint16_t& waveform4, uint16_t& waveform5, uint16_t& waveform6, uint16_t& waveform7,
                      uint16_t& waveform8, uint16_t& waveform9, uint16_t& waveform10, uint16_t& waveform11,
                      uint16_t& waveform12, uint16_t& waveform13, uint16_t& waveform14);
    
    Configures the information from the Fast CCD. Fills arguments with values depending on how the image/waveform data were taken. There is no getFccdValue in main.hh, so I think you need to use getFrameValue for this(question) .
  • PnCCD camera (used by the CAMP collaboration):
    Code Block
     int getPnCcdValue (int deviceId, unsigned char*& image, int& width, int& height );
    
    This camera has 4 links, each link provides a 512 x 512 x 16 bit image. This function combines the four images to a single 1024 x 1024 x 16 bit image.
    deviceId can be PnCcd0 or PnCcd1, width and height are the number of pixels in each direction.

...

  • Ipimb detector (Intensity Position, Intensity Monitor Board)
    Code Block
      int getIpimbConfig(Pds::DetInfo::Detector det, int iDevId);
      int getIpimbVolts(Pds::DetInfo::Detector det, int iDevId,
                       float &channel0, float &channel1, float &channel2, float &channel3);
      
    Measures intensity and position of the beam from scattered X-rays.
  • Encoder detector
    Code Block
      int getEncoderConfig   (Pds::DetInfo::Detector det, int iDevId);
      int getEncoderCount(Pds::DetInfo::Detector det, int iDevId, unsigned int& encoderCount);
      
    Position of mirrors (SXI)
  • DiodeFex (Diode feature extraction)
    Code Block
      int getDiodeFexConfig (Pds::DetInfo::Detector det, int iDevId, float* base, float* scale);
      int getDiodeFexValue (Pds::DetInfo::Detector det, int iDevId, float& value);
      
  • Imp Ipm detector Fex (Imp Ipm feature extraction)
    Code Block
      int getIpmFexConfig   (Pds::DetInfo::Detector det, int iDevId,
                           float* base0, float* scale0,
                           float* base1, float* scale1,
                           float* base2, float* scale2,
                           float* base3, float* scale3,
                           float& xscale, float& yscale);
      int getIpmFexValue   (Pds::DetInfo::Detector det, int iDevId,
                          float* channels, float& sum, float& xpos, float& ypos);
       

...