Ignore:
Timestamp:
Mar 16, 2022 7:21:28 PM (19 months ago)
Author:
toby
Message:

correct weight fraction calc and replace uses with lookup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/exports/G2export_CIF.py

    r5191 r5232  
    369369    # compute and add weight fractions to table if varied
    370370    for phase in Phases:
    371         var = str(Phases[phase]['pId'])+':*:Scale'
    372         if var not in combinedVaryList+list(depValDict.keys()): continue
     371        pId = Phases[phase]['pId']
     372        var = str(pId)+':*:Scale'
     373        if var not in combinedVaryList+list(depValDict.keys()): continue   
    373374        wtFrList = []
    374375        sigwtFrList = []
    375376        for i,name in enumerate(histNames):
     377            skip = False
    376378            if name not in Phases[phase]['Histograms']:
     379                skip = True
     380            elif not Phases[phase]['Histograms'][name]['Use']:
     381                skip = True
     382            hId = Histograms[name]['hId']
     383            var = str(pId)+':'+str(hId)+':WgtFrac'
     384            if var not in seqData[name]['depParmDict']: skip = True
     385            if skip:
    377386                wtFrList.append(None)
    378387                sigwtFrList.append(0.0)
    379388                continue
    380             elif not Phases[phase]['Histograms'][name]['Use']:
    381                 wtFrList.append(None)
    382                 sigwtFrList.append(0.0)
    383                 continue
    384             wtFrSum = 0.
    385             for phase1 in Phases:
    386                 if name not in Phases[phase1]['Histograms']: continue
    387                 if not Phases[phase1]['Histograms'][name]['Use']: continue
    388                 wtFrSum += Phases[phase1]['Histograms'][name]['Scale'][0]*Phases[phase1]['General']['Mass']
    389             var = str(Phases[phase]['pId'])+':'+str(i)+':Scale'
    390             wtFr = Phases[phase]['Histograms'][name]['Scale'][0]*Phases[phase]['General']['Mass']/wtFrSum
     389            wtFr,sig = seqData[name]['depParmDict'][var]
    391390            wtFrList.append(wtFr)
    392             if var in seqData[name]['varyList']:
    393                 sig = seqData[name]['sig'][seqData[name]['varyList'].index(var)]*wtFr/Phases[phase]['Histograms'][name]['Scale'][0]
    394             elif var in seqData[name].get('depParmDict',{}):
    395                 _,sig = seqData[name]['depParmDict'][var]
    396             else:
    397                 sig = 0.0
    398391            sigwtFrList.append(sig)
    399392        p = phaseLookup[Phases[phase]['pId']]
     
    22412234            sequential fits, since it is called so many times.
    22422235            '''
    2243             #breakpoint()
    22442236            Atoms = phasedict['Atoms']
    22452237            generalData = phasedict['General']
     
    28332825                                 '\n   _pd_phase_block_id' +
    28342826                                 '\n   _pd_phase_mass_%')
    2835                     wtFrSum = 0.
     2827                    hId = self.Histograms[histlbl]['hId']
    28362828                    for phasenam in phasebyhistDict.get(histlbl):
    2837                         hapData = self.Phases[phasenam]['Histograms'][histlbl]
    2838                         General = self.Phases[phasenam]['General']
    2839                         wtFrSum += hapData['Scale'][0]*General['Mass']
    2840 
    2841                     for phasenam in phasebyhistDict.get(histlbl):
    2842                         hapData = self.Phases[phasenam]['Histograms'][histlbl]
    2843                         General = self.Phases[phasenam]['General']
    2844                         wtFr = hapData['Scale'][0]*General['Mass']/wtFrSum
    2845                         pfx = str(self.Phases[phasenam]['pId'])+':'+str(hId)+':'
    2846                         if pfx+'Scale' in self.sigDict:
    2847                             sig = self.sigDict[pfx+'Scale']*wtFr/hapData['Scale'][0]
     2829                        pId = self.Phases[phasenam]['pId']
     2830                        var = str(pId)+':'+str(hId)+':WgtFrac'
     2831                        if self.seqData is None and 'depSigDict' in self.OverallParms['Covariance']:
     2832                            depDict = self.OverallParms['Covariance']['depSigDict']
     2833                        elif self.seqData is not None and 'depParmDict' in self.seqData[histlbl]:
     2834                            depDict = self.seqData[histlbl]['depParmDict']
    28482835                        else:
    2849                             sig = -0.0001
     2836                            depDict = {}
     2837                        if var in depDict:
     2838                            wtFr,sig = depDict[var]
     2839                            wgtstr = G2mth.ValEsd(wtFr,sig)
     2840                        else:                               
     2841                            wgtstr = '?'
    28502842                        WriteCIFitem(self.fp,
    28512843                            '  '+
    28522844                            str(self.Phases[phasenam]['pId']) +
    28532845                            '  '+datablockidDict[phasenam]+
    2854                             '  '+G2mth.ValEsd(wtFr,sig)
     2846                            '  '+wgtstr
    28552847                            )
    28562848                    WriteCIFitem(self.fp, 'loop_' +
     
    31283120                                 '\n   _pd_phase_block_id' +
    31293121                                 '\n   _pd_phase_mass_%')
    3130                     wtFrSum = 0.
     3122                    hId = self.Histograms[histlbl]['hId']
    31313123                    for phasenam in phasebyhistDict.get(histlbl):
    3132                         hapData = self.Phases[phasenam]['Histograms'][histlbl]
    3133                         General = self.Phases[phasenam]['General']
    3134                         wtFrSum += hapData['Scale'][0]*General['Mass']
    3135 
    3136                     for phasenam in phasebyhistDict.get(histlbl):
    3137                         hapData = self.Phases[phasenam]['Histograms'][histlbl]
    3138                         General = self.Phases[phasenam]['General']
    3139                         wtFr = hapData['Scale'][0]*General['Mass']/wtFrSum
    3140                         pfx = str(self.Phases[phasenam]['pId'])+':'+str(hId)+':'
    3141                         if pfx+'Scale' in self.sigDict:
    3142                             sig = self.sigDict[pfx+'Scale']*wtFr/hapData['Scale'][0]
     3124                        pId = self.Phases[phasenam]['pId']
     3125                        var = str(pId)+':'+str(hId)+':WgtFrac'
     3126                        if self.seqData is None and 'depSigDict' in self.OverallParms['Covariance']:
     3127                            depDict = self.OverallParms['Covariance']['depSigDict']
     3128                        elif self.seqData is not None and 'depSigDict' in self.seqData[histlbl]:
     3129                            depDict = self.seqData[histlbl]['depParmDict']
    31433130                        else:
    3144                             sig = -0.0001
     3131                            depDict = {}
     3132                        if var in depDict:
     3133                            wtFr,sig = depDict[var]
     3134                            wgtstr = G2mth.ValEsd(wtFr,sig)
     3135                        else:                               
     3136                            wgtstr = '?'
    31453137                        WriteCIFitem(self.fp,
    31463138                            '  '+
    31473139                            str(self.Phases[phasenam]['pId']) +
    31483140                            '  '+datablockidDict[phasenam]+
    3149                             '  '+G2mth.ValEsd(wtFr,sig)
     3141                            '  '+wgtstr
    31503142                            )
    31513143                    WriteCIFitem(self.fp, 'loop_' +
     
    42954287                        WriteCIFitem(self.fp, '\n# POINTERS TO PHASE BLOCKS')
    42964288                        phaseBlockName = {}
    4297 
    4298                         wtFrSum = 0.
    4299                         for j,phasenam in enumerate(sorted(self.Phases.keys())):
    4300                             if hist not in self.Phases[phasenam]['Histograms']: continue
    4301                             if not self.Phases[phasenam]['Histograms'][hist]['Use']: continue
    4302                             phFrac = self.Phases[phasenam]['Histograms'][hist]['Scale'][0]
    4303                             phFracKey = str(self.Phases[phasenam]['pId'])+':'+str(hId)+':Scale'
    4304                             phFrac = self.seqData[hist]['parmDict'].get(phFracKey,phFrac)
    4305                             wtFrSum += phFrac * self.Phases[phasenam]['General']['Mass']
    43064289                        WriteCIFitem(self.fp, 'loop_ _pd_phase_id _pd_phase_block_id _pd_phase_mass_%')
    43074290                        for j,phasenam in enumerate(sorted(self.Phases.keys())):
     
    43144297                                s = PutInCol(phasenam,20)
    43154298                            phaseBlockName[pId] = datablockidDict[hist]+'_p'+str(j+1)
    4316                             phFrac = self.Phases[phasenam]['Histograms'][hist]['Scale'][0]
    4317                             phFracKey = str(self.Phases[phasenam]['pId'])+':'+str(hId)+':Scale'
    4318                             phFrac = self.seqData[hist]['parmDict'].get(phFracKey,phFrac)
    4319                             wtFr = phFrac * self.Phases[phasenam]['General']['Mass'] / wtFrSum
    4320                             if phFracKey in self.seqData[hist]['varyList']:
    4321                                 sig = self.seqData[hist]['sig'][self.seqData[hist]['varyList'].index(phFracKey)]
    4322                                 sig *= self.Phases[phasenam]['General']['Mass'] / wtFrSum
    4323                             elif phFracKey in self.seqData[hist]['depParmDict']:
    4324                                 sig = self.seqData[hist]['depParmDict'][phFracKey][1]
    4325                                 sig *= self.Phases[phasenam]['General']['Mass'] / wtFrSum
    4326                             else:
    4327                                 sig = -0.0001
    4328                             WriteCIFitem(self.fp, "  "+ s + " " + phaseBlockName[pId] + "  " + G2mth.ValEsd(wtFr,sig))
     4299                            var = str(pId)+':'+str(hId)+':WgtFrac'
     4300                            if var in self.seqData[hist].get('depParmDict',{}):
     4301                                wtFr,sig = self.seqData[hist]['depParmDict'][var]
     4302                                wgtstr = G2mth.ValEsd(wtFr,sig)
     4303                            else:                               
     4304                                wgtstr = '?'
     4305                            WriteCIFitem(self.fp, "  "+ s + " " + phaseBlockName[pId] + "  " + wgtstr)
    43294306                            datablockidDict[phasenam] = phaseBlockName[pId]
    43304307                        PP = FormatInstProfile(histblk["Instrument Parameters"],histblk['hId'])
Note: See TracChangeset for help on using the changeset viewer.