class_docstr: Plasma spectroscopy model.
  
  This implements the fusion plasma spectroscopy problem described in [1]. The
  goal of the model is to reconstruct the plasma configuration in a linear
  fusion reactor via spectroscopy. The plasma blob is instrumented by an array
  of regularly spaced spectrometers arranged in the transverse plane to the
  reactor. Each spectrometer can measure the emission spectrum integrated along
  the line of sight of the sensor. The sensor array can resolve shifts
  perpendicular to the their lines of sight, but cannot measure shifts along
  them. The plasma is parameterized via amplitude, temperature and velocity ,
  which are assumed to be radially symmetric about the plasma blob center and
  are spatially correlated.
  
  The overall model is as follows:
  
  ```none
  for r in range(num_shells):
    amplitude[r] ~ Normal(0, 1)
    temperature[r] ~ Normal(0, 1)
    velocity[r] ~ Normal(0, 1)
  shift ~ Normal(0, 1)
  
  mean_emission = forward_model(amplitude, temperature, velocity, shift)
  
  measurements[wavelength, sensor] ~ Normal(mean_emission,
    (absolute_noise_scale**2 + relative_noise_scale**2 * mean_emission)**0.5)
  ```
  
  where the `forward_model` describes the mechanism of the spectrometers. Note
  that the latent parameters are unconstrained and the correlations between them
  are baked into the forward model.
  
  This model is notable for poor conditioning and presence of multiple low
  probability modes, requiring careful initialization for MCMC to progress.
  
  #### References
  
  [1]: Langmore I, Dikovsky M, Geraedts S, Norgaard P, von Behren R. Hamiltonian
       Monte Carlo in Inverse Problems; Ill-Conditioning and Multi-Modality.
       2021. http://arxiv.org/abs/2103.07515
class_docstr_tok: ["Plasma","spectroscopy","model",".","This","implements","the","fusion","plasma","spectroscopy","problem","described","in","[","1","]",".","The","goal","of","the","model","is","to","reconstruct","the","plasma","configuration","in","a","linear","fusion","reactor","via","spectroscopy",".","The","plasma","blob","is","instrumented","by","an","array","of","regularly","spaced","spectrometers","arranged","in","the","transverse","plane","to","the","reactor",".","Each","spectrometer","can","measure","the","emission","spectrum","integrated","along","the","line","of","sight","of","the","sensor",".","The","sensor","array","can","resolve","shifts","perpendicular","to","the","their","lines","of","sight",",","but","can","not","measure","shifts","along","them",".","The","plasma","is","parameterized","via","amplitude",",","temperature","and","velocity",",","which","are","assumed","to","be","radially","symmetric","about","the","plasma","blob","center","and","are","spatially","correlated",".","The","overall","model","is","as","follows",":","``","`","none","for","r","in","range","(","num_shells",")",":","amplitude","[","r","]","~","Normal","(","0",",","1",")","temperature","[","r","]","~","Normal","(","0",",","1",")","velocity","[","r","]","~","Normal","(","0",",","1",")","shift","~","Normal","(","0",",","1",")","mean_emission","=","forward_model","(","amplitude",",","temperature",",","velocity",",","shift",")","measurements","[","wavelength",",","sensor","]","~","Normal","(","mean_emission",",","(","absolute_noise_scale","*","*","2","+","relative_noise_scale","*","*","2","*","mean_emission",")","*","*","0.5",")","``","`","where","the","`","forward_model","`","describes","the","mechanism","of","the","spectrometers",".","Note","that","the","latent","parameters","are","unconstrained","and","the","correlations","between","them","are","baked","into","the","forward","model",".","This","model","is","notable","for","poor","conditioning","and","presence","of","multiple","low","probability","modes",",","requiring","careful","initialization","for","MCMC","to","progress",".","#","#","#","#","References","[","1","]",":","Langmore","I",",","Dikovsky","M",",","Geraedts","S",",","Norgaard","P",",","von","Behren","R.","Hamiltonian","Monte","Carlo","in","Inverse","Problems",";","Ill-Conditioning","and","Multi-Modality",".","2021.","http",":","\/\/arxiv.org\/abs\/2103.07515"]
code: def outer_shell_radius(self):
      return self._outer_shell_radius
  
imports: import numpy
  import tensorflow.compat.v2
  import tensorflow_probability
  from inference_gym.internal import data
  from inference_gym.targets import bayesian_model
  from inference_gym.targets import model
label_desc: Use image node_id 7 for calling the PlasmaSpectroscopy obj's underlying member method code with example usage: obj.outer_shell_radius() and returns: self