Ignore:
Timestamp:
Jul 3, 2018 2:30:41 PM (4 years ago)
Author:
srkline
Message:

Many changes:

Made the VCALC panel aware of all of the binning options
Corrected the behavior of the VCALC preset conditions
Adjusted how the Slit data is binned so that there are not duplicated q-values in the output

Made Absolute scaling aware of the back detector. Now the ABS String in the protocol has a second
set of scaling constants tagged with "_B" for the back detector. There is an added button
on the protocol panel to set the second set of constants. For the back detector, the read noise
is subtracted by reading it from the empty beam file (shifting over to the right by one box width)
All of the associated abs procedures are now aware of this.
More error checking needs to be added.

Back detector image is now shifted upon loading of the data. the default mask takes this into account
and masks out the padded (zero) regions.

in the protocol, DIV and MSK do not use grep any longer. it was just way too slow. Now it depends on

the file name having DIV or MASK respectively.



Raw data files can now be added together, in the usual way from the protocol panel.



File:
1 edited

Legend:

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

    r1106 r1109  
    525525         
    526526        //w[9] 
    527         //currently unused 
     527        //collimation type (filled in at averaging?) 
    528528        w[9] = "" 
    529529        //w[10] 
     
    794794 
    795795        String list="",item="",fname,newList,intent 
    796         Variable ii,num 
     796        Variable ii,num,val 
    797797         
    798798        PathInfo catPathName 
     
    800800         
    801801        newList = V_Get_NotRawDataFileList() 
    802         newList = V_RemoveEXTFromList(newlist,"hst")            // remove the event files 
    803         newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
    804         newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
    805         newList = V_RemoveEXTFromList(newlist,"phi")            // remove the phi files 
    806         newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
    807         newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
     802//      newList = V_RemoveEXTFromList(newlist,"hst")            // remove the event files 
     803//      newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
     804//      newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
     805//      newList = V_RemoveEXTFromList(newlist,"phi")            // remove the phi files 
     806//      newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
     807//      newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
    808808 
    809809        num=ItemsInList(newList) 
    810810         
     811// keep only DIV files in the list 
     812        num=ItemsInList(newList) 
     813 
     814        String matchStr="*_DIV_*"               // this is part of the title of a VSANS _DIV_ file 
     815        for(ii=0;ii<num;ii+=1) 
     816                item=StringFromList(ii, newList , ";") 
     817                val = stringmatch(item,matchStr) 
     818                if( val )       // true if the string did match 
     819                                list += item + ";" 
     820                endif 
     821 
     822        endfor 
     823 
     824        List = SortList(List,";",0) 
     825 
     826// 
     827//      String match="DIV" 
    811828//      for(ii=0;ii<num;ii+=1) 
    812829//              item=StringFromList(ii, newList , ";") 
    813 //              fname = path + item 
    814 //              intent = V_getReduction_intent(fname) 
    815 //              if(cmpstr(intent,"SENSITIVITY") == 0) 
    816 //                      list += item + ";" 
     830//              Grep/P=catPathName/Q/E=("(?i)\\b"+match+"\\b") item 
     831////            Grep/P=catPathName/Q/E=("(?i)"+match) item 
     832//              if( V_value )   // at least one instance was found 
     833////                            Print "found ", item,ii 
     834////                    if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
     835//                              list += item + ";" 
     836////                    endif 
    817837//              endif 
    818 // 
    819838//      endfor 
    820  
    821         String match="DIV" 
     839//               
     840 
     841        return(list) 
     842end 
     843 
     844 
     845Function/S V_GetMSKList() 
     846 
     847        String list="",item="",fname,newList,intent 
     848        Variable ii,num,val 
     849         
     850        PathInfo catPathName 
     851        String path = S_path 
     852         
     853        newList = V_Get_NotRawDataFileList() 
     854//      newList = V_RemoveEXTFromList(newlist,"hst")            // remove the event files 
     855//      newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
     856//      newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
     857//      newList = V_RemoveEXTFromList(newlist,"phi")            // remove the phi files 
     858//      newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
     859//      newList = V_RemoveEXTFromList(newlist,"png")            // remove the png files 
     860//      newList = V_RemoveEXTFromList(newlist,"jpg")            // remove the jpg files 
     861//      newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
     862 
     863// keep only MASK files in the list 
     864        num=ItemsInList(newList) 
     865 
     866        String matchStr="*_MASK_*"              // this is part of the title of a VSANS _MASK_ file 
    822867        for(ii=0;ii<num;ii+=1) 
    823868                item=StringFromList(ii, newList , ";") 
    824                 Grep/P=catPathName/Q/E=("(?i)\\b"+match+"\\b") item 
    825 //              Grep/P=catPathName/Q/E=("(?i)"+match) item 
    826                 if( V_value )   // at least one instance was found 
    827 //                              Print "found ", item,ii 
    828 //                      if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
     869                val = stringmatch(item,matchStr) 
     870                if( val )       // true if the string did match 
    829871                                list += item + ";" 
    830 //                      endif 
    831872                endif 
     873 
    832874        endfor 
    833875                 
    834876        List = SortList(List,";",0) 
    835  
    836         return(list) 
    837 end 
    838  
    839  
    840 Function/S V_GetMSKList() 
    841  
    842         String list="",item="",fname,newList,intent 
    843         Variable ii,num 
    844          
    845         PathInfo catPathName 
    846         String path = S_path 
    847          
    848         newList = V_Get_NotRawDataFileList() 
    849         newList = V_RemoveEXTFromList(newlist,"hst")            // remove the event files 
    850         newList = V_RemoveEXTFromList(newlist,"ave")            // remove the ave files 
    851         newList = V_RemoveEXTFromList(newlist,"abs")            // remove the abs files 
    852         newList = V_RemoveEXTFromList(newlist,"phi")            // remove the phi files 
    853         newList = V_RemoveEXTFromList(newlist,"pxp")            // remove the pxp files 
    854         newList = V_RemoveEXTFromList(newlist,"DS_Store")               // remove the DS_Store file (OSX only) 
    855          
    856         num=ItemsInList(newList) 
    857          
     877         
     878 
     879// 
     880////    String match="MASK"             // this is part of the title of a VSANS MASK file 
     881//      String match="VSANS_MASK"               // this is part of the title of a VSANS MASK file 
    858882//      for(ii=0;ii<num;ii+=1) 
    859883//              item=StringFromList(ii, newList , ";") 
    860 //              fname = path + item 
    861 //              intent = V_getReduction_intent(fname) 
    862 //              if(cmpstr(intent,"SENSITIVITY") == 0) 
    863 //                      list += item + ";" 
     884//              Grep/P=catPathName/Q/E=("(?i)\\b"+match+"\\b") item 
     885////            Grep/P=catPathName/Q/E=("(?i)"+match) item 
     886//              if( V_value )   // at least one instance was found 
     887////                            Print "found ", item,ii 
     888////                    if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
     889//                              list += item + ";" 
     890////                    endif 
    864891//              endif 
    865892// 
    866893//      endfor 
    867  
    868 //      String match="MASK"             // this is part of the title of a VSANS MASK file 
    869         String match="VSANS_MASK"               // this is part of the title of a VSANS MASK file 
    870         for(ii=0;ii<num;ii+=1) 
    871                 item=StringFromList(ii, newList , ";") 
    872                 Grep/P=catPathName/Q/E=("(?i)\\b"+match+"\\b") item 
    873 //              Grep/P=catPathName/Q/E=("(?i)"+match) item 
    874                 if( V_value )   // at least one instance was found 
    875 //                              Print "found ", item,ii 
    876 //                      if(strsearch(item,"pxp",0,2) == -1)             //does NOT contain .pxp (the current experiment will be a match) 
    877                                 list += item + ";" 
    878 //                      endif 
    879                 endif 
    880  
    881         endfor 
    882                  
     894//               
     895 
     896 
    883897        List = SortList(List,";",0) 
    884898 
     
    10031017 
    10041018        //will prompt for a list of ABS parameters (4) through a global string variable 
    1005          
    1006         Execute "V_AskForAbsoluteParams_Quest()" 
    1007          
     1019        if(cmpstr(ctrlName,"pick_ABS_B") == 0) 
     1020                Execute "V_AskForAbsoluteParams_Quest(1)" 
     1021        else 
     1022                Execute "V_AskForAbsoluteParams_Quest(0)" 
     1023        endif 
    10081024End 
    10091025 
     
    10781094//      Button pick_DIV,pos={214,173},size={70,20},proc=V_PickDIVButton,title="set DIV" 
    10791095//      Button pick_DIV,help={"This button will set the file selected in the File Catalog table to be the sensitivity file."} 
    1080         Button pick_ABS,pos={264,308},size={70,20},proc=V_SetABSParamsButton,title="set ABS" 
     1096        Button pick_ABS,pos={264,308},size={80,20},proc=V_SetABSParamsButton,title="set ABS MF" 
    10811097        Button pick_ABS,help={"This button will prompt the user for absolute scaling parameters"}        
     1098         
     1099        Button pick_ABS_B,pos={264,330},size={80,20},proc=V_SetABSParamsButton,title="set ABS B" 
     1100        Button pick_ABS_B,help={"This button will prompt the user for absolute scaling parameters"}      
    10821101//      Button pick_MASK,pos={214,266},size={70,20},proc=V_PickMASKButton,title="set MASK" 
    10831102//      Button pick_MASK,help={"This button will set the file selected in the File Catalog table to be the mask file."} 
     
    22662285//values are passed back as a global string variable (keyword=value) 
    22672286// 
    2268 Proc V_AskForAbsoluteParams(c2,c3,c4,c5,I_err) 
     2287Proc V_AskForAbsoluteParams(c2,c3,c4,c5,I_err,back_values) 
    22692288        Variable c2=1,c3=1,c4=1e8,c5=1,I_err=1 
     2289        String back_values="no" 
    22702290        Prompt c2, "Standard Transmission" 
    22712291        Prompt c3, "Standard Thickness (cm)" 
     
    22732293        Prompt c5, "Standard Cross-Section (cm-1)" 
    22742294        Prompt I_err, "error in I(q=0) (one std dev)" 
    2275          
    2276         String/G root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr="" 
    2277          
    2278         root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr = "TSTAND="+num2str(c2) 
    2279         root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr +=  ";" + "DSTAND="+num2str(c3) 
    2280         root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr +=  ";" + "IZERO="+num2str(c4) 
    2281         root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr +=  ";" + "XSECT="+num2str(c5) 
    2282         root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr +=  ";" + "SDEV="+num2str(I_err) 
    2283          
     2295        prompt back_values, "are these values for the back detector (yes/no)?" 
     2296         
     2297        SetDataFolder root:Packages:NIST:VSANS:Globals:Protocols 
     2298         
     2299        if(cmpstr(back_values,"no")==0) 
     2300                gAbsStr = ReplaceStringByKey("TSTAND",gAbsStr,num2str(c2),"=",";") 
     2301                gAbsStr = ReplaceStringByKey("DSTAND",gAbsStr,num2str(c3),"=",";") 
     2302                gAbsStr = ReplaceStringByKey("IZERO",gAbsStr,num2str(c4),"=",";") 
     2303                gAbsStr = ReplaceStringByKey("XSECT",gAbsStr,num2str(c5),"=",";") 
     2304                gAbsStr = ReplaceStringByKey("SDEV",gAbsStr,num2str(I_err),"=",";") 
     2305        else 
     2306                gAbsStr = ReplaceStringByKey("TSTAND_B",gAbsStr,num2str(c2),"=",";") 
     2307                gAbsStr = ReplaceStringByKey("DSTAND_B",gAbsStr,num2str(c3),"=",";") 
     2308                gAbsStr = ReplaceStringByKey("IZERO_B",gAbsStr,num2str(c4),"=",";") 
     2309                gAbsStr = ReplaceStringByKey("XSECT_B",gAbsStr,num2str(c5),"=",";") 
     2310                gAbsStr = ReplaceStringByKey("SDEV_B",gAbsStr,num2str(I_err),"=",";") 
     2311        endif 
     2312         
     2313 
     2314        SetDataFolder root: 
    22842315End 
    22852316 
     
    22962327//in either case, the global keyword=value string is set. 
    22972328// 
    2298 Function V_AskForAbsoluteParams_Quest()  
     2329// 
     2330// if isBack == 1, then the values are for the back panel 
     2331// AND there are different steps that must be done to subtract off 
     2332//  the read noise of the CCDs 
     2333// 
     2334Function V_AskForAbsoluteParams_Quest(isBack)    
     2335        Variable isBack 
    22992336         
    23002337        Variable err,loc,refnum 
     
    23742411                 
    23752412                V_LoadAndPlotRAW_wName(emptyFileName) 
    2376                 // convert raw->SAM 
    2377 //              V_Raw_to_work("SAM") 
    2378 //              V_UpdateDisplayInformation("SAM")        
     2413 
    23792414                V_UpdateDisplayInformation("RAW")        
    23802415                 
     
    24042439//              detStr = "MR" 
    24052440 
     2441 
    24062442                emptyCts = V_SumCountsInBox(xyBoxW[0],xyBoxW[1],xyBoxW[2],xyBoxW[3],empty_ct_err,"RAW",detPanel_toSum) 
    24072443 
    24082444                Print "empty counts = ",emptyCts 
    24092445                Print "empty err/counts = ",empty_ct_err/emptyCts 
     2446 
     2447                // if it's the back panel, find the read noise to subtract 
     2448                // shift the marquee to the right to (hopefully) a blank spot 
     2449                Variable noiseCts,noiseCtsErr,delta 
     2450                if(isBack) 
     2451                        delta = xyBoxW[1] - xyBoxW[0] 
     2452                        noiseCts = V_SumCountsInBox(xyBoxW[1],xyBoxW[1]+delta,xyBoxW[2],xyBoxW[3],noiseCtsErr,"RAW",detPanel_toSum) 
     2453 
     2454                        print "average read noise per pixel = ",noiseCts/(xyBoxW[1]-xyBoxW[0])/(xyBoxW[3]-xyBoxW[2]) 
     2455                        Print "read noise counts = ",noiseCts 
     2456                        Print "read noise err/counts = ",noiseCtsErr/noiseCts 
     2457                         
     2458                        emptyCts -= noiseCts 
     2459                        empty_ct_err = sqrt(empty_ct_err^2 + noiseCtsErr^2) 
     2460                         
     2461                        Print "adjusted empty counts = ",emptyCts 
     2462                        Print "adjusted err/counts = ",empty_ct_err/emptyCts 
     2463                endif 
    24102464 
    24112465// 
     
    24462500                junkStr = num2str(kappa) 
    24472501                errStr = num2Str(kappa_err) 
    2448                 Execute "V_AskForAbsoluteParams(1,1,"+junkStr+",1,"+errStr+")"          //no missing parameters, no dialog 
    2449                  
     2502                 
     2503                String strToExecute="" 
     2504                 
     2505                if(isBack) 
     2506                        sprintf strToExecute, "V_AskForAbsoluteParams(1,1,%g,1,%g,\"%s\")",kappa,kappa_err,"yes"        //no missing parameters, no dialog 
     2507                else 
     2508                        sprintf strToExecute, "V_AskForAbsoluteParams(1,1,%g,1,%g,\"%s\")",kappa,kappa_err,"no" //no missing parameters, no dialog 
     2509                endif 
     2510//              print strToExecute 
     2511                Execute strToExecute 
    24502512 
    24512513                Printf "Kappa was successfully calculated as = %g +/- %g (%g %)\r",kappa,kappa_err,(kappa_err/kappa)*100 
     
    28612923        Variable c2,c3,c4,c5,kappa_err,err 
    28622924        //do absolute scaling if desired 
    2863 //              DoAlert 0,"Abs step incomplete" 
    28642925 
    28652926        if(cmpstr("none",absStr)!=0) 
    28662927                if(cmpstr("ask",absStr)==0) 
    2867                         //get the params from the user 
    2868                         Execute "V_AskForAbsoluteParams_Quest()" 
    2869                         //then from the list 
    2870                         SVAR junkAbsStr = root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr 
    2871                         c2 = NumberByKey("TSTAND", junkAbsStr, "=", ";")        //parse the list of values 
    2872                         c3 = NumberByKey("DSTAND", junkAbsStr, "=", ";") 
    2873                         c4 = NumberByKey("IZERO", junkAbsStr, "=", ";") 
    2874                         c5 = NumberByKey("XSECT", junkAbsStr, "=", ";") 
    2875                         kappa_err = NumberByKey("SDEV", junkAbsStr, "=", ";") 
     2928//                      //get the params from the user 
     2929//                      Execute "V_AskForAbsoluteParams_Quest()" 
     2930//                      //then from the list 
     2931//                      SVAR junkAbsStr = root:Packages:NIST:VSANS:Globals:Protocols:gAbsStr 
     2932//                      c2 = NumberByKey("TSTAND", junkAbsStr, "=", ";")        //parse the list of values 
     2933//                      c3 = NumberByKey("DSTAND", junkAbsStr, "=", ";") 
     2934//                      c4 = NumberByKey("IZERO", junkAbsStr, "=", ";") 
     2935//                      c5 = NumberByKey("XSECT", junkAbsStr, "=", ";") 
     2936//                      kappa_err = NumberByKey("SDEV", junkAbsStr, "=", ";") 
    28762937                else 
    28772938                        //get the parames from the list 
     
    28832944                Endif 
    28842945                //get the sample trans and thickness from the activeType folder 
    2885                 Variable c0 = V_getSampleTransmission(activeType)               //sample transmission 
    2886                 Variable c1 = V_getSampleThickness(activeType)          //sample thickness 
    2887                  
    2888                 err = V_Absolute_Scale(activeType,c0,c1,c2,c3,c4,c5,kappa_err) 
     2946//              Variable c0 = V_getSampleTransmission(activeType)               //sample transmission 
     2947//              Variable c1 = V_getSampleThickness(activeType)          //sample thickness 
     2948                 
     2949                err = V_Absolute_Scale(activeType,absStr) 
    28892950                if(err) 
    28902951                        return(err) 
Note: See TracChangeset for help on using the changeset viewer.