Ejemplo n.º 1
0
def binary(i):
    """Returns a binary string representation of number.

    Example:
    >>> binary(2)
    '10'
    >>> binary(1337) 
    '10100111001'
    >>> int(binary(1337), 2)
    1337
    """
    if not i: 
        return "" # finished, no more bits
    bit = i & 1   # front bit
    i = i >> 1    # shift away front bit
    if bit:    # bit was set
        return binary(i) + "1"
    else:
        return binary(i) + "0"
Ejemplo n.º 2
0
def getPopRecursion(n, logR_mean, a2_mean, a2_std, dtilt, kick, kick_args):
    """
    global trials
    if trials>0:
        r = (200.-n)/trials
        if r<0.001 and 1/np.sqrt(200.-n)<0.1:
            print("too few!")
            trials = 0
            return
    trials += n
    """

    #logR_min = np.log10(R_min)
    #logR_max = np.log10(R_max)

    mMax = 75.
    mMin = 5.
    bq = 1.3
    alpha = -2.2

    if n == 0:
        trials = 0
        return

    else:

        # Tilt angles
        t1 = genTruncatedNorm(n, 0, dtilt, -np.pi, np.pi)
        t2 = genTruncatedNorm(n, 0, dtilt, -np.pi, np.pi)

        # Azimuthal angles
        phi1 = 2. * np.pi * np.random.random(n)
        phi2 = 2. * np.pi * np.random.random(n)

        # Spin magnitudes
        a1 = np.zeros(n)
        a2 = genTruncatedNorm(n, a2_mean, a2_std, 0, 1)

        # Masses
        m1 = np.power(
            (mMax**(1. + alpha) - mMin**(1. + alpha)) * np.random.random(n) +
            mMin**(1. + alpha), 1. / (1. + alpha))
        m2 = np.power((m1**(1. + bq) - mMin**(1. + bq)) * np.random.random(n) +
                      mMin**(1. + bq), 1. / (1. + bq))

        # Separation
        #sep = 10.**(logR_min + (logR_max-logR_min)*np.random.random(n))
        #sep = 10.**(np.random.normal(size=n,loc=logR_mean,scale=0.5))
        #sep = 10.**logR_mean*np.ones(n)
        #logSep = genTruncatedNorm(n,logR_mean,0.5,np.log10(3.),np.inf)
        #sep = 10.**logSep
        sep = 10.**(np.log10(5.) +
                    (np.log10(300) - np.log10(5.)) * np.random.random(n))

        #period = 10.**(3.*np.random.random(n)-1)*24.*3600
        #sep = np.power(G*(m1+m2)*Msun*period**2./(4.*np.pi**2.),1./3.)/Rsun

        binaries = np.array([
            binary(m1[i], m2[i], a1[i], a2[i], t1[i], t2[i], phi1[i], phi2[i],
                   sep[i] * Rsun) for i in range(n)
        ])

        if kick == "maxwellian":
            survived = np.array(
                [b.kick(random_kick(*kick_args), 1) for b in binaries])
        elif kick == "directed":
            survived = np.array([
                b.kick(random_lognormal_kick(*kick_args), 1) for b in binaries
            ])
        elif kick == "polar_maxwellian":
            survived = np.array(
                [b.kick(polar_maxwellian(*kick_args), 1) for b in binaries])
        else:
            sys.exit()

        mergerTimes = np.array([b.time_to_merger()
                                for b in binaries]) / 1e10 / year
        to_replace = ((survived == 0) + (mergerTimes > 1))
        binaries[to_replace] = getPopRecursion(len(binaries[to_replace]),
                                               logR_mean, a2_mean, a2_std,
                                               dtilt, kick, kick_args)
        return binaries
Ejemplo n.º 3
0
def getPopRecursion(n,
                    logR_mean,
                    a2_mean,
                    a2_std,
                    dtilt,
                    kick,
                    kick_args,
                    beta,
                    efficiencyThreshold=1e-3,
                    dist='logUniform'):

    genTime = 0.

    mMax = 75.
    mMin = 5.
    bq = 1.3
    alpha = -2.2

    trials = 0
    surviveSN = 0
    merge = 0

    final_binaries = np.array([])
    while final_binaries.size < n:

        trials += n

        # Tilt angles
        t1 = genTruncatedNorm(n, 0, dtilt, -np.pi, np.pi)
        t2 = genTruncatedNorm(n, 0, dtilt, -np.pi, np.pi)

        # Azimuthal angles
        phi1 = 2. * np.pi * np.random.random(n)
        phi2 = 2. * np.pi * np.random.random(n)

        # Spin magnitudes
        a1 = np.zeros(n)
        a2 = genTruncatedNorm(n, a2_mean, a2_std, 0, 1)

        # Masses
        m1 = np.power(
            (mMax**(1. + alpha) - mMin**(1. + alpha)) * np.random.random(n) +
            mMin**(1. + alpha), 1. / (1. + alpha))
        m2 = np.power((m1**(1. + bq) - mMin**(1. + bq)) * np.random.random(n) +
                      mMin**(1. + bq), 1. / (1. + bq)) / beta

        # Separation
        if dist == 'logUniform':
            sep = 10.**(np.log10(5.) +
                        (np.log10(300) - np.log10(5.)) * np.random.random(n))
        elif dist == 'logNormal':
            sep = 10.**np.random.normal(loc=1.1, scale=0.3, size=n)
        elif dist == 'delta':
            sep = 10.**logR_mean * np.ones(n)
        else:
            sys.exit()

        binaries = [
            binary(m1[i], m2[i], a1[i], a2[i], t1[i], t2[i], phi1[i], phi2[i],
                   sep[i] * Rsun) for i in range(n)
        ]

        if kick == "maxwellian":
            survived = np.array(
                [b.kick(random_kick(*kick_args), beta) for b in binaries])
        elif kick == "directed":
            survived = np.array([
                b.kick(random_lognormal_kick(*kick_args), beta)
                for b in binaries
            ])
        else:
            sys.exit()

        mergerTimes = np.array([b.time_to_merger()
                                for b in binaries]) / 1e10 / year
        surviveSN += np.where(survived == 1)[0].size
        merge += np.where(mergerTimes < 1)[0].size

        successful = ((survived == 1) * (mergerTimes < 1))
        final_binaries = np.append(final_binaries,
                                   np.array(binaries)[successful])

        # Estimate success probability
        # If none have yet been successful, take an upper limit of 1/trials
        p_hat = max(1. * final_binaries.size / trials, 1. / trials)
        error = np.sqrt(p_hat * (1. - p_hat) / trials)
        if (trials > 1. / efficiencyThreshold
            ) and (efficiencyThreshold - p_hat) / error > 3:
            return final_binaries, trials, surviveSN, merge, False

    return final_binaries, trials, surviveSN, merge, True
Ejemplo n.º 4
0
from PIL import Image
import os,sys
from binary import *
from horizontal_segmentation import *
from vertical_segmentation import *
from hchar_segmentation import *
from feature_extraction import *

#Entering scanned image
print "Enter the scanned image:"
input_image = raw_input()

#Entering binarisation phase

ocr_input = Image.open(input_image)
binary_image = binary(ocr_input)
binary_image.binarize()

#Entering horizontal segmentation phase
#Segmented output is obtained as "\temp\hsegments" folder

h_segmentation_input =  Image.open("../temp/binary_image.png")
hsegments = hsegmentation(h_segmentation_input)
hsegments.addlines()


#Entering vertical segmentation phase
#Segmented output is obtained in "\temp\vsegments" folder

hsegment_list = os.listdir("../temp/hsegments")
hsegment_list.sort()
Ejemplo n.º 5
0
from PIL import Image
import os, sys
from binary import *
from horizontal_segmentation import *
from vertical_segmentation import *
from hchar_segmentation import *
from feature_extraction import *

#Entering scanned image
print "Enter the scanned image:"
input_image = raw_input()

#Entering binarisation phase

ocr_input = Image.open(input_image)
binary_image = binary(ocr_input)
binary_image.binarize()

#Entering horizontal segmentation phase
#Segmented output is obtained as "\temp\hsegments" folder

h_segmentation_input = Image.open("../temp/binary_image.png")
hsegments = hsegmentation(h_segmentation_input)
hsegments.addlines()

#Entering vertical segmentation phase
#Segmented output is obtained in "\temp\vsegments" folder

hsegment_list = os.listdir("../temp/hsegments")
hsegment_list.sort()