source: trunk/User Procedures/Nika/NI1_MainPanel.ipf @ 1204

Last change on this file since 1204 was 1204, checked in by ilavsky, 7 months ago

Temp fixes for 3D solid and few minor fixes
Nika WAXS - fix reading energy which tripped over energy in title of proposal in metadata.

  • Property svn:executable set to *
File size: 113.6 KB
Line 
1#pragma TextEncoding = "UTF-8"
2#pragma rtGlobals=3             // Use modern global access method.
3#pragma version=2.71
4Constant NI1AversionNumber = 2.72
5
6//*************************************************************************\
7//* Copyright (c) 2005 - 2022, Argonne National Laboratory
8//* This file is distributed subject to a Software License Agreement found
9//* in the file LICENSE that is included with this distribution.
10//*************************************************************************/
11
12//2.72 add Use Transparent Beamstop transmission calculation
13//2.71 add Eiger types
14//2.70 fixed Max number of points selection which did not account for Qmin and Qmax and was therefore producing too many points
15//2.70 added correction for self absorption.
16//2.69 added 12ID-B tiff file which is tiff file combined with metadata log file.
17//2.68 added passing through NXMetadata, NXSample, NXInstrument, NXUser
18//2.67 Fixed case when user set ASCII name for output - apprently this was broken forever...
19//2.66 added UseBatchProcessing to prevent graphs from being displays to speed up processing of large number of images.
20//2.65 fixes for rtGlobal=3, changed Nika GSAS outptu file to xye instead of GSA. xye is better.
21//2.64 removed mar345 and Fit2D support, let's see if someone complains.
22//2.63 added Circular Q axes.
23//2.62 fix bug in Igor 8 which causes hang of the window. Panel made wider.
24//2.61 Fixed normalization bug which causes spike in intensity on our WAXS data (+1 missing Intensity normalization)
25//                      added Reprocess curren data and modified panel as needed.   
26//2.60 added controls for delay between images and for statitics calculation
27//2.59 Modified GUI on main panel to have selection of actions chose with radiobuttons and only one "Process data" button. Cleaner/simple to read interface.
28//2.58 added UserSampleName to each folder. To be used in other functions to avoid 32 characters limit.
29//2.57 changed trimname function to accept maximum possible number of characters allowed with _XYZ orientation. Will vary based on orientation now, _C will allow 25 characters. Others will be shorter.
30//2.56 added resize after recreating of the panels to prior user size.
31//2.55 removed unused functions
32//2.54 Fixed bug where Fit2D loadable types were listed on incompatible versions of MacOS.
33//2.53 Modified Screen Size check to match the needs
34//2.52  added getHelp button calling to www manual
35//2.51 Fixed old bug where sample thickness was not converted to cm before use and used as mm. This causes old experiments with old calibration constants to be wrong.
36//                      old calibration constatnts need to be also scaled by 10 to fix the calibration.
37//                      added a lot of  //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
38//2.49 Nexus input output fixes.
39//2.48 changed pinSAXS to SAXS
40//2.47 changed length of name to 23 characters from 17
41//2.47 fixes for WIndows panel resizing.
42//2.46 added Function for creating user custom data names
43//2.45 added Scaling of panels when zoomed.
44//2.44 added Q smearing controls
45//2.43 added ability to type in Q distance from center for line profile. Is rounded to nearest full pixel.
46//2.42 added GISAXS geomtry variations which require additional panel. version 1.68 of Nika
47//2.41 removed Executes in preparation fro igor 7
48//2.40 fixed Azimuthal profile ASCII data saving feature. Final sorting was incorrect (bug).
49//2.39 added ADSC_A (wavelength in A) as option
50//2.38 moved Dezinering on tab2.
51//2.38 Fixed naming of data when more then one "." is present in the name. It is now allowed on USAXS instrument.
52//2.37 Modifications needed for 2D calibrated data input/output, added Append to Nexus file (2D data for now). 
53//2.36 changed name of main panel function. Added hook functions. Modified code to remove extension from loaded file name for use as name of data later.
54//2.35 fixed /NTHR=1 to /NTHR=0, major changes supporting export of 2D calibrated data
55//2.34 added possibility of importing 2DCalibrated data (EQSANS).
56//2.33 fixed bug in LP profille wave names for notes addition.
57//2.32 adds DataCalibrationStgring to data and GUI
58//2.31 added *.maccd and combined all mpa formats into one loader (*.mpa). Have 4 versions of this format, three I had working versions, csv I did tno. SO the three are loaded, csv gives error.
59//2.30 added move up down controls for small screens
60//2.29 updated graphs so they will not plot same data multiple times and changed where 9IDC data are stored.
61//2.28 fixed bug in line profile ASCII export causing problem with data expoort for line and no names of waves being exported.
62//2.27 adds TPA/XML data file
63//2.26 adds SSRLMatSAXS, fixed export of Ellipse data, fixed debugger in case movie was closed with no frames.
64//2.25 added User defined Min/max and Color scale display
65//2.24 added export as distance from center, requested feature, added chack for updated Nika version for main panel and forced update on user.
66//2.23 support for display line profile with azimuthal angle for ellipse
67//2.22 added option to create Movies from either images (RAW/Corrected) or 1D data lineouts
68//2.21 modified saving data - now when error from ImageLineProfile is NaN, it is replaced by 0 so even data with no error are saved. Also, sorted output waves to start from low q values
69//2.20  fix to automatic conversion for GI_Vertical line which was failing due to typo.
70//2.19 fixes to tilts and some other minor improvements
71//2.18 added BSL changes per JOSH requests
72//2.17 added mutlithread and MatrixOp/NTHR=1 where seemed possible to use multile cores
73//2.16 added license for ANL
74//version 2.0 adds 2D polarization support, ability to display raw or processed data
75//version 2.1 adds GISAXS support       ???
76//version 2.11 adds compoinents for Pilatus loaders.
77//version 2.12 adds ESRF edf file format
78//version 2.13 adds ability to display image with Q axes
79//version 2.14 - added match strings to Sample and empty/dark names
80//version 2.15 adds mpa/UC file type
81//version 2.16 adds FITS file format and ANL license
82
83//*****************************************************************************************************************
84//*****************************************************************************************************************
85//*****************************************************************************************************************
86//****************************************************************************************
87//****************************************************************************************
88//****************************************************************************************
89
90//static Function AfterCompiledHook( )                  //check if all windows are up to date to match their code
91//
92//      //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
93//      //these are tools which have been upgraded to this functionality
94//      //Modeling = LSQF2_MainPanel
95//      string WindowProcNames="NI1A_Convert2Dto1DPanel=NI1A_MainCheckVersion;NI1_CreateBmCntrFieldPanel=NIBC_MainCheckVersion;NEXUS_ConfigurationPanel=Nexus_MainCheckVersion;"
96//     
97//      NI1A_CheckWIndowsProcVersions(WindowProcNames)
98//      IN2G_ResetSizesForALlPanels(WindowProcNames)
99//
100//end
101//****************************************************************************************
102//****************************************************************************************
103
104Function NI1A_CheckWIndowsProcVersions(WindowProcNames)
105        string WindowProcNames
106       
107        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
108        variable i
109        string PanelName
110        String ProcedureName
111        For(i=0;i<ItemsInList(WindowProcNames);i+=1)
112                PanelName = StringFromList(0, StringFromList(i, WindowProcNames, ";")  , "=")
113                ProcedureName = StringFromList(1, StringFromList(i, WindowProcNames, ";")  , "=")
114                DoWIndow $(PanelName)
115                if(V_Flag)
116                        Execute (ProcedureName+"()")
117                endif
118        endfor
119end
120//*****************************************************************************************************************
121//*****************************************************************************************************************
122
123Function NI1A_MainCheckVersion()       
124        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
125        DoWindow NI1A_Convert2Dto1DPanel
126        variable OldNikaVersion
127        if(V_Flag)
128                //calibration warning...
129                GetWindow NI1A_Convert2Dto1DPanel, note
130                OldNikaVersion = NumberbyKey("NikaProcVersion",S_value)
131                if(OldNikaVersion<2.51)
132                        DoAlert/T="Important warning if you use absolutely calibrated data" 0, "Nika Version 1.75 corrected bug where Sample thickness for earlier versions was not converted to cm before use. You are using Nika setup created on old experiment, your calibration constant may need to be changed, see history for details. "
133                        string tempStr="*****    Important warning if you use absolutely calibrated data.   *******\r"
134                        tempStr +="Nika Version 1.75 corrected bug where Sample thickness for earlier versions was not converted to cm before use.\r"
135                        tempStr +="This typically canceled out during calibration standard data reduction as standard thickness was similary used as mm and the bug cancelled out.\r"
136                        tempStr +="But, you are using old experiment created on old Nika version, existing calibration constant may now need to be changed by factor of 10 to correct for this.\r"
137                        tempStr +="*****   Please, revise and double-check your calibration carefully!!!   ******\r"
138                        print tempStr
139                endif
140                if(!NI1_CheckPanelVersionNumber("NI1A_Convert2Dto1DPanel", NI1AversionNumber))
141                        DoAlert /T="The Nika main panel was created by incorrect version of Nika " 1, "Nika needs to be restarted to work properly. Restart now?"
142                        if(V_flag==1)
143                                NI1A_Convert2Dto1DMainPanel()
144                        else            //at least reinitialize the variables so we avoid major crashes...
145                                NI1A_Initialize2Dto1DConversion()
146                        endif
147                endif
148        endif
149end
150//***********************************************************
151//***********************************************************
152//***********************************************************
153Function NI1_UpdatePanelVersionNumber(panelName, CurentProcVersion)
154        string panelName
155        variable CurentProcVersion
156        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
157        DoWIndow $panelName
158        if(V_Flag)
159                GetWindow  $(panelName) note
160                SetWindow $(panelName), note=S_Value+"NikaProcVersion:"+num2str(CurentProcVersion)+";"
161                IN2G_AddResizeInformationToPanel(panelName)
162//              IN2G_PanelAppendSizeRecordNote(panelName)
163//              SetWindow $panelName,hook(ResizePanelControls)=IN2G_PanelResizePanelSize
164//              IN2G_ResetPanelSize(panelName,1)
165//              STRUCT WMWinHookStruct s
166//              s.eventcode=6
167//              s.winName=panelName
168//              IN2G_PanelResizePanelSize(s)
169                //print "Done resizing"
170        endif
171end
172
173//***********************************************************
174//***********************************************************
175Function NI1_CheckPanelVersionNumber(panelName, CurentProcVersion)
176        string panelName
177        variable CurentProcVersion
178
179        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
180        DoWIndow $panelName
181        if(V_Flag)     
182                GetWindow $(panelName), note
183                if(stringmatch(stringbyKey("NikaProcVersion",S_value),num2str(CurentProcVersion))) //matches
184                        return 1
185                else
186                        return 0
187                endif
188        else
189                return 1
190        endif
191end
192 
193//***********************************************************
194//***********************************************************
195//***********************************************************
196
197//*******************************************************************************************************************************************
198//*******************************************************************************************************************************************
199//*******************************************************************************************************************************************
200//*******************************************************************************************************************************************
201//*******************************************************************************************************************************************
202//*******************************************************************************************************************************************
203Function NI1A_Convert2Dto1DMainPanel()
204       
205        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
206        //first initialize
207        NI1A_Initialize2Dto1DConversion()
208        IN2G_CheckScreenSize("height",740)
209        KillWIndow/Z NI1A_Convert2Dto1DPanel
210        NI1A_Convert2Dto1DPanelFnct()
211        NI1A_TabProc("nothing",0)
212        NI1_UpdatePanelVersionNumber("NI1A_Convert2Dto1DPanel", NI1AversionNumber)
213end
214
215//*******************************************************************************************************************************************
216//*******************************************************************************************************************************************
217//*******************************************************************************************************************************************
218//*******************************************************************************************************************************************
219//*******************************************************************************************************************************************
220//*******************************************************************************************************************************************
221 
222Function NI1A_Initialize2Dto1DConversion()
223
224        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
225        string OldDf=GetDataFolder(1)
226        variable FirstRun
227        if(!DataFolderExists("root:Packages:Convert2Dto1D"))
228                FirstRun=1
229        endif
230       
231        NewDataFolder/O root:Packages
232        NewDataFolder/O/S root:Packages:Convert2Dto1D
233
234        //internal loaders
235        string/g ListOfKnownExtensions=".tif;GeneralBinary;Pilatus/Eiger;Nexus;BrukerCCD;MarCCD;mpa;mp/bin;BSRC/Gold;12IDB_tif;DND/txt;RIGK/Raxis;ADSC;ADSC_A;WinView spe (Princeton);ASCII;ibw;BSL/SAXS;BSL/WAXS;ascii512x512;ascii128x128;ESRFedf;"
236        ListOfKnownExtensions+="SSRLMatSAXS;TPA/XML;Fuji/img;mpa/UC;FITS;.hdf;GE binary;---;"//mpa/bin;mpa/asc;mp/bin;mp/asc
237//#if(Exists("ccp4unpack"))     
238//      ListOfKnownExtensions+="MarIP/xop;"
239//#endif
240        //add Fit2D known types of PC
241        //tif                                   tif file
242        //GeneralBinary         configurable binary loader using GBLoadWave
243        //Pilatus                               readers for various Pilatus files. tiff and edf tested, for now 100k Pilatus only.
244        //BrukerCCD                     bruker SMART software for CCD
245        //mpa                           The software is  MPA-NT (or just MPANT),  version 1.48.
246                                                //It is from FAST ComTec, a German company that supplies multi-channel, multiparameter data collection and analysis tools.
247                                                //The hardware I am using is the MPA-3 Dual-parameter multichannel analyzer (from FAST ComTec).
248                                                //That hardware provides the interface to multiwire 2D gas-filled X-ray detector from Molecular Metrology (recently purchased by Rigaku/Osmic).
249        //mp/bin                                mp binary format. for software producing mpa files above, removed
250        //mp/asc                                mp ascii format, same as above, removed
251        //BSRC/Gold                     BESSERC 1536x1536 Gold detector binary format. It has header and 16 bit binary data
252        //ASCII                                 ASCII data matrix...
253        //      note, if the ASCII data matrix has extension mtx, then will try to find same file with extension prn and read header info from there...
254//      variable OSXVersion = str2num(StringFromList(0, StringByKey("OSVERSION",IgorInfo(3),":",";"),".")+"."+StringFromList(1, StringByKey("OSVERSION",IgorInfo(3),":",";"),"."))
255//      if(cmpstr(IgorInfo(2),"Windows")==0 || (OSXVersion>10.2 && OSXVersion<10.5))
256//              ListOfKnownExtensions+="MarIP/Fit2d;ADSC/Fit2D;Bruker/Fit2D;BSL/Fit2D;Diffract/Fit2D;DIP2000/Fit2D;"           
257//              ListOfKnownExtensions+="ESRF/Fit2d;Fit2D/Fi2tD;BAS/Fit2D;GAS/Fit2D;HAMA/Fit2D;IMGQ/Fit2D;"             
258//              ListOfKnownExtensions+="KLORA/Fit2d;MarPck/Fi2tD;PDS/Fit2D;PHOTOM/Fit2D;PMC/Fit2D;PRINC/Fit2D;RIGK/Fit2D;"             
259//      endif
260//      ADSC            ADSC Detector Format : Keyword-value header and binary data
261//      Bruker          Bruker format : Bruker area detector frame data format
262//      BSL                     BSL format : Daresbury SAXS format, based on Hmaburg format
263//      Diffract                Compressed diffraction data : Compressed diffraction data
264//      DIP2000         DIP-2000 (Mac science) : 2500*2500 Integer*2 special format
265//      ESRF            ESRF Data format : ESRF binary, self describing format
266//      Fit2D           Fit2D standard format: Self describing readable binary
267//      BAS             FUJI BAS-2000 : Fuji image plate scanners (aslo BAS-1500)
268//      GAS             GAS 2-D Detector (ESRF) : Raw format used on the beam-lines
269//      HAMA            HAMAMATSU PHOTONICS : C4880 CCD detector format
270//      IMGQ            IMAGEQUANT : Imagequant TIFF based format (molecular dynamics)
271//      KLORA           KLORA : Simplified sub-set of "EDF" written by Jorg Klora
272//      MarIP           MAR RESEARCH FORMAT : "image" format for on-line IP systems
273//      MarPck          MAR-PCK FORMAT : Compressed old Mar format
274//      MarIP           NEW MAR CODE : Same as MAR RESEARCH FORMAT
275//      PDS             PDS FORMAT : Powder diffraction standard format file
276//      PHOTOM          PHOTOMETRICS CCD FORMAT : X-ray image intensifier system
277//      PMC             PMC Format : Photometrics Compressed XRII/CCD data
278//      PRINC           PRINCETON CCD FORMAT :X-ray image intensifier system
279//      RIGK            RIGAKU R-AXIS : Riguka image plate scanner format
280
281        //Calibrated data In and Out
282        string/g ListOfKnownCalibExtensions="canSAS/Nexus;EQSANS400x400;NIST_DAT_128x128;"
283        string/g ListOfOutCalibExtensions="canSAS/Nexus;EQSANS400x400;"
284
285        string/g ListOfVariables
286        string/g ListOfStrings
287       
288        //here define the lists of variables and strings needed, separate names by ;...
289       
290        ListOfVariables="BeamCenterX;BeamCenterY;QvectorNumberPoints;QvectorMaxNumPnts;QbinningLogarithmic;SampleToCCDDistance;Wavelength;"
291        ListOfVariables+="PixelSizeX;PixelSizeY;StartDataRangeNumber;EndDataRangeNumber;XrayEnergy;HorizontalTilt;VerticalTilt;AzimuthalTilt;"
292        ListOfVariables+="BeamSizeX;BeamSizeY;"
293        ListOfVariables+="UseBatchProcessing;"
294        ListOfVariables+="DelayBetweenImages;CalculateStatistics;"
295        ListOfVariables+="SampleThickness;SampleTransmission;UseI0ToCalibrate;SampleI0;EmptyI0;"
296        ListOfVariables+="UseSampleThickness;UseSampleTransmission;UseI0ToCalibrate;UseSampleI0;UseEmptyI0;CorrectSelfAbsorption;"
297        ListOfVariables+="UseCorrectionFactor;UseMask;UseDarkField;UseEmptyField;UseSubtractFixedOffset;SubtractFixedOffset;UseSolidAngle;"
298        ListOfVariables+="UseSampleMeasTime;UseEmptyMeasTime;UseDarkMeasTime;UsePixelSensitivity;UseMonitorForEF;"
299        ListOfVariables+="SampleMeasurementTime;BackgroundMeasTime;EmptyMeasurementTime;"
300        ListOfVariables+="CorrectionFactor;DezingerRatio;DezingerCCDData;DezingerEmpty;DezingerDarkField;DezingerHowManyTimes;"
301        ListOfVariables+="DoCircularAverage;StoreDataInIgor;ExportDataOutOfIgor;Use2DdataName;DisplayDataAfterProcessing;"
302        ListOfVariables+="DoSectorAverages;NumberOfSectors;SectorsStartAngle;SectorsHalfWidth;SectorsStepInAngle;"
303        ListOfVariables+="ImageRangeMin;ImageRangeMax;ImageRangeMinLimit;ImageRangeMaxLimit;ImageDisplayLogScaled;UserImageRangeMin;UserImageRangeMax;UseUserDefMinMax;"
304        ListOfVariables+="A2DImageRangeMin;A2DImageRangeMax;A2DImageRangeMinLimit;A2DImageRangeMaxLimit;A2DLineoutDisplayLogInt;A2DmaskImage;"
305        ListOfVariables+="RemoveFirstNColumns;RemoveLastNColumns;RemoveFirstNRows;RemoveLastNRows;MaskDisplayLogImage;"
306        ListOfVariables+="MaskOffLowIntPoints;LowIntToMaskOff;FixBackgroundOversubtraction;"
307        ListOfVariables+="OverwriteDataIfExists;SectorsNumSect;SectorsSectWidth;SectorsGraphStartAngle;SectorsGraphEndAngle;SectorsUseRAWData;SectorsUseCorrData;"
308        ListOfVariables+="DisplayBeamCenterIn2DGraph;DisplaySectorsIn2DGraph;"
309        ListOfVariables+="UseQvector;UseTheta;UseDspacing;UseDistanceFromCenter;"
310        ListOfVariables+="UserThetaMin;UserThetaMax;UserDMin;UserDMax;UserQMin;UserQMax;ThetaSameNumPoints;"
311        ListOfVariables+="DoGeometryCorrection;DoPolarizationCorrection;Use2DPolarizationCor;Use1DPolarizationCor;StartAngle2DPolCor;InvertImages;SkipBadFiles;MaxIntForBadFile;"
312        ListOfVariables+="DisplayRaw2DData;DisplayProcessed2DData;TwoDPolarizFract;"
313
314        ListOfVariables+="Process_DisplayAve;Process_Individually;Process_Average;Process_AveNFiles;Process_ReprocessExisting;"
315        //and now the function calls variables
316        ListOfVariables+="UseSampleThicknFnct;UseSampleTransmFnct;UseTranspBeamstop;UseSampleMonitorFnct;UseSampleCorrectFnct;UseSampleMeasTimeFnct;UseSampleNameFnct;"
317        ListOfVariables+="UseEmptyTimeFnct;UseBackgTimeFnct;UseEmptyMonitorFnct;"
318        ListOfVariables+="ProcessNImagesAtTime;SaveGSASdata;FIlesSortOrder;TranspBSRadius;"
319        //errors control
320        ListOfVariables+="ErrorCalculationsUseOld;ErrorCalculationsUseStdDev;ErrorCalculationsUseSEM;"
321        //2DCalibratedDataInput & output
322        ListOfVariables+="UseCalib2DData;ExpCalib2DData;RebinCalib2DData;InclMaskCalib2DData;UseQxyCalib2DData;ReverseBinnedData;AppendToNexusFile;"
323
324        ListOfVariables+="UseLineProfile;UseSectors;"
325        ListOfVariables+="LineProf_UseBothHalfs;LineProf_DistanceFromCenter;LineProf_Width;LineProf_DistanceQ;LineProf_WidthQ;"
326        ListOfVariables+="LineProfileDisplayWithQ;LineProfileDisplayWithQy;LineProfileDisplayWithQz;LineProfileDisplayWithAzA;LineProfileDisplayLogX;LineProfileDisplayLogY;"
327        ListOfVariables+="LineProfileUseRAW;LineProfileUseCorrData;LineProf_EllipseAR;LineProf_LineAzAngle;LineProf_GIIncAngle;GISAXS_ycenterReflectedbeam;"
328        ListOfVariables+="DisplayQValsOnImage;DisplayQvalsWIthGridsOnImg;DisplayColorScale;DisplayQCirclesOnImage;"     
329        //movie creation controls
330        ListOfVariables+="Movie_Use2DRAWdata;Movie_Use2DProcesseddata;Movie_Use1DData;Movie_AppendFileName;Movie_AppendAutomatically;Movie_DisplayLogInt;Movie_FrameRate;Movie_FileOpened;"
331        ListOfVariables+="Movie_UseMain2DImage;Movie_UseUserHookFnct;"
332        //Behavior controls
333        ListOfVariables+="TrimFrontOfName;TrimEndOfName;ScaleImageBy;"  //DoubleClickConverts
334
335        ListOfStrings="CurrentInstrumentGeometry;DataFileType;DataFileExtension;MaskFileExtension;BlankFileExtension;CurrentMaskFileName;DataCalibrationString;"
336        ListOfStrings+="CurrentEmptyName;CurrentDarkFieldName;CalibrationFormula;CurrentPixSensFile;OutputDataName;UserSampleName;"
337        ListOfStrings+="CCDDataPath;CCDfileName;CCDFileExtension;FileNameToLoad;ColorTableName;CurrentMaskFileName;ExportMaskFileName;ColorTableList;"
338        ListOfStrings+="ConfigurationDataPath;LastLoadedConfigFile;ConfFileUserComment;ConfFileUserName;"
339        ListOfStrings+="TempOutputDataname;TempOutputDatanameUserFor;"
340        ListOfStrings+="Fit2Dlocation;MainPathInfoStr;"
341        ListOfStrings+="SampleThicknFnct;SampleTransmFnct;SampleMonitorFnct;SampleCorrectFnct;SampleMeasTimeFnct;SampleNameFnct;"
342        ListOfStrings+="EmptyTimeFnct;BackgTimeFnct;EmptyMonitorFnct;"
343        ListOfStrings+="LineProf_CurveType;LineProf_KnownCurveTypes;RemoveStringFromName;"
344        ListOfStrings+="SampleNameMatchStr;EmptyDarkNameMatchStr;Movie_FileName;Movie_Last1DdataSet;"
345        //2DCalibratedDataInput & output
346        ListOfStrings+="RebinCalib2DDataToPnts;Calib2DDataOutputFormat;"
347
348        //now for General Binary Input
349        ListOfVariables+="NIGBSkipHeaderBytes;NIGBSkipAfterEndTerm;NIGBUseSearchEndTerm;NIGBNumberOfXPoints;NIGBNumberOfYPoints;NIGBSaveHeaderInWaveNote;"
350        ListOfStrings+="NIGBDataType;NIGBSearchEndTermInHeader;NIGBByteOrder;NIGBFloatDataType;"
351        string ListOfStringsGB="NIGBDataTypeSelection;NIGBByteOrderSelection;"
352        //Pilatus support
353        ListOfVariables+="PilatusReadAuxTxtHeader;PilatusSignedData;"
354        ListOfStrings+="PilatusType;PilatusFileType;PilatusColorDepth;"
355        //ESRF edf support
356        ListOfVariables+="ESRFEdf_ExposureTime;ESRFEdf_Center_1;ESRFEdf_Center_2;ESRFEdf_PSize_1;ESRFEdf_PSize_2;ESRFEdf_SampleDistance;ESRFEdf_SampleThickness;ESRFEdf_WaveLength;ESRFEdf_Title;"
357        ListOfStrings+=""
358       
359        Wave/Z/T ListOfCCDDataInCCDPath
360        if (!WaveExists(ListOfCCDDataInCCDPath))
361                make/O/T/N=0 ListOfCCDDataInCCDPath
362        endif
363        Wave/Z SelectionsofCCDDataInCCDPath
364        if(!WaveExists(SelectionsofCCDDataInCCDPath))
365                make/O/N=0 SelectionsofCCDDataInCCDPath
366        endif
367
368        variable i
369        //and here we create them
370        for(i=0;i<itemsInList(ListOfVariables);i+=1)   
371                IN2G_CreateItem("variable",StringFromList(i,ListOfVariables))
372        endfor         
373                                                                               
374        for(i=0;i<itemsInList(ListOfStrings);i+=1)     
375                IN2G_CreateItem("string",StringFromList(i,ListOfStrings))
376        endfor 
377        for(i=0;i<itemsInList(ListOfStringsGB);i+=1)   
378                IN2G_CreateItem("string",StringFromList(i,ListOfStringsGB))
379        endfor 
380        //and now waves as needed
381        Wave/Z/T ListOf2DSampleData
382        if (!WaveExists(ListOf2DSampleData))
383                make/N=0/T ListOf2DSampleData
384        endif
385        Wave/Z ListOf2DSampleDataNumbers
386        if (!WaveExists(ListOf2DSampleDataNumbers))
387                make/N=0 ListOf2DSampleDataNumbers
388        endif
389        Wave/Z/T ListOf2DMaskData
390        if (!WaveExists(ListOf2DMaskData))
391                make/N=0/T ListOf2DMaskData
392        endif
393        Wave/Z ListOf2DMaskDataNumbers
394        if (!WaveExists(ListOf2DMaskDataNumbers))
395                make/N=0 ListOf2DMaskDataNumbers
396        endif
397        Wave/Z/T ListOf2DEmptyData
398        if (!WaveExists(ListOf2DEmptyData))
399                make/N=0/T ListOf2DEmptyData
400        endif
401        //set starting values
402        SVAR ColorTableList
403        if(strlen(ColorTableList)<1)
404                ColorTableList="Geo32;Geo32_R;Terrain;Terrain_R;Grays;Grays_R;Rainbow;Rainbow_R;YellowHot;YellowHot_R;BlueHot;BlueHot_R;BlueRedGreen;BlueRedGreen_R;RedWhiteBlue;RedWhiteBlue_R;PlanetEarth;PlanetEarth_R;"
405        endif
406       
407
408        SVAR RebinCalib2DDataToPnts
409        if(strlen(RebinCalib2DDataToPnts)<1)
410                RebinCalib2DDataToPnts="100x100"
411        endif
412        SVAR Calib2DDataOutputFormat
413        if(strlen(Calib2DDataOutputFormat)<1)
414                Calib2DDataOutputFormat="CanSAS/Nexus"
415        endif
416
417        SVAR PilatusFileType
418        if(strlen(PilatusFileType)<1)
419                PilatusFileType="tiff"
420        endif
421        SVAR PilatusColorDepth
422        if(strlen(PilatusColorDepth)<1)
423                PilatusColorDepth="32"
424        endif
425        SVAR PilatusType
426        if(strlen(PilatusType)<1)
427                PilatusType="Pilatus100k"
428        endif
429        SVAR NIGBDataTypeSelection
430        if (strlen(NIGBDataTypeSelection)<1)
431                NIGBDataTypeSelection = "Double Float;Single Float;32 bit signed integer;16 bit signed integer;8 bit signed integer;32 bit unsigned integer;16 bit unsigned integer;8 bit unsigned integer;"
432        endif
433        SVAR NIGBDataType
434        if (strlen(NIGBDataType)<1)
435                NIGBDataType = "Double Float"
436        endif
437        SVAR NIGBByteOrderSelection
438        if (strlen(NIGBByteOrderSelection)<1)
439                NIGBByteOrderSelection = "High Byte First;Low Byte First;"
440        endif
441        SVAR NIGBByteOrder
442        if (strlen(NIGBByteOrder)<1)
443                NIGBByteOrder = "Low Byte First"
444        endif
445        SVAR NIGBFloatDataType
446        if (strlen(NIGBFloatDataType)<1)
447                NIGBFloatDataType = "IEEE"
448        endif
449        SVAR NIGBSearchEndTermInHeader
450        if (strlen(NIGBSearchEndTermInHeader)<1)
451                NIGBSearchEndTermInHeader = ""
452        endif
453        NVAR NIGBNumberOfXPoints
454        if ((NIGBNumberOfXPoints)<1)
455                NIGBNumberOfXPoints = 1024
456        endif
457        NVAR NIGBNumberOfYPoints
458        if ((NIGBNumberOfYPoints)<1)
459                NIGBNumberOfYPoints = 1024
460        endif
461        NVAR ScaleImageBy
462        if ((ScaleImageBy)<0.05)
463                ScaleImageBy = 1
464        endif
465
466
467        SVAR DataCalibrationString
468        if(strlen(DataCalibrationString)<3)
469                DataCalibrationString="Arbitrary"
470        endif
471        SVAR DataFileExtension
472        if (strlen(DataFileExtension)<1)
473                DataFileExtension = ".tif"
474        endif
475        SVAR MaskFileExtension
476        if (strlen(MaskFileExtension)<1)
477                MaskFileExtension = ".tif"
478        endif
479        SVAR BlankFileExtension
480        if (strlen(BlankFileExtension)<1)
481                BlankFileExtension = ".tif"
482        endif
483        SVAR ConfigurationDataPath
484        if (strlen(ConfigurationDataPath)<1)
485                ConfigurationDataPath = ""
486        endif
487        SVAR LastLoadedConfigFile
488        if (strlen(LastLoadedConfigFile)<1)
489                LastLoadedConfigFile = ""
490        endif
491        SVAR ConfFileUserComment
492        if (strlen(ConfFileUserComment)<1)
493                ConfFileUserComment = ""
494        endif
495        SVAR ConfFileUserName
496        if (strlen(ConfFileUserName)<1)
497                ConfFileUserName = ""
498        endif
499        //Line profile default settings
500        NVAR UseLineProfile
501        NVAR UseSectors
502        SVAR LineProf_CurveType
503        SVAR LineProf_KnownCurveTypes
504        LineProf_KnownCurveTypes = "---;Vertical line;Horizontal Line;Angle Line;GI_Vertical Line;GI_Horizontal Line;Ellipse;"
505        if(strlen(LineProf_CurveType)<1)
506                LineProf_CurveType="---"
507                UseLineProfile=0
508        endif
509       
510       
511        string ListOfVariablesL="BeamCenterX;BeamCenterY;QvectorNumberPoints;SampleToCCDDistance;"
512        for(i=0;i<itemsInList(ListOfVariablesL);i+=1)   
513                NVAR testVal=$(StringFromList(i,ListOfVariablesL))
514                if(testVal==0)
515                        testVal =500
516                endif
517        endfor         
518        ListOfVariablesL="SectorsNumSect;SectorsGraphEndAngle;"
519        for(i=0;i<itemsInList(ListOfVariablesL);i+=1)   
520                NVAR testVal=$(StringFromList(i,ListOfVariablesL))
521                if(testVal==0)
522                        testVal =360
523                endif
524        endfor         
525        ListOfVariablesL="DezingerRatio;"
526        for(i=0;i<itemsInList(ListOfVariablesL);i+=1)   
527                NVAR testVal=$(StringFromList(i,ListOfVariablesL))
528                if(testVal==0)
529                        testVal =1.5
530                endif
531        endfor         
532        ListOfVariablesL="Wavelength;"
533        if(FirstRun)
534                ListOfVariablesL+="QbinningLogarithmic;"
535        endif
536        ListOfVariablesL+="PixelSizeX;PixelSizeY;StartDataRangeNumber;EndDataRangeNumber;TwoDPolarizFract;"
537        ListOfVariablesL+="SampleThickness;SampleTransmission;SampleI0;EmptyI0;DezingerHowManyTimes;"
538        ListOfVariablesL+="SampleMeasurementTime;BackgroundMeasTime;EmptyMeasurementTime;"
539        ListOfVariablesL+="CorrectionFactor;SectorsSectWidth;NIGBSaveHeaderInWaveNote;ProcessNImagesAtTime;LineProf_EllipseAR;"
540        for(i=0;i<itemsInList(ListOfVariablesL);i+=1)   
541                NVAR testVal=$(StringFromList(i,ListOfVariablesL))
542                if(testVal==0)
543                        testVal =1
544                endif
545        endfor         
546        ListOfVariablesL="SectorsHalfWidth;SectorsStepInAngle;Movie_FrameRate;"
547        for(i=0;i<itemsInList(ListOfVariablesL);i+=1)   
548                NVAR testVal=$(StringFromList(i,ListOfVariablesL))
549                if(testVal==0)
550                        testVal =10
551                endif
552        endfor         
553        ListOfVariablesL="NumberOfSectors;"
554        for(i=0;i<itemsInList(ListOfVariablesL);i+=1)   
555                NVAR testVal=$(StringFromList(i,ListOfVariablesL))
556                if(testVal==0)
557                        testVal =36
558                endif
559        endfor         
560        NVAR Wavelength= root:Packages:Convert2Dto1D:Wavelength
561        NVAR XrayEnergy= root:Packages:Convert2Dto1D:XrayEnergy
562        XrayEnergy = 12.398424437/Wavelength
563
564        ListOfVariablesL="UseI0ToCalibrate;DezingerCCDData;DezingerEmpty;DezingerDarkField;HorizontalTilt;VerticalTilt;"
565        for(i=0;i<itemsInList(ListOfVariablesL);i+=1)   
566                NVAR testVal=$(StringFromList(i,ListOfVariablesL))
567                if(testVal==0)
568                        testVal =0
569                endif
570        endfor         
571       
572        NVAR DisplayQValsOnImage
573        NVAR DisplayQvalsWIthGridsOnImg
574        NVAR DisplayQCirclesOnImage
575        if(DisplayQCirclesOnImage+DisplayQValsOnImage+DisplayQvalsWIthGridsOnImg>1)
576                DisplayQValsOnImage = 0
577                DisplayQvalsWIthGridsOnImg = 0
578                DisplayQCirclesOnImage = 0
579        endif
580
581
582        NVAR Process_DisplayAve
583        NVAR Process_Individually
584        NVAR Process_Average
585        NVAR Process_AveNFiles
586        NVAR Process_ReprocessExisting
587        if(     Process_DisplayAve + Process_Individually + Process_Average + Process_AveNFiles + Process_ReprocessExisting !=1)
588                Process_DisplayAve = 1
589                Process_Individually = 0
590                Process_Average = 0
591                Process_AveNFiles = 0
592                Process_ReprocessExisting = 0
593        endif
594
595        NVAR TrimEndOfName=root:Packages:Convert2Dto1D:TrimEndOfName
596        NVAR TrimFrontOfName=root:Packages:Convert2Dto1D:TrimFrontOfName
597        if((TrimEndOfName+TrimFrontOfName)!=1)
598                TrimEndOfName = 1
599                TrimFrontOfName=0
600        endif
601        NVAR Use2DdataName=root:Packages:Convert2Dto1D:Use2DdataName
602        NVAR UseSampleNameFnct=root:Packages:Convert2Dto1D:UseSampleNameFnct
603        if((Use2DdataName+UseSampleNameFnct)!=1)
604                Use2DdataName = 1
605                UseSampleNameFnct=0
606        endif
607
608        NVAR ErrorCalculationsUseOld
609        NVAR ErrorCalculationsUseStdDev
610        NVAR ErrorCalculationsUseSEM
611        if(ErrorCalculationsUseOld+ErrorCalculationsUseStdDev+ErrorCalculationsUseSEM!=1)
612                ErrorCalculationsUseOld=0
613                ErrorCalculationsUseStdDev=1
614                ErrorCalculationsUseSEM=0
615                print "Uncertainty calculation method is set to \"Standard deviation\""
616        else
617                if(ErrorCalculationsUseOld)
618                        print "Uncertainty calculation method is set to \"Old method (see manual for description)\""
619                elseif(ErrorCalculationsUseStdDev)
620                        print "Uncertainty calculation method is set to \"Standard deviation (see manual for description)\""
621                else
622                        print "Uncertainty calculation method is set to \"Standard error of mean (see manual for description)\""
623                endif
624        endif
625
626        NVAR LineProfileDisplayWithQ
627        NVAR LineProfileDisplayWithQz
628        NVAR LineProfileDisplayWithQy
629        if(LineProfileDisplayWithQ+LineProfileDisplayWithQz+LineProfileDisplayWithQy!=1)
630                LineProfileDisplayWithQ=1
631                LineProfileDisplayWithQz=0
632                LineProfileDisplayWithQy=0
633        endif
634
635       
636        NVAR UseQvector
637        NVAR UseTheta
638        NVAR UseDspacing
639        NVAR UseDistanceFromCenter
640        if((UseQvector+UseTheta+UseDspacing+UseDistanceFromCenter)!=1)
641                UseQvector=1
642                UseTheta=0
643                UseDspacing=0
644                UseDistanceFromCenter=0
645        endif
646
647        NVAR Use2DPolarizationCor
648        NVAR Use1DPolarizationCor
649        if(Use2DPolarizationCor+Use1DPolarizationCor!=1)
650                Use2DPolarizationCor=0
651                Use1DPolarizationCor=1
652        endif
653
654        NVAR RemoveFirstNColumns
655        NVAR RemoveLastNColumns
656        NVAR RemoveFirstNRows
657        NVAR RemoveLastNRows
658        RemoveFirstNColumns=0
659        RemoveLastNColumns=0
660        RemoveFirstNRows=0
661        RemoveLastNRows=0
662       
663        NVAR UseSampleTransmFnct
664        NVAR UseTranspBeamstop
665        if(UseSampleTransmFnct+UseTranspBeamstop>1)
666                UseSampleTransmFnct=0
667                UseTranspBeamstop=0
668        endif
669       
670        NVAR  DisplayRaw2DData
671        NVAR  DisplayProcessed2DData
672        if(DisplayRaw2DData+DisplayProcessed2DData!=1)
673                DisplayProcessed2DData=0
674                DisplayRaw2DData=1
675        endif
676        SVAR CCDFileExtension
677        if(strlen(CCDFileExtension)<2)
678                CCDFileExtension="????"
679        endif
680        SVAR ColorTableName
681        if(strlen(ColorTableName)<2)
682                ColorTableName="Terrain"
683        endif
684       
685        NVAR SectorsUseRAWData
686        NVAR SectorsUseCorrData
687        if(SectorsUseRAWData+SectorsUseCorrData!=1)
688                SectorsUseRAWData=1
689                SectorsUseCorrData=0
690        endif
691       
692        NVAR LineProfileUseRAW
693        NVAR LineProfileUseCorrData
694        if(LineProfileUseRAW+LineProfileUseCorrData!=1)
695                LineProfileUseRAW=1
696                LineProfileUseCorrData=0
697        endif
698       
699        //BSL files support...
700        //josh add: I added BSL sumoverframes and BSLlog
701        setDataFolder root:Packages
702        NewDataFolder/O/S root:Packages:NI1_BSLFiles
703       
704                variable/g BSLpixels, BSLpixels1, BSLframes, BSLcurrentframe, BSLsumframes, BSLwaxsframes, BSLI1, BSLI2, BSLI1pos, BSLI2pos, BSLwaxschannels, BSLAverage, BSLFoundFrames,BSLfromframe,BSLtoframe,BSLsumseq,BSLGBformat
705                make/o/t/n=10 BSLheadnote
706                make/o/n=(1,5) BSLframelistsequence
707                setdimlabel 1,0,$("Frame Number"),BSLframelistsequence
708                setdimlabel 1,1,$("Exposure Time"),BSLframelistsequence
709                setdimlabel 1,2,$("Sum Sequence"),BSLframelistsequence
710                setdimlabel 1,3,$("Elapsed Time"),BSLframelistsequence
711                setdimlabel 1,4,$("Utility"),BSLframelistsequence
712
713        setDataFOlder oldDf
714        NEXUS_Initialize(0)
715end
716
717
718//*******************************************************************************************************************************************
719//*******************************************************************************************************************************************
720//*******************************************************************************************************************************************
721//*******************************************************************************************************************************************
722//*******************************************************************************************************************************************
723//*******************************************************************************************************************************************
724
725
726Function NI1A_Convert2DTo1D()
727               
728        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
729        string OldDf = GetDataFolder(1)
730        setDataFolder root:Packages:Convert2Dto1D
731
732        NVAR UseSectors=root:Packages:Convert2Dto1D:UseSectors          //this is for Sector analysis. Only if set ot 1, sector analysis is reuired by user...
733        NVAR UseLineProfile=root:Packages:Convert2Dto1D:UseLineProfile          //this is for Sector analysis. Only if set ot 1, sector analysis is reuired by user...
734       
735        string ListOfOrientations=""
736        string CurOrient
737        variable i
738        NVAR DoCircularAverage=root:Packages:Convert2Dto1D:DoCircularAverage
739        NVAR DoSectorAverages=root:Packages:Convert2Dto1D:DoSectorAverages
740        NVAR NumberOfSectors=root:Packages:Convert2Dto1D:NumberOfSectors
741        NVAR SectorsStartAngle=root:Packages:Convert2Dto1D:SectorsStartAngle
742        NVAR SectorsHalfWidth=root:Packages:Convert2Dto1D:SectorsHalfWidth
743        NVAR SectorsStepInAngle=root:Packages:Convert2Dto1D:SectorsStepInAngle
744        NVAR LineProf_DistanceQ=root:Packages:Convert2Dto1D:LineProf_DistanceQ
745        NVAR LineProf_WidthQ=root:Packages:Convert2Dto1D:LineProf_WidthQ
746        NVAR UseBatchProcessing=root:Packages:Convert2Dto1D:UseBatchProcessing
747        SVAR Movie_Last1DdataSet=root:Packages:Convert2Dto1D:Movie_Last1DdataSet
748        string tempListOfProcessedSectors=""
749        variable TempOrientation, TempHalfWidth
750        //let user run some hook function to modify parameters, if needed here.
751#if(exists("NI1_BeforeConvertDataHook")==6)
752        NI1_BeforeConvertDataHook()
753#endif
754                //parameters are set, now process the data as needed..
755       
756        NI1A_Check2DConversionData()            //this should check if input data are OK, stuff any necessary consistency checks here...
757       
758        NI1A_CorrectDataPerUserReq("")          //here we need to do all of the corrections as user selected...
759               
760        NI1A_MovieRecordFrameIfReq(2)           
761       
762        //sector averages are here
763        if(UseSectors)          //this is all needed for sector analysis. Will need to move stuff around for line analysis later.
764       
765                if (DoCircularAverage)
766                        ListOfOrientations+="C;"
767                endif   
768                if (DoSectorAverages)
769                        For(i=0;i<NumberOfSectors;i+=1)
770                                TempOrientation = IN2G_roundDecimalPlaces(SectorsStartAngle+SectorsStepInAngle*i,1)
771                                if(TempOrientation>359)
772                                        do
773                                                TempOrientation = TempOrientation-360
774                                        while(TempOrientation>359)
775                                endif
776                                TempHalfWidth = IN2G_roundDecimalPlaces(SectorsHalfWidth,1)     
777                                ListOfOrientations+=ReplaceString(".",num2str(TempOrientation),"p")+"_"+ReplaceString(".",num2str(TempHalfWidth),"p")+";"
778                        endfor
779                endif   
780                For(i=0;i<ItemsInList(ListOfOrientations);i+=1)
781                        CurOrient = stringFromList(i,ListOfOrientations)
782                        NI1A_FixNumPntsIfNeeded(CurOrient)
783                       
784                        NI1A_CheckGeometryWaves(CurOrient)                      //checks if geometry waves exist and if they are correct, makes them correct if needed
785               
786                        NI1A_AverageDataPerUserReq(CurOrient)
787                       
788                        NI1A_SaveDataPerUserReq(CurOrient)
789                       
790                        tempListOfProcessedSectors+=CurOrient+";"
791                        if(!UseBatchProcessing)
792                                DoUpdate
793                        endif
794                endfor
795        endif
796        //line profile averages are here...
797        if(UseLineProfile)
798                NI1A_LineProf_CreateLP()                //this creates line profile as user set conditions...
799                //note for future. There is a lot of unnecessary calculations here. This could be sped up by better programming.
800                //figure out which Q we analyzed...
801                SVAR LineProf_CurveType=root:Packages:Convert2Dto1D:LineProf_CurveType 
802//              NVAR LineProf_LineAzAngle=root:Packages:Convert2Dto1D:LineProf_LineAzAngle
803                NVAR LineProf_LineAzAngleG =root:Packages:Convert2Dto1D:LineProf_LineAzAngle
804                variable LineProf_LineAzAngle
805                LineProf_LineAzAngle = LineProf_LineAzAngleG>=0 ? LineProf_LineAzAngleG : LineProf_LineAzAngleG+180
806                string tempStr, tempStr1
807                if(stringMatch(LineProf_CurveType,"Horizontal Line"))
808                        tempStr1="HLp_"
809                        sprintf tempStr, "%1.2g" LineProf_DistanceQ
810                elseif(stringMatch(LineProf_CurveType,"GI_Horizontal line"))
811                        tempStr1="GI_HLp_"
812                        sprintf tempStr, "%1.2g" LineProf_DistanceQ
813                elseif(stringMatch(LineProf_CurveType,"GI_Vertical line"))
814                        tempStr1="GI_VLp_"
815                        sprintf tempStr, "%1.2g" LineProf_DistanceQ
816                elseif(stringMatch(LineProf_CurveType,"Vertical Line"))
817                        tempStr1="VLp_"
818                        sprintf tempStr, "%1.2g" LineProf_DistanceQ
819                elseif(stringMatch(LineProf_CurveType,"Ellipse"))
820                        tempStr1="ELp_"
821                        sprintf tempStr, "%1.2g" LineProf_DistanceQ
822                elseif(stringMatch(LineProf_CurveType,"Angle Line"))
823                        tempStr1="ALp_"
824                        sprintf tempStr, "%1.2g" LineProf_LineAzAngle
825                endif
826                NI1A_SaveDataPerUserReq(tempStr1+tempStr)
827               
828                tempListOfProcessedSectors+=tempStr1+tempStr+";"
829                if(!UseBatchProcessing)
830                        doUpdate
831                endif
832        endif
833        //here we will create special waves in case we are using 9IDC SAXS...
834        NI1_9IDCCreateSMRSAXSdata(tempListOfProcessedSectors)
835       
836        setDataFolder OldDf
837end
838
839//*******************************************************************************************************************************************
840//*******************************************************************************************************************************************
841//*******************************************************************************************************************************************
842Function NI1A_FixNumPntsIfNeeded(CurOrient)
843        string CurOrient
844        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
845        //here we fix the num pnts to max number if requested by user
846        string OldDf = GetDataFolder(1)
847        setDataFolder root:Packages:Convert2Dto1D
848       
849        NVAR QvectorNumberPoints=root:Packages:Convert2Dto1D:QvectorNumberPoints
850        NVAR QvectorMaxNumPnts=root:Packages:Convert2Dto1D:QvectorMaxNumPnts
851        NVAR QbinningLogarithmic=root:Packages:Convert2Dto1D:QbinningLogarithmic
852        NVAR Qmin=root:Packages:Convert2Dto1D:UserQMin
853        NVAR Qmax=root:Packages:Convert2Dto1D:UserQMax
854       
855        if(QvectorMaxNumPnts)   //user wants 1 point = 1 pixel (max num points)... Need to fix the num pnts....
856                QbinningLogarithmic=0           //cannot be log binning...
857                //first lets check lookup table, so we do not have to calculate this always
858                Wave/Z MaxNumPntsLookupWv= root:Packages:Convert2Dto1D:MaxNumPntsLookupWv
859                Wave/T/Z MaxNumPntsLookupWvLBL= root:Packages:Convert2Dto1D:MaxNumPntsLookupWvLBL
860                if(!WaveExists(MaxNumPntsLookupWv))
861                        Make /N=0 MaxNumPntsLookupWv
862                        Make/T /N=0 MaxNumPntsLookupWvLBL
863                endif
864                //OK lookup table now exists, next check the wave note to make sure it si up to date
865                string OldNote=note(MaxNumPntsLookupWv)
866                NVAR BeamCenterX=root:Packages:Convert2Dto1D:BeamCenterX
867                NVAR BeamCenterY=root:Packages:Convert2Dto1D:BeamCenterY
868                SVAR CurrentMaskFileName=root:Packages:Convert2Dto1D:CurrentMaskFileName
869                Wave CCDImageToConvert=root:Packages:Convert2Dto1D:CCDImageToConvert
870                NVAR UseMask=root:Packages:Convert2Dto1D:UseMask
871                string OldCntrX, OldCntrY
872                variable MaskNameNotSame, OldUseMask, OldDim0, OldDim1
873                variable OldQmin, OldQmax
874                OldCntrX=StringByKey("BeamCenterX", OldNote  , "=")
875                OldCntrY=StringByKey("BeamCenterY", OldNote  , "=")
876                OldDim0=NumberByKey("WvDimension0", OldNote  , "=")
877                OldDim1=NumberByKey("WvDimension1", OldNote  , "=")
878                OldUseMask=NumberByKey("UseMask", OldNote  , "=")
879                OldQmin=NumberByKey("Qmin", OldNote  , "=")
880                OldQmax=NumberByKey("Qmax", OldNote  , "=")
881                if(UseMask)
882                        MaskNameNotSame= abs(cmpstr(CurrentMaskFileName,stringByKey("MaskName", OldNote,"=")))
883                else
884                        MaskNameNotSame=0
885                endif
886                variable SomeStuffChanged=0
887                SomeStuffChanged = MaskNameNotSame || (OldUseMask!=UseMask) || abs(OldQmin-Qmin)>0.001 || abs(OldQmax-Qmax)>0.001 || numtype(Qmin)!=0 || numtype(Qmax)!=0
888                if(cmpstr(OldCntrX,num2str(BeamCenterX))!=0 || cmpstr(OldCntrY, num2str(BeamCenterY))!=0 || OldDim0!=DimSize(CCDImageToConvert, 0 ) || OldDim1!=DimSize(CCDImageToConvert, 1) || SomeStuffChanged || QvectorNumberPoints<2)
889                        redimension/N=0 MaxNumPntsLookupWv
890                        redimension/N=0 MaxNumPntsLookupWvLBL
891                endif
892                variable i
893                For(i=0;i<numpnts(MaxNumPntsLookupWv);i+=1)
894                        if(cmpstr(MaxNumPntsLookupWvLBL[i],CurOrient)==0)
895                                QvectorNumberPoints=MaxNumPntsLookupWv[i]
896                        //      print "Right number of points found in LUT"
897                                return 1
898                        endif
899                endfor
900                //OK, if we are here, we did not find the right value in the lookup table
901                //fix the note
902                note /k MaxNumPntsLookupWv
903                string newNote="BeamCenterX="+num2str(BeamCenterX)+";"
904                newNote+="BeamCenterY="+num2str(BeamCenterY)+";"
905                newNote+="WvDimension0="+num2str(DimSize(CCDImageToConvert, 0 ))+";"
906                newNote+="WvDimension1="+num2str(DimSize(CCDImageToConvert, 1))+";"
907                newNote+="UseMask="+num2str(UseMask)+";"
908                newNote+="MaskName="+CurrentMaskFileName+";"
909                newNote+="Qmin="+num2str(Qmin)+";"
910                newNote+="Qmax="+num2str(Qmax)+";"
911                note MaxNumPntsLookupWv, newNote
912                //and now find the right number... This is the most difficult part...
913                NVAR PixelSizeX = root:Packages:Convert2Dto1D:PixelSizeX                                                                //in millimeters
914                NVAR PixelSizeY = root:Packages:Convert2Dto1D:PixelSizeY                                                                //in millimeters
915                NVAR HorizontalTilt = root:Packages:Convert2Dto1D:HorizontalTilt                                                                //in degrees
916                NVAR VerticalTilt = root:Packages:Convert2Dto1D:VerticalTilt                                                            //in degrees
917                Wave/Z PixRadius2DWave=root:Packages:Convert2Dto1D:PixRadius2DWave              //note, this is distance in pixles, not in radii
918                if(WaveExists(PixRadius2DWave))
919                        OldNote = note(PixRadius2DWave)
920                        OldCntrX=stringByKey("BeamCenterX",OldNote,"=")
921                        OldCntrY=stringByKey("BeamCenterY",OldNote,"=")
922                        variable OldPixX=numberByKey("PixelSizeX",OldNote,"=")
923                        variable OldPixY=numberByKey("PixelSizeY",OldNote,"=")
924                        //variable OldHorizontalTilt=numberByKey("HorizontalTilt",OldNote,"=")
925                        //variable OldVerticalTilt=numberByKey("VerticalTilt",OldNote,"=")
926                        if(cmpstr(OldCntrX, num2str(BeamCenterX))!=0 || cmpstr(OldCntrY,num2str(BeamCenterY))!=0 || OldPixX!=PixelSizeX || OldPixY!=PixelSizeY)///|| OldHorizontalTilt!=HorizontalTilt || OldVerticalTilt!=VerticalTilt) lets not worry here about the tilt
927                                NI1A_Create2DPixRadiusWave(CCDImageToConvert)
928                                NI1A_Create2DAngleWave(CCDImageToConvert)
929                        endif
930                else
931                        NI1A_Create2DPixRadiusWave(CCDImageToConvert)
932                        NI1A_Create2DAngleWave(CCDImageToConvert)
933                endif
934                //Ok, now the 2DRadiusWave must exist... and be correct.
935
936                wave PixRadius2DWave=root:Packages:Convert2Dto1D:PixRadius2DWave
937                Wave AnglesWave=root:Packages:Convert2Dto1D:AnglesWave
938                NVAR UseMask=root:Packages:Convert2Dto1D:UseMask
939                NVAR DoSectorAverages=root:Packages:Convert2Dto1D:DoSectorAverages
940                variable centerAngleRad, WidthAngleRad, startAngleFIxed, endAgleFixed
941                //apply mask, if selected
942                duplicate/Free PixRadius2DWave, MaskedRadius2DWave
943                redimension/S MaskedRadius2DWave
944                if(UseMask)
945                        wave M_ROIMask=root:Packages:Convert2Dto1D:M_ROIMask
946                        MatrixOp/O MaskedRadius2DWave = PixRadius2DWave * M_ROIMask
947                endif
948                if(cmpstr(CurOrient,"C")!=0)
949                        duplicate/O AnglesWave,tempAnglesMask
950                        centerAngleRad= (pi/180)*str2num(StringFromList(0, CurOrient,  "_"))
951                        WidthAngleRad= (pi/180)*str2num(StringFromList(1, CurOrient,  "_"))
952                       
953                        startAngleFixed = centerAngleRad-WidthAngleRad
954                        endAgleFixed = centerAngleRad+WidthAngleRad
955       
956                        if(startAngleFixed<0)
957                                MultiThread tempAnglesMask = ((AnglesWave[p][q] > (2*pi+startAngleFixed) || AnglesWave[p][q] <endAgleFixed))? 1 : 0
958                        elseif(endAgleFixed>(2*pi))
959                                MultiThread tempAnglesMask = (AnglesWave[p][q] > startAngleFixed || AnglesWave[p][q] <(endAgleFixed-2*pi))? 1 : 0
960                        else
961                                MultiThread tempAnglesMask = (AnglesWave[p][q] > startAngleFixed && AnglesWave[p][q] <endAgleFixed)? 1 : 0
962                        endif
963                       
964                        MatrixOp/O MaskedRadius2DWave = MaskedRadius2DWave * tempAnglesMask
965                        killwaves tempAnglesMask
966                endif
967                //radius data are masked now
968                wavestats/Q MaskedRadius2DWave
969                if(Qmin<1e-10 && Qmax<1e-10)                                                    //this is without Qmin and Qmax set...
970                        QvectorNumberPoints=floor((V_max-V_min))
971                else                                                                                                            //this is when user uses also Qmin and Qmax, need to find how those impact the result
972                        //need to calculate Qmin and Qmax in pixels from center. 
973                        NVAR SampleToCCDDistance=root:Packages:Convert2Dto1D:SampleToCCDDistance                //in millimeters
974                        NVAR Wavelength = root:Packages:Convert2Dto1D:Wavelength                                                        //in A
975                        NVAR PixelSizeX = root:Packages:Convert2Dto1D:PixelSizeX                                                                //in millimeters
976                        NVAR PixelSizeY = root:Packages:Convert2Dto1D:PixelSizeY                                                                //in millimeters
977                        variable Pixmin = SampleToCCDDistance*TAN(2*ASIN(Wavelength*qmin/4/pi))/((PixelSizeX+PixelSizeY)/2)             //approximate distacne, in pixels of Qmin from center
978                        variable Pixmax = SampleToCCDDistance*TAN(2*ASIN(Wavelength*qmax/4/pi))/((PixelSizeX+PixelSizeY)/2)             //approximate distacne, in pixels of Qmax from center
979                        Pixmax = (numtype(Pixmax)==0)? Pixmax : V_max                   //this fixes case when PixMax>0
980                        Pixmax = (Pixmax>1)? Pixmax : V_max                                             //this fixes case when Qmax=0 originaly.
981                        Pixmin = (numtype(Pixmin)==0)? Pixmin : V_min
982                        Pixmin = (Pixmin>1)? Pixmin : V_min
983                        variable RealMin = max(V_min, Pixmin)
984                        variable RealMax = min(V_max,PixMax)
985                        QvectorNumberPoints=ceil((RealMax-RealMin))
986                endif
987                redimension/N=(numpnts(MaxNumPntsLookupWv)+1) MaxNumPntsLookupWvLBL, MaxNumPntsLookupWv
988               
989                MaxNumPntsLookupWvLBL[numpnts(MaxNumPntsLookupWv)-1]= CurOrient
990                MaxNumPntsLookupWv[numpnts(MaxNumPntsLookupWv)-1]= QvectorNumberPoints
991               
992                print "Recalculated the right number of points LUT"
993                //killwaves/Z MaskedRadius2DWave
994
995                return 2
996        endif
997        setDataFolder OldDf
998       
999end
1000
1001//*******************************************************************************************************************************************
1002//*******************************************************************************************************************************************
1003//*******************************************************************************************************************************************
1004
1005Function NI1A_Create2DPixRadiusWave(DataWave)
1006        wave DataWave
1007        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1008        string OldDf=GetDataFolder(1)
1009        setDataFolder root:Packages:Convert2Dto1D
1010       
1011        NVAR SampleToCCDDistance=root:Packages:Convert2Dto1D:SampleToCCDDistance                //in millimeters
1012        NVAR Wavelength = root:Packages:Convert2Dto1D:Wavelength                                                        //in A
1013        NVAR PixelSizeX = root:Packages:Convert2Dto1D:PixelSizeX                                                                //in millimeters
1014        NVAR PixelSizeY = root:Packages:Convert2Dto1D:PixelSizeY                                                                //in millimeters
1015        NVAR beamCenterX=root:Packages:Convert2Dto1D:beamCenterX
1016        NVAR beamCenterY=root:Packages:Convert2Dto1D:beamCenterY
1017        NVAR HorizontalTilt=root:Packages:Convert2Dto1D:HorizontalTilt                                                  //tilt in degrees
1018        NVAR VerticalTilt=root:Packages:Convert2Dto1D:VerticalTilt                                                              //tilt in degrees
1019        NVAR SampleToCCDDistance=root:Packages:Convert2Dto1D:SampleToCCDDistance                //distance to sample in mm
1020
1021        //wavelength=12.398424437/EnergyInKeV
1022        //OK, existing radius wave was not correct or did not exist, make the right one...
1023        print "Creating Pix Radius wave"
1024       
1025        variable XSaDetDitsInPix=SampleToCCDDistance / PixelSizeX
1026        variable YSaDetDitsInPix=SampleToCCDDistance / PixelSizeY
1027        //Create wave for q distribution
1028        Duplicate/O DataWave, PixRadius2DWave
1029        Redimension/S PixRadius2DWave
1030        //PixRadius2DWave = sqrt((cos(HorizontalTilt*pi/180)*(p-BeamCenterX))^2 + (cos(VerticalTilt*pi/180)*(q-BeamCenterY))^2)
1031//      need to use new function... NI1T_TiltedToCorrectedR(TiltedR,SaDetDistance,alpha)
1032//      tilts added again 6/22/2005
1033//      variable tm=ticks
1034//      if(HorizontalTilt!=0 || VerticalTilt!=0)
1035//              PixRadius2DWave = sqrt((NI1T_TiltedToCorrectedR(p-BeamCenterX,XSaDetDitsInPix,HorizontalTilt))^2 + (NI1T_TiltedToCorrectedR(q-BeamCenterY,YSaDetDitsInPix,VerticalTilt))^2)
1036//      else
1037        //Note, I do not think this wave needs to be fixed for tilts. All we use it for is to get max number of pixels for any particular direction...
1038        Multithread     PixRadius2DWave = sqrt((cos(HorizontalTilt*pi/180)*(p-BeamCenterX))^2 + (cos(VerticalTilt*pi/180)*(q-BeamCenterY))^2)
1039//      endif
1040//      print (ticks-tm)/60
1041        if(beamCenterX>0 && beamCenterX<dimsize(PixRadius2DWave,0) && beamCenterY>0 && beamCenterY<dimsize(PixRadius2DWave,1))
1042                PixRadius2DWave[beamCenterX][beamCenterY] = NaN
1043        endif
1044        //record for which geometry this Radius vector wave was created
1045        string NoteStr
1046        NoteStr = note(DataWave)
1047        NoteStr+="BeamCenterX="+num2str(BeamCenterX)+";"
1048        NoteStr+="BeamCenterY="+num2str(BeamCenterY)+";"
1049        NoteStr+="PixelSizeX="+num2str(PixelSizeX)+";"
1050        NoteStr+="PixelSizeY="+num2str(PixelSizeY)+";"
1051        NoteStr+="HorizontalTilt="+num2str(HorizontalTilt)+";"
1052        NoteStr+="VerticalTilt="+num2str(VerticalTilt)+";"
1053        note PixRadius2DWave, NoteStr
1054        setDataFolder OldDf
1055end
1056
1057//*******************************************************************************************************************************************
1058//*******************************************************************************************************************************************
1059//*******************************************************************************************************************************************
1060//following code added 6 22 2005 to finish the tilts...
1061
1062Function NI1T_TiltedToCorrectedR(TiltedR,SaDetDistance,alpha)                   
1063        variable TiltedR,SaDetDistance,alpha
1064        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1065        //this function returns distance from beam center corrected for the effect of tilt
1066        //Definitions:
1067        //TiltedR is measured distance on detector (in same units as SaDetDistance) in either x or y directions.
1068        //      Note, it is positive if the measured x is larger than x of beamstop (or same for y)
1069        //SaDetDistance is distance between the sample and the beam center position on thte detector Use same units as for TiltedR
1070        //alpha is tilt angle in particular plane. It is positive when the detector is tilted forward for X (or y) positive. It is in degrees
1071         variable alphaRad=(alpha*pi/180)
1072        return TiltedR*cos(alphaRad) + TiltedR*sin(alphaRad)*tan(NI1T_CalcThetaForTiltToTheor(TiltedR,SaDetDistance,alphaRad))
1073       
1074end
1075
1076Function NI1T_CalcThetaForTiltToTheor(radius,Distance,alphaRad)
1077                variable radius,Distance,alphaRad
1078                //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")       
1079                variable temp =radius * abs(cos(alphaRad))
1080                temp=temp/sqrt(distance^2 + radius^2 - 2*Distance*radius*sin(alphaRad))
1081                return asin(temp)
1082end
1083
1084Function NI1T_TheoreticalToTilted(TheoreticalR,SaDetDistance,alpha)
1085                variable TheoreticalR,SaDetDistance,alpha
1086                //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1087                //this function returns distance on tilted detector compared to theoretical distacne in perpendicular plane
1088                //for either x or y directions
1089                //definitions
1090                // TheoreticalR is distance in either positive or negative direction in perpendicular plane to Sa-det line
1091                //      use same units as for SapleToDetector distance
1092                //      it is positive if caclualte x is larger than beam center x (or fsame for y)
1093                //SaDetDistance is distnace between sample and detector...
1094                //alpha is tilt angle. It is positive if for positive TheoreticalR the detector is tilted forward (making the calculated distacne smaller at least for small alphas
1095                //      alpha is in degrees
1096               
1097//              variable theta  =atan(TheoreticalR/SaDetDistance)       //theta in radians
1098//              return TheoreticalR * cos(theta) / cos(theta - alpha * pi/180)
1099                //new calculation 12 25 2010, provided by David Ilavsky
1100                variable betaAngle = atan(SaDetDistance/TheoreticalR)
1101                variable alphaRad=alpha/(2*pi)
1102                variable res = sin(pi/2-alphaRad) * TheoreticalR*(sin(betaAngle)/(sin(pi - alphaRad - betaAngle)))
1103                return res
1104end
1105//Function NI1BC_CalculatePathWvs(dspacing, wvX,wvY)
1106//      wave wvX, wvY
1107//      variable dspacing
1108//      //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1109//
1110//      string oldDf=GetDataFOlder(1)
1111//      setDataFolder root:Packages:Convert2Dto1D
1112//
1113//      variable pixelDist
1114//      variable pixelDistXleft, pixelDistXright, pixelDistYtop, pixelDistYbot
1115//      NVAR Wavelength
1116//      NVAR SampleToCCDDistance
1117//      NVAR PixelSizeX
1118//      NVAR PixelSizeY
1119//      NVAR XrayEnergy
1120//      NVAR HorizontalTilt
1121//      NVAR VerticalTilt
1122//      NVAR ycenter=root:Packages:Convert2Dto1D:BeamCenterY
1123//      NVAR xcenter=root:Packages:Convert2Dto1D:BeamCenterX
1124//      //Ok, this should just return simple Bragg law with little trigonometry, NO tilts yet
1125//      variable radX = NI1BC_GetPixelFromDSpacing(dspacing, "X")
1126//      variable radY = NI1BC_GetPixelFromDSpacing(dspacing, "Y")
1127//      pixelDist = SampleToCCDDistance *tan(2* asin( Wavelength /(2* dspacing) )  )
1128////                    pixelDist = NI1T_TheoreticalToTilted(pixelDist,SampleToCCDDistance,HorizontalTilt) / PixelSizeX
1129//      pixelDistXleft = NI1T_TheoreticalToTilted(pixelDist,SampleToCCDDistance,HorizontalTilt) / PixelSizeX
1130//      pixelDistXright = NI1T_TheoreticalToTilted(pixelDist,SampleToCCDDistance,-1*HorizontalTilt) / PixelSizeX
1131//      pixelDistYtop = NI1T_TheoreticalToTilted(pixelDist,SampleToCCDDistance,VerticalTilt) / PixelSizeY
1132//      pixelDistYbot = NI1T_TheoreticalToTilted(pixelDist,SampleToCCDDistance,-1*VerticalTilt) / PixelSizeY
1133//      redimension/N=360 wvX, wvY
1134//      SetScale/I x 0,(2*pi),"", wvX, wvY
1135//      wvX = ((x>=pi/2)&&(x<3*pi/2))? (xcenter+pixelDistXright*cos(x)) : (xcenter+pixelDistXleft*cos(x))
1136//      wvY = ((x>=0)&&(x<pi))? (ycenter+pixelDistYtop*sin(x)) : (ycenter+pixelDistYbot*sin(x))
1137//      setDataFolder OldDf     
1138//end
1139//*******************************************************************************************************************************************
1140//*******************************************************************************************************************************************
1141//*******************************************************************************************************************************************
1142Function NI1A_RemoveInfNaNsFrom10Waves(Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8, wv9, wv10)                                                      //removes NaNs from 3 waves
1143        Wave Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10                                  //assume same number of points in the waves
1144       
1145        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1146        variable i=0, imax=numpnts(Wv1)-1
1147        For(i=imax;i>=0;i-=1)
1148                        if (numtype(Wv1[i])!=0)
1149                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1150                        endif
1151                        if (numtype(Wv2[i])!=0)
1152                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1153                        endif
1154                        if (numtype(Wv3[i])!=0)
1155                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1156                        endif
1157                        if (numtype(Wv4[i])!=0)
1158                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1159                        endif
1160                        if (numtype(Wv5[i])!=0)
1161                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1162                        endif
1163                        if (numtype(Wv6[i])!=0)
1164                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1165                        endif
1166                        if (numtype(Wv7[i])!=0)
1167                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1168                        endif
1169                        if (numtype(Wv8[i])!=0)
1170                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1171                        endif
1172                        if (numtype(Wv9[i])!=0)
1173                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1174                        endif
1175                        if (numtype(Wv10[i])!=0)
1176                                Deletepoints i, 1, Wv1,wv2,wv3,wv4,wv5,wv6,wv7,wv8,wv9, wv10
1177                        endif
1178        endfor
1179end
1180//*******************************************************************************************************************************************
1181//*******************************************************************************************************************************************
1182Function/S NI1A_UserNameStrProto(my2DWave,FileNameString)
1183        wave my2DWave
1184        string FileNameString
1185        return FileNameString[0,17]
1186end
1187//*******************************************************************************************************************************************
1188Function NI1A_SaveDataPerUserReq(CurOrient)
1189        string CurOrient
1190
1191        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1192        string OldDf=getDataFOlder(1)
1193        if(stringmatch(CurOrient, "*Lp*"))
1194                Wave/Z LineProfileIntensity=root:Packages:Convert2Dto1D:LineProfileIntensity
1195                Wave/Z LineProfileError=root:Packages:Convert2Dto1D:LineProfileIntSdev
1196                Wave/Z LineProfileQ=root:Packages:Convert2Dto1D:LineProfileQvalues
1197                Wave/Z LineProfileQy=root:Packages:Convert2Dto1D:LineProfileQy
1198                Wave/Z LineProfileQx=root:Packages:Convert2Dto1D:LineProfileQx
1199                Wave/Z LineProfileAzAvalues = root:Packages:Convert2Dto1D:LineProfileAzAvalues
1200                Wave/Z LineProfileYValsPix=root:Packages:Convert2Dto1D:LineProfileYValsPix
1201                Wave/Z LineProfileQz=root:Packages:Convert2Dto1D:LineProfileQz
1202                Wave/Z LineProfileZValsPix=root:Packages:Convert2Dto1D:LineProfileZValsPix
1203                WAVE/Z LineProfileDspacingWidth=root:Packages:Convert2Dto1D:LineProfileDspacingWidth
1204                WAVE/Z LineProfileDistacneInmmWidth=root:Packages:Convert2Dto1D:LineProfileDistacneInmmWidth
1205                WAVE/Z LineProfileTwoThetaWidth=root:Packages:Convert2Dto1D:LineProfileTwoThetaWidth
1206                WAVE/Z LineProfiledQvalues=root:Packages:Convert2Dto1D:LineProfiledQvalues
1207                if(!WaveExists(LineProfileQx)||numpnts(LineProfileQx)!=numpnts(LineProfileQy))
1208                        Duplicate/O LineProfileQy, LineProfileQx
1209                endif
1210                Duplicate/O/Free LineProfileZValsPix tempWv1234, tempWv1235,tempWv1236
1211        else
1212                wave/Z Qvector=root:Packages:Convert2Dto1D:Qvector
1213                wave/Z Dspacing=root:Packages:Convert2Dto1D:Dspacing
1214                wave/Z TwoTheta=root:Packages:Convert2Dto1D:TwoTheta
1215                wave/Z TwoThetaWidth=root:Packages:Convert2Dto1D:TwoThetaWidth
1216                wave/Z DspacingWidth=root:Packages:Convert2Dto1D:DspacingWidth
1217                wave/Z DistanceInmm=root:Packages:Convert2Dto1D:DistanceInmm
1218                wave/Z DistacneInmmWidth=root:Packages:Convert2Dto1D:DistacneInmmWidth
1219                wave/Z Intensity=root:Packages:Convert2Dto1D:Intensity
1220                wave/Z Error=root:Packages:Convert2Dto1D:Error
1221                wave/Z Qsmearing=root:Packages:Convert2Dto1D:Qsmearing
1222        endif
1223        Wave CCDImageToConvert=root:Packages:Convert2Dto1D:CCDImageToConvert
1224        SVAR LoadedFile=root:Packages:Convert2Dto1D:FileNameToLoad
1225        SVAR UserSampleName=root:Packages:Convert2Dto1D:UserSampleName
1226        SVAR UserFileName=root:Packages:Convert2Dto1D:OutputDataName
1227        SVAR TempOutputDataname=root:Packages:Convert2Dto1D:TempOutputDataname
1228        SVAR TempOutputDatanameUserFor=root:Packages:Convert2Dto1D:TempOutputDatanameUserFor
1229        NVAR ExportDataOutOfIgor=root:Packages:Convert2Dto1D:ExportDataOutOfIgor
1230        NVAR StoreDataInIgor=root:Packages:Convert2Dto1D:StoreDataInIgor
1231        NVAR Use2DdataName=root:Packages:Convert2Dto1D:Use2DdataName
1232        NVAR DisplayDataAfterProcessing=root:Packages:Convert2Dto1D:DisplayDataAfterProcessing
1233        NVAR OverwriteDataIfExists=root:Packages:Convert2Dto1D:OverwriteDataIfExists
1234        NVAR UseQvector=root:Packages:Convert2Dto1D:UseQvector
1235        NVAR UseTheta=root:Packages:Convert2Dto1D:UseTheta
1236        NVAR UseDspacing=root:Packages:Convert2Dto1D:UseDspacing
1237        NVAR UseDistanceFromCenter=root:Packages:Convert2Dto1D:UseDistanceFromCenter
1238        NVAR UseSampleNameFnct=root:Packages:Convert2Dto1D:UseSampleNameFnct
1239        SVAR functionName = root:Packages:Convert2Dto1D:SampleNameFnct
1240        SVAR UserSampleName=root:Packages:Convert2Dto1D:UserSampleName
1241               
1242        variable ItemsInLst, i
1243        string OldNote
1244        string LocalUserFileName
1245        string UseName
1246        string LongUseName
1247        string OriginalUserName
1248        if (Use2DdataName)
1249                controlinfo/W=NI1A_Convert2Dto1Dpanel Select2DDataType
1250                if(cmpstr(S_Value,"BSL/SAXS")==0)
1251                        NVAR BSLcurrentframe=$("root:Packages:NI1_BSLFiles:BSLcurrentframe")
1252                        NVAR BSLfromframe=$("root:Packages:NI1_BSLFiles:BSLfromframe")
1253                        NVAR BSLtoframe=$("root:Packages:NI1_BSLFiles:BSLtoframe")
1254                        NVAR BSLaverage=$("root:Packages:NI1_BSLFiles:BSLaverage")
1255                        NVAR BSLsumframes=$("root:Packages:NI1_BSLFiles:BSLsumframes")
1256                        NVAR BSLsumseq=$("root:Packages:NI1_BSLFiles:BSLsumseq")
1257
1258                        if(BSLaverage)
1259                                UseName=UserSampleName[0,9]+"_Average_"+CurOrient
1260                        elseif(BSLsumframes||BSLsumseq)
1261                                UseName=UserSampleName[0,9]+"_"+num2str(BSLfromframe)+"-"+num2str(BSLtoframe)+"_"+CurOrient
1262                        else
1263                                UseName=UserSampleName[0,9]+"_"+num2str(BSLcurrentframe)+"_"+CurOrient
1264                        endif
1265                else
1266                        OriginalUserName = UserSampleName+"_"+CurOrient
1267                        UseName=NI1A_TrimCleanDataName(UserSampleName, CurOrient)+"_"+CurOrient
1268                endif
1269        else
1270                if(UseSampleNameFnct)                   //user provided function
1271                        if(exists(functionName)==6)
1272                                string tempStrName
1273                                FUNCREF NI1A_UserNameStrProto UserStrNameFnct=$(functionName)
1274                                tempStrName = UserStrNameFnct(CCDImageToConvert, UserSampleName)
1275                                if(strlen(tempStrName)<1)               // nothing came back?
1276                                        Abort "Name function returned nothing"
1277                                endif
1278                                UserFileName = tempStrName
1279                                OriginalUserName = UserFileName+"_"+CurOrient
1280                                UseName=NI1A_TrimCleanDataName(UserFileName, CurOrient)+"_"+CurOrient           
1281                                //setDataFolder OldDF1
1282                        else
1283                                Abort "No valid function returning string for data name was specified. Check the Function name"
1284                        endif
1285                else
1286                        if(strlen(UserFileName)<1)      //user did not set the file name
1287                                if(cmpstr(TempOutputDatanameUserFor,LoadedFile)==0 && strlen(TempOutputDataname)>0)             //this file output was already asked for user
1288                                        LocalUserFileName = TempOutputDataname
1289                                else
1290                                        Prompt LocalUserFileName, "No name for this sample selected, data name is "+ LoadedFile
1291                                        DoPrompt /HELP="Input name for the data to be stored, max 17 characters" "Input name for the 1D data", LocalUserFileName
1292                                        if(V_Flag)
1293                                                abort
1294                                        endif
1295                                        TempOutputDataname = LocalUserFileName
1296                                        TempOutputDatanameUserFor = UserSampleName
1297                                endif
1298                                OriginalUserName = LocalUserFileName+"_"+CurOrient
1299                                UseName=NI1A_TrimCleanDataName(LocalUserFileName, CurOrient)+"_"+CurOrient
1300                        else
1301                                OriginalUserName = UserFileName+"_"+CurOrient           //this is when user sets manually ASCII data name string.
1302                                UseName=NI1A_TrimCleanDataName(UserFileName, CurOrient)+"_"+CurOrient
1303                        endif
1304                endif
1305        endif
1306        UseName=cleanupName(UseName, 1 )
1307        NVAR/Z USAXSWAXSselector = root:Packages:Convert2Dto1D:USAXSWAXSselector
1308        NVAR/Z USAXSSAXSselector = root:Packages:Convert2Dto1D:USAXSSAXSselector
1309        NVAR/Z USAXSBigSAXSselector = root:Packages:Convert2Dto1D:USAXSBigSAXSselector
1310        NVAR/Z WAXSDexelaSelected = root:Packages:Convert2Dto1D:USAXSWAXSDexselector
1311        SVAR DataType = root:Packages:Convert2Dto1D:DataFileExtension
1312        String DataFolderNameL
1313        if(NVAR_Exists(USAXSWAXSselector))
1314                if(USAXSWAXSselector)
1315                        DataFolderNameL = "root:WAXS"
1316                        LongUseName="root:WAXS:"+possiblyQuoteName(UseName)
1317                elseif(WAXSDexelaSelected)
1318                        DataFolderNameL = "root:WAXS"
1319                        LongUseName="root:WAXS:"+possiblyQuoteName(UseName)
1320                else  //USAXSSAXSselector
1321                        DataFolderNameL = "root:SAXS"
1322                        LongUseName="root:SAXS:"+possiblyQuoteName(UseName)             
1323                endif
1324        else
1325                DataFolderNameL = "root:SAS"
1326                LongUseName="root:SAS:"+possiblyQuoteName(UseName)
1327        endif
1328        //split for code for line profile and sectors...
1329        if(stringmatch(CurOrient, "*LP*"))              //Line profile code goes here...***************
1330                //this seems to fail in cases when too much of the detector is covered by NaNs (masked).
1331                //Image line profile is giving NaNs as Std deviation...
1332                //we need to "fix" that by not removing points with error of NaN, just replacing it with error 0.
1333                LineProfileError = (numtype(LineProfileError[p])==0) ? LineProfileError[p] : 0
1334                //OK, now if the error was NaN, it is 0.       
1335                NI1A_RemoveInfNaNsFrom10Waves(LineProfileIntensity,LineProfileError,LineProfileQ,LineProfileQy,LineProfileYValsPix,LineProfileQz,LineProfileQx,LineProfiledQvalues,tempWv1235,tempWv1236 )     
1336                SVAR LineProf_CurveType=root:Packages:Convert2Dto1D:LineProf_CurveType 
1337                if(StoreDataInIgor)
1338                                NewDataFolder/O/S $(DataFolderNameL)
1339                                if(DataFolderExists(LongUseName) && !OverwriteDataIfExists)
1340                                        DoALert 1, "This data folder exists, overwrite?"
1341                                        if (V_Flag==2)
1342                                                Abort
1343                                        endif
1344                                endif
1345                                NewDataFolder/S/O $(LongUseName)
1346                                string/g UserSampleName=        OriginalUserName
1347                                        //print possiblyquotename("r_"+UseName)
1348                                        Duplicate/O LineProfileIntensity, $("r_"+UseName)
1349                                        Duplicate/O LineProfileQ, $("q_"+UseName)
1350                                        Duplicate/O LineProfileError, $("s_"+UseName)
1351                                        Duplicate/O LineProfiledQvalues, $("w_"+UseName)
1352                                        Duplicate/O LineProfileQy, $("qy_"+UseName)
1353                                        Duplicate/O LineProfileQz, $("qz_"+UseName)     
1354                                        Duplicate/O  LineProfileAzAvalues , $("az_"+UseName)
1355                                        if(stringmatch(LineProf_CurveType, "GI*"))
1356                                                Duplicate/O LineProfileQx, $("qx_"+UseName)     
1357                                        endif           
1358                                        //and resort for users so these are reliably acording to Q values
1359                                        Wave wv1= $("r_"+UseName)
1360                                        Wave wv2= $("q_"+UseName)
1361                                        Wave wv3= $("s_"+UseName)
1362                                        Wave wv4= $("qz_"+UseName)     
1363                                        Wave wv5= $("qy_"+UseName)
1364                                        Wave wv7= $("az_"+UseName)     
1365                                        note wv2, "Units=1/A;"
1366                                        note wv4, "Units=1/A;"
1367                                        note wv5, "Units=1/A;"
1368                                if(stringmatch(LineProf_CurveType, "GI*"))
1369                                                Wave/Z wv6= $("qx_"+UseName)   
1370                                                note wv6, "Units=1/A;"
1371                                                Sort wv2, wv1, wv2, wv3, wv4, wv5, wv6, wv7
1372                                elseif(stringmatch(LineProf_CurveType, "Ellipse"))
1373                                                Sort wv7, wv1, wv2, wv3, wv4, wv5, wv7
1374                                else
1375                                                Sort wv2, wv1, wv2, wv3, wv4, wv5, wv7
1376                                endif           
1377                                //For Nexus, when available store metadata...
1378                                if(stringMatch(DataType,"Nexus"))
1379                                        //      //add recording of metatdata from Nexus file, if they exist...
1380                                        SVAR/Z NXMetadataOld = root:Packages:Convert2Dto1D:NXMetadata
1381                                        SVAR/Z NXSampleOld = root:Packages:Convert2Dto1D:NXSample
1382                                        SVAR/Z NXInstrumentOld = root:Packages:Convert2Dto1D:NXInstrument
1383                                        SVAR/Z NXUserOld = root:Packages:Convert2Dto1D:NXUser
1384                                        if(SVAR_Exists(NXMetadataOld ))
1385                                                string/g NXMetadata
1386                                                NXMetadata      =       NXMetadataOld
1387                                        endif
1388                                        if(SVAR_Exists(NXSampleOld ))
1389                                                string/g NXSample
1390                                                NXSample        =       NXSampleOld
1391                                        endif
1392                                        if(SVAR_Exists(NXUserOld ))
1393                                                string/g NXUser
1394                                                NXUser  =       NXUserOld
1395                                        endif
1396                                        if(SVAR_Exists(NXInstrumentOld ))
1397                                                string/g NXInstrument
1398                                                NXInstrument    =       NXInstrumentOld
1399                                        endif           
1400                                endif
1401                                       
1402                        endif
1403                        if(ExportDataOutOfIgor)
1404                                OldNote=note(LineProfileIntensity)
1405                                ItemsInLst=ItemsInList(OldNote)
1406               
1407                                make/T/O/N=(ItemsInLst) TextWv         
1408                                For (i=0;i<ItemsInLst;i+=1)
1409                                        TextWv[i]="#   "+stringFromList(i,OldNote)
1410                                endfor
1411                                Duplicate/O LineProfileQ, LineProfQ
1412                                Duplicate/O LineProfileQy, LineProfQy
1413                                if(stringmatch(LineProf_CurveType, "GI*"))
1414                                        Duplicate/O LineProfileQx, LineProfQx
1415                                        redimension/S LineProfQx
1416                                endif
1417                                if(stringmatch(LineProf_CurveType, "Ellipse"))
1418                                        Duplicate/O LineProfileAzAvalues, LineProfileAz
1419                                        redimension/S LineProfileAz
1420                                endif
1421                                Duplicate/O LineProfileQz, LineProfQz
1422                                Duplicate/O LineProfileIntensity,LineProfIntensity
1423                                Duplicate/O LineProfileError,LineProfError
1424                                Redimension/S LineProfQ, LineProfQy, LineProfQz, LineProfIntensity, LineProfError
1425                                                               
1426                                Save/G/O/M="\r\n"/P=Convert2Dto1DOutputPath TextWv as (UseName+".dat")
1427                                if(stringmatch(LineProf_CurveType, "GI*"))
1428                                        sort  LineProfQ, LineProfQ, LineProfQx, LineProfQy, LineProfQz, LineProfIntensity, LineProfError
1429                                        Save/A/W/J/M="\r\n"/P=Convert2Dto1DOutputPath LineProfQ, LineProfQx, LineProfQy, LineProfQz, LineProfIntensity, LineProfError as (UseName+".dat")                       
1430                                elseif(stringmatch(LineProf_CurveType, "Ellipse"))
1431                                        sort  LineProfileAz, LineProfileAz, LineProfQ, LineProfQy, LineProfQz, LineProfIntensity, LineProfError
1432                                        Save/A/W/J/M="\r\n"/P=Convert2Dto1DOutputPath LineProfQ, LineProfQy, LineProfQz,LineProfileAz, LineProfIntensity, LineProfError as (UseName+".dat")                     
1433                                else
1434                                        sort  LineProfQ, LineProfQ, LineProfQy, LineProfQz,  LineProfIntensity, LineProfError
1435                                        Save/A/W/J/M="\r\n"/P=Convert2Dto1DOutputPath LineProfQ, LineProfQy, LineProfQz, LineProfIntensity, LineProfError as (UseName+".dat")                   
1436                                endif           
1437                                KillWaves/Z TextWv, LineProfQ, LineProfQy,LineProfQx, LineProfQz,LineProfileAz, LineProfIntensity, LineProfError
1438                        endif
1439                NVAR DisplayData=root:Packages:Convert2Dto1D:DisplayDataAfterProcessing
1440                if(StoreDataInIgor&&DisplayData)
1441                                SVAR LineProf_CurveType = root:Packages:Convert2Dto1D:LineProf_CurveType                       
1442                                if(stringmatch(LineProf_CurveType,"Horizontal Line")||stringmatch(LineProf_CurveType,"GI_Horizontal Line"))
1443                                        Wave Int=$("r_"+UseName)
1444                                        Wave Qvec=$("qy_"+UseName)
1445                                        Wave err=$("s_"+UseName)
1446                                        if(DisplayDataAfterProcessing)
1447                                                NI1A_DisplayLineoutAfterProc(int,Qvec,Err,1,1)
1448                                        endif
1449                                elseif(stringmatch(LineProf_CurveType,"Vertical Line")||stringmatch(LineProf_CurveType,"GI_Vertical Line"))
1450                                        Wave Int=$("r_"+UseName)
1451                                        Wave Qvec=$("qz_"+UseName)
1452                                        Wave err=$("s_"+UseName)
1453                                        if(DisplayDataAfterProcessing)
1454                                                NI1A_DisplayLineoutAfterProc(int,Qvec,Err,1,1)
1455                                        endif
1456                                elseif(stringmatch(LineProf_CurveType,"Ellipse"))
1457                                        Wave Int=$("r_"+UseName)
1458                                        Wave Qvec=$("az_"+UseName)
1459                                        Wave err=$("s_"+UseName)
1460                                        if(DisplayDataAfterProcessing)
1461                                                NI1A_DisplayLineoutAfterProc(int,Qvec,Err,1,4)
1462                                        endif
1463                                else                    //these are the others, use q value and display as log-log.
1464                                        Wave Int=$("r_"+UseName)
1465                                        Wave Qvec=$("q_"+UseName)
1466                                        Wave err=$("s_"+UseName)
1467                                        if(DisplayDataAfterProcessing)
1468                                                NI1A_DisplayLineoutAfterProc(int,Qvec,Err,1,1)
1469                                                endif
1470                                endif
1471                                OldNote=note(Int)
1472                                //DataType = "qrs", "trs", "drs", "distrs"
1473                                Duplicate/Free Qvec, dQvec
1474                                dQvec[1,numpnts(Qvec)-2] = Qvec[p+1]-Qvec[p-1]
1475                                dQvec[0]=dQvec[1]
1476                                dQvec[numpnts(Qvec)-1] = dQvec[numpnts(Qvec)-2]
1477                                NEXUS_WriteNx1DCanSASNika(UserSampleName, Int, Err, Qvec, dQvec, CurOrient, OldNote)
1478                        endif
1479                        KillWaves/Z tempWv1234
1480        else            //sectors profiles goes here. *****************
1481                NI1A_RemoveInfNaNsFrom10Waves(Intensity,Qvector,Error,Qsmearing,TwoTheta,TwoThetaWidth,Dspacing,DspacingWidth,DistanceInmm, DistacneInmmWidth )
1482                if(StoreDataInIgor)
1483                        NewDataFolder/O/S $(DataFolderNameL)
1484                        if(DataFolderExists(LongUseName) && !OverwriteDataIfExists)
1485                                DoALert 1, "This data folder exists, overwrite?"
1486                                if (V_Flag==2)
1487                                        Abort
1488                                endif
1489                        endif
1490                        NewDataFolder/S/O $(LongUseName)
1491                        string/g UserSampleName=        OriginalUserName
1492                        if (UseQvector)
1493                                Duplicate/O Intensity, $("r_"+UseName)
1494                                Duplicate/O Qvector, $("q_"+UseName)
1495                                note $("q_"+UseName), "Units=1/A;"
1496                                Duplicate/O Error, $("s_"+UseName)
1497                                Duplicate/O Qsmearing, $("w_"+UseName)
1498                        elseif(UseTheta)
1499                                Duplicate/O Intensity, $("r_"+UseName)
1500                                Duplicate/O TwoTheta, $("t_"+UseName)
1501                                note $("t_"+UseName), "Units=degree;"
1502                                Duplicate/O Error, $("s_"+UseName)
1503                                Duplicate/O TwoThetaWidth, $("w_"+UseName)
1504                        elseif(UseDspacing)
1505                                Duplicate/O Intensity, $("r_"+UseName)
1506                                Duplicate/O Dspacing, $("d_"+UseName)
1507                                note $("d_"+UseName), "Units=A;"
1508                                Duplicate/O Error, $("s_"+UseName)
1509                                Duplicate/O DspacingWidth, $("w_"+UseName)             
1510                        elseif(UseDistanceFromCenter)
1511                                Duplicate/O Intensity, $("r_"+UseName)
1512                                Duplicate/O DistanceInmm, $("m_"+UseName)
1513                                note $("m_"+UseName), "Units=mm;"
1514                                Duplicate/O Error, $("s_"+UseName)
1515                                Duplicate/O DistacneInmmWidth, $("w_"+UseName)         
1516                        else
1517                                abort "Error - no output type selected"
1518                        endif
1519                        //For Nexus, when available store metadata...
1520                        if(stringMatch(DataType,"Nexus"))
1521                                //      //add recording of metatdata from Nexus file, if they exist...
1522                                SVAR/Z NXMetadataOld = root:Packages:Convert2Dto1D:NXMetadata
1523                                SVAR/Z NXSampleOld = root:Packages:Convert2Dto1D:NXSample
1524                                SVAR/Z NXInstrumentOld = root:Packages:Convert2Dto1D:NXInstrument
1525                                SVAR/Z NXUserOld = root:Packages:Convert2Dto1D:NXUser
1526                                if(SVAR_Exists(NXMetadataOld ))
1527                                        string/g NXMetadata
1528                                        NXMetadata      =       NXMetadataOld
1529                                endif
1530                                if(SVAR_Exists(NXSampleOld ))
1531                                        string/g NXSample
1532                                        NXSample        =       NXSampleOld
1533                                endif
1534                                if(SVAR_Exists(NXUserOld ))
1535                                        string/g NXUser
1536                                        NXUser  =       NXUserOld
1537                                endif
1538                                if(SVAR_Exists(NXInstrumentOld ))
1539                                        string/g NXInstrument
1540                                        NXInstrument    =       NXInstrumentOld
1541                                endif           
1542                        endif
1543                endif
1544                //Convert2Dto1DOutputPath
1545                if(ExportDataOutOfIgor)
1546                        OldNote=note(Intensity)
1547                        ItemsInLst=ItemsInList(OldNote)
1548                        NVAR/Z SaveGSASdata=root:Packages:Convert2Dto1D:SaveGSASdata
1549                        if(!NVAR_Exists(SaveGSASdata))
1550                                variable/g SaveGSASdata=0
1551                        endif
1552                       
1553                        variable refnum
1554                        string FinalOutputName, HeaderSeparator
1555                        HeaderSeparator = "#   "
1556                        make/T/O/N=(ItemsInLst) TextWv         
1557                        if(!(UseTheta && SaveGSASdata))
1558                                For (i=0;i<ItemsInLst;i+=1)
1559                                        TextWv[i]=HeaderSeparator+stringFromList(i,OldNote)
1560                                endfor
1561                                Save/G/O/M="\r\n"/P=Convert2Dto1DOutputPath TextWv as (UseName+".dat")
1562                        endif
1563                        if (UseQvector)
1564                                Save/A/G/M="\r\n"/P=Convert2Dto1DOutputPath Qvector,Intensity,Error,Qsmearing as (UseName+".dat")
1565                        elseif(UseTheta)
1566                                if(SaveGSASdata)
1567                                        //this is old GSA file for GSAS-I, change 2019-05 to xye file format...
1568                                        //                                      //first create header...
1569                                        //                                      Redimension/N=2 TextWV
1570                                        //                                      Duplicate/O TwoTheta, TwoThetaCentidegrees
1571                                        //                                      TwoThetaCentidegrees*=100
1572                                        //                                      //create the text header...
1573                                        //                                      String Header1="BANK 1 "+num2str(numpnts(TwoTheta))+" "+num2str(numpnts(TwoTheta))+" CONS "
1574                                        //                                      variable StarANgle=TwoThetaCentidegrees[0]
1575                                        //                                      variable StepSize=(TwoThetaCentidegrees(numpnts(TwoTheta)-1) - TwoThetaCentidegrees[0])/(numpnts(TwoTheta)-1)
1576                                        //                                      string TempHeader
1577                                        //                                      sprintf TempHeader, "%E %E", StarANgle, StepSize
1578                                        //                                      Header1+=TempHeader
1579                                        //                                      Header1+=" 0 0 FXYE"
1580                                        //                                      TextWv[0]=stringFromList(0,OldNote)+";"+stringFromList(1,OldNote)
1581                                        //                                      TextWV[1]=Header1
1582                                        //                                      Save/G/O/M="\r\n"/P=Convert2Dto1DOutputPath TextWv as (UseName+".GSA")
1583                                        //                                      Save/A=2/G/M="\r\n"/P=Convert2Dto1DOutputPath TwoThetaCentidegrees,Intensity,Error as (UseName+".GSA")
1584                                        //                                      KillWaves TwoThetaCentidegrees
1585                                        FinalOutputName = UseName+".xye"
1586                                        Open/Z=1 /R/P=Convert2Dto1DOutputPath refnum as FinalOutputName
1587                                        if(V_Flag==0)
1588                                                DoAlert 1, "The file with this name: "+FinalOutputName+ " in this location already exists, overwrite?"
1589                                                if(V_Flag!=1)
1590                                                        abort
1591                                                endif
1592                                                close/A
1593                                                //user wants to delete the file
1594                                                OpenNotebook/V=0/P=Convert2Dto1DOutputPath/N=JunkNbk  FinalOutputName
1595                                                DoWindow/D /K JunkNbk
1596                                        endif
1597                                        close/A
1598                                        Duplicate Intensity, NoteTempY
1599                                        string OldNoteT1=note(Intensity)
1600                                        note/K NoteTempY
1601                                        note NoteTempY, OldNoteT1+"Exported="+date()+" "+time()+";"
1602                                        variable wvlgth = NumberByKey("Nika_Wavelength", OldNoteT1 , "=", ";")
1603                                        if (UseQvector)
1604                                                wave XWaveTmp = $("q_"+UseName)
1605                                                Duplicate/Free XWaveTmp, XWave
1606                                                XWave = 2 * 180/pi * asin(XWaveTmp * wvlgth /(4*pi))           
1607                                        elseif(UseTheta)
1608                                                wave XWave = $("t_"+UseName)
1609                                        elseif(UseDspacing)
1610                                                wave XWaveTmp = $("d_"+UseName)
1611                                                Duplicate/Free XWaveTmp, XWave
1612                                                XWave = 2 * 180/pi * (wvlgth / (2*XWaveTmp))
1613                                        else
1614                                                abort "GSAS xye output error - not suitabel data, need TwoTheta, d-spacing or q_ as x-wave"
1615                                        endif                           
1616                                        make/T/O WaveNoteWave
1617                                        if (1)
1618                                                IN2G_PasteWnoteToWave("NoteTempY",WaveNoteWave ,HeaderSeparator)
1619                                                InsertPoints 0, 2, WaveNoteWave
1620                                                InsertPoints numpnts(WaveNoteWave), 2, WaveNoteWave
1621                                                WaveNoteWave[0] = "/*"
1622                                                WaveNoteWave[1] = HeaderSeparator+"wavelength = "+num2str(wvlgth)
1623                                                WaveNoteWave[numpnts(WaveNoteWave)-2] = "# 2Theta  Intensity  Error"   
1624                                                WaveNoteWave[numpnts(WaveNoteWave)-1] = "*/"   
1625                                                Save/G/M="\r\n"/P=Convert2Dto1DOutputPath WaveNoteWave as FinalOutputName
1626                                        endif
1627                                        Save/A=2/G/M="\r\n"/P=Convert2Dto1DOutputPath XWave,Intensity,Error as FinalOutputName                  ///P=Datapath
1628                                        KillWaves/Z WaveNoteWave, NoteTempY
1629                                else
1630                                        Save/A/G/M="\r\n"/P=Convert2Dto1DOutputPath TwoTheta,Intensity,Error,TwoThetaWidth as (UseName+".dat")
1631                                endif           
1632                        elseif(UseDspacing)
1633                                Save/A/G/M="\r\n"/P=Convert2Dto1DOutputPath Dspacing,Intensity,Error,DspacingWidth as (UseName+".dat")
1634                        elseif(UseDistanceFromCenter)
1635                                Save/A/G/M="\r\n"/P=Convert2Dto1DOutputPath DistanceInmm,Intensity,Error,DistacneInmmWidth as (UseName+".dat")
1636                        else
1637                                abort "Error - no output type selected"
1638                        endif
1639                        KillWaves TextWv
1640                endif
1641
1642                OldNote=note(Intensity)
1643                //DataType = "qrs", "trs", "drs", "distrs"
1644                if (UseQvector)
1645                        NEXUS_WriteNx1DCanSASNika(UserSampleName,  Intensity, Error, Qvector, Qsmearing, CurOrient, OldNote)
1646                elseif(UseTheta)
1647                        NEXUS_WriteNx1DCanSASNika(UserSampleName,  Intensity, Error, TwoTheta, TwoThetaWidth, CurOrient, OldNote)
1648                elseif(UseDspacing)
1649                        NEXUS_WriteNx1DCanSASNika(UserSampleName,  Intensity, Error, Dspacing, DspacingWidth, CurOrient, OldNote)
1650                elseif(UseDistanceFromCenter)
1651                        NEXUS_WriteNx1DCanSASNika(UserSampleName, Intensity, Error, DistanceInmm, DistacneInmmWidth, CurOrient, OldNote)
1652                endif
1653                if(DisplayDataAfterProcessing)
1654                        if (UseQvector)
1655                                Wave Int=$("r_"+UseName)
1656                                Wave Qvec=$("q_"+UseName)
1657                                Wave err=$("s_"+UseName)
1658                                NI1A_DisplayLineoutAfterProc(int,Qvec,Err,1,1)
1659                        elseif(UseTheta)
1660                                Wave Int=$("r_"+UseName)
1661                                Wave TwoTheta=$("t_"+UseName)
1662                                Wave err=$("s_"+UseName)
1663                                NI1A_DisplayLineoutAfterProc(int,TwoTheta,Err,1,3)
1664                        elseif(UseDspacing)
1665                                Wave Int=$("r_"+UseName)
1666                                Wave Dspacing=$("d_"+UseName)
1667                                Wave err=$("s_"+UseName)
1668                                NI1A_DisplayLineoutAfterProc(int,Dspacing,Err,1,2)
1669                        elseif(UseDistanceFromCenter)
1670                                Wave Int=$("r_"+UseName)
1671                                Wave DistanceInmm=$("m_"+UseName)
1672                                Wave err=$("s_"+UseName)
1673                                NI1A_DisplayLineoutAfterProc(int,DistanceInmm,Err,1,5)
1674                        else
1675                                abort "Error - no output type selected"
1676                        endif
1677                endif
1678        endif           //end of sectors part...
1679        //Movie part...
1680        SVAR Movie_Last1DdataSet=root:Packages:Convert2Dto1D:Movie_Last1DdataSet
1681        Movie_Last1DdataSet=LongUseName         //this is last 1D data set loaded...
1682        NI1A_MovieRecordFrameIfReq(1)   
1683       
1684        setDataFolder OldDf
1685end
1686
1687
1688//*******************************************************************************************************************************************
1689//*******************************************************************************************************************************************
1690//*******************************************************************************************************************************************
1691Function/T NI1A_TrimCleanDataName(InputName, CurOrient)
1692        string InputName, CurOrient
1693       
1694        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1695        NVAR TrimFrontOfName=root:Packages:Convert2Dto1D:TrimFrontOfName
1696        NVAR TrimEndOfName=root:Packages:Convert2Dto1D:TrimEndOfName
1697        SVAR RemoveStringFromName = root:Packages:Convert2Dto1D:RemoveStringFromName
1698        string NewName, tempStr
1699        tempStr = ReplaceString(".", InputName, "")
1700        variable NumDots= strlen(InputName) - strlen(tempStr)
1701        NewName = InputName
1702        NewName = ReplaceString(RemoveStringFromName, NewName, "")
1703        variable MaxLengthAllowed = 26 - strlen(CurOrient)
1704        //OK, modify for Igor 8
1705        NVAR useIgor8LongNames = root:Packages:IrenaConfigFolder:Igor8UseLongNames
1706        if(IgorVersion()>7.99 && useIgor8LongNames)             //this is Igor 8 code and user wnts to us long names. In this case trimming of name is not necessary, unless asked for
1707                        NewName= IN2G_CreateUserName(NewName,MaxLengthAllowed, 0, 11)   
1708        else
1709                if(TrimEndOfName)
1710                        //NewName= NewName[0,MaxLengthAllowed]
1711                        NewName= IN2G_CreateUserName(NewName,MaxLengthAllowed, 0, 11)
1712                else
1713                        NewName= NewName[strlen(NewName)-MaxLengthAllowed,inf]
1714                endif
1715        endif
1716        return NewName
1717end
1718//*******************************************************************************************************************************************
1719//*******************************************************************************************************************************************
1720//*******************************************************************************************************************************************
1721Function NI1A_DisplayLineoutAfterProc(int,Qvec,Err,NumOfWavesToKeep,typeGraph)
1722        wave int,Qvec,Err
1723        variable NumOfWavesToKeep
1724        variable typeGraph      //1 for q, 2 for d, and 3 for twoTheta, 4 for azimuthal angle
1725
1726        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1727        NVAR UseBatchProcessing=root:Packages:Convert2Dto1D:UseBatchProcessing
1728        if(UseBatchProcessing)
1729                return 0
1730        endif
1731       
1732        if(typeGraph==1)
1733                DoWindow LineuotDisplayPlot_Q
1734                if(V_Flag)
1735                        DoWindow/F LineuotDisplayPlot_Q
1736                        CheckDisplayed /W=LineuotDisplayPlot_Q  $(NameOfWave(Int))
1737                        if(!V_Flag)
1738                                appendToGraph Int vs Qvec
1739                                Doupdate
1740                        endif
1741                else
1742                        //Display/K=1 /W=(348,368,828,587.75) Int vs Qvec as "LineuotDisplayPlot_Q"     
1743                        Display/K=1 /W=(350,350,350+0.5*IN2G_GetGraphWidthHeight("width"),350+0.5*IN2G_GetGraphWidthHeight("height")) Int vs Qvec as "LineuotDisplayPlot_Q"     
1744                        DoWIndow/C LineuotDisplayPlot_Q
1745                        AutoPositionWindow/M=1/E/R=NI1A_Convert2Dto1DPanel  LineuotDisplayPlot_Q       
1746                        ModifyGraph log=1
1747                        Label left "Intensity"
1748                        Label bottom "Q vector [A\\S-1\\M]"
1749                        Doupdate
1750                endif           
1751        elseif(typeGraph==2)
1752                DoWindow LineuotDisplayPlot_D
1753                if(V_Flag)
1754                        DoWindow/F LineuotDisplayPlot_D
1755                        CheckDisplayed /W=LineuotDisplayPlot_D  $(NameOfWave(Int))
1756                        if(!V_Flag)
1757                                appendToGraph Int vs Qvec
1758                        endif
1759                else
1760                        //Display/K=1 /W=(348,368,828,587.75) Int vs Qvec as "LineuotDisplayPlot_D"     
1761                        Display/K=1 /W=(350,350,350+0.5*IN2G_GetGraphWidthHeight("width"),350+0.5*IN2G_GetGraphWidthHeight("height")) Int vs Qvec as "LineuotDisplayPlot_D"     
1762                        DoWIndow/C LineuotDisplayPlot_D
1763                        AutoPositionWindow/M=1/E/R=NI1A_Convert2Dto1DPanel  LineuotDisplayPlot_D       
1764                        ModifyGraph log=0
1765                        Label left "Intensity"
1766                        Label bottom "d spacing [A]"
1767                        Doupdate
1768                endif           
1769        elseif(typeGraph==3)
1770                DoWindow LineuotDisplayPlot_T
1771                if(V_Flag)
1772                        DoWindow/F LineuotDisplayPlot_T
1773                        CheckDisplayed /W=LineuotDisplayPlot_T  $(NameOfWave(Int))
1774                        if(!V_Flag)
1775                                appendToGraph Int vs Qvec
1776                        endif
1777                else
1778                        //Display/K=1 /W=(348,368,828,587.75) Int vs Qvec as "LineuotDisplayPlot_T"     
1779                        Display/K=1 /W=(350,350,350+0.5*IN2G_GetGraphWidthHeight("width"),350+0.5*IN2G_GetGraphWidthHeight("height")) Int vs Qvec as "LineuotDisplayPlot_T"     
1780                        DoWIndow/C LineuotDisplayPlot_T
1781                        AutoPositionWindow/M=1/E/R=NI1A_Convert2Dto1DPanel  LineuotDisplayPlot_T       
1782                        ModifyGraph log=0
1783                        Label left "Intensity"
1784                        Label bottom "Two theta [degrees]"
1785                        Doupdate
1786                endif           
1787        elseif(typeGraph==4)
1788                DoWindow LineuotDisplayPlot_T
1789                if(V_Flag)
1790                        DoWindow/F LineuotDisplayPlot_T
1791                        CheckDisplayed /W=LineuotDisplayPlot_T  $(NameOfWave(Int))
1792                        if(!V_Flag)
1793                                appendToGraph Int vs Qvec
1794                        endif
1795                else
1796                        //Display/K=1 /W=(348,368,828,587.75) Int vs Qvec as "LineuotDisplayPlot_Az"   
1797                        Display/K=1 /W=(350,350,350+0.5*IN2G_GetGraphWidthHeight("width"),350+0.5*IN2G_GetGraphWidthHeight("height"))  Int vs Qvec as "LineuotDisplayPlot_Az"   
1798                        DoWIndow/C LineuotDisplayPlot_T
1799                        AutoPositionWindow/M=1/E/R=NI1A_Convert2Dto1DPanel  LineuotDisplayPlot_T       
1800                        ModifyGraph log=0
1801                        Label left "Intensity"
1802                        Label bottom "Azimuthal angle"
1803                        Doupdate
1804                endif           
1805        elseif(typeGraph==5)
1806                DoWindow LineuotDisplayPlot_T
1807                if(V_Flag)
1808                        DoWindow/F LineuotDisplayPlot_T
1809                        CheckDisplayed /W=LineuotDisplayPlot_T  $(NameOfWave(Int))
1810                        if(!V_Flag)
1811                                appendToGraph Int vs Qvec
1812                        endif
1813                else
1814                        //Display/K=1 /W=(348,368,828,587.75) Int vs Qvec as "LineuotDisplayPlot_Distacne"     
1815                        Display/K=1 /W=(350,350,350+0.5*IN2G_GetGraphWidthHeight("width"),350+0.5*IN2G_GetGraphWidthHeight("height")) Int vs Qvec as "LineuotDisplayPlot_Distacne"     
1816                        DoWIndow/C LineuotDisplayPlot_T
1817                        AutoPositionWindow/M=1/E/R=NI1A_Convert2Dto1DPanel  LineuotDisplayPlot_T       
1818                        ModifyGraph log=0
1819                        Label left "Intensity"
1820                        Label bottom "Distance from center [mm]"
1821                        Doupdate
1822                endif           
1823        else
1824                Abort "error in NI1A_DisplayLineoutAfterProc"
1825        endif
1826        IN2G_LegendTopGrphFldr(str2num(IN2G_LkUpDfltVar("LegendSize")), 15,1,0)
1827        //Legend/C/N=text0/A=RT
1828        ModifyGraph mirror=1
1829        IN2G_ColorTopGrphRainbow()
1830#if Exists("Nika_Hook_AfterDisplayLineout")==6
1831        Nika_Hook_AfterDisplayLineout(int,Qvec,Err)
1832#endif
1833
1834End
1835
1836//*******************************************************************************************************************************************
1837//*******************************************************************************************************************************************
1838//*******************************************************************************************************************************************
1839//*******************************************************************************************************************************************
1840//*******************************************************************************************************************************************
1841//*******************************************************************************************************************************************
1842//
1843//Function NI1A_CCD21D_SetVarProc(ctrlName,varNum,varStr,varName) : SetVariableControl
1844//      String ctrlName
1845//      Variable varNum
1846//      String varStr
1847//      String varName
1848//
1849//              if(cmpstr(ctrlName,"SampleToCCDdistance")==0)
1850//                              //here goes what happens
1851//              endif
1852//
1853//
1854//End
1855//*******************************************************************************************************************************************
1856//*******************************************************************************************************************************************
1857//*******************************************************************************************************************************************
1858//*******************************************************************************************************************************************
1859//*******************************************************************************************************************************************
1860//*******************************************************************************************************************************************
1861//Function NI1A_setupData(updateLUT)
1862//              variable updateLUT
1863//
1864//              //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1865//              wave QVectorWave=root:Packages:Convert2Dto1D:QVectorWave
1866//              wave CCDImageToConvert=root:Packages:Convert2Dto1D:CCDImageToConvert
1867//              wave M_ROIMask=root:Packages:Convert2Dto1D:M_ROIMask
1868//              wave EmptyData=root:Packages:Convert2Dto1D:EmptyData
1869//              wave DarkCurrentWave=root:Packages:Convert2Dto1D:DarkField
1870//
1871//              Duplicate/O CCDImageToConvert, CorrectedDataWave
1872//              Redimension/S CorrectedDataWave
1873//              variable transmission=0.991
1874//              CorrectedDataWave=(1/transmission)*(CCDImageToConvert-DarkCurrentWave) - (EmptyData-DarkCurrentWave)
1875//
1876//              NI1A_CreateConversionLUT(updateLUT, QVectorWave, CorrectedDataWave,M_ROIMask )
1877//              killwaves/Z temp2D, CorrectedDataWave
1878//end
1879//
1880
1881Function NI1A_CreateConversionLUT(updateLUT, QVectorWave, CCDImageToConvert,M_ROIMask )
1882        variable updateLUT
1883        wave QVectorWave, CCDImageToConvert,M_ROIMask
1884               
1885        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1886        string OldDf=GetDataFOlder(1)
1887        setDataFolder root:Packages:Convert2Dto1D
1888
1889        if(updateLUT)
1890                NI1A_CreateLUT("C")
1891        endif
1892                Wave LUT=root:Packages:Convert2Dto1D:LUT
1893                Wave HistWave=root:Packages:Convert2Dto1D:HistWave
1894                variable NumberOfPoints=200  //this is number of points in Q
1895        make/O/N=(NumberOfPoints) NewQwave, NewIntWave, NewIntErrorWave
1896        NewQwave=p*0.001
1897        NewIntWave=0
1898        NewIntErrorWave=0
1899       
1900        variable i, j, counter, numbins
1901        Duplicate/O LUT, tempInt
1902        tempInt = CCDImageToConvert
1903        IndexSort LUT, tempInt
1904        Duplicate/O tempInt, TempIntSqt
1905        TempIntSqt = tempInt^2
1906        counter = HistWave[0]
1907        For(j=1;j<NumberOfPoints;j+=1)
1908                numbins = HistWave[j]
1909                NewIntWave[j] = sum(tempInt, pnt2x(tempInt,Counter), pnt2x(tempInt,Counter+numbins))
1910                NewIntErrorWave[j] = sum(TempIntSqt, pnt2x(tempInt,Counter), pnt2x(tempInt,Counter+numbins))
1911                Counter+=numbins
1912        endfor
1913        NewIntWave/=HistWave
1914        NewIntErrorWave=sqrt(NewIntErrorWave-HistWave*NewIntWave*NewIntWave)/(HistWave-1)
1915        killwaves/Z tempInt, TempIntSqt, temp2D, tempQ, NewQwave
1916end
1917
1918
1919//*******************************************************************************************************************************************
1920//*******************************************************************************************************************************************
1921//*******************************************************************************************************************************************
1922//*******************************************************************************************************************************************
1923//*******************************************************************************************************************************************
1924//*******************************************************************************************************************************************
1925
1926
1927Function NI1A_CreateMovie()     
1928        //here we setup user to create movies while reducting data
1929       
1930        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1931        NVAR Movie_Use2DRAWdata=root:Packages:Convert2Dto1D:Movie_Use2DRAWdata
1932        NVAR Movie_Use2DProcesseddata=root:Packages:Convert2Dto1D:Movie_Use2DProcesseddata
1933        NVAR Movie_Use1DData=root:Packages:Convert2Dto1D:Movie_Use1DData
1934//      if(Movie_Use2DRAWdata+Movie_Use2DProcesseddata+Movie_Use1DData!=0)
1935//              Movie_Use2DRAWdata=0
1936//              Movie_Use2DProcesseddata=0
1937//              Movie_Use1DData=0
1938//      endif
1939
1940        DoWIndow NI1A_CreateMoviesPanel
1941        if(!V_Flag)
1942                Execute("NI1A_CreateMoviesPanel()")
1943        else
1944                Dowindow/F NI1A_CreateMoviesPanel
1945        endif
1946       
1947        AutoPositionWindow/M=0 /R=NI1A_Convert2Dto1DPanel NI1A_CreateMoviesPanel
1948
1949
1950end
1951
1952
1953//***********************************************************
1954//***********************************************************
1955//***********************************************************
1956//***********************************************************
1957//***********************************************************
1958
1959Window NI1A_CreateMoviesPanel() : Panel
1960        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
1961        PauseUpdate             // building window...
1962        NewPanel /K=1 /W=(455,63,762,443) as "Nika Create Movies panel"
1963        SetDrawLayer UserBack
1964        SetDrawEnv fname= "Times New Roman",fsize= 18,fstyle= 3,textrgb= (0,0,65535)
1965        DrawText 69,27,"Create movie panel"
1966
1967        SetDrawEnv fstyle= 3
1968        DrawText 10,45,"1. Load and process one data set"
1969        SetDrawEnv fstyle= 3
1970        DrawText 10,65,"2. Decide what to use for movie"
1971       
1972        CheckBox Movie_Use2DRAWdata,pos={10,75},size={80,16},proc=NI1A_MovieCheckProc,title="Use 2D RAW data ?", mode=1
1973        CheckBox Movie_Use2DRAWdata,variable= root:Packages:Convert2Dto1D:Movie_Use2DRAWdata, help={"Check to use RAW 2D data for the movie?"}
1974        CheckBox Movie_Use2DProcesseddata,pos={10,95},size={80,16},proc=NI1A_MovieCheckProc,title="Use 2D Calibrated?", mode=1
1975        CheckBox Movie_Use2DProcesseddata,variable= root:Packages:Convert2Dto1D:Movie_Use2DProcesseddata, help={"Check to use Processed (Calibrated) 2D data"}
1976        CheckBox Movie_Use1DData,pos={10,115},size={80,16},proc=NI1A_MovieCheckProc,title="Use 1D data?", mode=1
1977        CheckBox Movie_Use1DData,variable= root:Packages:Convert2Dto1D:Movie_Use1DData, help={"Check to use reduced 1D data"}
1978
1979        CheckBox Movie_UseMain2DImage,pos={150,75},size={80,16},proc=NI1A_MovieCheckProc,title="Use main 2D img ?", mode=1
1980        CheckBox Movie_UseMain2DImage,variable= root:Packages:Convert2Dto1D:Movie_UseMain2DImage, help={"Check to usethe main 2D imagea for the movie?"}
1981        CheckBox Movie_UseUserHookFnct,pos={150,95},size={80,16},proc=NI1A_MovieCheckProc,title="Use user Hook fnct?", mode=1
1982        CheckBox Movie_UseUserHookFnct,variable= root:Packages:Convert2Dto1D:Movie_UseUserHookFnct, help={"Check to use if you want to write user hook function to  generate image for movie"}
1983
1984
1985       
1986        Button OpenMovieGraph title="Create Img/Graph",pos={30,133},size={220,20}, help={"Create Graph/Image if needed"}
1987        Button OpenMovieGraph proc=NI1A_MovieButtonProc
1988
1989        SetDrawEnv fstyle= 3
1990        DrawText 10,170,"3. Modify the Image/graph "
1991        CheckBox Movie_AppendFileName,pos={30,175},size={80,16},proc=NI1A_MovieCheckProc,title="Append File Name as Legend?"
1992        CheckBox Movie_AppendFileName,variable= root:Packages:Convert2Dto1D:Movie_AppendFileName, help={"Check to append file name as legend"}
1993        CheckBox Movie_DisplayLogInt,pos={30,195},size={80,16},proc=NI1A_MovieCheckProc,title="Log Int (2D images only)?"
1994        CheckBox Movie_DisplayLogInt,variable= root:Packages:Convert2Dto1D:Movie_DisplayLogInt, help={"Check to append file name as legend"}
1995
1996        SetDrawEnv fstyle= 3
1997        DrawText 10,240,"4. Create movie file "
1998        Button OpenMovieFile title="Open Movie file for writing",pos={30,250},size={180,20}
1999        Button OpenMovieFile proc=NI1A_MovieButtonProc, disable=(2*root:Packages:Convert2Dto1D:Movie_FileOpened)
2000        SetVariable Movie_FrameRate,pos={170,228},size={130,22}, title="Frame Rate", limits={1,60,0}
2001        SetVariable Movie_FrameRate variable=root:Packages:Convert2Dto1D:Movie_FrameRate
2002
2003        SetDrawEnv fstyle= 3
2004        DrawText 10,285,"5. Append Images to movie file "
2005        Button Movie_AppendFrame title="Append current Frame",pos={30,290},size={220,20}
2006        Button Movie_AppendFrame proc=NI1A_MovieButtonProc
2007        CheckBox Movie_AppendAutomatically,pos={30,315},size={80,16},proc=NI1A_MovieCheckProc,title="Append Frames Automatically?"
2008        CheckBox Movie_AppendAutomatically,variable= root:Packages:Convert2Dto1D:Movie_AppendAutomatically, help={"Check to append frames as data are processed"}
2009
2010        SetDrawEnv fstyle= 3
2011        DrawText 10,345,"6. Close movie file "
2012
2013        Button Movie_CloseFile title="Close Movie File",pos={30,350},size={220,20}
2014        Button Movie_CloseFile proc=NI1A_MovieButtonProc
2015
2016       
2017EndMacro
2018
2019//***********************************************************
2020//***********************************************************
2021//***********************************************************
2022//***********************************************************
2023//***********************************************************
2024Function NI1A_MovieCheckProc(cba) : CheckBoxControl
2025        STRUCT WMCheckboxAction &cba
2026
2027        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2028        NVAR Movie_Use2DRAWdata=root:Packages:Convert2Dto1D:Movie_Use2DRAWdata
2029        NVAR Movie_Use2DProcesseddata=root:Packages:Convert2Dto1D:Movie_Use2DProcesseddata
2030        NVAR Movie_Use1DData=root:Packages:Convert2Dto1D:Movie_Use1DData
2031        NVAR Movie_FileOpened=root:Packages:Convert2Dto1D:Movie_FileOpened
2032        NVAR  Movie_UseMain2DImage = root:Packages:Convert2Dto1D:Movie_UseMain2DImage
2033        NVAR  Movie_UseUserHookFnct = root:Packages:Convert2Dto1D:Movie_UseUserHookFnct
2034
2035        switch( cba.eventCode )
2036                case 2: // mouse up
2037                        Variable checked = cba.checked
2038                        if(stringmatch(cba.ctrlName,"Movie_Use2DRAWdata"))
2039                                Movie_Use2DRAWdata = checked
2040                                Movie_Use2DProcesseddata=!checked
2041                                Movie_Use1DData=!checked
2042                                Movie_UseMain2DImage = !checked
2043                                Movie_UseUserHookFnct=!checked
2044
2045                                NI1A_MovieUpdateMain2DImage()
2046                                NI1A_MovieCreateUpdate1DGraphF()
2047                                NI1A_MovieCreateUpdateImageFnct()
2048                                NI1A_MovieCallUserHookFunction()
2049                        endif
2050                        if(stringmatch(cba.ctrlName,"Movie_Use2DProcesseddata"))
2051                                Movie_Use2DRAWdata = !checked
2052                                Movie_Use2DProcesseddata=checked
2053                                Movie_Use1DData=!checked
2054                                Movie_UseMain2DImage = !checked
2055                                Movie_UseUserHookFnct=!checked
2056
2057                                NI1A_MovieUpdateMain2DImage()
2058                                NI1A_MovieCreateUpdate1DGraphF()
2059                                NI1A_MovieCreateUpdateImageFnct()
2060                                NI1A_MovieCallUserHookFunction()
2061                        endif
2062                        if(stringmatch(cba.ctrlName,"Movie_Use1DData"))
2063                                Movie_Use2DRAWdata = !checked
2064                                Movie_Use2DProcesseddata=!checked
2065                                Movie_Use1DData=checked
2066                                Movie_UseMain2DImage = !checked
2067                                Movie_UseUserHookFnct=!checked
2068                                NI1A_MovieCreateUpdate1DGraphF()
2069                                NI1A_MovieCreateUpdateImageFnct()
2070                        endif
2071                        if(stringmatch(cba.ctrlName,"Movie_UseMain2DImage"))
2072                                Movie_Use2DRAWdata = !checked
2073                                Movie_Use2DProcesseddata=!checked
2074                                Movie_Use1DData=!checked
2075                                Movie_UseMain2DImage = checked
2076                                Movie_UseUserHookFnct=!checked
2077
2078                                NI1A_MovieUpdateMain2DImage()
2079                                NI1A_MovieCreateUpdate1DGraphF()
2080                                NI1A_MovieCreateUpdateImageFnct()
2081                                NI1A_MovieCallUserHookFunction()
2082                        endif
2083                        if(stringmatch(cba.ctrlName,"Movie_UseUserHookFnct"))
2084                                Movie_Use2DRAWdata = !checked
2085                                Movie_Use2DProcesseddata=!checked
2086                                Movie_Use1DData=!checked
2087                                Movie_UseMain2DImage = !checked
2088                                Movie_UseUserHookFnct=checked
2089
2090                                NI1A_MovieUpdateMain2DImage()
2091                                NI1A_MovieCreateUpdate1DGraphF()
2092                                NI1A_MovieCreateUpdateImageFnct()
2093                                NI1A_MovieCallUserHookFunction()
2094                        endif
2095                        if(stringmatch(cba.ctrlName,"Movie_AppendFileName"))
2096                                NI1A_MovieUpdateMain2DImage()
2097                                NI1A_MovieCreateUpdate1DGraphF()
2098                                NI1A_MovieCreateUpdateImageFnct()
2099                                NI1A_MovieCallUserHookFunction()
2100                        endif
2101                        if(stringmatch(cba.ctrlName,"Movie_DisplayLogInt"))
2102                                NI1A_MovieUpdateMain2DImage()
2103                                NI1A_MovieCreateUpdate1DGraphF()
2104                                NI1A_MovieCreateUpdateImageFnct()
2105                                NI1A_MovieCallUserHookFunction()
2106                        endif
2107                        if(stringmatch(cba.ctrlName,"Movie_AppendAutomatically"))
2108                                        if(checked && Movie_FileOpened)
2109                                                Button CreateMovie win=NI1A_Convert2Dto1DPanel, title="Creating Movie Auto",fColor=(16386,65535,16385)
2110                                        else
2111                                                Button CreateMovie win=NI1A_Convert2Dto1DPanel, title="Creating Movie Manual",fColor=(16386,65535,16385)
2112                                        endif
2113                        endif
2114                       
2115               
2116                        DoWindow/F NI1A_CreateMoviesPanel
2117                       
2118                        break
2119        endswitch
2120
2121        return 0
2122End
2123//***********************************************************
2124//***********************************************************
2125//***********************************************************
2126//***********************************************************
2127//***********************************************************
2128Function NI1A_MovieRecordFrameIfReq(OneDPlace)
2129        variable OneDPlace
2130        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2131        NVAR FIleOpened=root:Packages:Convert2Dto1D:Movie_FileOpened
2132        if(!FIleOpened)
2133                return 0
2134        endif
2135        NVAR Movie_Use2DRAWdata=root:Packages:Convert2Dto1D:Movie_Use2DRAWdata
2136        NVAR Movie_Use2DProcesseddata=root:Packages:Convert2Dto1D:Movie_Use2DProcesseddata
2137        NVAR Movie_UseMain2DImage=root:Packages:Convert2Dto1D:Movie_UseMain2DImage
2138        NVAR Movie_UseUserHookFnct=root:Packages:Convert2Dto1D:Movie_UseUserHookFnct
2139        NVAR Movie_Use1DData=root:Packages:Convert2Dto1D:Movie_Use1DData
2140       
2141        if(OneDPlace==1&&Movie_Use1DData)
2142                NI1A_MovieCreateUpdate1DGraphF()
2143        elseif(OneDPlace==2&&(Movie_Use2DRAWdata||Movie_Use2DProcesseddata||Movie_UseMain2DImage))
2144                NI1A_MovieUpdateMain2DImage()
2145                NI1A_MovieCreateUpdateImageFnct()
2146        elseif(Movie_UseUserHookFnct)
2147                NI1A_MovieCallUserHookFunction()
2148        else
2149                return 0
2150        endif
2151        NI1A_MovieAppendTopImage(0)
2152end
2153//***********************************************************
2154//***********************************************************
2155//***********************************************************
2156//***********************************************************
2157//***********************************************************
2158Function NI1A_MovieCreateUpdate1DGraphF()
2159
2160        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2161        string OldDf=getDataFolder(1)
2162        setDataFolder root:Packages:Convert2Dto1D:
2163
2164        NVAR Movie_Use1DData=root:Packages:Convert2Dto1D:Movie_Use1DData
2165        SVAR Movie_Last1DdataSet=root:Packages:Convert2Dto1D:Movie_Last1DdataSet
2166        SVAR FileNameToLoad = root:Packages:Convert2Dto1D:FileNameToLoad
2167        SVAR UserSampleName=root:Packages:Convert2Dto1D:UserSampleName
2168        SVAR Movie_FileName=root:Packages:Convert2Dto1D:Movie_FileName
2169        NVAR Movie_AppendFileName=root:Packages:Convert2Dto1D:Movie_AppendFileName
2170        NVAR Movie_DisplayLogInt=root:Packages:Convert2Dto1D:Movie_DisplayLogInt
2171
2172        if(!Movie_Use1DData)            //probably want to do 1D graph for Movie
2173                KillWIndow/Z NI1A_MovieCreate1DGraph
2174                return 0
2175        endif
2176
2177        if(!DataFolderExists(Movie_Last1DdataSet))
2178                abort "Data folder with the 1D data does not exist"
2179        endif
2180        setDataFolder $Movie_Last1DdataSet
2181        String IntName=IN2G_ReturnExistingWaveName(Movie_Last1DdataSet,"r_*")
2182        String Qname=IN2G_ReturnExistingWaveName(Movie_Last1DdataSet,"q_*")
2183        String Dname=IN2G_ReturnExistingWaveName(Movie_Last1DdataSet,"d_*")
2184        String TwoThetaName=IN2G_ReturnExistingWaveName(Movie_Last1DdataSet,"t_*")
2185        String Ename=IN2G_ReturnExistingWaveName(Movie_Last1DdataSet,"s_*")
2186
2187        Wave/Z Intensity=$(IntName)
2188        Wave/Z Qvector=$(QName)
2189        Wave/Z TwoTheta=$(TwoThetaName)
2190        Wave/Z Dspacing=$(DName)
2191       
2192        if(WaveExists(Qvector))
2193                Wave XWave=$(QName)
2194        elseif(WaveExists(TwoTheta))
2195                Wave XWave=$(TwoThetaName)
2196        elseif(WaveExists(Dspacing))
2197                Wave XWave=$(Dname)
2198        else
2199                abort "X wave (Q, Two Theta or D spacing) does not exist"
2200        endif
2201        setDataFolder root:Packages:Convert2Dto1D:
2202        Duplicate/O Intensity, MovieIntensityWave
2203        Duplicate/O XWave, MovieXwave
2204        //now it exists, create image to use:
2205        DoWindow NI1A_MovieCreate1DGraph
2206        if(!V_Flag)
2207                Display/K=1 MovieIntensityWave vs MovieXwave as  "Movie 1D graph"
2208                DoWindow/C NI1A_MovieCreate1DGraph
2209                ModifyGraph mirror=1
2210                Label left "Intensity [cm\\S-1\\M]"
2211                Label bottom "Scattering Vector [A\\S-1\\M]"
2212                AutoPositionWindow  /M=1 /R=NI1A_CreateMoviesPanel NI1A_MovieCreate1DGraph
2213        else
2214                DoWIndow/F NI1A_MovieCreate1DGraph
2215        endif
2216
2217//              if(Movie_DisplayLogInt)
2218//                      ModifyGraph /W=NI1A_MovieCreate1DGraph log=1
2219//              else
2220//                      ModifyGraph /W=NI1A_MovieCreate1DGraph log=0
2221//              endif
2222
2223        Movie_FileName = Movie_Last1DdataSet
2224        if(Movie_AppendFileName)
2225                if(! stringMatch(AnnotationList("NI1A_MovieCreate1DGraph"),"*MovieLegend;*"))
2226                        Legend/C/N=MovieLegend/J/M/A=LT/W=NI1A_MovieCreate1DGraph "\{root:Packages:Convert2Dto1D:Movie_FileName}"
2227                endif
2228        else
2229                Legend/K/N=MovieLegend/W=NI1A_MovieCreate1DGraph
2230        endif
2231        DoUpdate
2232        setDataFolder OldDf             
2233end
2234
2235
2236//***********************************************************
2237//***********************************************************
2238//***********************************************************
2239//***********************************************************
2240//***********************************************************
2241Function NI1A_MovieCreateUpdateImageFnct()
2242
2243        string OldDf=getDataFolder(1)
2244        setDataFolder root:Packages:Convert2Dto1D:
2245        NVAR Movie_Use2DRAWdata=root:Packages:Convert2Dto1D:Movie_Use2DRAWdata
2246        NVAR Movie_Use2DProcesseddata=root:Packages:Convert2Dto1D:Movie_Use2DProcesseddata
2247
2248        if(!Movie_Use2DRAWdata && !Movie_Use2DProcesseddata)            //probably want to do 1D graph for Movie
2249                KillWIndow/Z NI1A_MovieCreateImage
2250                return 0
2251        endif
2252
2253        if(Movie_Use2DRAWdata)
2254                Wave/Z RAWImageToDisplay = root:Packages:Convert2Dto1D:CCDImageToConvert        //this contains RAW data ONLY
2255                if(!WaveExists(RAWImageToDisplay))
2256                        Abort "The 2D image does not exist, please load test image in Nika first"
2257                        KillWIndow/Z NI1A_MovieCreateImage
2258                endif
2259                Duplicate/O RAWImageToDisplay, Movie2DImage
2260        else                    //use Calibrated data
2261                Wave/Z CalibratedImageToDisplay = root:Packages:Convert2Dto1D:Calibrated2DDataSet       //this contains calibrated data
2262                if(!WaveExists(CalibratedImageToDisplay))
2263                        Abort "The Calibrated 2D image does not exist, please load & convert test image in Nika first"
2264                endif
2265                Duplicate/O CalibratedImageToDisplay, Movie2DImage
2266        endif
2267       
2268        NVAR Movie_DisplayLogInt=root:Packages:Convert2Dto1D:Movie_DisplayLogInt
2269        if(Movie_DisplayLogInt)
2270                MatrixOp/O Movie2DImagetemp=log(Movie2DImage)
2271                Movie2DImage = Movie2DImagetemp
2272        endif
2273        //now it exists, create image to use:
2274        DoWindow NI1A_MovieCreateImage
2275        if(!V_Flag)
2276                NewImage/K=1 Movie2DImage
2277                DoWindow/C NI1A_MovieCreateImage
2278                DoWindow/T NI1A_MovieCreateImage, "Movie Image"
2279                ModifyImage  Movie2DImage ctab= {*,*,Terrain,0}         
2280                ModifyImage  Movie2DImage ctabAutoscale=0,lookup= $"NI1A_MovieCreateImage"
2281                AutoPositionWindow  /M=1 /R=NI1A_CreateMoviesPanel NI1A_MovieCreateImage
2282        else
2283                DoWIndow/F NI1A_MovieCreateImage
2284        endif
2285        SVAR FileNameToLoad = root:Packages:Convert2Dto1D:FileNameToLoad
2286        SVAR UserSampleName=root:Packages:Convert2Dto1D:UserSampleName
2287        SVAR Movie_FileName=root:Packages:Convert2Dto1D:Movie_FileName
2288        Movie_FileName = FileNameToLoad
2289        NVAR Movie_AppendFileName=root:Packages:Convert2Dto1D:Movie_AppendFileName
2290        if(Movie_AppendFileName)
2291                if(! stringMatch(AnnotationList("NI1A_MovieCreateImage"),"*MovieLegend;*"))
2292                        Legend/C/N=MovieLegend/J/M/A=LT/W=NI1A_MovieCreateImage "\{root:Packages:Convert2Dto1D:Movie_FileName}"
2293                endif
2294        else
2295                Legend/K/N=MovieLegend/W=NI1A_MovieCreateImage
2296        endif
2297        DoUpdate
2298        setDataFolder OldDf
2299                       
2300end
2301
2302
2303//***********************************************************
2304//***********************************************************
2305//***********************************************************
2306//***********************************************************
2307//***********************************************************
2308Function NI1A_MovieUpdateMain2DImage()
2309
2310        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2311        string OldDf=getDataFolder(1)
2312        setDataFolder root:Packages:Convert2Dto1D:
2313        NVAR Movie_UseMain2DImage=root:Packages:Convert2Dto1D:Movie_UseMain2DImage
2314
2315        if(!Movie_UseMain2DImage)       
2316                return 0
2317        endif
2318
2319        if(Movie_UseMain2DImage)
2320                DOWindow CCDImageToConvertFig
2321                if(V_Flag)
2322                        DoWIndow/F CCDImageToConvertFig
2323                        AutoPositionWindow  /M=1 /R=NI1A_CreateMoviesPanel CCDImageToConvertFig
2324                else   
2325                        Abort "Main 2D windows does not exist"
2326                endif
2327        endif
2328        DoUpdate
2329        setDataFolder OldDf
2330                       
2331end
2332
2333//***********************************************************
2334//***********************************************************
2335//***********************************************************
2336//***********************************************************
2337//***********************************************************
2338Function NI1A_MovieCallUserHookFunction()
2339
2340        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2341        string OldDf=getDataFolder(1)
2342        setDataFolder root:Packages:Convert2Dto1D:
2343        NVAR Movie_UseUserHookFnct=root:Packages:Convert2Dto1D:Movie_UseUserHookFnct
2344
2345        if(!Movie_UseUserHookFnct)     
2346                return 0
2347        endif
2348
2349#if(exists("Movie_UserHookFunction")==6)
2350        Movie_UserHookFunction()
2351#else
2352        Movie_UseUserHookFnct=0
2353        Abort "User hook function does not exist, create Movie_UserHookFunction() which creates image you want to add to movie first"
2354#endif
2355        DoUpdate
2356        setDataFolder OldDf
2357                       
2358end
2359
2360
2361
2362//***********************************************************
2363//***********************************************************
2364//***********************************************************
2365//Function Movie_UserHookFunction()
2366//
2367//              DoWindow CCDImageToConvertFig
2368//              if(V_Flag)
2369//                      DoWIndow/F CCDImageToConvertFig
2370//                      AutoPositionWindow  /M=1 /R=NI1A_CreateMoviesPanel CCDImageToConvertFig
2371//              else   
2372//                      Abort "Main 2D windows does not exist"
2373//              endif
2374//              print "called Movie_UserHookFunction function"
2375//
2376//end
2377
2378//***********************************************************
2379//***********************************************************
2380//***********************************************************
2381//***********************************************************
2382//***********************************************************
2383Function NI1A_MovieButtonProc(ba) : ButtonControl
2384        STRUCT WMButtonAction &ba
2385
2386        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2387        switch( ba.eventCode )
2388                case 2: // mouse up
2389                        // click code here
2390                        if(stringmatch(ba.ctrlName,"OpenMovieFile"))
2391                                NI1A_MovieOpenFile()
2392                        endif
2393                        if(stringmatch(ba.ctrlName,"Movie_CloseFile"))
2394                                NI1A_MovieCloseFile()
2395                        endif
2396                        if(stringmatch(ba.ctrlName,"Movie_AppendFrame"))
2397                                NI1A_MovieAppendTopImage(1)
2398                        endif
2399                        if(stringmatch(ba.ctrlName,"OpenMovieGraph"))
2400                                NI1A_MovieUpdateMain2DImage()
2401                                NI1A_MovieCreateUpdate1DGraphF()
2402                                NI1A_MovieCreateUpdateImageFnct()
2403                                NI1A_MovieCallUserHookFunction()
2404                        endif
2405
2406                        DoWindow/F NI1A_CreateMoviesPanel
2407                       
2408                       
2409                        break
2410        endswitch
2411        return 0
2412End
2413//***********************************************************
2414//***********************************************************
2415//***********************************************************
2416//***********************************************************
2417//***********************************************************
2418Function NI1A_MovieOpenFile()
2419       
2420        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2421        NVAR Movie_FrameRate=root:Packages:Convert2Dto1D:Movie_FrameRate
2422        NVAR Movie_AppendAutomatically=root:Packages:Convert2Dto1D:Movie_AppendAutomatically
2423        NVAR Movie_FileOpened=root:Packages:Convert2Dto1D:Movie_FileOpened
2424       
2425        NewMovie /F=(Movie_FrameRate)/I/Z
2426        if(V_Flag==-1)
2427                abort
2428        elseif(V_Flag!=0)
2429                abort "Error opening movie file" //user canceled or other error
2430        endif
2431        Movie_FileOpened=1
2432        Button OpenMovieFile win=NI1A_CreateMoviesPanel, title="Movie file opened", disable=2
2433        if(Movie_AppendAutomatically)
2434                Button CreateMovie win=NI1A_Convert2Dto1DPanel, title="Creating Movie Auto",fColor=(16386,65535,16385)
2435        else
2436                Button CreateMovie win=NI1A_Convert2Dto1DPanel, title="Creating Movie Manual",fColor=(16386,65535,16385)
2437        endif
2438end
2439//***********************************************************
2440//***********************************************************
2441//***********************************************************
2442//***********************************************************
2443//***********************************************************
2444Function NI1A_MovieCloseFile()
2445       
2446        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2447        Variable DebugEnab
2448        DebuggerOptions
2449        DebugEnab = V_debugOnError      //check for debug on error
2450        if (DebugEnab)                                  //if it is on,
2451                DebuggerOptions debugOnError=0  //turn it off
2452                Execute/P/Q/Z "DebuggerOptions debugOnError=1"  //make sure it gets turned back on
2453        endif
2454        CloseMovie
2455        Variable err = GetRTError(0)
2456        if (err != 0)
2457                String message = GetErrMessage(err)
2458                Printf "Error in Movie creation: %s\r", message
2459                err = GetRTError(1)                                             // Clear error state
2460                Print "Continuing execution"
2461        endif
2462        if (DebugEnab)
2463                DebuggerOptions debugOnError=1  //turn it back on
2464        endif
2465        Button OpenMovieFile win=NI1A_CreateMoviesPanel, title="Open Movie file for writing", disable=0
2466        Button CreateMovie win=NI1A_Convert2Dto1DPanel, title="Create Movie",fColor=(0,0,0)
2467        NVAR Movie_FileOpened=root:Packages:Convert2Dto1D:Movie_FileOpened
2468        Movie_FileOpened=0
2469end
2470//***********************************************************
2471//***********************************************************
2472//***********************************************************
2473//***********************************************************
2474//***********************************************************
2475Function NI1A_MovieAppendTopImage(Manually)
2476        variable manually
2477       
2478        //IN2G_PrintDebugStatement(IrenaDebugLevel, 5,"")
2479        NVAR Movie_Use2DRAWdata=root:Packages:Convert2Dto1D:Movie_Use2DRAWdata
2480        NVAR Movie_Use2DProcesseddata=root:Packages:Convert2Dto1D:Movie_Use2DProcesseddata
2481        NVAR Movie_Use1DData=root:Packages:Convert2Dto1D:Movie_Use1DData
2482        NVAR  Movie_UseMain2DImage = root:Packages:Convert2Dto1D:Movie_UseMain2DImage
2483        NVAR  Movie_UseUserHookFnct = root:Packages:Convert2Dto1D:Movie_UseUserHookFnct
2484        NVAR Movie_FileOpened=root:Packages:Convert2Dto1D:Movie_FileOpened
2485        NVAR Movie_AppendAutomatically=root:Packages:Convert2Dto1D:Movie_AppendAutomatically
2486
2487        if((Manually || Movie_AppendAutomatically) && Movie_FileOpened)
2488                DoWindow NI1A_MovieCreateImage
2489                if(V_Flag)
2490                        DoWIndow/F NI1A_MovieCreateImage
2491                endif
2492                DoWindow NI1A_MovieCreate1DGraph
2493                if(V_Flag)
2494                        DoWIndow/F NI1A_MovieCreate1DGraph
2495                endif
2496                if(Movie_UseMain2DImage)
2497                        DoWindow CCDImageToConvertFig
2498                        if(V_Flag)
2499                                DoWIndow/F CCDImageToConvertFig
2500                        else
2501                                Abort "Main 2D image does nto exist, it cfannoty be added to the movie"
2502                        endif
2503                endif
2504                if(Movie_UseUserHookFnct)
2505                        //nothing needed here...
2506                endif           
2507                SVAR Movie_FileName=root:Packages:Convert2Dto1D:Movie_FileName
2508               
2509                AddMovieFrame
2510                Print "Added frame with data : "+Movie_FileName+" to movie"
2511        endif
2512end
2513//***********************************************************
2514//***********************************************************
2515//***********************************************************
2516//***********************************************************
2517//***********************************************************
Note: See TracBrowser for help on using the repository browser.