Welcome to Tapy

Let's fire up

Eventually you can hack the functions.py in order to tune or create functionts that suit your purpose better


In [53]:
%matplotlib inline
from functions import read_data,cropped,createIm,normalization,saveIm,binning,oscillation,createIm_fft

Data folders

Open Beam data path:


In [54]:
path_ob = 'yokeFolder/data/spin_ON'

Sample data path:


In [55]:
path_im = 'yokeFolder/data/spin_OFF'

Dark current data path:


In [56]:
path_dc = 'yokeFolder/data/dc'

Setting parameters

Binning:


In [57]:
bin_fac = None

ROI for normalization:


In [58]:
norm_param = [590,170,70,295]

ROI for cropping:


In [59]:
crop_param = [150,150,665,600]

ROI for pixels intensity oscillation as a function of the step:


In [60]:
oscillationParam = [540,540,20,20]

Number of periods in the phase scan:


In [61]:
numberPeriods = 1

Data processing

Loading:


In [62]:
im,ob = read_data(path_im,path_ob,path_dc)


WARNING: VerifyWarning: Error validating header for HDU #0 (note: Astropy uses zero-based indexing).
    'ascii' codec can't decode byte 0xb0 in position 1573: ordinal not in range(128)
There may be extra bytes after the last HDU or the file is corrupted. [astropy.io.fits.hdu.hdulist]

Cropping:


In [63]:
im,ob = cropped(im,ob,*crop_param)


(1024, 1024)
19931.882376 -9229.96852066

Normalizing:


In [64]:
im,ob=normalization(im,ob,*norm_param)


23513.5389308 -6537.28324959

In [65]:
oscillation(im,ob,*oscillationParam,repeatedPeriod=False)


Binning:


In [66]:
im, ob = binning(im,ob,bin_fac)

Creating:


In [67]:
ti, dpci, dfi, vis_map = createIm(im,ob,numberPeriods)

Saving the images

Save folder:


In [68]:
folder='yokeFolder/recIm'

Images label:


In [69]:
name='SquareYoke45deg'

In [70]:
saveIm(ti, dpci, dfi, vis_map,name=name,folder=folder,overWrite=True)


files saved in folder:  yokeFolder/recIm

Let's customize

DPCI units conversion

Some packages:


In [71]:
import scipy
import numpy as np
from astropy.io import fits 
import scipy.signal as signal

Create my dpci conversion function:


In [72]:
def pixelWiseDPC(dpci,p2um=4,d1cm=1.94,lambdaAmstr=4.1):
    
    dphi_over_dxPixel = (p2um*1e-3)/(lambdaAmstr*1e-7*d1cm*10)*dpci
    dphi_over_dxPixel /= 2
    
    return dphi_over_dxPixel

def pixelWisePC(dpciUnit,pixelConversion=0.11):
    
    dphi_over_dxPixel = np.array([scipy.integrate.cumtrapz(line*pixelConversion,initial=0) for line in dpciUnit])
    dphi_over_dxPixelREV = np.fliplr(np.array([scipy.integrate.cumtrapz(line*pixelConversion,initial=0) for line in np.fliplr(dpciUnit)]))

    return (np.abs(dphi_over_dxPixel)+np.abs(dphi_over_dxPixelREV))/2

Apply my new function:


In [73]:
pCim = pixelWisePC(dpci)
fits.writeto(folder+'/pci_'+name+'.fits',pCim,clobber=True)
radius = 15
pCim = signal.medfilt2d(pCim,radius)
fits.writeto(folder+'/pci_'+name+'.fits',pCim,clobber=True)