Skip to content

megan-russell/dfmux_calc

Repository files navigation

The goal of this code is to easily estimate readout noise contributions from DfMUX.
A PySpice installation is highly recommended for proper current sharing estimation. 

EXAMPLES
SA13 = squid(650,750,3e-12,70e-9) #SA13 Zt, Zdyn, NEI, and Lin
wire = wire(30, 40e-12, 1e-6) #wiring harness resistance, capcitance, self inductance
bolo = bolo(1.3,0,0.3,5e-12,0.45,0.45) #Bolometer operating resistance, loopgain, stray resistance, psat, Tc, bath temp
parasitics = parasitics(stripline, c_gnd, r48) 
noise = dfmux_noise(SA13, bolo, parasitics, wire)
noise.init_freq(np.linspace(1e6,5e6,100)) #evaluating noise between 1 and 5 MHz bias frequencies 

That produces noise estimates for a dfmux setup while overbiased
the noise object has properties such as CS, TF and noise broken down by source

In addition to producing noise estimates for a single readout setup, estimates can be produced for a list of SQUIDs with
varying transimpedance etc, or varied bolometer resistance. 


#######################################################################################################################
dfmux_calc.py

Five classes are defined in the code- squid, wire, bolometer, parasitic, and dfmux_noise.

The squid object stores the transimpedance, dynamic impedance, input inductance and 
NEI of your SAA. It also has a method which will rescale the SAA to a different array size,
eg will take the parameters for a SAA with 3x64 SQUIDs in series and two banks in parallel
and change the stored SAA parameters to instead be representative of a SAA with a 2x64 in series
with 3 banks in parallel. Lastly it stores information relevant to the noise contribution of a 
snubber on the input of the SAA, namely its resistance and temperature.

The bolometer object stores the operating resistance, stray resistance, achieved loopgain, 
saturation power, critical temperature, and bath temperature.

The parasitic object stores important parasitics that are not the wiring harness or the 
stray resistance in series with the bolometers. These are the stripline inductance (if any)
the parastic capacitance to ground in the focal plane, and the value of R48 on the SQUID 
controller board. These are all relevant to estimate the current sharing factor of a given
setup.

The wire object stores the parasitic resistance, capacitance, and inductance of the wiring
harness linking the SAA and the 300K stages. It also can store information about
resistive or capacitive shunts across the SAA out pairs if they are present. This class
has methods which calculate various helpful transfer functions and effective resistances
of the harness at given frequencies. 

The dfmux_noise object stores squid, bolometer, parasitic, and wire objects grouped together, 
along with a frequency schedule specified when calling the method to calculate the noise.
This uses those objects calculates the expected readout noise contribution as well as 
a number of diagnostic values such as expected current sharing factor, wiring harness transfer
function and noise broken down into individual sources.
Lastly there is the option to specify a different wiring harness for the nuller lines
than the SAA out lines. (One is used for current sharing estimation and the other 
for SAA transfer function estimation.)

This class has methods which calculate the readout noise expected at given frequencies. 
Measured current sharing can be given as an input to this method. There is also to an option
to estimate DAN off noise referred to the input of the SQUID Controller Board. This option
is only useful for in lab debugging, not scientific forecasting.



#########################################################################################################
sq_size.py and nep_dist.py


These are two scripts intended to be run like "python sq_size.py path/to/config.py" that use the above code


sq_size.py takes a configuration file (example in stcr/m1_spice_100mK/config.py) and assumes some information about 
the experiment (readout NEP requirements, detector Psat, and optical loading). From this it estimates the smallest 
array of SQUIDs like the one specified in the configuration file which are capable of meeting the noise requirements. 


nep_dist.py takes the same configuration file and instead produces estimated readout NEP histograms for a specific 
SQUID array size and bolometer resistance.



CITATIONS
This code is heavily based on the following (which are referred to in comments when relevant)
Joshua Montgomery's PhD Thesis - https://escholarship.mcgill.ca/concern/theses/1c18dm29r
2021 paper SPT-3G assessment of DfMUX noise https://arxiv.org/abs/2103.16017
Joshua Montgomery's Masters Thesis - https://www.proquest.com/docview/2514727898?pq-origsite=gscholar&fromopenview=true


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages