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

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

adding a file that has the basic panel to fit a beam center to the arc on any of the detector panels. lots of issues to still work out - so don't spend too much time on this since I don't know if this is how the beam center wil actually be determined. but this is at least a proof of principle that it can be done, and be used to test the limitations of this method, i.e. what are the possible pitfalls...

File size: 5.2 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// -- when selecting the detector, set the x/y pixel sizes
8// -- 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        NewPanel /W=(662,418,1586,1108)/N=PanelFit
19        ShowTools/A
20
21// plot the default model to be sure some data is present
22        if(exists("xwave_PeakPix2D") == 0)
23                PlotBroadPeak_Pix2D()
24        endif
25       
26        PopupMenu popup_0,pos={20,20},size={109,20},proc=SetDetPanelPopMenuProc,title="Detector Panel"
27        PopupMenu popup_0,mode=1,popvalue="FL",value= #"\"FL;FR;FT;FB;MR;ML;MT;MB;B;\""
28        PopupMenu popup_1,pos={200,20},size={157,20},proc=DetModelPopMenuProc,title="Model Function"
29        PopupMenu popup_1,mode=1,popvalue="BroadPeak",value= #"\"BroadPeak;other;\""
30       
31        Button button_0,pos={486,20},size={80,20},proc=DetFitGuessButtonProc,title="Guess"
32        Button button_1,pos={615,20},size={80,20},proc=DetFitButtonProc,title="Do Fit"
33        Button button_2,pos={744,20},size={80,20},proc=DetFitHelpButtonProc,title="Help"
34
35
36        duplicate/O root:Packages:NIST:VSANS:VCALC:Front:det_FL curDispPanel
37        SetScale/P x 0,1, curDispPanel
38        SetScale/P y 0,1, curDispPanel
39       
40//draw the detector panel
41        Display/W=(20,80,180,600)/HOST=#
42        AppendImage curDispPanel
43        ModifyImage curDispPanel ctab= {*,*,ColdWarm,0}
44        ModifyGraph width={Plan,1,bottom,left}
45        Label left "Y pixels"
46        Label bottom "X pixels"
47        RenameWindow #,DetData
48        SetActiveSubwindow ##   
49       
50//draw the model calculation
51        Display/W=(200,80,360,600)/HOST=#
52        AppendImage PeakPix2D_mat
53        ModifyImage PeakPix2D_mat ctab= {*,*,ColdWarm,0}
54        ModifyGraph width={Plan,1,bottom,left}
55        Label left "Y pixels"
56        Label bottom "X pixels"
57        RenameWindow #,ModelData
58        SetActiveSubwindow ##           
59
60// edit the fit coefficients   
61        Edit/W=(500,80,880,350)/HOST=#  parameters_PeakPix2D,coef_PeakPix2D
62        ModifyTable width(Point)=0
63        ModifyTable width(parameters_PeakPix2D)=120
64        ModifyTable width(coef_PeakPix2D)=100
65        RenameWindow #,T0
66        SetActiveSubwindow ##
67
68
69       
70EndMacro
71
72
73
74
75Function SetDetPanelPopMenuProc(pa) : PopupMenuControl
76        STRUCT WMPopupAction &pa
77
78        switch( pa.eventCode )
79                case 2: // mouse up
80                        Variable popNum = pa.popNum
81                        String popStr = pa.popStr
82                       
83                        DrawDetPanel(popStr)
84                       
85                        break
86                case -1: // control being killed
87                        break
88        endswitch
89
90        return 0
91End
92
93
94//      duplicate/O root:Packages:NIST:VSANS:VCALC:Front:det_FL curDispPanel
95//      SetScale/P x 0,1, curDispPanel
96//      SetScale/P y 0,1, curDispPanel
97       
98// draws a single panel from the set of detectors
99Function DrawDetPanel(str)
100        String str
101       
102        // from the selection, find the path to the data
103        // TODO - currently is hard-wired for the simulation path!
104        //     need to make it more generic, especially for RAW data
105
106        Wave dispW=root:curDispPanel
107       
108        strswitch(str)
109                case "FL":
110                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FL
111                        break
112                case "FR":
113                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FR
114                        break
115                case "FT":
116                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FT
117                        break
118                case "FB":
119                        wave newW = root:Packages:NIST:VSANS:VCALC:Front:det_FB
120                        break
121                case "ML":
122                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_ML
123                        break
124                case "MR":
125                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_MR
126                        break
127                case "MT":
128                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_MT
129                        break
130                case "MB":
131                        wave newW = root:Packages:NIST:VSANS:VCALC:Middle:det_MB
132                        break
133                case "B":
134                        return(0)               //just exit
135                        break                                           
136                default:
137                        return(0)               //just exit
138        endswitch
139       
140        duplicate/O newW dispW
141        SetScale/P x 0,1, dispW
142        SetScale/P y 0,1, dispW
143               
144        // then plot it in the subwindow with the proper aspect and positioning
145       
146       
147       
148        return(0)
149End
150
151
152
153
154
155Function DetModelPopMenuProc(pa) : PopupMenuControl
156        STRUCT WMPopupAction &pa
157
158        switch( pa.eventCode )
159                case 2: // mouse up
160                        Variable popNum = pa.popNum
161                        String popStr = pa.popStr
162                       
163                        Execute "PlotBroadPeak_Pix2D()"
164                       
165                        break
166                case -1: // control being killed
167                        break
168        endswitch
169
170        return 0
171End
172
173
174
175
176Function DetFitGuessButtonProc(ba) : ButtonControl
177        STRUCT WMButtonAction &ba
178
179        switch( ba.eventCode )
180                case 2: // mouse up
181                        // click code here
182                        Wave dispW=root:curDispPanel
183                        Wave coefW=root:coef_PeakPix2D
184                       
185                        WaveStats/Q dispW
186                        coefW[2] = V_max
187                        coefW[0] = 1                   
188                       
189                        break
190                case -1: // control being killed
191                        break
192        endswitch
193
194        return 0
195End
196
197
198
199
200
201Function DetFitButtonProc(ba) : ButtonControl
202        STRUCT WMButtonAction &ba
203
204        switch( ba.eventCode )
205                case 2: // mouse up
206                        // click code here
207                       
208                        Wave dispW=root:curDispPanel
209                        Wave coefW=root:coef_PeakPix2D
210                       
211                        FuncFitMD/H="11000111100"/NTHR=0 BroadPeak_Pix2D coefW  dispW /D                       
212                       
213                        Wave ws=W_sigma
214                        AppendtoTable/W=PanelFit#T0 ws
215                       
216                        break
217                case -1: // control being killed
218                        break
219        endswitch
220
221        return 0
222End
223
224Function DetFitHelpButtonProc(ba) : ButtonControl
225        STRUCT WMButtonAction &ba
226
227        switch( ba.eventCode )
228                case 2: // mouse up
229                        // click code here
230                       
231                        DoAlert 0,"Help file not written yet..."
232                       
233                        break
234                case -1: // control being killed
235                        break
236        endswitch
237
238        return 0
239End
Note: See TracBrowser for help on using the repository browser.