示例#1
0
def orbital_layer_weights_rel(blocks):
    import pyfplo.common as com

    labps = [
        'p3/2+3/2', 'p3/2-3/2', 'p3/2+1/2', 'p3/2-1/2', 'p1/2+1/2', 'p1/2-1/2'
    ]
    labps2 = ['p32+32', 'p32-32', 'p32+12', 'p32-12', 'p12+12', 'p12-12']
    b_ind = 0
    for i in range(6):
        orb_name = labps[i]
        wds = com.WeightDefinitions()
        suffix = orb_name
        for block in blocks:
            length = len(block)
            if (length == 5):
                name = """Q_%(b_ind)s""" % locals()
            else:
                name = """S_%(b_ind)s""" % locals()
            w = wds.add(name=name)
            labels_block = []
            for atom in block:
                site_index = atom[0]
                site = "{:03d}".format(site_index)
                if (atom[1] == 'Bi'):
                    label = """Bi(%(site)s)6%(suffix)s""" % locals()
                    labels_block.append(label)
                if (atom[1] == 'Te'):
                    label = """Te(%(site)s)5%(suffix)s""" % locals()
                    labels_block.append(label)
            w.addLabels(labels=labels_block, fac=1)
            b_ind += 1
        bw = com.BandWeights('+bweights_mydef')
        orb_name = labps2[i]
        bw.addWeights(wds,
                      """+bwsum_orb_%(orb_name)s_layer_resolved""" % locals())
示例#2
0
    def orbital_exp_decay(self,
                          lambda_0=20,
                          only_Bi=False,
                          only_Te=False,
                          from_septuple=False):
        """
	lamba_0: characteristic lenght for the exponential decay in Bohr
	"""
        import pyfplo.common as com

        self.build_exp_decay_weight(lambda_0, from_septuple)

        for i in range(len(self.orbs)):
            orb_name = self.orbs_names[i]
            labp = self.orbs[i]
            wds = com.WeightDefinitions()
            ind_atom = 0
            for block in self.my_blocks:
                for atom in block:
                    if (atom[1] != 'Mn'):
                        labels_atom = []
                        site_index = atom[0]
                        w = wds.add(
                            name="""exp_%(orb_name)s_%(site_index)s""" %
                            locals())

                        weight = self.weight[site_index]

                        #determine label
                        site = "{:03d}".format(site_index)
                        if (atom[1] == 'Bi' and not only_Te):
                            for suffix in labp:
                                label = """Bi(%(site)s)6%(suffix)s""" % locals(
                                )
                                labels_atom.append(label)
                        if (atom[1] == 'Te' and not only_Bi):
                            for suffix in labp:
                                label = """Te(%(site)s)5%(suffix)s""" % locals(
                                )
                                labels_atom.append(label)
                        ind_atom += 1
                        if (len(labels_atom) > 0):
                            w.addLabels(labels=labels_atom, fac=weight)
                        print "w", w
            bw = com.BandWeights('+bweights_mydef')
            output = """+bwsum_orb_%(orb_name)s_lambda_%(lambda_0)s""" % locals(
            )
            if (only_Bi):
                output += "_onlyBi"
            if (only_Te):
                output += "_onlyTe"
            bw.addWeights(wds, output)
示例#3
0
def layer_weights(blocks, rel=False, only_Bi=False, only_Te=False):
    import pyfplo.common as com
    wds = com.WeightDefinitions()

    labp = ['p+1up', 'p+1dn', 'p+0up', 'p+0dn', 'p-1up', 'p-1dn']
    if (rel):
        labp = [
            'p3/2+3/2', 'p3/2-3/2', 'p3/2+1/2', 'p3/2-1/2', 'p1/2+1/2',
            'p1/2-1/2'
        ]
    labd = [
        'd+2up', 'd+2dn', 'd+1up', 'd+1dn', 'd+0up', 'd+0dn', 'd-1up', 'd-1dn',
        'd-2up', 'd-2dn'
    ]
    b_ind = 0
    for block in blocks:
        length = len(block)
        print length
        if (length == 5):
            name = """Q_%(b_ind)s""" % locals()
        else:
            name = """S_%(b_ind)s""" % locals()
        w = wds.add(name=name)
        labels_block = []
        for atom in block:
            site_index = atom[0]
            site = "{:03d}".format(site_index)
            if (atom[1] == 'Bi' and not only_Te):
                for suffix in labp:
                    label = """Bi(%(site)s)6%(suffix)s""" % locals()
                    labels_block.append(label)
            if (atom[1] == 'Te' and not only_Bi):
                for suffix in labp:
                    label = """Te(%(site)s)5%(suffix)s""" % locals()
                    labels_block.append(label)
            if (atom[1] == 'Mn' and rel == False and not only_Te
                    and not only_Bi):
                for suffix in labd:
                    label = """Mn(%(site)s)3%(suffix)s""" % locals()
                    labels_block.append(label)
        w.addLabels(labels=labels_block, fac=1)
        print "w", w
    bw = com.BandWeights('+bweights_mydef')
    output = '+bwsum_layer_resolved'
    if (only_Bi):
        output += "_onlyBi"
    if (only_Te):
        output += "_onlyTe"
    bw.addWeights(wds, output)
示例#4
0
    def orbital_layer_weights(self, ewindow=None):
        import pyfplo.common as com

        b_ind = 0
        for i in range(len(self.orbs)):
            orb_name = self.orbs_names[i]
            labp = self.orbs[i]
            wds = com.WeightDefinitions()
            for block in self.my_blocks:
                length = len(block)
                if (length == 5):
                    name = """Q_%(b_ind)s""" % locals()
                else:
                    name = """S_%(b_ind)s""" % locals()
                w = wds.add(name=name)
                labels_block = []
                for atom in block:
                    site_index = atom[0]
                    site = "{:03d}".format(site_index)
                    if (atom[1] == 'Bi'):
                        for suffix in labp:
                            label = """Bi(%(site)s)6%(suffix)s""" % locals()
                            labels_block.append(label)
                    if (atom[1] == 'Te'):
                        for suffix in labp:
                            label = """Te(%(site)s)5%(suffix)s""" % locals()
                            labels_block.append(label)
                w.addLabels(labels=labels_block, fac=1)
                b_ind += 1
            bw = com.BandWeights('+bweights_mydef')
            if (ewindow == None):
                bw.addWeights(
                    wds,
                    """+bwsum_orb_%(orb_name)s_layer_resolved""" % locals())
            else:
                e_min = ewindow[0]
                e_max = ewindow[1]
                bw.addWeights(
                    wds,
                    """+bwsum_orb_%(orb_name)s_emin_%(e_min)s_emax_%(e_max)s_layer_resolved"""
                    % locals(),
                    ewindow=ewindow)
示例#5
0
def orbital_layer_weights(blocks, rel=False):
    import pyfplo.common as com

    orbs = [['p+1up', 'p+1dn'], ['p-1up', 'p-1dn'], ['p+0up', 'p+0dn']]
    orbs_names = ['px', 'py', 'pz']
    if (rel):
        orbs = [['p3/2+3/2'], ['p3/2-3/2'], ['p3/2+1/2'], ['p3/2-1/2'],
                ['p1/2+1/2'], ['p1/2-1/2']]
        orbs_names = ['32_32', '32_-32', '32_12', '32_-12', '12_12', '12_-12']
    b_ind = 0
    for i in range(len(orbs)):
        orb_name = orbs_names[i]
        labp = orbs[i]
        wds = com.WeightDefinitions()
        for block in blocks:
            length = len(block)
            if (length == 5):
                name = """Q_%(b_ind)s""" % locals()
            else:
                name = """S_%(b_ind)s""" % locals()
            w = wds.add(name=name)
            labels_block = []
            for atom in block:
                site_index = atom[0]
                site = "{:03d}".format(site_index)
                if (atom[1] == 'Bi'):
                    for suffix in labp:
                        label = """Bi(%(site)s)6%(suffix)s""" % locals()
                        labels_block.append(label)
                if (atom[1] == 'Te'):
                    for suffix in labp:
                        label = """Te(%(site)s)5%(suffix)s""" % locals()
                        labels_block.append(label)
            w.addLabels(labels=labels_block, fac=1)
            b_ind += 1
        bw = com.BandWeights('+bweights_mydef')
        bw.addWeights(wds,
                      """+bwsum_orb_%(orb_name)s_layer_resolved""" % locals())
示例#6
0
def orbital_exp_decay(blocks,
                      lambda_0=20,
                      rel=False,
                      only_Bi=False,
                      only_Te=False):
    import pyfplo.common as com
    orbs = [['p+1up', 'p+1dn'], ['p-1up', 'p-1dn'], ['p+0up', 'p+0dn']]
    orbs_names = ['px', 'py', 'pz']
    if (rel):
        orbs = [['p3/2+3/2'], ['p3/2-3/2'], ['p3/2+1/2'], ['p3/2-1/2'],
                ['p1/2+1/2'], ['p1/2-1/2']]
        orbs_names = ['32_32', '32_-32', '32_12', '32_-12', '12_12', '12_-12']
    z_coord_0 = -1000
    import numpy as np
    file = open("""weight_lambda_%(lambda_0)s.dat""" % locals(), 'w')
    for i in range(len(orbs)):
        orb_name = orbs_names[i]
        labp = orbs[i]
        wds = com.WeightDefinitions()
        ind_atom = 0
        for block in blocks:
            for atom in block:
                if (atom[1] != 'Mn'):
                    labels_atom = []
                    site_index = atom[0]
                    w = wds.add(
                        name="""exp_decay_%(orb_name)s_%(site_index)s""" %
                        locals())

                    #determine weight
                    z_coord = atom[2][2]
                    if (ind_atom == 0):
                        z_coord_0 = z_coord
                    assert z_coord_0 != -1000
                    rel_z = (z_coord - z_coord_0) / lambda_0
                    weight = np.exp(-rel_z)
                    if (i == 0):
                        print >> file, z_coord, rel_z, np.exp(-rel_z)

#determine label
                    site = "{:03d}".format(site_index)
                    if (atom[1] == 'Bi' and not only_Te):
                        for suffix in labp:
                            label = """Bi(%(site)s)6%(suffix)s""" % locals()
                            labels_atom.append(label)
                    if (atom[1] == 'Te' and not only_Bi):
                        for suffix in labp:
                            label = """Te(%(site)s)5%(suffix)s""" % locals()
                            labels_atom.append(label)
                    ind_atom += 1
                    if (len(labels_atom) > 0):
                        w.addLabels(labels=labels_atom, fac=weight)
                    print "w", w
        bw = com.BandWeights('+bweights_mydef')
        output = """+bwsum_orb_%(orb_name)s_lambda_%(lambda_0)s""" % locals()
        if (only_Bi):
            output += "_onlyBi"
        if (only_Te):
            output += "_onlyTe"
        bw.addWeights(wds, output)
    file.close()