source: trunk/User Procedures/Nika/NI1_USAXSSupport.ipf @ 1171

Last change on this file since 1171 was 1171, checked in by ilavsky, 9 months ago

Add Search for optimal solution to 3D aggregates

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 139.6 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method.
2#pragma version=1.53
3
4//*************************************************************************\
5//* Copyright (c) 2005 - 2021, Argonne National Laboratory
6//* This file is distributed subject to a Software License Agreement found
7//* in the file LICENSE that is included with this distribution.
8//*************************************************************************/
9
10//1.53 Added Dexela HDF5 support for WAXS, Fixed offset is read and set in NI1_9IDWFindI0, there is no function in Nika to set thsi dynamically.
11//1.52 Added mask which can mask off low sensitivity pixels between tiles.
12//1.51 added passing through NXMetadata, NXSample, NXInstrument, NXUser
13//1.50 Added Batch processing
14//1.49 add support for calibration factor in USAXS/SAXS/WAXS instrument
15//1.48 add solid angle correction to data reduction to match better SAXS and WAXS data.
16                //added Correction factor use, but for now hwardwired. This needs to be part of Nexus file...
17                //the correction factor will change for SAXS and WAXS due to different sensitivity needed, WAXS is 1/0.690699 more sensitive.
18//1.47 minor fix to mask size.
19//1.46 fix problem with WAXS when "WAXS use Blank" is not selected incorrectly set parameters.
20//1.45 minor fixes nd function names replaced.
21//1.44 add better handling of Slit length for SAXS with default value of 0.025 when user has nothing else. Better than 0.
22//1.43 minor fix for configruation.
23//1.42 changed 15IDD to 9IDC and modified for reading parameters from a file dynamically.
24//1.41 modified WAXS mask to have better masking of tile edges.
25//1.40 since Indra now can desmear data as part of last USAXS step, keep _C data always.
26//1.39 changed fake usaxs data from _usx to _u to save on numebr of characters
27//1.38 added to Pilatus readout of beamsize for SAXS and WAXS
28//1.37 added to SAXS use of thickness, why not - provides even better normalized data.
29//1.36 fixed issues with use of userSampleName
30//1.35 fix for bigSAXS failure
31//1.34 changed pinSAXS to SAXS
32//1.33 MINOR FIX FOR BUG IN READING PILATUS SAXS PIX_Y BEAM CENTER POSITION AND SETUP FOR UES WITH THE NEW NEXUST SUPPORT.
33//1.32 checked fit checkboxes and added check if we are runnign on USAXS computer to set path the USAXS_data
34//1.31 fix colorization of the LineuotDisplayPlot_Q graph.
35//1.30 added more calibratnt lines (10 for SAXS/WAXS)
36//1.29 WAXS transmission correction and add Mask for Pilatus 200kw
37//1.28 Minor fix to configuration
38//1.27 trimmed the name used for line profiles to 17 characters only, did tno work with Line Profiles.
39//1.26 fixed error in I0 lookup for Sample exposure which used ungated signal instead of gated one. Not sure when did this happen...
40//1.25 fix WAXS normalization I0 lookup. fixed I0_blank
41//1.24 added fix for Q resolution in line profile conversion. Related to adding the Line profile Q resolution ot main code. 
42//1.23 added normalization for WAXS and modified GUI + SAXS default mask. Fixed bug error when run second time and help fiel alrerady existed.
43//1.22 added more transferred parameters for pixel smearing.
44//1.21 added PE detector Nexus file for WAXS and for all detector read of Beam Size
45//1.20 more modifications for 15ID SAXS
46//1.19 modifications for 15ID SAXS done April 2015
47//1.18 added use of SEM as error estimate for WAXS and SAXS (and old method for big SAXS) . SEM seems best for Pilatus detectors?
48//1.17 fixes for mask use in WAXS settings
49//1.16 fixes for 9ID
50//1.15 fixes for 9ID data after the move. Only partial fix.
51//1.14 widen the angular range for sector average for SAXS - seems to be OK now with vacuum chamber. 
52//1.13 added Mask creation for horizon using vaccum chamber in 2014-08
53//1.12 added WAXS controls for 2013-01
54//1.11 fixed minor bug related to USAXS blank checking for SAXS caused by version 1.10
55//1.10 modified function searching for thickenss of the sample, added use of pin diode for tranmsission measurements
56//1.09 modified for beamline_support_version=1.0, May 2012 (for 2012-02). Fixed prior problems.
57//1.08 bigSAXS support updated. Bad data in the header are found from 2012-01. Need to get it fixed.
58//1.07 minor fix which was causing problems when SAXS setup was not run but nexus files were used. 
59//1.06 updated folder setting, which seemed to fail sicne the ConfigureNika initiates parameters.
60//1.05 added lookup for I0 gain as now we have autoranging I0 gain and therefore the gains may change between measurements.
61//1.04 fixed the issue with sliut length definition. Prior version had slit length of only 0.5 of the needed value due to the length definition we define it in USAXS.
62//1.03 minor fix the header was read ONLY from Sample. It still is, but no error is reported... Fixed weird GUI panel checkbox bug.
63//1.02 Modified to be able to find values in new 2/2012 Nexus format (and keep compatibility with prior (2011) version).
64//1.01 fixed to make work with M_SMR_waves also
65//1.0 initial release
66
67//this is package for support of 15ID-D SAXS and SAXS instruments.
68
69
70Function NI1_9IDCConfigureNika()
71
72        string OldDFf=GetDataFolder(1)
73
74        //first initialize
75        NI1A_Initialize2Dto1DConversion()
76        NEXUS_Initialize(0)
77        NVAR NX_InputFileIsNexus = root:Packages:Irena_Nexus:NX_InputFileIsNexus
78        NX_InputFileIsNexus = 1
79        //set some parameters here:
80       
81        setDataFOlder root:Packages:Convert2Dto1D:
82       
83        string ListOfVariables="USAXSSlitLength;SAXSGenSmearedPinData;SAXSDeleteTempPinData;USAXSForceTransmissionDialog;"
84        ListOfVariables +="USAXSSAXSselector;USAXSWAXSselector;USAXSWAXSDexselector;USAXSCheckForRIghtEmpty;USAXSCheckForRIghtDark;USAXSForceTransRecalculation;"
85        ListOfVariables +="USAXSLoadListedEmpDark;USAXSForceUSAXSTransmission;ReadParametersFromEachFile;WAXSSubtractBlank;"
86        ListOfVariables +="UsePixSensitiveMask;DisplayJPGFile;DexelaOffsetScale;"
87        string ListOfStrings="USAXSSampleName;"
88
89        variable i
90        //and here we create them
91        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
92                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
93        endfor         
94                                                                               
95        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
96                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
97        endfor 
98        //set some defaults
99        SVAR DataFileExtension = root:Packages:Convert2Dto1D:DataFileExtension
100        DataFileExtension="Nexus"
101
102        NVAR SAXSGenSmearedPinData=root:Packages:Convert2Dto1D:SAXSGenSmearedPinData
103        SAXSGenSmearedPinData=1
104        NVAR USAXSSAXSselector = root:Packages:Convert2Dto1D:USAXSSAXSselector
105        NVAR USAXSWAXSDexselector = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
106        NVAR USAXSWAXSselector = root:Packages:Convert2Dto1D:USAXSWAXSselector
107        if((USAXSWAXSselector+USAXSSAXSselector+USAXSWAXSDexselector)!=1)
108                USAXSSAXSselector = 1
109                USAXSWAXSDexselector = 0
110                USAXSWAXSselector = 0
111        endif
112       
113        NVAR ReadParametersFromEachFile
114        NVAR NX_ReadParametersOnLoad = root:Packages:Irena_Nexus:NX_ReadParametersOnLoad
115        ReadParametersFromEachFile = 1
116        NX_ReadParametersOnLoad = 1
117       
118        NVAR WAXSSubtractBlank = root:Packages:Convert2Dto1D:WAXSSubtractBlank
119        WAXSSubtractBlank=1
120       
121        NVAR DexelaOffsetScale
122        if(DexelaOffsetScale<=0 || DexelaOffsetScale>1)
123                DexelaOffsetScale = 0.9
124        endif
125        //update main panel...
126        DoWIndow NI1A_Convert2Dto1DPanel
127        if(V_Flag)
128                PopupMenu Select2DDataType win=NI1A_Convert2Dto1DPanel, mode=4
129                NI1A_UpdateDataListBox()
130        endif
131        //create config panel
132        DoWindow NI1_9IDCConfigPanel
133        if(V_Flag)
134                DoWindow /F NI1_9IDCConfigPanel
135        else
136                NI1_9IDCConfigPanelFunction()
137        endif
138        AutopositionWindow/M=0 NI1_9IDCConfigPanel 
139       
140        setDataFolder OldDFf
141end
142//************************************************************************************************************
143//************************************************************************************************************
144//************************************************************************************************************
145//************************************************************************************************************
146Function NI1_9IDCConfigPanelFunction() : Panel
147        PauseUpdate             // building window...
148        NewPanel /K=1/W=(470,87,1016,439)/N=NI1_9IDCConfigPanel
149        DoWindow/C NI1_9IDCConfigPanel
150        SetDrawLayer UserBack
151        SetDrawEnv fsize= 18,fstyle= 3,textrgb= (16385,16388,65535)
152        DrawText 10,25,"USAXS SAXS/WAXS Nexus file configuration"
153       
154        DrawText 10, 43, "SAXS : Pilatus 100k in USAXS/SAXS/WAXS"
155        DrawText 10, 60, "WAXS-Pilatus : default Pilatus 300kw in USAXS/SAXS/WAXS"
156        DrawText 10, 77, "WAXS-Dexela : rare Dexela 2315 in USAXS/SAXS/WAXS"
157        ///DrawText 10, 77, "SAXS     : large SAXS camera in the 15ID-D (only SAXS, no USAXS)"
158        Checkbox SAXSSelection,pos={10,90},size={100,20}, variable=root:Packages:Convert2Dto1D:USAXSSAXSselector, proc=NI1_9IDCCheckProc
159        Checkbox SAXSSelection, title ="SAXS", help={"Use to configure Nika for SAXS"}
160        Checkbox USAXSWAXSselector,pos={120,90},size={100,20}, variable=root:Packages:Convert2Dto1D:USAXSWAXSselector, proc=NI1_9IDCCheckProc
161        Checkbox USAXSWAXSselector, title ="WAXS-Pilatus (typ)", help={"Common detecctor - Use to configure Nika for WAXS using Pilatus"}
162        Checkbox USAXSWAXSDexselector,pos={230,90},size={100,20}, variable=root:Packages:Convert2Dto1D:USAXSWAXSDexselector, proc=NI1_9IDCCheckProc
163        Checkbox USAXSWAXSDexselector, title ="WAXS-Dexela (rare)", help={"Rare detector - Use to configure Nika for WAXS using Dexela"}
164
165        Checkbox DisplayJPGFile,pos={370,90},size={100,20}, variable=root:Packages:Convert2Dto1D:DisplayJPGFile, noproc
166        Checkbox DisplayJPGFile, title ="Display JPG File", help={"Display jpg file if it was collected... "}
167
168
169
170        Button Open9IDCManual,pos={430,5},size={100,20},proc=NI1_9IDCButtonProc,title="Open manual"
171        Button Open9IDCManual,help={"Open manual"}
172        Button OpenReadme9IDC,pos={430,25},size={100,20},proc=NI1_9IDCButtonProc,title="Open Instructions"
173        Button OpenReadme9IDC,help={"Open reademe with instructions"}
174       
175        NVAR ReadParametersFromEachFile = root:Packages:Convert2Dto1D:ReadParametersFromEachFile
176        Checkbox ReadParametersFromEachFile,pos={229,115},size={100,20}, variable=root:Packages:Convert2Dto1D:ReadParametersFromEachFile, proc=NI1_9IDCCheckProc
177        Checkbox ReadParametersFromEachFile, title ="Read Parameters from data files", help={"In this case we will read geometry values from each data file"}
178
179        Checkbox UsePixSensitiveMask,pos={229,140},size={100,20}, variable=root:Packages:Convert2Dto1D:UsePixSensitiveMask, proc=NI1_9IDCCheckProc
180        Checkbox UsePixSensitiveMask, title ="Mask less sensitive pixels", help={"Creates complicated mask which covers less sensitive pixles"}
181
182        Button ConfigureDefaultMethods,pos={29,115},size={150,20},proc=NI1_9IDCButtonProc,title="Set default settings"
183        Button ConfigureDefaultMethods,help={"Sets default methods for the data reduction at 9IDC (or 15IDD)"}
184       
185        Button CalibrateDistance,pos={29,138},size={150,20},proc=NI1_9IDCButtonProc,title="Calibrate geometry"
186        Button CalibrateDistance,help={"Configures for geometry calibration"}
187       
188        Button ConfigureWaveNoteParameters,pos={229,138},size={200,20},proc=NI1_9IDCButtonProc,title="Read geometry from wave note", disable=ReadParametersFromEachFile
189        Button ConfigureWaveNoteParameters,help={"Sets default geometry values based on image currently loaded in the Nika package"}
190        SetVariable USAXSSlitLength, pos={29,175}, size={150,20}, proc=NI1_9IDCSetVarProc, title="Slit length", variable=root:Packages:Convert2Dto1D:USAXSSlitLength
191        SetVariable USAXSSlitLength,help={"USAXS slit length in 1/A"}
192        Button SetUSAXSSlitLength,pos={229,170},size={200,20},proc=NI1_9IDCButtonProc,title="Set Slit Legnth"
193        Button SetUSAXSSlitLength,help={"Locate USAXS data from which to get the Slit length"}
194        Checkbox WAXSUseBlank,pos={229,167},size={100,20}, variable=root:Packages:Convert2Dto1D:WAXSSubtractBlank, proc=NI1_9IDCCheckProc
195        Checkbox WAXSUseBlank, title ="WAXS use Blank", help={"Controls if WAXS will subtacrt Empty/Blank image"}
196
197        SetVariable DexelaOffsetScale,pos={229,175},size={200,16},title="Scale offset"
198        SetVariable DexelaOffsetScale,help={"How much to scale offset, used to preven negative intensities"}
199        SetVariable DexelaOffsetScale,limits={0,1,0.01},value= root:Packages:Convert2Dto1D:DexelaOffsetScale
200
201
202//      Button WAXSUseBlank,pos={229,160},size={200,20},proc=NI1_9IDCButtonProc,title="WAXS Do NOT use Blank"
203//      Button WAXSUseBlank,help={"Push NOT to use blank with 200kw WAXS"}, fColor=(30583,30583,30583)
204//      Button CreateBadPIXMASK,pos={229,190},size={200,20},proc=NI1_9IDCButtonProc,title="Create SAXS/WAXS mask"
205//      Button CreateBadPIXMASK,help={"Create mask for Pilatus 100 SAXS and 200kw WAXS"}
206        Checkbox SAXSGenSmearedPinData,pos={29,220},size={150,20}, variable=root:Packages:Convert2Dto1D:SAXSGenSmearedPinData, proc=NI1_9IDCCheckProc
207        Checkbox SAXSGenSmearedPinData, title ="Create Smeared Data", help={"Set to create smeared data for merging with USAXS"}
208        Checkbox SAXSDeleteTempPinData,pos={229,220},size={150,20}, variable=root:Packages:Convert2Dto1D:SAXSDeleteTempPinData, noproc
209        Checkbox SAXSDeleteTempPinData, title ="Delete temp Data", help={"Delete the sector and line averages"}
210
211
212        TitleBox MoreUserControls  pos={20,257}, size={400,20}, title="\\Zr150Useful controls from Main Nika panel : "
213        TitleBox MoreUserControls frame=0,fColor=(2,39321,1),help={"These are Duplciates of controls fromNIka user may need. "}
214        //this is for SAXS
215        CheckBox QvectorMaxNumPnts,pos={10,280},size={130,14},title="Max num points?",proc=NI1A_CheckProc
216        CheckBox QvectorMaxNumPnts,help={"Use Max possible number of points? Num pnts = num pixels"}
217        CheckBox QvectorMaxNumPnts,variable= root:Packages:Convert2Dto1D:QvectorMaxNumPnts
218        SetVariable QbinPoints,pos={150,280},size={200,16},title="Number of points   "
219        SetVariable QbinPoints,help={"Number of points in Q you want to create"}
220        SetVariable QbinPoints,limits={0,Inf,10},value= root:Packages:Convert2Dto1D:QvectorNumberPoints
221       
222
223
224        //This is for WAXS
225        CheckBox UseQvector,pos={10,280},size={90,14},title="Q space?", mode=1, proc=NI1A_CheckProc
226        CheckBox UseQvector,help={"Select to have output as function of q [inverse nm]"}
227        CheckBox UseQvector,variable= root:Packages:Convert2Dto1D:UseQvector
228        CheckBox UseDspacing,pos={130,280},size={90,14},title="d ?", mode=1, proc=NI1A_CheckProc
229        CheckBox UseDspacing,help={"Select to have output as function of d spacing"}
230        CheckBox UseDspacing,variable= root:Packages:Convert2Dto1D:UseDspacing
231        CheckBox UseTheta,pos={250,280},size={90,14},title="2 Theta ?", mode=1, proc=NI1A_CheckProc
232        CheckBox UseTheta,help={"Select to have output as function of 2 theta"}
233        CheckBox UseTheta,variable= root:Packages:Convert2Dto1D:UseTheta
234       
235       
236//      Checkbox USAXSForceUSAXSTransmission,pos={29,255},size={150,20}, variable=root:Packages:Convert2Dto1D:USAXSForceUSAXSTransmission, noproc
237//      Checkbox USAXSForceUSAXSTransmission, title ="Force use of USAXS Empty/Transm. ?", help={"Set to force use of same empty as USAXS and USAXS Transmission"}
238//      Checkbox USAXSForceTransRecalculation,pos={29,255},size={150,20}, variable=root:Packages:Convert2Dto1D:USAXSForceTransRecalculation, noproc
239//      Checkbox USAXSForceTransRecalculation, title ="Recalculate always transmission ?", help={"Set to get Transmission to be racalculated from Empty, Smaple & Dark scaler values"}
240//      Checkbox ForceTransmissionDialog,pos={29,280},size={150,20}, variable=root:Packages:Convert2Dto1D:USAXSForceTransmissionDialog, noproc
241//      Checkbox ForceTransmissionDialog, title ="Force transmission verification?", help={"Set to get Transmission dialog to check for every sample"}
242
243//      Checkbox USAXSCheckForRIghtEmpty,pos={10,220},size={150,20}, variable=root:Packages:Convert2Dto1D:USAXSCheckForRIghtEmpty, noproc
244//      Checkbox USAXSCheckForRIghtEmpty, title ="Check Empty Name", help={"Set to have code force dialog to load right empty"}
245//      Checkbox USAXSCheckForRIghtDark,pos={180,220},size={150,20}, variable=root:Packages:Convert2Dto1D:USAXSCheckForRIghtDark, noproc
246//      Checkbox USAXSCheckForRIghtDark, title ="Check Dark Name", help={"Set to have code force dialog to load correct Dark"}
247//      Checkbox USAXSLoadListedEmpDark,pos={350,220},size={150,20}, variable=root:Packages:Convert2Dto1D:USAXSLoadListedEmpDark, noproc
248//      Checkbox USAXSLoadListedEmpDark, title ="Automatically load Emp/Dark", help={"Load NX file listed Empty/Dark if they can be identified"}
249
250        TitleBox LoadBlankWarning  pos={20,320}, size={400,20}, title="\\Zr150>>>>    Push \"Set default settings\" button now     <<<<"
251        TitleBox LoadBlankWarning fColor=(52428,1,1),help={"Instructions to follow..."}
252        NI1_9IDCDisplayAndHideControls()
253EndMacro
254//************************************************************************************************************
255//************************************************************************************************************
256Function NI1_9IDCDisplayAndHideControls()
257
258        NVAR USAXSSAXSselector = root:Packages:Convert2Dto1D:USAXSSAXSselector
259        NVAR USAXSWAXSselector = root:Packages:Convert2Dto1D:USAXSWAXSselector
260        NVAR USAXSWAXSDexselector = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
261        NVAR ReadVals=root:Packages:Convert2Dto1D:ReadParametersFromEachFile
262        variable DisplayPinCntrls=USAXSWAXSDexselector || USAXSWAXSselector
263        variable DisplayWAXSCntrls=USAXSSAXSselector || USAXSWAXSselector || USAXSWAXSDexselector
264        NVAR QvectorMaxNumPnts=root:Packages:Convert2Dto1D:QvectorMaxNumPnts
265
266        Checkbox SAXSGenSmearedPinData, win= NI1_9IDCConfigPanel, disable = DisplayPinCntrls
267        Checkbox SAXSDeleteTempPinData,  win= NI1_9IDCConfigPanel, disable = DisplayPinCntrls
268
269        Button ConfigureWaveNoteParameters,  win= NI1_9IDCConfigPanel, disable = ReadVals
270        Checkbox WAXSUseBlank,win= NI1_9IDCConfigPanel, disable = !(USAXSWAXSselector&&USAXSWAXSDexselector)
271        SetVariable DexelaOffsetScale,win= NI1_9IDCConfigPanel, disable = !(USAXSWAXSDexselector)
272        //      Button CreateBadPIXMASK,win= NI1_9IDCConfigPanel, disable = USAXSBigSAXSselector
273        Button SetUSAXSSlitLength, win= NI1_9IDCConfigPanel, disable = DisplayPinCntrls
274        SetVariable USAXSSlitLength, win= NI1_9IDCConfigPanel, disable = DisplayPinCntrls
275       
276        CheckBox QvectorMaxNumPnts, win= NI1_9IDCConfigPanel, disable = (DisplayPinCntrls)
277        SetVariable QbinPoints, win= NI1_9IDCConfigPanel, disable = (DisplayPinCntrls || QvectorMaxNumPnts)
278        //This is for WAXS
279        CheckBox UseQvector,win= NI1_9IDCConfigPanel, disable = !(USAXSWAXSselector||USAXSWAXSDexselector)
280        CheckBox UseDspacing,win= NI1_9IDCConfigPanel, disable = !(USAXSWAXSselector||USAXSWAXSDexselector)
281        CheckBox UseTheta,win= NI1_9IDCConfigPanel, disable = !(USAXSWAXSselector||USAXSWAXSDexselector)
282end
283//************************************************************************************************************
284//************************************************************************************************************
285
286Function NI1_9IDCCheckProc(cba) : CheckBoxControl
287        STRUCT WMCheckboxAction &cba
288
289        switch( cba.eventCode )
290                case 2: // mouse up
291                        Variable checked = cba.checked
292                        NVAR USAXSWAXSselector = root:Packages:Convert2Dto1D:USAXSWAXSselector
293                        NVAR USAXSSAXSselector = root:Packages:Convert2Dto1D:USAXSSAXSselector
294                        NVAR USAXSWAXSDexselector = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
295                        NVAR readVals=root:Packages:Convert2Dto1D:ReadParametersFromEachFile
296                        if(stringmatch(cba.ctrlName,"ReadParametersFromEachFile"))
297                                NVAR NX_ReadParametersOnLoad = root:Packages:Irena_Nexus:NX_ReadParametersOnLoad
298                                NX_ReadParametersOnLoad = cba.checked
299                                NI1_9IDCDisplayAndHideControls()
300                        endif
301                        if(stringmatch(cba.ctrlName,"USAXSWAXSselector"))
302                                TitleBox LoadBlankWarning win=NI1_9IDCConfigPanel, title="\\Zr150>>>>    Push \"Set default settings\" button now     <<<<"
303                                if(checked)
304                                        USAXSWAXSDexselector =0
305                                        USAXSSAXSselector=0
306                                        //USAXSWAXSDexselector=0
307                                endif
308                                NI1_9IDCDisplayAndHideControls()
309                        endif
310                        if(stringmatch(cba.ctrlName,"SAXSSelection"))
311                                TitleBox LoadBlankWarning win=NI1_9IDCConfigPanel, title="\\Zr150>>>>    Push \"Set default settings\" button now     <<<<"
312                                if(checked)
313                                        USAXSWAXSselector =0
314                                        USAXSSAXSselector=1
315                                        USAXSWAXSDexselector=0
316                                endif
317                                NI1_9IDCDisplayAndHideControls()
318                        endif
319                        if(stringmatch(cba.ctrlName,"USAXSWAXSDexselector"))
320                                TitleBox LoadBlankWarning win=NI1_9IDCConfigPanel, title="\\Zr150>>>>    Push \"Set default settings\" button now     <<<<"
321                                if(checked)
322                                        USAXSWAXSDexselector =1
323                                        USAXSSAXSselector=0
324                                        USAXSWAXSselector=0
325                                endif
326                                NI1_9IDCDisplayAndHideControls()
327                        endif
328                       
329                        if(stringmatch(cba.ctrlName,"UsePixSensitiveMask"))
330                                NI1_Cleanup2Dto1DFolder()
331                        endif
332//                      if(stringmatch(cba.ctrlName,"BigSAXSSelection"))
333//                              if(checked)
334//                                      //USAXSBigSAXSselector =0
335//                                      USAXSSAXSselector=0
336//                                      USAXSWAXSselector=0
337//                              endif
338//                              NI1_9IDCDisplayAndHideControls()
339//                      endif
340                        if(stringmatch(cba.ctrlName,"WAXSUseBlank"))
341                                NI1_9IDCWAXSBlankSUbtraction(checked)                           
342                        endif
343                        if(USAXSWAXSDexselector+USAXSSAXSselector+USAXSWAXSselector!=1)
344                                TitleBox LoadBlankWarning win=NI1_9IDCConfigPanel, title="\\Zr150>>>>    Push \"Set default settings\" button now     <<<<"
345                                USAXSWAXSDexselector =0
346                                USAXSSAXSselector=1
347                                USAXSWAXSselector=0
348                                NI1_9IDCDisplayAndHideControls()
349                        endif
350
351                        if(stringmatch(cba.CtrlName,"SAXSGenSmearedPinData"))
352                                NVAR UseLineProfile=root:Packages:Convert2Dto1D:UseLineProfile
353                                if(Checked)
354                                        NVAR USAXSSlitLength = root:Packages:Convert2Dto1D:USAXSSlitLength
355                                        SVAR LineProf_CurveType=root:Packages:Convert2Dto1D:LineProf_CurveType 
356                                        if(USAXSSlitLength<0.001 || numtype(USAXSSlitLength)!=0)        //slit length not set, force user to find it...
357                                                USAXSSlitLength = NI1_9IDCFIndSlitLength()
358                                        endif
359                                        UseLineProfile=1
360                                        LineProf_CurveType="Vertical Line"
361                                else
362                                        UseLineProfile=0
363                                endif
364                        endif
365                       
366                        break
367                case -1: // control being killed
368                        break
369        endswitch
370
371        return 0
372End
373
374//************************************************************************************************************
375//************************************************************************************************************
376Function NI1_9IDCSetVarProc(sva) : SetVariableControl
377        STRUCT WMSetVariableAction &sva
378
379        switch( sva.eventCode )
380                case 1: // mouse up
381                                NI1_9IDCSetLineWIdth()                 
382                case 2: // Enter key
383                                NI1_9IDCSetLineWIdth()                 
384                case 3: // Live update
385                        Variable dval = sva.dval
386                        String sval = sva.sval
387                        break
388                case -1: // control being killed
389                        break
390        endswitch
391
392        return 0
393End
394//************************************************************************************************************
395//************************************************************************************************************
396
397Function NI1_Open9IDCManual()
398        //this function writes batch file and starts the manual.
399        //we need to write following batch file: "C:\Program Files\WaveMetrics\Igor Pro Folder\User Procedures\Irena\Irena manual.pdf"
400        //on Mac we just fire up the Finder with Mac type path...
401       
402        //check where we run...
403                string WhereIsManual
404                string WhereAreProcedures=RemoveEnding(FunctionPath(""),"NI1_15IDDsupport.ipf")
405                String manualPath = ParseFilePath(5,"15IDDpinSAXSAnalysis.pdf","*",0,0)
406        String cmd
407       
408        if (stringmatch(IgorInfo(3), "*Macintosh*"))
409             //  manualPath = "User Procedures:Irena:Irena manual.pdf"
410               sprintf cmd "tell application \"Finder\" to open \"%s\"",WhereAreProcedures+manualPath
411               ExecuteScriptText cmd
412                if (strlen(S_value)>2)
413//                      DoAlert 0, S_value
414                endif
415
416        else
417                //manualPath = "User Procedures\Irena\Irena manual.pdf"
418                //WhereIsIgor=WhereIsIgor[0,1]+"\\"+IN2G_ChangePartsOfString(WhereIsIgor[2,inf],":","\\")
419                WhereAreProcedures=ParseFilePath(5,WhereAreProcedures,"*",0,0)
420                whereIsManual = "\"" + WhereAreProcedures+manualPath+"\""
421                NewNotebook/F=0 /N=NewBatchFile
422                Notebook NewBatchFile, text=whereIsManual//+"\r"
423                SaveNotebook/O NewBatchFile as SpecialDirPath("Temporary", 0, 1, 0 )+"StartManual.bat"
424                KillWIndow/Z NewBatchFile
425                ExecuteScriptText "\""+SpecialDirPath("Temporary", 0, 1, 0 )+"StartManual.bat\""
426        endif
427end
428
429//************************************************************************************************************
430//************************************************************************************************************
431//************************************************************************************************************
432//************************************************************************************************************
433
434Function NI1_9IDCButtonProc(ba) : ButtonControl
435        STRUCT WMButtonAction &ba
436
437        switch( ba.eventCode )
438                case 2: // mouse up
439                        // click code here
440
441                        NVAR isSAXS=root:Packages:Convert2Dto1D:USAXSSAXSselector
442                        NVAR isWAXS=root:Packages:Convert2Dto1D:USAXSWAXSselector
443                        NVAR isDexelaWAXS = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
444                        variable i
445                        if (stringmatch("Open9IDCManual",ba.CtrlName))
446                                NI1_Open9IDCManual()
447                        endif
448                        if (stringmatch("OpenReadme9IDC",ba.CtrlName))
449                                NI1_9IDCCreateHelpNbk()
450                        endif
451                        if (stringmatch("ConfigureDefaultMethods",ba.CtrlName) || stringmatch("CalibrateDistance",ba.CtrlName))
452                                //first kill the Nexus loader file in case we are using same name for SAXS and WAXS...
453                                KillDataFolder/Z root:Packages:NexusImportTMP:
454                                //now we should be able to read this in without challenges?
455                                NI1A_Convert2Dto1DMainPanel()
456                                NI1_Cleanup2Dto1DFolder()                       //make sure old grabrage is cleaned up.
457                                SVAR SampleNameMatchStr = root:Packages:Convert2Dto1D:SampleNameMatchStr
458                                SampleNameMatchStr =""
459                                string selectedFile
460                                selectedFile = NI1_9IDCSetDefaultConfiguration()                               
461                                Wave SelectionsofCCDDataInCCDPath = root:Packages:Convert2Dto1D:ListOf2DSampleDataNumbers
462                                Wave/T ListOfCCDDataInCCDPath = root:Packages:Convert2Dto1D:ListOf2DSampleData
463                                SelectionsofCCDDataInCCDPath=0
464                                for(i=0;i<numpnts(SelectionsofCCDDataInCCDPath);i+=1)
465                                        if(stringmatch(selectedFile,ListOfCCDDataInCCDPath[i]))
466                                                SelectionsofCCDDataInCCDPath[i] = 1
467                                        endif
468                                endfor
469                                NI1A_DisplayOneDataSet()
470                                NI1_9IDCConfigNexus()
471                                NVAR ReadVals=root:Packages:Convert2Dto1D:ReadParametersFromEachFile
472                                if(ReadVals)
473                                        for(i=0;i<numpnts(SelectionsofCCDDataInCCDPath);i+=1)
474                                                if(stringmatch(selectedFile,ListOfCCDDataInCCDPath[i]))
475                                                        SelectionsofCCDDataInCCDPath[i] = 1
476                                                endif
477                                        endfor
478                                        NI1A_DisplayOneDataSet()
479                                endif
480                                //and create mask automatically...
481                                if(isSAXS)
482                                        NI1_9IDCCreateSAXSPixMask()             
483                                        TitleBox LoadBlankWarning  win=NI1_9IDCConfigPanel, title="\\Zr150>>>> Load Empty/Blank and set Slit legth; ... done   <<<<"
484                                        //force user to find Slit length oif needed
485                                        NVAR/Z DesmearData = root:Packages:Indra3:DesmearData
486                                        NVAR SAXSGenSmearedPinData = root:Packages:Convert2Dto1D:SAXSGenSmearedPinData
487                                        if(NVAR_Exists(DesmearData))
488                                                if(DesmearData)
489                                                        SAXSGenSmearedPinData =0                        //user is generating desmeared data, likely does not need smeared SAXS data
490                                                else
491                                                        NVAR USAXSSlitLength=root:Packages:Convert2Dto1D:USAXSSlitLength
492                                                        USAXSSlitLength = NI1_9IDCFIndSlitLength()
493                                                        NI1_9IDCSetLineWIdth()                                                 
494                                                endif
495                                        else
496                                                        NVAR USAXSSlitLength=root:Packages:Convert2Dto1D:USAXSSlitLength
497                                                        USAXSSlitLength = NI1_9IDCFIndSlitLength()
498                                                        NI1_9IDCSetLineWIdth()                                                 
499                                        endif
500                                elseif(isWAXS || isDexelaWAXS) 
501                                        NVAR UseLineProfile= root:Packages:Convert2Dto1D:UseLineProfile         //uncheck just in case leftover from SAXS
502                                        UseLineProfile=0
503                                        NVAR WAXSSubtractBlank = root:Packages:Convert2Dto1D:WAXSSubtractBlank
504                                        NI1_9IDCWAXSBlankSUbtraction(WAXSSubtractBlank)
505                                        NI1_9IDCCreateWAXSPixMask()     
506                                        TitleBox LoadBlankWarning  win=NI1_9IDCConfigPanel, title="\\Zr150>>>> Load Empty/Blank; ... done   <<<<"
507                                endif   
508                                //end of mask creation
509                                //set user to Empty?Dasrk tab
510                                TabControl Convert2Dto1DTab win=NI1A_Convert2Dto1DPanel, value=3
511                                NI1A_TabProc("NI1A_Convert2Dto1DPanel",3)
512                        endif
513
514                        if (stringmatch("CalibrateDistance",ba.CtrlName))
515                                NI1_CreateBmCntrFile()
516                                SVAR BCMatchNameString = root:Packages:Convert2Dto1D:BCMatchNameString
517                                if(isSAXS)
518                                        BCMatchNameString = "(?i)AgB"
519                                else
520                                        BCMatchNameString = "(?i)LaB"
521                                endif
522                                NI1BC_UpdateBMCntrListBOx()
523                                Wave/T ListOfCCDDataInBmCntrPath = root:Packages:Convert2Dto1D:ListOfCCDDataInBmCntrPath
524                                Wave SelofCCDDataInBmCntrDPath = root:Packages:Convert2Dto1D:SelofCCDDataInBmCntrDPath
525                                variable found=0
526                                for(i=0;i<numpnts(SelofCCDDataInBmCntrDPath);i+=1)
527                                        if(stringmatch(selectedFile,ListOfCCDDataInBmCntrPath[i]))
528                                                SelofCCDDataInBmCntrDPath[i] = 1
529                                                found = 1
530                                        endif
531                                endfor
532                                if(!found)
533                                        if(numpnts(SelofCCDDataInBmCntrDPath)==1)
534                                                SelofCCDDataInBmCntrDPath[0]=1
535                                                found=1
536                                        endif
537                                endif
538                                if(found)
539                                        NI1BC_BmCntrButtonProc("CreateROIWorkImage")
540                                endif           
541                        endif
542
543
544                        if (stringmatch("ConfigureWaveNoteParameters",ba.CtrlName))
545                                NI1_9IDCWaveNoteValuesNx()                             
546                        endif
547                        if (stringmatch("SetUSAXSSlitLength",ba.CtrlName))
548                                NVAR USAXSSlitLength=root:Packages:Convert2Dto1D:USAXSSlitLength
549                                USAXSSlitLength = NI1_9IDCFIndSlitLength()
550                                NI1_9IDCSetLineWIdth()                 
551                        endif
552                        break
553                case -1: // control being killed
554                        break
555        endswitch
556
557        return 0
558End
559//************************************************************************************************************
560//************************************************************************************************************
561//************************************************************************************************************
562Function NI1_9IDCConfigNexus()
563
564
565        NEXUS_ResetParamXRef(1)
566        NEXUS_GuessParamXRef()
567        Wave/T ListOfParamsAndPaths = root:Packages:Irena_Nexus:ListOfParamsAndPaths
568        Wave ListOfParamsAndPathsSel = root:Packages:Irena_Nexus:ListOfParamsAndPathsSel
569
570        NVAR useWAXS = root:Packages:Convert2Dto1D:USAXSWAXSselector
571        NVAR useSAXS = root:Packages:Convert2Dto1D:USAXSSAXSselector
572//      NVAR useBigSAXS = root:Packages:Convert2Dto1D:USAXSBigSAXSselector
573        NVAR useWAXSDexela = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
574
575        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
576        if(!WaveExists(w2D))
577                Abort "Load one Image file first so the tool can read the wave note information" 
578        endif
579        string OldNOte=note(w2D)
580        SVAR Current2DFileName = root:Packages:Convert2Dto1D:FileNameToLoad
581        variable beamline_support_version
582
583print StringByKey("data:model", OldNOte  , "=" , ";")
584print OldNOte
585        if(stringMatch("9ID", StringByKey("instrument:source:facility_beamline", OldNOte  , "=" , ";")) && stringMatch("Pilatus", StringByKey("data:model", OldNOte  , "=" , ";")))     
586//              //9ID data from 2015 onwards...
587//              Wavelength = NumberByKey(NI1_9IDCFindKeyStr("monochromator:wavelength=", OldNote), OldNote  , "=" , ";")
588//              XRayEnergy = 12.3984/Wavelength
589                if(useSAXS)             //the title in NX files seems to be unusable for now...
590                        ListOfParamsAndPaths[0][0]="UserSampleName"
591                        ListOfParamsAndPaths[0][1]=     ""
592//                      PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("detector:x_pixel_size=", OldNote), OldNote  , "=" , ";")
593//                      PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("detector:y_pixel_size=", OldNote), OldNote  , "=" , ";")
594//                      HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
595//                      VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
596//                      BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
597//                      BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
598//                      SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("detector:distance=", OldNote), OldNote  , "=" , ";")
599//                      BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("shape:xsize=", OldNote), OldNote  , "=" , ";")
600//                      BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("shape:ysize=", OldNote), OldNote  , "=" , ";")
601                elseif(useWAXS)
602                        ListOfParamsAndPaths[0][0]="UserSampleName"
603                        ListOfParamsAndPaths[0][1]=     ""
604                        //ListOfParamsAndPaths[0][1]=   ":entry:title"
605
606                        ListOfParamsAndPaths[1][0]="SampleThickness"
607                        ListOfParamsAndPaths[1][1]=     ":entry:sample:thickness"
608
609                        ListOfParamsAndPaths[5][0]="SampleToCCDDistance"
610                        ListOfParamsAndPaths[5][1]=":entry:"+NI1_9IDCFindKeyStr("detector:distance=", OldNote)
611
612                        ListOfParamsAndPaths[8][0]="BeamCenterX"
613                        ListOfParamsAndPaths[8][1]=":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_center_x_pixel=", OldNote)
614
615                        ListOfParamsAndPaths[9][0]="BeamCenterY"
616                        ListOfParamsAndPaths[9][1]=":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_center_y_pixel=", OldNote)
617
618                        ListOfParamsAndPaths[10][0]="BeamSizeX"
619                        ListOfParamsAndPaths[10][1]=    ":entry:"+NI1_9IDCFindKeyStr("shape:xsize=", OldNote)   
620                        ListOfParamsAndPaths[11][0]="BeamSizeY"
621                        ListOfParamsAndPaths[11][1]=    ":entry:"+NI1_9IDCFindKeyStr("shape:ysize=", OldNote)
622
623                        ListOfParamsAndPaths[12][0]="PixelSizeX"
624                        ListOfParamsAndPaths[12][1]=":entry:"+NI1_9IDCFindKeyStr("x_pixel_size=", OldNote)     
625                        ListOfParamsAndPaths[13][0]="PixelSizeY"
626                        ListOfParamsAndPaths[13][1]=    ":entry:"+NI1_9IDCFindKeyStr("y_pixel_size=", OldNote)
627
628
629                        ListOfParamsAndPaths[14][0]="HorizontalTilt"
630                        ListOfParamsAndPaths[14][1]=    ":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_tilt_x=", OldNote)       
631                        ListOfParamsAndPaths[15][0]="VerticalTilt"
632                        ListOfParamsAndPaths[15][1]=    ":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_tilt_y=", OldNote)
633                                //                      PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("waxs_detector:x_pixel_size=", OldNote), OldNote  , "=" , ";")
634                                //                      PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("waxs_detector:y_pixel_size=", OldNote), OldNote  , "=" , ";")
635                                //                      HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
636                                //                      VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
637                                 
638                                //                      BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
639                                //                      BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
640                                //                      SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("waxs_detector:distance=", OldNote), OldNote  , "=" , ";")
641                                //                      BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("shape:xsize=", OldNote), OldNote  , "=" , ";")
642                                //                      BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("shape:ysize=", OldNote), OldNote  , "=" , ";")
643                endif           
644        elseif(stringMatch("9ID", StringByKey("instrument:source:facility_beamline", OldNOte  , "=" , ";")) && stringMatch("Dexela 2315", StringByKey("Metadata:Model", OldNOte  , "=" , ";")))
645                        //this is Dexela WAXS = useWAXSDexela - same as Pilatus WAXS, except this one has offset for each frame.
646                        ListOfParamsAndPaths[0][0]="UserSampleName"
647                        ListOfParamsAndPaths[0][1]=     ""
648                        //ListOfParamsAndPaths[0][1]=   ":entry:title"
649
650                        ListOfParamsAndPaths[1][0]="SampleThickness"
651                        ListOfParamsAndPaths[1][1]=     ":entry:sample:thickness"
652
653                        ListOfParamsAndPaths[5][0]="SampleToCCDDistance"
654                        ListOfParamsAndPaths[5][1]=":entry:"+NI1_9IDCFindKeyStr("detector:distance=", OldNote)
655
656                        ListOfParamsAndPaths[8][0]="BeamCenterX"
657                        ListOfParamsAndPaths[8][1]=":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_center_x_pixel=", OldNote)
658
659                        ListOfParamsAndPaths[9][0]="BeamCenterY"
660                        ListOfParamsAndPaths[9][1]=":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_center_y_pixel=", OldNote)
661
662                        ListOfParamsAndPaths[10][0]="BeamSizeX"
663                        ListOfParamsAndPaths[10][1]=    ":entry:"+NI1_9IDCFindKeyStr("shape:xsize=", OldNote)   
664                        ListOfParamsAndPaths[11][0]="BeamSizeY"
665                        ListOfParamsAndPaths[11][1]=    ":entry:"+NI1_9IDCFindKeyStr("shape:ysize=", OldNote)
666
667                        ListOfParamsAndPaths[12][0]="PixelSizeX"
668                        ListOfParamsAndPaths[12][1]=":entry:"+NI1_9IDCFindKeyStr("x_pixel_size=", OldNote)     
669                        ListOfParamsAndPaths[13][0]="PixelSizeY"
670                        ListOfParamsAndPaths[13][1]=    ":entry:"+NI1_9IDCFindKeyStr("y_pixel_size=", OldNote)
671
672
673                        ListOfParamsAndPaths[14][0]="HorizontalTilt"
674                        ListOfParamsAndPaths[14][1]=    ":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_tilt_x=", OldNote)       
675                        ListOfParamsAndPaths[15][0]="VerticalTilt"
676                        ListOfParamsAndPaths[15][1]=    ":entry:"+NI1_9IDCFindKeyStr("waxs_ccd_tilt_y=", OldNote)
677        else
678                        NVAR ReadVals=root:Packages:Convert2Dto1D:ReadParametersFromEachFile
679                        ReadVals = 0
680                        DOWINDOW/F NI1_9IDCConfigPanel
681                        NI1_9IDCDisplayAndHideControls()
682                        Abort "These data cannot be read from each file, likely too old. Try button \"Read geometry from wave note\", it is smarter" 
683        endif
684end
685//************************************************************************************************************
686Function NI1_9IDCCreateSAXSPixMask()                   
687
688        string OldDF=GetDataFolder(1)
689        SetDataFolder root:Packages:Convert2Dto1D
690        NVAR/Z UsePixSensitiveMask = root:Packages:Convert2Dto1D:UsePixSensitiveMask
691        if(!NVAR_Exists(UsePixSensitiveMask))
692                variable/g UsePixSensitiveMask=0
693        endif
694        Make/O/B/U/N=(195,487) M_ROIMask
695        M_ROIMask =1
696        M_ROIMask[][0,7]=0
697        M_ROIMask[86][17] = 0
698        M_ROIMask[58][112] = 0
699        if(UsePixSensitiveMask)
700                M_ROIMask[][0,2]=0
701                M_ROIMask[][59,61] = 0
702                M_ROIMask[][120,122] = 0
703                M_ROIMask[][181,183] = 0
704                M_ROIMask[][240,244] = 0
705                M_ROIMask[][303,306] = 0
706                M_ROIMask[][364,366] = 0
707                M_ROIMask[][425,427] = 0
708                M_ROIMask[95,99][] = 0
709                M_ROIMask[0,2][] = 0
710                M_ROIMask[192,194][] = 0
711                M_ROIMask[][485,486] = 0
712
713        endif
714       
715        string notestr="MaskOffLowIntPoints:0;LowIntToMaskOff:0>// ;ITEMNO:0;\r"
716        notestr+="      SetDrawEnv xcoord= top,ycoord= left\r"
717        notestr+="// ;ITEMNO:1;\r"
718        notestr+="// ;ITEMNO:1;,linefgc= (3,52428,1)\r"
719        notestr+="// ;ITEMNO:2;\r"
720        notestr+="// ;ITEMNO:2;,fillpat= 5,fillfgc= (0,0,0)\r"
721        notestr+="// ;ITEMNO:3;\r"
722        notestr+="      SetDrawEnv save\r"
723        notestr+="// ;ITEMNO:4;\r"
724        notestr+="      SetDrawEnv xcoord= top,ycoord= left\r"
725        notestr+="// ;ITEMNO:5;\r"
726        notestr+="// ;ITEMNO:5;,linefgc= (3,52428,1)\r"
727        notestr+="// ;ITEMNO:6;\r"
728        notestr+="// ;ITEMNO:6;,fillpat= 5,fillfgc= (0,0,0)\r"
729        notestr+="// ;ITEMNO:7;\r"
730        notestr+="      SetDrawEnv save\r"
731        notestr+="// ;ITEMNO:8;\r"
732        notestr+="      DrawRect 85.5,16.5,86.5,17.5\r"
733        notestr+="// ;ITEMNO:9;\r"
734        notestr+="      DrawRect 57.5,111.5,58.5,112.5\r"
735        notestr+="// ;ITEMNO:10;\r"
736        notestr+="      DrawRect 57.5,0,61.5,486.5\r"
737        notestr+="// ;ITEMNO:11;\r"
738        notestr+="      DrawRect 118.5,0,122.5,486.5\r"
739        notestr+="// ;ITEMNO:12;\r"
740        notestr+="      DrawRect 240.5,0,244.5,486.5\r"
741        notestr+="// ;ITEMNO:13;\r"
742        notestr+="      DrawRect 301.5,0,305.5,486.5\r"
743        notestr+="// ;ITEMNO:14;\r"
744        notestr+="      DrawRect 362.5,0,366.5,486.5\r"
745        notestr+="// ;ITEMNO:14;\r"
746        notestr+="      DrawRect 423.5,0,427.5,486.5\r"
747        notestr+="// ;ITEMNO:15;\r"
748        notestr+="      DrawRect 0,94.5,486.9,99.5\r"
749        notestr+="// ;ITEMNO:16;\r"
750        notestr+="      DrawRect 0,0,486.5,2\r"
751        notestr+="// ;ITEMNO:17;\r"
752        notestr+="      DrawRect 0,192,486.5,194.5\r"
753
754        note M_ROIMask, notestr
755       
756        SVAR CurrentMaskFileName = root:Packages:Convert2Dto1D:CurrentMaskFileName
757        CurrentMaskFileName="9IDC default SAXS mask"
758        NVAR UseMask = root:Packages:Convert2Dto1D:UseMask
759        UseMask=1
760        setDataFOlder OldDf
761end     
762//************************************************************************************************************
763//************************************************************************************************************
764Function NI1_9IDCCreateWAXSPixMask()                   
765
766        string OldDF=GetDataFolder(1)
767        SetDataFolder root:Packages:Convert2Dto1D
768        Wave/Z OriginalCCD = root:Packages:Convert2Dto1D:CCDImageToConvert
769        if(!WaveExists(OriginalCCD))
770                Abort "Load WAXS image first, then create mask again"
771        endif
772        Duplicate/O OriginalCCD, M_ROIMask
773        Redimension /B/U M_ROIMask
774        NVAR/Z UsePixSensitiveMask = root:Packages:Convert2Dto1D:UsePixSensitiveMask
775        if(!NVAR_Exists(UsePixSensitiveMask))
776                variable/g UsePixSensitiveMask=0
777        endif
778        M_ROIMask =1
779        string notestr
780        if(DimSize(M_ROIMask, 1)>500 && DimSize(M_ROIMask, 1)<1500)     //Pilatus 200kW
781                M_ROIMask[0,194][486,494]=0
782                M_ROIMask[0,3][0,980]=0
783                M_ROIMask[193,194][0,980]=0
784                M_ROIMask[0,194][0,1]=0
785                M_ROIMask[0,194][979,980]=0
786                if(UsePixSensitiveMask)
787                        M_ROIMask[][0,2]=0
788                        M_ROIMask[][59,61] = 0
789                        M_ROIMask[][120,122] = 0
790                        M_ROIMask[][181,183] = 0
791                        M_ROIMask[][242,244] = 0
792                        M_ROIMask[][303,305] = 0
793                        M_ROIMask[][364,366] = 0
794                        M_ROIMask[][425,427] = 0
795                       
796                        M_ROIMask[][553,555] = 0
797                        M_ROIMask[][614,616] = 0
798                        M_ROIMask[][675,677] = 0
799                        M_ROIMask[][736,738] = 0
800                        M_ROIMask[][797,799] = 0
801                        M_ROIMask[][858,860] = 0
802                        M_ROIMask[][919,921] = 0
803
804                        M_ROIMask[0,194][485,495]=0
805
806                        M_ROIMask[96,98][] = 0
807                        M_ROIMask[0,2][] = 0
808                        M_ROIMask[192,194][] = 0
809                        M_ROIMask[][485,486] = 0
810       
811                endif
812       
813                notestr="MaskOffLowIntPoints:0;LowIntToMaskOff:0>// ;ITEMNO:0;\r"
814                notestr+="      SetDrawEnv xcoord= top,ycoord= left\r"
815                notestr+="// ;ITEMNO:1;\r"
816                notestr+="SetDrawEnv linefgc= (3,52428,1)\r"
817                notestr+="// ;ITEMNO:2;\r"
818                notestr+="SetDrawEnv fillpat= 5,fillfgc= (0,0,0)\r"
819                notestr+="// ;ITEMNO:3;\r"
820                notestr+="SetDrawEnv save\r"
821                notestr+="// ;ITEMNO:4;\r"
822                notestr+="DrawRect -1,485,196,495\r"   
823                note M_ROIMask, notestr
824        elseif(DimSize(M_ROIMask, 1)>1500)      //Dexela N2315
825                                        //hor           vert
826                M_ROIMask[0,1943][0,3]=0
827                M_ROIMask[0,1943][9,9]=0
828                M_ROIMask[0,1943][3068,3071]=0
829                M_ROIMask[0,1943][1535,1536]=0
830                //vertical
831                M_ROIMask[0,3][0,3071]=0
832                M_ROIMask[1940,1943][0,3071]=0
833                //boxes...
834                M_ROIMask[64,68][335,343]=0
835                M_ROIMask[112,120][36,45]=0
836                if(UsePixSensitiveMask)
837                        //these are horizontal lines (in Nika)
838                        M_ROIMask[0,1943][810,810]=0
839                        M_ROIMask[0,1943][1546,1546]=0
840                        //these are vertical lines in Nika
841                        M_ROIMask[781,781][0,1536]=0
842                endif
843//     
844//              string notestr="MaskOffLowIntPoints:0;LowIntToMaskOff:0>// ;ITEMNO:0;\r"
845//              notestr+="      SetDrawEnv xcoord= top,ycoord= left\r"
846//              notestr+="// ;ITEMNO:1;\r"
847//              notestr+="SetDrawEnv linefgc= (3,52428,1)\r"
848//              notestr+="// ;ITEMNO:2;\r"
849//              notestr+="SetDrawEnv fillpat= 5,fillfgc= (0,0,0)\r"
850//              notestr+="// ;ITEMNO:3;\r"
851//              notestr+="SetDrawEnv save\r"
852//              notestr+="// ;ITEMNO:4;\r"
853//              notestr+="DrawRect -1,485,196,495\r"   
854//              note M_ROIMask, notestr
855        endif           
856        SVAR CurrentMaskFileName = root:Packages:Convert2Dto1D:CurrentMaskFileName
857        CurrentMaskFileName="9IDC default WAXS mask"
858        NVAR UseMask = root:Packages:Convert2Dto1D:UseMask
859        UseMask=1
860        setDataFOlder OldDf
861end     
862
863
864//************************************************************************************************************
865//************************************************************************************************************
866
867
868Function NI1_9IDCSetLineWIdth()
869               
870                NVAR USAXSSlitLength=root:Packages:Convert2Dto1D:USAXSSlitLength
871                //slit length is USAXS is distacne from center line to the end of the slit, so the totla width of this path needs to be 2*slitLength
872       
873                NVAR LineProf_DistanceFromCenter=root:Packages:Convert2Dto1D:LineProf_DistanceFromCenter
874                NVAR LineProf_Width=root:Packages:Convert2Dto1D:LineProf_Width
875                NVAR LineProf_DistanceQ=root:Packages:Convert2Dto1D:LineProf_DistanceQ
876                NVAR LineProf_WidthQ=root:Packages:Convert2Dto1D:LineProf_WidthQ
877                NVAR SampleToCCDDistance=root:Packages:Convert2Dto1D:SampleToCCDDistance                //in millimeters
878                NVAR Wavelength = root:Packages:Convert2Dto1D:Wavelength                                                        //in A
879                NVAR BeamCenterY=root:Packages:Convert2Dto1D:BeamCenterY
880                NVAR BeamCenterX=root:Packages:Convert2Dto1D:BeamCenterX
881                NVAR PixelSizeX=root:Packages:Convert2Dto1D:PixelSizeX
882                NVAR PixelSizeY=root:Packages:Convert2Dto1D:PixelSizeY
883                NVAR HorizontalTilt=root:Packages:Convert2Dto1D:HorizontalTilt
884                NVAR VerticalTilt=root:Packages:Convert2Dto1D:VerticalTilt
885                NVAR LineProf_UseBothHalfs=root:Packages:Convert2Dto1D:LineProf_UseBothHalfs
886
887                variable distance, distanceW1, distancew2
888                variable tempWIdth=0.1
889                variable theta
890                variable thetaw1
891                variable thetaw2
892                variable Qval
893                variable Qvalw1
894                variable Qvalw2
895                Do
896                        tempWIdth+=0.05
897                        distancew1=NI1T_TiltedToCorrectedR(  (LineProf_DistanceFromCenter+tempWIdth)*PixelSizeX ,SampleToCCDDistance,HorizontalTilt)            //in mm
898                        distancew2=NI1T_TiltedToCorrectedR(  (LineProf_DistanceFromCenter-tempWIdth)*PixelSizeX ,SampleToCCDDistance,HorizontalTilt)            //in mm
899                         thetaw1=atan(distancew1/SampleToCCDDistance)/2
900                         thetaw2=atan(distancew2/SampleToCCDDistance)/2
901                         Qvalw1= ((4*pi)/Wavelength)*sin(thetaw1)
902                         Qvalw2= ((4*pi)/Wavelength)*sin(thetaw2)
903                        LineProf_WidthQ=abs(Qvalw1-Qvalw2)
904                while(LineProf_WidthQ< 2*USAXSSlitLength)
905                LineProf_Width = tempWIdth
906       
907end
908
909//************************************************************************************************************
910//************************************************************************************************************
911Function NI1_9IDCWAXSBlankSUbtraction(Yes)
912                        variable Yes
913                       
914                                NVAR UseSampleTransmission = root:Packages:Convert2Dto1D:UseSampleTransmission
915                                NVAR UseEmptyField = root:Packages:Convert2Dto1D:UseEmptyField
916                                NVAR UseI0ToCalibrate = root:Packages:Convert2Dto1D:UseI0ToCalibrate
917                                NVAR DoGeometryCorrection = root:Packages:Convert2Dto1D:DoGeometryCorrection
918                                NVAR UseMonitorForEf = root:Packages:Convert2Dto1D:UseMonitorForEf
919                                NVAR UseSampleTransmFnct = root:Packages:Convert2Dto1D:UseSampleTransmFnct
920                                NVAR UseSampleMonitorFnct = root:Packages:Convert2Dto1D:UseSampleMonitorFnct
921                                NVAR UseEmptyMonitorFnct = root:Packages:Convert2Dto1D:UseEmptyMonitorFnct
922                        if(Yes)
923                                UseSampleTransmission = 1
924                                UseEmptyField = 1
925                                UseI0ToCalibrate = 1
926                                DoGeometryCorrection = 1
927                                UseMonitorForEf = 1
928                                UseSampleTransmFnct = 1
929                                UseSampleMonitorFnct = 1
930                                UseEmptyMonitorFnct = 1
931
932                                SVAR SampleTransmFnct = root:Packages:Convert2Dto1D:SampleTransmFnct
933                                SVAR SampleMonitorFnct = root:Packages:Convert2Dto1D:SampleMonitorFnct
934                                SVAR EmptyMonitorFnct = root:Packages:Convert2Dto1D:EmptyMonitorFnct
935                       
936                                SampleTransmFnct = "NI1_9IDWFindTRANS"
937                                SampleMonitorFnct = "NI1_9IDWFindI0"
938                                EmptyMonitorFnct = "NI1_9IDWFindEFI0"
939                        else //(NO)
940                                UseSampleTransmission = 0
941                                UseEmptyField = 0
942                                UseI0ToCalibrate = 1
943                                DoGeometryCorrection = 1
944                                UseMonitorForEf = 0
945                                UseSampleTransmFnct = 0
946                                UseSampleMonitorFnct = 1
947                                UseEmptyMonitorFnct = 0
948
949                                SVAR SampleTransmFnct = root:Packages:Convert2Dto1D:SampleTransmFnct
950                                SVAR SampleMonitorFnct = root:Packages:Convert2Dto1D:SampleMonitorFnct
951                                SVAR EmptyMonitorFnct = root:Packages:Convert2Dto1D:EmptyMonitorFnct
952                       
953                                SampleTransmFnct = "NI1_9IDWFindTRANS"
954                                SampleMonitorFnct = "NI1_9IDWFindI0"
955                                EmptyMonitorFnct = "NI1_9IDWFindEFI0"
956                        endif
957                        NI1A_SetCalibrationFormula()                   
958
959end
960
961//************************************************************************************************************
962//************************************************************************************************************
963Function/S NI1_9IDCSetDefaultConfiguration()
964       
965        NI1A_Initialize2Dto1DConversion()
966        NI1BC_InitCreateBmCntrFile()
967       
968        NVAR  Displ=root:Packages:Convert2Dto1D:Process_DisplayAve
969        NVAR    Proc1= root:Packages:Convert2Dto1D:Process_Individually
970        NVAR    Proc2= root:Packages:Convert2Dto1D:Process_Average
971        NVAR    Proc3 = root:Packages:Convert2Dto1D:Process_AveNFiles
972        Displ = 0
973        Proc1 = 1
974        Proc2 = 0
975        Proc3 = 0
976
977        NVAR SAXSSelected=root:Packages:Convert2Dto1D:USAXSSAXSselector
978        NVAR WAXSDexelaSelected = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
979        NVAR WAXSSelected = root:Packages:Convert2Dto1D:USAXSWAXSselector
980        NVAR UserQMin = root:Packages:Convert2Dto1D:UserQMin
981        NVAR UserQMax =root:Packages:Convert2Dto1D:UserQMax
982        UserQMax = 0
983        UserQMin = 0
984
985        NVAR UseSubtractFixedOffset = root:Packages:Convert2Dto1D:UseSubtractFixedOffset
986        NVAR DEZINGERDATA=root:Packages:Convert2Dto1D:DezingerCCDData
987        NVAR DezingRatio=root:Packages:Convert2Dto1D:DezingerRatio
988        NVAR DezingNumTimes=root:Packages:Convert2Dto1D:DezingerHowManyTimes
989        if(WAXSDexelaSelected)  //Dexela special case
990                UseSubtractFixedOffset = 1
991                DEZINGERDATA = 1
992                DezingRatio = 25
993                DezingNumTimes = 1
994        else
995                UseSubtractFixedOffset = 0
996                DEZINGERDATA = 0
997                DezingRatio = 25
998                DezingNumTimes = 1
999        endif
1000        if(WAXSSelected || WAXSDexelaSelected)
1001                                NVAR UseSectors = root:Packages:Convert2Dto1D:UseSectors
1002                                UseSectors = 1
1003                                NVAR QvectormaxNumPnts = root:Packages:Convert2Dto1D:QvectormaxNumPnts
1004                                NVAR QBinningLogarithmic = root:Packages:Convert2Dto1D:QBinningLogarithmic
1005                                NVAR DoCircularAverage = root:Packages:Convert2Dto1D:DoCircularAverage
1006                                NVAR DoSectorAverages = root:Packages:Convert2Dto1D:DoSectorAverages
1007                                NVAR NumberOfSectors = root:Packages:Convert2Dto1D:NumberOfSectors
1008                                NVAR SectorsStartAngle = root:Packages:Convert2Dto1D:SectorsStartAngle
1009                                NVAR SectorsHalfWidth = root:Packages:Convert2Dto1D:SectorsHalfWidth
1010                                NVAR DisplayDataAfterProcessing = root:Packages:Convert2Dto1D:DisplayDataAfterProcessing
1011                                NVAR StoreDataInIgor = root:Packages:Convert2Dto1D:StoreDataInIgor
1012                                NVAR OverwriteDataIfExists = root:Packages:Convert2Dto1D:OverwriteDataIfExists
1013                                NVAR Use2Ddataname = root:Packages:Convert2Dto1D:Use2Ddataname
1014                                NVAR QvectorNumberPoints = root:Packages:Convert2Dto1D:QvectorNumberPoints
1015                                NVAR FIlesSortOrder=root:Packages:Convert2Dto1D:FIlesSortOrder
1016                                NVAR UseSolidAngle= root:Packages:Convert2Dto1D:UseSolidAngle
1017                                NVAR UseCorrectionFactor = root:Packages:Convert2Dto1D:UseCorrectionFactor
1018                                NVAR CorrFactor=root:Packages:Convert2Dto1D:CorrectionFactor                           
1019                                UseCorrectionFactor = 1
1020                                //this nees to be part of calibration!!!
1021                                //note, the 0.690699 seems correction for better sensitivity of WAXZS detector at 21keV. This will be part of calibbration formula.
1022                                //CorrFactor = 7.02455e-14 * 0.690699
1023                               
1024                                UseSolidAngle = 1
1025                                FIlesSortOrder = 3
1026                                QvectorNumberPoints=2*487
1027                                QBinningLogarithmic=0
1028                                QvectormaxNumPnts = 1
1029                                DoSectorAverages = 0
1030                                DoCircularAverage = 1
1031                                NumberOfSectors = 1
1032                                SectorsStartAngle = 270
1033                                SectorsHalfWidth = 30
1034                                DisplayDataAfterProcessing = 1
1035                                StoreDataInIgor = 1
1036                                OverwriteDataIfExists = 1
1037                                Use2Ddataname = 1
1038                                QvectorMaxNumPnts = 1
1039                       
1040                                NVAR UseLineProfile = root:Packages:Convert2Dto1D:UseLineProfile
1041                                NVAR LineProfileUseRAW = root:Packages:Convert2Dto1D:LineProfileUseRAW
1042                                NVAR LineProfileUseCorrData = root:Packages:Convert2Dto1D:LineProfileUseCorrData
1043                                SVAR LineProf_CurveType=root:Packages:Convert2Dto1D:LineProf_CurveType
1044                                       
1045                                //LineProf_CurveType="Vertical Line"
1046                                UseLineProfile=0
1047                                //LineProfileUseCorrData=1
1048                                //LineProfileUseRAW =0
1049                       
1050                                NVAR UseSampleTransmission = root:Packages:Convert2Dto1D:UseSampleTransmission
1051                                NVAR UseEmptyField = root:Packages:Convert2Dto1D:UseEmptyField
1052                                NVAR UseI0ToCalibrate = root:Packages:Convert2Dto1D:UseI0ToCalibrate
1053                                NVAR DoGeometryCorrection = root:Packages:Convert2Dto1D:DoGeometryCorrection
1054                                NVAR UseMonitorForEf = root:Packages:Convert2Dto1D:UseMonitorForEf
1055                                NVAR UseSampleTransmFnct = root:Packages:Convert2Dto1D:UseSampleTransmFnct
1056                                NVAR UseSampleMonitorFnct = root:Packages:Convert2Dto1D:UseSampleMonitorFnct
1057                                NVAR UseEmptyMonitorFnct = root:Packages:Convert2Dto1D:UseEmptyMonitorFnct
1058                                NVAR UseSampleThickness = root:Packages:Convert2Dto1D:UseSampleThickness
1059                                NVAR UseSampleThicknFnct = root:Packages:Convert2Dto1D:UseSampleThicknFnct
1060                       
1061                                UseSampleThickness = 1                 
1062                                UseSampleTransmission = 1
1063                                UseEmptyField = 1
1064                                UseI0ToCalibrate = 1
1065                                DoGeometryCorrection = 1
1066                                UseMonitorForEf = 1
1067                                UseSampleTransmFnct = 1
1068                                UseSampleMonitorFnct = 1
1069                                UseEmptyMonitorFnct = 1
1070                                UseSampleThicknFnct = 1
1071
1072                                NVAR ErrorCalculationsUseOld=root:Packages:Convert2Dto1D:ErrorCalculationsUseOld
1073                                NVAR ErrorCalculationsUseStdDev=root:Packages:Convert2Dto1D:ErrorCalculationsUseStdDev
1074                                NVAR ErrorCalculationsUseSEM=root:Packages:Convert2Dto1D:ErrorCalculationsUseSEM
1075                                ErrorCalculationsUseOld=0
1076                                ErrorCalculationsUseStdDev=0
1077                                ErrorCalculationsUseSEM=1
1078                                if(ErrorCalculationsUseOld)
1079                                        print "Uncertainty calculation method is set to \"Old method (see manual for description)\""
1080                                elseif(ErrorCalculationsUseStdDev)
1081                                        print "Uncertainty calculation method is set to \"Standard deviation (see manual for description)\""
1082                                else
1083                                        print "Uncertainty calculation method is set to \"Standard error of mean (see manual for description)\""
1084                                endif
1085
1086                                SVAR SampleTransmFnct = root:Packages:Convert2Dto1D:SampleTransmFnct
1087                                SVAR SampleMonitorFnct = root:Packages:Convert2Dto1D:SampleMonitorFnct
1088                                SVAR EmptyMonitorFnct = root:Packages:Convert2Dto1D:EmptyMonitorFnct
1089                                SVAR SampleThicknFnct = root:Packages:Convert2Dto1D:SampleThicknFnct
1090                               
1091                                SampleTransmFnct = "NI1_9IDCSFIndTransmission"
1092                                SampleMonitorFnct = "NI1_9IDCSFindI0"
1093                                EmptyMonitorFnct = "NI1_9IDCSFindEfI0"
1094                                SampleThicknFnct = "NI1_9IDCSFindThickness"
1095                       
1096                                NVAR WAXSSubtractBlank = root:Packages:Convert2Dto1D:WAXSSubtractBlank
1097                                NI1_9IDCWAXSBlankSUbtraction(WAXSSubtractBlank)
1098                       
1099                                NI1A_SetCalibrationFormula()                   
1100                               
1101                                SVAR BMFunctionName=root:Packages:Convert2Dto1D:BMFunctionName
1102                                BMFunctionName = "Gauss"
1103                                NVAR BMCalibrantD1LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD1LineWidth
1104                                NVAR BMCalibrantD2LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD2LineWidth
1105                                NVAR BMCalibrantD3LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD3LineWidth
1106                                NVAR BMCalibrantD4LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD4LineWidth
1107                                NVAR BMCalibrantD5LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD5LineWidth
1108                                NVAR BMCalibrantD6LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD6LineWidth
1109                                NVAR BMCalibrantD7LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD7LineWidth
1110                                NVAR BMCalibrantD8LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD8LineWidth
1111                                NVAR BMCalibrantD9LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD9LineWidth
1112                                NVAR BMCalibrantD10LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD10LineWidth
1113                                BMCalibrantD1LineWidth = 7
1114                                BMCalibrantD2LineWidth = 7
1115                                BMCalibrantD3LineWidth = 7
1116                                BMCalibrantD4LineWidth = 7
1117                                BMCalibrantD5LineWidth = 7
1118                                BMCalibrantD6LineWidth = 7
1119                                BMCalibrantD7LineWidth = 7
1120                                BMCalibrantD8LineWidth = 7
1121                                BMCalibrantD9LineWidth = 7
1122                                BMCalibrantD10LineWidth = 7
1123                       
1124                                NVAR BMCalibrantD1=root:Packages:Convert2Dto1D:BMCalibrantD1
1125                                NVAR BMCalibrantD2=root:Packages:Convert2Dto1D:BMCalibrantD2
1126                                NVAR BMCalibrantD3=root:Packages:Convert2Dto1D:BMCalibrantD3
1127                                NVAR BMCalibrantD4=root:Packages:Convert2Dto1D:BMCalibrantD4
1128                                NVAR BMCalibrantD5=root:Packages:Convert2Dto1D:BMCalibrantD5
1129                                NVAR BMCalibrantD6=root:Packages:Convert2Dto1D:BMCalibrantD6
1130                                NVAR BMCalibrantD7=root:Packages:Convert2Dto1D:BMCalibrantD7
1131                                NVAR BMCalibrantD8=root:Packages:Convert2Dto1D:BMCalibrantD8
1132                                NVAR BMCalibrantD9=root:Packages:Convert2Dto1D:BMCalibrantD9
1133                                NVAR BMCalibrantD10=root:Packages:Convert2Dto1D:BMCalibrantD10
1134                                NVAR BMUseCalibrantD1=root:Packages:Convert2Dto1D:BMUseCalibrantD1
1135                                NVAR BMUseCalibrantD2=root:Packages:Convert2Dto1D:BMUseCalibrantD2
1136                                NVAR BMUseCalibrantD3=root:Packages:Convert2Dto1D:BMUseCalibrantD3
1137                                NVAR BMUseCalibrantD4=root:Packages:Convert2Dto1D:BMUseCalibrantD4
1138                                NVAR BMUseCalibrantD5=root:Packages:Convert2Dto1D:BMUseCalibrantD5
1139                                NVAR BMUseCalibrantD6=root:Packages:Convert2Dto1D:BMUseCalibrantD6
1140                                NVAR BMUseCalibrantD7=root:Packages:Convert2Dto1D:BMUseCalibrantD7
1141                                NVAR BMUseCalibrantD8=root:Packages:Convert2Dto1D:BMUseCalibrantD8
1142                                NVAR BMUseCalibrantD9=root:Packages:Convert2Dto1D:BMUseCalibrantD9
1143                                NVAR BMUseCalibrantD10=root:Packages:Convert2Dto1D:BMUseCalibrantD10
1144                                //this is Lab6
1145                                        BMCalibrantD1=4.15690   //[100]/rel int 60
1146                                        BMCalibrantD2=2.93937   //110 /100
1147                                        BMCalibrantD3=2.39999   //111/45
1148                                        BMCalibrantD4=2.07845   //200/23.6
1149                                        BMCalibrantD5=1.85902   //210/55
1150                                        BMCalibrantD6=1.6970539
1151                                        BMCalibrantD7=1.4696918
1152                                        BMCalibrantD8=1.3856387
1153                                        BMCalibrantD9=1.3145323
1154                                        BMCalibrantD10=1.2533574       
1155                                        BMUseCalibrantD1=1
1156                                        BMUseCalibrantD2=1
1157                                        BMUseCalibrantD3=1
1158                                        BMUseCalibrantD4=1
1159                                        BMUseCalibrantD5=1
1160                                        BMUseCalibrantD6=1
1161                                        BMUseCalibrantD7=1
1162                                        BMUseCalibrantD8=1
1163                                        BMUseCalibrantD9=1
1164                                        BMUseCalibrantD10=1
1165                                SVAR BmCalibrantName = root:Packages:Convert2Dto1D:BmCalibrantName
1166                                BmCalibrantName="LaB6"
1167                                NVAR BMFitBeamCenter = root:Packages:Convert2Dto1D:BMFitBeamCenter
1168                                NVAR BMFitSDD = root:Packages:Convert2Dto1D:BMFitSDD
1169                                NVAR BMFitTilts = root:Packages:Convert2Dto1D:BMFitTilts
1170                                NVAR BMCntrDisplayLogImage = root:Packages:Convert2Dto1D:BMCntrDisplayLogImage
1171                                BMCntrDisplayLogImage = 1
1172                                BMFitTilts=1
1173                                BMFitSDD = 1
1174                                BMFitBeamCenter = 1
1175                                NVAR BMRefNumberOfSectors = root:Packages:Convert2Dto1D:BMRefNumberOfSectors
1176                                BMRefNumberOfSectors = 360
1177        elseif(SAXSSelected)
1178                                NVAR UseSectors = root:Packages:Convert2Dto1D:UseSectors
1179                                UseSectors = 1
1180                                NVAR QvectormaxNumPnts = root:Packages:Convert2Dto1D:QvectormaxNumPnts
1181                                NVAR QBinningLogarithmic = root:Packages:Convert2Dto1D:QBinningLogarithmic
1182                                NVAR DoSectorAverages = root:Packages:Convert2Dto1D:DoSectorAverages
1183                                NVAR DoCircularAverage = root:Packages:Convert2Dto1D:DoCircularAverage
1184                                NVAR NumberOfSectors = root:Packages:Convert2Dto1D:NumberOfSectors
1185                                NVAR SectorsStartAngle = root:Packages:Convert2Dto1D:SectorsStartAngle
1186                                NVAR SectorsHalfWidth = root:Packages:Convert2Dto1D:SectorsHalfWidth
1187                                NVAR DisplayDataAfterProcessing = root:Packages:Convert2Dto1D:DisplayDataAfterProcessing
1188                                NVAR StoreDataInIgor = root:Packages:Convert2Dto1D:StoreDataInIgor
1189                                NVAR OverwriteDataIfExists = root:Packages:Convert2Dto1D:OverwriteDataIfExists
1190                                NVAR Use2Ddataname = root:Packages:Convert2Dto1D:Use2Ddataname
1191                                NVAR QvectorNumberPoints = root:Packages:Convert2Dto1D:QvectorNumberPoints
1192                                NVAR FIlesSortOrder=root:Packages:Convert2Dto1D:FIlesSortOrder
1193                                NVAR UseSolidAngle= root:Packages:Convert2Dto1D:UseSolidAngle
1194                                NVAR UseCorrectionFactor = root:Packages:Convert2Dto1D:UseCorrectionFactor
1195                                NVAR CorrFactor=root:Packages:Convert2Dto1D:CorrectionFactor                           
1196                                UseCorrectionFactor = 1
1197                                //this nees to be part of calibration!!!
1198                                //CorrFactor = 7.02455e-14
1199                               
1200                                UseSolidAngle = 1
1201                                FIlesSortOrder = 3                             
1202                                QvectorNumberPoints=120
1203                                QBinningLogarithmic=1
1204                                QvectormaxNumPnts = 0
1205                                DoSectorAverages = 1
1206                                DoCircularAverage = 0
1207                                NumberOfSectors = 1
1208                                SectorsStartAngle = 270
1209                                SectorsHalfWidth = 30
1210                                DisplayDataAfterProcessing = 1
1211                                StoreDataInIgor = 1
1212                                OverwriteDataIfExists = 1
1213                                Use2Ddataname = 1
1214                               
1215                                NVAR UseQvector = root:Packages:Convert2Dto1D:UseQvector
1216                                NVAR UseDspacing = root:Packages:Convert2Dto1D:UseDspacing
1217                                NVAR UseTheta = root:Packages:Convert2Dto1D:UseTheta
1218                               
1219                                UseQvector = 1
1220                                UseDspacing = 0
1221                                UseTheta = 0
1222                               
1223                                NVAR ErrorCalculationsUseOld=root:Packages:Convert2Dto1D:ErrorCalculationsUseOld
1224                                NVAR ErrorCalculationsUseStdDev=root:Packages:Convert2Dto1D:ErrorCalculationsUseStdDev
1225                                NVAR ErrorCalculationsUseSEM=root:Packages:Convert2Dto1D:ErrorCalculationsUseSEM
1226                                ErrorCalculationsUseOld=0
1227                                ErrorCalculationsUseStdDev=0
1228                                ErrorCalculationsUseSEM=1
1229                                if(ErrorCalculationsUseOld)
1230                                        print "Uncertainty calculation method is set to \"Old method (see manual for description)\""
1231                                elseif(ErrorCalculationsUseStdDev)
1232                                        print "Uncertainty calculation method is set to \"Standard deviation (see manual for description)\""
1233                                else
1234                                        print "Uncertainty calculation method is set to \"Standard error of mean (see manual for description)\""
1235                                endif
1236               
1237                                NVAR UseLineProfile = root:Packages:Convert2Dto1D:UseLineProfile
1238                                NVAR LineProfileUseRAW = root:Packages:Convert2Dto1D:LineProfileUseRAW
1239                                NVAR LineProfileUseCorrData = root:Packages:Convert2Dto1D:LineProfileUseCorrData
1240                                SVAR LineProf_CurveType=root:Packages:Convert2Dto1D:LineProf_CurveType
1241                                NVAR SAXSGenSmearedPinData= root:Packages:Convert2Dto1D:SAXSGenSmearedPinData
1242                                NVAR/Z DesmearData = root:Packages:Indra3:DesmearData
1243                                if(NVAR_Exists(DesmearData))
1244                                        if(DesmearData)
1245                                                SAXSGenSmearedPinData =0                        //user is generating desmeared data, likely does not need smeared SAXS data
1246                                        endif
1247                                endif
1248                               
1249                                if(SAXSGenSmearedPinData)
1250                                        LineProf_CurveType="Vertical Line"
1251                                        UseLineProfile=1
1252                                        LineProfileUseCorrData=1
1253                                        LineProfileUseRAW =0
1254                                else
1255                                        //LineProf_CurveType="Vertical Line"
1256                                        UseLineProfile=0
1257                                        //LineProfileUseCorrData=1
1258                                        //LineProfileUseRAW =0
1259                                endif
1260                       
1261                                NVAR UseSampleTransmission = root:Packages:Convert2Dto1D:UseSampleTransmission
1262                                NVAR UseEmptyField = root:Packages:Convert2Dto1D:UseEmptyField
1263                                NVAR UseI0ToCalibrate = root:Packages:Convert2Dto1D:UseI0ToCalibrate
1264                                NVAR DoGeometryCorrection = root:Packages:Convert2Dto1D:DoGeometryCorrection
1265                                NVAR UseMonitorForEf = root:Packages:Convert2Dto1D:UseMonitorForEf
1266                                NVAR UseSampleTransmFnct = root:Packages:Convert2Dto1D:UseSampleTransmFnct
1267                                NVAR UseSampleMonitorFnct = root:Packages:Convert2Dto1D:UseSampleMonitorFnct
1268                                NVAR UseEmptyMonitorFnct = root:Packages:Convert2Dto1D:UseEmptyMonitorFnct
1269                                NVAR UseSampleThickness = root:Packages:Convert2Dto1D:UseSampleThickness
1270                                NVAR UseSampleThicknFnct = root:Packages:Convert2Dto1D:UseSampleThicknFnct
1271                               
1272       
1273                                UseSampleThickness = 1                 
1274                                UseSampleTransmission = 1
1275                                UseEmptyField = 1
1276                                UseI0ToCalibrate = 1
1277                                DoGeometryCorrection = 1
1278                                UseMonitorForEf = 1
1279                                UseSampleTransmFnct = 1
1280                                UseSampleMonitorFnct = 1
1281                                UseEmptyMonitorFnct = 1 
1282                                UseSampleThicknFnct = 1
1283                               
1284                                SVAR SampleTransmFnct = root:Packages:Convert2Dto1D:SampleTransmFnct
1285                                SVAR SampleMonitorFnct = root:Packages:Convert2Dto1D:SampleMonitorFnct
1286                                SVAR EmptyMonitorFnct = root:Packages:Convert2Dto1D:EmptyMonitorFnct
1287                                SVAR SampleThicknFnct = root:Packages:Convert2Dto1D:SampleThicknFnct
1288                               
1289                                SampleTransmFnct = "NI1_9IDCFIndTransmission"
1290                                SampleMonitorFnct = "NI1_9IDCFindI0"
1291                                EmptyMonitorFnct = "NI1_9IDCFindEfI0"
1292                                SampleThicknFnct = "NI1_9IDCFIndThickness"
1293                       
1294                                NI1A_SetCalibrationFormula()                   
1295                               
1296                                SVAR BMFunctionName=root:Packages:Convert2Dto1D:BMFunctionName
1297                                BMFunctionName = "GaussWithSlopedBckg"
1298                                NVAR BMCalibrantD1LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD1LineWidth
1299                                NVAR BMCalibrantD2LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD2LineWidth
1300                                NVAR BMCalibrantD3LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD3LineWidth
1301                                NVAR BMCalibrantD4LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD4LineWidth
1302                                NVAR BMCalibrantD5LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD5LineWidth
1303                                NVAR BMCalibrantD6LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD6LineWidth
1304                                NVAR BMCalibrantD7LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD7LineWidth
1305                                NVAR BMCalibrantD8LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD8LineWidth
1306                                NVAR BMCalibrantD9LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD9LineWidth
1307                                NVAR BMCalibrantD10LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD10LineWidth
1308                                BMCalibrantD1LineWidth = 7
1309                                BMCalibrantD2LineWidth = 7
1310                                BMCalibrantD3LineWidth = 7
1311                                BMCalibrantD4LineWidth = 7
1312                                BMCalibrantD5LineWidth = 7
1313                                BMCalibrantD6LineWidth = 7
1314                                BMCalibrantD7LineWidth = 7
1315                                BMCalibrantD8LineWidth = 7
1316                                BMCalibrantD9LineWidth = 7
1317                                BMCalibrantD10LineWidth = 7
1318                       
1319                                NVAR BMCalibrantD1=root:Packages:Convert2Dto1D:BMCalibrantD1
1320                                NVAR BMCalibrantD2=root:Packages:Convert2Dto1D:BMCalibrantD2
1321                                NVAR BMCalibrantD3=root:Packages:Convert2Dto1D:BMCalibrantD3
1322                                NVAR BMCalibrantD4=root:Packages:Convert2Dto1D:BMCalibrantD4
1323                                NVAR BMCalibrantD5=root:Packages:Convert2Dto1D:BMCalibrantD5
1324                                NVAR BMCalibrantD6=root:Packages:Convert2Dto1D:BMCalibrantD6
1325                                NVAR BMCalibrantD7=root:Packages:Convert2Dto1D:BMCalibrantD7
1326                                NVAR BMCalibrantD8=root:Packages:Convert2Dto1D:BMCalibrantD8
1327                                NVAR BMCalibrantD9=root:Packages:Convert2Dto1D:BMCalibrantD9
1328                                NVAR BMCalibrantD10=root:Packages:Convert2Dto1D:BMCalibrantD10
1329                                NVAR BMUseCalibrantD1=root:Packages:Convert2Dto1D:BMUseCalibrantD1
1330                                NVAR BMUseCalibrantD2=root:Packages:Convert2Dto1D:BMUseCalibrantD2
1331                                NVAR BMUseCalibrantD3=root:Packages:Convert2Dto1D:BMUseCalibrantD3
1332                                NVAR BMUseCalibrantD4=root:Packages:Convert2Dto1D:BMUseCalibrantD4
1333                                NVAR BMUseCalibrantD5=root:Packages:Convert2Dto1D:BMUseCalibrantD5
1334                                NVAR BMUseCalibrantD6=root:Packages:Convert2Dto1D:BMUseCalibrantD6
1335                                NVAR BMUseCalibrantD7=root:Packages:Convert2Dto1D:BMUseCalibrantD7
1336                                NVAR BMUseCalibrantD8=root:Packages:Convert2Dto1D:BMUseCalibrantD8
1337                                NVAR BMUseCalibrantD9=root:Packages:Convert2Dto1D:BMUseCalibrantD9
1338                                NVAR BMUseCalibrantD10=root:Packages:Convert2Dto1D:BMUseCalibrantD10
1339                                        //The number I use is q = 0.1076 (1/Angstrom), d = 58.380 Angstroms.  The
1340                                        //reference is T.C. Huang et al, J. Appl. Cryst. (1993), 26, 180-184.
1341                                        BMCalibrantD1=58.380
1342                                        BMCalibrantD2=29.185
1343                                        BMCalibrantD3=19.46
1344                                        BMCalibrantD4=14.595
1345                                        BMCalibrantD5=11.676    //fixed form 11.767 on 2-12-2015, typo
1346                                        BMCalibrantD6=9.73
1347                                        BMCalibrantD7=8.34
1348                                        BMCalibrantD8=7.2975
1349                                        BMCalibrantD9=6.48667
1350                                        BMCalibrantD10=5.838
1351                                        BMUseCalibrantD1=1
1352                                        BMUseCalibrantD2=1
1353                                        BMUseCalibrantD3=1
1354                                        BMUseCalibrantD4=1
1355                                        BMUseCalibrantD5=1
1356                                        BMUseCalibrantD6=1
1357                                        BMUseCalibrantD7=1
1358                                        BMUseCalibrantD8=1
1359                                        BMUseCalibrantD9=1
1360                                        BMUseCalibrantD10=1
1361                                NVAR BMRefNumberOfSectors = root:Packages:Convert2Dto1D:BMRefNumberOfSectors
1362                                BMRefNumberOfSectors = 360
1363                                SVAR BmCalibrantName = root:Packages:Convert2Dto1D:BmCalibrantName
1364                                BmCalibrantName="Ag behenate"
1365                                NVAR BMFitBeamCenter = root:Packages:Convert2Dto1D:BMFitBeamCenter
1366                                NVAR BMFitSDD = root:Packages:Convert2Dto1D:BMFitSDD
1367                                NVAR BMFitTilts = root:Packages:Convert2Dto1D:BMFitTilts
1368                                NVAR BMCntrDisplayLogImage = root:Packages:Convert2Dto1D:BMCntrDisplayLogImage
1369                                BMFitTilts=1
1370                                BMFitSDD = 1
1371                                BMFitBeamCenter = 1
1372                                BMCntrDisplayLogImage = 1
1373                                NVAR SAXSDeleteTempPinData= root:Packages:Convert2Dto1D:SAXSDeleteTempPinData
1374                                SAXSDeleteTempPinData = 1
1375//      else            //end of SAXS selection, bellow starts bigSAXS specifics...
1376//                              NVAR UseSectors = root:Packages:Convert2Dto1D:UseSectors
1377//                              UseSectors = 1
1378//                              NVAR QvectormaxNumPnts = root:Packages:Convert2Dto1D:QvectormaxNumPnts
1379//                              NVAR QBinningLogarithmic = root:Packages:Convert2Dto1D:QBinningLogarithmic
1380//                              NVAR DoSectorAverages = root:Packages:Convert2Dto1D:DoSectorAverages
1381//                              NVAR NumberOfSectors = root:Packages:Convert2Dto1D:NumberOfSectors
1382//                              NVAR SectorsStartAngle = root:Packages:Convert2Dto1D:SectorsStartAngle
1383//                              NVAR SectorsHalfWidth = root:Packages:Convert2Dto1D:SectorsHalfWidth
1384//                              NVAR DisplayDataAfterProcessing = root:Packages:Convert2Dto1D:DisplayDataAfterProcessing
1385//                              NVAR StoreDataInIgor = root:Packages:Convert2Dto1D:StoreDataInIgor
1386//                              NVAR OverwriteDataIfExists = root:Packages:Convert2Dto1D:OverwriteDataIfExists
1387//                              NVAR Use2Ddataname = root:Packages:Convert2Dto1D:Use2Ddataname
1388//                              NVAR QvectorNumberPoints = root:Packages:Convert2Dto1D:QvectorNumberPoints
1389//                              NVAR DoCircularAverage = root:Packages:Convert2Dto1D:DoCircularAverage
1390//                              DoCircularAverage = 1
1391//                              QvectorNumberPoints=220
1392//                              QBinningLogarithmic=1
1393//                              QvectormaxNumPnts = 0
1394//                              DisplayDataAfterProcessing = 1
1395//                              StoreDataInIgor = 1
1396//                              OverwriteDataIfExists = 1
1397//                              Use2Ddataname = 1
1398//                     
1399//                              NVAR UseLineProfile = root:Packages:Convert2Dto1D:UseLineProfile
1400//                              NVAR LineProfileUseRAW = root:Packages:Convert2Dto1D:LineProfileUseRAW
1401//                              NVAR LineProfileUseCorrData = root:Packages:Convert2Dto1D:LineProfileUseCorrData
1402//                              SVAR LineProf_CurveType=root:Packages:Convert2Dto1D:LineProf_CurveType
1403//                                     
1404//                              UseLineProfile=0
1405//                              LineProfileUseCorrData=1
1406//                              LineProfileUseRAW =0
1407//                     
1408//                              NVAR UseSampleTransmission = root:Packages:Convert2Dto1D:UseSampleTransmission
1409//                              NVAR UseEmptyField = root:Packages:Convert2Dto1D:UseEmptyField
1410//                              NVAR UseDarkField = root:Packages:Convert2Dto1D:UseDarkField
1411//                              NVAR UseI0ToCalibrate = root:Packages:Convert2Dto1D:UseI0ToCalibrate
1412//                              NVAR DoGeometryCorrection = root:Packages:Convert2Dto1D:DoGeometryCorrection
1413//                              NVAR UseMonitorForEf = root:Packages:Convert2Dto1D:UseMonitorForEf
1414//                              NVAR UseSampleTransmFnct = root:Packages:Convert2Dto1D:UseSampleTransmFnct
1415//                              NVAR UseSampleMonitorFnct = root:Packages:Convert2Dto1D:UseSampleMonitorFnct
1416//                              NVAR UseEmptyMonitorFnct = root:Packages:Convert2Dto1D:UseEmptyMonitorFnct
1417//                              NVAR UseSampleThicknFnct = root:Packages:Convert2Dto1D:UseSampleThicknFnct
1418//                              UseSampleTransmission = 1
1419//                              UseEmptyField = 1
1420//                              UseDarkField = 1
1421//                              UseI0ToCalibrate = 1
1422//                              DoGeometryCorrection = 1
1423//                              UseMonitorForEf = 1
1424//                              UseSampleTransmFnct = 1
1425//                              UseSampleMonitorFnct = 1
1426//                              UseEmptyMonitorFnct = 1
1427//                              UseSampleThicknFnct = 1
1428//                             
1429//                              NVAR ErrorCalculationsUseOld=root:Packages:Convert2Dto1D:ErrorCalculationsUseOld
1430//                              NVAR ErrorCalculationsUseStdDev=root:Packages:Convert2Dto1D:ErrorCalculationsUseStdDev
1431//                              NVAR ErrorCalculationsUseSEM=root:Packages:Convert2Dto1D:ErrorCalculationsUseSEM
1432//                              ErrorCalculationsUseOld=1
1433//                              ErrorCalculationsUseStdDev=0
1434//                              ErrorCalculationsUseSEM=0                       //which one is correct here???
1435//                              if(ErrorCalculationsUseOld)
1436//                                      print "Uncertainty calculation method is set to \"Old method (see manual for description)\""
1437//                              elseif(ErrorCalculationsUseStdDev)
1438//                                      print "Uncertainty calculation method is set to \"Standard deviation (see manual for description)\""
1439//                              else
1440//                                      print "Uncertainty calculation method is set to \"Standard error of mean (see manual for description)\""
1441//                              endif
1442//                             
1443//                              SVAR SampleTransmFnct = root:Packages:Convert2Dto1D:SampleTransmFnct
1444//                              SVAR SampleMonitorFnct = root:Packages:Convert2Dto1D:SampleMonitorFnct
1445//                              SVAR EmptyMonitorFnct = root:Packages:Convert2Dto1D:EmptyMonitorFnct
1446//                              SVAR SampleThicknFnct = root:Packages:Convert2Dto1D:SampleThicknFnct
1447//                             
1448//                              SampleTransmFnct = "NI1_9IDCSFIndTransmission"
1449//                              SampleMonitorFnct = "NI1_9IDCSFindI0"
1450//                              EmptyMonitorFnct = "NI1_9IDCSFindEfI0"
1451//                              SampleThicknFnct = "NI1_9IDCSFindThickness"
1452//                     
1453//                              NI1A_SetCalibrationFormula()
1454//                             
1455//                              NVAR BMCalibrantD1LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD1LineWidth
1456//                              NVAR BMCalibrantD2LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD2LineWidth
1457//                              NVAR BMCalibrantD3LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD3LineWidth
1458//                              NVAR BMCalibrantD4LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD4LineWidth
1459//                              NVAR BMCalibrantD5LineWidth = root:Packages:Convert2Dto1D:BMCalibrantD5LineWidth
1460//                              BMCalibrantD1LineWidth = 25
1461//                              BMCalibrantD2LineWidth = 25
1462//                              BMCalibrantD3LineWidth = 25
1463//                              BMCalibrantD4LineWidth = 25
1464//                              BMCalibrantD5LineWidth = 25
1465//                     
1466//                              NVAR BMCalibrantD1=root:Packages:Convert2Dto1D:BMCalibrantD1
1467//                              NVAR BMCalibrantD2=root:Packages:Convert2Dto1D:BMCalibrantD2
1468//                              NVAR BMCalibrantD3=root:Packages:Convert2Dto1D:BMCalibrantD3
1469//                              NVAR BMCalibrantD4=root:Packages:Convert2Dto1D:BMCalibrantD4
1470//                              NVAR BMCalibrantD5=root:Packages:Convert2Dto1D:BMCalibrantD5
1471//                              NVAR BMUseCalibrantD1=root:Packages:Convert2Dto1D:BMUseCalibrantD1
1472//                              NVAR BMUseCalibrantD2=root:Packages:Convert2Dto1D:BMUseCalibrantD2
1473//                              NVAR BMUseCalibrantD3=root:Packages:Convert2Dto1D:BMUseCalibrantD3
1474//                              NVAR BMUseCalibrantD4=root:Packages:Convert2Dto1D:BMUseCalibrantD4
1475//                              NVAR BMUseCalibrantD5=root:Packages:Convert2Dto1D:BMUseCalibrantD5
1476//                                      //The number I use is q = 0.1076 (1/Angstrom), d = 58.380 Angstroms.  The
1477//                                      //reference is T.C. Huang et al, J. Appl. Cryst. (1993), 26, 180-184.
1478//                                      BMCalibrantD1=58.380
1479//                                      BMCalibrantD2=29.185
1480//                                      BMCalibrantD3=19.46
1481//                                      BMCalibrantD4=14.595
1482//                                      BMCalibrantD5=11.767
1483//                                      BMUseCalibrantD1=1
1484//                                      BMUseCalibrantD2=1
1485//                                      BMUseCalibrantD3=1
1486//                                      BMUseCalibrantD4=0
1487//                                      BMUseCalibrantD5=0
1488//                              NVAR BMRefNumberOfSectors = root:Packages:Convert2Dto1D:BMRefNumberOfSectors
1489//                              BMRefNumberOfSectors = 120
1490//                              SVAR BmCalibrantName = root:Packages:Convert2Dto1D:BmCalibrantName
1491//                              BmCalibrantName="Ag behenate"
1492        endif
1493        //common
1494                                SVAR BlankFileExtension=root:Packages:Convert2Dto1D:BlankFileExtension
1495                                BlankFileExtension = "Nexus"
1496                                //check if we are running on USAXS computers
1497                                GetFileFOlderInfo/Q/Z "Z:USAXS_data:"
1498                                if(V_isFolder)
1499                                        //OK, this computer has Z:USAXS_data
1500                                        PathInfo Convert2Dto1DDataPath
1501                                        if(V_flag==0)
1502                                                NewPath/Q  Convert2Dto1DDataPath, "Z:USAXS_data:"
1503                                                pathinfo/S Convert2Dto1DDataPath
1504                                        endif
1505                                endif
1506                                //PathInfo/S Convert2Dto1DDataPath
1507                                //PathInfo/S Convert2Dto1DEmptyDarkPath
1508                                variable refnum
1509                                Open /D/R/T=".hdf" refnum
1510                                if(strlen(S_FileName)<1)
1511                                        abort
1512                                endif
1513                                string FileName=StringFromList(ItemsInList(S_FileName,":")-1, S_FileName  , ":")
1514                                string pathInforStrL = RemoveListItem(ItemsInList(S_FileName,":")-1, S_FileName  , ":")
1515                               
1516                                //NewPath/C/O/M="Select path to your data" Convert2Dto1DDataPath
1517                                NewPath/O Convert2Dto1DDataPath, pathInforStrL
1518                                NewPath/O Convert2Dto1DEmptyDarkPath, pathInforStrL             
1519                                PathInfo Convert2Dto1DEmptyDarkPath
1520                                SVAR MainPathInfoStr=root:Packages:Convert2Dto1D:MainPathInfoStr
1521                                MainPathInfoStr = pathInforStrL
1522
1523                                SVAR BmCntrFileType=root:Packages:Convert2Dto1D:BmCntrFileType
1524                                BmCntrFileType = "Nexus"
1525                                NewPath/O Convert2Dto1DBmCntrPath, pathInforStrL
1526                                SVAR BCPathInfoStr=root:Packages:Convert2Dto1D:BCPathInfoStr
1527                                PathInfo Convert2Dto1DBmCntrPath
1528                                BCPathInfoStr=S_Path
1529                                //mask settings
1530                                SVAR CCDFileExtension=root:Packages:Convert2Dto1D:CCDFileExtension
1531                                CCDFileExtension = "Nexus"
1532                                NewPath/O Convert2Dto1DMaskPath, pathInforStrL
1533                                if(!WAXSSelected)
1534                                        NI1M_UpdateMaskListBox()
1535                                        NVAR Usemask= root:Packages:Convert2Dto1D:Usemask
1536                                        Usemask =1
1537                                        SVAR CurrentMaskFileName=root:Packages:Convert2Dto1D:CurrentMaskFileName
1538                                        if(strlen(CurrentMaskFileName)<1)
1539                                                print "Do NOT forget to create or load Mask"
1540                                        else   
1541                                                Print "  *********  IMPORTANT:  ********* \rFound Mask named :  >>>  "+CurrentMaskFileName+" <<<   Data reduction will use this mask. Make sure this is the correct mask to use. "
1542                                        endif
1543                                else
1544                                        NVAR Usemask= root:Packages:Convert2Dto1D:Usemask
1545                                        Usemask =0
1546                                endif
1547
1548        DoWIndow NI1A_Convert2Dto1DPanel
1549        if(!V_Flag)
1550                NI1A_Convert2Dto1DPanelFnct()
1551                NI1A_TabProc("nothing",0)
1552        endif
1553        PopupMenu SelectBlank2DDataType win=NI1A_Convert2Dto1DPanel, mode=4
1554       
1555        //these windows are stale anyway, kill them, even if they exist...
1556        KilLWIndow/Z CCDImageForBmCntr
1557        KilLWIndow/Z NI1_CreateBmCntrFieldPanel
1558       
1559//      DoWIndow NI1_CreateBmCntrFieldPanel
1560//      if(V_Flag)
1561//              DoWindow/F NI1_CreateBmCntrFieldPanel
1562//              if(SAXSSelected)
1563//                      //set to Ag Behenate
1564//                      NI1BC_BmCntrPopMenuProc("BmCalibrantName",2,"Ag behenate")
1565//              elseif(WAXSSelected)
1566//                      //set to LaB6
1567//                      NI1BC_BmCntrPopMenuProc("BmCalibrantName",3,"LaB6")
1568//              endif
1569//              PopupMenu BmCntrFileType win=NI1_CreateBmCntrFieldPanel, mode=4
1570//              TabControl BmCntrTab win=NI1_CreateBmCntrFieldPanel, value=0
1571//              NI1BC_TabProc("BmCntrTab",0)
1572//      endif
1573        NI1BC_UpdateBmCntrListBox()     
1574        NI1A_UpdateDataListBox()       
1575        NI1A_UpdateEmptyDarkListBox()   
1576        print "Default methods were set"
1577        return FileName
1578end
1579//************************************************************************************************************
1580//************************************************************************************************************
1581
1582Function/S NI1_9IDCFindWaveNoteValue(StringKeyName)
1583        string StringKeyName
1584       
1585        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
1586        if(!WaveExists(w2D))
1587                Abort "Load one Image file first so the tool can read the wave note information" 
1588        endif
1589        string OldNOte=note(w2D)
1590        return StringByKey(NI1_9IDCFindKeyStr(StringKeyName+"=", OldNote), OldNote  , "=" , ";")
1591end
1592
1593
1594Function/S NI1_9IDCFindEmptyNoteValue(StringKeyName)
1595        string StringKeyName
1596       
1597        Wave/Z w2D = root:Packages:Convert2Dto1D:EmptyData
1598        if(!WaveExists(w2D))
1599                Abort "Load Empty Image file first so the tool can read the wave note information" 
1600        endif
1601        string OldNOte=note(w2D)
1602        return StringByKey(NI1_9IDCFindKeyStr(StringKeyName+"=", OldNote), OldNote  , "=" , ";")
1603end
1604
1605
1606Function/S NI1_9IDCFindDarkNoteValue(StringKeyName)
1607        string StringKeyName
1608       
1609        Wave/Z w2D = root:Packages:Convert2Dto1D:DarkFieldData
1610        if(!WaveExists(w2D))
1611                Abort "Load one Image file first so the tool can read the wave note information" 
1612        endif
1613        string OldNOte=note(w2D)
1614        return StringByKey(NI1_9IDCFindKeyStr(StringKeyName+"=", OldNote), OldNote  , "=" , ";")
1615end
1616
1617//************************************************************************************************************
1618//************************************************************************************************************
1619Function NI1_9IDCWaveNoteValuesNx()
1620       
1621        //check for 2D wave presence, if not present throw user error with instructions
1622        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
1623        if(!WaveExists(w2D))
1624                Abort "Load one Image file first so the tool can read the wave note information" 
1625        endif
1626        string OldNOte=note(w2D)
1627        SVAR Current2DFileName = root:Packages:Convert2Dto1D:FileNameToLoad
1628        variable beamline_support_version
1629        NVAR useWAXS = root:Packages:Convert2Dto1D:USAXSWAXSselector
1630        NVAR useSAXS = root:Packages:Convert2Dto1D:USAXSSAXSselector
1631        //NVAR useBigSAXS = root:Packages:Convert2Dto1D:USAXSBigSAXSselector
1632        NVAR Wavelength= root:Packages:Convert2Dto1D:Wavelength
1633        NVAR XRayEnergy= root:Packages:Convert2Dto1D:XRayEnergy
1634        NVAR PixelSizeX = root:Packages:Convert2Dto1D:PixelSizeX
1635        NVAR PixelSizeY = root:Packages:Convert2Dto1D:PixelSizeY
1636        NVAR HorizontalTilt = root:Packages:Convert2Dto1D:HorizontalTilt
1637        NVAR VerticalTilt = root:Packages:Convert2Dto1D:VerticalTilt
1638        NVAR BeamCenterX = root:Packages:Convert2Dto1D:BeamCenterX
1639        NVAR BeamCenterY = root:Packages:Convert2Dto1D:BeamCenterY
1640        NVAR SampleToCCDdistance = root:Packages:Convert2Dto1D:SampleToCCDdistance
1641        NVAR BeamSizeX = root:Packages:Convert2Dto1D:BeamSizeX
1642        NVAR BeamSizeY = root:Packages:Convert2Dto1D:BeamSizeY
1643               
1644        if((stringMatch("15ID", StringByKey(NI1_9IDCFindKeyStr("facility_beamline=", OldNote), OldNOte  , "=" , ";"))||stringMatch("9ID", StringByKey(NI1_9IDCFindKeyStr("facility_beamline=", OldNote), OldNOte  , "=" , ";"))) && stringMatch("Pilatus", StringByKey(NI1_9IDCFindKeyStr("model=", OldNote), OldNOte  , "=" , ";")))   
1645                Wavelength = NumberByKey(NI1_9IDCFindKeyStr("monochromator:wavelength=", OldNote), OldNote  , "=" , ";")
1646                XRayEnergy = 12.3984/Wavelength
1647                if(useSAXS)
1648                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_pixel_size_x=", OldNote), OldNote  , "=" , ";")
1649                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_pixel_size_y=", OldNote), OldNote  , "=" , ";")
1650                        if(numtype(PixelSizeX)!=0)              //old data from 15ID
1651                                PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("x_pixel_size=", OldNote), OldNote  , "=" , ";")
1652                                PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("y_pixel_size=", OldNote), OldNote  , "=" , ";")
1653                        endif
1654                        HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
1655                        VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
1656                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
1657                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
1658                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("distance=", OldNote), OldNote  , "=" , ";")
1659                        BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("aperture:hsize=", OldNote), OldNote  , "=" , ";")
1660                        BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("aperture:vsize=", OldNote), OldNote  , "=" , ";")
1661                elseif(useWAXS)
1662                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("x_pixel_size=", OldNote), OldNote  , "=" , ";")
1663                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("y_pixel_size=", OldNote), OldNote  , "=" , ";")
1664                        HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
1665                        VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
1666                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
1667                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
1668                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("distance=", OldNote), OldNote  , "=" , ";")
1669                        BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("aperture:hsize=", OldNote), OldNote  , "=" , ";")
1670                        BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("aperture:vsize=", OldNote), OldNote  , "=" , ";")
1671                endif           
1672                print "Set experimental settinsg and geometry from file :"+Current2DFileName
1673                print "Wavelength = "+num2str(Wavelength)
1674                print "XRayEnergy = "+num2str(12.3984/Wavelength)
1675                print "PixelSizeX = "+num2str(PixelSizeX)
1676                print "PixelSizeY = "+num2str(PixelSizeY)
1677                print "BeamCenterX = "+num2str(BeamCenterX)
1678                print "BeamCenterY = "+num2str(BeamCenterY)
1679                print "BeamSizeX = "+num2str(BeamSizeX)
1680                print "BeamSizeY = "+num2str(BeamSizeY)
1681                print "SampleToCCDdistance = "+num2str(SampleToCCDdistance)
1682        elseif((stringMatch("9ID", StringByKey(NI1_9IDCFindKeyStr("facility_beamline=", OldNote), OldNOte  , "=" , ";"))) && stringMatch("XRD0820", StringByKey(NI1_9IDCFindKeyStr("model=", OldNote), OldNOte  , "=" , ";"))) 
1683                Wavelength = NumberByKey(NI1_9IDCFindKeyStr("monochromator:wavelength=", OldNote), OldNote  , "=" , ";")
1684                XRayEnergy = 12.3984/Wavelength
1685                if(useSAXS)
1686                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_pixel_size_x=", OldNote), OldNote  , "=" , ";")
1687                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_pixel_size_y=", OldNote), OldNote  , "=" , ";")
1688                        if(numtype(PixelSizeX)!=0)              //old data from 15ID
1689                                PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("x_pixel_size=", OldNote), OldNote  , "=" , ";")
1690                                PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("y_pixel_size=", OldNote), OldNote  , "=" , ";")
1691                        endif
1692                        HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
1693                        VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
1694                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
1695                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_y_pixel=", OldNote),  OldNote  , "=" , ";")
1696                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("distance=", OldNote), OldNote  , "=" , ";")
1697                        BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("aperture:hsize=", OldNote), OldNote  , "=" , ";")
1698                        BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("aperture:vsize=", OldNote), OldNote  , "=" , ";")
1699                elseif(useWAXS)
1700                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("x_pixel_size=", OldNote), OldNote  , "=" , ";")
1701                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("y_pixel_size=", OldNote), OldNote  , "=" , ";")
1702                        HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
1703                        VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
1704                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
1705                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
1706                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("distance=", OldNote), OldNote  , "=" , ";")
1707                        BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("aperture:hsize=", OldNote), OldNote  , "=" , ";")
1708                        BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("aperture:vsize=", OldNote), OldNote  , "=" , ";")
1709                endif           
1710                print "Set experimental settinsg and geometry from file :"+Current2DFileName
1711                print "Wavelength = "+num2str(Wavelength)
1712                print "XRayEnergy = "+num2str(12.3984/Wavelength)
1713                print "PixelSizeX = "+num2str(PixelSizeX)
1714                print "PixelSizeY = "+num2str(PixelSizeY)
1715                print "BeamCenterX = "+num2str(BeamCenterX)
1716                print "BeamCenterY = "+num2str(BeamCenterY)
1717                print "BeamSizeX = "+num2str(BeamSizeX)
1718                print "BeamSizeY = "+num2str(BeamSizeY)
1719                print "SampleToCCDdistance = "+num2str(SampleToCCDdistance)
1720        elseif(stringMatch("9ID", StringByKey("instrument:source:facility_beamline", OldNOte  , "=" , ";")) && stringMatch("Pilatus", StringByKey("data:model", OldNOte  , "=" , ";")))
1721                //9ID data from2015 onwards...
1722                Wavelength = NumberByKey(NI1_9IDCFindKeyStr("monochromator:wavelength=", OldNote), OldNote  , "=" , ";")
1723                XRayEnergy = 12.3984/Wavelength
1724                if(useSAXS)
1725                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("detector:x_pixel_size=", OldNote), OldNote  , "=" , ";")
1726                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("detector:y_pixel_size=", OldNote), OldNote  , "=" , ";")
1727                        HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
1728                        VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
1729                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
1730                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
1731                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("detector:distance=", OldNote), OldNote  , "=" , ";")
1732                        BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("shape:xsize=", OldNote), OldNote  , "=" , ";")
1733                        BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("shape:ysize=", OldNote), OldNote  , "=" , ";")
1734                elseif(useWAXS)
1735                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("waxs_detector:x_pixel_size=", OldNote), OldNote  , "=" , ";")
1736                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("waxs_detector:y_pixel_size=", OldNote), OldNote  , "=" , ";")
1737                        HorizontalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_x=", OldNote), OldNote  , "=" , ";")
1738                        VerticalTilt = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_tilt_y=", OldNote), OldNote  , "=" , ";")
1739                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
1740                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("waxs_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
1741                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("waxs_detector:distance=", OldNote), OldNote  , "=" , ";")
1742                        BeamSizeX = NumberByKey(NI1_9IDCFindKeyStr("shape:xsize=", OldNote), OldNote  , "=" , ";")
1743                        BeamSizeY = NumberByKey(NI1_9IDCFindKeyStr("shape:ysize=", OldNote), OldNote  , "=" , ";")
1744                endif           
1745                print "Set experimental settinsg and geometry from file :"+Current2DFileName
1746                print "Wavelength = "+num2str(Wavelength)
1747                print "XRayEnergy = "+num2str(12.3984/Wavelength)
1748                print "PixelSizeX = "+num2str(PixelSizeX)
1749                print "PixelSizeY = "+num2str(PixelSizeY)
1750                print "BeamCenterX = "+num2str(BeamCenterX)
1751                print "BeamCenterY = "+num2str(BeamCenterY)
1752                print "SampleToCCDdistance = "+num2str(SampleToCCDdistance)
1753                print "BeamSizeX = "+num2str(BeamSizeX)
1754                print "BeamSizeY = "+num2str(BeamSizeY)
1755
1756        elseif(stringMatch("15ID", StringByKey("instrument:source:facility_beamline", OldNOte  , "=" , ";")) && stringMatch("CCD", StringByKey("data:model", OldNOte  , "=" , ";")))   
1757                //should be for useBigSAXS=1
1758                beamline_support_version = NumberByKey(NI1_9IDCFindKeyStr("beamline_support_version=", OldNote), OldNote  , "=" , ";")
1759                if(numtype(beamline_support_version)!=0)                        //this applies for MarCCD support
1760                        beamline_support_version=0
1761                endif
1762                if(beamline_support_version==0)
1763                        Wavelength = NumberByKey(NI1_9IDCFindKeyStr("monochromator:wavelength=", OldNote), OldNote  , "=" , ";")
1764                        XRayEnergy = 12.3984/Wavelength
1765                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("detector:x_pixel_size=", OldNote), OldNote  , "=" , ";")
1766                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("detector:y_pixel_size=", OldNote), OldNote  , "=" , ";")
1767                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_x_pixel=", OldNote), OldNote  , "=" , ";")
1768                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("pin_ccd_center_y_pixel=", OldNote), OldNote  , "=" , ";")
1769                        if(PixelSizeX<=0 || PixelSizeY<=0 || BeamCenterX<=0 || BeamCenterY<=0)
1770                                DoALert 0, "Pixel sizes or beam center positions are 0, header information is bad. Please check and find correct values"
1771                        endif
1772                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("detector:distance=", OldNote), OldNote  , "=" , ";")
1773                elseif(beamline_support_version>=1)             //latest version for now. Written when beamline_support_version=1 May 2012
1774                        Wavelength = NumberByKey(NI1_9IDCFindKeyStr("wavelength=", OldNote), OldNote  , "=" , ";")
1775                        XRayEnergy = 12.3984/Wavelength
1776                        PixelSizeX = NumberByKey(NI1_9IDCFindKeyStr("instrument:detector:x_pixel_size=", OldNote), OldNote  , "=" , ";")
1777                        PixelSizeY = NumberByKey(NI1_9IDCFindKeyStr("instrument:detector:y_pixel_size=", OldNote), OldNote  , "=" , ";")
1778                        BeamCenterX = NumberByKey(NI1_9IDCFindKeyStr("instrument:detector:beam_center_x=", OldNote), OldNote  , "=" , ";")
1779                        BeamCenterY = NumberByKey(NI1_9IDCFindKeyStr("instrument:detector:beam_center_y=", OldNote), OldNote  , "=" , ";")
1780                        SampleToCCDdistance = NumberByKey(NI1_9IDCFindKeyStr("instrument:detector:distance=", OldNote), OldNote  , "=" , ";")
1781                endif
1782                print "Set experimental settinsg and geometry from file :"+Current2DFileName
1783                print "Wavelength = "+num2str(Wavelength)
1784                print "XRayEnergy = "+num2str(12.3984/Wavelength)
1785                print "PixelSizeX = "+num2str(PixelSizeX)
1786                print "PixelSizeY = "+num2str(PixelSizeY)
1787                print "BeamCenterX = "+num2str(BeamCenterX)
1788                print "BeamCenterY = "+num2str(BeamCenterY)
1789                print "SampleToCCDdistance = "+num2str(SampleToCCDdistance)
1790        else
1791                Abort "this is not supported data set"
1792        endif
1793       
1794//      print ReplaceString(";", OldNote, "\r")
1795
1796end
1797//************************************************************************************************************
1798//************************************************************************************************************
1799
1800Function/T NI1_9IDCFindKeyStr(StringName, OldNote)
1801        string StringName, OldNote
1802       
1803        string NewKeyName=""
1804        NewKeyName=GrepList(OldNote, StringName,0,";")  //this will contain all terms with StringName
1805        //Maybe there are mroe than one...
1806        NewKeyName = StringFromList(0,NewKeyName,";")
1807        NewKeyName = StringFromList(0,NewKeyName,"=")   //and this should be key needed...
1808       
1809        return NewKeyName
1810end
1811
1812//************************************************************************************************************
1813//************************************************************************************************************
1814Function NI1_9IDCFIndSlitLength()
1815       
1816        string SlitLengthIsHere=IN2G_FindFolderWithWvTpsList("root:USAXS:", 10, "SMR_Int", 1)+IN2G_FindFolderWithWvTpsList("root:USAXS:", 10, "M_SMR_Int", 1)
1817        string SlitLengthIsHereL
1818        SVAR USAXSSampleName = root:Packages:Convert2Dto1D:USAXSSampleName
1819        USAXSSampleName = ""
1820        variable i
1821        if(ItemsInList(SlitLengthIsHere,";")>0)
1822                Prompt SlitLengthIsHereL, "USAXS Folders available ", popup,  SlitLengthIsHere
1823                DoPrompt "Pick USAXS folder where to read slit length", SlitLengthIsHereL
1824        else
1825                print "Slit smeared USAXS data NOT found, input slit length value was set to default value of 0.025. While this is common number, you shoudl reduce USAXS data and use the correct one."
1826                NVAR SAXSGenSmearedPinData=root:Packages:Convert2Dto1D:SAXSGenSmearedPinData
1827                SAXSGenSmearedPinData = 1
1828                return 0.025
1829        endif
1830
1831        Wave/Z SMR_int=$(SlitLengthIsHereL+"SMR_Int")
1832        if(!WaveExists(SMR_int))
1833                Wave/Z SMR_int=$(SlitLengthIsHereL+"M_SMR_Int")
1834        endif
1835        variable SlitLengthUser=0.03
1836        if(WaveExists(SMR_int))
1837                variable SlitLength = NumberByKey("SlitLength",note(SMR_Int),"=",";")
1838                Print "Found SlitLength = "+num2str(SlitLength)+"      in folder : "+ SlitLengthIsHereL
1839                return SlitLength
1840        else
1841                NVAR SAXSGenSmearedPinData=root:Packages:Convert2Dto1D:SAXSGenSmearedPinData
1842                SAXSGenSmearedPinData = 1
1843                DoALert 0, "Slit length not found, input slit length value was set to default value of 0.025. While this is common number, you shoudl reduce USAXS data and use correct one. "
1844                return 0.025
1845        endif
1846end
1847
1848//************************************************************************************************************
1849//************************************************************************************************************
1850//************************************************************************************************************
1851//************************************************************************************************************
1852Function NI1_9IDCSFIndTransmission(SampleName)
1853        string sampleName
1854       
1855        variable transmissionUser
1856        NVAR USAXSForceTransmissionDialog = root:Packages:Convert2Dto1D:USAXSForceTransmissionDialog
1857        NVAR USAXSForceTransRecalculation = root:Packages:Convert2Dto1D:USAXSForceTransRecalculation
1858       
1859        NVAR USAXSCheckForRIghtEmpty=root:Packages:Convert2Dto1D:USAXSCheckForRIghtEmpty
1860        NVAR USAXSCheckForRIghtDark=root:Packages:Convert2Dto1D:USAXSCheckForRIghtDark
1861        NVAR USAXSLoadListedEmpDark=root:Packages:Convert2Dto1D:USAXSLoadListedEmpDark
1862        NVAR useEMptyField=root:Packages:Convert2Dto1D:useEMptyField
1863        NVAR usedarkField=root:Packages:Convert2Dto1D:usedarkField
1864       
1865        //ideally, this is the right transmission...
1866        //but we need to check that the Empty and dark are correct...
1867        string NoteEmptyName=NI1_9IDCFindWaveNoteValue("Empty_Filename")
1868        string NoteDarkName=NI1_9IDCFindWaveNoteValue("Dark_Filename")
1869        SVAR LoadedEmptyName = root:Packages:Convert2Dto1D:CurrentEmptyName
1870        SVAR LoadedDarkName=root:Packages:Convert2Dto1D:CurrentDarkFieldName
1871        SVAR EmptyDarknameMatchString=root:Packages:Convert2Dto1D:EmptyDarknameMatchStr
1872        string tempStrlSavematch
1873        tempStrlSavematch = EmptyDarknameMatchString
1874        EmptyDarknameMatchString = ""
1875        variable i, ii=0
1876        string ListOfOptions=""
1877        string UserEmptyFileSelection
1878
1879
1880        if(useEMptyField && USAXSCheckForRIghtEmpty && !(stringmatch(LoadedEmptyName, NoteEmptyName+"*" )))
1881                //dialog to load Empty...
1882                if(!USAXSLoadListedEmpDark)
1883                        DoAlert /T="Wrong Empty image found" 2, "Current Empty : "+LoadedEmptyName+" does NOT match \r Blank in the image file: "+NoteEmptyName+", do you want to: \r [Yes] = select Matching image\r [No] = use current : "+LoadedEmptyName+"\r [Cancel] = cancel?"
1884                endif
1885                if(V_Flag==1 || USAXSLoadListedEmpDark)
1886                        //here we need to load new Empty for user
1887                        NI1A_UpdateEmptyDarkListBox()
1888                        Wave/T ListOf2DEmptyData=root:Packages:Convert2Dto1D:ListOf2DEmptyData
1889                        Make/T/FREE/N=0 TempStrWv
1890                        //this build list of only matching
1891                        For(i=NumPnts(ListOf2DEmptyData)-1;i>=0;i-=1)
1892                                if(stringmatch(ListOf2DEmptyData[i], "*"+NoteEmptyName+"*" ))
1893                                        redimension/N=(Numpnts(TempStrWv)+1) TempStrWv
1894                                        ii+=1
1895                                        TempStrWv[ii]= ListOf2DEmptyData[i]
1896                                endif
1897                        endfor 
1898                        ListOfOptions=""
1899                        For(i=0;i<(ii);i+=1)
1900                                ListOfOptions+=TempStrWv[i]+";"
1901                        endfor
1902                        ListOfOptions+="----All files---"+";"
1903                        For(i=0;i<NumPnts(ListOf2DEmptyData);i+=1)
1904                                ListOfOptions+=ListOf2DEmptyData[i]+";"
1905                        endfor
1906                        UserEmptyFileSelection = stringFromList(0,ListOfOptions)
1907                        if(!USAXSLoadListedEmpDark ||stringmatch(UserEmptyFileSelection,"*All files*"))
1908                                Prompt UserEmptyFileSelection, "Select Empty file for "+SampleName, popup, ListOfOptions
1909                                DoPrompt "SAXS select empty file (Stored name is "+NoteEmptyName+") : ", UserEmptyFileSelection
1910                                if(V_Flag)
1911                                        abort
1912                                endif
1913                                print "User selected to load New Empty : "+UserEmptyFileSelection
1914                        else
1915                                print "Due to user settings, New Empty listed in the NX file was automatically selected : "+UserEmptyFileSelection
1916                        endif
1917                        For(i=0;i<numpnts(ListOf2DEmptyData);i+=1)
1918                                if(stringmatch(ListOf2DEmptyData[i],UserEmptyFileSelection))
1919                                        Listbox  Select2DMaskDarkWave win=NI1A_Convert2Dto1DPanel, selRow=i
1920                                        break
1921                                endif
1922                        endfor
1923                        NI1A_LoadEmptyOrDark("Empty")           
1924                endif
1925
1926        endif
1927        if(usedarkField && USAXSCheckForRIghtDark && !(stringmatch(LoadedDarkName, NoteDarkName+"*" )))
1928                //dialog to load Dark....
1929                if(!USAXSLoadListedEmpDark)
1930                        DoAlert /T="Wrong Dark image found" 2, "Current Dark : "+LoadedDarkName+" does NOT match \r Dark in the image file: "+NoteDarkName+", do you want to: \r [Yes] = select Matching image\r [No] = use current : "+LoadedDarkName+"\r [Cancel] = cancel?"
1931                endif
1932                if(V_Flag==1 || USAXSLoadListedEmpDark)
1933                        //here we need to load new Empty for user
1934                        NI1A_UpdateEmptyDarkListBox()
1935                        Wave/T ListOf2DEmptyData=root:Packages:Convert2Dto1D:ListOf2DEmptyData
1936                        Make/T/FREE/N=0 TempStrWvD
1937                        //this build list of only matching
1938                        For(i=NumPnts(ListOf2DEmptyData)-1;i>=0;i-=1)
1939                                if(stringmatch(ListOf2DEmptyData[i], "*"+NoteDarkName+"*" ))
1940                                        redimension/N=(Numpnts(TempStrWvD)+1) TempStrWvD
1941                                        ii+=1
1942                                        TempStrWvD[ii]= ListOf2DEmptyData[i]
1943                                endif
1944                        endfor 
1945                        ListOfOptions=""
1946                        For(i=0;i<(numpnts(TempStrWvD));i+=1)
1947                                ListOfOptions+=TempStrWvD[i]+";"
1948                        endfor
1949                        ListOfOptions+="----All files---"+";"
1950                        For(i=0;i<NumPnts(ListOf2DEmptyData);i+=1)
1951                                ListOfOptions+=ListOf2DEmptyData[i]+";"
1952                        endfor
1953                        UserEmptyFileSelection = stringFromList(0,ListOfOptions)
1954                        if(!USAXSLoadListedEmpDark  || stringmatch(UserEmptyFileSelection,"*All files*"))
1955                                Prompt UserEmptyFileSelection, "Select Dark file for "+SampleName, popup, ListOfOptions
1956                                DoPrompt "SAXS select dark file (Stored name is "+NoteDarkName+") : ", UserEmptyFileSelection
1957                                if(V_Flag)
1958                                        abort
1959                                endif
1960                                print "User selected to load New Dark : "+UserEmptyFileSelection
1961                        else
1962                                print "Due to user settings, New Dark listed in the NX file was automatically selected : "+UserEmptyFileSelection
1963                        endif
1964                        For(i=0;i<numpnts(ListOf2DEmptyData);i+=1)
1965                                if(stringmatch(ListOf2DEmptyData[i],UserEmptyFileSelection))
1966                                        Listbox  Select2DMaskDarkWave win=NI1A_Convert2Dto1DPanel, selRow=i
1967                                        break
1968                                endif
1969                        endfor
1970                        NI1A_LoadEmptyOrDark("Dark")             
1971                endif
1972        endif
1973       
1974         EmptyDarknameMatchString = tempStrlSavematch
1975        variable ExistingTransmissionInFile=str2num(NI1_9IDCFindWaveNoteValue("transmission"))
1976        variable IsTransValid=0
1977        if((ExistingTransmissionInFile>0)&&(ExistingTransmissionInFile<=1))
1978                IsTransValid = 1
1979        endif
1980
1981        if(stringmatch(LoadedEmptyName, NoteEmptyName+"*" ) && !USAXSForceTransRecalculation && IsTransValid)
1982                transmissionUser=ExistingTransmissionInFile
1983                print "Empty name matches name in NX file, using transmission written in the NX file"
1984                print "Found and  using transmission = "+num2str(transmissionUser)
1985        else            //emty does not match
1986                print "Empty name DOES NOT match name in NX file OR user requested recalculating the transmission; new values calculated from Sample, Empty, and Dark data..."
1987                variable SampleI0
1988                variable SamplePD
1989                variable EmptyI0
1990                variable EmptyPD
1991                variable DarkI0
1992                variable DarkPD
1993                if(str2num(NI1_9IDCFindWaveNoteValue("transI0_Spl"))<1)
1994                         SampleI0=str2num(NI1_9IDCFindWaveNoteValue("transI0_Spl"))
1995                         SamplePD=str2num(NI1_9IDCFindWaveNoteValue("transNosePD_Value_Spl"))
1996                         EmptyI0=str2num(NI1_9IDCFindEmptyNoteValue("transI0_Empty"))
1997                         EmptyPD=str2num(NI1_9IDCFindEmptyNoteValue("transNosePD_Value_Empty"))
1998                         DarkI0=str2num(NI1_9IDCFindDarkNoteValue("transI0_Dark"))
1999                         DarkPD=str2num(NI1_9IDCFindDarkNoteValue("transNosePD_Value_Dark"))
2000                else
2001                         SampleI0=str2num(NI1_9IDCFindWaveNoteValue("transI0_Sample"))
2002                         if(SampleI0<1000)      //something wrong, old system???
2003                                 SampleI0=str2num(NI1_9IDCFindWaveNoteValue("transBPM_B_Sample"))
2004                                 SampleI0+=str2num(NI1_9IDCFindWaveNoteValue("transBPM_L_Sample"))
2005                                 SampleI0+=str2num(NI1_9IDCFindWaveNoteValue("transBPM_T_Sample"))
2006                                 SampleI0+=str2num(NI1_9IDCFindWaveNoteValue("transBPM_R_Sample"))
2007                         endif
2008                         SamplePD=str2num(NI1_9IDCFindWaveNoteValue("transPD_Sample"))
2009//
2010
2011                         EmptyI0=str2num(NI1_9IDCFindEmptyNoteValue("transI0_Empty"))
2012                         if(EmptyI0<1000)       //something wrong, old system???
2013                                 EmptyI0=str2num(NI1_9IDCFindEmptyNoteValue("transBPM_B_Empty"))
2014                                 EmptyI0+=str2num(NI1_9IDCFindEmptyNoteValue("transBPM_L_Empty"))
2015                                 EmptyI0+=str2num(NI1_9IDCFindEmptyNoteValue("transBPM_T_Empty"))
2016                                 EmptyI0+=str2num(NI1_9IDCFindEmptyNoteValue("transBPM_R_Empty"))
2017                         endif
2018                         EmptyPD=str2num(NI1_9IDCFindEmptyNoteValue("transPD_Empty"))
2019                         DarkI0=0
2020                         DarkPD = 0
2021//                       DarkI0=str2num(NI1_9IDCFindDarkNoteValue("transI0_Sample"))
2022//                       if(DarkI0<10)  //something wrong, old system???
2023//                               DarkI0=str2num(NI1_9IDCFindDarkNoteValue("transBPM_B_Sample"))
2024//                               DarkI0+=str2num(NI1_9IDCFindDarkNoteValue("transBPM_L_Sample"))
2025//                               DarkI0+=str2num(NI1_9IDCFindDarkNoteValue("transBPM_T_Sample"))
2026//                               DarkI0+=str2num(NI1_9IDCFindDarkNoteValue("transBPM_R_Sample"))
2027//                      endif
2028//                       DarkPD=str2num(NI1_9IDCFindDarkNoteValue("transPD_Sample"))
2029                endif
2030                transmissionUser = ((SamplePD - DarkPD)/(SampleI0-DarkI0))/((EmptyPD-DarkPD)/(EmptyI0-DarkI0))
2031                print "The NX file lists transmission = "+num2str(ExistingTransmissionInFile)
2032                print "Calculated transmission from Sam/Em/Dk NX values = "+num2str(transmissionUser)
2033        endif
2034
2035                if(USAXSForceTransmissionDialog)
2036                        Prompt transmissionUser, "Found transmission value of  ="
2037                        DoPrompt "Confirm/modify SAXS transmission, need value between 0 and 1", transmissionUser
2038                        if(V_Flag)
2039                                abort
2040                        endif
2041                //      Print "For sample :    "+sampleName+"    user has modified transmission to be = "+num2str(transmissionUser)
2042                endif
2043                return transmissionUser
2044end
2045
2046//************************************************************************************************************
2047//************************************************************************************************************
2048
2049Function NI1_9IDCNXTransmission()
2050
2051        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2052        if(!WaveExists(w2D))
2053                Abort "Data Image file not found " 
2054        endif
2055        string OldNOte=note(w2D)
2056        variable SampleI0 = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrI0=", OldNote), OldNote  , "=" , ";")
2057        variable SampleI0gain = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrI0gain=", OldNote), OldNote  , "=" , ";")
2058        variable SamplePinPD = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrPD=", OldNote), OldNote  , "=" , ";")
2059        variable SampleIPinPdGain = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrPDgain=", OldNote), OldNote  , "=" , ";")
2060
2061
2062        Wave/Z w2D = root:Packages:Convert2Dto1D:EmptyData
2063        if(!WaveExists(w2D))
2064                Abort "Empty Image file not found " 
2065        endif
2066        OldNOte=note(w2D)
2067        variable EmptyI0 = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrI0=", OldNote), OldNote  , "=" , ";")
2068        variable EmptyI0gain = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrI0gain=", OldNote), OldNote  , "=" , ";")
2069        variable EmptypinPD = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrPD=", OldNote), OldNote  , "=" , ";")
2070        variable EmptyPinPDGain = NumberByKey(NI1_9IDCFindKeyStr("Pin_TrPDgain=", OldNote), OldNote  , "=" , ";")
2071
2072        variable  Trans
2073
2074        Trans = ((SamplePinPD / SampleIPinPdGain)/ (SampleI0 / SampleI0gain)) / ((EmptypinPD / EmptyPinPDGain)/(EmptyI0/ EmptyI0gain))
2075        if(numtype(Trans)!=0)
2076                Print "Transmission value was impossible to calculate from NX values from Sample and Empty, setting to 0"
2077                Trans=0
2078        endif
2079        return Trans
2080end
2081//************************************************************************************************************
2082//************************************************************************************************************
2083Function NI1_9IDCFindThickness(SampleName)
2084        string sampleName
2085
2086        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2087        if(!WaveExists(w2D))
2088                Abort "Image file not found " 
2089        endif
2090        string OldNOte=note(w2D)
2091        variable thickness1 = NumberByKey(NI1_9IDCFindKeyStr("sample:thickness=", OldNote), OldNote  , "=" , ";")
2092        variable thickness2 = NumberByKey(NI1_9IDCFindKeyStr("sample_thickness=", OldNote), OldNote  , "=" , ";")
2093        NVAR UseBatchProcessing=root:Packages:Convert2Dto1D:UseBatchProcessing
2094        if(numtype(thickness1)==0)
2095                if(!UseBatchProcessing)
2096                        Print "Found thickness value in the wave note of the sample file, the value is [mm] = "+num2str(thickness1)
2097                endif
2098                return thickness1
2099        else
2100                if(numtype(thickness2)==0)
2101                        if(!UseBatchProcessing)
2102                                Print "Found thickness value in the wave note of the sample file, the value is [mm] = "+num2str(thickness2)
2103                        endif
2104                        return thickness2
2105                else
2106                        if(!UseBatchProcessing)
2107                                Print "Thickness value not found in the wave note of the sample file, setting to 1 [mm]"
2108                        endif
2109                        return 1
2110                endif
2111        endif
2112        return 0
2113end
2114//************************************************************************************************************
2115
2116//************************************************************************************************************
2117//************************************************************************************************************
2118Function NI1_9IDCFindTransmission(SampleName)
2119        string sampleName
2120       
2121        string TransmissionIsHere=NI1_9IDCFindLikelyUSAXSName(SampleName)
2122        string TransmissionIsHereL
2123        string/g root:Packages:Convert2Dto1D:USAXSSampleName
2124        SVAR USAXSSampleName = root:Packages:Convert2Dto1D:USAXSSampleName
2125        NVAR USAXSForceTransmissionDialog = root:Packages:Convert2Dto1D:USAXSForceTransmissionDialog
2126        NVAR USAXSForceUSAXSTransmission = root:Packages:Convert2Dto1D:USAXSForceUSAXSTransmission
2127
2128        //try to calculate the transmission using the 2012-03 pinPD placed on teh front of teh snout...
2129       
2130        variable CalcTrans = NI1_9IDCNXTransmission()
2131       
2132        if(USAXSForceUSAXSTransmission || CalcTrans==0)         //force old method and use of ONLY USAXS transmission or if CalcTrans is impossible to calculate
2133                USAXSSampleName = ""
2134                variable i
2135                if(ItemsInList(TransmissionIsHere,";")>1)
2136                        Prompt TransmissionIsHereL, "Folders with similar name to "+SampleName, popup,  TransmissionIsHere
2137                        DoPrompt "USAXS folder name not unique, please select correct one", TransmissionIsHereL
2138                else
2139                        TransmissionIsHereL = stringfromlist(0,TransmissionIsHere,";")
2140                endif
2141       
2142                USAXSSampleName = TransmissionIsHereL
2143                NVAR/Z Transmission=$(TransmissionIsHereL+"Transmission")
2144                variable transmissionUser=1
2145                if(NVAR_Exists(Transmission))
2146                        transmissionUser = Transmission
2147                        Print "For sample :    "+sampleName+"    has been found USAXS transmission = "+num2str(Transmission)+"      in folder : "+ TransmissionIsHereL
2148                        if(USAXSForceTransmissionDialog)
2149                                Prompt transmissionUser, "Found transmission value of  ="
2150                                DoPrompt "Confirm/modify USAXS transmission, need value between 0 and 1", transmissionUser
2151                                if(V_Flag)
2152                                        abort
2153                                endif
2154                                Print "For sample :    "+sampleName+"    user has modified transmission to be = "+num2str(transmissionUser)
2155                        endif
2156                        return transmissionUser
2157                else
2158                        Prompt transmissionUser, "Transmission not found, plese input value"
2159                        DoPrompt "USAXS transmission NOT FOUND, input value between 0 and 1", transmissionUser
2160                                if(V_Flag)
2161                                        abort
2162                                endif
2163                        Print "For sample :    "+sampleName+"    has been used manually input transmission = "+num2str(Transmission)
2164                        return transmissionUser
2165                endif
2166        else
2167                                        //Print "For sample :   "+sampleName+" transmission = "+num2str(CalcTrans)
2168                return CalcTrans
2169        endif
2170end
2171
2172//************************************************************************************************************
2173//************************************************************************************************************
2174
2175Function/S NI1_9IDCFindLikelyUSAXSName(SampleName)
2176        string sampleName
2177        //12umCu_1min_1s_289.hdf5
2178        string LikelyUSAXSName=RemoveEnding(SampleName  , ".hdf5")
2179        //12umCu_1min_1s_289
2180        LikelyUSAXSName = RemoveListItem(ItemsInList(LikelyUSAXSName,"_")-1, LikelyUSAXSName  , "_")
2181        LikelyUSAXSName = LikelyUSAXSName[0,strlen(LikelyUSAXSName)-2]
2182        //12umCu_1min_1s
2183        if(stringmatch(LikelyUSAXSName[strlen(LikelyUSAXSName)-1,strlen(LikelyUSAXSName)-1],"s"))
2184                string tempEnding=StringFromList(ItemsInList(LikelyUSAXSName,"_")-1, LikelyUSAXSName , "_")
2185                if(numtype(str2num(removeEnding(tempEnding)))==0)
2186                        LikelyUSAXSName = RemoveListItem(ItemsInList(LikelyUSAXSName,"_")-1, LikelyUSAXSName  , "_")
2187                        LikelyUSAXSName = LikelyUSAXSName[0,strlen(LikelyUSAXSName)-2]
2188                endif
2189        endif
2190//      LikelyUSAXSName = RemoveListItem(ItemsInList(LikelyUSAXSName,"_")-1, LikelyUSAXSName  , "_")
2191//      LikelyUSAXSName = LikelyUSAXSName[0,strlen(LikelyUSAXSName)-2]
2192        string ListOfUFoldersWithTransmissions=IN2G_FindFolderWithWvTpsList("root:USAXS:", 10, "*SMR_Int", 1)
2193        //ListOfUFoldersWithTransmissions = ReplaceString(" ", ListOfUFoldersWithTransmissions, "_" )
2194        //      print ListOfUFoldersWithTransmissions
2195        string LikelyUSAXSNameMod=ReplaceString("_", LikelyUSAXSName, "." )
2196        string ListOfLikelyFolders=GrepList(ListOfUFoldersWithTransmissions, LikelyUSAXSNameMod,0  , ";" )
2197
2198        return ListOfLikelyFolders
2199end
2200//************************************************************************************************************
2201//************************************************************************************************************
2202Function NI1_15IDWFindI0(SampleName)
2203        string sampleName
2204        abort "Please, rerun configuration to update function names"
2205end
2206
2207//this will be abused for writing also Dexela offset in the proper field...
2208
2209Function NI1_9IDWFindI0(SampleName)
2210        string sampleName
2211
2212        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2213        if(!WaveExists(w2D))
2214                Abort "Image file not found " 
2215        endif
2216        string OldNOte=note(w2D)
2217        variable I000
2218        I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_cts_gated=", OldNote), OldNote  , "=" , ";")          //try gated signal first...
2219        if(numtype(I000)!=0)
2220                I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_cts=", OldNote), OldNote  , "=" , ";")
2221        endif
2222        variable I0gain = NumberByKey(NI1_9IDCFindKeyStr("I0_gain=", OldNote), OldNote  , "=" , ";")
2223        I000 = I000 / I0gain
2224        if(numtype(I000)!=0)
2225                Print "I0 value not found in the wave note of the sample file, setting to 1"
2226                I000=1
2227        endif
2228        //here we will write also offset value in the field.
2229        NVAR useDexela = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
2230        NVAR DexelaOffsetScale = root:Packages:Convert2Dto1D:DexelaOffsetScale
2231        if(useDexela)
2232                //need to write in: root:Packages:Convert2Dto1D:SubtractFixedOffset
2233                // instrument:detector:process1:frames_summed=5
2234                // instrument:detector:process1:int_frame_offset=1000
2235                NVAR DexOffset=root:Packages:Convert2Dto1D:SubtractFixedOffset
2236                variable NumImages, OffsetPerImage
2237                NumImages = NumberByKey("instrument:detector:process1:frames_summed", OldNote  , "=" , ";")
2238                OffsetPerImage = NumberByKey("instrument:detector:process1:int_frame_offset", OldNote  , "=" , ";")
2239                DexOffset = NumImages * OffsetPerImage* DexelaOffsetScale
2240                print "Read Fixed offfset for this Dexela image in metadata = "+num2str(DexOffset)
2241        else
2242                NVAR DexOffset=root:Packages:Convert2Dto1D:SubtractFixedOffset
2243                DexOffset=0
2244        endif
2245        return I000
2246end
2247
2248//************************************************************************************************************
2249//************************************************************************************************************
2250Function NI1_15IDWFindTRANS(SampleName)
2251        string sampleName
2252        abort "Please, rerun configuration to update function names"
2253end
2254
2255Function NI1_9IDWFindTRANS(SampleName)
2256        string sampleName
2257
2258        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2259        if(!WaveExists(w2D))
2260                Abort "Image file not found " 
2261        endif
2262        Wave/Z w2DE = root:Packages:Convert2Dto1D:EmptyData
2263        if(!WaveExists(w2DE))
2264                Abort "Empty Image file not found " 
2265        endif
2266        string OldNOteSample=note(w2D)
2267        string OldNOteEmpty=note(w2DE)
2268        variable I000S
2269        I000S = NumberByKey(NI1_9IDCFindKeyStr("I0_cts_gated=", OldNOteSample), OldNOteSample  , "=" , ";")             //try gated signal first...
2270        if(numtype(I000S)!=0)
2271                I000S = NumberByKey(NI1_9IDCFindKeyStr("I0_cts=", OldNOteSample), OldNOteSample  , "=" , ";")
2272        endif
2273        variable I0gainS = NumberByKey(NI1_9IDCFindKeyStr("I0_gain=", OldNOteSample), OldNOteSample  , "=" , ";")
2274        I000S = I000S / I0gainS
2275        if(numtype(I000S)!=0)
2276                Print "I0 value not found in the wave note of the sample file, setting to 1"
2277                I000S=1
2278        endif
2279        variable I000E
2280        I000E = NumberByKey(NI1_9IDCFindKeyStr("I0_cts_gated=", OldNOteEmpty), OldNOteEmpty  , "=" , ";")               //try gated signal first...
2281        if(numtype(I000E)!=0)
2282                I000E = NumberByKey(NI1_9IDCFindKeyStr("I0_cts=", OldNOteEmpty), OldNOteEmpty  , "=" , ";")
2283        endif
2284        variable I0gainE = NumberByKey(NI1_9IDCFindKeyStr("I0_gain=", OldNOteEmpty), OldNOteEmpty  , "=" , ";")
2285        I000E = I000E / I0gainE
2286        if(numtype(I000E)!=0)
2287                Print "I0 value not found in the wave note of the sample file, setting to 1"
2288                I000E=1
2289        endif
2290
2291        variable TRDS
2292        TRDS = NumberByKey(NI1_9IDCFindKeyStr("TR_cts_gated=", OldNOteSample), OldNOteSample  , "=" , ";")              //try gated signal first...
2293        if(numtype(TRDS)!=0)
2294                TRDS = NumberByKey(NI1_9IDCFindKeyStr("TR_cts=", OldNOteSample), OldNOteSample  , "=" , ";")
2295        endif
2296        variable TRDgainS = NumberByKey(NI1_9IDCFindKeyStr("TR_gain=", OldNOteSample), OldNOteSample  , "=" , ";")
2297        TRDS = TRDS / TRDgainS
2298        if(numtype(TRDS)!=0)
2299                Print "TR diode value not found in the wave note of the sample file, setting to 1"
2300                TRDS=1
2301        endif
2302        variable TRDE
2303        TRDE = NumberByKey(NI1_9IDCFindKeyStr("TR_cts_gated=", OldNOteEmpty), OldNOteEmpty  , "=" , ";")                //try gated signal first...
2304        if(numtype(TRDE)!=0)
2305                TRDE = NumberByKey(NI1_9IDCFindKeyStr("TR_cts=", OldNOteEmpty), OldNOteEmpty  , "=" , ";")
2306        endif
2307        variable TRDgainE = NumberByKey(NI1_9IDCFindKeyStr("TR_gain=", OldNOteEmpty), OldNOteEmpty  , "=" , ";")
2308        TRDE = TRDE / TRDgainE
2309        if(numtype(TRDE)!=0)
2310                Print "I0 value not found in the wave note of the sample file, setting to 1"
2311                TRDE=1
2312        endif
2313
2314
2315        return (TRDS/I000S)/(TRDE/I000E)
2316end
2317
2318//************************************************************************************************************
2319//************************************************************************************************************
2320Function NI1_15IDWFindEFI0(SampleName)
2321        string sampleName
2322        abort "Please, rerun configuration to update function names"
2323end
2324
2325Function NI1_9IDWFindEFI0(SampleName)
2326        string sampleName
2327
2328        Wave/Z w2D = root:Packages:Convert2Dto1D:EmptyData
2329        if(!WaveExists(w2D))
2330                Abort "Image file not found " 
2331        endif
2332        string OldNOte=note(w2D)
2333        variable I000
2334        I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_cts_gated=", OldNote), OldNote  , "=" , ";")          //try gated signal first...
2335        if(numtype(I000)!=0)
2336                I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_cts=", OldNote), OldNote  , "=" , ";")
2337        endif
2338        variable I0gain = NumberByKey(NI1_9IDCFindKeyStr("I0_gain=", OldNote), OldNote  , "=" , ";")
2339        I000 = I000 / I0gain
2340        if(numtype(I000)!=0)
2341                Print "I0 value not found in the wave note of the sample file, setting to 1"
2342                I000=1
2343        endif
2344        return I000
2345end
2346//************************************************************************************************************
2347//************************************************************************************************************
2348Function NI1_9IDCFindI0(SampleName)
2349        string sampleName
2350
2351        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2352        if(!WaveExists(w2D))
2353                Abort "Image file not found " 
2354        endif
2355        string OldNOte=note(w2D)
2356        variable I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_cts_gated=", OldNote), OldNote  , "=" , ";")
2357        variable I0gain = NumberByKey(NI1_9IDCFindKeyStr("I0_gain=", OldNote), OldNote  , "=" , ";")
2358        //print SampleName+"   normalized I0 = "+num2str(I000 / I0gain)
2359        //print "I0 gain = "+num2str(I0gain)
2360        //print "I0 counts uncorrected = "+num2str(I000)
2361        I000 = I000 / I0gain
2362        if(numtype(I000)!=0)
2363                Print "I0 value not found in the wave note of the sample file, setting to 1"
2364                I000=1
2365        endif
2366        return I000
2367end
2368//************************************************************************************************************
2369//************************************************************************************************************
2370Function NI1_9IDCSFindI0(SampleName)
2371        string sampleName
2372
2373        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2374        if(!WaveExists(w2D))
2375                Abort "Image file not found " 
2376        endif
2377        string OldNOte=note(w2D)
2378        variable I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_Sample=", OldNote), OldNote  , "=" , ";")
2379        if(numtype(I000)!=0 || I000<1)
2380                I000 = NumberByKey(NI1_9IDCFindKeyStr("BPM_B_Sample=", OldNote), OldNote  , "=" , ";")
2381                I000 += NumberByKey(NI1_9IDCFindKeyStr("BPM_T_Sample=", OldNote), OldNote  , "=" , ";")
2382                I000 += NumberByKey(NI1_9IDCFindKeyStr("BPM_L_Sample=", OldNote), OldNote  , "=" , ";")
2383                I000 += NumberByKey(NI1_9IDCFindKeyStr("BPM_R_Sample=", OldNote), OldNote  , "=" , ";")
2384        endif
2385        if(numtype(I000)!=0)
2386                Print "I0 value not found in the wave note of the sample file, setting to 1"
2387                I000=1
2388        endif
2389        return I000
2390end
2391//************************************************************************************************************
2392//************************************************************************************************************
2393Function NI1_9IDCSFindThickness(SampleName)
2394        string sampleName
2395
2396        Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2397        if(!WaveExists(w2D))
2398                Abort "Image file not found " 
2399        endif
2400        string OldNOte=note(w2D)
2401        variable thickness1 = NumberByKey(NI1_9IDCFindKeyStr("sample:thickness=", OldNote), OldNote  , "=" , ";")
2402        variable thickness2 = NumberByKey(NI1_9IDCFindKeyStr("sample_thickness=", OldNote), OldNote  , "=" , ";")
2403        NVAR UseBatchProcessing=root:Packages:Convert2Dto1D:UseBatchProcessing
2404        if(numtype(thickness1)==0)
2405                if(!UseBatchProcessing)
2406                        Print "Found thickness value in the wave note of the sample file, the value is [mm] = "+num2str(thickness1)
2407                endif
2408                return thickness1
2409        else
2410                if(numtype(thickness2)==0)
2411                        if(!UseBatchProcessing)
2412                                Print "Found thickness value in the wave note of the sample file, the value is [mm] = "+num2str(thickness2)
2413                        endif
2414                        return thickness2
2415                else
2416                        if(!UseBatchProcessing)
2417                                Print "Thickness value not found in the wave note of the sample file, setting to 1 [mm]"
2418                        endif
2419                        return 1
2420                endif
2421        endif
2422        return 0
2423end
2424//************************************************************************************************************
2425//************************************************************************************************************
2426Function NI1_9IDCSFindEfI0(SampleName)
2427        string sampleName
2428
2429        Wave/Z w2D = root:Packages:Convert2Dto1D:EmptyData
2430        if(!WaveExists(w2D))
2431                Abort "Image file not found " 
2432        endif
2433        string OldNOte=note(w2D)
2434        variable I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_Sample=", OldNote), OldNote  , "=" , ";")
2435        if(numtype(I000)!=0 || I000<1)
2436                I000 = NumberByKey(NI1_9IDCFindKeyStr("BPM_B_Sample=", OldNote), OldNote  , "=" , ";")
2437                I000 += NumberByKey(NI1_9IDCFindKeyStr("BPM_T_Sample=", OldNote), OldNote  , "=" , ";")
2438                I000 += NumberByKey(NI1_9IDCFindKeyStr("BPM_L_Sample=", OldNote), OldNote  , "=" , ";")
2439                I000 += NumberByKey(NI1_9IDCFindKeyStr("BPM_R_Sample=", OldNote), OldNote  , "=" , ";")
2440        endif
2441        if(numtype(I000)!=0)
2442                Print "I0 value not found in the wave note of the sample file, setting to 1"
2443                I000=1
2444        endif
2445        return I000
2446end
2447
2448//************************************************************************************************************
2449//************************************************************************************************************
2450Function NI1_9IDCFindEfI0(SampleName)
2451        string sampleName
2452       
2453        //check the empty file name...
2454        //this is 2D empty file name
2455        string LikelyUSAXSName=NI1_9IDCFindLikelyUSAXSName(SampleName)
2456        SVAR USAXSSampleName = root:Packages:Convert2Dto1D:USAXSSampleName
2457        NVAR USAXSForceUSAXSTransmission = root:Packages:Convert2Dto1D:USAXSForceUSAXSTransmission
2458        string SampleLocationL=""
2459        if(USAXSForceUSAXSTransmission)
2460                if(ItemsInList(LikelyUSAXSName,";")>1 &&strlen(USAXSSampleName)>1 )
2461                        LikelyUSAXSName = USAXSSampleName
2462                elseif(ItemsInList(LikelyUSAXSName,";")>1 &&strlen(USAXSSampleName)<1)
2463                        Prompt SampleLocationL, "Folders with similar name to "+SampleName, popup,  LikelyUSAXSName
2464                        DoPrompt "USAXS folder name not unique, select correct one", SampleLocationL
2465                        if(V_Flag)
2466                                abort
2467                        endif
2468                        LikelyUSAXSName = SampleLocationL
2469                endif
2470                Wave/Z SMR_Int=$(removeending(LikelyUSAXSName,";")+"SMR_Int")
2471                if(!WaveExists(SMR_Int))
2472                                Wave/Z SMR_Int=$(removeending(LikelyUSAXSName,";")+"M_SMR_Int")
2473                endif
2474                string USAXSUsedBlankName
2475                if(WaveExists(SMR_Int))
2476                        USAXSUsedBlankName=StringByKey("BlankComment", note(SMR_Int) , "="  , ";")
2477                        USAXSUsedBlankName=ReplaceString(" ", USAXSUsedBlankName, "_")
2478                else
2479                        USAXSUsedBlankName=""
2480                endif
2481                SVAR CurrentEmptyName = root:Packages:Convert2Dto1D:CurrentEmptyName
2482                string tempStr=RemoveEnding(CurrentEmptyName , ".hdf5")
2483                tempStr =  tempStr[0,strsearch(tempStr, "_", inf ,1)-1]
2484                if((strlen(CurrentEmptyName)<1)||((USAXSForceUSAXSTransmission==1) && (stringmatch(USAXSUsedBlankName, "*"+tempStr+"*" ))!=1))
2485                        DoAlert /T="Wrong Empty data set found" 2, "SAXS Empty : "+CurrentEmptyName+" does NOT match \rUSAXS Blank : "+USAXSUsedBlankName+", do you want to: \r [Yes] = select USAXS Matching image\r [No] = use current : "+CurrentEmptyName+"\r [Cancel] = cancel?"
2486                        if(V_Flag==1)
2487                                //here we need to load new Empty for user
2488                                //existing data files, need to match them for the CurrentEmptyName
2489                                string tempStr2=ReplaceString(" ", CurrentEmptyName, "_")
2490                                NI1A_UpdateEmptyDarkListBox()
2491                                Wave/T ListOf2DEmptyData=root:Packages:Convert2Dto1D:ListOf2DEmptyData
2492                                Make/T/FREE/N=0 TempStrWv
2493                                variable i, ii=0
2494                                //this build list of only matching
2495                                For(i=NumPnts(ListOf2DEmptyData)-1;i>=0;i-=1)
2496                                        if(stringmatch(ListOf2DEmptyData[i], "*"+USAXSUsedBlankName+"*" ))
2497                                                redimension/N=(Numpnts(TempStrWv)+1) TempStrWv
2498                                                ii+=1
2499                                                TempStrWv[ii]= ListOf2DEmptyData[i]
2500                                        endif
2501                                endfor 
2502                                string ListOfOptions=""
2503                                For(i=0;i<(ii);i+=1)
2504                                        ListOfOptions+=TempStrWv[i]+";"
2505                                endfor
2506                                ListOfOptions+="----All files---"+";"
2507                                For(i=0;i<NumPnts(ListOf2DEmptyData);i+=1)
2508                                        ListOfOptions+=ListOf2DEmptyData[i]+";"
2509                                endfor
2510                                string UserEmptyFileSelection
2511                                UserEmptyFileSelection = stringFromList(0,ListOfOptions)
2512                                Prompt UserEmptyFileSelection, "Select Empty file for "+SampleName, popup, ListOfOptions
2513                                DoPrompt "SAXS select empty file (USAXS name is "+USAXSUsedBlankName+") : ", UserEmptyFileSelection
2514                                if(V_Flag)
2515                                        abort
2516                                endif
2517                                print "User selected to load New Empty : "+UserEmptyFileSelection
2518                                For(i=0;i<numpnts(ListOf2DEmptyData);i+=1)
2519                                        if(stringmatch(ListOf2DEmptyData[i],UserEmptyFileSelection))
2520                                                Listbox  Select2DMaskDarkWave win=NI1A_Convert2Dto1DPanel, selRow=i
2521                                                break
2522                                                //controlInfo /W=NI1A_Convert2Dto1DPanel Select2DMaskDarkWave
2523                                        endif
2524                                endfor
2525                                NI1A_LoadEmptyOrDark("Empty")           
2526                        elseif(V_Flag==3)
2527                                abort
2528                        else
2529                                Print "User selected to use different Empty 2D data set than Blank measurement used for USAXS. "
2530                        endif
2531                endif
2532        endif
2533        Wave/Z w2D = root:Packages:Convert2Dto1D:EmptyData
2534        if(!WaveExists(w2D))
2535                Abort "Load one Image file first so the tool can read the wave note information" 
2536        endif
2537        string OldNOte=note(w2D)
2538        variable I000 = NumberByKey(NI1_9IDCFindKeyStr("I0_cts_gated=", OldNote), OldNote  , "=" , ";")
2539        variable I0gain = NumberByKey(NI1_9IDCFindKeyStr("I0_gain=", OldNote), OldNote  , "=" , ";")
2540        I000 = I000 / I0gain
2541        //print SampleName+" EMPTY  normalized I0 = "+num2str(I000)
2542        if(numtype(I000)!=0)
2543                Print "I0 value not found in the wave note of the empty file, setting to 1"
2544                I000=1
2545        endif
2546        return I000
2547end
2548
2549//************************************************************************************************************
2550//************************************************************************************************************
2551
2552
2553Function NI1_9IDCCreateHelpNbk()
2554        String nb = "Instructions_9IDC"
2555        DoWIndow Instructions_9IDC
2556        if(V_Flag)
2557                DoWindow/F Instructions_9IDC
2558        else
2559                NewNotebook/N=$nb/F=1/V=1/K=1/ENCG={2,1}/W=(260,162,1291,937)
2560                Notebook $nb defaultTab=36
2561                Notebook $nb showRuler=1, rulerUnits=1, updating={1, 60}
2562                Notebook $nb newRuler=Normal, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",10,0,(0,0,0)}
2563                Notebook $nb newRuler=Title, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",12,3,(0,0,0)}
2564                Notebook $nb ruler=Title, text="Instructions for use of 9IDC (9IDC) special configurations\r"
2565                Notebook $nb ruler=Normal, text="\r"
2566                Notebook $nb text="Decide which data you need to reduce. Instructions are geometry specific:\r"
2567                Notebook $nb text="\r"
2568                Notebook $nb ruler=Title, text="SAXS \r"
2569                Notebook $nb ruler=Normal
2570                Notebook $nb text="You may be helped by first reducing your USAXS data, but it is not totally"
2571                Notebook $nb text=" necessary.\r"
2572                Notebook $nb text="1.\tSelect \"SAXS\" checkbox. Check or keep checked checkbox \"Read Parameters from files\" \r"
2573                Notebook $nb text="\r"
2574                Notebook $nb text="2.\tPush \"Set default settings\" button to locate one representative 2D image (.hdf) file inside the data "
2575                Notebook $nb text="folder you want to process. This will also configure Nika settings common to all SAXS data processing. I"
2576                Notebook $nb text="mage will open and geometry/calibration parameters - e.g., distance/wavelength/center... will be loaded"
2577                Notebook $nb text=". \r"
2578                Notebook $nb text="\r"
2579                Notebook $nb fStyle=1, text="3. default: \t", fStyle=-1
2580                Notebook $nb text="Check or keep checked the checkbox \"Read Parameters from files\" and this will re-read geometry/calibrati"
2581                Notebook $nb text="on parameters when each image file is loaded. Continue to step 4. \r"
2582                Notebook $nb text="\r"
2583                Notebook $nb fStyle=2, text="3. alternative: \t", fStyle=-1
2584                Notebook $nb text="If for some reason you do NOT want to re-read geometry/calibration parameters for each file, uncheck the"
2585                Notebook $nb text=" checkbox \"Read Parameters from files\" and use button \"Read geometry from wave note\" button to read"
2586                Notebook $nb text="values from the wavenote of the loaded file. Verify the parameters (Beam center & calibration) using Ag Behe"
2587                Notebook $nb text="nate measurements collected with your data & your notes (some NX file info could be stale). Modify if ne"
2588                Notebook $nb text="eded, these will be retained until YOU change them. This alternative procedure is also necessary "
2589                Notebook $nb text="for data from before ~2015 as they are not suported by default code. \r"
2590                Notebook $nb text="\r"
2591                Notebook $nb text="4. \tUse button \"Set Slit length\" to locate appropriate USAXS data and read the slit length from them. Or"
2592                Notebook $nb text=" set manually - needed ONLY if you did not desmear the USAXS data (and you therefore have slit smeared USAXS data) "
2593                Notebook $nb text=" and if checkbox \"Create Smeared Data\" IS checked.  Then use SAXS data with _u at the end of folder name to mer"
2594                Notebook $nb text="ge later with USAXS SMR data. \r"
2595                Notebook $nb text="\r"
2596                Notebook $nb fStyle=2, text="4. alternative ", fStyle=-1
2597                Notebook $nb text="\tIf you desmeared USAXS data uncheck the checkboxs \"Create Smeared Data\" and ignore the Slit length controls."
2598                Notebook $nb text=" Use SAXS data with _270_30 in the end of folder name and merge these with DSM USAXS data. \r"
2599                Notebook $nb text="\r"
2600//              Notebook $nb text="5. \tCreate mask to mask off the top few lines on detector using button: \"Create SAXS/WAXS mask\"\r"
2601                Notebook $nb text="5. \tLocate the appropriate \"Empty\" (aka: Blank) image file you want to use and load it in Nika in \"Emp/D"
2602                Notebook $nb text="k\" tab. ", fStyle=6
2603                Notebook $nb text="Keep in mind that for each data set you may need different Empty/Blank image - and it is your job to kno"
2604                Notebook $nb text="w which empty/dark belongs to which data image.  \r"
2605                Notebook $nb text="\r"
2606                Notebook $nb fStyle=-1, text="6. \tTo process data select one or more image data in the Listbox in the Nika main panel and push button \""
2607                Notebook $nb fStyle=3, text="Convert sel. files 1 at time", fStyle=-1, text="\"\r"
2608                Notebook $nb text="\r"
2609                Notebook $nb text="\r"
2610                Notebook $nb text="\r"
2611                Notebook $nb ruler=Title, text="WAXS\r"
2612                Notebook $nb ruler=Normal, text="1.\tSelect \"WAXS\" checkbox. Check or keep checked the checkbox \"Read Parameters from files\".\r"
2613                Notebook $nb text="\r"
2614                Notebook $nb text="2.\tPush \"Set default settings\" button to locate one representative 2D image (.hdf) file inside the data "
2615                Notebook $nb text="folder you want to process. This will also configure Nika settings common to all WAXS data processing. I"
2616                Notebook $nb text="mage will open and geometry/calibration parameters - e.g., distance/.wavelength/center... will be loaded"
2617                Notebook $nb text=".  \r"
2618                Notebook $nb text="\r"
2619                Notebook $nb fStyle=1, text="3. default: \t", fStyle=-1
2620                Notebook $nb text="Check or keep checked the checkbox \"Read Parameters from files\" and this will re-read geometry/calibrati"
2621                Notebook $nb text="on parameters when each image file is loaded. Continue to step 4. \r"
2622                Notebook $nb text="\r"
2623                Notebook $nb fStyle=2, text="3. alternative: \t", fStyle=-1
2624                Notebook $nb text="If for some reason you do NOT want to re-read geometry/calibration parameters for each file, uncheck the"
2625                Notebook $nb text=" checkbox \"Read Parameters from files\" and use button \"Read geometry from wave note\" button to read"
2626                Notebook $nb text=" values from the wavenote of this file. Verify the parameters (Beam center & calibration) using LaB6 me"
2627                Notebook $nb text="asurements collected with your data & your notes (some NX file info could be stale). Modify if needed, t"
2628                Notebook $nb text="hese will be retained now until YOU change them. This is also necessary step for data from before ~2015"
2629                Notebook $nb text=" as these are not suported by new code. \r"
2630                Notebook $nb text="\r"
2631                Notebook $nb fStyle=2, text="4. rare alternative \t", fStyle=-1
2632                Notebook $nb text="If you do NOT have Empty (aka: blank) measurement - it is standard at the instrument to collect them you can disbale blank subtraction."
2633                Notebook $nb text="In that case push \"WAXS Do NOT use Blank\". In this case you do NOT have to load Blank in the \"Empty/Dk\" tab and air scattering will NOT be subtracted with proper normalization.\r"
2634                Notebook $nb text="\r"
2635                Notebook $nb text="5. \tTo process data select one or more image data in the main panel and push button \"", fStyle=3
2636                Notebook $nb text="Convert sel. files 1 at time", fStyle=-1, text="\"\r"
2637                Notebook $nb text="\r"
2638                Notebook $nb text="\r"
2639                Notebook $nb ruler=Title, text="SAXS\r"
2640                Notebook $nb ruler=Normal, text="1.\tSelect \"15ID SAXS\" checkbox.\r"
2641                Notebook $nb text="2.\tPush \"Set default methods\" button to locate data folder and configure Nika settings common to all SAX"
2642                Notebook $nb text="S experiments.\r"
2643                Notebook $nb text="3.\tSelect one of the images from your SAXS measurements in the main 2D panel and double click it (or use"
2644                Notebook $nb text=" button \"Ave & Display sel. file(s)\") to load \r"
2645                Notebook $nb text="3. \tUse \"Set Experiment Settings\"  button to read & set values from the wavenote of this file (These are"
2646                Notebook $nb text=" the most likely values for your experiment)\r"
2647                Notebook $nb text="4. \tConfigure Empty and Dark images, generate Mask as needed. Likely you will need first to reduce the G"
2648                Notebook $nb text="lassy Carbon sample, compare it with the standard data and create calibration constant. There is movie o"
2649                Notebook $nb text="n this on the YouTube channel or USAXS web site.   "
2650                Notebook $nb selection={startOfFile, startOfFile }, findText={"I",1}
2651        endif
2652        AutopositionWindow/M=1/r=NI1_9IDCConfigPanel  Instructions_9IDC
2653end
2654
2655//************************************************************************************************************
2656//************************************************************************************************************
2657
2658//Function NI1_9IDCCreateWvNtNbk(SampleName)
2659//      String SampleName
2660//      Wave/Z w2D = root:Packages:Convert2Dto1D:CCDImageToConvert
2661//      if(!WaveExists(w2D))            //hm, are we laoding the empty?
2662//              Wave/Z w2D = root:Packages:Convert2Dto1D:EmptyData
2663//      endif
2664//      if(WaveExists(w2d))
2665//              string OldNOte=note(w2D)
2666//             
2667//              string Instrument = StringByKey(NI1_9IDCFindKeyStr("instrument:name=", OldNote), OldNOte  , "=" , ";")          //USAXS
2668//              string Facility = StringByKey(NI1_9IDCFindKeyStr("facility_beamline=", OldNote), OldNOte  , "=" , ";")
2669//              variable i
2670//              String nb       
2671//      //      if((stringMatch("15ID", )||stringMatch("9ID", StringByKey(NI1_9IDCFindKeyStr("facility_beamline=", OldNote), OldNOte  , "=" , ";"))) && stringMatch("Pilatus", StringByKey(NI1_9IDCFindKeyStr("model=", OldNote), OldNOte  , "=" , ";")))       
2672//              if((stringMatch("15ID",Facility )||stringMatch("9ID",Facility )) && (stringMatch("USAXS", Instrument) || stringMatch("15ID SAXS", Instrument)))
2673//                               nb = "Sample_Information"
2674//                              DoWindow Sample_Information
2675//                              if(V_Flag)
2676//                                      DoWindow /K Sample_Information
2677//                              endif
2678//                              NewNotebook/N=$nb/F=1/V=1/K=1/W=(700,10,1100,700)
2679//                              Notebook $nb defaultTab=36, statusWidth=252
2680//                              Notebook $nb showRuler=1, rulerUnits=1, updating={1, 60}
2681//                              Notebook $nb newRuler=Normal, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",10,0,(0,0,0)}
2682//                              Notebook $nb newRuler=Title, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",12,3,(0,0,0)}
2683//                              Notebook $nb ruler=Title, text="Header information for "+SampleName+"\r"
2684//                              Notebook $nb ruler=Normal, text="\r"
2685//                              For(i=0;i<ItemsInList(OldNOte,";");i+=1)
2686//                                              Notebook $nb text=stringFromList(i,OldNOte,";")+ " \r"
2687//                              endfor
2688//                              Notebook $nb selection={startOfFile,startOfFile}
2689//                              Notebook $nb text=""
2690//              endif
2691//      else
2692//                               nb = "Sample_Information"
2693//                              DoWindow Sample_Information
2694//                              if(V_Flag)
2695//                                      DoWindow /K Sample_Information
2696//                              endif
2697//                              NewNotebook/N=$nb/F=1/V=1/K=1/W=(700,10,1100,700)
2698//                              Notebook $nb defaultTab=36, statusWidth=252
2699//                              Notebook $nb showRuler=1, rulerUnits=1, updating={1, 60}
2700//                              Notebook $nb newRuler=Normal, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",10,0,(0,0,0)}
2701//                              Notebook $nb newRuler=Title, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",12,3,(0,0,0)}
2702//                              Notebook $nb ruler=Title, text="No information found for this file \r" 
2703//      endif   
2704//     
2705////    AutopositionWindow/M=0/R=CCDImageToConvertFig Sample_Information
2706////    print ReplaceString(";", OldNote, "\r")
2707//
2708//
2709//end
2710//
2711
2712//************************************************************************************************************
2713//************************************************************************************************************
2714
2715
2716Function NI1_9IDCCreateSMRSAXSdata(listOfOrientations) 
2717                string listOfOrientations
2718       
2719                //print listOfOrientations
2720                //continue ONLY if these were created:
2721                 //270_10;VLp_0;
2722                string OldDf=getDataFOlder(1)
2723                //see what these do: NI1A_SaveDataPerUserReq(tempStr1+tempStr)
2724                NVAR/Z SAXSSelected=root:Packages:Convert2Dto1D:USAXSSAXSselector
2725                if(!NVAR_Exists(SAXSSelected) || !SAXSSelected)
2726                        return 0
2727                endif
2728               
2729                NVAR/Z USAXSSlitLength = root:Packages:Convert2Dto1D:USAXSSlitLength
2730                NVAR/Z SAXSGenSmearedPinData= root:Packages:Convert2Dto1D:SAXSGenSmearedPinData
2731                NVAR/Z  SAXSDeleteTempPinData= root:Packages:Convert2Dto1D:SAXSDeleteTempPinData
2732                if(!NVAR_Exists(USAXSSlitLength)||!NVAR_Exists(SAXSGenSmearedPinData)||!NVAR_Exists(SAXSDeleteTempPinData))
2733                        return 0
2734                endif
2735                if(!SAXSGenSmearedPinData)
2736                        return 0
2737                endif
2738                if(SAXSGenSmearedPinData && (!(GrepString(listOfOrientations,"270_30")||GrepString(listOfOrientations,"270_10"))||!GrepString(listOfOrientations,"VLp_0")))
2739                        Print "Could not create requested slit smeared SAXS data since the right sector and line profiles are not available"
2740                        return 0
2741                endif
2742                if(USAXSSlitLength<0.001)       //slit length not set, force user to find it...
2743                        NI1_9IDCFIndSlitLength()
2744                endif
2745       
2746        NVAR Use2DdataName=root:Packages:Convert2Dto1D:Use2DdataName
2747        SVAR LoadedFile=root:Packages:Convert2Dto1D:FileNameToLoad
2748        SVAR UserFileName=root:Packages:Convert2Dto1D:OutputDataName
2749        SVAR TempOutputDataname=root:Packages:Convert2Dto1D:TempOutputDataname
2750        SVAR TempOutputDatanameUserFor=root:Packages:Convert2Dto1D:TempOutputDatanameUserFor
2751        SVAR UserSampleNameGlobal=root:Packages:Convert2Dto1D:UserSampleName
2752        string useName, LocalUserFileName
2753        string CurOrient
2754        //our secotr...
2755        if(GrepString(listOfOrientations,"270_30"))
2756                CurOrient="270_30"
2757        else
2758                CurOrient="270_10"                              //old setting
2759        endif
2760        if (Use2DdataName)
2761                //variable tempEnd=26-strlen(CurOrient)
2762                //UseName=LoadedFile[0,tempEnd]+"_"+CurOrient
2763                UseName=NI1A_TrimCleanDataName(UserSampleNameGlobal, CurOrient)+"_"+CurOrient
2764               
2765        elseif(strlen(UserFileName)<1)  //user did not set the file name
2766                if(cmpstr(TempOutputDatanameUserFor,UserSampleNameGlobal)==0 && strlen(TempOutputDataname)>0)           //this file output was already asked for user
2767                                LocalUserFileName = TempOutputDataname
2768                else
2769                                abort "could not figure out the names" 
2770                endif
2771                UseName=NI1A_TrimCleanDataName(LocalUserFileName, CurOrient)+"_"+CurOrient
2772        else
2773                UseName=NI1A_TrimCleanDataName(UserFileName, CurOrient)+"_"+CurOrient
2774        endif
2775        //UseName=cleanupName(UseName, 1 )
2776        String PinFolder="root:SAXS:"+possiblyQuoteName(UseName)
2777        String PinWaveNames=(UseName)
2778
2779        CurOrient="VLp_0"
2780        if (Use2DdataName)
2781                //tempEnd=26-strlen(CurOrient)
2782                //UseName=LoadedFile[0,tempEnd]+"_"+CurOrient
2783                UseName=NI1A_TrimCleanDataName(UserSampleNameGlobal, CurOrient)+"_"+CurOrient
2784        elseif(strlen(UserFileName)<1)  //user did not set the file name
2785                if(cmpstr(TempOutputDatanameUserFor,LoadedFile)==0 && strlen(TempOutputDataname)>0)             //this file output was already asked for user
2786                                LocalUserFileName = TempOutputDataname
2787                else
2788                                abort  "could not figure out the names"
2789                endif
2790                //UseName=LocalUserFileName[0,18]+"_"+CurOrient
2791                UseName=NI1A_TrimCleanDataName(LocalUserFileName, CurOrient)+"_"+CurOrient
2792        else
2793                //UseName=UserFileName[0,18]+"_"+CurOrient
2794                UseName=NI1A_TrimCleanDataName(UserFileName, CurOrient)+"_"+CurOrient
2795        endif
2796        //UseName=cleanupName(UseName, 1 )
2797        String LIneProfFolder="root:SAXS:"+possiblyQuoteName(UseName)
2798        String LineProfWaveNames=(UseName)
2799
2800        CurOrient="u"
2801        if (Use2DdataName)
2802                //tempEnd=26-strlen(CurOrient)
2803                //UseName=LoadedFile[0,tempEnd]+"_"+CurOrient
2804                UseName=NI1A_TrimCleanDataName(UserSampleNameGlobal, CurOrient)+"_"+CurOrient
2805        elseif(strlen(UserFileName)<1)  //user did nto set the file name
2806                if(cmpstr(TempOutputDatanameUserFor,LoadedFile)==0 && strlen(TempOutputDataname)>0)             //this file output was already asked for user
2807                                LocalUserFileName = TempOutputDataname
2808                else
2809                                abort  "could not figure out the names"
2810                endif
2811                //UseName=LocalUserFileName[0,18]+"_"+CurOrient
2812                UseName=NI1A_TrimCleanDataName(LocalUserFileName, CurOrient)+"_"+CurOrient
2813        else
2814                //UseName=UserFileName[0,18]+"_"+CurOrient
2815                UseName=NI1A_TrimCleanDataName(UserFileName, CurOrient)+"_"+CurOrient
2816        endif
2817        UseName=cleanupName(UseName, 1 )
2818        String SmearedFolder="root:SAXS:"+possiblyQuoteName(UseName)
2819        String SmWaveNames=(UseName)
2820
2821
2822        //print PinFolder+":"+possiblyQuoteName("q_"+PinWaveNames)
2823        //print LineProfFolder+":"+possiblyQuoteName("q_"+LineProfWaveNames)
2824        //print SmearedFolder+":"+possiblyQuoteName("q_"+SmWaveNames)
2825        //link to existing waves now...
2826        Wave LineProfQ= $(LineProfFolder+":"+possiblyQuoteName("q_"+LineProfWaveNames))
2827        Wave LineProfr= $(LineProfFolder+":"+possiblyQuoteName("r_"+LineProfWaveNames))
2828        Wave LineProfs= $(LineProfFolder+":"+possiblyQuoteName("s_"+LineProfWaveNames))
2829        Wave/Z LineProfw= $(LineProfFolder+":"+possiblyQuoteName("w_"+LineProfWaveNames))
2830        if(!WaveExists(LineProfw))
2831                Duplicate/Free LineProfQ, LineProfw
2832                LineProfw[p]=(LineProfQ[p+1]-LineProfQ[p-1])/2
2833                LineProfw[0]=LineProfQ[1]-LineProfQ[0]
2834        endif
2835
2836        Wave/Z PinProfq= $(PinFolder+":"+possiblyQuoteName("q_"+PinWaveNames))
2837        if(!WaveExists(PinProfq))       //something is worng here...
2838                print "Cannot create smeared data"
2839                return 0
2840        endif
2841        Wave PinProfr= $(PinFolder+":"+possiblyQuoteName("r_"+PinWaveNames))
2842        Wave PinProfs= $(PinFolder+":"+possiblyQuoteName("s_"+PinWaveNames))
2843        Wave PinProfw= $(PinFolder+":"+possiblyQuoteName("w_"+PinWaveNames))
2844
2845        //make new data folder
2846        NewDataFolder/O/S $(SmearedFolder)     
2847        variable LineProfLen, PinProfLen
2848       
2849         findlevel/P/Q LineProfQ, (6*USAXSSlitLength)
2850         LineProflen =round(V_LevelX)
2851         findlevel/P/Q PinProfq, (6*USAXSSlitLength)
2852         PinProfLen = round(V_LevelX)
2853       
2854        Make/O/N=(1) $("q_"+SmWaveNames),$("r_"+SmWaveNames),$("s_"+SmWaveNames),$("w_"+SmWaveNames)
2855       
2856        Duplicate/Free/R=[0,LineProflen-1] LineProfQ, tempLineProfQ
2857        Duplicate/Free/R=[PinProfLen,inf] PinProfq, tempPinProfq
2858        Duplicate/Free/R=[0,LineProflen-1] LineProfr, tempLineProfr
2859        Duplicate/Free/R=[PinProfLen,inf] PinProfr, tempPinProfr
2860        Duplicate/Free/R=[0,LineProflen-1] LineProfs, tempLineProfs
2861        Duplicate/Free/R=[PinProfLen,inf] PinProfs, tempPinProfs
2862        Duplicate/Free/R=[0,LineProflen-1] LineProfw, tempLineProfw
2863        Duplicate/Free/R=[PinProfLen,inf] PinProfw, tempPinProfw
2864
2865        //rebin the high q region
2866//      IR1D_rebinData(tempPinProfr,tempPinProfq,tempPinProfs,100, 1)
2867
2868        //concatenate
2869        Concatenate/O/NP {tempLineProfr, tempPinProfr}, $("r_"+SmWaveNames)
2870        Concatenate/O/NP {tempLineProfQ,tempPinProfq }, $("q_"+SmWaveNames)
2871        Concatenate/O/NP {tempLineProfs, tempPinProfs}, $("s_"+SmWaveNames)
2872        Concatenate/O/NP {tempLineProfw, tempPinProfw}, $("w_"+SmWaveNames)
2873       
2874        Wave NewQ=$("q_"+SmWaveNames)
2875        Wave NewR=$("r_"+SmWaveNames)
2876        Wave NewS=$("s_"+SmWaveNames)
2877        Wave NewW=$("w_"+SmWaveNames)
2878        SVAR DataType = root:Packages:Convert2Dto1D:DataFileExtension
2879        if(stringMatch(DataType,"Nexus"))
2880                //      //add recording of metatdata from Nexus file, if they exist...
2881                SVAR/Z NXMetadataOld = root:Packages:Convert2Dto1D:NXMetadata
2882                SVAR/Z NXSampleOld = root:Packages:Convert2Dto1D:NXSample
2883                SVAR/Z NXInstrumentOld = root:Packages:Convert2Dto1D:NXInstrument
2884                SVAR/Z NXUserOld = root:Packages:Convert2Dto1D:NXUser
2885                if(SVAR_Exists(NXMetadataOld ))
2886                        string/g NXMetadata
2887                        NXMetadata      =       NXMetadataOld
2888                endif
2889                if(SVAR_Exists(NXSampleOld ))
2890                        string/g NXSample
2891                        NXSample        =       NXSampleOld
2892                endif
2893                if(SVAR_Exists(NXUserOld ))
2894                        string/g NXUser
2895                        NXUser  =       NXUserOld
2896                endif
2897                if(SVAR_Exists(NXInstrumentOld ))
2898                        string/g NXInstrument
2899                        NXInstrument    =       NXInstrumentOld
2900                endif           
2901        endif
2902        //make UserSampleName
2903        string/g UserSampleName= UserSampleNameGlobal+"_u"
2904       
2905
2906        DoWIndow LineuotDisplayPlot_Q
2907        if(V_Flag)
2908                DoWindow/F LineuotDisplayPlot_Q
2909                CheckDisplayed /W=LineuotDisplayPlot_Q  $(NameOfWave(NewR))
2910                if(!V_Flag)
2911                        AppendToGraph /W=LineuotDisplayPlot_Q NewR vs NewQ
2912                endif
2913        endif   
2914        //now delete the data which user did not want...
2915       
2916        if(SAXSDeleteTempPinData)
2917                DoWIndow LineuotDisplayPlot_Q
2918                if(V_Flag)
2919                        CheckDisplayed /W=LineuotDisplayPlot_Q  LineProfr
2920                        if(V_Flag)
2921                                removeFromGraph /W=LineuotDisplayPlot_Q $nameofWave(LineProfr)
2922                        endif
2923                endif
2924                KillDataFolder/Z $LIneProfFolder
2925        endif
2926        DoWIndow LineuotDisplayPlot_Q
2927        if(V_Flag)
2928                DoWindow/F LineuotDisplayPlot_Q
2929                IN2G_LegendTopGrphFldr(str2num(IN2G_LkUpDfltVar("LegendSize")),15,1,0)
2930                IN2G_ColorTopGrphRainbow()
2931        endif   
2932       
2933        SETDATAFOLDER OldDf
2934end
Note: See TracBrowser for help on using the repository browser.