Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Pulnix TM6740 images are processed with pyana_image.py. It allows any number of images, given as a space-separated list of addresses in the
    configuration file.
    • Ranges can be given to define dark images, and good images. Background subtracted images can also be used, where average of background images so far collected is subtracted from the good images before plotting.
    • Each image can be separately rotated (Done), shifted (TODO!) and scaled (TODO!). An optional parameter also allow you to set
      nicknames to the images (defaults will be Im1, Im2... etc), these names will be used if you plot differences, or other manipulations of the original
      images.
    • The images are subtracted and differences displayed as well as fourier transform of differences. Examples of what may be displayed. To display other things, at this stage you have to edit pyana_image.py to change this behaviour.
  • Currently it has the following settings:
    Code Block
    image_addresses  =  CxiSc1-0|TM6740-1 CxiSc1-0|TM6740-2 CxiSc1-0|TM6740-3 # Address of Detector-Id|Device-Id
    dark_range  =  50--250                # low and high limit for what we define as dark image
    good_range  =  250--1050              # low and high limit for what we define as a good image (with signal)
    image_nicknames = Im1 Im2 Im3         # If none provided, these will be the names
    image_rotations  =  7.1 6.2 5.3       # Angle in degrees
    image_scales  =                       # Scale factor to be applied to zoom in or out
    image_shifts  =  (0,0) (0,0) (0,0)    # Shift (number of pixels (x,y)) to be applied
    draw_each_event  =  Yes               # plot for each event?
    output_file = test_.txt               # base name for output (numpy arrays) for each event. Valid extensions are .txt (ascii) or .npy (numpy binary)
    

...

MatLab

MatPlotLib

Comments

Loglog plot of one array vs. another

Code Block
%
%
%
a1 = subplot(121);
loglog(channels(:,1),channels(:,2),'o')
xlabel('CH0')
ylabel('CH1')
a2 = subplot(122);
loglog(channels(:,3),channels(:,4),'o')
xlabel('CH2')
ylabel('CH3')

Loglog plot of one array vs. another

Code Block
import matplotlib.pyplot as plt
import numpy as np

a1 = plt.subplot(221)
plt.loglog(channels[:,0],channels[:,1], 'o' )
plt.xlabel('CH0')
plt.ylabel('CH1')
a2 = plt.subplot(222)
plt.loglog(channels[:,2],channels[:,3], 'o' )
plt.xlabel('CH2')
plt.ylabel('CH3')

channels is a 4xN array of floats, where N is the number of events. Each column corresponds to one out of four Ipimb channels.

Note that the arrays are indexed with 1,2,3,4 in MatLab and 0,1,2,3 in MatPlotLib/NumPy/Python.

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4438a1427f3164af-a5126bf7-44c74536-9ce8ab61-a3058ab26a7f866bca23a595"><ac:plain-text-body><![CDATA[Note also the use of paranthesis, array() in MatLab, array[] in MatPlotLib.

]]></ac:plain-text-body></ac:structured-macro>

test

test

Test

array of limits from graphical input

array of limits from graphical input

 

Code Block
axes(a1)
hold on
lims(1:2,:) = ginput(2);

axes(a2)
hold on
lims(3:4,:) = ginput(2);
Code Block
plt.axes(a1)
plt.hold(True)
limslista = plt.ginput(2)

plt.axes(a2)
plt.hold(True)

limslistb = plt.ginput(2)
limsa = np.array(limslista)
limsb = np.array(limslistb)

lims = np.hstack( [limsa, limsb] )

In MatLab, lims is an expandable array that holds limits as set by input from mouse click on the plot (ginput).
NumPy arrays cannot be expanded, so I've chosen to append to a python list first, then fill a NumPy array for the usage to look the same.

The exact usage of the lims array depends on where you place each limit. I think perhaps I've done it differently from the MatLab version.

 

 

 

filter

filter

 

Code Block
fbool1 = (channels(:,1)>min(lims(1:2,1)))&(channels(:,1)<max(lims(1:2,1)))
fbool2 = (channels(:,2)>min(lims(1:2,2)))&(channels(:,2)<max(lims(1:2,2)));
fbool = fbool1&fbool2
loglog(channels(fbool,1),channels(fbool,2),'or')

fbool3 = (channels(:,3)>min(lims(3:4,3)))&(channels(:,3)<max(lims(3:4,3)))
fbool4 = (channels(:,4)>min(lims(3:4,4)))&(channels(:,4)<max(lims(3:4,4)));
fbool = fbool3&fbool4
loglog(channels(fbool,3),channels(fbool,4),'or') 
Code Block
fbools0 = (channels[:,0]>lims[:,0].min())&(channels[:,0]<lims[:,0].max())
fbools1 = (channels[:,1]>lims[:,1].min())&(channels[:,1]<lims[:,1].max())
fbools = fbools0 & fbools1

fbools2 = (channels[:,2]>lims[:,2].min())&(channels[:,2]<lims[:,2].max())
fbools3 = (channels[:,3]>lims[:,3].min())&(channels[:,3]<lims[:,3].max())
fbools = fbools2&fbools3

Comment