Ignore:
Timestamp:
Apr 16, 2018 10:50:33 AM (5 years ago)
Author:
srkline
Message:

Added two model functions for white beam smearing.

Many other small changes for processing of the back detector, shuffling of VSANS menu items, and consistent naming of V_ procedures.

Location:
sans/Dev/trunk/NCNR_User_Procedures
Files:
3 added
17 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Common/Packages/PlotManager/PlotUtilsMacro_v40.ipf

    r1091 r1095  
    13481348         
    13491349// from 2017-2018 VSANS reduction 
    1350         list = RemoveFromList("V_BroadPeak_Pix2D;V_BroadPeak_Pix2D_noThread;V_CleanupTimes;V_I_BroadPeak_Pix2D;V_IndexForHistogram;V_MakeFibonacciWave;V_UpdatePix2Mat;xJointHistogram;",list,";") 
     1350        tmp = FunctionList("V_*",";","KIND:10") 
     1351        list = RemoveFromList(tmp, list  ,";") 
     1352        list = RemoveFromList("V_BroadPeak_Pix2D;V_BroadPeak_Pix2D_noThread;V_CleanupTimes;V_I_BroadPeak_Pix2D;V_IndexForHistogram;V_MakeFibonacciWave;V_UpdatePix2Mat;",list,";") 
    13511353 
    13521354        tmp = FunctionList("*X_",";","KIND:10")         // dummy functions with "X_" at the end, for vsans (2018) 
    13531355        list = RemoveFromList(tmp, list  ,";") 
    13541356         
    1355         list = RemoveFromList("Integrate_BuiltIn;intgrnd;V_WB_testKernel;",list,";") 
     1357        list = RemoveFromList("Integrate_BuiltIn;intgrnd;xJointHistogram;",list,";") 
    13561358 
    13571359                                 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_DetectorBinning_Q.ipf

    r1093 r1095  
    467467Function BinAllFrontPanels() 
    468468 
    469         SetDeltaQ("VCALC","FL") 
    470         SetDeltaQ("VCALC","FR") 
    471         SetDeltaQ("VCALC","FT") 
    472         SetDeltaQ("VCALC","FB") 
     469        V_SetDeltaQ("VCALC","FL") 
     470        V_SetDeltaQ("VCALC","FR") 
     471        V_SetDeltaQ("VCALC","FT") 
     472        V_SetDeltaQ("VCALC","FB") 
    473473 
    474474        Variable binType         
     
    946946Function BinAllMiddlePanels() 
    947947 
    948         SetDeltaQ("VCALC","ML") 
    949         SetDeltaQ("VCALC","MR") 
    950         SetDeltaQ("VCALC","MT") 
    951         SetDeltaQ("VCALC","MB") 
     948        V_SetDeltaQ("VCALC","ML") 
     949        V_SetDeltaQ("VCALC","MR") 
     950        V_SetDeltaQ("VCALC","MT") 
     951        V_SetDeltaQ("VCALC","MB") 
    952952 
    953953        Variable binType         
     
    13521352Function BinAllBackPanels() 
    13531353 
    1354         SetDeltaQ("VCALC","B") 
     1354        V_SetDeltaQ("VCALC","B") 
    13551355 
    13561356        Variable binType         
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_DetectorBinning_Utils.ipf

    r1093 r1095  
    670670// detStr is the panel identifer "ML", etc. 
    671671// 
    672 Function SetDeltaQ(folderStr,detStr) 
     672Function V_SetDeltaQ(folderStr,detStr) 
    673673        String folderStr,detStr 
    674674 
     
    12091209                Print "Mask file not found for at least one detector - so all data is used" 
    12101210        endif 
     1211         
     1212        NVAR gIgnoreDetB = root:Packages:NIST:VSANS:Globals:gIgnoreDetB 
     1213        if(gIgnoreDetB && cmpstr(type,"B") == 0) 
     1214                maskMissing = 1 
     1215                Print "Mask skipped for B due to possible mismatch (Panel B ignored in preferences)" 
     1216        endif 
    12111217 
    12121218        Variable mask_val 
     
    14321438// 
    14331439// so I'm trusting [cm] is in the file 
    1434         S2 = V_getSampleAp2_size(folderStr)*10          // sample ap 1 or 2? 2 = the "external", convert to [cm] 
     1440        S2 = V_getSampleAp2_size(folderStr)*10          // sample ap 1 or 2? 2 = the "external", convert to [mm] 
    14351441         
    14361442// L1 = source to sample distance [m]  
     
    14441450         
    14451451// BS = beam stop diameter [mm] 
    1446         //BS = V_getBeamStopC2_size(folderStr)          // TODO: what are the units? which BS is in? carr2, carr3, back, none? 
     1452//TODO:? which BS is in? carr2, carr3, none? 
     1453// -- need to check the num_beamstops field, then description, then shape/size or shape/height and shape/width 
     1454// 
     1455// TODO: the values in the file are incorrect!!! BS = 1000 mm diameter!!! 
     1456//      BS = V_getBeamStopC2_size(folderStr)            // Units are [mm]  
    14471457        BS = 25.4                       //TODO hard-wired value 
    14481458         
     
    14651475 
    14661476// For white beam data, the wavelength distribution can't be represented as a gaussian, but all of the other  
    1467 //  geometric corrections still apply. Passing zero for the lambdaWidth will return the grometry contribution, 
     1477//  geometric corrections still apply. Passing zero for the lambdaWidth will return the geometry contribution, 
    14681478//  as long as the wavelength can be handled separately. It appears to be correct to do as a double integral, 
    1469 // with the inner(lambda) calculated first, then the outer(geometry). 
     1479//  with the inner(lambda) calculated first, then the outer(geometry). 
    14701480// 
    14711481 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VSANS_Includes.ipf

    r1090 r1095  
    120120#include "V_WhiteBeamDistribution" 
    121121#include "V_DummyFunctions" 
     122// VSANS Analysis functions (under Analysis trunk, not Reduction) 
     123#include "V_BroadPeak_WB" 
     124#include "V_GaussSpheres_WB" 
    122125 
    123126 
     127 
     128 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_DetectorCorrections.ipf

    r1094 r1095  
    715715// calculate all of the q-values 
    716716// sdd is passed in [cm] 
    717         qTot = V_CalcQval(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
    718         qx = V_CalcQX(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
    719         qy = V_CalcQY(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
    720         qz = V_CalcQZ(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
    721          
     717 
     718 
     719// after adding in the 680x1656 back detector, load time was 7.8s, without multithreading 
     720// with multithreading, 1.9s 
     721//       qTot = V_CalcQval(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
     722//              qx = V_CalcQX(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
     723//              qy = V_CalcQY(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
     724//              qz = V_CalcQZ(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY)    
     725 
     726        MultiThread qTot = V_CalcQval(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
     727        MultiThread     qx = V_CalcQX(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
     728        MultiThread     qy = V_CalcQY(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
     729        MultiThread     qz = V_CalcQZ(p,q,xCtr,yCtr,sdd,lambda,data_realDistX,data_realDistY) 
    722730         
    723731        return(0) 
     
    739747//returned magnitude of Q is in 1/Angstroms 
    740748// 
    741 Function V_CalcQval(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
     749ThreadSafe Function V_CalcQval(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
    742750        Variable xaxval,yaxval,xctr,yctr,sdd,lam 
    743751        Wave distX,distY 
     
    769777// this properly accounts for qz 
    770778// 
    771 Function V_CalcQX(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
     779ThreadSafe Function V_CalcQX(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
    772780        Variable xaxval,yaxval,xctr,yctr,sdd,lam 
    773781        Wave distX,distY 
     
    803811// this properly accounts for qz 
    804812// 
    805 Function V_CalcQY(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
     813ThreadSafe Function V_CalcQY(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
    806814        Variable xaxval,yaxval,xctr,yctr,sdd,lam 
    807815        Wave distX,distY 
     
    838846// this properly accounts for qz, because it is qz 
    839847// 
    840 Function V_CalcQZ(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
     848ThreadSafe Function V_CalcQZ(xaxval,yaxval,xctr,yctr,sdd,lam,distX,distY) 
    841849        Variable xaxval,yaxval,xctr,yctr,sdd,lam 
    842850        Wave distX,distY 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_DummyFunctions.ipf

    r1090 r1095  
    22#pragma rtGlobals=3             // Use modern global access method and strict wave access. 
    33 
     4 
     5// 
     6// used for the White Beam Smearing 
     7// 
    48 
    59// generates dummy functions of the form: 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_HDF5_Write.ipf

    r1094 r1095  
    69406940        Variable val 
    69416941         
    6942         String path = "entry:reduction:left_right_flip"  
     6942//      String path = "entry:reduction:left_right_flip"  
    69436943         
    69446944        Make/O/D/N=1 wTmpWrite 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_IQ_Annular.ipf

    r1073 r1095  
    1818// -- integrate this with a more general "average panel" 
    1919// -- draw the q-center and width on the image (as a contour? - if no, use a draw layer...) 
    20 //   Can I "flag" the pixels that contribute to the annualr average, and overlay them like a  
     20// -- Can I "flag" the pixels that contribute to the annualr average, and overlay them like a  
    2121//    Mask(translucent?), like a "thresholding" operation, but act on the Q-value, not the Z- value. 
     22// 
     23// TODO!!! 
     24// x- none of these procedures are aware of the BACK detector 
     25// 
    2226 
    2327// 
     
    4650        String detStr 
    4751         
    48         if(cmpstr(detGroup,"F") == 0) 
    49                 detStr = "FLRTB" 
    50         else 
    51                 detStr = "MLRTB" 
    52         endif 
     52        strswitch(detGroup) 
     53                case "F": 
     54                        detStr = "FLRTB" 
     55                        break 
     56                case "M": 
     57                        detStr = "MLRTB" 
     58                        break 
     59                case "B": 
     60                        detStr = "B" 
     61                        break 
     62                default: 
     63                        DoAlert 0,"No detGroup match in V_QBinAllPanels_Annular" 
     64                        return(0) 
     65        endswitch 
     66 
    5367         
    5468// right now, use all of the detectors. There is a lot of waste in this and it could be  
     
    7892                RemoveFromGraph/Z iPhiBin_qxqy_FLRTB 
    7993                RemoveFromGraph/Z iPhiBin_qxqy_MLRTB 
     94                RemoveFromGraph/Z iPhiBin_qxqy_B 
    8095        endif 
    8196 
     
    89104                Label bottom "Phi (degrees)" 
    90105                Legend 
    91         else 
     106        endif 
     107        if(cmpstr(detGroup,"M") == 0) 
    92108                AppendToGraph iPhiBin_qxqy_MLRTB vs phiBin_qxqy_MLRTB 
    93109                ModifyGraph mode=4 
     
    98114                Legend 
    99115        endif 
    100  
     116        if(cmpstr(detGroup,"B") == 0) 
     117                AppendToGraph iPhiBin_qxqy_B vs phiBin_qxqy_B 
     118                ModifyGraph mode=4 
     119                ModifyGraph marker=19 
     120                ErrorBars iPhiBin_qxqy_B Y,wave=(ePhiBin_qxqy_B,ePhiBin_qxqy_B) 
     121                Label left "Counts" 
     122                Label bottom "Phi (degrees)" 
     123                Legend 
     124        endif 
    101125         
    102126        SetDataFolder fldrSav0 
     
    247271                        break                                                                    
    248272                                         
     273                case "B": 
     274                        if(isVCALC) 
     275                                WAVE inten = $(folderPath+instPath+"B"+":det_"+"B") 
     276                                WAVE/Z iErr = $("iErr_"+"B")                    // 2D errors -- may not exist, especially for simulation                 
     277                        else 
     278                                Wave inten = V_getDetectorDataW(folderStr,"B") 
     279                                Wave iErr = V_getDetectorDataErrW(folderStr,"B") 
     280 
     281                                Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"B"+":data") 
     282                                 
     283                                if(WaveExists(mask) == 1) 
     284                                        maskMissing = 0 
     285                                endif 
     286                        endif    
     287//                      NVAR delQ = $(folderPath+instPath+"ML"+":gDelQ_ML") 
     288                         
     289                        Wave qTotal = $(folderPath+instPath+"B"+":qTot_"+"B")                   // 2D q-values   
     290         
     291                        Wave qx = $(folderPath+instPath+"B"+":qx_"+"B")                 // 2D qx-values  
     292 
     293                        Wave qy = $(folderPath+instPath+"B"+":qy_"+"B")                 // 2D qy-values  
     294                                         
     295                        nSets = 1 
     296                        break                                                            
     297 
     298                                         
    249299                default: 
    250300                        nSets = 0                                                       // optional default expression executed 
     
    654704                Wave/Z iw = iPhiBin_qxqy_FLRTB 
    655705                Wave/Z sw = ePhiBin_qxqy_FLRTB 
    656         else 
     706        endif 
     707        if(cmpstr(detGroup,"M") == 0) 
    657708                Wave/Z pw = phiBin_qxqy_MLRTB 
    658709                Wave/Z iw = iPhiBin_qxqy_MLRTB 
    659710                Wave/Z sw = ePhiBin_qxqy_MLRTB 
    660711        endif 
    661  
     712        if(cmpstr(detGroup,"B") == 0) 
     713                Wave/Z pw = phiBin_qxqy_B 
     714                Wave/Z iw = iPhiBin_qxqy_B 
     715                Wave/Z sw = ePhiBin_qxqy_B 
     716        endif 
    662717         
    663718        String dataSetFolderParent,basestr 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_IQ_Utilities.ipf

    r1076 r1095  
    108108                detStr = StringFromList(ii, ksDetectorListAll, ";") 
    109109                 
    110                 delQ = SetDeltaQ(folderStr,detStr)              // this sets (overwrites) the global value for each panel type 
     110                delQ = V_SetDeltaQ(folderStr,detStr)            // this sets (overwrites) the global value for each panel type 
    111111        endfor 
    112112         
     
    595595        Variable num, ii,nBeg,nEnd 
    596596        String item,detstr 
     597 
     598        NVAR gIgnoreDetB = root:Packages:NIST:VSANS:Globals:gIgnoreDetB 
    597599         
    598600        num = ItemsInList(detListStr) 
     
    601603                nBeg = NumberByKey(detStr, nBegStr,"=",";") 
    602604                nEnd = NumberByKey(detStr, nEndStr,"=",";") 
    603                 V_TrimOneSet(folderStr,detStr,nBeg,nEnd) 
     605                if(!gIgnoreDetB) 
     606                        V_TrimOneSet(folderStr,detStr,nBeg,nEnd) 
     607                endif 
    604608        endfor 
    605609 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_MainPanel.ipf

    r1091 r1095  
    192192        String ctrlName 
    193193 
    194         DoAlert 0, "This function has not been updated for VSANS yet..." 
     194//      DoAlert 0, "This function has not been updated for VSANS yet..." 
     195        DoAlert 0, "Right-click on the image and select '3D Surface from data'" 
    195196 
    196197//      Plot3DSurface() 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Menu.ipf

    r1093 r1095  
    44 
    55 
    6 //************************** 
    7 // Vers 1.2 091901 
     6 
    87// 
    98//**************************** 
     
    3130                "Derive Beam Centers",V_DeriveBeamCenters() 
    3231        End 
    33         Submenu "Work Files" 
    34                 "Convert to WORK",V_Convert_to_Workfile() 
    35                 "Load Fake DIV Data" 
    36                 "DIV a work file",V_DIV_a_Workfile() 
    37                 "Load Fake MASK Data" 
    38                 "Correct Data",V_CorrectData() 
    39         End 
    40         SubMenu "Nexus File RW" 
    41 //              "Fill_Nexus_V_Template" 
    42 //              "Save_Nexus_V_Template" 
    43 //              "Load_Nexus_V_Template" 
    44 //              "-" 
    45 //              "IgorOnly_Setup_VSANS_Struct" 
    46 //              "IgorOnly_Save_VSANS_Nexus" 
    47 //              "IgorOnly_Setup_SANS_Struct" 
    48 //              "IgorOnly_Save_SANS_Struct" 
    49                 "Copy_VCALC_to_VSANSFile",Copy_VCALC_to_VSANSFile() 
     32 
     33        SubMenu "Nexus File Corrections" 
    5034                "Flip Lateral Offset",V_PatchDet_Offset() 
    5135                "Mark Lateral Flip Done",V_MarkLeftRightFlip_Done() 
     
    5842                "Read Detetcor Panel Gap",V_ReadDet_Gap() 
    5943                "Patch Detector Distance",V_PatchDet_Distance() 
     44                "-" 
    6045                "Patch Back Detector Values",V_Patch_Back_Detector() 
     46        End 
     47        SubMenu "File Tests" 
     48                "Copy_VCALC_to_VSANSFile",Copy_VCALC_to_VSANSFile() 
    6149                "-" 
    6250                "Setup_VSANS_DIV_Struct" 
     
    7260                "Dump_V_getSTR" 
    7361                "Dump_V_getSTR_Det" 
     62//              "Fill_Nexus_V_Template" 
     63//              "Save_Nexus_V_Template" 
     64//              "Load_Nexus_V_Template" 
     65//              "-" 
     66//              "IgorOnly_Setup_VSANS_Struct" 
     67//              "IgorOnly_Save_VSANS_Nexus" 
     68//              "IgorOnly_Setup_SANS_Struct" 
     69//              "IgorOnly_Save_SANS_Struct" 
    7470        End 
    75          
     71        Submenu "Work File Operations" 
     72                "Convert to WORK",V_Convert_to_Workfile() 
     73                "Load Fake DIV Data" 
     74                "DIV a work file",V_DIV_a_Workfile() 
     75                "Load Fake MASK Data" 
     76                "Correct Data",V_CorrectData() 
     77        End 
    7678End 
    7779 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_PatchFiles.ipf

    r1093 r1095  
    446446        fname = S_path + fname 
    447447 
    448         Variable nRows = 9 
     448        Variable nRows = 11 
    449449        Redimension/N=(nRows,3) ListWave 
    450450        Redimension/N=(nRows,3) selWave 
     
    482482        listWave[8][1] = "sample aperture diam (external) (cm)" 
    483483        listWave[8][2] = num2str(V_getSampleAp2_size(fname))     
     484 
     485        listWave[9][1] = "beam stop diameter (Middle) (mm)" 
     486        listWave[9][2] = num2str(V_getBeamStopC2_size(fname))    
     487         
     488        listWave[10][1] = "beam stop diameter (Back) (mm)" 
     489        listWave[10][2] = num2str(V_getBeamStopC3_size(fname))   
     490 
     491 
    484492                                 
    485493        return(0) 
     
    12571265        endif            
    12581266 
     1267        if ((selWave[9][0] & 2^4) != 0)         //"beam stop diameter (Middle) (mm)" 
     1268                val = str2num(listWave[9][2]) 
     1269                err = V_writeBeamStopC2_size(fname,val) 
     1270        endif            
     1271         
     1272        if ((selWave[10][0] & 2^4) != 0)                //"beam stop diameter (Back) (mm)" 
     1273                val = str2num(listWave[10][2]) 
     1274                err = V_writeBeamStopC3_size(fname,val) 
     1275        endif            
     1276         
    12591277        return(0) 
    12601278End 
     
    17261744// root:Packages:NIST:VSANS:RawVSANS:sans1301: 
    17271745        for(ii=lo;ii<=hi;ii+=1) 
    1728                 KillDataFolder/Z $("root:Packages:NIST:VSANS:RawVSANS:sans"+num2str(ii)) 
     1746                KillDataFolder/Z $("root:Packages:NIST:VSANS:RawVSANS:sans"+num2istr(ii)) 
    17291747        endfor 
    17301748        return 0 
     
    20362054// root:Packages:NIST:VSANS:RawVSANS:sans1301: 
    20372055        for(ii=lo;ii<=hi;ii+=1) 
    2038                 KillDataFolder/Z $("root:Packages:NIST:VSANS:RawVSANS:sans"+num2str(ii)) 
     2056                KillDataFolder/Z $("root:Packages:NIST:VSANS:RawVSANS:sans"+num2istr(ii)) 
    20392057        endfor 
    20402058        return 0 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Protocol_Reduction.ipf

    r1092 r1095  
    765765End 
    766766 
     767 
     768// TODO 
     769// -- find proper way to search for these files 
     770// -- they *may* be written to the file header(reduction block) 
     771// -- or grep for VSANS_DIV (in the title) 
    767772Function/S V_GetDIVList() 
    768773 
     
    777782        newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
    778783        newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
     784        newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
     785        newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
    779786 
    780787        num=ItemsInList(newList) 
     
    797804                if( V_value )   // at least one instance was found 
    798805//                              Print "found ", item,ii 
    799                         if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
     806//                      if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
    800807                                list += item + ";" 
    801                         endif 
     808//                      endif 
    802809                endif 
    803810        endfor 
     
    808815end 
    809816 
    810 // TODO 
    811 // -- find proper way to search for these files 
    812 // -- they *may* be written to the file header(reduction block) 
    813 // -- or grep for VSANS_DIV (in the title) 
    814 Function/S V_PickDIVButton(ctrlName) : ButtonControl 
    815         String ctrlName 
    816         String list="",item="",fname,newList,intent 
    817         Variable ii,num 
    818          
    819         PathInfo catPathName 
    820         String path = S_path 
    821          
    822         newList = V_Get_NotRawDataFileList() 
    823         newList = V_RemoveEXTFromList(newlist,"hst")            // remove the event files 
    824         num=ItemsInList(newList) 
    825          
    826 //      for(ii=0;ii<num;ii+=1) 
    827 //              item=StringFromList(ii, newList , ";") 
    828 //              fname = path + item 
    829 //              intent = V_getReduction_intent(fname) 
    830 //              if(cmpstr(intent,"SENSITIVITY") == 0) 
    831 //                      list += item + ";" 
    832 //              endif 
    833 // 
    834 //      endfor 
    835  
    836         String match="VSANS_DIV"                //this is part of the title of a VSANS DIV file 
    837         for(ii=0;ii<num;ii+=1) 
    838                 item=StringFromList(ii, newList , ";") 
    839                 Grep/P=catPathName/Q/E=("(?i)\\b"+match+"\\b") item 
    840 //              Grep/P=catPathName/Q/E=("(?i)"+match) item 
    841                 if( V_value )   // at least one instance was found 
    842 //                              Print "found ", item,ii 
    843                                 list += item + ";" 
    844                 endif 
    845  
    846         endfor 
    847                  
    848         List = SortList(List,";",0) 
    849         Printf "DIV files = %s\r",list 
    850          
    851         return(list) 
    852  
    853 End 
    854817 
    855818Function/S V_GetMSKList() 
     
    865828        newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
    866829        newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
    867  
     830        newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
     831        newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
     832         
    868833        num=ItemsInList(newList) 
    869834         
     
    886851                if( V_value )   // at least one instance was found 
    887852//                              Print "found ", item,ii 
    888                         if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
     853//                      if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
    889854                                list += item + ";" 
    890                         endif 
     855//                      endif 
    891856                endif 
    892857 
     
    16881653        if(V_flag == 1)         //1=yes 
    16891654                 
    1690                 Prompt filename,"DIV File",popup,V_PickDIVButton("") 
     1655                Prompt filename,"DIV File",popup,V_GetDIVList() 
    16911656                DoPrompt "Select File",filename 
    16921657                if (V_Flag) 
     
    19641929                        //ask user for file 
    19651930//                       junkStr = PromptForPath("Select the detector sensitivity file") 
    1966                         Prompt divFileName,"DIV File",popup,V_PickDIVButton("") 
     1931                        Prompt divFileName,"DIV File",popup,V_GetDIVList() 
    19671932                        DoPrompt "Select File",divFileName 
    19681933 
     
    26232588                // DONE 
    26242589                // x- need panel 
    2625                 // 
    2626                 Prompt detPanel_toSum,"Panel with Direct Beam",popup,ksDetectorListAll 
    2627                 DoPrompt "Select Panel",detPanel_toSum 
    2628                 if (V_Flag) 
    2629                         return 0                                                                        // user canceled 
     2590                // x- now, look for the value in the file, if not there, ask 
     2591                 
     2592                detPanel_toSum = V_getReduction_BoxPanel(emptyFileName) 
     2593                if(strlen(detPanel_toSum) > 2) 
     2594                        // it's the error message 
     2595                        Prompt detPanel_toSum,"Panel with Direct Beam",popup,ksDetectorListAll 
     2596                        DoPrompt "Select Panel",detPanel_toSum 
     2597                        if (V_Flag) 
     2598                                return 0                                                                        // user canceled 
     2599                        endif 
    26302600                endif 
    2631  
     2601                 
    26322602                //need the detector sensitivity file - make a guess, allow to override 
    2633                 Prompt divFileName,"DIV File",popup,V_PickDIVButton("") 
     2603                Prompt divFileName,"DIV File",popup,V_GetDIVList() 
    26342604                DoPrompt "Select File",divFileName 
    26352605                if (V_Flag) 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Testing_Data_Procs.ipf

    r1093 r1095  
    6464                // it's OK to call both of these. these functions check detStr for the correct value 
    6565                if(cmpstr("T",detStr[1]) == 0 || cmpstr("B",detStr[1]) == 0) 
    66                         V_writeDet_LateralOffset(fileName,detStr,val)           // T/B panels 
     66                        V_writeDet_VerticalOffset(fileName,detStr,val)          // T/B panels 
    6767                else 
    68                         V_writeDet_VerticalOffset(fileName,detStr,val)          //  L/R panels, or back detector 
     68                        V_writeDet_LateralOffset(fileName,detStr,val)           //  L/R panels, or back detector 
    6969                endif 
    7070                // x and y pixel sizes for each detector should be correct in the "base" file - but if not... 
     
    134134                // returns the number of neutrons on the sample 
    135135                //Function VCALC_getImon() 
    136         V_writeMonitorCount(fileName,VCALC_getImon()) 
     136                // 
     137                // divide the monitor count by 1e8 to get a number small enough to write in the field. 
     138        V_writeMonitorCount(fileName,VCALC_getImon()/1e8) 
    137139 
    138140        // total detector count (sum of everything) 
     
    302304End 
    303305 
     306 
     307 
     308 
     309////// 
     310 
     311// 
     312// Function Profiling 
     313// 
     314// tests for where the speed bottlenecks are hiding 
     315// 
     316// in the built-in procedure, add the line: 
     317//#include <FunctionProfiling> 
     318// and check out the instructions in that file. 
     319// 
     320// essentially, create a function call with no parameters 
     321// and run that function as below: 
     322 
     323// RunFuncWithProfiling(yourFuncHere) 
     324 
     325// 
     326// function to profile can have no parameters, so hard-wire the file name 
     327Function V_ProfileFileLoad() 
     328        V_LoadHDF5Data("sans9999.nxs.ngv","RAW") 
     329End 
     330 
     331 
     332Function V_ProfileReduceOne() 
     333        V_ReduceOneButton("") 
     334End 
     335 
     336 
     337 
     338 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Utilities_General.ipf

    r1092 r1095  
    563563 
    564564        String numStr="" 
    565         numStr = num2str(num) 
     565        numStr = num2istr(num) 
    566566 
    567567        //make sure that path exists 
     
    811811                        endif 
    812812                else 
    813                         tempName = partialName + ";" + num2str(ii) 
     813                        tempName = partialName + ";" + num2istr(ii) 
    814814                        Open/Z/R/T="????TEXT"/P=catPathName refnum tempName 
    815815                        if(V_flag == 0) 
     
    11731173        endif 
    11741174        for(ii=lo;ii<=hi;ii+=1) 
    1175                 numList += num2str(ii) + "," 
     1175                numList += num2istr(ii) + "," 
    11761176        endfor 
    11771177         
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_WhiteBeamDistribution.ipf

    r1091 r1095  
    2525// result when compared to the AgBeh data 
    2626// 
    27 Function V_WhiteBeamDist(lam) 
     27 
     28Function V_WhiteBeamDist_top(lam) 
    2829        Variable lam 
    2930         
     
    5556                return(-2336 + 12422*exp(-( (lam-3.043)/4.034 )^2)) 
    5657        endif 
     58 
     59//       anything larger than 8.37, return 0     
     60        return(0) 
     61         
     62End 
     63 
     64Function V_WhiteBeamDist_mid(lam) 
     65        Variable lam 
     66         
     67        if(lam < 3.37) 
     68                return(0) 
     69        endif 
     70         
     71        if(lam < 3.69) 
     72                return(-31013 + 9198*lam) 
     73        endif 
     74         
     75        if(lam < 3.84) 
     76                return(23715 - 5649*lam) 
     77        endif 
     78         
     79//// the "middle" of the spikes  
     80        if(lam < 4.12) 
     81                return(-84962 + 22634*lam) 
     82        endif 
     83        if(lam < 8.37) 
     84                return(-2336 + 11422*exp(-( (lam-3.043)/4.234 )^2)) 
     85        endif 
     86 
     87////// the "top" of the spikes 
     88//      if(lam < 4.16) 
     89//              return(-84962 + 22634*lam) 
     90//      endif 
     91//      if(lam < 8.25) 
     92//              return(-2336 + 12422*exp(-( (lam-3.043)/4.034 )^2)) 
     93//      endif 
    5794 
    5895//       anything larger than 8.37, return 0     
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_WhiteBeamSmear.ipf

    r1091 r1095  
    3333// -- a significant problem with using the coef waves that are used in the wrapper are that 
    3434//   they are set up with a dependency, so doing the WB calculation also does the "regular" 
    35 //   calculation, doubling the time required... 
    36  
    37  
     35//   smeared calculation, doubling the time required... 
     36 
     37 
     38// 
     39// needs V_DummyFunctions for the FUNCREF to work - since it fails if I simply call the XOP 
     40// 
    3841// 
    3942// SANSModel_proto(w,x)         is in GaussUtils_v40.ipf 
     
    4851// 
    4952// 
    50 Macro V_Calc_WB_Smearing() 
     53Macro V_Calc_WB_Smearing_top() 
    5154 
    5255        String folderStr,funcStr,coefStr 
     
    6164        coefStr=S_Value 
    6265 
    63         V_DoWavelengthIntegral(folderStr,funcStr,coefStr) 
    64  
    65         SetDataFolder root: 
    66 End 
     66        V_DoWavelengthIntegral_top(folderStr,funcStr,coefStr) 
     67 
     68        SetDataFolder root: 
     69End 
     70 
     71 
     72Macro V_Calc_WB_Smearing_mid() 
     73 
     74        String folderStr,funcStr,coefStr 
     75         
     76        ControlInfo/W=WrapperPanel popup_0 
     77        folderStr=S_Value 
     78         
     79        ControlInfo/W=WrapperPanel popup_1 
     80        funcStr=S_Value 
     81         
     82        ControlInfo/W=WrapperPanel popup_2 
     83        coefStr=S_Value 
     84 
     85        V_DoWavelengthIntegral_mid(folderStr,funcStr,coefStr) 
     86 
     87        SetDataFolder root: 
     88End 
     89 
     90Macro V_Calc_WB_Smearing_interp() 
     91 
     92        String folderStr,funcStr,coefStr 
     93         
     94        ControlInfo/W=WrapperPanel popup_0 
     95        folderStr=S_Value 
     96         
     97        ControlInfo/W=WrapperPanel popup_1 
     98        funcStr=S_Value 
     99         
     100        ControlInfo/W=WrapperPanel popup_2 
     101        coefStr=S_Value 
     102 
     103        V_DoWavelengthIntegral_interp(folderStr,funcStr,coefStr) 
     104 
     105        SetDataFolder root: 
     106End 
     107 
     108Macro V_Calc_WB_Smearing_triang() 
     109 
     110        String folderStr,funcStr,coefStr 
     111         
     112        ControlInfo/W=WrapperPanel popup_0 
     113        folderStr=S_Value 
     114         
     115        ControlInfo/W=WrapperPanel popup_1 
     116        funcStr=S_Value 
     117         
     118        ControlInfo/W=WrapperPanel popup_2 
     119        coefStr=S_Value 
     120 
     121        V_DoWavelengthIntegral_triang(folderStr,funcStr,coefStr) 
     122 
     123        SetDataFolder root: 
     124End 
     125 
    67126 
    68127 
    69128// uses built-in Integrate1d() 
    70129// 
    71 Function V_DoWavelengthIntegral(folderStr,funcStr,coefStr) 
     130Function V_DoWavelengthIntegral_top(folderStr,funcStr,coefStr) 
    72131        String folderStr,funcStr,coefStr 
    73132 
     
    83142         
    84143        // make a wave for the answer 
    85         Duplicate/O qvals answer_Rom_WB 
     144        Duplicate/O qvals answer_Rom_WB_top 
    86145         
    87146        // do the integration 
     
    97156//      upLim = 8.37/5.3         
    98157//       
    99 //      // using the interpolated distribution (change the function call) 
     158//      // using the interpolated distribution (must change the function call) 
    100159//      lolim = 3/5.3 
    101160//      uplim = 9/5.3 
    102161 
    103 // using the "trangular" distribution (cange the function call) 
    104         loLim = 4/5.3 
    105         upLim = 8/5.3 
    106          
    107         answer_Rom_WB = Integrate_BuiltIn(cw,loLim,upLim,qVals) 
     162// using the "triangular" distribution (must change the function call) 
     163//      loLim = 4/5.3 
     164//      upLim = 8/5.3 
     165         
     166        answer_Rom_WB_top = V_Integrate_BuiltIn_top(cw,loLim,upLim,qVals) 
    108167 
    109168// why do I need this? Is this because this is defined as the mean of the distribution 
    110169//  and is needed to normalize the integral? verify this on paper.       
    111         answer_Rom_WB *= 5.3 
     170        answer_Rom_WB_top *= 5.3 
    112171 
    113172// normalize the integral        
    114         answer_Rom_WB /= 20926          // "top"  of peaks 
     173        answer_Rom_WB_top /= 20926              // "top"  of peaks 
    115174//      answer_Rom_WB /= 19933          // "middle"  of peaks 
    116175//      answer_Rom_WB /= 20051          // interpolated distribution 
    117176//      answer_Rom_WB /= 1              // triangular distribution (it's already normalized) 
     177 
     178// additional normalization??? 
     179        answer_Rom_WB_top /= 1.05               //  
    118180         
    119181        SetDataFolder root: 
     
    121183        return 0 
    122184End 
     185 
     186 
     187// uses built-in Integrate1d() 
     188// 
     189Function V_DoWavelengthIntegral_mid(folderStr,funcStr,coefStr) 
     190        String folderStr,funcStr,coefStr 
     191 
     192        SetDataFolder $("root:"+folderStr) 
     193                 
     194        // gather the input waves 
     195        WAVE qVals = $(folderStr+"_q") 
     196//      WAVE cw = smear_coef_BroadPeak 
     197        WAVE cw = $coefStr 
     198         
     199        funcStr = V_getXFuncStrFromCoef(cw)+"_"         //get the modelX name, tag on "_" 
     200        String/G root:gFunctionString = funcStr         // need a global reference to pass to Integrate1D 
     201         
     202        // make a wave for the answer 
     203        Duplicate/O qvals answer_Rom_WB_mid 
     204         
     205        // do the integration 
     206        Variable loLim,upLim 
     207                 
     208        // define limits based on lo/mean, hi/mean of the wavelength distribution 
     209        // using the empirical definition, "top" of the peaks 
     210//      loLim = 3.37/5.3 
     211//      upLim = 8.25/5.3 
     212         
     213//      // using the "middle" 
     214        loLim = 3.37/5.3 
     215        upLim = 8.37/5.3         
     216//       
     217//      // using the interpolated distribution (must change the function call) 
     218//      lolim = 3/5.3 
     219//      uplim = 9/5.3 
     220 
     221// using the "triangular" distribution (must change the function call) 
     222//      loLim = 4/5.3 
     223//      upLim = 8/5.3 
     224         
     225        answer_Rom_WB_mid = V_Integrate_BuiltIn_mid(cw,loLim,upLim,qVals) 
     226 
     227// why do I need this? Is this because this is defined as the mean of the distribution 
     228//  and is needed to normalize the integral? verify this on paper.       
     229        answer_Rom_WB_mid *= 5.3 
     230 
     231// normalize the integral        
     232//      answer_Rom_WB /= 20926          // "top"  of peaks 
     233        answer_Rom_WB_mid /= 19933              // "middle"  of peaks 
     234//      answer_Rom_WB /= 20051          // interpolated distribution 
     235//      answer_Rom_WB /= 1              // triangular distribution (it's already normalized) 
     236 
     237// additional normalization??? 
     238        answer_Rom_WB_mid /= 1.05               // "middle"  of peaks 
     239         
     240        SetDataFolder root: 
     241         
     242        return 0 
     243End 
     244 
     245// uses built-in Integrate1d() 
     246// 
     247Function V_DoWavelengthIntegral_interp(folderStr,funcStr,coefStr) 
     248        String folderStr,funcStr,coefStr 
     249 
     250        SetDataFolder $("root:"+folderStr) 
     251                 
     252        // gather the input waves 
     253        WAVE qVals = $(folderStr+"_q") 
     254//      WAVE cw = smear_coef_BroadPeak 
     255        WAVE cw = $coefStr 
     256         
     257        funcStr = V_getXFuncStrFromCoef(cw)+"_"         //get the modelX name, tag on "_" 
     258        String/G root:gFunctionString = funcStr         // need a global reference to pass to Integrate1D 
     259         
     260        // make a wave for the answer 
     261        Duplicate/O qvals answer_Rom_WB_interp 
     262         
     263        // do the integration 
     264        Variable loLim,upLim 
     265                 
     266        // define limits based on lo/mean, hi/mean of the wavelength distribution 
     267        // using the empirical definition, "top" of the peaks 
     268//      loLim = 3.37/5.3 
     269//      upLim = 8.25/5.3 
     270         
     271//      // using the "middle" 
     272//      loLim = 3.37/5.3 
     273//      upLim = 8.37/5.3         
     274//       
     275//      // using the interpolated distribution (must change the function call) 
     276        lolim = 3/5.3 
     277        uplim = 9/5.3 
     278 
     279// using the "triangular" distribution (must change the function call) 
     280//      loLim = 4/5.3 
     281//      upLim = 8/5.3 
     282         
     283        answer_Rom_WB_interp = V_Integrate_BuiltIn_interp(cw,loLim,upLim,qVals) 
     284 
     285// why do I need this? Is this because this is defined as the mean of the distribution 
     286//  and is needed to normalize the integral? verify this on paper.       
     287        answer_Rom_WB_interp *= 5.3 
     288 
     289// normalize the integral        
     290//      answer_Rom_WB /= 20926          // "top"  of peaks 
     291//      answer_Rom_WB /= 19933          // "middle"  of peaks 
     292        answer_Rom_WB_interp /= 20051           // interpolated distribution 
     293//      answer_Rom_WB /= 1              // triangular distribution (it's already normalized) 
     294 
     295// additional normalization??? 
     296        answer_Rom_WB_interp /= 1.05            // "middle"  of peaks 
     297         
     298        SetDataFolder root: 
     299         
     300        return 0 
     301End 
     302 
     303// uses built-in Integrate1d() 
     304// 
     305Function V_DoWavelengthIntegral_triang(folderStr,funcStr,coefStr) 
     306        String folderStr,funcStr,coefStr 
     307 
     308        SetDataFolder $("root:"+folderStr) 
     309                 
     310        // gather the input waves 
     311        WAVE qVals = $(folderStr+"_q") 
     312//      WAVE cw = smear_coef_BroadPeak 
     313        WAVE cw = $coefStr 
     314         
     315        funcStr = V_getXFuncStrFromCoef(cw)+"_"         //get the modelX name, tag on "_" 
     316        String/G root:gFunctionString = funcStr         // need a global reference to pass to Integrate1D 
     317         
     318        // make a wave for the answer 
     319        Duplicate/O qvals answer_Rom_WB_triang 
     320         
     321        // do the integration 
     322        Variable loLim,upLim 
     323                 
     324        // define limits based on lo/mean, hi/mean of the wavelength distribution 
     325        // using the empirical definition, "top" of the peaks 
     326//      loLim = 3.37/5.3 
     327//      upLim = 8.25/5.3 
     328         
     329//      // using the "middle" 
     330//      loLim = 3.37/5.3 
     331//      upLim = 8.37/5.3         
     332//       
     333//      // using the interpolated distribution (must change the function call) 
     334//      lolim = 3/5.3 
     335//      uplim = 9/5.3 
     336 
     337// using the "triangular" distribution (must change the function call) 
     338        loLim = 4/5.3 
     339        upLim = 8/5.3 
     340         
     341        answer_Rom_WB_triang = V_Integrate_BuiltIn_triangle(cw,loLim,upLim,qVals) 
     342 
     343// why do I need this? Is this because this is defined as the mean of the distribution 
     344//  and is needed to normalize the integral? verify this on paper.       
     345        answer_Rom_WB_triang *= 5.3 
     346 
     347// normalize the integral        
     348//      answer_Rom_WB /= 20926          // "top"  of peaks 
     349//      answer_Rom_WB /= 19933          // "middle"  of peaks 
     350//      answer_Rom_WB /= 20051          // interpolated distribution 
     351        answer_Rom_WB_triang /= 1               // triangular distribution (it's already normalized) 
     352 
     353// additional normalization??? 
     354        answer_Rom_WB_triang /= 1.1             //  
     355         
     356        SetDataFolder root: 
     357         
     358        return 0 
     359End 
     360 
    123361 
    124362// 
     
    184422         
    185423//      val = V_WhiteBeamDist(dum*5.3)*BroadPeakX(cw,x/dum) 
    186         val = V_WhiteBeamDist(dum*5.3)*func(cw,x/dum) 
     424//      val = V_WhiteBeamDist(dum*5.3)*func(cw,x/dum) 
    187425 
    188426        return (val) 
     
    200438// the trick here is that declaring the last qVal wave as a variable 
    201439// since this is implicitly called N times in the wave assignment of the answer wave 
    202 Function Integrate_BuiltIn(cw,loLim,upLim,qVal) 
     440Function V_Integrate_BuiltIn_top(cw,loLim,upLim,qVal) 
    203441        Wave cw 
    204442        Variable loLim,upLim 
     
    208446        Variable ans 
    209447         
    210 //      ans = Integrate1D(intgrnd,lolim,uplim,2,0,cw)           //adaptive quadrature 
    211         ans = Integrate1D(intgrnd,lolim,uplim,1,0,cw)           // Romberg integration 
     448//      ans = Integrate1D(V_intgrnd_top,lolim,uplim,2,0,cw)             //adaptive quadrature 
     449        ans = Integrate1D(V_intgrnd_top,lolim,uplim,1,0,cw)             // Romberg integration 
    212450         
    213451        return ans 
    214452end 
    215453 
    216  
    217 // 
    218 // See V_DunnyFunctions.ipf for the full list 
     454// the trick here is that declaring the last qVal wave as a variable 
     455// since this is implicitly called N times in the wave assignment of the answer wave 
     456Function V_Integrate_BuiltIn_mid(cw,loLim,upLim,qVal) 
     457        Wave cw 
     458        Variable loLim,upLim 
     459        Variable qVal 
     460         
     461        Variable/G root:qq = qval 
     462        Variable ans 
     463         
     464//      ans = Integrate1D(V_intgrnd_mid,lolim,uplim,2,0,cw)             //adaptive quadrature 
     465        ans = Integrate1D(V_intgrnd_mid,lolim,uplim,1,0,cw)             // Romberg integration 
     466         
     467        return ans 
     468end 
     469 
     470// the trick here is that declaring the last qVal wave as a variable 
     471// since this is implicitly called N times in the wave assignment of the answer wave 
     472Function V_Integrate_BuiltIn_triangle(cw,loLim,upLim,qVal) 
     473        Wave cw 
     474        Variable loLim,upLim 
     475        Variable qVal 
     476         
     477        Variable/G root:qq = qval 
     478        Variable ans 
     479         
     480//      ans = Integrate1D(V_intgrnd_triangle,lolim,uplim,2,0,cw)                //adaptive quadrature 
     481        ans = Integrate1D(V_intgrnd_triangle,lolim,uplim,1,0,cw)                // Romberg integration 
     482         
     483        return ans 
     484end 
     485 
     486// the trick here is that declaring the last qVal wave as a variable 
     487// since this is implicitly called N times in the wave assignment of the answer wave 
     488Function V_Integrate_BuiltIn_interp(cw,loLim,upLim,qVal) 
     489        Wave cw 
     490        Variable loLim,upLim 
     491        Variable qVal 
     492         
     493        Variable/G root:qq = qval 
     494        Variable ans 
     495         
     496//      ans = Integrate1D(V_intgrnd_interp,lolim,uplim,2,0,cw)          //adaptive quadrature 
     497        ans = Integrate1D(V_intgrnd_interp,lolim,uplim,1,0,cw)          // Romberg integration 
     498         
     499        return ans 
     500end 
     501 
     502// 
     503// See V_DummyFunctions.ipf for the full list 
    219504// 
    220505//Function BroadPeakX_(cw,x) 
     
    225510//end 
    226511 
    227 Function intgrnd(cw,dum) 
     512Function V_intgrnd_top(cw,dum) 
    228513        Wave cw 
    229514        Variable dum            // the dummy of the integration 
     
    238523 
    239524//      val = V_WhiteBeamDist(dum*5.3)*BroadPeakX(cw,qq/dum) 
    240         val = V_WhiteBeamDist(dum*5.3)*func(cw,qq/dum) 
     525        val = V_WhiteBeamDist_top(dum*5.3)*func(cw,qq/dum) 
    241526         
    242527//      val = V_WhiteBeamInterp(dum*5.3)*func(cw,qq/dum) 
     528 
     529        return (val) 
     530End 
     531 
     532Function V_intgrnd_mid(cw,dum) 
     533        Wave cw 
     534        Variable dum            // the dummy of the integration 
     535 
     536        Variable val 
     537        NVAR qq = root:qq               //the q-value of the integration, not part of cw, so pass global 
     538        SVAR funcStr = root:gFunctionString 
     539        FUNCREF SANSModel_proto func = $funcStr 
     540 
     541//      val = (1-dum*5.3/8)*BroadPeakX(cw,qq/dum)        
     542//      val = (1-dum*5.3/8)*func(cw,qq/dum) 
     543 
     544//      val = V_WhiteBeamDist(dum*5.3)*BroadPeakX(cw,qq/dum) 
     545        val = V_WhiteBeamDist_mid(dum*5.3)*func(cw,qq/dum) 
     546         
     547//      val = V_WhiteBeamInterp(dum*5.3)*func(cw,qq/dum) 
     548 
     549        return (val) 
     550End 
     551 
     552Function V_intgrnd_triangle(cw,dum) 
     553        Wave cw 
     554        Variable dum            // the dummy of the integration 
     555 
     556        Variable val 
     557        NVAR qq = root:qq               //the q-value of the integration, not part of cw, so pass global 
     558        SVAR funcStr = root:gFunctionString 
     559        FUNCREF SANSModel_proto func = $funcStr 
     560 
     561//      val = (1-dum*5.3/8)*BroadPeakX(cw,qq/dum)        
     562        val = (1-dum*5.3/8)*func(cw,qq/dum) 
     563 
     564//      val = V_WhiteBeamDist(dum*5.3)*BroadPeakX(cw,qq/dum) 
     565//      val = V_WhiteBeamDist(dum*5.3)*func(cw,qq/dum) 
     566         
     567//      val = V_WhiteBeamInterp(dum*5.3)*func(cw,qq/dum) 
     568 
     569        return (val) 
     570End 
     571 
     572Function V_intgrnd_interp(cw,dum) 
     573        Wave cw 
     574        Variable dum            // the dummy of the integration 
     575 
     576        Variable val 
     577        NVAR qq = root:qq               //the q-value of the integration, not part of cw, so pass global 
     578        SVAR funcStr = root:gFunctionString 
     579        FUNCREF SANSModel_proto func = $funcStr 
     580 
     581//      val = (1-dum*5.3/8)*BroadPeakX(cw,qq/dum)        
     582//      val = (1-dum*5.3/8)*func(cw,qq/dum) 
     583 
     584//      val = V_WhiteBeamDist(dum*5.3)*BroadPeakX(cw,qq/dum) 
     585//      val = V_WhiteBeamDist(dum*5.3)*func(cw,qq/dum) 
     586         
     587        val = V_WhiteBeamInterp(dum*5.3)*func(cw,qq/dum) 
    243588 
    244589        return (val) 
Note: See TracChangeset for help on using the changeset viewer.