示例#1
0
    def spawn(self, newN, verbose):
        level = len(self.N)
        ret = CombinationResult(self.total, self.weight, self.N)
        ret.weight += Chem.getBlockMasses(level) * newN
        ret.N.append(newN)
        if verbose:
            print('spawning %s => %s' % (self, ret))

        return ret
示例#2
0
 def __init__(self, total, weight=None, N=[]):
     self.N = copy.copy(N)
     self.total = total
     if weight:
         self.weight = copy.copy(weight)
     else:
         self.weight = 0.0
         for i in range(len(self.N)):
             self.weight += self.N[i] * Chem.getBlockMasses(i)
示例#3
0
    def iterate(self, verbose):
        if self.isComplete():
            return
        else:
            level = len(self.N)
            maxN = math.ceil(
                (self.total - self.weight) / Chem.getBlockMasses(level)) + 1

            if verbose:
                print('Iterating level %d, N=%s, w=%f' %
                      (level, str(self.N), self.weight))
            for i in range(maxN + 1):
                if verbose:
                    print('  trying %d for level %d' % (i, level))
                yield self.spawn(i, verbose)
        return