Changeset 1086 for trunk/GSASII.py


Ignore:
Timestamp:
Oct 5, 2013 5:51:48 PM (8 years ago)
Author:
toby
Message:

finish dummy (simulated) histogram

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1084 r1086  
    586586            kind=wx.ITEM_NORMAL,text='guess format from file')
    587587        self.Bind(wx.EVT_MENU, self.OnImportPowder, id=item.GetId())
     588        submenu.AppendSeparator()
    588589        item = submenu.Append(wx.ID_ANY,
    589590            help='Create a powder data set entry that will be simulated',
     
    10161017
    10171018    def OnDummyPowder(self,event):
    1018         '''Called in response to an Import/Powder Data/... menu item
    1019         to read a powder diffraction data set.
    1020         dict self.ImportMenuId is used to look up the specific
    1021         reader item associated with the menu item, which will be
    1022         None for the last menu item, which is the "guess" option
    1023         where all appropriate formats will be tried.
    1024 
    1025         Also reads an instrument parameter file for each dataset.
    1026         '''
    1027         print 'Start Dummy'
     1019        '''Called in response to Import/Powder Data/Simulate menu item
     1020        to create a Dummy powder diffraction data set.
     1021
     1022        Reads an instrument parameter file and then gets input from the user
     1023        '''
    10281024        rd = G2IO.ImportPowderData(
    10291025            extensionlist=tuple(),
     
    10311027            formatName = 'Simulate dataset',
    10321028            longFormatName = 'Compute a simulated pattern')
    1033         # rd.powderdata = [
    1034         #     np.array(x), # x-axis values
    1035         #     np.array(y), # powder pattern intensities
    1036         #     np.array(w), # 1/sig(intensity)^2 values (weights)
    1037         #     np.zeros(N), # calc. intensities (zero)
    1038         #     np.zeros(N), # calc. background (zero)
    1039         #     np.zeros(N), # obs-calc profiles
    1040         #     ]
    1041         # rd.powderentry[0] = filename
     1029        rd.powderentry[0] = '' # no filename
    10421030        # #self.powderentry[1] = pos # bank offset (N/A here)
    1043         # rd.powderentry[2] = 1 # xye file only has one bank
    1044         # rd.idstring = ospath.basename(filename)
    1045         return
     1031        rd.powderentry[2] = 1 # only one bank
     1032        rd.comments.append('This is a dummy dataset for powder pattern simulation')
    10461033        self.CheckNotebook()
    10471034        Iparm = None
    10481035        lastIparmfile = ''
    10491036        lastdatafile = ''
     1037        self.zipfile = None
    10501038        # get instrument parameters for
    10511039        Iparm1,Iparm2 = self.GetPowderIparm(rd, Iparm, lastIparmfile, lastdatafile)
    1052 
    1053         for rd in rdlist:
    1054             if rd.repeat_instparm:
    1055                 lastIparmfile = rd.instfile
    1056             lastdatafile = rd.powderentry[0]
    1057             print 'Read powder data '+str(rd.idstring)+ \
    1058                 ' from file '+str(self.lastimport) + \
    1059                 ' with parameters from '+str(rd.instmsg)
    1060             # data are read, now store them in the tree
    1061             Id = self.PatternTree.AppendItem(parent=self.root,
    1062                 text='PWDR '+rd.idstring)
    1063             if 'T' in Iparm1['Type'][0]:
    1064                 if not rd.clockWd and rd.GSAS:
    1065                     rd.powderdata[0] *= 100.        #put back the CW centideg correction
    1066                 cw = np.diff(rd.powderdata[0])
    1067                 rd.powderdata[0] = rd.powderdata[0][:-1]+cw/2.
    1068                 rd.powderdata[1] = rd.powderdata[1][:-1]/cw
    1069                 rd.powderdata[2] = rd.powderdata[2][:-1]*cw**2  #1/var=w at this point
    1070                 if 'Itype' in Iparm2:
    1071                     Ibeg = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][0])
    1072                     Ifin = np.searchsorted(rd.powderdata[0],Iparm2['Tminmax'][1])
    1073                     rd.powderdata[0] = rd.powderdata[0][Ibeg:Ifin]
    1074                     YI,WYI = G2pwd.calcIncident(Iparm2,rd.powderdata[0])
    1075                     rd.powderdata[1] = rd.powderdata[1][Ibeg:Ifin]/YI
    1076                     var = 1./rd.powderdata[2][Ibeg:Ifin]
    1077                     var += WYI*rd.powderdata[1]**2
    1078                     var /= YI**2
    1079                     rd.powderdata[2] = 1./var
    1080                 rd.powderdata[3] = np.zeros_like(rd.powderdata[0])                                       
    1081                 rd.powderdata[4] = np.zeros_like(rd.powderdata[0])                                       
    1082                 rd.powderdata[5] = np.zeros_like(rd.powderdata[0])                                       
    1083             Tmin = min(rd.powderdata[0])
    1084             Tmax = max(rd.powderdata[0])
    1085             self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0,'Dummy':True},rd.powderdata])
    1086             self.PatternTree.SetItemPyData(
    1087                 self.PatternTree.AppendItem(Id,text='Comments'),
    1088                 rd.comments)
    1089             self.PatternTree.SetItemPyData(
    1090                 self.PatternTree.AppendItem(Id,text='Limits'),
    1091                 [(Tmin,Tmax),[Tmin,Tmax]])
    1092             self.PatternId = G2gd.GetPatternTreeItemId(self,Id,'Limits')
    1093             self.PatternTree.SetItemPyData(
    1094                 self.PatternTree.AppendItem(Id,text='Background'),
    1095                 [['chebyschev',True,3,1.0,0.0,0.0],
    1096                  {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}])
    1097             self.PatternTree.SetItemPyData(
    1098                 self.PatternTree.AppendItem(Id,text='Instrument Parameters'),
    1099                 [Iparm1,Iparm2])
    1100             self.PatternTree.SetItemPyData(
    1101                 self.PatternTree.AppendItem(Id,text='Sample Parameters'),
    1102                 rd.Sample)
    1103             self.PatternTree.SetItemPyData(
    1104                 self.PatternTree.AppendItem(Id,text='Peak List')
    1105                 ,[])
    1106             self.PatternTree.SetItemPyData(
    1107                 self.PatternTree.AppendItem(Id,text='Index Peak List'),
    1108                 [])
    1109             self.PatternTree.SetItemPyData(
    1110                 self.PatternTree.AppendItem(Id,text='Unit Cells List'),
    1111                 [])
    1112             self.PatternTree.SetItemPyData(
    1113                 self.PatternTree.AppendItem(Id,text='Reflection Lists'),
    1114                 {})
    1115             self.PatternTree.Expand(Id)
     1040        if 'T' in Iparm1['Type'][0]:
     1041            print('TOF simulation not supported yet')
     1042            return False
     1043        else:
     1044            # need to get name, 2theta start, end, step
     1045            rd.idstring = ' CW'
     1046            if 'X' in Iparm1['Type'][0]:
     1047                rd.idstring = 'CW x-ray simulation'
     1048            else:
     1049                rd.idstring = 'CW neutron simulation'
     1050            # base initial range on wavelength
     1051            wave = Iparm1.get('Lam')
     1052            if wave:
     1053                wave = wave[0]
     1054            else:
     1055                wave = Iparm1.get('Lam1')
     1056                if wave:
     1057                    wave = wave[0]
     1058        N = 0
     1059        while (N < 3): # insist on a dataset with a few points
     1060            names = ('dataset name', 'start angle', 'end angle', 'step size')
     1061            if not wave or wave < 1.0:
     1062                inp = [rd.idstring, 10.,40.,0.005] # see names for what's what
     1063            else:
     1064                inp = [rd.idstring, 10.,80.,0.01] # see names for what's what
     1065            dlg = G2gd.ScrolledMultiEditor(
     1066                self,[inp] * len(inp),range(len(inp)),names,
     1067                header='Enter simulation name and range',
     1068                minvals=(None,0.001,0.001,0.0001),
     1069                maxvals=(None,180.,180.,.1),
     1070                sizevals=((225,-1),)
     1071                )
     1072            dlg.CenterOnParent()
     1073            if dlg.ShowModal() == wx.ID_OK:
     1074                if inp[1] > inp[2]:
     1075                    end,start,step = inp[1:]
     1076                else:               
     1077                    start,end,step = inp[1:]
     1078                step = abs(step)
     1079            else:
     1080                return False
     1081            x = np.arange(start,end+step,step)
     1082            N = len(x)
     1083        rd.powderdata = [
     1084            np.array(x), # x-axis values
     1085            None, # powder pattern intensities
     1086            None, # 1/sig(intensity)^2 values (weights)
     1087            np.zeros(N), # calc. intensities (zero)
     1088            np.zeros(N), # calc. background (zero)
     1089            np.zeros(N), # obs-calc profiles
     1090            ]
     1091        Tmin = min(rd.powderdata[0])
     1092        Tmax = max(rd.powderdata[0])
     1093        # data are read, now store them in the tree
     1094        Id = self.PatternTree.AppendItem(parent=self.root,
     1095                                         text='PWDR '+rd.idstring)           
     1096        self.PatternTree.SetItemPyData(Id,[{'wtFactor':1.0,'Dummy':True},rd.powderdata])
     1097        self.PatternTree.SetItemPyData(
     1098            self.PatternTree.AppendItem(Id,text='Comments'),
     1099            rd.comments)
     1100        self.PatternTree.SetItemPyData(
     1101            self.PatternTree.AppendItem(Id,text='Limits'),
     1102            [(Tmin,Tmax),[Tmin,Tmax]])
     1103        self.PatternId = G2gd.GetPatternTreeItemId(self,Id,'Limits')
     1104        self.PatternTree.SetItemPyData(
     1105            self.PatternTree.AppendItem(Id,text='Background'),
     1106            [['chebyschev',True,3,1.0,0.0,0.0],
     1107             {'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]}])
     1108        self.PatternTree.SetItemPyData(
     1109            self.PatternTree.AppendItem(Id,text='Instrument Parameters'),
     1110            [Iparm1,Iparm2])
     1111        self.PatternTree.SetItemPyData(
     1112            self.PatternTree.AppendItem(Id,text='Sample Parameters'),
     1113            rd.Sample)
     1114        self.PatternTree.SetItemPyData(
     1115            self.PatternTree.AppendItem(Id,text='Peak List')
     1116            ,[])
     1117        self.PatternTree.SetItemPyData(
     1118            self.PatternTree.AppendItem(Id,text='Index Peak List'),
     1119            [])
     1120        self.PatternTree.SetItemPyData(
     1121            self.PatternTree.AppendItem(Id,text='Unit Cells List'),
     1122            [])
     1123        self.PatternTree.SetItemPyData(
     1124            self.PatternTree.AppendItem(Id,text='Reflection Lists'),
     1125            {})
     1126        self.PatternTree.Expand(Id)
    11161127        self.PatternTree.SelectItem(Id)
     1128        print('Added simulation powder data '+str(rd.idstring)+
     1129              ' with parameters from '+str(rd.instmsg))
    11171130        return # success
    1118 
    1119     def OnDummyPowder(self,event):
    1120         import testit
    1121         reload(testit)
    1122         testit.OnDummyPowder(self,event)
    1123         return
    1124 
    11251131
    11261132    def _init_Exports(self,menu):
Note: See TracChangeset for help on using the changeset viewer.