- Timestamp:
- Jan 30, 2010 12:09:44 AM (13 years ago)
- Location:
- sans/Dev/trunk/NCNR_User_Procedures
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
sans/Dev/trunk/NCNR_User_Procedures/Common/NIST_XML_v40.ipf
r607 r625 12 12 // Dec 2008 : 13 13 // Caveats - Assumes Q in /A and I in /cm 14 function LoadNISTXMLData(filestr,doPlot) 15 String filestr 16 Variable doPlot 14 // Takes outStr as output name. If outStr is specified then we must load only the first SASData in the firstSASEntry, 15 // since anything else doesn't make sense. This is a bit of a hack to support NSORT. 16 17 18 function LoadNISTXMLData(filestr,outStr,doPlot,forceOverwrite) 19 String filestr,outStr 20 Variable doPlot,forceOverwrite 17 21 18 22 … … 35 39 String xmlDataFolder,xmlDataSetFolder 36 40 37 for (i = 0; i < CountObjects(xmlReaderFolder,4); i+=1) 41 Variable numSASEntries 42 43 if(!cmpStr(outStr,"")) 44 //no outStr defined 45 numSASEntries = CountObjects(xmlReaderFolder,4) 46 else 47 numSASEntries = 1 48 endif 49 50 for (i = 0; i < numSASEntries; i+=1) 38 51 39 52 xmlDataFolder = xmlReaderFolder+GetIndexedObjName(xmlReaderFolder,4,i)+":" 40 numDataSets = CountObjects(xmlDataFolder,4) 53 if (!cmpstr(outstr,"")) 54 numDataSets = CountObjects(xmlDataFolder,4) 55 else 56 numDataSets = 0 57 endif 58 41 59 if (numDataSets > 0) 42 60 //Multiple SASData sets in this SASEntry … … 48 66 49 67 basestr = CleanupName(getXMLDataSetTitle(xmlDataSetFolder,j),0) 68 50 69 //String basestr = ParseFilePath(3, ParseFilePath(5,filestr,":",0,0),":",0,0) 51 70 fileName = ParseFilePath(0,ParseFilePath(5,filestr,":",0,0),":",1,0) … … 57 76 //print "fileName: ",fileName 58 77 //remove the semicolon AND period from files from the VAX 78 print basestr 59 79 w0 = basestr + "_q" 60 80 w1 = basestr + "_i" … … 65 85 66 86 if(DataFolderExists("root:"+baseStr)) 87 if(!forceOverwrite) 67 88 DoAlert 1,"The data set " + basestr + " from file "+fileName+" has already been loaded. Do you want to load the new data file, overwriting the data in memory?" 68 89 if(V_flag==2) //user selected No, don't load the data … … 73 94 return 0 //quits the macro 74 95 endif 75 SetDataFolder $("root:"+baseStr) 96 endif 97 SetDataFolder $("root:"+baseStr) 76 98 else 77 99 NewDataFolder/S $("root:"+baseStr) … … 81 103 Duplicate/O $(xmlDataSetFolder+"Isas") $w1 82 104 Duplicate/O $(xmlDataSetFolder+"Idev") $w2 83 84 85 105 106 86 107 if (exists(xmlDataSetFolder+"Qdev")) 87 108 Wave Qsas = $(xmlDataSetFolder+"Qsas") … … 173 194 print xmlDataFolder 174 195 175 basestr = CleanupName(getXMLDataSetTitle(xmlDataFolder,0),0) 196 //if outstr has been specified, we'll find ourselves here.... 197 if (!cmpstr(outstr,"")) 198 basestr = CleanupName(getXMLDataSetTitle(xmlDataFolder,0),0) 199 else 200 basestr = CleanupName(outstr,0) 201 endif 202 176 203 //String basestr = ParseFilePath(3, ParseFilePath(5,filestr,":",0,0),":",0,0) 177 204 fileName = ParseFilePath(0,ParseFilePath(5,filestr,":",0,0),":",1,0) … … 186 213 187 214 if(DataFolderExists("root:"+baseStr)) 215 if(!forceOverwrite) 188 216 DoAlert 1,"The data set " + basestr + " from file "+fileName+" has already been loaded. Do you want to load the new data file, overwriting the data in memory?" 189 217 if(V_flag==2) //user selected No, don't load the data … … 194 222 return 0 //quits the macro 195 223 endif 196 SetDataFolder $("root:"+baseStr) 224 endif 225 SetDataFolder $("root:"+baseStr) 197 226 else 198 227 NewDataFolder/S $("root:"+baseStr) … … 963 992 End 964 993 994 995 996 965 997 #else // if( Exists("XmlOpenFile") ) 966 998 // No XMLutils XOP: provide dummy function so that IgorPro can compile dependent support code … … 986 1018 return(-6) 987 1019 end 988 1020 989 1021 Function ReWrite1DXMLData(folderStr) 990 1022 String folderStr -
sans/Dev/trunk/NCNR_User_Procedures/Common/Packages/PlotManager/PlotUtilsMacro_v40.ipf
r622 r625 64 64 // the data folder is given the "base name" of the data file as it's loaded 65 65 // 66 66 67 Proc A_LoadOneDDataWithName(fileStr,doPlot) 67 68 String fileStr 68 69 Variable doPlot 70 71 A_LoadOneDDataToName(fileStr,"",doPlot,0) 72 73 End 74 75 76 ///Function that takes output name as well as input 77 Proc A_LoadOneDDataToName(fileStr,outStr,doPlot,forceOverwrite) 78 String fileStr, outstr 79 Variable doPlot,forceOverwrite 69 80 70 81 Variable rr,gg,bb,refnum,dQv … … 95 106 96 107 if (isXML(fileStr) == 1) 97 LoadNISTXMLData(fileStr, doPlot)108 LoadNISTXMLData(fileStr,outstr,doPlot,forceOverwrite) 98 109 else 99 110 //Load the waves, using default waveX names … … 102 113 String fileNamePath = S_Path+S_fileName 103 114 // String basestr = ParseFilePath(3,ParseFilePath(5,fileNamePath,":",0,0),":",0,0) 104 String baseStr = CleanupName(S_fileName,0) 115 116 String basestr 117 if (!cmpstr(outstr, "")) 118 //Outstr = "", cmpstr returns 0 119 baseStr = CleanupName(S_fileName,0) 120 else 121 baseStr = outstr 122 endif 123 105 124 // print "basestr :"+basestr 106 125 String fileName = ParseFilePath(0,ParseFilePath(5,filestr,":",0,0),":",1,0) … … 131 150 //String baseStr=w1[0,strlen(w1)-3] 132 151 if(DataFolderExists("root:"+baseStr)) 152 if (!forceOverwrite) 133 153 DoAlert 1,"The file "+S_filename+" has already been loaded. Do you want to load the new data file, overwriting the data in memory?" 134 154 if(V_flag==2) //user selected No, don't load the data … … 140 160 return //quits the macro 141 161 endif 142 SetDataFolder $("root:"+baseStr) 162 endif 163 SetDataFolder $("root:"+baseStr) 143 164 else 144 165 NewDataFolder/S $("root:"+baseStr) … … 178 199 //String baseStr=w1[0,strlen(w1)-3] 179 200 if(DataFolderExists("root:"+baseStr)) 201 if(!forceOverwrite) 180 202 DoAlert 1,"The file "+S_filename+" has already been loaded. Do you want to load the new data file, overwriting the data in memory?" 181 203 if(V_flag==2) //user selected No, don't load the data … … 187 209 return //quits the macro 188 210 endif 189 SetDataFolder $("root:"+baseStr) 211 endif 212 SetDataFolder $("root:"+baseStr) 190 213 else 191 214 NewDataFolder/S $("root:"+baseStr) … … 252 275 //String baseStr=w1[0,strlen(w1)-3] 253 276 if(DataFolderExists("root:"+baseStr)) 277 if(!forceOverwrite) 254 278 DoAlert 1,"The file "+S_filename+" has already been loaded. Do you want to load the new data file, overwriting the data in memory?" 255 279 if(V_flag==2) //user selected No, don't load the data … … 261 285 return //quits the macro 262 286 endif 263 SetDataFolder $("root:"+baseStr) 287 endif 288 SetDataFolder $("root:"+baseStr) 264 289 else 265 290 NewDataFolder/S $("root:"+baseStr) … … 327 352 //String baseStr=w1[0,strlen(w1)-3] 328 353 if(DataFolderExists("root:"+baseStr)) 354 if(!forceOverwrite) 329 355 DoAlert 1,"The file "+S_filename+" has already been loaded. Do you want to load the new data file, overwriting the data in memory?" 330 356 if(V_flag==2) //user selected No, don't load the data … … 335 361 return //quits the macro 336 362 endif 337 SetDataFolder $("root:"+baseStr) 363 endif 364 SetDataFolder $("root:"+baseStr) 338 365 else 339 366 NewDataFolder/S $("root:"+baseStr) -
sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/NSORT.ipf
r570 r625 69 69 End 70 70 71 72 //loads datasets (3-column or 6-column) for use in NSORTing 73 //identical in function to normal file loading routine LoadQISData() 74 //except that this routine builds custom names to keep track of 75 //high-med-low q datasets (as defined by setNum input) 76 // 71 //New loader that uses data folders etc... 72 //AJJ Jan 2010 77 73 Function LoadDataForNSORT(fileStr,setNum) 78 74 String fileStr //full path:name to a valid file … … 80 76 81 77 Variable err=0 82 83 LoadWave/G/D/A/Q fileStr // (/Q) option suppresses printing to history 78 84 79 String nm0,nm1,nm2 85 String firstFileName = S_fileName86 Variable pt=0,begPts,endPts 87 80 //String firstFileName = S_fileName 81 Variable pt=0,begPts,endPts,numCols 82 88 83 NVAR gColumns1 = root:myGlobals:NSORT:gColumns1 89 84 NVAR gColumns2 = root:myGlobals:NSORT:gColumns2 … … 95 90 NVAR begPts3 = root:myGlobals:NSORT:gPtsBeg3 96 91 NVAR endPts3 = root:myGlobals:NSORT:gPtsEnd3 97 98 String typStr="",trimStr="" 99 100 do 101 if(V_flag == 3) //Three waves loaded 102 // put the names of the three loaded waves into local names 103 nm0 = StringFromList(0, S_waveNames ,";" ) 104 nm1 = StringFromList(1, S_waveNames ,";" ) 105 nm2 = StringFromList(2, S_waveNames ,";" ) 106 107 //rename to give desired names - can't use rename if waves exist - it will generate an error 108 if(setNum == 1) 109 gColumns1 = 3 110 typStr = "LowQSet" 111 trimStr = "TrimLowQSet" 112 begPts = begPts1 113 endPts = endPts1 114 else 115 if(setNum == 2) 116 gColumns2 = 3 117 typStr = "MedQSet" 118 trimStr = "TrimMedQSet" 119 begPts = begPts2 120 endPts = endPts2 121 else 122 gColumns3 = 3 123 typStr="HighQSet" 124 trimStr = "TrimHighQSet" 125 begPts = begPts3 126 endPts = endPts3 127 Endif 128 Endif 129 Duplicate/O $nm0, $(typStr+"_q") 130 Duplicate/O $nm1, $(typStr+"_i") 131 Duplicate/O $nm2, $(typStr+"_s") 132 KillWaves/Z $nm0,$nm1,$nm2 133 //create the "trimmed" dataset too, start by duplicating the original sets 134 Duplicate/O $(typStr+"_q"),$(trimStr+"_q") 135 Duplicate/O $(typStr+"_i"),$(trimStr+"_i") 136 Duplicate/O $(typStr+"_s"),$(trimStr+"_s") 137 WaveStats/Q $(typStr+"_q") //get info about the original q-values read in 138 pt = V_npnts-endPts 139 DeletePoints pt,endPts,$(trimStr+"_q"),$(trimStr+"_i"),$(trimStr+"_s") //delete end points first 140 DeletePoints 0,begPts,$(trimStr+"_q"),$(trimStr+"_i"),$(trimStr+"_s") //then delete points from beginning 141 142 Return err 92 93 String cmd 94 String typStr= "", trimStr="" 95 96 switch (setNum) 97 case 1: 98 sprintf cmd , "A_LoadOneDDataToName(\"%s\",\"%s\",%d,%d)",fileStr,"LowQSet",0,1 99 Execute cmd 100 typStr = "LowQSet" 101 trimStr = "TrimLowQSet" 102 begPts = begPts1 103 endPts = endPts1 143 104 break 144 endif //End of what happens if 3 columns are loaded 145 146 if(V_flag == 6) //Six waves loaded 147 String nm3,nm4,nm5 148 // put the names of the three loaded waves into local names 149 nm0 = StringFromList(0, S_waveNames ,";" ) 150 nm1 = StringFromList(1, S_waveNames ,";" ) 151 nm2 = StringFromList(2, S_waveNames ,";" ) 152 nm3 = StringFromList(3, S_waveNames ,";" ) 153 nm4 = StringFromList(4, S_waveNames ,";" ) 154 nm5 = StringFromList(5, S_waveNames ,";" ) 155 156 if(setNum == 1) 157 gColumns1 = 6 158 typStr = "LowQSet" 159 trimStr = "TrimLowQSet" 160 begPts = begPts1 161 endPts = endPts1 162 else 163 if(setNum == 2) 164 gColumns2 = 6 165 typStr = "MedQSet" 166 trimStr = "TrimMedQSet" 167 begPts = begPts2 168 endPts = endPts2 169 else 170 gColumns3 = 6 171 typStr="HighQSet" 172 trimStr = "TrimHighQSet" 173 begPts = begPts3 174 endPts = endPts3 175 Endif 176 Endif 177 Duplicate/O $nm0, $(typStr+"_q") 178 Duplicate/O $nm1, $(typStr+"_i") 179 Duplicate/O $nm2, $(typStr+"_s") 180 Duplicate/O $nm3, $(typStr+"_sq") 181 Duplicate/O $nm4, $(typStr+"_qb") 182 Duplicate/O $nm5, $(typStr+"_fs") 183 KillWaves/Z $nm0,$nm1,$nm2,$nm3,$nm4,$nm5 184 //create the "trimmed" dataset too 185 Duplicate/O $(typStr+"_q"),$(trimStr+"_q") 186 Duplicate/O $(typStr+"_i"),$(trimStr+"_i") 187 Duplicate/O $(typStr+"_s"),$(trimStr+"_s") 188 Duplicate/O $(typStr+"_sq"),$(trimStr+"_sq") 189 Duplicate/O $(typStr+"_qb"),$(trimStr+"_qb") 190 Duplicate/O $(typStr+"_fs"),$(trimStr+"_fs") 191 WaveStats/Q $(typStr+"_q") //get info about the original q-values read in 192 pt = V_npnts-endPts 193 DeletePoints pt,endPts,$(trimStr+"_q"),$(trimStr+"_i"),$(trimStr+"_s"),$(trimStr+"_sq"),$(trimStr+"_qb"),$(trimStr+"_fs") //delete end points first 194 DeletePoints 0,begPts,$(trimStr+"_q"),$(trimStr+"_i"),$(trimStr+"_s"),$(trimStr+"_sq"),$(trimStr+"_qb"),$(trimStr+"_fs") //then delete points from beginning 195 196 Return err 105 case 2: 106 sprintf cmd , "A_LoadOneDDataToName(\"%s\",\"%s\",%d,%d)",fileStr,"MedQSet",0,1 107 Execute cmd 108 typStr = "MedQSet" 109 trimStr = "TrimMedQSet" 110 begPts = begPts2 111 endPts = endPts2 197 112 break 198 endif //End of Six waves loaded 199 200 //Next stuff gets executed if not 3 or 6 (example, if 0 ) 201 err=1 202 return err 203 while(0) 204 End 205 206 //writes out the NSORTed file, includeing header information about how the file 207 //was genereated - from which files, and how it was normalized 208 //protocol info makes no sense here - go back to the original, separate files 209 //if you want to know that information 210 // 211 // this is the 3-column version - there's a separate function for 6-column data 212 //will ALWAYS prompt for a filename 213 // 214 Function Write3ColNSORTedFile(q3,i3,sig3,firstFileName,secondFileName,thirdFileName,normTo,norm12,norm23) 215 Wave q3,i3,sig3 113 case 3: 114 sprintf cmd , "A_LoadOneDDataToName(\"%s\",\"%s\",%d,%d)",fileStr,"HighQSet",0,1 115 Execute cmd 116 typStr = "HighQSet" 117 trimStr = "TrimHighQSet" 118 begPts = begPts3 119 endPts = endPts3 120 break 121 endswitch 122 123 String typPrefix = "root:"+typStr+":"+typStr 124 String trimPrefix = "root:"+typStr+":"+trimStr 125 126 if (WaveExists($(typPrefix+"_res"))) 127 //6 col data loaded 128 print "6 col data loaded" 129 numCols = 6 130 Duplicate/O $(typPrefix+"_q") $(trimPrefix+"_q") 131 Duplicate/O $(typPrefix+"_i") $(trimPrefix+"_i") 132 Duplicate/O $(typPrefix+"_s") $(trimPrefix+"_s") 133 Duplicate/O $(typPrefix+"_res") $(trimPrefix+"_res") 134 //Trimmed data set 135 Duplicate/O $(typPrefix+"_q"),$(trimPrefix+"_q") 136 Duplicate/O $(typPrefix+"_i"),$(trimPrefix+"_i") 137 Duplicate/O $(typPrefix+"_s"),$(trimPrefix+"_s") 138 WaveStats/Q $(typPrefix+"_q") //get info about the original q-values read in 139 pt = V_npnts-endPts 140 DeletePoints pt,endPts,$(trimPrefix+"_q"),$(trimPrefix+"_i"),$(trimPrefix+"_s") //delete end points first 141 DeletePoints 0,begPts,$(trimPrefix+"_q"),$(trimPrefix+"_i"),$(trimPrefix+"_s") //then delete points from beginning 142 else 143 //Assume 144 //3 col data loaded 145 print "Assuming 3 col data loaded" 146 numcols = 3 147 Duplicate/O $(typPrefix+"_q") $(trimPrefix+"_q") 148 Duplicate/O $(typPrefix+"_i") $(trimPrefix+"_i") 149 Duplicate/O $(typPrefix+"_s") $(trimPrefix+"_s") 150 //Trimmed data set 151 Duplicate/O $(typPrefix+"_q"),$(trimPrefix+"_q") 152 Duplicate/O $(typPrefix+"_i"),$(trimPrefix+"_i") 153 Duplicate/O $(typPrefix+"_s"),$(trimPrefix+"_s") 154 WaveStats/Q $(typPrefix+"_q") //get info about the original q-values read in 155 pt = V_npnts-endPts 156 DeletePoints pt,endPts,$(trimPrefix+"_q"),$(trimPrefix+"_i"),$(trimPrefix+"_s") //delete end points first 157 DeletePoints 0,begPts,$(trimPrefix+"_q"),$(trimPrefix+"_i"),$(trimPrefix+"_s") //then delete points from beginning 158 endif 159 160 switch (setNum) 161 case 1: 162 gColumns1 = numCols 163 break 164 case 2: 165 gColumns2 = numCols 166 break 167 case 3: 168 gColumns3 = numCols 169 break 170 endswitch 171 172 End 173 174 175 Function WriteNSORTedFile(q3,i3,sig3,firstFileName,secondFileName,thirdFileName,normTo,norm12,norm23,[res]) 176 Wave q3,i3,sig3,res 216 177 String firstFileName,secondFileName,thirdFileName,normTo 217 178 Variable norm12,norm23 218 179 219 Variable err=0,refNum 220 String fullPath="" 180 Variable err=0,refNum,numCols 181 String fullPath="",formatStr="" 221 182 //check each wave - else REALLY FATAL error when writing file 222 183 If(!(WaveExists(q3))) … … 233 194 Endif 234 195 196 if(WaveExists(res)) 197 numCols = 6 198 else 199 numCols = 3 200 endif 201 235 202 Variable dialog = 1 236 203 if(dialog) … … 270 237 Close refNum 271 238 endif 272 273 String formatStr = "%15.4g %15.4g %15.4g\r\n"239 240 274 241 //actually open the file 275 242 Open refNum as fullpath … … 284 251 fprintf refNum, "normalized to %s\r\n",normTo 285 252 fprintf refNum, "multiplicative factor 1-2 = %12.8g\t multiplicative factor 2-3 = %12.8g\r\n",norm12,norm23 286 fprintf refnum, "The 3 columns are | Q (1/A) | I(Q) (1/cm) | std. dev. I(Q) (1/cm) |\r\n" 287 wfprintf refnum, formatStr, q3,i3,sig3 253 254 if (numCols == 3) 255 formatStr = "%15.4g %15.4g %15.4g\r\n" 256 fprintf refnum, "The 3 columns are | Q (1/A) | I(Q) (1/cm) | std. dev. I(Q) (1/cm) |\r\n" 257 wfprintf refnum, formatStr, q3,i3,sig3 258 elseif (numCols == 6) 259 Make/O/N=(dimsize(res,0)) sigq3 = res[p][0] 260 Make/O/N=(dimsize(res,0)) qbar3 = res[p][1] 261 Make/O/N=(dimsize(res,0)) fs3 = res[p][2] 262 263 formatStr = "%15.4g %15.4g %15.4g %15.4g %15.4g %15.4g\r\n" 264 fprintf refnum, "The 6 columns are | Q (1/A) | I(Q) (1/cm) | std. dev. I(Q) (1/cm) | sigmaQ | meanQ | ShadowFactor|\r\n" 265 wfprintf refnum, formatStr, q3,i3,sig3,sigq3,qbar3,fs3 266 endif 288 267 289 268 Close refnum … … 292 271 End 293 272 294 //writes out the NSORTed file, includeing header information about how the file 295 //was generated - from which files, and how it was normalized 296 //protocol info makes no sense here - go back to the original, separate files 297 //if you want to know that information 298 // 299 // this is the 6-column version - there's a separate function for 3-column data 300 //will ALWAYS prompt for a filename 301 // 302 Function Write6ColNSORTedFile(q3,i3,sig3,sq3,qb3,fs3,firstFileName,secondFileName,thirdFileName,normTo,norm12,norm23) 303 Wave q3,i3,sig3,sq3,qb3,fs3 304 String firstFileName,secondFileName,thirdFileName,normTo 305 Variable norm12,norm23 306 307 Variable err=0,refNum 308 String fullPath="" 309 //check each wave - else REALLY FATAL error when writing file 310 If(!(WaveExists(q3))) 311 err = 1 312 return err 313 Endif 314 If(!(WaveExists(i3))) 315 err = 1 316 return err 317 Endif 318 If(!(WaveExists(sig3))) 319 err = 1 320 return err 321 Endif 322 If(!(WaveExists(sq3))) 323 err = 1 324 return err 325 Endif 326 If(!(WaveExists(qb3))) 327 err = 1 328 return err 329 Endif 330 If(!(WaveExists(fs3))) 331 err = 1 332 return err 333 Endif 334 335 Variable dialog = 1 336 // 05SEP05 SRK -- added to automatically combine files from a table - see the end of NSORT.ipf for details 337 // - use the flag set in DoCombineFiles() to decide if the table entries should be used 338 // root:myGlobals:CombineTable:useTable= (1) (0) 339 //if(exists("root:myGlobals:CombineTable:SaveName")) 340 NVAR/Z useTable = root:myGlobals:CombineTable:useTable 341 if(NVAR_Exists(useTable) && useTable==1) 342 SVAR str=$"root:myGlobals:CombineTable:SaveNameStr" //messy, but pass in as a global 343 fullPath = str 344 // String str2 = "Is the file name "+str+" correct?" 345 // DoAlert 1,str2 346 // if(V_flag==1) 347 dialog=0 //bypass the dialog if the name is good 348 // endif 349 endif 350 351 if(dialog) 352 PathInfo/S catPathName 353 fullPath = DoSaveFileDialog("Save data as") //won't actually open the file 354 If(cmpstr(fullPath,"")==0) 355 //user cancel, don't write out a file 356 Close/A 357 Abort "no data file was written" 358 Endif 359 //Print "dialog fullpath = ",fullpath 360 Endif 361 362 // read in the header information from each of the combined files and put this information in the file header 363 String dum,hdr1="none\r\n",hdr2="none\r\n",hdr3="none\r\n" 364 PathInfo catPathName 365 366 // the first file exists, check anyways 367 if(cmpstr(firstFileName,"none") !=0) 368 Open/R refNum as S_Path+firstFileName 369 FReadLine refNum, dum 370 FReadLine refNum, hdr1 //just grab the second line 371 Close refNum 372 endif 373 //second file 374 if(cmpstr(secondFileName,"none") !=0) 375 Open/R refNum as S_Path+secondFileName 376 FReadLine refNum, dum 377 FReadLine refNum, hdr2 //just grab the second line 378 Close refNum 379 endif 380 // third file 381 if(cmpstr(thirdFileName,"none") !=0) 382 Open/R refNum as S_Path+thirdFileName 383 FReadLine refNum, dum 384 FReadLine refNum, hdr3 //just grab the second line 385 Close refNum 386 endif 387 388 389 String formatStr = "%15.4g %15.4g %15.4g %15.4g %15.4g %15.4g\r\n" 390 //actually open the file 391 Open refNum as fullpath 392 393 fprintf refnum, "COMBINED FILE CREATED: %s \r\n",date() 394 395 fprintf refnum, "FIRST File %s",hdr1 //new, Mar 2008 396 fprintf refnum, "SECOND File %s",hdr2 //new, Mar 2008 397 fprintf refnum, "THIRD File %s",hdr3 //new, Mar 2008 398 399 fprintf refNum, "NSORT-ed %s \t + %s\t + %s\r\n",firstFileName, secondFileName,thirdFileName 400 fprintf refNum, "normalized to %s\r\n",normTo 401 fprintf refNum, "multiplicative factor 1-2 = %12.8g\t multiplicative factor 2-3 = %12.8g\r\n",norm12,norm23 402 fprintf refnum, "The 6 columns are | Q (1/A) | I(Q) (1/cm) | std. dev. I(Q) (1/cm) | sigmaQ | meanQ | ShadowFactor|\r\n" 403 wfprintf refnum, formatStr, q3,i3,sig3,sq3,qb3,fs3 404 405 Close refnum 406 407 Return err 408 End 273 274 275 409 276 410 277 //gets the scaling constant to make (best) overlap of the specified datasets … … 469 336 //clean up the temporary waves in the root: folder 470 337 SetDataFolder root: 471 472 KillWaves/Z LowQSet_q,LowQSet_i,LowQSet_s,LowQSet_sq,LowQSet_qb,LowQSet_fs 473 KillWaves/Z TrimLowQSet_q,TrimLowQSet_i,TrimLowQSet_s,TrimLowQSet_sq,TrimLowQSet_qb,TrimLowQSet_fs 474 KillWaves/Z MedQSet_q,MedQSet_i,MedQSet_s,MedQSet_sq,MedQSet_qb,MedQSet_fs 475 KillWaves/Z TrimMedQSet_q,TrimMedQSet_i,TrimMedQSet_s,TrimMedQSet_sq,TrimMedQSet_qb,TrimMedQSet_fs 476 KillWaves/Z HighQSet_q,HighQSet_i,HighQSet_s,HighQSet_sq,HighQSet_qb,HighQSet_fs 477 KillWaves/Z TrimHighQSet_q,TrimHighQSet_i,TrimHighQSet_s,TrimHighQSet_sq,TrimHighQSet_qb,TrimHighQSet_fs 338 339 KillDataFolder/Z LowQSet 340 KillDataFolder/Z MedQSet 341 KillDataFolder/Z HighQSet 478 342 479 343 End … … 595 459 //function assumes that the window "NSORT_Graph" already exists 596 460 DoWindow/F NSORT_Graph 461 SetDataFolder root:HighQSet: 597 462 AppendToGraph $"HighQSet_i" vs $"HighQSet_q" 598 463 ModifyGraph log=1,mode=3,marker($"HighQSet_i")=8,msize=2,rgb($"HighQSet_i")=(0,0,65535),opaque($"HighQSet_i")=1 … … 600 465 AppendToGraph $"TrimHighQSet_i" vs $"TrimHighQSet_q" 601 466 ModifyGraph mode($"TrimHighQSet_i")=3,marker($"TrimHighQSet_i")=19,msize=2,rgb($"TrimHighQSet_i")=(0,0,65535) 467 SetDataFolder root: 602 468 End 603 469 … … 608 474 //function assumes that the window "NSORT_Graph" already exists 609 475 DoWindow/F NSORT_Graph 476 SetDataFolder root:MedQSet: 610 477 AppendToGraph $"MedQSet_i" vs $"MedQSet_q" 611 478 ModifyGraph log=1,mode=3,marker($"MedQSet_i")=8,msize=2,rgb($"MedQSet_i")=(65535,0,0),opaque($"MedQSet_i")=1 … … 613 480 AppendToGraph $"TrimMedQSet_i" vs $"TrimMedQSet_q" 614 481 ModifyGraph mode($"TrimMedQSet_i")=3,marker($"TrimMedQSet_i")=19,msize=2,rgb($"TrimMedQSet_i")=(65535,0,0) 482 SetDataFolder root: 615 483 End 616 484 … … 621 489 //function assumes that the window "NSORT_Graph" already exists 622 490 DoWindow/F NSORT_Graph 491 SetDataFolder root:LowQSet: 623 492 AppendToGraph $"LowQSet_i" vs $"LowQSet_q" 624 493 ModifyGraph log=1,mode=3,marker($"LowQSet_i")=8,msize=2,rgb($"LowQSet_i")=(2,39321,1),opaque($"LowQSet_i")=1 … … 626 495 AppendToGraph $"TrimLowQSet_i" vs $"TrimLowQSet_q" 627 496 ModifyGraph mode($"TrimLowQSet_i")=3,marker($"TrimLowQSet_i")=19,msize=2,rgb($"TrimLowQSet_i")=(2,39321,1) 497 SetDataFolder root: 628 498 End 629 499 … … 728 598 729 599 //send just the trimmed (LowQ) set to be written out 730 WAVE lowq = $"TrimLowQSet_q" 731 WAVE lowi = $"TrimLowQSet_i" 732 WAVE lows = $"TrimLowQSet_s" 733 WAVE/Z lowsq = $"TrimLowQSet_sq" //these may not exist 734 WAVE/Z lowqb = $"TrimLowQSet_qb" 735 WAVE/Z lowfs = $"TrimLowQSet_fs" 600 WAVE lowq = $"root:LowQSet:TrimLowQSet_q" 601 WAVE lowi = $"root:LowQSet:TrimLowQSet_i" 602 WAVE lows = $"root:LowQSet:TrimLowQSet_s" 603 // WAVE/Z lowsq = $"root:LowQSet:TrimLowQSet_sq" //these may not exist 604 // WAVE/Z lowqb = $"root:LowQSet:TrimLowQSet_qb" 605 // WAVE/Z lowfs = $"root:LowQSet:TrimLowQSet_fs" 606 WAVE/Z lowres = $"root:LowQSet:TrimLowQSet_res" 736 607 NVAR scaleFactor= root:myGlobals:NSORT:gScale1_2 737 608 … … 747 618 ControlInfo/W=NSORT_Panel popup_1 748 619 if(isAThree) 749 Write 3ColNSORTedFile(lowq,lowi,lows,S_Value,"none","none",S_Value,scaleFactor,1)620 WriteNSORTedFile(lowq,lowi,lows,S_Value,"none","none",S_Value,scaleFactor,1) 750 621 else 751 Write 6ColNSORTedFile(lowq,lowi,lows,lowsq,lowqb,lowfs,S_Value,"none","none",S_Value,scaleFactor,1)622 WriteNSORTedFile(lowq,lowi,lows,S_Value,"none","none",S_Value,scaleFactor,1,res=lowres) 752 623 endif 753 624 // just get the new list and return - don't actually "pop" the menu, or the selected item will change … … 1077 948 //order points in sets 1-2, indexing overlap region 1078 949 //put result in temporary waves 1079 WaveStats/Q $" TrimLowQSet_q"950 WaveStats/Q $"root:LowQSet:TrimLowQSet_q" 1080 951 n1 = V_npnts 1081 WaveStats/Q $" TrimMedQSet_q"952 WaveStats/Q $"root:LowQSet:TrimMedQSet_q" 1082 953 n2 = V_npnts 1083 954 n12 = n1+ n2 1084 955 1085 956 Make/O/N=(n12) q12,i12,sig12 1086 WAVE lowq = $" TrimLowQSet_q"1087 WAVE medq = $" TrimMedQSet_q"1088 WAVE lowi = $" TrimLowQSet_i"1089 WAVE medi = $" TrimMedQSet_i"1090 WAVE lows = $" TrimLowQSet_s"1091 WAVE meds = $" TrimMedQSet_s"957 WAVE lowq = $"root:LowQSet:TrimLowQSet_q" 958 WAVE medq = $"root:MedQSet:TrimMedQSet_q" 959 WAVE lowi = $"root:LowQSet:TrimLowQSet_i" 960 WAVE medi = $"root:MedQSet:TrimMedQSet_i" 961 WAVE lows = $"root:LowQSet:TrimLowQSet_s" 962 WAVE meds = $"root:MedQSet:TrimMedQSet_s" 1092 963 q12[0,n1-1] = lowq[p] 1093 964 q12[n1,n1+n2-1]= medq[p-n1] … … 1160 1031 ControlInfo/W=NSORT_Panel PreviewCheck 1161 1032 if( V_Value==0 ) //if zero skip the preview and write out the file 1162 err=Write 3ColNSORTedFile(q12,i12,sig12,name1,name2,name3,normToStr,norm12,norm23)1033 err=WriteNSORTedFile(q12,i12,sig12,name1,name2,name3,normToStr,norm12,norm23) 1163 1034 endif 1164 1035 //cleanup waves before exiting … … 1173 1044 WaveStats/Q q12 1174 1045 n12 = V_npnts 1175 WaveStats/Q $" TrimHighQSet_q"1046 WaveStats/Q $"root:HighQSet:TrimHighQSet_q" 1176 1047 n3 = V_npnts 1177 1048 n123 = n12+ n3 1178 1049 1179 1050 Make/O/N=(n123) q123,i123,sig123 1180 WAVE highq = $" TrimHighQSet_q"1181 WAVE highi = $" TrimHighQSet_i"1182 WAVE highs = $" TrimHighQSet_s"1051 WAVE highq = $"root:HighQSet:TrimHighQSet_q" 1052 WAVE highi = $"root:HighQSet:TrimHighQSet_i" 1053 WAVE highs = $"root:HighQSet:TrimHighQSet_s" 1183 1054 1184 1055 q123[0,n12-1] = q12[p] … … 1245 1116 ControlInfo/W=NSORT_Panel PreviewCheck 1246 1117 if( V_Value==0 ) //if zero skip the preview and write out the file 1247 err=Write 3ColNSORTedFile(q123,i123,sig123,name1,name2,name3,normToStr,norm12,norm23)1118 err=WriteNSORTedFile(q123,i123,sig123,name1,name2,name3,normToStr,norm12,norm23) 1248 1119 endif 1249 1120 //cleanup waves before exiting … … 1258 1129 //order points in sets 1-2, indexing overlap region 1259 1130 //put result in temporary waves 1260 WaveStats/Q $" TrimLowQSet_q"1131 WaveStats/Q $"root:LowQSet:TrimLowQSet_q" 1261 1132 n1 = V_npnts 1262 WaveStats/Q $" TrimMedQSet_q"1133 WaveStats/Q $"root:MedQSet:TrimMedQSet_q" 1263 1134 n2 = V_npnts 1264 1135 n12 = n1+ n2 1265 1136 1266 1137 Make/O/N=(n12) q12,i12,sig12,sq12,qb12,fs12 1267 WAVE lowq = $"TrimLowQSet_q" 1268 WAVE medq = $"TrimMedQSet_q" 1269 WAVE lowi = $"TrimLowQSet_i" 1270 WAVE medi = $"TrimMedQSet_i" 1271 WAVE lows = $"TrimLowQSet_s" 1272 WAVE meds = $"TrimMedQSet_s" 1273 WAVE lowsq = $"TrimLowQSet_sq" 1274 WAVE medsq = $"TrimMedQSet_sq" 1275 WAVE lowqb = $"TrimLowQSet_qb" 1276 WAVE medqb = $"TrimMedQSet_qb" 1277 WAVE lowfs = $"TrimLowQSet_fs" 1278 WAVE medfs = $"TrimMedQSet_fs" 1279 1138 Make/O/N=(n12,3) res12 1139 WAVE lowq = $"root:LowQSet:TrimLowQSet_q" 1140 WAVE medq = $"root:MedQSet:TrimMedQSet_q" 1141 WAVE lowi = $"root:LowQSet:TrimLowQSet_i" 1142 WAVE medi = $"root:MedQSet:TrimMedQSet_i" 1143 WAVE lows = $"root:LowQSet:TrimLowQSet_s" 1144 WAVE meds = $"root:MedQSet:TrimMedQSet_s" 1145 // WAVE lowsq = $"root:LowQSet:TrimLowQSet_sq" 1146 // WAVE medsq = $"root:MedQSet:TrimMedQSet_sq" 1147 // WAVE lowqb = $"root:LowQSet:TrimLowQSet_qb" 1148 // WAVE medqb = $"root:MedQSet:TrimMedQSet_qb" 1149 // WAVE lowfs = $"root:LowQSet:TrimLowQSet_fs" 1150 // WAVE medfs = $"root:MedQSet:TrimMedQSet_fs" 1151 WAVE lowres = $"root:LowQSet:TrimLowQSet_res" 1152 WAVE medres = $"root:MedQSet:TrimMedQSet_res" 1153 1280 1154 q12[0,n1-1] = lowq[p] 1281 1155 q12[n1,n1+n2-1]= medq[p-n1] … … 1284 1158 sig12[0,n1-1] = lows[p] 1285 1159 sig12[n1,n1+n2-1]= meds[p-n1] 1286 sq12[0,n1-1] = lowsq[p] 1287 sq12[n1,n1+n2-1]= medsq[p-n1] 1288 qb12[0,n1-1] = lowqb[p] 1289 qb12[n1,n1+n2-1]= medqb[p-n1] 1290 fs12[0,n1-1] = lowfs[p] 1291 fs12[n1,n1+n2-1]= medfs[p-n1] 1160 sq12[0,n1-1] = lowres[p][0] 1161 sq12[n1,n1+n2-1]= medres[p-n1][0] 1162 qb12[0,n1-1] = lowres[p][1] 1163 qb12[n1,n1+n2-1]= medres[p-n1][1] 1164 fs12[0,n1-1] = lowres[p][2] 1165 fs12[n1,n1+n2-1]= medres[p-n1][2] 1166 // res12[0,n1-1][0]=lowres[p][0] 1167 // res12[n1,n1+n2-1][0]=medres[p-n1][0] 1168 // res12[0,n1-1][1]=lowres[p][1] 1169 // res12[n1,n1+n2-1][1]=medres[p-n1][1] 1170 // res12[0,n1-1][2]=lowres[p][2] 1171 // res12[n1,n1+n2-1][2]=medres[p-n1][2] 1172 1292 1173 1293 1174 Sort q12, q12,i12,sig12,sq12,qb12,fs12 … … 1334 1215 //Make the combined, scaled dataset by overwriting the old sets 1335 1216 Make/O/N=(n12) q12,i12,sig12,sq12,qb12,fs12 1217 Make/O/N=(n12,3) res12 1336 1218 q12[0,n1-1] = lowq[p] 1337 1219 q12[n1,n1+n2-1]= medq[p-n1] … … 1340 1222 sig12[0,n1-1] = lows[p] 1341 1223 sig12[n1,n1+n2-1]= meds[p-n1] 1342 sq12[0,n1-1] = lowsq[p] 1343 sq12[n1,n1+n2-1]= medsq[p-n1] 1344 qb12[0,n1-1] = lowqb[p] 1345 qb12[n1,n1+n2-1]= medqb[p-n1] 1346 fs12[0,n1-1] = lowfs[p] 1347 fs12[n1,n1+n2-1]= medfs[p-n1] 1224 sq12[0,n1-1] = lowres[p][0] 1225 sq12[n1,n1+n2-1]= medres[p-n1][0] 1226 qb12[0,n1-1] = lowres[p][1] 1227 qb12[n1,n1+n2-1]= medres[p-n1][1] 1228 fs12[0,n1-1] = lowres[p][2] 1229 fs12[n1,n1+n2-1]= medres[p-n1][2] 1230 // res12[0,n1-1][0]=lowres[p][0] 1231 // res12[n1,n1+n2-1][0]=medres[p-n1][0] 1232 // res12[0,n1-1][1]=lowres[p][1] 1233 // res12[n1,n1+n2-1][1]=medres[p-n1][1] 1234 // res12[0,n1-1][2]=lowres[p][2] 1235 // res12[n1,n1+n2-1][2]=medres[p-n1][2] 1236 1348 1237 1349 1238 Sort q12, q12,i12,sig12,sq12,qb12,fs12 … … 1358 1247 if( V_Value==0 ) //if zero skip the preview and write out the file 1359 1248 //If any of them have three columns write three column data 1360 err=Write 6ColNSORTedFile(q12,i12,sig12,sq12,qb12,fs12,name1,name2,name3,normToStr,norm12,norm23)1249 err=WriteNSORTedFile(q12,i12,sig12,name1,name2,name3,normToStr,norm12,norm23) 1361 1250 endif 1362 1251 // always clean up waves before exiting … … 1371 1260 WaveStats/Q q12 1372 1261 n12 = V_npnts 1373 WaveStats/Q $" TrimHighQSet_q"1262 WaveStats/Q $"root:HighQSet:TrimHighQSet_q" 1374 1263 n3 = V_npnts 1375 1264 n123 = n12+ n3 1376 1265 1377 1266 Make/O/N=(n123) q123,i123,sig123,sq123,qb123,fs123 1378 WAVE highq = $"TrimHighQSet_q" 1379 WAVE highi = $"TrimHighQSet_i" 1380 WAVE highs = $"TrimHighQSet_s" 1381 WAVE highsq = $"TrimHighQSet_sq" 1382 WAVE highqb = $"TrimHighQSet_qb" 1383 WAVE highfs = $"TrimHighQSet_fs" 1267 Make/O/N=(n123,3) res123 1268 WAVE highq = $"root:HighQSet:TrimHighQSet_q" 1269 WAVE highi = $"root:HighQSet:TrimHighQSet_i" 1270 WAVE highs = $"root:HighQSet:TrimHighQSet_s" 1271 // WAVE highsq = $"root:HighQSet:TrimHighQSet_sq" 1272 // WAVE highqb = $"root:HighQSet:TrimHighQSet_qb" 1273 // WAVE highfs = $"root:HighQSet:TrimHighQSet_fs" 1274 WAVE highres = $"root:HighQSet:TrimHighQSet_res" 1275 1384 1276 1385 1277 q123[0,n12-1] = q12[p] … … 1390 1282 sig123[n1,n12+n3-1]= highs[p-n12] 1391 1283 sq123[0,n12-1] = sq12[p] 1392 sq123[n1,n12+n3-1]= high sq[p-n12]1284 sq123[n1,n12+n3-1]= highres[p-n12][0] 1393 1285 qb123[0,n12-1] = qb12[p] 1394 qb123[n1,n12+n3-1]= high qb[p-n12]1286 qb123[n1,n12+n3-1]= highres[p-n12][1] 1395 1287 fs123[0,n12-1] = fs12[p] 1396 fs123[n1,n12+n3-1]= highfs[p-n12] 1288 fs123[n1,n12+n3-1]= highres[p-n12][2] 1289 // res123[0,n12-1][0] = highres[p][0] 1290 // res123[n1,n12+n3-1][0] = highres[p-n12][0] 1291 // res123[0,n12-1][1] = highres[p][1] 1292 // res123[n1,n12+n3-1][1] = highres[p-n12][1] 1293 // res123[0,n12-1][2] = highres[p][2] 1294 // res123[n1,n12+n3-1][2] = highres[p-n12][2] 1295 1397 1296 1398 1297 Sort q123, q123,i123,sig123,sq123,qb123,fs123 … … 1436 1335 DoUpdate 1437 1336 1438 Make/O/N=(n123) q123,i123,sig123,sq123,qb123,fs123 1337 Make/O/N=(n123) q123,i123,sig123 1338 Make/O/N=(n123,3) res123 1439 1339 q123[0,n12-1] = q12[p] 1440 1340 q123[n12,n12+n3-1]= highq[p-n12] … … 1444 1344 sig123[n12,n12+n3-1]= highs[p-n12] 1445 1345 sq123[0,n12-1] = sq12[p] 1446 sq123[n12,n12+n3-1]= high sq[p-n12]1346 sq123[n12,n12+n3-1]= highres[p-n12][0] 1447 1347 qb123[0,n12-1] = qb12[p] 1448 qb123[n12,n12+n3-1]= high qb[p-n12]1348 qb123[n12,n12+n3-1]= highres[p-n12][1] 1449 1349 fs123[0,n12-1] = fs12[p] 1450 fs123[n12,n12+n3-1]= highfs[p-n12] 1350 fs123[n12,n12+n3-1]= highres[p-n12][2] 1351 // res123[0,n12-1][0] = highres[p][0] 1352 // res123[n1,n12+n3-1][0] = highres[p-n12][0] 1353 // res123[0,n12-1][1] = highres[p][1] 1354 // res123[n1,n12+n3-1][1] = highres[p-n12][1] 1355 // res123[0,n12-1][2] = highres[p][2] 1356 // res123[n1,n12+n3-1][2] = highres[p-n12][2] 1451 1357 1452 1358 Sort q123, q123,i123,sig123,sq123,qb123,fs123 … … 1456 1362 ControlInfo/W=NSORT_Panel PreviewCheck 1457 1363 if( V_Value==0 ) //if zero skip the preview and write out the file 1458 err=Write6ColNSORTedFile(q123,i123,sig123,sq123,qb123,fs123,name1,name2,name3,normToStr,norm12,norm23) 1364 res123[][0] = sq123[p] 1365 res123[][1] = qb123[p] 1366 res123[][2] = fs123[p] 1367 err=WriteNSORTedFile(q123,i123,sig123,name1,name2,name3,normToStr,norm12,norm23,res=res123) 1459 1368 endif 1460 1369 //cleanup waves before exiting 1461 KillWaves/Z q12,i12,sig12, sq12,qb12,fs12,q123,i123,sig123,sq123,qb123,fs1231370 KillWaves/Z q12,i12,sig12,q123,i123,sig123,sq123,qb123,fs123 //,res123 1462 1371 //combined dataset will already be displayed if the NSORT_Graph is open 1463 1372
Note: See TracChangeset
for help on using the changeset viewer.