Changeset 939


Ignore:
Timestamp:
May 15, 2020 8:37:52 PM (2 years ago)
Author:
ilavsky
Message:

minor fixes

Location:
trunk/User Procedures
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/User Procedures/Indra 2/IN2_GeneralProcedures.ipf

    r938 r939  
    517517
    518518        ModifyBrowser appendUserButton={'SampleName-to-Values',"IN2G_ExtractInfoFromFldrname()"}
     519        ModifyBrowser appendUserButton={'Graph w1 vs w2',"IN2G_PlotBrowserSelectionXY()"}
    519520
    520521end
     
    530531                SaveGraphCopy /I /W=$(topWindow)                                                //this is pxp
    531532end
    532 
     533//************************************************************************************************
     534//************************************************************************************************
     535Function IN2G_PlotBrowserSelectionXY()
     536
     537        string SelectedWaveNm1=GetBrowserSelection (0, 1)
     538        if(strlen(SelectedWaveNm1)<=3)          //path must contain at least "root:"
     539                        return 0
     540        endif
     541        string SelectedWaveNm2=GetBrowserSelection (1, 1)
     542        if(strlen(SelectedWaveNm2)<=3)          //path must contain at least "root:"
     543                        return 0
     544        endif
     545        //check for wave type, need numerical waves ...
     546        if(WaveType($(SelectedWaveNm1),1)!=1 || WaveType($(SelectedWaveNm2),1)!=1)              //not text wave, bail out...
     547                        return 0
     548        endif
     549        Wave/Z Wave1 = $(SelectedWaveNm1)
     550        Wave/Z Wave2 = $(SelectedWaveNm2)
     551        Display Wave1 vs Wave2
     552end
    533553
    534554//************************************************************************************************
  • trunk/User Procedures/Indra 2/IN3_Calculations.ipf

    r938 r939  
    27932793        variable i=1, imax=numpnts(FitIntensity)
    27942794        Redimension/N=(numpnts(FitIntensity)) DsmErrors
    2795         Variable start = StopMSTimer(-2)
     2795        //Variable start = StopMSTimer(-2)
    27962796        Do
    2797                 if( (numtype(FitIntensity[i-1])==0) && (numtype(FitIntensity[i])==0) && (numtype(FitIntensity[i+1])==0) )
    2798                         CurveFit/Q line, FitIntensity (i-1, i+1) /X=Qvector                             //linear function here
    2799                         DsmErrors[i]+=abs(W_coef[0]+W_coef[1]*Qvector[i] - FitIntensity[i])     //error due to scatter of data
     2797                if( (numtype(FitIntensity[i-1])==0) && (numtype(FitIntensity[i])==0) && (numtype(FitIntensity[i+1])==0))
     2798                        //TBD: find easier way, this is ridiculous. And in Igor 9 alfa needs to add /N=2 to prevent updates to graph...
     2799                        //      CurveFit/Q line, FitIntensity (i-1, i+1) /X=Qvector                                                                     //linear function here
     2800                        //      DsmErrors[i]+=abs(W_coef[0]+W_coef[1]*Qvector[i] - FitIntensity[i])     //error due to scatter of data
     2801                        //this calculation is at least 4x faster than using Curvefit above. And works easily on Igor 9 alfa.
     2802                                Duplicate/Free/R=[i-1, i+1] FitIntensity, tmpInt
     2803                                Duplicate/Free/R=[i-1, i+1] Qvector, tmpQ
     2804                                DsmErrors[i]+= IN3_CalculateLineAvegare(FitIntensity,Qvector)   
     2805                                //this could be probably even more efficient, but seems good enough by now.
    28002806                endif
    28012807        i+=1
    28022808        while (i<imax-1)
    2803         Variable theend = StopMSTimer(-2)
    2804         print "IN3_GetErrors took : "+num2str((theend-start)/100)
     2809        //Variable theend = StopMSTimer(-2)
     2810        //print "IN3_GetErrors took : "+num2str((theend-start)/100)
    28052811        DsmErrors[0]=DsmErrors[1]                                                                       //some error needed for 1st point
    28062812        DsmErrors[imax-1]=DsmErrors[imax-2]                                                             //and error for last point     
     
    28092815        //abort
    28102816end
     2817//this calculates line avergae without doing line fit...
     2818Function IN3_CalculateLineAvegare(WaveY,waveX)
     2819        wave WaveY, WaveX
     2820       
     2821        variable nval = numpnts(WaveY)
     2822        if(nval==3)
     2823                variable sumx, sumy, sumxy, sumx2
     2824                sumx    = WaveX[0]+WaveX[1]+WaveX[2]
     2825                sumx2 = WaveX[0]^2+WaveX[1]^2+WaveX[2]^2
     2826                sumy    = WaveY[0]+WaveY[1]+WaveY[2]
     2827                sumxy =  WaveX[0]*WaveY[0]+WaveX[1]*WaveY[1]+WaveX[2]*WaveY[2]
     2828                variable mval = (nval * sumxy - sumx*sumy) / (nval*sumx2 - sumx^2)
     2829                variable cval = (sumy - mval * sumx) / nval
     2830                //print mval, cval
     2831                return mval*WaveX[1] + cval
     2832        endif
     2833        return 0
     2834end
     2835
    28112836
    28122837//***********************************************************************************************************************************
  • trunk/User Procedures/Irena/IR2_DataMiner.ipf

    r938 r939  
    724724                //done with special name based waves...
    725725                else            ///all others.
    726                         if(GrepString(ValueString, "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"))         //this si number
    727                                 CleanKeyName = CleanupName(KeyString[0,31], 0)
    728                                 Wave/Z TmpWv=$(CleanKeyName)
    729                                 if(!WaveExists(TmpWv))
    730                                         Make/O/N=(NumberOfExtractedItems+1) $(CleanKeyName)
    731                                 endif
    732                                 Wave TmpWv=$(CleanKeyName)
    733                                 Redimension/N=(NumberOfExtractedItems+1) TmpWv
    734                                 TmpWv[NumberOfExtractedItems] = str2num(ValueString)
    735                         else                                            //string, check if not date...
    736                                 TimeInSeconds = IN2G_ConvertTimeStringToSecs(ValueString)
    737                                 if(numtype(TimeInSeconds)==0)           //looks like time!
    738                                         CleanKeyName = CleanupName(KeyString[0,24], 0)+"Time"
    739                                         Wave/Z TmpTimeWv=$(CleanKeyName)
    740                                         if(!WaveExists(TmpStrWv))
     726                        if(strlen(ValueString)>1)                       //if "", we cannot process it...
     727                                if(GrepString(ValueString, "^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"))         //this is number
     728                                        CleanKeyName = CleanupName(KeyString[0,31], 0)
     729                                        Wave/Z TmpWv=$(CleanKeyName)
     730                                        if(!WaveExists(TmpWv))
    741731                                                Make/O/N=(NumberOfExtractedItems+1) $(CleanKeyName)
    742732                                        endif
    743                                         Wave TmpTimeWv=$(CleanKeyName)
    744                                         Redimension/N=(NumberOfExtractedItems+1) TmpTimeWv
    745                                         TmpTimeWv[NumberOfExtractedItems] = TimeInSeconds
    746                                 else            //ok, this is really string now...
    747                                         CleanKeyName = CleanupName(KeyString[0,31], 0)
    748                                         Wave/Z/T TmpStrWv=$(CleanKeyName)
    749                                         if(!WaveExists(TmpStrWv))
    750                                                 Make/O/N=(NumberOfExtractedItems+1)/T $(CleanKeyName)
     733                                        Wave TmpWv=$(CleanKeyName)
     734                                        Redimension/N=(NumberOfExtractedItems+1) TmpWv
     735                                        TmpWv[NumberOfExtractedItems] = str2num(ValueString)
     736                                else                                            //string, check if not date...
     737                                        TimeInSeconds = IN2G_ConvertTimeStringToSecs(ValueString)
     738                                        if(numtype(TimeInSeconds)==0)           //looks like time!
     739                                                CleanKeyName = CleanupName(KeyString[0,24], 0)+"Time"
     740                                                Wave/Z TmpTimeWv=$(CleanKeyName)
     741                                                if(!WaveExists(TmpStrWv))
     742                                                        Make/O/N=(NumberOfExtractedItems+1) $(CleanKeyName)
     743                                                endif
     744                                                Wave TmpTimeWv=$(CleanKeyName)
     745                                                Redimension/N=(NumberOfExtractedItems+1) TmpTimeWv
     746                                                TmpTimeWv[NumberOfExtractedItems] = TimeInSeconds
     747                                        else            //ok, this is really string now...
     748                                                CleanKeyName = CleanupName(KeyString[0,31], 0)
     749                                                Wave/Z/T TmpStrWv=$(CleanKeyName)
     750                                                if(!WaveExists(TmpStrWv))
     751                                                        Make/O/N=(NumberOfExtractedItems+1)/T $(CleanKeyName)
     752                                                endif
     753                                                Wave/T TmpStrWv=$(CleanKeyName)
     754                                                Redimension/N=(NumberOfExtractedItems+1) TmpStrWv
     755                                                TmpStrWv[NumberOfExtractedItems] = ValueString
    751756                                        endif
    752                                         Wave/T TmpStrWv=$(CleanKeyName)
    753                                         Redimension/N=(NumberOfExtractedItems+1) TmpStrWv
    754                                         TmpStrWv[NumberOfExtractedItems] = ValueString
    755757                                endif
    756758                        endif
  • trunk/User Procedures/Irena/IR3_SimpleFits.ipf

    r938 r939  
    7878                        else            //at least reinitialize the variables so we avoid major crashes...
    7979                                IR3J_InitSimpleFits()
    80                                 IR1T_InitFormFactors()
     80                                IR1T_InitFormFactors() 
    8181                        endif
    8282                endif
     
    123123        Setvariable Guinier_Rg, variable=root:Packages:Irena:SimpleFits:Guinier_Rg, limits={3,inf,0}, help={"Guinier Rg value"}
    124124        //Porod
    125         SetVariable Porod_Constant,pos={240,230},size={220,15}, proc=IR3J_SetVarProc,title="Porod Constant ", bodywidth=80
     125        SetVariable Porod_Constant,pos={240,230},size={220,15}, proc=IR3J_SetVarProc,title="Porod Con. [cm2/cm3/A^4] ", bodywidth=80
    126126        Setvariable Porod_Constant, variable=root:Packages:Irena:SimpleFits:Porod_Constant, limits={1e-20,inf,0}, help={"Porod constant"}
     127        SetVariable ScatteringContrast,pos={240,260},size={220,15}, proc=IR3J_SetVarProc,title="Contrast [10^20 cm^-4]", bodywidth=80
     128        Setvariable ScatteringContrast, variable=root:Packages:Irena:SimpleFits:ScatteringContrast, limits={1,inf,0}, help={"Scattering Contrast for the scatterers"}
     129        SetVariable Porod_SpecificSurface,pos={240,290},size={220,15}, proc=IR3J_SetVarProc,title="Spec. Sfc area [cm2/cm3]", bodywidth=80, limits={0,inf,0}
     130        Setvariable Porod_SpecificSurface, variable=root:Packages:Irena:SimpleFits:Porod_SpecificSurface, disable=0, noedit=1, help={"Porod constant"}
    127131        //Sphere controls
    128132        SetVariable Sphere_ScalingConstant,pos={240,230},size={220,15}, proc=IR3J_SetVarProc,title="Scaling ", bodywidth=80
     
    245249
    246250        ListOfVariables="UseIndra2Data1;UseQRSdata1;"
    247         ListOfVariables+="DataBackground;AchievedChiSquare;"
     251        ListOfVariables+="DataBackground;AchievedChiSquare;ScatteringContrast;"
    248252        ListOfVariables+="Guinier_Rg;Guinier_I0;"
    249         ListOfVariables+="Porod_Constant;Sphere_Radius;Sphere_ScalingConstant;"
     253        ListOfVariables+="Porod_Constant;Porod_SpecificSurface;Sphere_Radius;Sphere_ScalingConstant;"
    250254        ListOfVariables+="Spheroid_Radius;Spheroid_ScalingConstant;Spheroid_Beta;"
    251255        ListOfVariables+="ProcessManually;ProcessSequentially;OverwriteExistingData;AutosaveAfterProcessing;DelayBetweenProcessing;"
     
    326330                DelayBetweenProcessing = 2
    327331        endif
    328 
     332        NVAR ScatteringContrast
     333        if(ScatteringContrast<1)
     334                ScatteringContrast = 1
     335        endif
    329336        Make/O/T/N=(0) ListOfAvailableData
    330337        Make/O/N=(0) SelectionOfAvailableData
     
    15331540        NVAR Guinier_I0                                 = root:Packages:Irena:SimpleFits:Guinier_I0
    15341541        NVAR Guinier_Rg                                 =root:Packages:Irena:SimpleFits:Guinier_Rg
    1535         NVAR Porod_Constant                     =root:Packages:Irena:SimpleFits:Porod_Constant
     1542        NVAR Porod_Constant                             =root:Packages:Irena:SimpleFits:Porod_Constant
     1543        NVAR Porod_SpecificSurface      =root:Packages:Irena:SimpleFits:Porod_SpecificSurface
     1544        NVAR ScatteringContrast         =root:Packages:Irena:SimpleFits:ScatteringContrast
    15361545        NVAR Sphere_Radius                              =root:Packages:Irena:SimpleFits:Sphere_Radius
    15371546        NVAR Sphere_ScalingConstant     =root:Packages:Irena:SimpleFits:Sphere_ScalingConstant
     
    15841593                        break           
    15851594                case "Porod":                                           // Porod
     1595                        Porod_SpecificSurface =Porod_Constant *1e32 / (2*pi*ScatteringContrast*1e20)
    15861596                        ModelLogLogInt = DataBackground+Porod_Constant * ModelLogLogQ^(-4)
    15871597                        if(UsingLinearizedModel)
     
    16721682        NVAR Guinier_Rg                                 =root:Packages:Irena:SimpleFits:Guinier_Rg
    16731683        NVAR Porod_Constant                     =root:Packages:Irena:SimpleFits:Porod_Constant
     1684        NVAR Porod_SpecificSurface                      =root:Packages:Irena:SimpleFits:Porod_SpecificSurface
     1685        NVAR ScatteringContrast                 =root:Packages:Irena:SimpleFits:ScatteringContrast
    16741686        NVAR Sphere_Radius                              =root:Packages:Irena:SimpleFits:Sphere_Radius
    16751687        NVAR Sphere_ScalingConstant     =root:Packages:Irena:SimpleFits:Sphere_ScalingConstant
     
    17191731                IR1_AppendAnyText("\tI0                  = "+num2str(Guinier_I0),0)
    17201732        elseif(stringmatch(SimpleModel,"Porod"))
    1721                 IR1_AppendAnyText("\tPorod Constant      = "+num2str(Porod_Constant),0)
     1733                IR1_AppendAnyText("\tPorod Constant [1/cm 1/A^4] = "+num2str(Porod_Constant),0)
     1734                IR1_AppendAnyText("\tSpecific Surface [cm2/cm3] = "+num2str(Porod_SpecificSurface),0)
     1735                IR1_AppendAnyText("\tContrast [10^20 cm^-4] = "+num2str(Porod_Constant),0)
    17221736                IR1_AppendAnyText("\tBackground          = "+num2str(DataBackground),0)
    17231737        elseif(stringmatch(SimpleModel,"Sphere"))
     
    17771791        NVAR Guinier_Rg                                 =root:Packages:Irena:SimpleFits:Guinier_Rg
    17781792        NVAR Porod_Constant                     =root:Packages:Irena:SimpleFits:Porod_Constant
     1793        NVAR Porod_SpecificSurface                      =root:Packages:Irena:SimpleFits:Porod_SpecificSurface
     1794        NVAR ScatteringContrast                 =root:Packages:Irena:SimpleFits:ScatteringContrast
    17791795        NVAR Sphere_Radius                              =root:Packages:Irena:SimpleFits:Sphere_Radius
    17801796        NVAR Sphere_ScalingConstant     =root:Packages:Irena:SimpleFits:Sphere_ScalingConstant
     
    18441860                case "Porod":   // execute if case matches expression
    18451861                        NoteWithResults+="PorodConstant="+num2str(Porod_Constant)+";"+"DataBackground="+num2str(DataBackground)+";"
     1862                        NoteWithResults+="ScatteringContrast="+num2str(ScatteringContrast)+";"+"Porod_SpecificSurface="+num2str(Porod_SpecificSurface)+";"
    18461863                        NoteWithResults+=OldNote
    18471864                        generation=IN2G_FindAVailableResultsGen("SimFitPorodI_", DataFolderName)
     
    19051922        NVAR Guinier_Rg                                 =root:Packages:Irena:SimpleFits:Guinier_Rg
    19061923        NVAR Porod_Constant                     =root:Packages:Irena:SimpleFits:Porod_Constant
     1924        NVAR Porod_SpecificSurface                      =root:Packages:Irena:SimpleFits:Porod_SpecificSurface
     1925        NVAR ScatteringContrast                 =root:Packages:Irena:SimpleFits:ScatteringContrast
    19071926        NVAR Sphere_Radius                              =root:Packages:Irena:SimpleFits:Sphere_Radius
    19081927        NVAR Sphere_ScalingConstant     =root:Packages:Irena:SimpleFits:Sphere_ScalingConstant
     
    20092028                Wave/Z PorodConstant
    20102029                if(!WaveExists(PorodConstant))
    2011                         make/O/N=0 PorodConstant, PorodBackground, PorodQmin, PorodQmax, PorodChiSquare, TimeWave, TemperatureWave, PercentWave, OrderWave
     2030                        make/O/N=0 PorodConstant, PorodBackground, PorodQmin, PorodQmax, PorodChiSquare, TimeWave, TemperatureWave, PercentWave, OrderWave,ScatteringContrastWave, PorodSpecificSurfaceWave
    20122031                        make/O/N=0/T SampleName
    2013                         SetScale/P x 0,1,"cm3/A", PorodConstant                 //this may be worng, I suspect
     2032                        SetScale/P x 0,1,"1/cm 1/A^4", PorodConstant                    //Unified fit GUI source
    20142033                        SetScale/P x 0,1,"1/A", PorodQmin, PorodQmax
    20152034                endif
    20162035                curlength = numpnts(PorodConstant)
    2017                 redimension/N=(curlength+1) SampleName,PorodConstant, PorodBackground, PorodQmin, PorodQmax, PorodChiSquare, TimeWave, TemperatureWave, PercentWave, OrderWave
     2036                redimension/N=(curlength+1) SampleName,PorodConstant, PorodBackground, PorodQmin, PorodQmax, PorodChiSquare, TimeWave, TemperatureWave, PercentWave, OrderWave, ScatteringContrastWave, PorodSpecificSurfaceWave
    20182037                SampleName[curlength] = DataFolderName
    20192038                TimeWave[curlength]                             =       IN2G_IdentifyNameComponent(DataFolderName, "_xyzmin")
     
    20262045                PorodQmax[curlength] = DataQEnd
    20272046                PorodChiSquare[curlength] = AchievedChiSquare
     2047                ScatteringContrastWave[curlength] = ScatteringContrast
     2048                PorodSpecificSurfaceWave[curlength] = Porod_SpecificSurface
    20282049                IR3J_GetTableWithresults()
    20292050        elseif(stringmatch(SimpleModel,"Sphere"))
     
    23822403        SetDataFolder root:PorodFitResults:
    23832404        Wave/T SampleName
    2384         Wave PorodConstant,PorodBackground,PorodChiSquare, PorodQmax,PorodQmin
    2385         Edit/K=1/W=(576,346,1528,878)/N=IR3J_PorodFitResultsTable SampleName,PorodConstant,PorodBackground,PorodChiSquare as "Porod fitting results Table"
    2386         AppendToTable PorodQmax,PorodQmin
     2405        Wave PorodConstant,PorodBackground,PorodChiSquare, PorodQmax,PorodQmin, ScatteringContrastWave, PorodSpecificSurfaceWave
     2406        Edit/K=1/W=(576,346,1528,878)/N=IR3J_PorodFitResultsTable SampleName,PorodConstant,PorodSpecificSurfaceWave, PorodBackground,PorodChiSquare as "Porod fitting results Table"
     2407        AppendToTable PorodQmax,PorodQmin, ScatteringContrastWave
    23872408        ModifyTable format(Point)=1,width(SampleName)=314,title(SampleName)="Sample Folder"
    23882409        ModifyTable alignment(PorodConstant)=1,sigDigits(PorodConstant)=4,width(PorodConstant)=122
     
    23922413        ModifyTable alignment(PorodQmax)=1,sigDigits(PorodQmax)=4,title(PorodQmax)="Qmax [1/A]"
    23932414        ModifyTable alignment(PorodQmin)=1,sigDigits(PorodQmin)=4,width(PorodQmin)=94,title(PorodQmin)="Qmin [1/A]"
     2415        ModifyTable alignment(PorodSpecificSurfaceWave)=1,sigDigits(PorodSpecificSurfaceWave)=7,width(PorodSpecificSurfaceWave)=94,title(PorodQmin)="Spec Surface [cm2/cm3]"
     2416        ModifyTable alignment(ScatteringContrastWave)=1,sigDigits(ScatteringContrastWave)=4,width(ScatteringContrastWave)=94,title(ScatteringContrastWave)="Contrast [10^20 cm^-4]"
    23942417        SetDataFolder fldrSav0
    23952418EndMacro
     
    25382561                Setvariable Spheroid_Beta,  disable=1
    25392562                SetVariable DataBackground,  disable=1
     2563                SetVariable Porod_SpecificSurface, disable=1
     2564                SetVariable ScatteringContrast, disable=1
    25402565
    25412566                strswitch(SimpleModel)  // string switch
     
    25462571                        case "Porod":   // execute if case matches expression
    25472572                                SetVariable Porod_Constant, disable=0
     2573                                SetVariable Porod_SpecificSurface, disable=0
     2574                                SetVariable ScatteringContrast, disable=0
    25482575                                SetVariable DataBackground,  disable=0
    25492576                                break
Note: See TracChangeset for help on using the changeset viewer.