- Timestamp:
- Nov 29, 2020 8:41:57 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIdataGUI.py
r4660 r4664 6541 6541 seqSizer = wx.BoxSizer(wx.VERTICAL) 6542 6542 dataSizer = wx.BoxSizer(wx.HORIZONTAL) 6543 dataSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Sequential Refinement: '),0,WACV) 6544 selSeqData = wx.Button(G2frame.dataWindow,-1,label=' Select data') 6543 SeqData = data.get('Seq Data',[]) 6544 if not SeqData: 6545 dataSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Select datasets to switch to sequential refinement: '),0,WACV) 6546 selSeqData = wx.Button(G2frame.dataWindow,label='Select datasets') 6547 else: 6548 lbl = 'Sequential Refinement with '+str(len(SeqData))+' dataset(s) selected' 6549 dataSizer.Add(wx.StaticText(G2frame.dataWindow,label=lbl),0,WACV) 6550 selSeqData = wx.Button(G2frame.dataWindow,label=' Reselect datasets') 6545 6551 selSeqData.Bind(wx.EVT_BUTTON,OnSelectData) 6546 6552 dataSizer.Add(selSeqData,0,WACV) 6547 SeqData = data.get('Seq Data',[]) 6548 if not SeqData: 6549 lbl = ' (no data selected)' 6550 else: 6551 lbl = ' ('+str(len(SeqData))+' dataset(s) selected)' 6552 6553 dataSizer.Add(wx.StaticText(G2frame.dataWindow,label=lbl),0,WACV) 6554 seqSizer.Add(dataSizer,0) 6553 seqSizer.Add(dataSizer) 6555 6554 if SeqData: 6556 6555 selSizer = wx.BoxSizer(wx.HORIZONTAL) … … 6563 6562 copySel.SetValue(data['Copy2Next']) 6564 6563 selSizer.Add(copySel,0,WACV) 6565 clrSeq = wx.Button(G2frame.dataWindow,label='Clear previous seq. results')6564 clrSeq = wx.Button(G2frame.dataWindow,label='Clear previous seq. results') 6566 6565 clrSeq.Bind(wx.EVT_BUTTON,OnClrSeq) 6567 6566 selSizer.Add(clrSeq,0,WACV) … … 6597 6596 6598 6597 LSSizer = wx.FlexGridSizer(cols=4,vgap=5,hgap=5) 6599 LSSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Refinement derivatives: '),0,WACV) 6598 6599 tmpSizer=wx.BoxSizer(wx.HORIZONTAL) 6600 tmpSizer.Add(wx.StaticText(G2frame.dataWindow,label=' Refinement type: '),0,WACV) 6601 tmpSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='RefineType')) 6602 LSSizer.Add(tmpSizer,0,WACV) 6600 6603 Choice=['analytic Jacobian','numeric','analytic Hessian','Hessian SVD'] #TODO +'SVD refine' - what flags will it need? 6601 6604 derivSel = wx.ComboBox(parent=G2frame.dataWindow,value=data['deriv type'],choices=Choice, … … 6627 6630 Factr = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data,'shift factor',nDig=(10,5),xmin=1.e-5,xmax=100.) 6628 6631 LSSizer.Add(Factr,0,WACV) 6632 6633 ShklSizer = None 6629 6634 if G2frame.Sngl: 6635 ShklSizer = wx.FlexGridSizer(cols=4,vgap=5,hgap=5) 6630 6636 userReject = data['UsrReject'] 6631 6637 usrRej = {'minF/sig':[' Min obs/sig (0-5): ',[0.,5.], ],'MinExt':[' Min extinct. (0-.9): ',[0.,.9],], … … 6636 6642 fsqRef.SetValue(data['F**2']) 6637 6643 fsqRef.Bind(wx.EVT_CHECKBOX,OnFsqRef) 6638 LSSizer.Add(fsqRef,0,WACV)6639 LSSizer.Add((1,0),)6644 ShklSizer.Add(fsqRef,0,WACV) 6645 ShklSizer.Add((1,0),) 6640 6646 for item in usrRej: 6641 LSSizer.Add(wx.StaticText(G2frame.dataWindow,-1,label=usrRej[item][0]),0,WACV)6647 ShklSizer.Add(wx.StaticText(G2frame.dataWindow,-1,label=usrRej[item][0]),0,WACV) 6642 6648 usrrej = G2G.ValidatedTxtCtrl(G2frame.dataWindow,userReject,item,nDig=(10,2), 6643 6649 xmin=usrRej[item][1][0],xmax=usrRej[item][1][1]) 6644 LSSizer.Add(usrrej,0,WACV)6645 return LSSizer 6650 ShklSizer.Add(usrrej,0,WACV) 6651 return LSSizer,ShklSizer 6646 6652 6647 6653 def AuthSizer(): … … 6677 6683 subSizer.Add(wx.StaticText(G2frame.dataWindow,label='Refinement Controls'),0,WACV) 6678 6684 subSizer.Add((-1,-1),1,wx.EXPAND) 6685 subSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex='Controls')) 6679 6686 mainSizer.Add(subSizer,0,wx.EXPAND) 6680 6687 mainSizer.Add((5,5),0) 6681 mainSizer.Add(LSSizer()) 6682 mainSizer.Add((5,5),0) 6688 LSSizer,ShklSizer = LSSizer() 6689 mainSizer.Add(LSSizer) 6690 if ShklSizer: 6691 mainSizer.Add((5,15),0) 6692 G2G.HorizontalLine(mainSizer,G2frame.dataWindow) 6693 subSizer = wx.BoxSizer(wx.HORIZONTAL) 6694 subSizer.Add((-1,-1),1,wx.EXPAND) 6695 subSizer.Add(wx.StaticText(G2frame.dataWindow,label='Single Crystal Refinement Settings'),0,WACV) 6696 subSizer.Add((-1,-1),1,wx.EXPAND) 6697 mainSizer.Add(subSizer,0,wx.EXPAND) 6698 mainSizer.Add(ShklSizer) 6699 6700 mainSizer.Add((5,15),0) 6701 G2G.HorizontalLine(mainSizer,G2frame.dataWindow) 6702 subSizer = wx.BoxSizer(wx.HORIZONTAL) 6703 subSizer.Add((-1,-1),1,wx.EXPAND) 6704 subSizer.Add(wx.StaticText(G2frame.dataWindow,label='Sequential Settings'),0,WACV) 6705 subSizer.Add((-1,-1),1,wx.EXPAND) 6706 mainSizer.Add(subSizer,0,wx.EXPAND) 6683 6707 mainSizer.Add(SeqSizer()) 6684 mainSizer.Add((5,5),0) 6708 mainSizer.Add((5,15),0) 6709 G2G.HorizontalLine(mainSizer,G2frame.dataWindow) 6710 subSizer = wx.BoxSizer(wx.HORIZONTAL) 6711 subSizer.Add((-1,-1),1,wx.EXPAND) 6712 subSizer.Add(wx.StaticText(G2frame.dataWindow,label='Global Settings'),0,WACV) 6713 subSizer.Add((-1,-1),1,wx.EXPAND) 6714 mainSizer.Add(subSizer,0,wx.EXPAND) 6685 6715 mainSizer.Add(AuthSizer()) 6686 6716 mainSizer.Add((5,5),0) … … 6715 6745 G2frame.dataWindow.SetDataSize() 6716 6746 G2frame.SendSizeEvent() 6717 6747 6718 6748 ################################################################################ 6719 6749 ##### Display of Sequential Results -
trunk/help/gsasII.html
r4659 r4664 3677 3677 3678 3678 <p class=MsoNormal style='margin-left:.5in'><span style='mso-fareast-font-family: 3679 "Times New Roman"'>This window provides the main controls for the refinement 3680 calculations in GSAS-II. Two of the main refinement tools are the <span 3681 class=SpellE>fortran</span> MINPACK <span class=SpellE>lmdif</span> and <span 3682 class=SpellE>lmder</span> algorithms wrapped in python as provided in the <span 3683 class=SpellE>Scipy</span> package and a third one is a python version utilizing 3684 only the <span class=SpellE>numpy</span> package. The purpose is to </span>minimize 3679 "Times New Roman"'>This window provides the main controls and a few 3680 global parameters for GSAS-II. 3681 3682 <h5 style='margin-left:.5in'><span 3683 style='mso-fareast-font-family:"Times New Roman"'> 3684 What can I do here?</span></h5> 3685 <p style='margin-left:0.75in'>On this page, there are three or four sets of 3686 controls. The first is for how refinements operate. 3687 </p> 3688 <A name="RefineType"></A> 3689 <DL style='margin-left:1.0in'> 3690 <DT><B>Refinement type</B></DT> 3691 <DD>This determines how refinements are performed. The choices 3692 are:</DD> 3693 <UL style='margin-left:0.25in'> 3694 <LI><U>analytic Hessian</U>: This is the default option and is usually 3695 the most useful. It uses as custom-developed least-squares 3696 minimizer that uses singular-value decomposition (SVD) to reduce the 3697 errors caused by correlated variables and the 3698 Levenberg-Marquardt algorithm to down-weight the off-diagonal 3699 Hessian terms when refinements fail to lower χ<sup>2</sup>. 3700 <LI><u>analytic Jacobian</u>: This uses a numpy-provided <I>leastsq</I> 3701 minimizer, which not applicable for larger 3702 problems as it requires 3703 much more memory than the Hessian routines. This because it 3704 creates a Jacobian matrix is shaped N x M (N parameters x M 3705 observations) and uses that to create the N x N Hessian. The 3706 "Hessian" minimizers create the Hessian matrix directly. 3707 <LI><u>numeric</u>: This also uses the numpy <I>leastsq</I> 3708 minimizer, and is also not applicable for larger 3709 problems. Unlike, the "analytic Jacobian", numerical derivates 3710 are computed for derivatives rather than analytical derivatives 3711 that are coded directly into GSAS-II. This will be slower than 3712 the analytical derivatives and will converge more slowly. It is 3713 typically used for code development to check the accuracy of the 3714 analytical derivative formulations. 3715 <LI><u>Hessian SVD</u>: This is very similar to <U>analytic 3716 Hessian</U> but does not include the Levenberg-Marquardt 3717 algorithm. It can be faster, but is more prone to 3718 diverge when severe correlation is present. 3719 </UL> 3720 <p style='margin-left:0.25in'> 3721 Note that the Jacobian refinement tools are the Fortran 3722 MINPACK <I>lmdif</I > and <I>lmder</I> algorithms wrapped in python as 3723 provided in the <span class=SpellE>Scipy</span> package. The 3724 Hessian routines are were developed for GSAS-II based on routines in 3725 numpy and scipy and using the material in Numerical Recipes (Press, Flannery, <span class=SpellE>Teulosky</span> 3726 & <span class=SpellE>Vetterling</span>) for the <span 3727 class=SpellE>Levenberg</span>-Marquardt. 3728 The purpose is to </span>minimize 3685 3729 the sum of the squares of M<span style='mso-fareast-font-family:"Times New Roman"'> 3686 3730 nonlinear functions in N variables by a modification of the <span class=SpellE>Levenberg</span>-Marquardt … … 3688 3732 routines were written by </span>Burton S. <span class=SpellE>Garbow</span>, 3689 3733 Kenneth E. <span class=SpellE>Hillstrom</span>, Jorge J. More (Argonne National 3690 Laboratory, 1980). The python/numpy version was developed by us based on the 3691 material in Numerical Recipes (Press, Flannery, <span class=SpellE>Teulosky</span> 3692 & <span class=SpellE>Vetterling</span>) for the <span class=SpellE>Levenberg</span>-Marquardt 3693 algorithm and is the default.<span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></p> 3694 3695 <h5 style='margin-left:.5in'><span 3696 style='mso-fareast-font-family:"Times New Roman"'> 3697 What can I do here?</span></h5> 3698 3699 <p class=MsoListParagraphCxSpFirst style='margin-left:1.0in;mso-add-space:auto; 3700 text-indent:-.25in;mso-list:l22 level1 lfo9'><![if !supportLists]><span 3701 style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>1.<span 3702 style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span 3703 style='mso-fareast-font-family:"Times New Roman"'>Select whether the refinement 3704 uses ‘analytic Jacobian’, ‘analytic Hessian’ or ‘numeric’ derivatives. The last 3705 is slower and perhaps a bit less accurate, but may be needed if the analytic 3706 functions are not fully developed. The Jacobian matrix is shaped N x M 3707 (parameters x observations) and is much larger than the Hessian matrix which is 3708 shaped M x M (parameters x parameters). Generally use ‘analytic Hessian’ for 3709 routine work.<o:p></o:p></span></p> 3710 3711 <p class=MsoListParagraphCxSpMiddle style='margin-left:1.0in;mso-add-space: 3712 auto;text-indent:-.25in;mso-list:l22 level1 lfo9'><![if !supportLists]><span 3713 style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>2.<span 3714 style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span 3715 style='mso-fareast-font-family:"Times New Roman"'>Select ‘Min delta-M/M’ for 3716 convergence; the refinement will stop when the change in the minimization 3717 function is less than this value. Set Min delta-M/M = 1.0 to force just a 3718 single cycle to be performed. A value less than 10<sup>-4</sup> (the default) 3719 generally gives no better result. The allowed range is 10<sup>-9</sup> to 1.0.<o:p></o:p></span></p> 3720 3721 <p class=MsoListParagraphCxSpMiddle style='margin-left:1.0in;mso-add-space: 3722 auto;text-indent:-.25in;mso-list:l22 level1 lfo9'><![if !supportLists]><span 3723 style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>3.<span 3724 style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span 3725 style='mso-fareast-font-family:"Times New Roman"'>If ‘analytic Jacobean’ is 3726 chosen then select ‘Initial shift factor’ for the first cycle of refinement. 3727 This value is modified by the least squares routine. The allowed range is 10<sup>-5</sup> 3728 to 100. Smaller values may be needed if your initial refinement trials 3729 immediately diverge, however make sure your starting parameter values are 3730 ‘reasonable’. The selected default (=1.0) normally gives good performance.<o:p></o:p></span></p> 3731 3732 <p class=MsoListParagraphCxSpMiddle style='margin-left:1.0in;mso-add-space: 3733 auto;text-indent:-.25in;mso-list:l22 level1 lfo9'><![if !supportLists]><span 3734 style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>4.<span 3735 style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span 3736 style='mso-fareast-font-family:"Times New Roman"'>If ‘analytic Hessian’ is 3737 chosen then select ‘Max cycles’, the maximum number of least squares cycles to 3738 be performed. Least squares cycles are determined by the number of times a new 3739 Hessian matrix is computes; the <span class=SpellE>Levenberg</span>-Marquardt 3740 algorithm may compute the function several times between cycles as it finds the 3741 optimal value of the Marquardt coefficient. Choices are given in the pull down 3742 selection; the default is 3 cycles.<o:p></o:p></span></p> 3743 3744 <p class=MsoListParagraphCxSpLast style='margin-left:1.0in;mso-add-space:auto; 3745 text-indent:-.25in;mso-list:l22 level1 lfo9'><![if !supportLists]><span 3746 style='mso-fareast-font-family:"Times New Roman"'><span style='mso-list:Ignore'>5.<span 3747 style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span 3748 style='mso-fareast-font-family:"Times New Roman"'>Select data for sequential 3749 refinement; the data sets may be done in ‘reverse order’. <o:p></o:p></span></p> 3734 Laboratory, 1980). 3735 </p> 3736 <DT><B>Min delta-M/M</B></DT> 3737 <DD>This determines when convergence is recognized; 3738 the refinement will stop when the change in the minimization 3739 function is less than this value. Set Min delta-M/M = 1.0 to force just a 3740 single cycle to be performed. The default is 0.001. A value less than 3741 10<sup>-4</sup> causes the refinement to cycle with no meaningful 3742 improvement since shifts become a small fraction of the 3743 parameter's uncertainties. Set Min delta-M/M = 1.0 to force 3744 refinement to stop after a single refinement. 3745 The allowed range is 10<sup>-9</sup> to 1.0. 3746 </DD> 3747 <DT><B>Max cycles</B></DT> 3748 <DD>This determines the maximum number of refinement cycles that 3749 will be performed. This is only available with the "Hessian" minimizers.</DD> 3750 <DT><B>Initial lambda</B></DT> 3751 <DD>Note that here λ is the Marquardt coefficient, which when large 3752 down-weights the significance of the off-diagonal terms in the 3753 Hessian. Thus, when λ is large, the refinement is effectively one of 3754 steepest-descents, where correlation between variables is 3755 ignored. Note that steepest-descents minimization is typically 3756 slow and may not always find the local minimum. 3757 This is only available with the "analytical Hessian" minimizer. 3758 </DD> 3759 <DT><B>SVD zero tolerance</B></DT> 3760 <DD>This determines the level where SVD considers values to be the 3761 same. Default is 10<sup>-6</sup>. Make larger to where problems occur due to correlation. This is only available with the "Hessian" minimizers. 3762 </DD> 3763 <DT><B>Initial shift factor</B></DT> 3764 <DD>? 3765 </DD> 3766 </DL> 3767 <A name="SingleXtlSettings"></A> 3768 <p style='margin-left:0.75in'>A set of controls is provided for 3769 control of single-crystal refinements. 3770 These only appear when single crystal (HKLF) histograms are present 3771 in the project. 3772 </p> 3773 <DL style='margin-left:1.0in'> 3774 <DT><B>Refine HKLF as F^2?</B></DT> 3775 <DD>When checked, refinements are against F<sup>2</sup> rather than 3776 |F|. 3777 </DD> 3778 <DT><B>Min obs/sig</B></DT> 3779 <DD>? 3780 </DD> 3781 <DT><B>Min extinct.</B></DT> 3782 <DD>? 3783 </DD> 3784 <DT><B>Max delt-F/sig</B></DT> 3785 <DD>? 3786 </DD> 3787 <DT><B>Max d-spacing</B></DT> 3788 <DD>Reflections with d-space values larger than this value are ignored. 3789 </DD> 3790 <DT><B>Min d-spacing</B></DT> 3791 <DD>Reflections with d-space values smaller than this value are ignored. 3792 </DD> 3793 3794 </DL> 3795 3796 <A name="SequentialSettings"></A> 3797 <p style='margin-left:0.75in'>A set of controls is for 3798 sequential refinement. Settings here determine if "normal" or "sequential" 3799 refinement is performed. If no datasets are selected, then all "used" 3800 histograms are included in one combined refinement. However, if any 3801 number histogram are selected used here, then a 3802 sequential refinement is performed, where a fit is made to each 3803 histogram in turn. Only the first item below is shown in "normal" mode. 3804 </p> 3805 <DL style='margin-left:1.0in'> 3806 <DT><B>Select datasets/Reselect Datasets</B></DT> 3807 <DD>This brings up a menu where histograms can be selected, which 3808 potentially switches between a normal and a sequential refinement. 3809 If one or more histograms are selected, a sequential 3810 refinement is used. If none are selected, then the refinement be 3811 set as "normal". The button is labeled "Select" when in normal refinement 3812 mode and "Reselect" in sequential refinement mode. 3813 </DD> 3814 <DT><B>Reverse order?</B></DT> 3815 <DD>Normally, in a sequential histograms are fit in the order they 3816 are in the data tree (which can be reordered by dragging tree 3817 items), 3818 but when this option is selected, the sequential fit is performed 3819 with the last tree entry first. 3820 </DD> 3821 <DT><B>Copy results to next histogram?</B></DT> 3822 <DD>When this option is selected, the fitted parameters from each 3823 refinement are copied to the next histogram, so that the starting 3824 point for each refinement will be the results from fitting the 3825 previous. This works well for parametric experiments where 3826 parameters such as the lattice parameters change gradually over 3827 the course of successive measurements. 3828 This option is usually used only for the initial refinement after 3829 a sequential fit is started and the setting is reset once that 3830 refinement is completed. For subsequent refinements, it is usually 3831 better to start with the results from the previous fit. 3832 </DD> 3833 <DT><B>Clear previous seq. results</B></DT> 3834 <DD>When this button is pressed, the "Sequential Results" entry 3835 with the results from the last sequential fit is deleted from the 3836 tree. 3837 </DD> 3838 </DL> 3750 3839 3751 3840 <h4 style='margin-left:0.25in'><a … … 7443 7532 <hr size=2 width="100%" align=center> 7444 7533 7445 <!-- hhmts start -->Last modified: S at Nov 21 12:25:40CST 2020 <!-- hhmts end -->7534 <!-- hhmts start -->Last modified: Sun Nov 29 20:05:28 CST 2020 <!-- hhmts end --> 7446 7535 7447 7536 </div>
Note: See TracChangeset
for help on using the changeset viewer.