Ignore:
Timestamp:
Feb 1, 2019 2:25:12 PM (4 years ago)
Author:
srkline
Message:

added procedures to output QxQy_ASCII data. Each panel is output into its own file. Output format is the same as for 2D SANS data, including the 2D resolution function. However, reading the data back in with the SANS analysis macros currently does not redimension the data back to the matrix correctly as it assumes a square detector.

I will need to add the X and Y dimensions of each panel into the header, and then make use of these values when they are read in. Also, writing the QxQy? data is quick for the M and F panels ( 0.8 s) but is extremely slow for the back, High-res panel (120 s) since there are 1.1.E6 points there vs. 6144 pts. I'll need to find a way to speed this operation up.

File:
1 edited

Legend:

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

    r1118 r1119  
    4747        PopupMenu popup_0,mode=1,popvalue="FL",value= #"\"FL;FR;FT;FB;ML;MR;MT;MB;B;\"" 
    4848        PopupMenu popup_1,pos={200,20},size={157,20},proc=V_DetModelPopMenuProc,title="Model Function" 
    49         PopupMenu popup_1,mode=1,popvalue="BroadPeak",value= #"\"BroadPeak;other;\"" 
     49        PopupMenu popup_1,mode=1,popvalue="BroadPeak",value= #"\"BroadPeak;BroadPeak_constrained;PowerLaw;\"" 
    5050        PopupMenu popup_2,pos={20,20},size={109,20},title="Data Source"//,proc=SetFldrPopMenuProc 
    5151        PopupMenu popup_2,mode=1,popvalue="RAW",value= #"\"RAW;SAM;VCALC;\"" 
     
    5757        Button button_4,pos={615,400},size={110,20},proc=V_CtrTableButtonProc,title="Ctr table" 
    5858        Button button_5,pos={730,440},size={110,20},proc=V_WriteCtrTableButtonProc,title="Write table",disable=2 
     59 
     60 
     61        Button button_6,pos={615,470},size={110,20},proc=V_MaskBeforeFitButtonProc,title="Mask Panel" 
     62        Button button_7,pos={730,470},size={110,20},proc=V_ConvertFitPix2cmButtonProc,title="Convert Pix2Cm" 
     63        Button button_8,pos={615,500},size={110,20},proc=V_GizmoFitButtonProc,title="Gizmo" 
    5964 
    6065 
     
    352357// 
    353358// TODO - make a better guess (how?) 
     359// TODO - make the guess appropriate for the fitted model 
    354360// 
    355361Function V_DetFitGuessButtonProc(ba) : ButtonControl 
     
    376382End 
    377383 
     384 
     385Function V_GizmoFitButtonProc(ba) : ButtonControl 
     386        STRUCT WMButtonAction &ba 
     387 
     388        switch( ba.eventCode ) 
     389                case 2: // mouse up 
     390                        // click code here 
     391 
     392                        Execute "V_Gizmo_PeakFit()" 
     393                         
     394                        break 
     395                case -1: // control being killed 
     396                        break 
     397        endswitch 
     398 
     399        return 0 
     400End 
     401 
     402 
     403Function V_MaskBeforeFitButtonProc(ba) : ButtonControl 
     404        STRUCT WMButtonAction &ba 
     405 
     406        switch( ba.eventCode ) 
     407                case 2: // mouse up 
     408                        // click code here 
     409 
     410                        Execute "V_NaN_BeforeFit()" 
     411                         
     412                        break 
     413                case -1: // control being killed 
     414                        break 
     415        endswitch 
     416 
     417        return 0 
     418End 
     419 
     420 
     421// TODO - read from the popup for the panel string 
     422// TODO - read the appropriate coeffients for xy, depending on the model selected 
     423// 
     424Function V_ConvertFitPix2cmButtonProc(ba) : ButtonControl 
     425        STRUCT WMButtonAction &ba 
     426 
     427        switch( ba.eventCode ) 
     428                case 2: // mouse up 
     429                        // click code here 
     430 
     431                        String detStr 
     432                        Variable xPix,yPix 
     433//                      Prompt detStr, "enter the panel string" 
     434//                      Prompt xPix, "enter the x pixel center" 
     435//                      Prompt yPix, "enter the y pixel center" 
     436//                      DoPrompt "enter the values",detStr,xPix,yPix 
     437 
     438                        ControlInfo popup_0 
     439                        detStr = S_Value 
     440                        Wave coefW=root:coef_PeakPix2D 
     441         
     442                        xPix = coefW[9] 
     443                        yPix = coefW[10] 
     444                         
     445                        V_Convert_FittedPix_2_cm(detStr,xPix,yPix) 
     446                         
     447                        break 
     448                case -1: // control being killed 
     449                        break 
     450        endswitch 
     451 
     452        return 0 
     453End 
     454 
     455 
    378456// 
    379457// TODO -- currently hard-wired for coefficients from the only fit function 
     
    430508                        Wave coefW=root:coef_PeakPix2D 
    431509                         
    432                         FuncFitMD/H="11000111100"/NTHR=0 V_BroadPeak_Pix2D coefW  dispW /D                       
     510                        FuncFitMD/H="11000101100"/NTHR=0/M=2 V_BroadPeak_Pix2D coefW  dispW /D                   
    433511                         
    434512                        Wave ws=W_sigma 
     
    811889// in V_Marquee_Operation.ipf 
    812890// 
    813 // ** updated these values for the FRONT only with fitted arcs of AgBeh (March 2018 data, run 4494) 
     891// ** updated these values for the FRONT only with fitted arcs of AgBeh (Dec 2018 data, multiple runs) 
    814892// 
    815893Proc V_fDeriveBeamCenters_VelSel(x_FrontReference,y_FrontReference,x_MiddleReference,y_MiddleReference) 
     
    821899        newYCtr_cm[1] = y_FrontReference 
    822900        // FL 
    823 //      newXCtr_cm[0] = x_FrontReference - (0.03 + 0.03)/2              //OLD, pre Nov 2018 
     901//      newXCtr_cm[0] = x_FrontReference - (0.03 + 0.03)/2              //OLD, pre Dec 2018 
    824902//      newYCtr_cm[0] = y_FrontReference + (0.34 + 0.32)/2 
    825         newXCtr_cm[0] = x_FrontReference + 0.26 
    826         newYCtr_cm[0] = y_FrontReference + 0.33 
     903        newXCtr_cm[0] = x_FrontReference + 0.13                         //NEW Dec 2018 
     904        newYCtr_cm[0] = y_FrontReference + 0.35 
    827905        // FB 
    828 //      newXCtr_cm[3] = x_FrontReference - (2.02 + 2.06)/2              // OLD, pre Nov 2018 
     906//      newXCtr_cm[3] = x_FrontReference - (2.02 + 2.06)/2              // OLD, pre Dec 2018 
    829907//      newYCtr_cm[3] = y_FrontReference - (0.12 + 0.19)/2              // (-) is correct here 
    830         newXCtr_cm[3] = x_FrontReference - 1.84 
    831         newYCtr_cm[3] = y_FrontReference + 0.41 
    832         // FT (not a duplicate of FB anymore) 
    833         newXCtr_cm[2] = x_FrontReference - 1.33 
    834         newYCtr_cm[2] = y_FrontReference - 0.30 
     908        newXCtr_cm[3] = x_FrontReference + 0.95                                 // NEW Dec 2018 
     909        newYCtr_cm[3] = y_FrontReference + 0.77 
     910        // FT  
     911//      newXCtr_cm[2] = newXCtr_cm[3]                           // OLD, pre Dec 2018 
     912//      newYCtr_cm[2] = newYCtr_cm[3] 
     913        newXCtr_cm[2] = x_FrontReference + 1.59                         // NEW Dec 2018 (not a duplicate of FB anymore) 
     914        newYCtr_cm[2] = y_FrontReference + 0.09 
    835915         
    836916        // MR 
     
    838918        newYCtr_cm[5] = y_MiddleReference 
    839919        // ML 
    840         newXCtr_cm[4] = x_MiddleReference - (0.06 + 0.05)/2 
    841         newYCtr_cm[4] = y_MiddleReference + (0.14 + 0.01)/2 
     920//      newXCtr_cm[4] = x_MiddleReference - (0.06 + 0.05)/2 
     921//      newYCtr_cm[4] = y_MiddleReference + (0.14 + 0.01)/2 
     922        newXCtr_cm[4] = x_MiddleReference + 0.26 
     923        newYCtr_cm[4] = y_MiddleReference - 0.16 
    842924        // MB 
    843         newXCtr_cm[7] = x_MiddleReference - (0.51 + 0.62)/2 
    844         newYCtr_cm[7] = y_MiddleReference + (0.79 + 0.74)/2 
    845         // MT (duplicate MB) 
    846         newXCtr_cm[6] = newXCtr_cm[7] 
    847         newYCtr_cm[6] = newYCtr_cm[7]    
     925//      newXCtr_cm[7] = x_MiddleReference - (0.51 + 0.62)/2 
     926//      newYCtr_cm[7] = y_MiddleReference + (0.79 + 0.74)/2 
     927        newXCtr_cm[7] = x_MiddleReference - 0.89 
     928        newYCtr_cm[7] = y_MiddleReference + 0.96 
     929        // MT  
     930        newXCtr_cm[6] = x_MiddleReference - 0.28 
     931        newYCtr_cm[6] = y_MiddleReference + 0.60 
    848932         
    849933         
     
    912996End 
    913997 
     998 
     999 
     1000 
     1001 
     1002Window V_Gizmo_PeakFit() : GizmoPlot 
     1003        PauseUpdate; Silent 1           // building window... 
     1004        // Building Gizmo 7 window... 
     1005        NewGizmo/W=(35,45,550,505) 
     1006        ModifyGizmo startRecMacro=700 
     1007        ModifyGizmo scalingOption=63 
     1008        AppendToGizmo Surface=root:Packages:NIST:VSANS:Globals:BeamCenter:curDispPanel,name=surface0 
     1009        ModifyGizmo ModifyObject=surface0,objectType=surface,property={ srcMode,0} 
     1010        ModifyGizmo ModifyObject=surface0,objectType=surface,property={ surfaceCTab,Rainbow} 
     1011        AppendToGizmo Axes=boxAxes,name=axes0 
     1012        ModifyGizmo ModifyObject=axes0,objectType=Axes,property={-1,axisScalingMode,1} 
     1013        ModifyGizmo ModifyObject=axes0,objectType=Axes,property={-1,axisColor,0,0,0,1} 
     1014        ModifyGizmo ModifyObject=axes0,objectType=Axes,property={0,ticks,3} 
     1015        ModifyGizmo ModifyObject=axes0,objectType=Axes,property={1,ticks,3} 
     1016        ModifyGizmo ModifyObject=axes0,objectType=Axes,property={2,ticks,3} 
     1017        ModifyGizmo modifyObject=axes0,objectType=Axes,property={-1,Clipped,0} 
     1018        AppendToGizmo Surface=root:PeakPix2D_mat,name=surface1 
     1019        ModifyGizmo ModifyObject=surface1,objectType=surface,property={ srcMode,0} 
     1020        ModifyGizmo ModifyObject=surface1,objectType=surface,property={ surfaceCTab,Grays} 
     1021        ModifyGizmo setDisplayList=0, object=surface0 
     1022        ModifyGizmo setDisplayList=1, object=axes0 
     1023        ModifyGizmo setDisplayList=2, object=surface1 
     1024        ModifyGizmo autoscaling=1 
     1025        ModifyGizmo currentGroupObject="" 
     1026        ModifyGizmo showInfo 
     1027        ModifyGizmo infoWindow={551,23,1368,322} 
     1028        ModifyGizmo endRecMacro 
     1029        ModifyGizmo idleEventQuaternion={1.38005e-05,-1.48789e-05,-6.11841e-06,1} 
     1030EndMacro 
     1031 
     1032 
     1033Proc V_NaN_BeforeFit(x1,x2,y1,y2) 
     1034        Variable x1,x2,y1,y2 
     1035         
     1036        root:Packages:NIST:VSANS:Globals:BeamCenter:curDispPanel[x1,x2][y1,y2] = NaN 
     1037End 
     1038 
     1039 
     1040Function V_Convert_FittedPix_2_cm(panel,xPix,yPix) 
     1041        String panel 
     1042        Variable xPix,yPix 
     1043         
     1044        Make/O/D/N=128 tmpTube 
     1045         
     1046        String pathStr = "root:Packages:NIST:VSANS:RAW:entry:instrument:detector_" 
     1047        Variable x_cm,y_cm 
     1048         
     1049         
     1050        Wave xW = $(pathStr+panel+":data_realDistX") 
     1051        Wave yW = $(pathStr+panel+":data_realDistY") 
     1052 
     1053        strswitch(panel)        // string switch 
     1054                case "FL": 
     1055                case "ML": 
     1056                        // for Left/Right 
     1057                        tmpTube = yW[0][p]                       
     1058                        // for left 
     1059                        x_cm = (xW[47][0] + (xPix-47)*8.4)/10 
     1060                        y_cm = tmpTube[yPix]/10  
     1061         
     1062                        break            
     1063                case "FR":       
     1064                case "MR": 
     1065                        // for Left/Right 
     1066                        tmpTube = yW[0][p]                       
     1067                        // for right 
     1068                        x_cm = (xW[0][0] + xPix*8.4)/10 
     1069                        y_cm = tmpTube[yPix]/10 
     1070                         
     1071                        break 
     1072                case "FT":       
     1073                case "MT": 
     1074                        // for Top/Bottom 
     1075                        tmpTube = xW[p][0] 
     1076                         
     1077                        x_cm = tmpTube[xPix]/10 
     1078                        y_cm = (yW[0][0] + yPix*8.4)/10 
     1079                         
     1080                        break            
     1081                case "FB":       
     1082                case "MB": 
     1083                        // for Top/Bottom 
     1084                        tmpTube = xW[p][0] 
     1085                         
     1086                        x_cm = tmpTube[xPix]/10 
     1087                        y_cm = (yW[0][47] + (yPix-47)*8.4)/10 
     1088                                                 
     1089                        break 
     1090                default:                        // optional default expression executed 
     1091                        Print "No case matched in V_Convert_FittedPix_2_cm" 
     1092                        return(1) 
     1093        endswitch 
     1094 
     1095         
     1096        Print "Converted Center = ",x_cm,y_cm 
     1097        return(0) 
     1098end 
     1099 
     1100Function V_MakeCorrelationMatrix() 
     1101         
     1102        Wave M_Covar=M_Covar 
     1103        Duplicate M_Covar, CorMat        // You can use any name instead of CorMat 
     1104        CorMat = M_Covar[p][q]/sqrt(M_Covar[p][p]*M_Covar[q][q]) 
     1105        Edit/K=0 root:CorMat 
     1106 
     1107        return(0) 
     1108End 
Note: See TracChangeset for help on using the changeset viewer.