Skip to content
Snippets Groups Projects
Commit 5ec93899 authored by Kevin Kuns's avatar Kevin Kuns
Browse files

update for new precomp code

parent 4a595201
No related branches found
No related tags found
1 merge request!94Quantum noise sub-budgets
......@@ -9,8 +9,9 @@ from .. import nb
from .. import noise
from .. import suspension
############################################################
# precomp functions
# helper functions
############################################################
......@@ -168,23 +169,22 @@ def precomp_suspension(f, ifo):
def precomp_quantum(f, ifo):
if 'gwinc' not in ifo:
ifo.gwinc = Struct()
ifo.gwinc.Quantum = Struct()
noise_dict = noise.quantum.shotrad(f, ifo)
ifo.gwinc.Quantum.ASvac = noise_dict['asvac']
ifo.gwinc.Quantum.SRC = noise_dict['src']
ifo.gwinc.Quantum.Arm = noise_dict['arm']
ifo.gwinc.Quantum.Injection = noise_dict['injection']
pc = Struct()
power = precomp_power(f, ifo)
mirror = precomp_mirror(f, ifo)
noise_dict = noise.quantum.shotrad(f, ifo, mirror.ETM.MirrorMass, power)
pc.ASvac = noise_dict['asvac']
pc.SRC = noise_dict['src']
pc.Arm = noise_dict['arm']
pc.Injection = noise_dict['injection']
# FC0 are the noises from the filter cavity losses and FC0_unsqzd_back
# are noises from the unsqueezed vacuum injected at the back mirror
# Right now there are at most one filter cavity in all the models;
# if there were two, there would also be FC1 and FC1_unsqzd_back, etc.
ifo.gwinc.Quantum.FC = noise_dict['FC0'] + noise_dict['FC0_unsqzd_back']
ifo.gwinc.Quantum.PD = noise_dict['pd']
pc.FC = noise_dict['FC0'] + noise_dict['FC0_unsqzd_back']
pc.PD = noise_dict['pd']
return pc
##################################################
############################################################
# calibration
......@@ -229,7 +229,6 @@ class Strain(nb.Calibration):
# quantum
#########################
class QuantumVacuum(nb.Noise):
"""Quantum Vacuum
......@@ -260,8 +259,9 @@ class QuantumVacuumAS(nb.Noise):
precomp_quantum
]
def calc(self):
return self.ifo.gwinc.Quantum.ASvac
@nb.precomp(quantum=precomp_quantum)
def calc(self, quantum):
return quantum.ASvac
class QuantumVacuumArm(nb.Noise):
......@@ -273,14 +273,9 @@ class QuantumVacuumArm(nb.Noise):
color='xkcd:orange brown'
)
precomp = [
precomp_mirror,
precomp_power,
precomp_quantum
]
def calc(self):
return self.ifo.gwinc.Quantum.Arm
@nb.precomp(quantum=precomp_quantum)
def calc(self, quantum):
return quantum.Arm
class QuantumVacuumSRC(nb.Noise):
......@@ -298,8 +293,9 @@ class QuantumVacuumSRC(nb.Noise):
precomp_quantum
]
def calc(self):
return self.ifo.gwinc.Quantum.SRC
@nb.precomp(quantum=precomp_quantum)
def calc(self, quantum):
return quantum.SRC
class QuantumVacuumFilterCavity(nb.Noise):
......@@ -311,14 +307,9 @@ class QuantumVacuumFilterCavity(nb.Noise):
color='xkcd:goldenrod'
)
precomp = [
precomp_mirror,
precomp_power,
precomp_quantum
]
def calc(self):
return self.ifo.gwinc.Quantum.FC
@nb.precomp(quantum=precomp_quantum)
def calc(self, quantum):
return quantum.FC
class QuantumVacuumInjection(nb.Noise):
......@@ -330,14 +321,9 @@ class QuantumVacuumInjection(nb.Noise):
color='xkcd:fuchsia'
)
precomp = [
precomp_mirror,
precomp_power,
precomp_quantum
]
def calc(self):
return self.ifo.gwinc.Quantum.Injection
@nb.precomp(quantum=precomp_quantum)
def calc(self, quantum):
return quantum.Injection
class QuantumVacuumReadout(nb.Noise):
......@@ -349,14 +335,9 @@ class QuantumVacuumReadout(nb.Noise):
color='xkcd:mahogany'
)
precomp = [
precomp_mirror,
precomp_power,
precomp_quantum
]
def calc(self):
return self.ifo.gwinc.Quantum.PD
@nb.precomp(quantum=precomp_quantum)
def calc(self, quantum):
return quantum.PD
class StandardQuantumLimit(nb.Noise):
......@@ -369,15 +350,14 @@ class StandardQuantumLimit(nb.Noise):
linestyle=":",
)
precomp = [
precomp_mirror,
]
@nb.precomp(mirror=precomp_mirror)
def calc(self, mirror):
return 8 * const.hbar / (mirror.ETM.MirrorMass * (2 * np.pi * self.freq) ** 2)
def calc(self):
ETM = mirror_struct(self.ifo, 'ETM')
return 8 * const.hbar / (ETM.MirrorMass * (2 * np.pi * self.freq) ** 2)
#########################
# seismic
#########################
......@@ -492,7 +472,6 @@ class SuspensionThermal(nb.Noise):
# coating thermal
#########################
class CoatingBrownian(nb.Noise):
"""Coating Brownian
......@@ -545,7 +524,6 @@ class CoatingThermoOptic(nb.Noise):
# substrate thermal
#########################
class ITMThermoRefractive(nb.Noise):
"""ITM Thermo-Refractive
......
......@@ -89,7 +89,7 @@ def getSqzParams(ifo):
######################################################################
def shotrad(f, ifo):
def shotrad(f, ifo, mirror_mass, power):
"""Quantum noise noise strain spectrum
:f: frequency array in Hz
......@@ -128,6 +128,7 @@ def shotrad(f, ifo):
namespace = globals()
fname = namespace['shotrad' + ifo.Optics.Type]
coeff, Mifo, Msig, Mn = fname(f, ifo, mirror_mass, power)
Mnoise = dict(arm=Mn[:, :2, :], src=Mn[:, 2:, :])
#####################################################
# Readout
......@@ -302,6 +303,10 @@ def compile_SEC_RES_TF():
print('RES', '=', str(SEC_RES_expr[0]).replace('Matrix', 'np.array'))
######################################################################
# Main IFO quantum models
######################################################################
def shotradSignalRecycled(f, ifo, mirror_mass, power):
"""Quantum noise model for signal recycled IFO (see shotrad for more info)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment