00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 """User analysis job for XTC data.
00011
00012 This software was developed for the LUSI project. If you use all or
00013 part of it, please give an appropriate acknowledgment.
00014
00015 @see RelatedModule
00016
00017 @version $Id: myana1.py 6194 2013-05-01 16:38:08Z salnikov@SLAC.STANFORD.EDU $
00018
00019 @author Andrei Salnikov
00020 """
00021
00022
00023
00024
00025
00026 __version__ = "$Revision: 6194 $"
00027
00028
00029
00030
00031
00032 import sys
00033 import logging
00034 import numpy
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 class myana1 ( object ) :
00056 """Example analysis job that reads waveform and does something useless"""
00057
00058
00059
00060
00061
00062
00063
00064
00065 def __init__ ( self, nenergy, e1, e2 ) :
00066 """Constructor."""
00067
00068 self.nenergy = self.configInt('nenergy')
00069 self.e1 = self.configFloat('e1')
00070 self.e2 = self.configFloat('e2')
00071 logging.info( "nenergy=%d e1=%f e2=%f", self.nenergy, self.e1, self.e2 )
00072 self.shotCountITof = 0
00073 self.sum2 = None
00074
00075
00076
00077
00078
00079 def beginjob( self, evt, env ) :
00080 """This method is called once at the beginning of the job"""
00081
00082 logging.info( "myana1.beginjob() called" )
00083
00084 def beginrun( self, evt, env ) :
00085 """This method is called at the beginning of the run"""
00086
00087 logging.info( "myana1.beginrun() called" )
00088
00089 def event( self, evt, env ) :
00090 """This method is called for every L1Accept transition"""
00091
00092
00093 shotEnergy = evt.getFeeGasDet()
00094 if not shotEnergy : shotEnergy = [0,0,0,0]
00095
00096
00097 energy=(shotEnergy[2]+shotEnergy[3])/2-self.e1
00098 bin = int((energy/(self.e2-self.e1))*self.nenergy+0.5)
00099 if bin<1 : bin=0
00100 if bin>self.nenergy-1 : bin=self.nenergy-1
00101
00102
00103 channel = 0
00104 ddesc = evt.getAcqValue( "AmoITof", channel, env )
00105 if ddesc:
00106 wf = ddesc.waveform()
00107 ts = ddesc.timestamps()
00108 if self.sum2 is None :
00109 self.sum2 = wf**2
00110 else :
00111 self.sum2 += wf**2
00112
00113 def endrun( self, env ) :
00114 """This method is called at the end of the run"""
00115 logging.info( "myana1.endrun() called" )
00116
00117 def endjob( self, env ) :
00118 """This method is called at the end of the job, close your files"""
00119 logging.info( "myana1.endjob() called" )