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: dump_cspad.py 2622 2011-11-11 14:35:00Z salnikov@SLAC.STANFORD.EDU $
00018
00019 @author Andrei Salnikov
00020 """
00021
00022
00023
00024
00025
00026 __version__ = "$Revision: 2622 $"
00027
00028
00029
00030
00031
00032 import sys
00033 import logging
00034
00035
00036
00037
00038
00039
00040
00041
00042 from psana import *
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 class dump_cspad ( object ) :
00056 """Example analysis module which dumps ControlConfig object info."""
00057
00058
00059
00060
00061
00062
00063
00064
00065 def __init__ ( self ) :
00066 """Constructor. """
00067
00068 self.m_src = self.configSrc('source', "")
00069
00070
00071
00072
00073
00074 def beginjob( self, evt, env ) :
00075
00076 config = env.configStore().get(CsPad.Config, self.m_src)
00077 if not config:
00078 return
00079
00080 print "dump_cspad: %s: %s" % (config.__class__.__name__, self.m_src)
00081 print " concentratorVersion =", config.concentratorVersion();
00082 print " runDelay =", config.runDelay();
00083 print " eventCode =", config.eventCode();
00084 print " inactiveRunMode =", config.inactiveRunMode();
00085 print " activeRunMode =", config.activeRunMode();
00086 print " tdi =", config.tdi();
00087 print " payloadSize =", config.payloadSize();
00088 print " badAsicMask0 =", config.badAsicMask0();
00089 print " badAsicMask1 =", config.badAsicMask1();
00090 print " asicMask =", config.asicMask();
00091 print " quadMask =", config.quadMask();
00092 print " numAsicsRead =", config.numAsicsRead();
00093 print " numQuads =", config.numQuads();
00094 try:
00095
00096 print " roiMask = [%s]" % ', '.join([hex(config.roiMask(q)) for q in range(4)])
00097 print " numAsicsStored = %s" % str(map(config.numAsicsStored, range(4)))
00098 except:
00099 pass
00100 try:
00101 print " sections = %s" % str(map(config.sections, range(4)))
00102 except:
00103 pass
00104
00105
00106 def event( self, evt, env ) :
00107
00108 data = evt.get(CsPad.Data, self.m_src)
00109 if not data:
00110 return
00111
00112 nQuads = data.quads_shape()[0]
00113
00114
00115 print "dump_cspad: %s: %s" % (data.quads(0).__class__.__name__, self.m_src)
00116 print " Number of quadrants: %d" % nQuads
00117 for i in range(nQuads):
00118 q = data.quads(i)
00119
00120 print " Quadrant #%d" % q.quad()
00121 print " virtual_channel = %s" % q.virtual_channel()
00122 print " lane = %s" % q.lane()
00123 print " tid = %s" % q.tid()
00124 print " acq_count = %s" % q.acq_count()
00125 print " op_code = %s" % q.op_code()
00126 print " quad = %s" % q.quad()
00127 print " seq_count = %s" % q.seq_count()
00128 print " ticks = %s" % q.ticks()
00129 print " fiducials = %s" % q.fiducials()
00130 print " frame_type = %s" % q.frame_type()
00131 print " sb_temp = %s" % q.sb_temp()
00132 print " common_mode = %s" % [q.common_mode(i) for i in range(q.data().shape[0])]
00133
00134 print " data shape = {}".format(q.data().shape)
00135 print " data = %s" % q.data()