Ignore:
Timestamp:
Apr 24, 2018 3:55:39 PM (5 years ago)
Author:
srkline
Message:

added procedures to compare files to see if they are from the same configuration, same wavelength, etc. so they can be properly chosen for transmission files, scattering files, and properly identified for the different resolution conditions.

Re-worked the logic of dispatching averaging, plotting, and saving in Execute_Protocol. Hopefully this will alow for easier dispatching for future conditions, including getting the correct resolution calculation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Protocol_Reduction.ipf

    r1095 r1097  
    782782        newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
    783783        newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
     784        newList = V_RemoveEXTFromList(newlist,"phi")            // remove the phi files 
    784785        newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
    785786        newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
     
    828829        newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
    829830        newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
     831        newList = V_RemoveEXTFromList(newlist,"phi")            // remove the phi files 
    830832        newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
    831833        newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
     
    12851287 
    12861288//      Prompt av_typ, "Type of Average",popup,"Circular;Sector;Rectangular;Annular;2D_ASCII;QxQy_ASCII;PNG_Graphic;Sector_PlusMinus;" 
    1287         Prompt av_typ, "Type of Average",popup,"Circular;Annular;" 
     1289        Prompt av_typ, "Type of Average",popup,"Circular;Narrow_Slit;Annular;" 
    12881290 
    12891291// comment out above line in DEMO_MODIFIED version, and uncomment the line below (to disable PNG save) 
     
    13081310        // TODO: 
    13091311        // hard wired value 
    1310         String autoPlot = "No" 
     1312        String autoPlot = "Yes" 
    13111313         
    13121314                 
     
    23092311        Endif 
    23102312         
    2311         //convert the folder to linear scale before averaging, then revert by calling the window hook 
    2312         // (not needed for VSANS, data is always linear scale) 
    2313  
    2314         // bin and plot the data 
    2315          
     2313//convert the folder to linear scale before averaging, then revert by calling the window hook 
     2314// (not needed for VSANS, data is always linear scale) 
     2315 
    23162316// 
    23172317//       x- need to convert BINTYPE keyword into a numerical value to pass 
     
    23332333        endif 
    23342334 
     2335 
     2336// identify the collimation type 
     2337// this will be a string used to determine how the resolution information is to be calculated 
     2338// and written to the reduced data file 
     2339// 
     2340// possible values are: 
     2341// 
     2342// pinhole 
     2343// pinhole_whiteBeam 
     2344// narrowSlit 
     2345// narrowSlit_whiteBeam 
     2346// convergingPinholes 
     2347// 
     2348 
     2349        String collimationStr 
     2350        collimationStr = V_IdentifyCollimation(activeType) 
     2351 
     2352 
     2353 
     2354//////////////////////////////////////// 
     2355// dispatch to averaging and resolution 
     2356///////////////////////////////////////// 
    23352357// 
    23362358// TODO: 
     
    23482370                case "none":             
    23492371                        //still do nothing 
     2372                        // set binType and binTypeStr to bad flags 
     2373                        binTypeStr = "none" 
     2374                        binType = -999999 
    23502375                        break                    
     2376 
     2377                case "Circular": 
     2378                        V_QBinAllPanels_Circular(activeType,binType,collimationStr)             // this does a default circular average 
     2379                        break 
     2380                         
     2381                case "Sector": 
     2382//                      CircularAverageTo1D(activeType) 
     2383                        break 
     2384                case "Sector_PlusMinus": 
     2385//                      Sector_PlusMinus1D(activeType) 
     2386                        break 
     2387                case "Rectangular": 
     2388//                      RectangularAverageTo1D(activeType) 
     2389                        break 
     2390 
     2391                case "Annular": 
     2392                        String detGroup = StringByKey("DETGROUP",prot[5],"=",";") 
     2393                        Variable qCtr_Ann = NumberByKey("QCENTER",prot[5],"=",";") 
     2394                        Variable qWidth = NumberByKey("QDELTA",prot[5],"=",";") 
     2395                        V_QBinAllPanels_Annular(activeType,detGroup,qCtr_Ann,qWidth) 
     2396                        break 
     2397 
     2398                case "Narrow_Slit": 
     2399                        V_QBinAllPanels_Slit(activeType,binType)                // this does a tall, narrow slit average 
     2400                        break 
     2401                         
    23512402                case "2D_ASCII":         
    23522403                        //do nothing 
     
    23582409                        //do nothing 
    23592410                        break 
    2360                 case "Rectangular": 
    2361 //                      RectangularAverageTo1D(activeType) 
    2362                         break 
    2363                 case "Annular": 
    2364 //                      AnnularAverageTo1D(activeType) 
    2365                         String detGroup = StringByKey("DETGROUP",prot[5],"=",";") 
    2366                         Variable qCtr_Ann = NumberByKey("QCENTER",prot[5],"=",";") 
    2367                         Variable qWidth = NumberByKey("QDELTA",prot[5],"=",";") 
    2368                         V_QBinAllPanels_Annular(activeType,detGroup,qCtr_Ann,qWidth) 
    2369                         break 
    2370                 case "Circular": 
    2371  
    2372                         V_QBinAllPanels_Circular(activeType,binType)            // this does a default circular average 
    2373                         break 
    2374                 case "Sector": 
    2375 //                      CircularAverageTo1D(activeType) 
    2376                         break 
    2377                 case "Sector_PlusMinus": 
    2378 //                      Sector_PlusMinus1D(activeType) 
    2379                         break 
    23802411                default:         
    23812412                        //do nothing 
    23822413        endswitch 
    23832414 
    2384 // DONE 
    2385 // x- this call will bin the active type, then the next call bins the active type 
    2386 // x- then later, I dispatch to bin the active type...   
    2387 // x- !!!need to split out the panel draw and the binning calls from V_PlotData_Panel 
    2388 // 
    2389 // TODO: 
    2390 // -- BAD logic here, skipping the normal graph if annular is chosen. Go back and see how I do this 
    2391 // in SANS for a better and more foolproof way to do this 
    2392 // x- don't draw the graph if "none" is the average type! 
    2393         // 
    2394         if(cmpstr(av_type,"Annular") != 0 && (cmpstr(av_type,"none") != 0) ) 
    2395                 V_PlotData_Panel()              //this brings the plot window to the front, or draws it (ONLY) 
    2396                 V_Update1D_Graph(activeType,binType)            //update the graph, data was already binned 
    2397         endif 
    2398 ///// end of averaging dispatch 
    2399  
     2415 
     2416 
     2417//////////////////////// 
     2418// plotting of the data, another strswitch (with an if() out front) 
     2419//////////////////////// 
     2420 
     2421        String doPlot = StringByKey("PLOT",prot[5],"=",";") 
     2422         
     2423        If( (cmpstr(doPlot,"Yes")==0) && (cmpstr(av_type,"none") != 0) )         
     2424                 
     2425                strswitch(av_type)      //dispatch to the proper routine to PLOT 1D data 
     2426                        case "none":             
     2427                                //still do nothing 
     2428                                break                    
     2429 
     2430                        case "Circular": 
     2431                                V_PlotData_Panel()              //this brings the plot window to the front, or draws it (ONLY) 
     2432                                V_Update1D_Graph(activeType,binType)            //update the graph, data was already binned                              
     2433                                break 
     2434                        case "Sector": 
     2435        //                      CircularAverageTo1D(activeType) 
     2436                                break 
     2437                        case "Sector_PlusMinus": 
     2438        //                      Sector_PlusMinus1D(activeType) 
     2439                                break 
     2440                        case "Rectangular": 
     2441        //                      RectangularAverageTo1D(activeType) 
     2442                                break 
     2443 
     2444                        case "Annular": 
     2445                                V_Phi_Graph_Proc(activeType,detGroup) 
     2446                                break 
     2447 
     2448                        case "Narrow_Slit": 
     2449                        // these are the same plotting routines as for standard circular average 
     2450                                V_PlotData_Panel()              //this brings the plot window to the front, or draws it (ONLY) 
     2451                                V_Update1D_Graph(activeType,binType)            //update the graph, data was already binned 
     2452                                break 
     2453                         
     2454                        case "2D_ASCII":         
     2455                                //do nothing 
     2456                                break 
     2457                        case "QxQy_ASCII": 
     2458                                //do nothing 
     2459                                break 
     2460                        case "PNG_Graphic": 
     2461                                //do nothing 
     2462                                break 
     2463                        default:         
     2464                                //do nothing 
     2465                endswitch 
     2466 
     2467        endif           // end of plotting switch 
     2468 
     2469 
     2470 
     2471////////////////////     
     2472//save data if desired - dispatch as needed 
     2473//////////////////// 
    24002474 
    24012475//  
    24022476// x- how do I get the sample file name? 
    24032477//    local variable samFileLoaded is the file name loaded (contains the extension) 
    2404 //       
    2405         //save data if desired - dispatch as needed 
     2478// 
    24062479        String fullpath = "", newfileName="" 
    24072480        String saveType = StringByKey("SAVE",prot[5],"=",";")           //does user want to save data? 
     
    24162489                        exten = "AVE" 
    24172490                endif 
    2418                 if(cmpstr(av_type,"2D_ASCII") == 0) 
    2419                         exten = "ASC" 
    2420                 endif 
    2421                 if(cmpstr(av_type,"QxQy_ASCII") == 0) 
    2422                         exten = "DAT" 
    2423                 endif 
     2491//              if(cmpstr(av_type,"2D_ASCII") == 0) 
     2492//                      exten = "ASC" 
     2493//              endif 
     2494//              if(cmpstr(av_type,"QxQy_ASCII") == 0) 
     2495//                      exten = "DAT" 
     2496//              endif 
    24242497                 
    24252498//              // add an "x" to the file extension if the output is XML 
     
    24552528                strswitch(av_type)       
    24562529                        case "Annular": 
    2457 //                              WritePhiave_W_Protocol(activeType,fullPath,dialog) 
    24582530                                V_fWrite1DAnnular("root:Packages:NIST:VSANS:",activeType,detGroup,newFileName+".phi") 
    24592531                                Print "data written to:  "+ newFileName+".phi" 
    24602532 
    24612533                                break 
    2462                         case "2D_ASCII": 
     2534 
     2535                        case "Circular":                //in SANS, this was the default, but is dangerous, so make it explicit here 
     2536                        case "Sector":          // TODO: this falls through - which luckily works for now... 
     2537                        case "Rectangular":             // TODO: this falls through - which luckily works for now... 
     2538                        case "Narrow_Slit":             // TODO: this falls through - which luckily works for now... 
     2539 
     2540// no VSANS support of XML output at this point                  
     2541//                              if (useXMLOutput == 1) 
     2542//                                      WriteXMLWaves_W_Protocol(activeType,fullPath,dialog) 
     2543//                              else 
     2544//                                      WriteWaves_W_Protocol(activeType,fullpath,dialog) 
     2545//                              endif 
     2546// 
     2547                                if(cmpstr(saveType,"Yes - Concatenate")==0) 
     2548                                        V_Trim1DDataStr(activeType,binType,prot[7],prot[8])                     // x- passing null strings uses global or default trim values 
     2549 
     2550                                        V_ConcatenateForSave("root:Packages:NIST:VSANS:",activeType,"",binType)         // this removes q=0 point, concatenates, sorts 
     2551                                        V_Write1DData("root:Packages:NIST:VSANS:",activeType,newFileName+"."+exten)             //don't pass the full path, just the name 
     2552                                endif 
     2553                                 
     2554                                if(cmpstr(saveType,"Yes - Individual")==0) 
     2555                                        // remove the q=0 point from the back detector, if it's there 
     2556                                        // does not trim any other points from the data 
     2557                                        V_RemoveQ0_B(activeType) 
     2558                                        V_Write1DData_ITX("root:Packages:NIST:VSANS:",activeType,newFileName,binType) 
     2559                                endif 
     2560                                Print "data written to:  "+ newFileName+"."+exten 
     2561 
     2562                                break 
     2563         
     2564                                 
     2565                                case "2D_ASCII": 
    24632566//                              Fast2DExport(activeType,fullPath,dialog) 
    24642567                                break 
     
    24692572//                              SaveAsPNG(activeType,fullpath,dialog) 
    24702573                                break 
    2471                         case "Circular":                //in SANS, this was the default, but is dangerous, so make it explicit here 
    2472 //                              if (useXMLOutput == 1) 
    2473 //                                      WriteXMLWaves_W_Protocol(activeType,fullPath,dialog) 
    2474 //                              else 
    2475 //                                      WriteWaves_W_Protocol(activeType,fullpath,dialog) 
    2476 //                              endif 
    2477 // 
    2478 // x- get the trim strings from somewhere-- from the file or from the protocol?? 
    2479 //   then replace the null strings being passed 
    2480  
    2481                                 if(cmpstr(saveType,"Yes - Concatenate")==0) 
    2482                                         V_Trim1DDataStr(activeType,binType,prot[7],prot[8])                     // x- passing null strings uses global or default trim values 
    2483  
    2484                                         V_ConcatenateForSave("root:Packages:NIST:VSANS:",activeType,"",binType)         // this removes q=0 point, concatenates, sorts 
    2485                                         V_Write1DData("root:Packages:NIST:VSANS:",activeType,newFileName+"."+exten)             //don't pass the full path, just the name 
    2486                                 else 
    2487                                         // remove the q=0 point from the back detector, if it's there 
    2488                                         // does not trim any of the data 
    2489                                         V_RemoveQ0_B(activeType) 
    2490                                         V_Write1DData_ITX("root:Packages:NIST:VSANS:",activeType,newFileName,binType) 
    2491                                 endif 
    2492                                 Print "data written to:  "+ newFileName+"."+exten 
    2493  
    2494                                 break 
     2574 
    24952575                        default: 
    24962576                                DoAlert 0, "av_type not found in dispatch to write file" 
    2497  
    24982577                endswitch 
    24992578                 
Note: See TracChangeset for help on using the changeset viewer.