source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_BeamCenter.ipf @ 958

Last change on this file since 958 was 958, checked in by srkline, 8 years ago

more changes to the procedures and panel to allow fitting of each panel to determine the beam center.

File size: 7.3 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2
3
4// TODO
5// -- adjust the guesses to some better starting conditions
6// -- multiple fit options with different things held
7// x- when selecting the detector, set the x/y pixel sizes
8// x- figure out how to re-plot the images when swapping between LR and TB panels
9//
10
11
12//
13// TODO - may need to adjust the display for the different pixel dimensions
14//      ModifyGraph width={Plan,1,bottom,left}
15//
16Window DetectorPanelFit() : Panel
17        PauseUpdate; Silent 1           // building window...
18
19// plot the default model to be sure some data is present
20        if(exists("xwave_PeakPix2D") == 0)
21                PlotBroadPeak_Pix2D()
22        endif
23
24        NewPanel /W=(662,418,1586,1108)/N=PanelFit/K=1
25//      ShowTools/A
26               
27        PopupMenu popup_0,pos={20,20},size={109,20},proc=SetDetPanelPopMenuProc,title="Detector Panel"
28        PopupMenu popup_0,mode=1,popvalue="FL",value= #"\"FL;FR;FT;FB;MR;ML;MT;MB;B;\""
29        PopupMenu popup_1,pos={200,20},size={157,20},proc=DetModelPopMenuProc,title="Model Function"
30        PopupMenu popup_1,mode=1,popvalue="BroadPeak",value= #"\"BroadPeak;other;\""
31       
32        Button button_0,pos={486,20},size={80,20},proc=DetFitGuessButtonProc,title="Guess"
33        Button button_1,pos={615,20},size={80,20},proc=DetFitButtonProc,title="Do Fit"
34        Button button_2,pos={744,20},size={80,20},proc=DetFitHelpButtonProc,title="Help"
35
36
37        duplicate/O root:Packages:NIST:VSANS:VCALC:Front:det_FL curDispPanel
38        SetScale/P x 0,1, curDispPanel
39        SetScale/P y 0,1, curDispPanel
40       
41//draw the detector panel
42        Display/W=(20,80,180,600)/HOST=#
43        AppendImage curDispPanel
44        ModifyImage curDispPanel ctab= {*,*,ColdWarm,0}
45//      ModifyGraph width={Plan,1,bottom,left}
46        Label left "Y pixels"
47        Label bottom "X pixels"
48        RenameWindow #,DetData
49        SetActiveSubwindow ##   
50       
51//draw the model calculation
52        Display/W=(200,80,360,600)/HOST=#
53        AppendImage PeakPix2D_mat
54        ModifyImage PeakPix2D_mat ctab= {*,*,ColdWarm,0}
55//      ModifyGraph width={Plan,1,bottom,left}
56        Label left "Y pixels"
57        Label bottom "X pixels"
58        RenameWindow #,ModelData
59        SetActiveSubwindow ##           
60
61// edit the fit coefficients   
62        Edit/W=(500,80,880,350)/HOST=#  parameters_PeakPix2D,coef_PeakPix2D
63        ModifyTable width(Point)=0
64        ModifyTable width(parameters_PeakPix2D)=120
65        ModifyTable width(coef_PeakPix2D)=100
66        RenameWindow #,T0
67        SetActiveSubwindow ##
68
69
70       
71EndMacro
72
73
74
75
76Function SetDetPanelPopMenuProc(pa) : PopupMenuControl
77        STRUCT WMPopupAction &pa
78
79        switch( pa.eventCode )
80                case 2: // mouse up
81                        Variable popNum = pa.popNum
82                        String popStr = pa.popStr
83                       
84                        DrawDetPanel(popStr)
85                       
86                        break
87                case -1: // control being killed
88                        break
89        endswitch
90
91        return 0
92End
93
94
95//      duplicate/O root:Packages:NIST:VSANS:VCALC:Front:det_FL curDispPanel
96//      SetScale/P x 0,1, curDispPanel
97//      SetScale/P y 0,1, curDispPanel
98       
99// draws a single panel from the set of detectors
100Function DrawDetPanel(str)
101        String str
102       
103        // from the selection, find the path to the data
104        // TODO - currently is hard-wired for the simulation path!
105        //     need to make it more generic, especially for RAW data
106
107        Variable xDim,yDim
108        Wave dispW=root:curDispPanel
109        Wave cw = root:coef_PeakPix2D
110
111        cw[7] = 4
112        cw[8] = 8
113       
114        Wave xwave_PeakPix2D=root:xwave_PeakPix2D
115        Wave ywave_PeakPix2D=root:ywave_PeakPix2D
116        Wave zwave_PeakPix2D=root:zwave_PeakPix2D
117
118        //plot it in the subwindow with the proper aspect and positioning       
119        strswitch(str)
120                case "FL":
121                        xDim=48
122                        yDim=256
123                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,180,600)
124                        MoveSubWindow/W=PanelFit#ModelData fnum=(200,80,360,600)                       
125                        cw[7] = 8
126                        cw[8] = 4
127                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FL
128                        break
129                case "FR":
130                        xDim=48
131                        yDim=256
132                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,180,600)
133                        MoveSubWindow/W=PanelFit#ModelData fnum=(200,80,360,600)       
134                        cw[7] = 8
135                        cw[8] = 4                                               
136                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FR
137                        break
138                case "FT":
139                        xDim=128
140                        yDim=48
141                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,464,235)
142                        MoveSubWindow/W=PanelFit#ModelData fnum=(20,280,464,435)
143                        cw[7] = 4
144                        cw[8] = 8                       
145                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FT
146                        break
147                case "FB":
148                        xDim=128
149                        yDim=48
150                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,464,235)
151                        MoveSubWindow/W=PanelFit#ModelData fnum=(20,280,464,435)
152                        cw[7] = 4
153                        cw[8] = 8                       
154                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FB
155                        break
156                case "ML":
157                        xDim=48
158                        yDim=256
159                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,180,600)
160                        MoveSubWindow/W=PanelFit#ModelData fnum=(200,80,360,600)       
161                        cw[7] = 8
162                        cw[8] = 4                                               
163                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_ML
164                        break
165                case "MR":
166                        xDim=48
167                        yDim=256
168                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,180,600)
169                        MoveSubWindow/W=PanelFit#ModelData fnum=(200,80,360,600)       
170                        cw[7] = 8
171                        cw[8] = 4                                               
172                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_MR
173                        break
174                case "MT":
175                        xDim=128
176                        yDim=48
177                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,464,235)
178                        MoveSubWindow/W=PanelFit#ModelData fnum=(20,280,464,435)
179                        cw[7] = 4
180                        cw[8] = 8                       
181                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_MT
182                        break
183                case "MB":
184                        xDim=128
185                        yDim=48
186                        MoveSubWindow/W=PanelFit#DetData fnum=(20,80,464,235)
187                        MoveSubWindow/W=PanelFit#ModelData fnum=(20,280,464,435)
188                        cw[7] = 4
189                        cw[8] = 8                       
190                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_MB
191                        break
192                case "B":
193               
194                        return(0)               //just exit
195                        break                                           
196                default:
197                        return(0)               //just exit
198        endswitch
199
200// set the simulated detector data to be point-scaling for display and fitting, not q-scaling   
201        duplicate/O newW dispW
202        SetScale/P x 0,1, dispW
203        SetScale/P y 0,1, dispW
204               
205
206        // re-dimension the model calculation to be the proper dimensions       
207        Redimension/N=(xDim*yDim) xwave_PeakPix2D, ywave_PeakPix2D,zwave_PeakPix2D     
208        FillPixTriplet(xwave_PeakPix2D, ywave_PeakPix2D,zwave_PeakPix2D,xDim,yDim)     
209        Make/O/D/N=(xDim,yDim) PeakPix2D_mat            // use the point scaling of the matrix (=pixels)
210        Duplicate/O $"PeakPix2D_mat",$"PeakPix2D_lin"           //keep a linear-scaled version of the data
211       
212        return(0)
213End
214
215
216
217
218
219Function DetModelPopMenuProc(pa) : PopupMenuControl
220        STRUCT WMPopupAction &pa
221
222        switch( pa.eventCode )
223                case 2: // mouse up
224                        Variable popNum = pa.popNum
225                        String popStr = pa.popStr
226                       
227                        Execute "PlotBroadPeak_Pix2D()"
228                       
229                        break
230                case -1: // control being killed
231                        break
232        endswitch
233
234        return 0
235End
236
237
238
239
240Function DetFitGuessButtonProc(ba) : ButtonControl
241        STRUCT WMButtonAction &ba
242
243        switch( ba.eventCode )
244                case 2: // mouse up
245                        // click code here
246                        Wave dispW=root:curDispPanel
247                        Wave coefW=root:coef_PeakPix2D
248                       
249                        WaveStats/Q dispW
250                        coefW[2] = V_max
251                        coefW[0] = 1                   
252                       
253                        break
254                case -1: // control being killed
255                        break
256        endswitch
257
258        return 0
259End
260
261
262
263
264
265Function DetFitButtonProc(ba) : ButtonControl
266        STRUCT WMButtonAction &ba
267
268        switch( ba.eventCode )
269                case 2: // mouse up
270                        // click code here
271                       
272                        Wave dispW=root:curDispPanel
273                        Wave coefW=root:coef_PeakPix2D
274                       
275                        FuncFitMD/H="11000111100"/NTHR=0 BroadPeak_Pix2D coefW  dispW /D                       
276                       
277                        Wave ws=W_sigma
278                        AppendtoTable/W=PanelFit#T0 ws
279                       
280                        break
281                case -1: // control being killed
282                        break
283        endswitch
284
285        return 0
286End
287
288Function DetFitHelpButtonProc(ba) : ButtonControl
289        STRUCT WMButtonAction &ba
290
291        switch( ba.eventCode )
292                case 2: // mouse up
293                        // click code here
294                       
295                        DoAlert 0,"Help file not written yet..."
296                       
297                        break
298                case -1: // control being killed
299                        break
300        endswitch
301
302        return 0
303End
Note: See TracBrowser for help on using the repository browser.