Ignore:
Timestamp:
Oct 13, 2017 3:16:27 PM (5 years ago)
Author:
srkline
Message:

added routines to calculate/interpolate the attenuation factor from the tables in the data file.

Added routines to patch the whole attenuator table and attenuator error table.

modified the routines to calculate kappa and apply kappa to get absolute scale.

* absolute scaling s still incorrect, too large by a factor of 2.5??

File:
1 edited

Legend:

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

    r1064 r1071  
    25652565         
    25662566        Variable err,loc,refnum 
     2567         
     2568        Variable ii 
     2569         
     2570        Variable kappa=1 
     2571        Variable kappa_err 
     2572                 
     2573        //get the necessary variables for the calculation of kappa 
     2574        Variable countTime,monCnt,sdd,pixel 
     2575        String detStr,junkStr,errStr 
     2576 
     2577        Variable empAttenFactor,        emp_atten_err 
     2578         
     2579        //get the XY box and files 
     2580        Variable x1,x2,y1,y2,emptyCts,empty_ct_err 
     2581        String emptyFileName,tempStr,divFileName,detPanel_toSum 
     2582                 
    25672583        //ask user if he wants to use a transmision file for absolute scaling 
    25682584        //or if he wants to enter his own information 
     
    25742590        else 
    25752591                //empty beam flux file selected, prompt for file, and use this to calculate KAPPA 
    2576                 Variable kappa=1 
    2577                 Variable kappa_err 
    2578                          
    2579                 //get the necessary variables for the calculation of kappa 
    2580                 Variable countTime,monCnt,sdd,pixel 
    2581                 String detStr,junkStr,errStr 
    2582  
    2583                 Variable empAttenFactor,        emp_atten_err 
    2584                  
    2585                 //get the XY box and files 
    2586                 Variable x1,x2,y1,y2,emptyCts,empty_ct_err 
    2587                 String emptyFileName,tempStr,divFileName 
    2588                  
     2592 
    25892593                // TODO 
    25902594                // x- need an empty beam file name 
     
    25962600                endif 
    25972601 
     2602                // TODO 
     2603                // x- need panel 
     2604                // 
     2605                Prompt detPanel_toSum,"Panel with Direct Beam",popup,ksDetectorListAll 
     2606                DoPrompt "Select Panel",detPanel_toSum 
     2607                if (V_Flag) 
     2608                        return 0                                                                        // user canceled 
     2609                endif 
     2610 
    25982611                //need the detector sensitivity file - make a guess, allow to override 
    25992612                Prompt divFileName,"DIV File",popup,V_PickDIVButton("") 
     
    26062619 
    26072620                WAVE xyBoxW = V_getBoxCoordinates(emptyFileName) 
    2608                 // TODO 
    2609                 // -- need to get the panel string for the sum. 
    2610                 // -- the detector string is currently hard-wired 
    2611                 detStr = "B" 
    26122621 
    26132622                 
     
    26272636                V_LoadAndPlotRAW_wName(emptyFileName) 
    26282637                // convert raw->SAM 
    2629                 V_Raw_to_work("SAM") 
    2630                 V_UpdateDisplayInformation("SAM")        
     2638//              V_Raw_to_work("SAM") 
     2639//              V_UpdateDisplayInformation("SAM")        
     2640                V_UpdateDisplayInformation("RAW")        
     2641                 
     2642                // do the DIV correction 
     2643                if (gDoDIVCor == 1) 
     2644                        // need extra check here for file existence 
     2645                        // if not in DIV folder, load. 
     2646                        // if unable to load, skip correction and report error (Alert?) (Ask to Load?) 
     2647                        Print "Doing DIV correction"// for "+ detStr 
     2648                        for(ii=0;ii<ItemsInList(ksDetectorListAll);ii+=1) 
     2649                                detStr = StringFromList(ii, ksDetectorListAll, ";") 
     2650                                Wave w = V_getDetectorDataW("RAW",detStr) 
     2651                                Wave w_err = V_getDetectorDataErrW("RAW",detStr) 
     2652                                 
     2653                                V_DIVCorrection(w,w_err,detStr,"RAW")           // do the correction in-place 
     2654                        endfor 
     2655                else 
     2656                        Print "DIV correction NOT DONE"         // not an error since correction was unchecked 
     2657                endif 
    26312658                 
    26322659                // and determine box sum and error 
    26332660                // store these locally 
    2634                 emptyCts = V_SumCountsInBox(xyBoxW[0],xyBoxW[1],xyBoxW[2],xyBoxW[3],empty_ct_err,"SAM",detStr) 
     2661                 
     2662                // TODO 
     2663                // x- need to get the panel string for the sum. 
     2664                // x- the detector string is currently hard-wired 
     2665//              detStr = "MR" 
     2666 
     2667                emptyCts = V_SumCountsInBox(xyBoxW[0],xyBoxW[1],xyBoxW[2],xyBoxW[3],empty_ct_err,"RAW",detPanel_toSum) 
    26352668 
    26362669                Print "empty counts = ",emptyCts 
     
    26392672                //              TODO 
    26402673                // -- get all of the proper values for the calculation 
    2641                 // -- currently the attenuation is incorrect 
     2674                // -x currently the attenuation is incorrect 
    26422675                //   such that kappa_err = 1*kappa 
    2643                 // -- verify the calculation (no solid angle needed) 
    2644                  
    2645                 DoAlert 0,"This calculation is not reliable - attenuation is not calibrated" 
     2676                // -- verify the calculation (no solid angle needed??) 
     2677                 
     2678                DoAlert 0,"This calculation is not reliable - something is wrong" 
    26462679                 
    26472680                // get the attenuation factor for the empty beam 
    2648                 empAttenFactor = V_getAttenuator_transmission(emptyFileName) 
    2649                 emp_atten_err = V_getAttenuator_trans_err(emptyFileName) 
    2650                  
     2681                // TODO -- the attenuation is not written by NICE to the file 
     2682                //  so I need to calculate it myself from the tables 
     2683                //  
     2684//              empAttenFactor = V_getAttenuator_transmission(emptyFileName) 
     2685//              emp_atten_err = V_getAttenuator_trans_err(emptyFileName) 
     2686                empAttenFactor = V_CalculateAttenuationFactor(emptyFileName) 
     2687                emp_atten_err = V_CalculateAttenuationError(emptyFileName) 
     2688                                 
    26512689                countTime = V_getCount_time(emptyFileName) 
    26522690                 
    26532691                // TODO 
    2654                 // -- not sure if this is the correct monitor count to use, but I do know to use "SAM" 
    2655                 //   rather than the file. 
    2656                 monCnt = V_getBeamMonNormData("SAM") 
    2657                  
    2658                  
    2659                  
    2660 //              kappa = detCnt/countTime/attenTrans*1.0e8/(monCnt/countTime)*(pixel/sdd)^2 
     2692                // -- not sure if this is the correct monitor count to use 
     2693                monCnt = V_getBeamMonNormData("RAW") 
     2694                 
     2695                pixel = V_getDet_x_pixel_size("RAW",detPanel_toSum) 
     2696                pixel /= 10             //convert mm to cm, since sdd in cm 
     2697                sdd = V_getDet_ActualDistance("RAW",detPanel_toSum) 
     2698                 
     2699//              kappa = emptyCts/countTime/empAttenFactor*1.0e8/(monCnt/countTime)*(pixel/sdd)^2 
    26612700                kappa = emptyCts/countTime/empAttenFactor*1.0e8/(monCnt/countTime) 
     2701                 
    26622702                 
    26632703                kappa_err = (empty_ct_err/emptyCts)^2 + (emp_atten_err/empAttenFactor)^2 
Note: See TracChangeset for help on using the changeset viewer.