示例#1
0
	def get_Eorb(self, unit_system="SI"):
		nmu.set_units(system=unit_system)
		energy_unit = nmu.units["energy"]

		Eorb = []
		for sdata, _ in self.data:
			nmu.set_units(sdata["unit_system"])
			Eorb.append( nmu.convert_energy(sdata["system"]["Eorb"], nmu.units["energy"], energy_unit) )

		return Eorb
示例#2
0
	def get_E(self, unit_system="SI"):
                nmu.set_units(system=unit_system)
                energy_unit = nmu.units["energy"]

                mE = []
		sE = []
                for sdata, _ in self.data:
                        nmu.set_units(sdata["unit_system"])

			Eorb = nmu.convert_energy(abs(sdata["system"]["Eorb"]), nmu.units["energy"], energy_unit)
			mE.append( sdata["stats"]["mean{sum{E}/|Eorb|}"] * Eorb )
			sE.append( sdata["stats"]["stdv{sum{E}/|Eorb|}"] * Eorb )

                return mE, sE
示例#3
0
	def get_Edot(self, unit_system="SI"):
		nmu.set_units(system=unit_system)
		energy_unit = nmu.units["energy"]
		time_unit = nmu.units["time"]
		
		mEdot = []
		sEdot = []
		for sdata, _ in self.data:
			nmu.set_units(sdata["unit_system"])

			Eorb = nmu.convert_energy(abs(sdata["system"]["Eorb"]), nmu.units["energy"], energy_unit)
			porb = nmu.convert_time(sdata["system"]["Porb"], nmu.units["time"], time_unit)

			mEdot.append( sdata["stats"]["mean{|sum{Edot}|*(Porb/|Eorb|)}"] * Eorb/porb )		
			sEdot.append( sdata["stats"]["stdv{|sum{Edot}|*(Porb/|Eorb|)}"] * Eorb/porb )
	
		return mEdot, sEdot
示例#4
0
def harmonic_average(cluster, key, unit_system="SI"):
        """
        computes the harmonic average over the data within cluster
        we compute <Edot> = int dt Edot / int dt
        but we take the integral over Porb, so changing the integration variable to Porb yields

        <Edot> = int dP ( E/P * Edot**-1) * key / int dP ( E/P * Edot**-1 )

        ASSUMES spacing is even in Porb-space (within each cluster!), so the integral's measure drops out
        """
        nmu.set_units(unit_system)
        time_unit = nmu.units["time"]
        energy_unit = nmu.units["energy"]

	P = []
	E = []
	mEdot = []
	sEdot = []
	x = []
	sx = []

	for sdata, mdata in cluster.data:
		nmu.set_units(sdata["unit_system"])

		### convertion to Porb measure
		Porb = nmu.convert_time(sdata["system"]["Porb"], nmu.units["time"], time_unit)
		Eorb = nmu.convert_energy(sdata["system"]["Eorb"], nmu.units["energy"], energy_unit)

		P.append( Porb )
		E.append( Eorb )

		mEdot.append( sdata["stats"]["mean{|sum{Edot}|*(Porb/|Eorb|)}"] * Eorb/Porb )
		sEdot.append( sdata["stats"]["stdv{|sum{Edot}|*(Porb/|Eorb|)}"] * Eorb/Porb )

		if key == "Edot":
			x.append( sdata["stats"]["mean{|sum{Edot}|*(Porb/|Eorb|)}"] * Eorb/Porb )
			sx.append( sdata["stats"]["stdv{|sum{Edot}|*(Porb/|Eorb|)}"] * Eorb/Porb )
		elif key == "E":
			x.append( sdata["stats"]["mean{sum{E}/|Eorb|}"] * Eorb )
			sx.append( sdata["stats"]["stdv{sum{E}/|Eorb|}"] * Eorb )
		else:
			raise KeyError, "key=%s not understood"%key

	### cast to arrays
	P = np.array(P)
	E = np.array(E)
	mEdot = np.array(mEdot)
	sEdot = np.array(sEdot)
	x = np.array(x)
	sx = np.array(sx)

	### compute averages
	integrand = Eorb/(Porb*mEdot)

	num = np.sum( integrand * x )
	den = np.sum( integrand )

	p = np.sum( integrand * P )

	mx = num/den
	mp = p/den

	### compute uncertainties
	T = np.sum( integrand )
	integrate = E/(P*mEdot**2)
	a = np.sum( integrand**2 * sx**2 ) / T**2
	b = np.sum( (integrate * ( x*T - np.sum( x*integrand) ))**2 * sEdot**2 ) / T**4

	smx = a + b ### uncertainty in x
	smp = np.sum( (integrate * ( P*T - np.sum( P*integrand) ))**2 * sEdot**2 ) / T**4 ### uncertainty in p


	return (mx, smx**0.5) , (mp, smp**0.5)


	'''