1 | import tube |
---|
2 | from tube_calib_fit_params import TubeCalibFitParams |
---|
3 | from tube_calib import getCalibration #rkh |
---|
4 | import numpy |
---|
5 | #ws = Load(Filename=r'\\olympic\Babylon5\Public\rkh\SANS2dTubes\SANS2D60024183.nxs',Precount='0') |
---|
6 | #ws = ws.rebin('5.5,100000,100000', PreserveEvents=False) |
---|
7 | #ws = Integration(ws) |
---|
8 | #for i in range(ws.getNumberHistograms()): |
---|
9 | # if ws.readY(i)>1500: |
---|
10 | # ws.dataY(i)[:] = 0 |
---|
11 | #SaveNexusDialog(ws) |
---|
12 | |
---|
13 | #ws = Load('work_with_this_data.nxs') |
---|
14 | # slighlty changed mask positions for a data set with M4 out, ~60 counts/pixel |
---|
15 | # due to b/s shadow, edge 9 has to be ingored for tubes 36 to 43 (in 0 to 119), which will be left 18,19,20 ,21 and right 18,19,20,21 , |
---|
16 | # which are here tubes 19 to 22 and 79 to 82, |
---|
17 | # or python range(18,22) and range(78,82) [I think!] |
---|
18 | ws0=Load(Filename='c:/mantidinstall/data/SANS2D50024183.nxs') |
---|
19 | ws=Integration(ws0) |
---|
20 | known_pos1 = numpy.array([-0.485, -0.447, -0.372, -0.334, -0.259, -0.221, -0.146, -0.108, -0.033, 0.005, 0.08, 0.118, 0.193, 0.231, 0.306, 0.344, 0.419, 0.457]) |
---|
21 | known_pos2 = numpy.array([-0.455, -0.417, -0.342, -0.304, -0.229, -0.191, -0.116, -0.078, -0.003, 0.035, 0.11, 0.148, 0.223, 0.261, 0.336, 0.374, 0.449, 0.487]) |
---|
22 | |
---|
23 | # left tubes |
---|
24 | knownPositions = known_pos1 |
---|
25 | funcForm = [2]*len(knownPositions) |
---|
26 | #pixel_positions = numpy.array([20, 39, 80, 100, 140, 160, 200, 220, 265, 287, 323, 342, 383, 401, 444, 462,485,495]) |
---|
27 | pixel_positions = numpy.array([8,30,65,87,125,145,180,205,240,270,302,330,350,372,405,435,465,490]) |
---|
28 | # margin is really for Gaussian, outEdge, inEdge are pixel tolerances for edges (are these absolute, or relative to the fitted edge?), should avoid spikes etc at edges if keep > 10 pixles clear? |
---|
29 | margin=10 |
---|
30 | fitPar = TubeCalibFitParams(pixel_positions, outEdge=10.0, inEdge=10.0) |
---|
31 | |
---|
32 | # this should be 60, but make smaller for debug, but thenchange the plotTube list |
---|
33 | tubes = range(60) |
---|
34 | # the plotTube list defines which tubes get TubePlotnn and FittedTubenn workspaces left to check e.g. plotTube=[10,20,30,40,50] |
---|
35 | caltable = tube.calibrate(ws, 'rear-detector',knownPositions, funcForm, rangeList=tubes,plotTube=[0,1,58,59], margin=margin, fitPar=fitPar) |
---|
36 | |
---|
37 | # now do left tubes 18 to 21 skipping the 9th edge |
---|
38 | knownPositions2 = numpy.array([-0.485, -0.447, -0.372, -0.334, -0.259, -0.221, -0.146, -0.108, 0.005, 0.08, 0.118, 0.193, 0.231, 0.306, 0.344, 0.419, 0.457]) |
---|
39 | funcForm = [2]*len(knownPositions2) |
---|
40 | pixel_positions2 = numpy.array([8,30,65,87,125,145,180,205,270,302,330,350,372,405,435,465,490]) |
---|
41 | # margin is really for Gaussian, outEdge, inEdge are pixel tolerances for edges (are these absolute, or relative to the fitted edge?), should avoid spikes etc at edges if keep > 10 pixles clear? |
---|
42 | margin=10 |
---|
43 | fitPar = TubeCalibFitParams(pixel_positions2, outEdge=10.0, inEdge=10.0) |
---|
44 | tubes = range(18,22) |
---|
45 | # the plotTube list defines which tubes get TubePlotnn and FittedTubenn workspaces left to check e.g. plotTube=[10,20,30,40,50] |
---|
46 | caltable = tube.calibrate(ws, 'rear-detector',knownPositions2, funcForm, rangeList=tubes,plotTube=tubes, margin=margin, fitPar=fitPar, calibTable=caltable) |
---|
47 | |
---|
48 | |
---|
49 | # right tubes |
---|
50 | knownRight = known_pos2 |
---|
51 | funcForm = [2]*len(knownRight) |
---|
52 | #pixel_right = [29, 47, 90, 109, 152, 172, 215, 234, 277, 297, 340, 359, 402, 422, 465, 484] |
---|
53 | pixel_right=pixel_positions+10 |
---|
54 | print len(pixel_right), " edges right", pixel_right |
---|
55 | fitPar = TubeCalibFitParams(pixel_right, outEdge=10.0, inEdge=10.0) |
---|
56 | # range (60,120) does start at 61, which is right0 |
---|
57 | tubes = range(60,120) |
---|
58 | caltable = tube.calibrate(ws, 'rear-detector',knownRight, funcForm, rangeList=tubes, plotTube=[0,1,58,59], margin=margin, fitPar=fitPar, calibTable=caltable) |
---|
59 | |
---|
60 | # now redo tubes right 18 to 21, skipping 9th edge |
---|
61 | # find some python wat to chop out the 9th elemnet of a list or array! |
---|
62 | knownRight2 = numpy.array([-0.455, -0.417, -0.342, -0.304, -0.229, -0.191, -0.116, -0.078, 0.035, 0.11, 0.148, 0.223, 0.261, 0.336, 0.374, 0.449, 0.487]) |
---|
63 | funcForm = [2]*len(knownRight2) |
---|
64 | pixel_right2=numpy.array([18,40,75,97,135,155,190,215,280,312,340,360,382,415,445,475,500]) |
---|
65 | print len(pixel_right2), " edges right", pixel_right2 |
---|
66 | fitPar = TubeCalibFitParams(pixel_right2, outEdge=10.0, inEdge=10.0) |
---|
67 | tubes = range(78,82) |
---|
68 | caltable = tube.calibrate(ws, 'rear-detector',knownRight2, funcForm, rangeList=tubes, plotTube=tubes, margin=margin, fitPar=fitPar, calibTable=caltable) |
---|
69 | |
---|
70 | |
---|
71 | |
---|
72 | # to see the resukts in show instrument, the "Full 3d" plot does not get adjusted, need to try "cylindrical Y" view |
---|
73 | ApplyCalibration(ws, caltable) |
---|
74 | |
---|
75 | |
---|
76 | # REPLACE the EVENT mode file |
---|
77 | ApplyCalibration(ws0, caltable) |
---|
78 | |
---|
79 | SaveNexus(ws0,'c:/mantidinstall/data/SANS2D50024183.nxs') |
---|
80 | |
---|
81 | SaveNexus("calibTable",'c:/mantidinstall/genie/tube_calibrationTable_1to1.nxs') |
---|
82 | |
---|
83 | # why do this ? no change and no useful info in them |
---|
84 | #ModifyDetectorDotDatFile(ws,"c:/mantidinstall/data/detector_gastubes_01.dat","c:/mantidinstall/data/detector_gastubes_01__calibrated.dat") |
---|
85 | |
---|
86 | |
---|
87 | # thus is the method to UNDO a calibration |
---|
88 | #empty_instr = LoadEmptyInstrument('c:/MANTIDINSTALL/instrument/LARMOR_Definition.xml') |
---|
89 | #CopyInstrumentParameters(empty_instr, ws_Cal_14) |
---|