Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
{
Wiki Markup
Composition Setup
}
cloak.toggle.type = default
{composition-setup}

Devices and datatypes used by the LCLS instruments

...

{cloak:id=

Panel
titleAcqiris waveform digitizer

Data types: AcqConfig, AcqWaveformunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
acqiris_psana
}

Psana code fragments

Wiki Markup
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:

Code Block
  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();
  }
{}
Wiki Markup
Cloak
unmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
acqiris_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

Cloak
idacqiris_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}

Cloak

{cloak:id=

Panel
Panel
titleIPIMB (Intensity Position and Intensity Monitoring Board)

Data types: IpimbConfig, IpmFexConfig, IpimbData, IpmFexunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
ipimb_psana
}

Psana code fragments

Wiki Markup
Cloak
idipimb_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:

unmigrated-inline-wiki-markup
Code Block
shared_ptr<Psana::Ipimb::DataV1> data1 = evt.get(m_src);
{
}
Cloak
unmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
ipimb_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

unmigrated-inline-wiki-markup

{

Cloak

}

{toggle-cloak:id=
Panel
titleEncoder delay scanner

Data types: EncoderConfig, EncoderData

Wiki Markup
Toggle Cloak
id
enc_psana
}

Psana code fragments

Wiki Markup{cloak:id=

Cloak
idenc_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:

unmigrated-inline-wiki-markup
Code Block
shared_ptr<Psana::Encoder::DataV1> data1 = evt.get(m_src);
{
}
Cloak
unmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
enc_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

}

{cloak:id=

Panel
titleOpal1000 camera

Data types: Opal1kConfig, Frameunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
opal_psana
}

Psana code fragments

Wiki Markup
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:

unmigrated-inline-wiki-markup
Code Block
shared_ptr<Psana::Opal1k::DataV1> data1 = evt.get(m_src);
{
}
Cloak
unmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
opal_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

unmigrated-inline-wiki-markup

{

Cloak

}

{cloak:id=

Panel
titlePulnix camera

Data types: TM6740Config, Frameunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
pulnix_psana
}

Psana code fragments

Wiki Markup
Cloak
idpulnix_psana

}unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
pulnix_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

Wiki Markup{

Cloak

}

{cloak:id=

Panel
titlePrinceton Instruments camera

Data types: PrincetonConfig, PrincetonFrameunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
princ_psana
}

Psana code fragments

Wiki Markup
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]
Wiki Markup
{cloak}
Cloak

Wiki Markup{toggle-cloak:id=

Toggle Cloak
id
princ_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

Wiki Markup{

Cloak

}

{cloak:id=

Panel
titleFCCD (Fast CCD) camera

Data types: FccdConfig, Frameunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
fccd_psana
}

Psana code fragments

Wiki Markup
Cloak
idfccd_psana

}

Wiki Markup{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
fccd_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

unmigrated-inline-wiki-markup

{

Cloak

}

{
Panel
titlePnCCD camera

Data types: pnCCDconfig, pnCCDframe

Wiki Markup
Toggle Cloak
:
id
=
pnccd_psana
}

Psana code fragments

Wiki Markup{cloak:id=

Cloak
idpnccd_psana

}unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
pnccd_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

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=

Cloak
idcspad_psana

}unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
cspad_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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.

{}
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=

Cloak
idmini_psana

}unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
mini_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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 

Wiki Markup{

Cloak

}

{cloak:id=

Panel
titleTimepix camera

Data types: TimepixConfig, TimepixDataunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
timepix_psana
}

Psana code fragments

Wiki Markup
Cloak
idtimepix_psana

}unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
timepix_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

unmigrated-inline-wiki-markup

{

Cloak

}

BldData, beam line data

{cloak:id=

Panel
titleBeam Energy

Data types: BldDataEBeam, BldDataEBeam0unmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
ebeam_psana
}

Psana code fragments

Wiki Markup
Cloak
idebeam_psana

}unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
ebeam_pyana
}

Pyana code fragment

Wiki Markup{cloak:id=

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           

unmigrated-inline-wiki-markup

{

Cloak

}

{toggle-cloak:id=gasd_pyana}
Panel
titleGas Detector

Data types: FEEGasDetectorunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
gasd_psana
}

Psana code fragments

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

Cloak
idgasd_psana

Cloak

Toggle Cloak
idgasd_pyana
Wiki Markup

Pyana code fragments

Wiki Markup{cloak:id=

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

unmigrated-inline-wiki-markup

{

Cloak

}

{cloak:id=

Panel
titlePhase Cavity

Data types: PhaseCavityunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
pc_psana
}

Psana code fragments

Wiki Markup
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

Wiki Markup
{cloak}

Wiki Markup{

Toggle Cloak
:
id
=
pc_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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 

unmigrated-inline-wiki-markup

{

Cloak

}

{cloak:id=

Panel
titleShared IPIMB

Data types: SharedIpimb, BldDataIpmunmigrated-inline-wiki-markup

{

Toggle Cloak
:
id
=
shared_psana
}

Psana code fragments

Wiki Markup
Cloak
idshared_psana

}unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
shared_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

unmigrated-inline-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=

Cloak
idepics_psana

}

Code Block
none
none

unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
epics_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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

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=

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(); 
      }
    }
}

unmigrated-inline-wiki-markup

{

Cloak

}

{
Wiki Markup

Toggle Cloak
:
id
=
evr_pyana
}

Pyana code fragments

Wiki Markup{cloak:id=

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


Wiki Markup{

Cloak

}