From 719121079ba059fc64763d088276de1b029d145f Mon Sep 17 00:00:00 2001
From: Kevin Kuns <kevin.kuns@ligo.org>
Date: Thu, 14 Jan 2021 01:49:34 -0500
Subject: [PATCH] add aLIGO excess gas sub-budget for H2, N2, and H2O

---
 gwinc/ifo/aLIGO/__init__.py | 17 ++++++++++++
 gwinc/ifo/aLIGO/ifo.yaml    | 17 +++++++++---
 gwinc/ifo/noises.py         | 54 +++++++++++++++++++++++++++++++++++++
 3 files changed, 85 insertions(+), 3 deletions(-)

diff --git a/gwinc/ifo/aLIGO/__init__.py b/gwinc/ifo/aLIGO/__init__.py
index 2e299e53..821e4887 100644
--- a/gwinc/ifo/aLIGO/__init__.py
+++ b/gwinc/ifo/aLIGO/__init__.py
@@ -19,6 +19,23 @@ class QuantumVacuum(nb.Budget):
     ]
 
 
+class ExcessGas(nb.Budget):
+    """Excess Gas
+
+    """
+    style = dict(
+        label='Excess Gas',
+        color='#add00d',
+        linestyle='--',
+    )
+
+    noises = [
+        ExcessGasH2,
+        ExcessGasN2,
+        ExcessGasH2O,
+    ]
+
+
 class aLIGO(nb.Budget):
 
     name = 'Advanced LIGO'
diff --git a/gwinc/ifo/aLIGO/ifo.yaml b/gwinc/ifo/aLIGO/ifo.yaml
index 9ffde779..eca5e990 100644
--- a/gwinc/ifo/aLIGO/ifo.yaml
+++ b/gwinc/ifo/aLIGO/ifo.yaml
@@ -33,9 +33,20 @@ Infrastructure:
   Length: 3995                    # m
   Temp: 290                       # K
   ResidualGas:
-    pressure: 4.0e-7              # Pa
-    mass: 3.35e-27                # kg; Mass of H_2 (ref. 10)
-    polarizability: 7.8e-31       # m^3
+    H2:
+      pressure: 4.0e-7              # Pa
+      mass: 3.35e-27                # kg; Mass of H_2 (ref. 10)
+      polarizability: 7.8e-31       # m^3
+
+    N2:
+      pressure: 1.33e-8
+      mass: 4.65e-26
+      polarizability: 1.79e-30
+
+    H2O:
+      pressure: 1.33e-8
+      mass: 2.99e-26
+      polarizability: 1.71e-30
 
 TCS:
   # The presumably dominant effect of a thermal lens in the ITMs is an increased
diff --git a/gwinc/ifo/noises.py b/gwinc/ifo/noises.py
index 03e7a954..17f83d4a 100644
--- a/gwinc/ifo/noises.py
+++ b/gwinc/ifo/noises.py
@@ -777,3 +777,57 @@ class ExcessGas(nb.Noise):
         # should be re-evaluated at some point.
         dhdl_sqr, sinc_sqr = dhdl(self.freq, self.ifo.Infrastructure.Length)
         return n * 2 / sinc_sqr
+
+
+class ExcessGasH2(nb.Noise):
+    """Excess gas for H2
+
+    """
+    style = dict(
+        label='H2',
+        color='xkcd:red orange'
+    )
+
+    def calc(self):
+        cavity = arm_cavity(self.ifo)
+        species = self.ifo.Infrastructure.ResidualGas.H2
+        n = noise.residualgas.residual_gas_cavity(
+            self.freq, self.ifo, cavity, species)
+        dhdl_sqr, sinc_sqr = dhdl(self.freq, self.ifo.Infrastructure.Length)
+        return n * 2 / sinc_sqr
+
+
+class ExcessGasN2(nb.Noise):
+    """Excess gas for N2
+
+    """
+    style = dict(
+        label='N2',
+        color='xkcd:emerald'
+    )
+
+    def calc(self):
+        cavity = arm_cavity(self.ifo)
+        species = self.ifo.Infrastructure.ResidualGas.N2
+        n = noise.residualgas.residual_gas_cavity(
+            self.freq, self.ifo, cavity, species)
+        dhdl_sqr, sinc_sqr = dhdl(self.freq, self.ifo.Infrastructure.Length)
+        return n * 2 / sinc_sqr
+
+
+class ExcessGasH2O(nb.Noise):
+    """Excess gas for H2O
+
+    """
+    style = dict(
+        label='H2O',
+        color='xkcd:water blue'
+    )
+
+    def calc(self):
+        cavity = arm_cavity(self.ifo)
+        species = self.ifo.Infrastructure.ResidualGas.H2O
+        n = noise.residualgas.residual_gas_cavity(
+            self.freq, self.ifo, cavity, species)
+        dhdl_sqr, sinc_sqr = dhdl(self.freq, self.ifo.Infrastructure.Length)
+        return n * 2 / sinc_sqr
-- 
GitLab