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"
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
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
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()
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()