Page History
...
This page holds a few example code-snippets for use in pyana analysis. The analysis is written in python and uses MatPlotLib.PyPlot for plotting of data. Compare with myana user examples to see how (some of) the same things can be done using the myana analysis framework. The most reliable place for up-to-date information about all the event getters in pyana, see: https://confluence.slac.stanford.edu/display/PCDS/Pyana+Reference+Manual#PyanaReferenceManual-Classpyana.event.Event
For all the examples, you may assume that the pyana module contains a class with at least 'beginjob', 'event' and 'endjob' functions that starts something like this:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
import numpy as np import matplotlib.pyplot as plt from pypdsdata import xtc class mypyana(object): def __init__(self,source=""): self.source = source self.counter = None def beginjob(self,evt,env): self.counter = 0 def event(self,evt,env): self.counter += 1 # snippet code goes here thedata = evt.get(xtc.TypeId.Type.Id_SomeType, self.source ) def endjob(self,evt,env): print "Job done! Processed %d events. " % self.counter # place for plotting etc |
...
To read out energy, charge and position of the beam from the beamline data, use getEBeam()
. It returns a class/structure that has the following members/fields:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
def event(self,evt,env): ebeam = evt.getEBeam() try : beamChrg = ebeam.fEbeamCharge beamEnrg = ebeam.fEbeamL3Energy beamPosX = ebeam.fEbeamLTUPosX beamPosY = ebeam.fEbeamLTUPosY beamAngX = ebeam.fEbeamLTUAngX beamAngY = ebeam.fEbeamLTUAngY beamPkCr = ebeam.fEbeamPkCurrBC2 print "ebeam: ", beamChrg, beamEnrg, beamPosX, beamPosY, beamAngX, beamAngY, beamPkCr except: print "No EBeam object found" |
...
To read out the energy from the front end enclosure (FEE) gas detector, use getFeeGasDet()
. This returns and array of 4 numbers:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
fee_energy_array = evt.getFeeGasDet() gdENRC11 = fee_energy_array[0] gdENRC12 = fee_energy_array[1] gdENRC21 = fee_energy_array[2] gdENRC22 = fee_energy_array[3] energy = (gdENRC21 - gdENRC22) / 2 # or use the first two that has a different gain: energy = (gdENRC11 - gdENRC12) / 2 |
...
To read out fit time and charge of the phase cavity, use getPhaseCavity()
which returns a structure with the following fields:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
pc = evt.getPhaseCavity() try: pcFitTime1 = pc.fFitTime1 pcFitTime2 = pc.fFitTime2 pcCharge1 = pc.fCharge1 pcCharge2 = pc.fCharge2 print "PhaseCavity: ", pcFitTime1, pcFitTime2, pcCharge1, pcCharge2 except : print "No Phase Cavity object found" |
Encoder data (delay scanner)
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
def event(self,evt,env): try: encoder = evt.get(xtc.TypeId.Type.Id_EncoderData, self.enc_source ) encoder_value = encoder.value() except: print "No encoder found in this event" return |
...
The time of the event can be obtained within the event function:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
def event ( self, evt, env ) : event_time = evt.getTime().seconds() + 1.0e-9*evt.getTime().nanoseconds() ) |
...