Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{composition-setup
}
cloak.toggle.type = default
{composition-setup}

Devices and datatypes used by the LCLS instruments

...

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

Wiki Markup
{toggle-cloak
:id
=acqiris_psana}
Psana code fragments

Wiki Markup
{cloak
:id
=acqiris_psana}

Include data description for acqiris:

Code Block

#include "psddl_psana/acqiris.ddl.h"

Get the configuration object in the beginCalibCycle member function:

Code Block

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

In the event

In the event

member function, get the waveform for this event:

Toggle Cloak
idacqiris_pyana
Pyana code 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:

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
idpulnix_pyana
none Panel
titlePrinceton Instruments camera

Data types: PrincetonConfig, PrincetonFrame

Toggle Cloak
idprinc_psana
Psana code fragments

Cloak
idprinc_psana
none

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):

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
idcspad_psana
Psana code fragments

Cloak
idcspad_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)

Data types: CspadConfig, Cspad2x2Element

Toggle Cloak
idmini_psana
Psana code fragments

Cloak
idmini_psana

Toggle Cloak
idmini_pyana
Pyana code fragments

Cloak
idmini_pyana
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

...

titleBeam Energy

Data types: BldDataEBeam, BldDataEBeam0

Toggle Cloak
idebeam_psana
Psana code fragments

...

idebeam_psana

Toggle Cloak
idebeam_pyana
Pyana code fragment

...

idebeam_pyana

...

titleGas Detector

Data types: FEEGasDetector

Toggle Cloak
idgasd_psana
Psana code fragments

...

idgasd_psana

Toggle Cloak
idgasd_pyana
Pyana code fragments

...

idgasd_pyana

...

titlePhase Cavity

Data types: PhaseCavity

Toggle Cloak
idpc_psana
Psana code fragments

...

idpc_psana

...

Toggle Cloak
idpc_pyana
Pyana code fragments

...

idpc_pyana

...

titleShared IPIMB
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();
  }
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=acqiris_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=acqiris_pyana}
Code Block
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()
Wiki Markup
{cloak}
Panel
titleIPIMB (Intensity Position and Intensity Monitoring Board)

Data types: IpimbConfig, IpmFexConfig, IpimbData, IpmFex

Wiki Markup
{toggle-cloak:id=ipimb_psana}
Psana code fragments

Wiki Markup
{cloak:id=ipimb_psana}

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);
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=ipimb_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=ipimb_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( 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 )
Wiki Markup
{cloak}
Panel
titleEncoder delay scanner

Data types: EncoderConfig, EncoderData

Wiki Markup
{toggle-cloak:id=enc_psana}
Psana code fragments

Wiki Markup
{cloak:id=enc_psana}

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);
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=enc_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=enc_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( 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() )
Wiki Markup
{cloak}
Panel
titleOpal1000 camera

Data types: Opal1kConfig, Frame

Wiki Markup
{toggle-cloak:id=opal_psana}
Psana code fragments

Wiki Markup
{cloak:id=opal_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);
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=opal_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=opal_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()
Wiki Markup
{cloak}
Panel
titlePulnix camera

Data types: TM6740Config, Frame

Wiki Markup
{toggle-cloak:id=pulnix_psana}
Psana code fragments

Wiki Markup
{cloak:id=pulnix_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=pulnix_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=pulnix_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()
Wiki Markup
{cloak}
Panel
titlePrinceton Instruments camera

Data types: PrincetonConfig, PrincetonFrame

Wiki Markup
{toggle-cloak:id=princ_psana}
Psana code fragments

Wiki Markup
{cloak:id=princ_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]
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=princ_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=princ_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()
Wiki Markup
{cloak}
Panel
titleFCCD (Fast CCD) camera

Data types: FccdConfig, Frame

Wiki Markup
{toggle-cloak:id=fccd_psana}
Psana code fragments

Wiki Markup
{cloak:id=fccd_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=fccd_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=fccd_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
Wiki Markup
{cloak}
Panel
titlePnCCD camera

Data types: pnCCDconfig, pnCCDframe

Wiki Markup
{toggle-cloak:id=pnccd_psana}
Psana code fragments

Wiki Markup
{cloak:id=pnccd_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=pnccd_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=pnccd_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()
Wiki Markup
{cloak}
Panel
titleCSPad (Cornell-SLAC Pixel Array Detector)

Data types: CspadConfig, CspadElement

Wiki Markup
{toggle-cloak:id=cspad_psana}
Psana code fragments

Wiki Markup
{cloak:id=cspad_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=cspad_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=cspad_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.

Wiki Markup
{cloak}
Panel
titleMini CSPad (Cornell-SLAC Pixel Array Detector)

Data types: CspadConfig, Cspad2x2Element

Wiki Markup
{toggle-cloak:id=mini_psana}
Psana code fragments

Wiki Markup
{cloak:id=mini_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=mini_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=mini_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 
Wiki Markup
{cloak}
Panel
titleTimepix camera

Data types: TimepixConfig, TimepixData

Wiki Markup
{toggle-cloak:id=timepix_psana}
Psana code fragments

Wiki Markup
{cloak:id=timepix_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=timepix_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=timepix_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()
Wiki Markup
{cloak}

BldData, beam line data

Panel
titleBeam Energy

Data types: BldDataEBeam, BldDataEBeam0

Wiki Markup
{toggle-cloak:id=ebeam_psana}
Psana code fragments

Wiki Markup
{cloak:id=ebeam_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=ebeam_pyana}
Pyana code fragment

Wiki Markup
{cloak:id=ebeam_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           
Wiki Markup
{cloak}
Panel
titleGas Detector

Data types: FEEGasDetector

Wiki Markup
{toggle-cloak:id=gasd_psana}
Psana code fragments

Wiki Markup
{cloak:id=gasd_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=gasd_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=gasd_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
Wiki Markup
{cloak}
Panel
titlePhase Cavity

Data types: PhaseCavity

Wiki Markup
{toggle-cloak:id=pc_psana}
Psana code fragments

Wiki Markup
{cloak:id=pc_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();
    }
}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=pc_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=pc_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 
Wiki Markup
{cloak}
Panel
titleShared IPIMB

Data types: SharedIpimb, BldDataIpm

Wiki Markup
{toggle-cloak:id=shared_psana}
Psana code fragments

Wiki Markup
{cloak:id=shared_psana}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=shared_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=shared_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
Wiki Markup
{cloak}

ControlData

ControlPV, MonitorPV

EPICS process variables

Panel
title

Data types:

Wiki Markup
{toggle-cloak:id=epics_psana}
Psana code fragments

Wiki Markup
{cloak:id=epics_psana}
Code Block
none
none
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=epics_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=epics_pyana}
Code Block
none
none

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

    def beginjob(self, evt, env):
        pass

    def event(self, evt, env):
        pass
Wiki Markup
{cloak}

EvrData, event receiver data

Panel
titleEvent Receiver

Data types: EvrConfig, EvrData

Wiki Markup
{toggle-cloak:id=evr_psana}
Psana code fragments

Wiki Markup
{cloak:id=evr_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(); 
      }
    }
}
Wiki Markup
{cloak}

Wiki Markup
{toggle-cloak:id=evr_pyana}
Pyana code fragments

Wiki Markup
{cloak:id=evr_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


Wiki Markup
{cloak}

Data types: SharedIpimb, BldDataIpm

Toggle Cloak
idshared_psana
Psana code fragments

...

idshared_psana

Toggle Cloak
idshared_pyana
Pyana code fragments

...

idshared_pyana

...

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

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