reduce_HB2C2.py 2.6 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python2
import os
import sys
import h5py
try:
    from postprocessing.publish_plot import publish_plot, plot_heatmap
except ImportError:
    from finddata import publish_plot

filename = sys.argv[1]
output_file = os.path.split(filename)[-1].replace('.nxs.h5', '')
outdir = sys.argv[2]

powder = False

with h5py.File(filename, 'r') as f:
    if '/entry/DASlogs/HB2C:CS:ITEMS:Nature' in f:
        nature = f['/entry/DASlogs/HB2C:CS:ITEMS:Nature/value'].value[0][0]
        if nature == 'Powder':
            powder = True

if powder:

    sys.path.append("/opt/mantidnightly/bin")
25
    from mantid.simpleapi import LoadWAND, WANDPowderReduction, SavePlot1D, LoadNexus
26

27
    data = LoadWAND(filename, Grouping='4x4')
28
    runNumber = data.getRunNumber()
29
30
31
32
33
34
    van = 101567
    """
    cal = LoadWAND(IPTS=7776, RunNumbers=van, Grouping='4x4')
    SaveNexus(cal, '/HFIR/HB2C/shared/autoreduce/HB2C_{}.nxs'.format(van))
    """
    cal = LoadNexus('/HFIR/HB2C/shared/autoreduce/HB2C_{}.nxs'.format(van))
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    WANDPowderReduction(InputWorkspace=data,
                        CalibrationWorkspace=cal,
                        Target='Theta',
                        NumberBins=1000,
                        OutputWorkspace='reduced')
    div = SavePlot1D('reduced', OutputType='plotly')
    request = publish_plot('HB2C', runNumber, files={'file': div})

else:  # Single Crystal

    from plotly.offline import plot
    import plotly.graph_objs as go
    import numpy as np
    with h5py.File(filename, 'r') as f:
        offset = f['/entry/DASlogs/HB2C:Mot:s2.RBV/average_value'].value[0]
        title = f['/entry/title'].value[0]
        mon = f['/entry/monitor1/total_counts'].value[0]
        duration = f['/entry/duration'].value[0]
        run_number = f['/entry/run_number'].value[0]
        bc = np.zeros((512*480*8))
        for b in range(8):
            bc += np.bincount(f['/entry/bank'+str(b+1)+'_events/event_id'].value,
                              minlength=512*480*8)
        bc = bc.reshape((480*8, 512))
        bc = (bc[::4, ::4] + bc[1::4, ::4] + bc[2::4, ::4] + bc[3::4, ::4]
              + bc[::4, 1::4] + bc[1::4, 1::4] + bc[2::4, 1::4] + bc[3::4, 1::4]
              + bc[::4, 2::4] + bc[1::4, 2::4] + bc[2::4, 2::4] + bc[3::4, 2::4]
              + bc[::4, 3::4] + bc[1::4, 3::4] + bc[2::4, 3::4] + bc[3::4, 3::4])

    vanadium = np.load('/HFIR/HB2C/shared/autoreduce/vanadium_101567.npy')
    vanadium_mon = 163519902
    bc = bc / vanadium * vanadium_mon / mon

    plot_heatmap(run_number,
                 np.linspace(120+offset,offset,960), np.arange(0,128), bc.T,
                 x_title=u'2theta', instrument='HB2C')