[REDMINE1D-282] [RM-8219] [Parameters] Refacto object structure Created: 18/Aug/23  Updated: 07/Feb/24  Resolved: 07/Feb/24

Status: Done
Project: 1D Redmine
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Task Priority: Normal
Reporter: Redmine-Jira Migtation Assignee: Redmine-Jira Migtation
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File parameters.drawio    

 Description   

Created on 2023-08-17 16:17:07 by Fanny Dufresne. % Done: 100

Refacto parameters as explained here https://projets.lam.fr/projects/amazed/wiki/2023-07-24

MRs

MR cpf-redshift : https://gitlab.lam.fr/CPF/cpf-redshift/-/merge_requests/555

MR pyamazed : https://gitlab.lam.fr/CPF/pyamazed/-/merge_requests/128

MR amazed output analyzer : https://gitlab.lam.fr/amazed/amazed-output-analyzer/-/merge_requests/25

MR dataset-tools : https://gitlab.lam.fr/amazed/dataset-tools/-/merge_requests/88

MR vizu: https://gitlab.lam.fr/amazed/amazed-web-ui/-/merge_requests/27

Modification du dataset

Dataset se8 modifié. Nouveaux fits dans /net/CESAM/amazed/fdufresne/datasetTmp

Modifications présentes

1. Ajout d'un "étage" contenant le type de solver (stage) (RedshiftSolver / LineMeasSolve / ClassificationSolver ...)
2. Renommage de nombreux paramètres

python

En pratique, dans le python les modifications (hors renommage brut) concernent l'initialisation de l'objet parameters:

  • Récupération du json "brut". Celui-ci peut être au format "v1" (ancien format) ou "v2" (nouveau) format. La disctinciton ancien / nouveau se fait selon la présence d'un nouveau paramètre "version" dans le fichier de paramètres. On est donc retro compatibles sur le fichier json d'entrée (pour le moment).
  • Application du json schema check sur ce fichier. 2 json schema cohabitent actuellement (v1 / v2). Modification du cmakelist pour copier tout le contenu de auxdir plutôt que les fichiers 1 à 1 dans ressources.
  • Conversion du json "brut" (raw) en "treed". Que l'on ait en entrée un parameters v1 ou v2 on se retrouve donc avec le même "treed" format (voir ParametersConverter.py)
  • Application des "custom checks" sur ce "treed" parameters. NB: Les messages d'erreur affichés à l'utilisateur ont été renommés => pour les fichiers en paramètres "v1" ça peut être le nouveau nom qui s'affiche et non l'ancien

c++

Les principales modifications dans le c++ conernent l'ajout d'un étage ("scope") contenant le solver utilisé (stage) (RedshiftSolver / ClassificationSolver etc)

Le "renommage brut" des paramètres a été fait à l'aide du script rename_params_code.py et du fichier rename_parameters_v1_to_treed.csv (utilisé également pour la conversion paramètres v1 -> treed) + corrections manuelles.

Modification des sorties

Les résultats dont les mêmes, SAUF:

  • au niveau des noms des attributs:
  • <methodName>WarningFlags commençait avant par une majuscule, maintenant par une minuscule. Ex: LineMeasSolveWarningFlags > lineMeasSolveWarningFlags
  • au niveau des valeurs des attributs:
  • Pour tout ce qui est "continuumName", "firstPassContinuumName" etc:
  • fromspectrum devient fromSpectrum
  • nocontinuum devient noContinuum

Ces modifications se retrouvent dans le results.hdf5 et dans le redshift.csv



 Comments   
Comment by Redmine-Jira Migtation [ 07/Feb/24 ]

Comment by Fanny Dufresne on 2023-10-11 09:24:47:
Je propose de séparer ce ticket en 2 étapes :
1. Refacto de objects : passage de

  • <object_type>: {...}

    à:

  • solvers : [ {name: <object_type>, ...}

    , ...]

2. Refacto des solvers : ajouter de la description des stages - besoin de quelques clarifications là dessus

Comment by Redmine-Jira Migtation [ 07/Feb/24 ]

Comment by Didier Vibert on 2023-10-11 09:32:10:
Fanny Dufresne wrote in #note-6:
> Je propose de séparer ce ticket en 2 étapes :
> 1. Refacto de objects : passage de
> * <object_type>:

{...}

> à:
> * solvers : [

{name: <object_type>, ...}

, ...]
>
> 2. Refacto des solvers : ajouter de la description des stages - besoin de quelques clarifications là dessus

ok p moi

Comment by Redmine-Jira Migtation [ 07/Feb/24 ]

Comment by Didier Vibert on 2023-10-13 14:09:16:
je mets ici un point du checker à corriger (peut-être une issue dédiée, à toi de voir @fdufresne)

dans le json shema, @"additionalProperties": false@ n'est appliqué qu'au niveau où il est mis, mais ne s'applique pas aux niveaux en dessous: il faudrait donc le répéter dans chaque section properties... à moins qu'il y ait un moyen de le définir globalement pour toutes les properties ?

Comment by Redmine-Jira Migtation [ 07/Feb/24 ]

Comment by Didier Vibert on 2023-10-13 15:02:52:
encore un truc, avec la nouvelle structure définie ici (https://projets.lam.fr/projects/amazed/wiki/2023-07-24), on rajoute un niveau (stages) à l'arbre des scopes.

On peut soit supprimer ce niveau lors de la conversion du json en input vers le json stocké dans la classe parameters et passé au C++, mais c'est peut-être dommage voire impossible pour l'utilisation des paramètres en python.

une solution pour facilement prendre en compte ce niveau sans trop modifier le C++ consiste à binder en python via swig la classe @CAutoscope@ et de s'en servir dans le run @Context.run@ pour pousser des noms dans la chaine scope (et les dépiler automatiquement à la destruction de l'objet). D'ailleurs dans la classe CAutoscope, on pourrait utiliser directement le singleton CProcessFlowContext pour récupérer la scopestack plutôt que de le prendre comme argument...

Autre solution définir en python un contextmanager qui push le nom en entrée et le pop en sortie, et l'utiliser avec des with statement dans le @Context.run@.

Ensuite, avec ça on peut donc pousser des scope dans la scopstack du contexte, et ça devrait donc être l'api python dans @Context.run@ qui pousse les scopes SpectrumModel et stage, => il faut modifier le constructeur C++ des methodSolve pour qu'ils ne poussent que le nom de leur méthode, et plus besoin de leur passer en argument l'object type. Celui-ci pourra être récupéré directement dans le scopeStore.

=> attention aussi, ce niveau supplémentaire dans l'arbre, va se répercuter dans le resultStore. il faudra modifier certainement un peu le code python pour en tenir compte

Comment by Redmine-Jira Migtation [ 07/Feb/24 ]

Comment by Fanny Dufresne on 2023-10-17 09:31:05:
Je suis tout à fait partante pour rajouter les stages à l'arbre des scopes. Par contre je n'ai pas compris grand chose à l'implémentation proposée, je passerai en discuter

Comment by Redmine-Jira Migtation [ 07/Feb/24 ]

Comment by Fanny Dufresne on 2023-10-18 09:27:23:
A priori les pattern properties marchent très bien, y compris au niveau de la doc. Je suis très partante pour les utilisera

Comment by Redmine-Jira Migtation [ 07/Feb/24 ]

Comment by Pierre-yves Chabaud on 2024-01-23 10:14:06:
Merged @develop@ (@d7a0cecc@)

Generated at Sat Feb 10 15:31:09 JST 2024 using Jira 8.3.4#803005-sha1:1f96e09b3c60279a408a2ae47be3c745f571388b.