Versions Compared

Key

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

...

A limited number of devices are in use in LCLS, but new ones occasionally gets added, so if you see anything missing, let me know, and please see the Pyana or Psana for the most up to date information. You can also take a look at (the possibly outdated) pdsdata reference manual.

Basic code snippets are given below for how to access this data in pyana and psana. For more elaborate examples, see Pyana user examples, Psana User Examples - Old and the packages pyana_examples and psana_examples.

...

none

Data types: IpimbConfig, IpmFexConfig, IpimbData, IpmFex

Panel
titleAcqiris waveform digitizer

Data types: AcqConfig, AcqWaveform

Toggle Cloak
idacqiris_psana

Psana code fragments

Cloak
idacqiris_psana

Include data description for acqiris:

Code Block

#include "psddl_psana/acqiris.ddl.h"

Get the configuration object in the beginCalibCycle

member function:In the event

member function

, get the waveform for this event

:

Toggle Cloak
idacqiris_pyana
Pyana

Code Block
fragments
Cloak
idacqiris_pyana
Panel
titleIPIMB (Intensity Position and Intensity Monitoring Board)
Toggle Cloak
idipimb_psana
Psana code fragments

Cloak
idipimb_psana

Include the data description for IPIMBs

In the beginCalibCycle member function, get the configuration object for the IPIMB:

In the event member function, get the event data:


  Source src = configStr("source", "DetInfo(:Acqiris)");
  shared_ptr<Psana::Acqiris::ConfigV1> acqConfig = env.configStore().get(src, &m_src);

In the event member function, get the waveform for this event:

Code Block

  Pds::Src src;
  shared_ptr<Psana::Acqiris::DataDescV1> acqData = evt.get(m_src);
  if (acqData.get()) {
    // find matching config object
    shared_ptr<Psana::Acqiris::ConfigV1> acqConfig = env.configStore().get(m_src);
    // loop over channels
    int nchan = acqData->data_shape()[0];
    for (int chan = 0; chan < nchan; ++ chan) {
     const Psana::Acqiris::DataDescV1Elem& elem = acqData->data(chan);
     const ndarray<Psana::Acqiris::TimestampV1, 1>& timestamps = elem.timestamp();
     const ndarray<int16_t, 2>& waveforms = elem.waveforms();
  }
Cloak

Toggle Cloak
idacqiris

Toggle Cloak
idipimb_pyana
Pyana code fragments

Cloak
idipimb_pyana
none Panel
titleEncoder delay scanner

Data types: EncoderConfig, EncoderData

Toggle Cloak
idenc_psana
Psana code fragments

Cloak
idenc_psana

Include the data description for Encoder

In the beginCalibCycle member function, get the configuration object:

In the event member function, get the event data:

Toggle Cloak
idenc_pyana
Pyana code fragments

Cloak
idenc_pyana
none Panel
titleOpal1000 camera

Data types: Opal1kConfig, Frame

Toggle Cloak
idopal_psana
Psana code fragments

Cloak
idopal_psana

Include the data description for Encoder

In the beginCalibCycle member function, get the configuration object:

In the event member function, get the event data:

Toggle Cloak
idopal_pyana
Pyana code fragments

Cloak
idopal_pyana
none Panel
titlePulnix camera

Data types: TM6740Config, Frame

Toggle Cloak
idpulnix_psana
Psana code fragments

Cloak
idpulnix_psana

Toggle Cloak
idpulnix_pyana

Pyana code fragments

Cloak
id

pulnix

acqiris_pyana

Code Block
none

Panel
titlePrinceton Instruments camera

Data types: PrincetonConfig, PrincetonFrame

Toggle Cloak
idprinc_psana
Psana code fragments

Cloak
idprinc_psana
none

none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getAcqConfig(self.addr)
        self.channels = config.nbrChannels()

    def event(self, evt, env):
        for ch in self.channels: 
            acqData = evt.getAcqValue(self.addr, ch, env)
            time_wf =  acqData.timestamps()
            volt_wf = acqData.waveform()
Cloak

Get the configuration object in beginCalibCycle method (ConfigV1 or ConfigV2 or later depends on when your data was taken):

Get the image in the event method (FrameV1 or FrameV2 or later depends on when your data was taken):

Panel
titleIPIMB (Intensity Position and Intensity Monitoring Board)

Data types: IpimbConfig, IpmFexConfig, IpimbData, IpmFex

Toggle Cloak
idprinc_pyana
Pyana code fragments

Cloak
idprinc_pyana
none Panel
titleFCCD (Fast CCD) camera

Data types: FccdConfig, Frame

Toggle Cloak
idfccd_psana
Psana code fragments

Cloak
idfccd_psana

Toggle Cloak
idfccd_pyana
Pyana code fragments

Cloak
idfccd_pyana
none Panel
titlePnCCD camera

Data types: pnCCDconfig, pnCCDframe

Toggle Cloak
idpnccd_psana
Psana code fragments

Cloak
idpnccd_psana

Toggle Cloak
idpnccd_pyana
Pyana code fragments

Cloak
idpnccd_pyana
none Panel
titleCSPad (Cornell-SLAC Pixel Array Detector)

Data types: CspadConfig, CspadElement

Toggle Cloak
idcspadipimb_psana

Psana code fragments

Cloak
id

cspad

ipimb_psana

Toggle Cloak
idcspad_pyana
Pyana code fragments

Cloak
idcspad_pyana
none

To plot, take a look at examples in XtcExplorer for now.

Panel
titleMini CSPad (Cornell-SLAC Pixel Array Detector)

Include the data description for IPIMBs

Code Block

#include "psddl_psana/ipimb.ddl.h"

In the beginCalibCycle member function, get the configuration object for the IPIMB:

Code Block

Source m_src = configStr("source", "DetInfo(:Ipimb)");
shared_ptr<Psana::Ipimb::ConfigV1> config1 = env.configStore().get(m_src);

In the event member function, get the event data:

Code Block

shared_ptr<Psana::Ipimb::DataV1> data1 = evt.get(m_src);
Cloak

Data types: CspadConfig, Cspad2x2Element

Toggle Cloak
idmini_psana
Psana code fragments

mini_psana
Cloak
id

Toggle Cloak
idminiipimb_pyana

Pyana code fragments

Cloak
id

mini

ipimb_pyana

Code Block
none

Panel
titleTimepix camera

Data types: TimepixConfig, TimepixData

Toggle Cloak
idtimepix_psana
Psana code fragments

Cloak
idtimepix_psana

Toggle Cloak
idtimepix_pyana
Pyana code fragments

Cloak
idtimepix_pyana
none

BldData, beam line data

none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig( xtc.TypeId.Type.Id_IpimbConfig , self.addr )

    def event(self, evt, env):
        ipm_raw = evt.get(xtc.TypeId.Type.Id_IpimbData, self.addr )
        ipm_fex = evt.get(xtc.TypeId.Type.Id_IpmFex, self.addr )
Cloak

Data types: BldDataEBeam, BldDataEBeam0

Panel
titleEncoder delay scanner

Data types: EncoderConfig, EncoderData

Toggle Cloak
idenc

Panel
titleBeam Energy
Toggle Cloak
idebeam_psana
Psana code fragments

Cloak
idebeam_psana

Toggle Cloak
idebeam_pyana
Pyana code fragment

Cloak
idebeam_pyana
none Panel
titleGas Detector

Data types: FEEGasDetector

Toggle Cloak
idgasd_psana

Psana code fragments

Cloak
id

gasd

enc_psana

Toggle Cloak
idgasd_pyana
Pyana code fragments

Cloak
idgasd_pyana
none Panel
titlePhase Cavity

Include the data description for Encoder

Code Block

#include "psddl_psana/encoder.ddl.h"

In the beginCalibCycle member function, get the configuration object:

Code Block

Source m_src = configStr("source", "DetInfo(:Encoder)");
shared_ptr<Psana::Encoder::ConfigV1> config1 = env.configStore().get(m_src);

In the event member function, get the event data:

Code Block

shared_ptr<Psana::Encoder::DataV1> data1 = evt.get(m_src);
Cloak

Data types: PhaseCavity

Toggle Cloak
idpc_psana
Psana code fragments

none
Cloak
idpc_psana

Toggle Cloak
idpcenc_pyana

Pyana code fragments

Cloak
id

pc

enc_pyana

none

Panel
titleShared IPIMB

Data types: SharedIpimb, BldDataIpm

Toggle Cloak
idshared_psana
Psana
Code Block
fragments

cloak

none

idshared_psana

Toggle Cloak
idshared_pyana
Pyana code fragments

Cloak
idshared_pyana
none

ControlData

ControlPV, MonitorPV

EPICS process variables

...

Data types:

Toggle Cloak
idepics_psana
Psana code fragments

Cloak
idepics_psana
none

Toggle Cloak
idepics_pyana
Pyana code fragments

...

idepics_pyana

...

EvrData, event receiver data

none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig( xtc.TypeId.Type.Id_EncoderConfig , self.addr )
        self.channel = None
        try:  # only for ConfigV2 and higher
            self.channel = 0
            while ( (config._chan_mask & (1<<self.channel==0 )):
                self.channel+=1
        except: 
            pass

    def event(self, evt, env):
        data = evt.get(xtc.TypeId.Type.Id_EncoderData, self.addr )
        if self.channel is not None:
            value = encoder.value( self.channel )
        else :
            value = encoder.value() )
Cloak

Panel
titleOpal1000 camera

Data types: Opal1kConfig, Frame

Toggle Cloak
idopal_psana

Psana code fragments

Cloak
idopal_psana

Include the data description for Encoder

Code Block

#include "psddl_psana/opal1k.ddl.h"

In the beginCalibCycle member function, get the configuration object:

Code Block

Source m_src = configStr("source", "DetInfo(:Opal1000)");
shared_ptr<Psana::Opal1k::ConfigV1> config1 = env.configStore().get(m_src);

In the event member function, get the event data:

Code Block

shared_ptr<Psana::Opal1k::DataV1> data1 = evt.get(m_src);
Cloak

Toggle Cloak
idopal_pyana

Pyana code fragments

Cloak
idopal_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_Opal1kConfig, self.addr )

    def event(self, evt, env):
        frame = evt.get(TypeId.Type.Id_Frame, self.addr )
        image = frame.data()
Cloak

Panel
titlePulnix camera

Data types: TM6740Config, Frame

Toggle Cloak
idpulnix_psana

Psana code fragments

Cloak
idpulnix_psana

Cloak

Toggle Cloak
idpulnix_pyana

Pyana code fragments

Cloak
idpulnix_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_TM6740Config, self.addr )

    def event(self, evt, env):
        frame = evt.get(TypeId.Type.Id_Frame, self.addr )
        image = frame.data()
Cloak

Panel
titlePrinceton Instruments camera

Data types: PrincetonConfig, PrincetonFrame

Toggle Cloak
idprinc_psana

Psana code fragments

Cloak
idprinc_psana

Code Block
none
none

#include "psddl_psana/princeton.ddl.h"

Get the configuration object in beginCalibCycle method (ConfigV1 or ConfigV2 or later depends on when your data was taken):

Code Block

   shared_ptr<Psana::Princeton::ConfigV2> config = env.configStore().get("DetInfo(:Princeton)");

Get the image in the event method (FrameV1 or FrameV2 or later depends on when your data was taken):

Code Block

   shared_ptr<Psana::Princeton::FrameV2> frame = evt.get("DetInfo(:Princeton)");
   const ndarray<uint16_t, 2>& data = frame->data();
   // data is now a 2d array of 16-bit integers. Access it's elements in the usual array fashion: data[i][j]
Cloak

Toggle Cloak
idprinc_pyana

Pyana code fragments

Cloak
idprinc_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_PrincetonConfig, self.addr )

    def event(self, evt, env):
        frame = evt.get(TypeId.Type.Id_PrincetonFrame, self.addr )
        image = frame.data()
Cloak

Panel
titleFCCD (Fast CCD) camera

Data types: FccdConfig, Frame

Toggle Cloak
idfccd_psana

Psana code fragments

Cloak
idfccd_psana

Cloak

Toggle Cloak
idfccd_pyana

Pyana code fragments

Cloak
idfccd_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_FccdConfig, self.addr )

    def event(self, evt, env):
        frame = evt.get(TypeId.Type.Id_Frame, self.addr )
        image = frame.data()

        # convert to 16-bit integer
        image.dtype = np.uint16
Cloak

Panel
titlePnCCD camera

Data types: pnCCDconfig, pnCCDframe

Toggle Cloak
idpnccd_psana

Psana code fragments

Cloak
idpnccd_psana

Cloak

Toggle Cloak
idpnccd_pyana

Pyana code fragments

Cloak
idpnccd_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_pnCCDconfig, self.addr )

    def event(self, evt, env):
        frame = evt.get(TypeId.Type.Id_pnCCDframe, self.addr )
        image = frame.data()
Cloak

Panel
titleCSPad (Cornell-SLAC Pixel Array Detector)

Data types: CspadConfig, CspadElement

Toggle Cloak
idcspad_psana

Psana code fragments

Cloak
idcspad_psana

Cloak

Toggle Cloak
idcspad_pyana

Pyana code fragments

Cloak
idcspad_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_CspadConfig, self.addr )

        self.sections = map(config.sections, range(4))
        # keep this list of sections in use by each quad

    def event(self, evt, env):
        elements = evt.get(TypeId.Type.Id_CspadElement, self.addr )
        # elements is a python list of CspadElement objects

        # To fully populate a 4x8x185x388 array (standard used by pedestal files),
        # create array of zeros and fill in what we have
        pixel_array = np.zeros((4,8,185,388), dtype="uint16")
        for e in elements :
            data = e.data()        # 8x185x388
            quad = e.quad()        # integer
            for n,s in enumerate(self.sections[quad]) :
                pixel_array[quad,s] = data[n]

To plot, take a look at examples in XtcExplorer for now.

Cloak

Panel
titleMini CSPad (Cornell-SLAC Pixel Array Detector)

Data types: CspadConfig, Cspad2x2Element

Toggle Cloak
idmini_psana

Psana code fragments

Cloak
idmini_psana

Cloak

Toggle Cloak
idmini_pyana

Pyana code fragments

Cloak
idmini_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_CspadConfig, self.addr )

    def event(self, evt, env):
        element = evt.get(TypeId.Type.Id_Cspad2x2Element, self.addr )
        data = element.data()
        # data is now a 3D array: 185x388x2 
Cloak

Panel
titleTimepix camera

Data types: TimepixConfig, TimepixData

Toggle Cloak
idtimepix_psana

Psana code fragments

Cloak
idtimepix_psana

Cloak

Toggle Cloak
idtimepix_pyana

Pyana code fragments

Cloak
idtimepix_pyana

Code Block
none
none

from pypdsdata.xtc import TypeId

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        config = env.getConfig(TypeId.Type.Id_TimepixConfig, self.addr )

    def event(self, evt, env):
        frame = evt.get(TypeId.Type.Id_TimepixData, self.addr )
        image = frame.data()
Cloak

BldData, beam line data

Panel
titleBeam Energy

Data types: BldDataEBeam, BldDataEBeam0

Toggle Cloak
idebeam_psana

Psana code fragments

Cloak
idebeam_psana

Cloak

Toggle Cloak
idebeam_pyana

Pyana code fragment

Cloak
idebeam_pyana

Code Block
none
none

    def __init__ ( self ):
        pass

    def beginjob(self, evt, env):
        pass

    def event(self, evt, env):
        ebeam = evt.getEBeam()
        if ebeam is not None: 
            beamDmgM = ebeam.uDamageMask
            beamChrg = ebeam.fEbeamCharge
            beamEnrg = ebeam.fEbeamL3Energy
            beamPosX = ebeam.fEbeamLTUPosX
            beamPosY = ebeam.fEbeamLTUPosY
            beamAngX = ebeam.fEbeamLTUAngX
            beamAngY = ebeam.fEbeamLTUAngY           
Cloak

Panel
titleGas Detector

Data types: FEEGasDetector

Toggle Cloak
idgasd_psana

Psana code fragments

Cloak
idgasd_psana

Cloak

Toggle Cloak
idgasd_pyana

Pyana code fragments

Cloak
idgasd_pyana

Code Block
none
none

    def __init__ ( self ):
        pass

    def beginjob(self, evt, env):
        pass

    def event(self, evt, env):
        fee_energy_array = evt.getFeeGasDet()
        # an array of 4 energy measurements
Cloak

Panel
titlePhase Cavity

Data types: PhaseCavity

Toggle Cloak
idpc_psana

Psana code fragments

Cloak
idpc_psana

Code Block
none
none

#include "psddl_psana/bld.ddl.h"

ClassName::ClassName(const std::string& name)
  : Module(name)
{
   m_cavSrc = configStr("phaseCavSource", "BldInfo(PhaseCavity)");
}

void
ClassName::event(Event& evt, Env& env)
{
  shared_ptr<Psana::Bld::BldDataPhaseCavity> myPhaseCavity = evt.get(m_cavSrc);
  if (myPhaseCavity.get()) {
    WithMsgLog(name(), info, str) {
      str << "Bld::BldDataPhaseCavity:"
          << "\n  fitTime1=" << myPhaseCavity->fitTime1()
          << "\n  fitTime2=" << myPhaseCavity->fitTime2()
          << "\n  charge1=" << myPhaseCavity->charge1()
          << "\n  charge2=" << myPhaseCavity->charge2();
    }
}
Cloak

Toggle Cloak
idpc_pyana

Pyana code fragments

Cloak
idpc_pyana

Code Block
none
none

    def __init__ ( self ):
        pass

    def beginjob(self, evt, env):
        pass

    def event(self, evt, env):
        pc = evt.getPhaseCavity()
        if pc is not None:
            fitTime1 = pc.fFitTime1 
            fitTime2 pc.fFitTime2 
            charge1 = pc.fCharge1 
            charge2 = pc.fCharge2 
Cloak

Panel
titleShared IPIMB

Data types: SharedIpimb, BldDataIpm

Toggle Cloak
idshared_psana

Psana code fragments

Cloak
idshared_psana

Cloak

Toggle Cloak
idshared_pyana

Pyana code fragments

Cloak
idshared_pyana

Code Block
none
none

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        pass

    def event(self, evt, env):
        ipm = evt.get(xtc.TypeId.Type.Id_SharedIpimb, self.addr )
        if ipm is not None: 

            # raw counts
            ch0 = ipm.ipimbData.channel0Volts()
            ch1 = ipm.ipimbData.channel1Volts()
            ch2 = ipm.ipimbData.channel2Volts()
            ch3 = ipm.ipimbData.channel3Volts()
          
            # fex values and derived quantities
            channels = ipm.ipmFexData.channel
            sum = ipm.ipmFexData.sum
            xpos = ipm.ipmFexData.xpos
            ypos = ipm.ipmFexData.ypos
Cloak

ControlData

ControlPV, MonitorPV

EPICS process variables

Panel
title

Data types:

Toggle Cloak
idepics_psana

Psana code fragments

Cloak
idepics_psana

Code Block
none
none
Cloak

Toggle Cloak
idepics_pyana

Pyana code fragments

Cloak
idepics_pyana

Code Block
none
none

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        pass

    def event(self, evt, env):
        pass
Cloak

EvrData, event receiver data

none

Panel
titleEvent Receiver

Data types: EvrConfig, EvrData

Toggle Cloak
idevr_psana

Psana code fragments

Cloak
idevr_psana

Code Block
none
none

#include "psddl_psana/evr.ddl.h"
void MyClass::beginCalibCycle(Event& evt, Env& env)
{
   shared_ptr<Psana::EvrData::ConfigV1> config = env.configStore().get(source);
   if (config.get()){
        // do something with the config object here (see examples in psana_examples/src/DumpEvt.cpp
   }
}

void MyClass::event(Event& evt, Env& env)
{
  shared_ptr<Psana::EvrData::DataV3> data3 = evt.get(m_evrSrc);
  if (data3.get()) {   
      ndarray<Psana::EvrData::FIFOEvent, 1>  fifoEvents = data3->fifoEvents();
      for (int i(0); i<data3->numFifoEvents(); i++){
	evtCode = fifoEvents[i].eventCode(); 
	tsLow =  fifoEvents[i].timestampLow(); 
	tsHigh = fifoEvents[i].timestampHigh(); 
      }
    }
}
Cloak

Toggle Cloak
idevr_pyana

Pyana code fragments

Cloak
idevr_pyana

Code Block
none
none

import pyana
from pypdsdata import xtc

    def __init__ ( self, addr = "" ):
        self.addr = addr

    def beginjob(self, evt, env):
        pass

    def event(self, evt, env):

        data = evt.get(xtc.TypeId.Type.Id_EvrData, "NoDetector-0|Evr-0")
        if data:
            # print info to screen:
            print "  numFifoEvents =", data.numFifoEvents()
            for i in range(data.numFifoEvents()):
                f = data.fifoEvent(i)
                print "    fifo event #%d TimestampHigh=%d TimestampLow=%d EventCode=%d" % \
                (i, f.TimestampHigh, f.TimestampLow, f.EventCode)

             # filter on event codes: 
             # get a list of all event codes in this event
             event_codes = [ data.fifoEvent(i).EventCode
                             for i in range(0,data.numFifoEvents()) ]
             # skip event if we find code 162
             if 162 in event_codes :
                 print "Found EventCode 162, skipping this event!"
                 return pyana.Skip


Cloak

Panel
titleEvent Receiver

Data types: EvrConfig, EvrData

Toggle Cloak
idevr_psana
Psana code fragments

Cloak
idevr_psana
Toggle Cloak
idevr_pyana
Pyana code fragments

Cloak
idevr_pyana
none