Sphères de Livermore

Description rapide de l’expérience

Les expériences dites “Sphères de Livermore” ont été réalisées fin des années 60 - début des années 70 au Lawrence Livermore Laboratory (États-Unis).

Une sphère creuse est placée au centre d’un bunker. En son centre on a une source de neutrons à 14 MeV (faisceau de ^2\mathrm{H}^+ sur une cible d’tritium, réaction ^3\mathrm{H}(d, n)^4\mathrm{He}). Des détecteurs sont positionnés autour de la sphère après collimation.

On observe le spectre en temps des neutrons qui arrivent dans les détecteurs (réponse type REACTION dans Tripoli-4).

Pour une sphère donnée on exécute deux fois la simulation : - avec la sphère étudiée (matériau = fer, béryllium, azote, eau, etc) - avec la même sphère dont le matériau étudié a été remplacé par de l’air

Cette seconde sphère nous permet de normaliser les résultats et de pouvoir nous comparer aux données expérimentales notamment grâce à un graphique. Il y a donc deux sorties Tripoli-4 à lire et des opérations à faire sur les spectres.

Dans le cas présent la sphère considérée est celle d’azote liquide, d’une épaisseur de 3.1 mfp (libre parcours moyen), avec un spectre à 30°.

b574479865fa4e349ad8654beb547e35

Parsing des résultats Tripoli-4 et récupération du spectre

Parser les résultats

[1]:
from valjean.eponine.tripoli4.parse import Parser
jdd_sphere = 'prob103_nitrogen3.1_fine_timeShifted_sphere_PARA.d.res'
jdd_air = 'prob103_nitrogen3.1_fine_timeShifted_air_PARA.d.res'

Le module permettant de lire, parser et récupérer les résultats de Tripoli-4 sous un format plus facilement exploitable est Parser.

On ne regardera ici que le résultat du dernier batch. Le parsing est effectivement fait par la méthode parse_from_index. L’index par défaut est -1, ce qui correspond au dernier batch.

Pour manipuler plus aisément les réponses de Tripoli-4 et en particulier les sélectionner on utilise un objet Browser.

[2]:
sphere_b = Parser(jdd_sphere).parse_from_index(name='sphere').to_browser()
air_b = Parser(jdd_air).parse_from_index(name='air').to_browser()
     INFO        parse: Parsing prob103_nitrogen3.1_fine_timeShifted_sphere_PARA.d.res
     INFO        parse: Successful scan in 0.164728 s
     INFO        parse: Successful parsing in 6.081770 s
     INFO        parse: Parsing prob103_nitrogen3.1_fine_timeShifted_air_PARA.d.res
     INFO        parse: Successful scan in 0.164611 s
     INFO        parse: Successful parsing in 6.085544 s

Sélection du résultat

À chaque réponse dans ce jeu de données a été associé un SCORE NAME unique (et explicite). C’est le moyen le plus aisé de récupérer les réponses nécessaires.

Dans le cas de la sphère (ici d’azote liquide), on récupère score_name='neutron_response_30deg', soit le spectre neutron à 30 degrés (des spectres photons sont aussi disponibles). Il s’agira du numérateur (variable nsphere). Dans le cas de l’air, seule l’intégrale du spectre est nécessaire pour la normalisation, donc au dénominateur (variable dair). La sélection de la réponse se fait sur score_name='neutron_response_integral_30deg'.

[3]:
nsphere = sphere_b.select_by(score_name='neutron_response_30deg')
dair = air_b.select_by(score_name='neutron_response_integral_30deg')

Transformation des données en Dataset

Pour pouvoir manipuler les données plus aisément mais aussi pour faciliter leur manipulation, elles sont transformées en Dataset.

Le but de Dataset est d’être commun à tous les types de données (Tripoli-4, données expérimentales, PATMOS, MCNP, etc). Chaque dataset contient au moins 2 membres : value et error. Il s’agit de l’incertitude absolue (et non pas relative comme dans les résultats standard Tripoli-4). Trois autres membres sont optionnels : bins, name et what.

Les données sont stockées sous forme de Dataset accessible dans le Browser sous la clef 'results'.

Pour info :

[4]:
test_ds = nsphere['results']['score']
print(type(test_ds))
print(test_ds)
<class 'valjean.eponine.dataset.Dataset'>
shape: (1, 1, 1, 1, 138, 1, 1), dim: 7, type: <class 'numpy.ndarray'>, bins: ['u: []', 'v: []', 'w: []', 'e: [1.e-11 2.e+01]', 't: [0.00e+00 2.38e-07 2.40e-07 2.42e-07 2.44e-07 2.46e-07 2.48e-07 2.50e-07 2.52e-07 2.54e-07 2.56e-07 2.58e-07 2.60e-07 2.62e-07 2.64e-07 2.66e-07 2.68e-07 2.70e-07 2.72e-07 2.74e-07 2.76e-07 2.78e-07 2.80e-07 2.82e-07 2.84e-07 2.86e-07 2.88e-07 2.90e-07 2.92e-07 2.94e-07 2.96e-07 2.98e-07 3.00e-07 3.02e-07 3.04e-07 3.06e-07 3.08e-07 3.10e-07 3.12e-07 3.14e-07 3.16e-07 3.18e-07 3.20e-07 3.22e-07 3.24e-07 3.26e-07 3.28e-07 3.30e-07 3.32e-07 3.34e-07 3.36e-07 3.38e-07 3.40e-07 3.42e-07 3.44e-07 3.46e-07 3.48e-07 3.50e-07 3.52e-07 3.54e-07 3.56e-07 3.58e-07 3.60e-07 3.62e-07 3.64e-07 3.66e-07 3.68e-07 3.70e-07 3.72e-07 3.74e-07 3.76e-07 3.78e-07 3.80e-07 3.82e-07 3.84e-07 3.86e-07 3.88e-07 3.90e-07 3.92e-07 3.94e-07 3.96e-07 3.98e-07 4.00e-07 4.02e-07 4.04e-07 4.06e-07 4.08e-07 4.10e-07 4.12e-07 4.14e-07 4.16e-07 4.18e-07 4.20e-07 4.22e-07 4.24e-07 4.26e-07 4.28e-07 4.30e-07 4.32e-07 4.34e-07 4.36e-07 4.38e-07 4.40e-07 4.42e-07 4.44e-07 4.46e-07 4.48e-07 4.50e-07 4.52e-07 4.54e-07 4.56e-07 4.58e-07 4.60e-07 4.62e-07 4.64e-07 4.66e-07 4.68e-07 4.70e-07 4.72e-07 4.74e-07 4.76e-07 4.78e-07 4.80e-07 4.82e-07 4.84e-07 4.86e-07 4.88e-07 4.90e-07 4.92e-07 4.94e-07 4.96e-07 4.98e-07 5.00e-07 5.02e-07 5.04e-07 5.06e-07 5.08e-07 5.10e-07 1.00e+01]', 'mu: []', 'phi: []'], name: sphere, what: reaction
[5]:
print(test_ds.squeeze().shape)
(138,)

Pour les manipuler plus simplement, les Dataset sont squeezés : nous récupérons des spectres en temps, les 6 autres dimensions sont donc à 1 et non utiles ici (et triviales).

[6]:
nsphereds = nsphere['results']['score'].squeeze()
nsphereds.name="azote (num)"
[7]:
dairds = dair['results']['score'].squeeze()
dairds.name='air (denom)'
print(dairds)
shape: (3,), dim: 1, type: <class 'numpy.ndarray'>, bins: ['t: [0.00e+00 2.38e-07 5.10e-07 1.00e+01]'], name: air (denom), what: reaction

Normalisation du spectre

Le résultat correspondant à l’intégrale du spectre n’est en réalité ici pas un score générique, mais un réel spectre. Cette différence est due aux intervalles extrêmes : - entre t=0 et le début des résultats expérientaux, à t=138 ns pour le premier - entre t=410 ns et t=10 s pour le dernier, soit entre la fin des résultats expérimentaux et la valeur maximale du temps dans Tripoli-4

Pour être plus juste, notamment au niveau du calcul des incertitudes associées, le choix a été fait de faire un spectre de 3 intervalles où seul celui du milieu nous intéresse dans le cas présent.

L’incertitude sur la norme est négligée par la suite (elle est dominée par celle sur chaque intervalle).

[8]:
import numpy as np
norm = dairds.value[1]
print("type(norm) = {0}, shape(norm) = {1}".format(type(norm), norm.shape))
type(norm) = <class 'numpy.float64'>, shape(norm) = ()

En réalité deux normalisations du spectre sont à effectuer, celle par l’intégrale de l’air et celle par la largeur des bins, appelée ici TIME_BIN_WIDTH, valant 2 ns.

[9]:
TIME_BIN_WIDTH = 2
t4ds = nsphereds / norm / TIME_BIN_WIDTH

Remarque : il n’aurait pas été possible d’utiliser un Dataset issu de dairds pour la normalisation.

[10]:
print(dairds)
test_dairds = dairds.copy()[1:-1]
print(test_dairds)
shape: (3,), dim: 1, type: <class 'numpy.ndarray'>, bins: ['t: [0.00e+00 2.38e-07 5.10e-07 1.00e+01]'], name: air (denom), what: reaction
shape: (1,), dim: 1, type: <class 'numpy.ndarray'>, bins: ['t: [2.38e-07 5.10e-07]'], name: air (denom), what: reaction
[11]:
test_ds = nsphereds / test_dairds / TIME_BIN_WIDTH
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[11], line 1
----> 1 test_ds = nsphereds / test_dairds / TIME_BIN_WIDTH

File ~/checkouts/readthedocs.org/user_builds/valjean/envs/latest/lib/python3.11/site-packages/valjean/eponine/dataset.py:954, in Dataset.__truediv__(self, other)
    950 if not isinstance(other, Dataset):
    951     return Dataset(
    952         self.value / other, self.error / other,
    953         bins=self.bins, name=self.name, what=self.what)
--> 954 self._check_datasets_consistency(other, "divide")
    955 value = self.value / other.value
    956 # RuntimeWarning can be ignored thanks to the commented line.
    957 # 'log' can be used instead of 'ignore' but did not work.
    958 # with np.errstate(divide='divide', invalid='ignore'):

File ~/checkouts/readthedocs.org/user_builds/valjean/envs/latest/lib/python3.11/site-packages/valjean/eponine/dataset.py:895, in Dataset._check_datasets_consistency(self, other, operation)
    893 def _check_datasets_consistency(self, other, operation=""):
    894     if other.shape != self.shape:
--> 895         raise ValueError(f"Datasets to {operation} do not have same shape")
    896     if other.bins != OrderedDict():
    897         if any((s != o) for s, o in zip(self.bins, other.bins)):

ValueError: Datasets to divide do not have same shape

Ces deux datasets n’ont bien pas les shapes or les calculs sur les Dataset ne peuvent être effectués que s’ils ont la même shape et, dans le cas où des bins ont été fournis, si leurs bins sont équivalents.

[12]:
'shape(t4ds) = {0}, shape(test_dairds) = {1}'.format(t4ds.shape, test_dairds.shape)
[12]:
'shape(t4ds) = (138,), shape(test_dairds) = (1,)'

Réarrangement des intervalles

Les temps sont par défaut en s dans Tripoli-4 alors que les données que nous avons à disposition sont données par intervalles de temps en ns, on convertit donc les intervalles de Tripoli-4 en ns.

Par ailleurs, les intervalles en temps dans le jeu de données ont été décalés de 100 ns pour que la description de la source (gaussienne) soit correcte et complètement prise en compte dans le temps de la simulation (jeu de données tourné avec Tripoli-4, version 10.2, ce bug a été corrigé pour la version 11, mais c’est une jolie illustration des calculs possibles sur les Dataset).

[13]:
print('Bins en s et avant décalage:\n',t4ds.bins['t'] )
t4ds.bins['t'] = t4ds.bins['t'] * 1e9 - 100
print('Bins en ns et après décalage:\n', t4ds.bins['t'])
Bins en s et avant décalage:
 [0.00e+00 2.38e-07 2.40e-07 2.42e-07 2.44e-07 2.46e-07 2.48e-07 2.50e-07
 2.52e-07 2.54e-07 2.56e-07 2.58e-07 2.60e-07 2.62e-07 2.64e-07 2.66e-07
 2.68e-07 2.70e-07 2.72e-07 2.74e-07 2.76e-07 2.78e-07 2.80e-07 2.82e-07
 2.84e-07 2.86e-07 2.88e-07 2.90e-07 2.92e-07 2.94e-07 2.96e-07 2.98e-07
 3.00e-07 3.02e-07 3.04e-07 3.06e-07 3.08e-07 3.10e-07 3.12e-07 3.14e-07
 3.16e-07 3.18e-07 3.20e-07 3.22e-07 3.24e-07 3.26e-07 3.28e-07 3.30e-07
 3.32e-07 3.34e-07 3.36e-07 3.38e-07 3.40e-07 3.42e-07 3.44e-07 3.46e-07
 3.48e-07 3.50e-07 3.52e-07 3.54e-07 3.56e-07 3.58e-07 3.60e-07 3.62e-07
 3.64e-07 3.66e-07 3.68e-07 3.70e-07 3.72e-07 3.74e-07 3.76e-07 3.78e-07
 3.80e-07 3.82e-07 3.84e-07 3.86e-07 3.88e-07 3.90e-07 3.92e-07 3.94e-07
 3.96e-07 3.98e-07 4.00e-07 4.02e-07 4.04e-07 4.06e-07 4.08e-07 4.10e-07
 4.12e-07 4.14e-07 4.16e-07 4.18e-07 4.20e-07 4.22e-07 4.24e-07 4.26e-07
 4.28e-07 4.30e-07 4.32e-07 4.34e-07 4.36e-07 4.38e-07 4.40e-07 4.42e-07
 4.44e-07 4.46e-07 4.48e-07 4.50e-07 4.52e-07 4.54e-07 4.56e-07 4.58e-07
 4.60e-07 4.62e-07 4.64e-07 4.66e-07 4.68e-07 4.70e-07 4.72e-07 4.74e-07
 4.76e-07 4.78e-07 4.80e-07 4.82e-07 4.84e-07 4.86e-07 4.88e-07 4.90e-07
 4.92e-07 4.94e-07 4.96e-07 4.98e-07 5.00e-07 5.02e-07 5.04e-07 5.06e-07
 5.08e-07 5.10e-07 1.00e+01]
Bins en ns et après décalage:
 [-1.0000000e+02  1.3800000e+02  1.4000000e+02  1.4200000e+02
  1.4400000e+02  1.4600000e+02  1.4800000e+02  1.5000000e+02
  1.5200000e+02  1.5400000e+02  1.5600000e+02  1.5800000e+02
  1.6000000e+02  1.6200000e+02  1.6400000e+02  1.6600000e+02
  1.6800000e+02  1.7000000e+02  1.7200000e+02  1.7400000e+02
  1.7600000e+02  1.7800000e+02  1.8000000e+02  1.8200000e+02
  1.8400000e+02  1.8600000e+02  1.8800000e+02  1.9000000e+02
  1.9200000e+02  1.9400000e+02  1.9600000e+02  1.9800000e+02
  2.0000000e+02  2.0200000e+02  2.0400000e+02  2.0600000e+02
  2.0800000e+02  2.1000000e+02  2.1200000e+02  2.1400000e+02
  2.1600000e+02  2.1800000e+02  2.2000000e+02  2.2200000e+02
  2.2400000e+02  2.2600000e+02  2.2800000e+02  2.3000000e+02
  2.3200000e+02  2.3400000e+02  2.3600000e+02  2.3800000e+02
  2.4000000e+02  2.4200000e+02  2.4400000e+02  2.4600000e+02
  2.4800000e+02  2.5000000e+02  2.5200000e+02  2.5400000e+02
  2.5600000e+02  2.5800000e+02  2.6000000e+02  2.6200000e+02
  2.6400000e+02  2.6600000e+02  2.6800000e+02  2.7000000e+02
  2.7200000e+02  2.7400000e+02  2.7600000e+02  2.7800000e+02
  2.8000000e+02  2.8200000e+02  2.8400000e+02  2.8600000e+02
  2.8800000e+02  2.9000000e+02  2.9200000e+02  2.9400000e+02
  2.9600000e+02  2.9800000e+02  3.0000000e+02  3.0200000e+02
  3.0400000e+02  3.0600000e+02  3.0800000e+02  3.1000000e+02
  3.1200000e+02  3.1400000e+02  3.1600000e+02  3.1800000e+02
  3.2000000e+02  3.2200000e+02  3.2400000e+02  3.2600000e+02
  3.2800000e+02  3.3000000e+02  3.3200000e+02  3.3400000e+02
  3.3600000e+02  3.3800000e+02  3.4000000e+02  3.4200000e+02
  3.4400000e+02  3.4600000e+02  3.4800000e+02  3.5000000e+02
  3.5200000e+02  3.5400000e+02  3.5600000e+02  3.5800000e+02
  3.6000000e+02  3.6200000e+02  3.6400000e+02  3.6600000e+02
  3.6800000e+02  3.7000000e+02  3.7200000e+02  3.7400000e+02
  3.7600000e+02  3.7800000e+02  3.8000000e+02  3.8200000e+02
  3.8400000e+02  3.8600000e+02  3.8800000e+02  3.9000000e+02
  3.9200000e+02  3.9400000e+02  3.9600000e+02  3.9800000e+02
  4.0000000e+02  4.0200000e+02  4.0400000e+02  4.0600000e+02
  4.0800000e+02  4.1000000e+02  9.9999999e+09]

De plus, le dataset actuel, t4ds, contient toujours les bins extrêmes, il faut donc les enlever.

Le slicing a été codé dans Dataset : il est effectué en même temps sur les valeurs, sur les erreurs et sur les intervalles.

[14]:
print('bins en temps (avant slicing):')
print(t4ds.bins['t'])
print("shape(t4ds) = {0}, bins(nom = {1}, shape = {2})"
      .format(t4ds.shape, list(t4ds.bins.keys()), t4ds.bins['t'].shape))
t4ds = t4ds[1:-1]
print('bins en temps (après slicing):')
print(t4ds.bins['t'])
print("shape(t4ds) = {0}, bins(nom = {1}, shape = {2})"
      .format(t4ds.shape, list(t4ds.bins.keys()), t4ds.bins['t'].shape))
bins en temps (avant slicing):
[-1.0000000e+02  1.3800000e+02  1.4000000e+02  1.4200000e+02
  1.4400000e+02  1.4600000e+02  1.4800000e+02  1.5000000e+02
  1.5200000e+02  1.5400000e+02  1.5600000e+02  1.5800000e+02
  1.6000000e+02  1.6200000e+02  1.6400000e+02  1.6600000e+02
  1.6800000e+02  1.7000000e+02  1.7200000e+02  1.7400000e+02
  1.7600000e+02  1.7800000e+02  1.8000000e+02  1.8200000e+02
  1.8400000e+02  1.8600000e+02  1.8800000e+02  1.9000000e+02
  1.9200000e+02  1.9400000e+02  1.9600000e+02  1.9800000e+02
  2.0000000e+02  2.0200000e+02  2.0400000e+02  2.0600000e+02
  2.0800000e+02  2.1000000e+02  2.1200000e+02  2.1400000e+02
  2.1600000e+02  2.1800000e+02  2.2000000e+02  2.2200000e+02
  2.2400000e+02  2.2600000e+02  2.2800000e+02  2.3000000e+02
  2.3200000e+02  2.3400000e+02  2.3600000e+02  2.3800000e+02
  2.4000000e+02  2.4200000e+02  2.4400000e+02  2.4600000e+02
  2.4800000e+02  2.5000000e+02  2.5200000e+02  2.5400000e+02
  2.5600000e+02  2.5800000e+02  2.6000000e+02  2.6200000e+02
  2.6400000e+02  2.6600000e+02  2.6800000e+02  2.7000000e+02
  2.7200000e+02  2.7400000e+02  2.7600000e+02  2.7800000e+02
  2.8000000e+02  2.8200000e+02  2.8400000e+02  2.8600000e+02
  2.8800000e+02  2.9000000e+02  2.9200000e+02  2.9400000e+02
  2.9600000e+02  2.9800000e+02  3.0000000e+02  3.0200000e+02
  3.0400000e+02  3.0600000e+02  3.0800000e+02  3.1000000e+02
  3.1200000e+02  3.1400000e+02  3.1600000e+02  3.1800000e+02
  3.2000000e+02  3.2200000e+02  3.2400000e+02  3.2600000e+02
  3.2800000e+02  3.3000000e+02  3.3200000e+02  3.3400000e+02
  3.3600000e+02  3.3800000e+02  3.4000000e+02  3.4200000e+02
  3.4400000e+02  3.4600000e+02  3.4800000e+02  3.5000000e+02
  3.5200000e+02  3.5400000e+02  3.5600000e+02  3.5800000e+02
  3.6000000e+02  3.6200000e+02  3.6400000e+02  3.6600000e+02
  3.6800000e+02  3.7000000e+02  3.7200000e+02  3.7400000e+02
  3.7600000e+02  3.7800000e+02  3.8000000e+02  3.8200000e+02
  3.8400000e+02  3.8600000e+02  3.8800000e+02  3.9000000e+02
  3.9200000e+02  3.9400000e+02  3.9600000e+02  3.9800000e+02
  4.0000000e+02  4.0200000e+02  4.0400000e+02  4.0600000e+02
  4.0800000e+02  4.1000000e+02  9.9999999e+09]
shape(t4ds) = (138,), bins(nom = ['t'], shape = (139,))
bins en temps (après slicing):
[138. 140. 142. 144. 146. 148. 150. 152. 154. 156. 158. 160. 162. 164.
 166. 168. 170. 172. 174. 176. 178. 180. 182. 184. 186. 188. 190. 192.
 194. 196. 198. 200. 202. 204. 206. 208. 210. 212. 214. 216. 218. 220.
 222. 224. 226. 228. 230. 232. 234. 236. 238. 240. 242. 244. 246. 248.
 250. 252. 254. 256. 258. 260. 262. 264. 266. 268. 270. 272. 274. 276.
 278. 280. 282. 284. 286. 288. 290. 292. 294. 296. 298. 300. 302. 304.
 306. 308. 310. 312. 314. 316. 318. 320. 322. 324. 326. 328. 330. 332.
 334. 336. 338. 340. 342. 344. 346. 348. 350. 352. 354. 356. 358. 360.
 362. 364. 366. 368. 370. 372. 374. 376. 378. 380. 382. 384. 386. 388.
 390. 392. 394. 396. 398. 400. 402. 404. 406. 408. 410.]
shape(t4ds) = (136,), bins(nom = ['t'], shape = (137,))

Enfin, les données issues de la simulation sont données par intervalle (avec les extémités des intervalles) alors que les données expérimentales sont données au centre de l’intervalle. Ces dernières sont également des int et non des float comme les temps issus de Tripoli-4. L’étape finale est donc de supprimer la première (ou dernière) valeur dans les bins et de toutes les décaler d’1 ns (largeur d’intervalle toujours de 2 ns) et de les transformer en int.

[15]:
t4ds.bins['t'] = np.rint(t4ds.bins['t'][1:] - 1)
print(t4ds.bins['t'])
[139. 141. 143. 145. 147. 149. 151. 153. 155. 157. 159. 161. 163. 165.
 167. 169. 171. 173. 175. 177. 179. 181. 183. 185. 187. 189. 191. 193.
 195. 197. 199. 201. 203. 205. 207. 209. 211. 213. 215. 217. 219. 221.
 223. 225. 227. 229. 231. 233. 235. 237. 239. 241. 243. 245. 247. 249.
 251. 253. 255. 257. 259. 261. 263. 265. 267. 269. 271. 273. 275. 277.
 279. 281. 283. 285. 287. 289. 291. 293. 295. 297. 299. 301. 303. 305.
 307. 309. 311. 313. 315. 317. 319. 321. 323. 325. 327. 329. 331. 333.
 335. 337. 339. 341. 343. 345. 347. 349. 351. 353. 355. 357. 359. 361.
 363. 365. 367. 369. 371. 373. 375. 377. 379. 381. 383. 385. 387. 389.
 391. 393. 395. 397. 399. 401. 403. 405. 407. 409.]

Le Dataset est maintenant prêt pour la comparaison aux données. On met simplement à jour son nom et la variable qu’il représente (ordonnée) pour le représenter explicitement.

[16]:
t4ds.name = 'T4'
t4ds.what = 'Neutron count rate'

Résultats expérimentaux

Les résultats expérimentaux sont fournis dans un fichier ASCII, sous forme de tableaux de valeurs. Il faut donc les parser et les transformer en Dataset.

Cette étape est actuellement faite dans une petite classe externe : LivermoreExps

[17]:
from livermore_exps import LivermoreExps

exps = LivermoreExps('s10a11.res.mesure')
s10a11.res.mesure
['BERYLLIUM', '0.8', '30', 765.2]
['CARBON', '0.5', '30', 766.0]
['CARBON', '0.5', '120', 975.2]
['CARBON', '2.9', '30', 766.0]
['CARBON', '2.9', '120', 975.2]
['NITROGEN', '3.1', '30', 765.2]
['OXYGENE', '0.7', '30', 754.0]
['MAGNESIUM', '0.7', '30', 765.2]
['MAGNESIUM', '0.7', '120', 977.2]
['ALUMINIUM', '0.9', '30', 765.2]
['ALUMINIUM', '0.9', '120', 977.2]
['IRON', '0.9', '30', 766.0]
['IRON', '0.9', '120', 975.2]
['IRON', '4.8', '30', 766.0]
['IRON', '4.8', '120', 975.2]
['WATER', '1.1', '30', 754.0]
['H_WATER', '1.2', '30', 765.0]
['CONCRETE', '2.0', '120', 975.4]
ALL KEYS:
 [('BERYLLIUM', '0.8', '30'), ('CARBON', '0.5', '30'), ('CARBON', '0.5', '120'), ('CARBON', '2.9', '30'), ('CARBON', '2.9', '120'), ('NITROGEN', '3.1', '30'), ('OXYGENE', '0.7', '30'), ('MAGNESIUM', '0.7', '30'), ('MAGNESIUM', '0.7', '120'), ('ALUMINIUM', '0.9', '30'), ('ALUMINIUM', '0.9', '120'), ('IRON', '0.9', '30'), ('IRON', '0.9', '120'), ('IRON', '4.8', '30'), ('IRON', '4.8', '120'), ('WATER', '1.1', '30'), ('H_WATER', '1.2', '30'), ('CONCRETE', '2.0', '120')]

Toutes les données expérimentales sont ainsi disponibles, il suffit de les charger une seule fois pour toutes les analyses des sphères de Livermore. Ici on ne considèrera qu’un seul cas : ('NITROGEN', '3.1', '30').

[18]:
exp_key = ('NITROGEN', '3.1', '30')
exp_data = exps.res[exp_key]
type(exp_data)
[18]:
valjean.eponine.dataset.Dataset
[19]:
print(exp_data)
shape: (136,), dim: 1, type: <class 'numpy.ndarray'>, bins: ['t: [139. 141. 143. 145. 147. 149. 151. 153. 155. 157. 159. 161. 163. 165. 167. 169. 171. 173. 175. 177. 179. 181. 183. 185. 187. 189. 191. 193. 195. 197. 199. 201. 203. 205. 207. 209. 211. 213. 215. 217. 219. 221. 223. 225. 227. 229. 231. 233. 235. 237. 239. 241. 243. 245. 247. 249. 251. 253. 255. 257. 259. 261. 263. 265. 267. 269. 271. 273. 275. 277. 279. 281. 283. 285. 287. 289. 291. 293. 295. 297. 299. 301. 303. 305. 307. 309. 311. 313. 315. 317. 319. 321. 323. 325. 327. 329. 331. 333. 335. 337. 339. 341. 343. 345. 347. 349. 351. 353. 355. 357. 359. 361. 363. 365. 367. 369. 371. 373. 375. 377. 379. 381. 383. 385. 387. 389. 391. 393. 395. 397. 399. 401. 403. 405. 407. 409.]'], name: data, what:

Les objets dans le dictionnaire de résultat (exps.res) sont des Dataset.

Comparaison entre données et expérience

Pour les graphiques on utilise le rapport des spectres simulé et expérimental. La classe Dataset fournit les outils pour faire ce type de calculs.

[20]:
print(np.array_equal(t4ds.bins['t'], exp_data.bins['t']))
True

Malgré le fait que les bins nous apparaissaient complètement équivalents, ils ne l’étaient pas : cela vient probablement de la conversion de strings (depuis les fichiers ASCII) en float alors que les nombres n’étaient pas écrits de la même manière (int pour les données expérimentales, float en notation exponentielle à 6 chiffres après la virgule pour Tripoli-4 ayant subis quelques calculs en plus).

[21]:
ratio = t4ds / exp_data

Comparaisons numériques

Il est possible de comparer les deux Dataset numériquement grâce aux fonctions disponibles dans gavroche.test.py qui agissent sur les datasets.

[22]:
from valjean.gavroche.test import TestApproxEqual
test_equality = TestApproxEqual(t4ds, exp_data, name='light criteria on approx eq', rtol=0.1, atol=1e-2)
print(bool(test_equality.evaluate()))
True

Lors de la VV ce test est davantage fait sur l’intégrale du spectre.

[23]:
integ = sphere_b.select_by(score_name='neutron_response_integral_30deg')
intnumds = integ['results']['score'].squeeze()
intnumds.name='integ'
integds = intnumds / norm / TIME_BIN_WIDTH
integds = integds[1:-1]
print(integds)
shape: (1,), dim: 1, type: <class 'numpy.ndarray'>, bins: ['t: [2.38e-07 5.10e-07]'], name: integ, what: reaction

Petite vérification de routine rapide :

[24]:
np.allclose(np.sum(t4ds.value), integds.value)
[24]:
True

On supprime les bins ici pour simplifier la comparaison (il s’agit d’une intégrale).

[25]:
from collections import OrderedDict
integds.bins = OrderedDict()
print(integds)
shape: (1,), dim: 1, type: <class 'numpy.ndarray'>, bins: [], name: integ, what: reaction

Intégrale des données, en supposant les intervalles indépendants :

[26]:
from valjean.eponine.dataset import Dataset
[27]:
quad_err = np.sqrt(np.sum(exp_data.error ** 2))
integ_data = Dataset(np.sum(exp_data.value), quad_err)
print(integ_data)
value: 2.015474e-01, error: 4.239589e-04, bins: OrderedDict(), type: <class 'numpy.float64'>,name: , what:
[28]:
equ_integ = TestApproxEqual(integds, integ_data, name='approx eq integrales', rtol=0.03, atol=1e-4)
print(bool(equ_integ))
True

Graphiques par défaut dans valjean

La majorité des tests peut être représentée sous forme de graphique.

[29]:
from valjean.javert.representation import FullRepresenter
from valjean.javert.rst import RstFormatter
from valjean.javert.mpl import MplPlot
from valjean.javert.verbosity import Verbosity

frepr = FullRepresenter()
rstformat = RstFormatter()
[30]:
teq_res = test_equality.evaluate()
eqrepr = frepr(teq_res, verbosity=Verbosity.FULL_DETAILS)  # il s'agit d'une liste de templates
eqrst = rstformat.template(eqrepr[1])
print(eqrst)
mpl = MplPlot(eqrepr[0]).draw()
.. role:: hl

.. table::
    :widths: auto

    ===  ===========  ===========  =============
     t       T4          data      approx equal?
    ===  ===========  ===========  =============
    139  5.55457e-05    0.0009519           True
    141   0.00118528       0.0077           True
    143   0.00893213    0.0204795           True
    145    0.0218566     0.026057           True
    147    0.0216699    0.0173575           True
    149    0.0132692    0.0095605           True
    151   0.00748997      0.00616           True
    153   0.00502181    0.0047192           True
    155   0.00388959    0.0040897           True
    157    0.0034185   0.00406495           True
    159   0.00317997   0.00369335           True
    161   0.00297349   0.00326535           True
    163   0.00279022    0.0029624           True
    165   0.00258342   0.00269255           True
    167   0.00236749   0.00232045           True
    169   0.00226739    0.0020996           True
    171   0.00206574   0.00201375           True
    173   0.00190346    0.0017443           True
    175   0.00170911    0.0016056           True
    177    0.0016319   0.00157055           True
    179   0.00158248    0.0015384           True
    181   0.00155479    0.0014737           True
    183   0.00153633    0.0014077           True
    185   0.00151627   0.00138115           True
    187    0.0015399     0.001371           True
    189   0.00157329   0.00138875           True
    191   0.00155078    0.0012998           True
    193   0.00148645   0.00130525           True
    195   0.00144237    0.0012063           True
    197   0.00134622     0.001105           True
    199   0.00131588    0.0010722           True
    201   0.00124256    0.0010684           True
    203   0.00117172   0.00099225           True
    205   0.00116655    0.0009726           True
    207   0.00109664   0.00095265           True
    209   0.00108667    0.0009802           True
    211   0.00108588   0.00101455           True
    213   0.00111711   0.00099005           True
    215   0.00109222   0.00102495           True
    217    0.0010924    0.0009409           True
    219   0.00106172   0.00085005           True
    221   0.00103876   0.00089455           True
    223   0.00106566    0.0009124           True
    225   0.00104802   0.00087615           True
    227   0.00102713   0.00088065           True
    229   0.00100579    0.0008775           True
    231   0.00103697     0.000875           True
    233   0.00103529   0.00091045           True
    235   0.00100917   0.00088475           True
    237   0.00100023   0.00084455           True
    239   0.00100228    0.0008346           True
    241  0.000983864   0.00083185           True
    243  0.000997541   0.00085315           True
    245   0.00104778   0.00088735           True
    247   0.00100842    0.0008887           True
    249   0.00106032   0.00093345           True
    251   0.00106348   0.00095775           True
    253   0.00107137    0.0009621           True
    255   0.00110801    0.0009755           True
    257   0.00102729   0.00087365           True
    259  0.000973585    0.0008456           True
    261   0.00099714    0.0007888           True
    263  0.000950634    0.0007969           True
    265  0.000881015    0.0007551           True
    267  0.000854355   0.00074015           True
    269  0.000816657    0.0006776           True
    271  0.000765727   0.00065885           True
    273  0.000736658    0.0005968           True
    275  0.000691288    0.0006269           True
    277  0.000678993    0.0006212           True
    279  0.000696424   0.00060335           True
    281  0.000670687    0.0005857           True
    283  0.000651523   0.00052105           True
    285  0.000599761   0.00053375           True
    287   0.00061133   0.00055205           True
    289  0.000601374    0.0005533           True
    291  0.000583103    0.0005488           True
    293  0.000584056   0.00053585           True
    295  0.000540916   0.00049291           True
    297  0.000550412   0.00052315           True
    299  0.000552923  0.000479485           True
    301  0.000560512   0.00052695           True
    303  0.000531155  0.000483245           True
    305  0.000518599  0.000484415           True
    307  0.000492058  0.000483095           True
    309  0.000505487  0.000488225           True
    311  0.000509219  0.000488575           True
    313  0.000501507  0.000487045           True
    315  0.000488588  0.000465225           True
    317  0.000483927   0.00050375           True
    319   0.00049458   0.00048882           True
    321  0.000482865   0.00044683           True
    323  0.000477005  0.000452225           True
    325  0.000480317  0.000467225           True
    327  0.000494829   0.00047503           True
    329  0.000491724   0.00047855           True
    331  0.000507182   0.00049157           True
    333  0.000498105  0.000487365           True
    335  0.000502847   0.00049807           True
    337  0.000505027   0.00045714           True
    339  0.000507307  0.000486445           True
    341  0.000489606    0.0005155           True
    343  0.000473202  0.000481145           True
    345  0.000475292  0.000489915           True
    347  0.000480632   0.00044432           True
    349  0.000465248  0.000444205           True
    351  0.000475173  0.000448605           True
    353  0.000437251   0.00045204           True
    355  0.000471841   0.00042395           True
    357  0.000451007  0.000441215           True
    359   0.00043615   0.00046094           True
    361  0.000425573  0.000448195           True
    363  0.000430618  0.000444745           True
    365  0.000418642   0.00043726           True
    367  0.000410464  0.000417455           True
    369  0.000390776   0.00038885           True
    371   0.00037246   0.00037076           True
    373  0.000381532   0.00036254           True
    375  0.000359002  0.000398215           True
    377  0.000346426  0.000357555           True
    379  0.000354585  0.000324985           True
    381  0.000344207  0.000342015           True
    383    0.0003436   0.00031319           True
    385  0.000327421  0.000326635           True
    387  0.000309169  0.000303065           True
    389  0.000333483  0.000270825           True
    391  0.000301403  0.000296465           True
    393  0.000304476   0.00028084           True
    395  0.000291929    0.0002719           True
    397  0.000284313  0.000263645           True
    399  0.000269536   0.00025017           True
    401  0.000272009   0.00022047           True
    403   0.00025244   0.00020573           True
    405  0.000237807  0.000211075           True
    407  0.000227296   0.00019417           True
    409   0.00022099   0.00016967           True
    ===  ===========  ===========  =============


../../../_images/examples_notebooks_livermore_exps_spheres_example_55_1.png

Avec un test de Holm-Bonferroni puisqu’il s’agit d’un spectre :

[31]:
from valjean.gavroche.stat_tests.student import TestStudent
from valjean.gavroche.stat_tests.bonferroni import TestHolmBonferroni
[32]:
sphere_b.globals
studt = TestStudent(t4ds, exp_data, name='Student test', ndf=sphere_b.globals['edition_batch_number'])
hb_res = TestHolmBonferroni(test=studt, name='Holm-Bonferroni test', description='').evaluate()
[33]:
hbrepr = frepr(hb_res, verbosity=Verbosity.INTERMEDIATE)  # il s'agit d'une liste de templates
hbrst = rstformat.template(hbrepr[1])
print(hbrst)
mpl = MplPlot(hbrepr[0]).draw()
.. role:: hl

.. table::
    :widths: auto

    ==========  ===  ===========  ============  ===========  ==========  ================
       test     ndf       α       min(p-value)    min(α)     N rejected  Holm-Bonferroni?
    ==========  ===  ===========  ============  ===========  ==========  ================
    T4 vs data  136        0.005             0  3.67647e-05          39       :hl:`False`
    ==========  ===  ===========  ============  ===========  ==========  ================


../../../_images/examples_notebooks_livermore_exps_spheres_example_59_1.png

D’autres niveaux de verbosité sont disponibles. Il est également possible de changer un peu la représentation graphique des tests en utilisant une échelle logarithmique pour les données et la simulation par exemple.

[34]:
from valjean.javert import plot_repr as pltr
def log_post(templates, tres):
    pltr.post_treatment(templates, tres)
    for templ in templates:
        templ.subplots[0].attributes.logy = True
    return templates
[35]:
hbrepr = FullRepresenter(post=log_post)(hb_res, verbosity=Verbosity.FULL_DETAILS)  # il s'agit d'une liste de templates
print(len(hbrepr[1:]))
hbrst = '\n'.join([str(rstformat.template(hbrepr[1])), str(rstformat.template(hbrepr[2]))])
print(hbrst)
mpl = MplPlot(hbrepr[0]).draw()
2
.. role:: hl

.. table::
    :widths: auto

    ==========  ===  ===========  ============  ===========  ==========  ================
       test     ndf       α       min(p-value)    min(α)     N rejected  Holm-Bonferroni?
    ==========  ===  ===========  ============  ===========  ==========  ================
    T4 vs data  136        0.005             0  3.67647e-05          39       :hl:`False`
    ==========  ===  ===========  ============  ===========  ==========  ================


.. role:: hl

.. table::
    :widths: auto

    ===  ===========  ===========  ===========  ===========  ===========  ===========
     t      v(T4)        σ(T4)       v(data)      σ(data)         t        Student?
    ===  ===========  ===========  ===========  ===========  ===========  ===========
    139  5.55457e-05  3.10611e-06    0.0009519  2.99445e-05     -29.7741  :hl:`False`
    141   0.00118528  1.42187e-05       0.0077   7.9415e-05     -80.7498  :hl:`False`
    143   0.00893213  4.06929e-05    0.0204795   0.00012866      -85.573  :hl:`False`
    145    0.0218566  6.54398e-05     0.026057     0.000145      -26.404  :hl:`False`
    147    0.0216699  6.09966e-05    0.0173575   0.00011853      32.3498  :hl:`False`
    149    0.0132692  5.06842e-05    0.0095605    8.831e-05      36.4235  :hl:`False`
    151   0.00748997  3.62418e-05      0.00616    7.122e-05      16.6432  :hl:`False`
    153   0.00502181  3.17534e-05    0.0047192   6.2585e-05      4.31188  :hl:`False`
    155   0.00388959  3.01783e-05    0.0040897   5.8415e-05     -3.04344  :hl:`False`
    157    0.0034185  2.60436e-05   0.00406495   5.8245e-05      -10.132  :hl:`False`
    159   0.00317997  2.54106e-05   0.00369335    5.563e-05     -8.39418  :hl:`False`
    161   0.00297349  2.39223e-05   0.00326535   5.2455e-05     -5.06248  :hl:`False`
    163   0.00279022   2.5883e-05    0.0029624   5.0095e-05      -3.0536  :hl:`False`
    165   0.00258342   2.3407e-05   0.00269255   4.7877e-05     -2.04779         True
    167   0.00236749  2.33064e-05   0.00232045   4.4653e-05     0.933804         True
    169   0.00226739  2.24576e-05    0.0020996   4.2624e-05      3.48261  :hl:`False`
    171   0.00206574  2.11621e-05   0.00201375   4.1809e-05      1.10938         True
    173   0.00190346  1.96915e-05    0.0017443  3.91435e-05      3.63225  :hl:`False`
    175   0.00170911  1.92469e-05    0.0016056   3.7693e-05      2.44584         True
    177    0.0016319  1.86048e-05   0.00157055  3.73155e-05      1.47144         True
    179   0.00158248  1.85253e-05    0.0015384  3.69715e-05      1.06596         True
    181   0.00155479  1.94426e-05    0.0014737   3.6263e-05      1.97088         True
    183   0.00153633  1.90821e-05    0.0014077   3.5526e-05      3.18979  :hl:`False`
    185   0.00151627  1.74553e-05   0.00138115   3.5225e-05        3.437  :hl:`False`
    187    0.0015399  2.00079e-05     0.001371   3.5109e-05      4.17969  :hl:`False`
    189   0.00157329  2.01629e-05   0.00138875  3.53115e-05      4.53821  :hl:`False`
    191   0.00155078  2.19893e-05    0.0012998   3.4287e-05      6.16179  :hl:`False`
    193   0.00148645  1.78986e-05   0.00130525  3.43505e-05        4.678  :hl:`False`
    195   0.00144237  1.88918e-05    0.0012063  3.31755e-05      6.18356  :hl:`False`
    197   0.00134622    1.787e-05     0.001105   3.1928e-05      6.59263  :hl:`False`
    199   0.00131588  1.94992e-05    0.0010722   3.1514e-05      6.57554  :hl:`False`
    201   0.00124256  1.65324e-05    0.0010684  3.14655e-05      4.89969  :hl:`False`
    203   0.00117172  1.65994e-05   0.00099225  3.04795e-05      5.17104  :hl:`False`
    205   0.00116655  5.87326e-05    0.0009726  3.02205e-05      2.93635  :hl:`False`
    207   0.00109664    5.846e-05   0.00095265  2.99545e-05        2.192         True
    209   0.00108667  1.59775e-05    0.0009802  3.03205e-05      3.10663  :hl:`False`
    211   0.00108588   1.5647e-05   0.00101455  3.07715e-05      2.06635         True
    213   0.00111711  1.73304e-05   0.00099005  3.04505e-05      3.62654  :hl:`False`
    215   0.00109222  1.61502e-05   0.00102495  3.09065e-05      1.92912         True
    217    0.0010924  1.83855e-05    0.0009409  2.97965e-05      4.32694  :hl:`False`
    219   0.00106172  1.68272e-05   0.00085005   2.8548e-05      6.38742  :hl:`False`
    221   0.00103876  1.85236e-05   0.00089455  2.91665e-05      4.17379  :hl:`False`
    223   0.00106566  1.63213e-05    0.0009124   2.9411e-05      4.55633  :hl:`False`
    225   0.00104802  1.53696e-05   0.00087615  2.89125e-05      5.24889  :hl:`False`
    227   0.00102713  1.59634e-05   0.00088065   2.8975e-05      4.42776  :hl:`False`
    229   0.00100579  1.63727e-05    0.0008775    2.895e-05      3.85736  :hl:`False`
    231   0.00103697  1.58147e-05     0.000875  2.88965e-05      4.91711  :hl:`False`
    233   0.00103529  1.80806e-05   0.00091045  2.93845e-05      3.61824  :hl:`False`
    235   0.00100917    1.656e-05   0.00088475  2.90315e-05      3.72257  :hl:`False`
    237   0.00100023  2.05546e-05   0.00084455   2.8471e-05       4.4335  :hl:`False`
    239   0.00100228  1.58244e-05    0.0008346  2.83305e-05       5.1674  :hl:`False`
    241  0.000983864  1.50035e-05   0.00083185  2.82915e-05      4.74692  :hl:`False`
    243  0.000997541  1.85275e-05   0.00085315   2.8592e-05      4.23805  :hl:`False`
    245   0.00104778   2.1722e-05   0.00088735  2.90675e-05      4.42114  :hl:`False`
    247   0.00100842  1.64345e-05    0.0008887   2.9086e-05      3.58364  :hl:`False`
    249   0.00106032  1.56954e-05   0.00093345   2.9696e-05      3.77718  :hl:`False`
    251   0.00106348  1.61786e-05   0.00095775  3.00225e-05       3.1002  :hl:`False`
    253   0.00107137  2.16596e-05    0.0009621    3.008e-05        2.948  :hl:`False`
    255   0.00110801  1.69586e-05    0.0009755   3.0259e-05      3.82009  :hl:`False`
    257   0.00102729  1.65585e-05   0.00087365   2.8878e-05      4.61556  :hl:`False`
    259  0.000973585  1.50525e-05    0.0008456   2.8486e-05       3.9724  :hl:`False`
    261   0.00099714  1.87934e-05    0.0007888  2.76745e-05      6.22793  :hl:`False`
    263  0.000950634  1.59219e-05    0.0007969   2.7792e-05      4.79972  :hl:`False`
    265  0.000881015  1.43211e-05    0.0007551  2.71325e-05      4.10412  :hl:`False`
    267  0.000854355  1.43856e-05   0.00074015   2.6961e-05      3.73723  :hl:`False`
    269  0.000816657  1.52233e-05    0.0006776   2.6014e-05      4.61354  :hl:`False`
    271  0.000765727  1.35224e-05   0.00065885  2.57235e-05      3.67766  :hl:`False`
    273  0.000736658  1.50207e-05    0.0005968   2.4733e-05      4.83321  :hl:`False`
    275  0.000691288  1.37425e-05    0.0006269   2.5221e-05      2.24177         True
    277  0.000678993  1.28367e-05    0.0006212    2.513e-05      2.04803         True
    279  0.000696424   1.6121e-05   0.00060335   2.4844e-05      3.14267  :hl:`False`
    281  0.000670687  1.65141e-05    0.0005857   2.4557e-05      2.87185  :hl:`False`
    283  0.000651523    1.276e-05   0.00052105   2.3475e-05       4.8832  :hl:`False`
    285  0.000599761  1.26954e-05   0.00053375   2.3694e-05      2.45571         True
    287   0.00061133  1.33979e-05   0.00055205  2.40015e-05      2.15659         True
    289  0.000601374  1.20326e-05    0.0005533  2.40225e-05      1.78929         True
    291  0.000583103  1.21542e-05    0.0005488   2.3947e-05      1.27733         True
    293  0.000584056  1.20167e-05   0.00053585  2.37295e-05      1.81235         True
    295  0.000540916   1.1966e-05   0.00049291  2.29925e-05      1.85209         True
    297  0.000550412  1.21389e-05   0.00052315   2.3514e-05      1.03022         True
    299  0.000552923  1.18554e-05  0.000479485  2.27575e-05      2.86191  :hl:`False`
    301  0.000560512  1.15318e-05   0.00052695  2.35785e-05      1.27866         True
    303  0.000531155  1.09718e-05  0.000483245  2.28235e-05       1.8919         True
    305  0.000518599  1.11668e-05  0.000484415   2.2844e-05      1.34438         True
    307  0.000492058  1.07867e-05  0.000483095   2.2821e-05     0.355101         True
    309  0.000505487  1.69899e-05  0.000488225   2.2911e-05     0.605184         True
    311  0.000509219   1.7619e-05  0.000488575   2.2917e-05     0.714139         True
    313  0.000501507  1.25527e-05  0.000487045    2.289e-05     0.553988         True
    315  0.000488588  1.06051e-05  0.000465225   2.2505e-05       0.9391         True
    317  0.000483927  1.75318e-05   0.00050375   2.3191e-05    -0.681862         True
    319   0.00049458  1.08281e-05   0.00048882  2.29215e-05      0.22722         True
    321  0.000482865  1.05604e-05   0.00044683   2.2175e-05      1.46716         True
    323  0.000477005  1.00847e-05  0.000452225   2.2272e-05      1.01353         True
    325  0.000480317  9.92964e-06  0.000467225  2.25405e-05     0.531542         True
    327  0.000494829  1.07151e-05   0.00047503   2.2679e-05     0.789352         True
    329  0.000491724  1.07552e-05   0.00047855   2.2741e-05       0.5237         True
    331  0.000507182   1.0728e-05   0.00049157  2.29695e-05     0.615827         True
    333  0.000498105   1.0642e-05  0.000487365   2.2896e-05     0.425391         True
    335  0.000502847  1.08098e-05   0.00049807  2.30825e-05     0.187432         True
    337  0.000505027  1.24756e-05   0.00045714  2.23605e-05      1.87018         True
    339  0.000507307  1.00953e-05  0.000486445    2.288e-05     0.834194         True
    341  0.000489606  1.18542e-05    0.0005155   2.3383e-05    -0.987711         True
    343  0.000473202  1.02049e-05  0.000481145   2.2757e-05    -0.318474         True
    345  0.000475292  1.00383e-05  0.000489915  2.29405e-05    -0.583981         True
    347  0.000480632  9.63098e-06   0.00044432  2.21295e-05      1.50456         True
    349  0.000465248  9.71176e-06  0.000444205  2.21275e-05     0.870816         True
    351  0.000475173  9.77166e-06  0.000448605   2.2207e-05      1.09505         True
    353  0.000437251  9.24249e-06   0.00045204   2.2269e-05    -0.613391         True
    355  0.000471841  9.91968e-06   0.00042395  2.17575e-05      2.00281         True
    357  0.000451007  9.16715e-06  0.000441215   2.2073e-05     0.409681         True
    359   0.00043615  9.44434e-06   0.00046094  2.24285e-05     -1.01865         True
    361  0.000425573  1.07187e-05  0.000448195  2.21995e-05    -0.917668         True
    363  0.000430618  9.78274e-06  0.000444745   2.2137e-05    -0.583687         True
    365  0.000418642    8.511e-06   0.00043726   2.2001e-05    -0.789255         True
    367  0.000410464   9.2263e-06  0.000417455  2.16375e-05    -0.297205         True
    369  0.000390776  7.92623e-06   0.00038885  2.11005e-05    0.0854315         True
    371   0.00037246   8.0628e-06   0.00037076   2.0754e-05    0.0763566         True
    373  0.000381532  8.19401e-06   0.00036254   2.0595e-05     0.856856         True
    375  0.000359002  7.44099e-06  0.000398215   2.1278e-05      -1.7396         True
    377  0.000346426  7.51633e-06  0.000357555  2.04975e-05    -0.509748         True
    379  0.000354585  7.41695e-06  0.000324985  1.98505e-05      1.39682         True
    381  0.000344207  7.06501e-06  0.000342015  2.01915e-05     0.102481         True
    383    0.0003436  7.10479e-06   0.00031319  1.96105e-05      1.45796         True
    385  0.000327421    6.915e-06  0.000326635  1.98835e-05    0.0373397         True
    387  0.000309169  6.48171e-06  0.000303065  1.94025e-05     0.298385         True
    389  0.000333483  8.11078e-06  0.000270825  1.87245e-05      3.07061  :hl:`False`
    391  0.000301403  6.34478e-06  0.000296465  1.92655e-05     0.243443         True
    393  0.000304476  6.32524e-06   0.00028084   1.8933e-05      1.18408         True
    395  0.000291929  6.22648e-06    0.0002719  1.87475e-05      1.01391         True
    397  0.000284313  6.04437e-06  0.000263645  1.85705e-05      1.05831         True
    399  0.000269536  5.84774e-06   0.00025017   1.8277e-05      1.00918         True
    401  0.000272009  6.21651e-06   0.00022047  1.76135e-05       2.7593  :hl:`False`
    403   0.00025244  5.50901e-06   0.00020573   1.7275e-05      2.57609         True
    405  0.000237807  5.47488e-06  0.000211075  1.73985e-05      1.46558         True
    407  0.000227296  5.32532e-06   0.00019417  1.70045e-05      1.85907         True
    409   0.00022099  5.11706e-06   0.00016967   1.6417e-05      2.98444  :hl:`False`
    ===  ===========  ===========  ===========  ===========  ===========  ===========


../../../_images/examples_notebooks_livermore_exps_spheres_example_62_1.png

L’impression des résultats des TestStudent dans le cas FULL_DETAILS donne le tableau de Student en INTERMEDIATE, soit les bins où le test à échouer.

Remarque : le test de Holm-Bonferroni n’est pas très adapté ici, comme nous comparons les données à la simulation, nous n’avons pas de nombre de degrés de liberté similaire pour les deux échantillons.

Graphiques de comparaison entre les données expérimentales et Tripoli-4

L’analyse des données peut également être faite en dehors de valjean en fonction de ses nécessités.

Comme pour la lecture des résultats expérimentaux, une petite classe a été dérivée pour facilier et personnaliser les graphiques de comparaison.

La bibliothèque utilisée est matplotlib.

Dans notre cas, on souhaite aisément :

  • ajouter une nouvelle courbe, avec ses erreurs

  • visualiser le rapport entre les différentes courbes

  • pouvoir personnaliser facilement la couleur et l’aspect des courbes (aisé grâce à matplotlib, les arguments sont juste transmis ici)

Cette petite classe, CompPlot, est aussi disponible dans le notebook.

Le nom de « l’analyse » correspond à la clef pour les données expérimentales. Cela permet de générer par exemple le titre.

[36]:
import matplotlib.pyplot as plt
from comp_plots import CompPlot

cplot = CompPlot(exp_key)
cplot.add_errorbar_plot(exp_data.bins['t'], exp_data.value, exp_data.error,
                        fmt='o', c='black', ms=2, ecolor='black', label='Experiment')
cplot.add_errorbar_plot(t4ds.bins['t'], t4ds.value, t4ds.error,
                        label='T4', drawstyle='steps-mid', fmt='-', c='orange')

cplot.add_errorbar_ratio(ratio.bins['t'], ratio.value, 0,
                         drawstyle='steps-mid', fmt='-', c='green')
cplot.splt[1].fill_between(
    ratio.bins['t'],
    np.ones(ratio.bins['t'].size) - exp_data.error/exp_data.value,
    np.ones(ratio.bins['t'].size) + exp_data.error/exp_data.value,
    facecolor='lightgrey', step='mid')
cplot.customize_plot()
plt.show()
../../../_images/examples_notebooks_livermore_exps_spheres_example_65_0.png