Example: Setting up the azimuthal integration of a powder pattern using anaps

Creating the Average Image

First, we need to create an image that shows the pattern of interest. The data we will use here (xpptut15, run 321) is publicly available as described here

anaps_AvImage

snelson@psanaphi103:/reg/d/psdm/xpp/xppo5616/results/littleData$ ./runLittleDataAna -e xpptut15 -r 321

%run xppmodules/scripts/LoadLittleDataAna.py --run 321 --exp xpptut15

make LittleDataAna_psana from dsname: exp=xpptut15:run=321:smd

try to make littleDataAna using dirname for exp: xpptut15 and run 321

setting up littleData ana from anaps

and now open in dir: /reg/d/psdm/xpp/xpptut15/ftc to open file /reg/d/psdm/xpp/xpptut15/ftc/ldat_xpptut15_Run321.h5

could not find file: /reg/d/psdm/xpp/xpptut15/ftc/ldat_xpptut15_Run321.h5

we will now try to open the littleData file directly

and now open in dir: /reg/d/psdm/xpp/xpptut15/ftc to open file /reg/d/psdm/xpp/xpptut15/ftc/ldat_xpptut15_Run321.h5

could not find file: /reg/d/psdm/xpp/xpptut15/ftc/ldat_xpptut15_Run321.h5

LDana In [1]: anaps.AvImage()

detectors in event:

cspad

opal_1

opal_1

Select detector to select ROI of?:

cspad

try get detector info to make average image for: cspad

try to make psana Detector with: cspad

masking 61008 pixel (status & edge,..) of 2296960

done setting up the geometry

requested 100 used 100 now actually get events

use common mode: 0

The result looks like this:

Make a mask selecting one of the rings.

Here we use the beam center as obtained using mouse clicks on one of the rings. We select a circle mask using the beam center and select one of the rings. We do NOT store the mask in the calib directory as we do not want to use it for production, only to use the threshold setting version of the beam center fit.

anaps_powder_MakeMask

LDana In [2]: anaps.MakeMask()

plot AvImg_pedSub_cspad using the 5/99.5 percentiles as plot min/max: (1.12247, 46.7645)

rectangle(r), circle(c), polygon(p), dark(d) or noise(n)?:

c

Select center by mouse?

n

center (x y)?

86572.6 -9079

Select outer radius by mouse?

y

/reg/g/psdm/sw/releases/ana-0.19.11/arch/x86_64-rhel7-gcc48-opt/python/matplotlib/backend_bases.py:2399: MatplotlibDeprecationWarning: Using default event loop until function specific to this GUI is implemented

warnings.warn(str, mplDeprecation)

Select inner radius by mouse (for donut-shaped mask)?

y

radii: 125873.390368 109958.642193

mask from circle (shape): (32, 185, 388)

created a mask.... 0

masked in this step: 237890.0

masked up to this step: 237890.0

masked tot: 237890.0

Add this mask?

y

Done?

y

Invert (default/no inversion: masked pixels will get rejected)?

y

Save to calibdir?

n

Save to local?

n

LDana Out[2]:

array([[False, False, True, ..., False, False, False],

[False, False, True, ..., False, False, False],

[False, False, False, ..., False, False, False],

...,

[False, False, False, ..., False, False, False],

[False, False, False, ..., False, False, False],

[False, False, False, ..., False, False, False]], dtype=bool)

Fit the beam center using this mask

Setting use_mask_local to true, the locally defined mask will be used. use_mask=True will use the mask as defined in the calibdirectory.

anaps_powder_FitCircle

LDana In [4]: anaps.FitCircle(use_mask_local=True)

plot AvImg_pedSub_cspad using the 5/99.5 percentiles as plot min/max: (1.12247, 46.7645)

Select Circle Points by Mouse?:

n

Select Circle Points with threshold (y/n):

y

min percentile % of selected points:

98

thresP 10.1181592941

Happy with this threshold (y/n):

n

min percentile % of selected points:

99

thresP 11.3860747719

Happy with this threshold (y/n):

n

min percentile % of selected points:

99.8

thresP 16.0652765617

Happy with this threshold (y/n):

y

x,y: 87393.1655731 -10692.6638104 R 121701.713621

Test the azimuthal integration using the beam center & detector distance

Now we can create azInt objects to test the beam center and detector distance:

azimuthal integral

LDana In [1]: anaps.AvImage('cspad',numEvts=100)

try get detector info to make average image for: cspad

try to make psana Detector with: cspad

masking 61008 pixel (status & edge,..) of 2296960

done setting up the geometry

requested 100 used 100 now actually get events

use common mode: 0

LDana In [2]: anaps.addAzInt('cspad',dis_to_sam=60.,center=[87480.8328549, -9033.72940652])

mask 61008 pixel for azimuthal integration

initialize azimuthal binning, mask 61008 pixel for azimuthal integration

qmax: 5.81587256329 qbin 0.01

LDana In [3]: anaps.addAzInt('cspad',dis_to_sam=360.,center=[87480.8328549, -9033.72940652],name='azav2')

mask 61008 pixel for azimuthal integration

initialize azimuthal binning, mask 61008 pixel for azimuthal integration

qmax: 2.54820549725 qbin 0.01

LDana In [4]: qb=anaps.AzInt(plotIt=True)

we have the following options: ['azav2', 'azav']

type the name of the Azimuthal integral to use:azav

/reg/data/ana13/xpp/xppo5616/results/newAzInt_littleData/xppmodules/src/azimuthalBinning.py:213: RuntimeWarning: invalid value encountered in divide

self.sig = 1./np.sqrt(self.ADU_per_photon)*np.sqrt(I)/self.Cake_norm # ??? where comes this sqrt from? Ah I see...

/reg/data/ana13/xpp/xppo5616/results/newAzInt_littleData/xppmodules/src/azimuthalBinning.py:214: RuntimeWarning: invalid value encountered in divide

self.Icake = I/self.Cake_norm

(582,) (582,)

LDana In [5]: qb2=anaps.AzInt()

we have the following options: ['azav2', 'azav']

type the name of the Azimuthal integral to use:azav2

LDana In [6]: anaps.pl

anaps.plotAvImage anaps.plotAzInt anaps.plotScan anaps.plotVar

LDana In [6]: anaps.plotA

anaps.plotAvImage anaps.plotAzInt

LDana In [6]: anaps.plotAzInt()

we have the following options: ['azav2', 'azav']

type the name of the Azimuthal integral to use:azav2

(255,) (255,)