Page History
...
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 | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
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):
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 int getFrameConfig (FrameDetector det); int getFrameValue(FrameDetector det, int& frameWidth, int& frameHeight, unsigned short*& image );
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:
Configures the information from the Fast CCD. Fills arguments with values depending on how the image/waveform data were taken. There is noCode 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);
getFccdValue
in main.hh, so I think you need to usegetFrameValue
for this .
- PnCCD camera (used by the CAMP collaboration):
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.Code Block int getPnCcdValue (int deviceId, unsigned char*& image, int& width, int& height );
deviceId
can be PnCcd0 or PnCcd1, width and height are the number of pixels in each direction.
...
- Ipimb detector (Intensity Position, Intensity Monitor Board)
Measures intensity and position of the beam from scattered X-rays.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);
- Encoder detector
Position of mirrors (SXI)Code Block int getEncoderConfig (Pds::DetInfo::Detector det, int iDevId); int getEncoderCount(Pds::DetInfo::Detector det, int iDevId, unsigned int& encoderCount);
- 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);
...