1 --- !ruby/ShaXpear::Treatment
  2 name: taux_reproduction
  3 experiment: takeOverTime # l'experience sur la quelle on s'applique
  4 parents: # les traitements qui doivent être effectués avant celui-ci
  5          # on peut ainsi utiliser leurs fichiers de sortie
  6          # (un peu comme les dépendances d'un makefile)
  7 date:
  8 doc:
  9   name:     Taux de reproduction moyen
 10   author:   shaXpear team
 11   keywords: [ test ]
 12   desc:     A lot of stuff very interesting.
 13 outputs:
 14 - file: # fichiers generes
 15     name:    taux
 16     pattern: taux.dat
 17     desc:    plein de trucs
 18     data:
 19       type:  column
 20       content:
 21       - { name: density,     desc: the density      }
 22       - { name: temperature, desc: the temperature  }
 23       - { name: taux_mean,   desc: the mean of taux }
 24 - file:
 25     name:    age_mean
 26     pattern: age_mean.dat
 27     desc:    age moyen maximal de la pop en fonction de la temperature
 28     data:
 29       type:  column
 30       content:
 31       - { name: temperature, desc: la temperature }
 32       - { name: age_mean,    desc: "l'age moyen" }
 33 - file:
 34     name:    age_max
 35     pattern: age_max.dat
 36     desc:    age moyen maximal de la population
 37     data:
 38       type:  one_value
 39 - file:
 40     name:    ab_max
 41     pattern: means.dat
 42     desc:    voir traitements...
 43     data:
 44       type:  column
 45       content:
 46       - { name: mean, desc: moyenne des max de a et b des file2 }
 47 body: # descriptions des traitements à effectuer (par chaine de traitement)
 48   - chain: # une chaine de traitement
 49       descr: >
 50         ce traitement cree un tableau a 2 dimensions en faisant
 51         la moyenne de la colonne taux des fichiers file1
 52         pour chaque valeur du couple (density,temperature).
 53       treatments:
 54       # Pour les traitements nous avons distingué plusieurs niveaux
 55       #   Note pour les explications:
 56       #     Par soucis de simplicité, nous allons dire que tous les labels sont
 57       #     des colonnes. Bien évidemment, les explications resteront valables
 58       #     en inversant lignes et colonnes.
 59       # row:    opérations sur une ligne    (inter-colonnes)
 60       # label:  opérations sur une colonne  (pour un fichier)
 61       # run:    opérations sur les fichiers d'un run
 62       # pset:  opérations sur les fichiers d'un jeu de paramètre
 63       # global: opérations sur tous les fichiers
 64       #
 65         label_level: mean                   # on fait la moyenne des elements de chaque colonne taux
 66         run_level:   last
 67         pset_level:  max                    # on fait le maximum de toutes les moyennes
 68       input:
 69       - { file: file1, labels: [ taux ] }   # on ne regardera que la ligne/colonne taux des fichiers 'file1'
 70       vars:
 71       - density                             # on répartit les fichiers en fonctions des paramètres
 72       - temperature                         # 'density' et 'temperature'
 73       output: taux                          # on écrit le résultat dans le fichier taux
 74       # exemple de sortie:
 75       # +---------+-------------+-----------+
 76       # | density | temperature | taux_mean |
 77       # +---------+-------------+-----------+
 78       # | 1.320   | 2.454       | 1.072     |
 79       # | 1.320   | 2.277       | 3.085     |
 80       # | 3.120   | 2.454       | 4.123     |
 81       # | ...     | ...         | ...       |
 82       # +---------+-------------+-----------+
 83       # 
 84       # en réalité: 
 85       # 1.320 2.454 1.072
 86       # 1.320 2.277 3.085
 87       # 3.120 2.454 4.123
 88   - chain:
 89       descr: >
 90       le maximum des ages moyens en fonction de la temperature
 91       treatments:
 92         label_level: mean
 93         files_level: max
 94       inputs:
 95       - { file: file1, label: [age] }
 96       vars: [ temperature ]
 97       output: age_mean
 98   - chain:
 99       descr: |
100       le maximum des ages moyen de la population.
101       treatments:
102         label_level: max # un seul fichier, donc on aura au final une valeur unique
103       inputs: # age_mean a été 'initialisé' (un traitement a écrit dedans), on peut donc l'utiliser
104       - { file: age_mean, label: [age_mean] }
105       output: best # le résultat est une valeur unique, donc le type du fichier doit être one_value
106   - chain:
107       descr:
108       treatments:
109         row_level:   max  # on fait le max entre les valeurs des colonnes a et b pour chaque ligne
110         label_level: mean # on fait la moyenne de la colonne ainsi obtenue
111       inputs:
112       - { file: file1, label: [a,b] } # on prend 2 colonnes
113       output: ab_max
114