[REDMINE1D-318] [RM-8313] Faire un fit analytique des lois de puissance du continu des QSO Created: 22/Sep/23  Updated: 26/Sep/24  Resolved: 17/Sep/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


 Description   

Created on 2023-09-21 09:14:58 by Vincent Le Brun. % Done: 100

les continus des quasars sont calculés avec deux lois de puissance (avec une séparation à 5400A rest-frame), prévoir un fit analytique sur les droites en log-log

TODO:

  • spécifier quoi faire pour la variance avec le passage du spectre en log-log
  • écrire un opérateur dérivé de COperatorTemplateFittingBase ou COperatorTemplateFitting
  • modifier l'opérateur utilisé dans le linemodel (via un paramètre, comme pour linemodel.continuumfit.fftprocessing)

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



 Comments   
Comment by Redmine-Jira Migtation [ 26/Sep/24 ]

Comment by Vincent Le Brun on 2023-09-23 09:04:12:
en attendant il y a peut-être un moyen plus simple de gagner du temps, j'ai réalisé que quand le spectre n'est couvert que par une des deux parties du template, on fait 3 fois le meme fit (si 1+z > lambda_max/5400) ou 7 fois (si 1+z< lambda_min/5400). Il y a peut-être un moyen subtil de contourner ça (vu qu'on est plutôt sur 3,5 minutes par spectre)

Comment by Redmine-Jira Migtation [ 26/Sep/24 ]

Comment by Didier Vibert on 2024-03-18 18:40:13:
résumé de la discussion de cet apm avec @fdufresne :
développement en plusieurs étapes (créer des sous-tickets ? ):

Organisation

on décompose le développement comme suit:

  1. solver loi de puissance en log-log avec fit moindre-carré linéaire (SVD)
  2. solver loi de puissance exact, avec moindre carré non-linéaire type LMFIT "Levenberg–Marquardt":https://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm
  3. pondération du solver log-log pour corriger le biais donnant plus de poids aux grandes longueurs d'onde à cause du mj(\ln(\lambda)), en controlant la qualité de la pondération par comparaison avec le solver LMFIT

fit moindre-carré linéaire en log-log

developer un nouvel opérateur ainsi qu'un nouveau solver utilisant cet opérateur effectuant le fit en log-log.
quelques précisions:

  • En s'inspirant du solver @TemplateFittingSolve@ boucle sur les redshift et sauvegarde des résultats pour tous les z, puis appel de l'opérateur @COperatorPdfz@
  • boucle sur les coeff ISM/IGM (cf @COperatorTemplateFitting::BasicFit@), en divisant le spectre et le bruit en entrée par les courbes d'extinction ISM et IGM. Attention de calculer ces courbes en utilisant les longueurs d'onde restframe (déredshiftée)
  • on transforme le spectre en entrée en log-log:
  • longueur d'onde mj(\lambda) en mj(\ln(\lambda))
  • flux mj(F) en mj(\ln(F))
  • bruit mj(\sigma_F) en {{mj(\frac {\partial \ln(F)} {\partial F}

    \sigma_F = \frac

    {\sigma_F} {F}

    )}}

  • on effectue un fit de moindre carré linéaire d'un polynôme de degré 1 (cf @CSvdFitter::fitAmplitudesLinSolve@) avec la GSL (via SVD)

fit loi de puissance via moindre-carré non-linéaire LMFIT

utiliser le "Weighted Nonlinear Least-Squares":https://www.gnu.org/software/gsl/doc/html/nls.html#weighted-nonlinear-least-squares de la GSL pour fitter directement la loi de puissance sur le spectre, sans transformation.

Cette fois, comme pour @templatefittingSolve@, l'ISM et l'IGM ne sont pas divisés au spectre mais appliqués au modèle fitté, en bouclant sur les différents coeff discretisés.

idéalement on peut utiliser la même classe solver que pour le cas précédent, mais en utilisant un opérateur différent, éventuellement dérivé d'une base commune avec l'opérateur log-log

Correction du biais log-log introduit par le sampling log en abscisse

Comment by Redmine-Jira Migtation [ 26/Sep/24 ]

Comment by Didier Vibert on 2024-03-19 08:28:27:
@vlebrun il y a 2 lois de puissance à ajuster. Quelle est la longueur d'onde de transition ?

Comment by Redmine-Jira Migtation [ 26/Sep/24 ]

Comment by Vincent Le Brun on 2024-03-19 08:49:37:
Didier Vibert wrote in #note-6:
> @vlebrun il y a 2 lois de puissance à ajuster. Quelle est la longueur d'onde de transition ?

A quoi ça sert que je fasse des tickets détaillés, je vais faire comme Ali maintenant (5400 c'est dans la description)

Comment by Redmine-Jira Migtation [ 26/Sep/24 ]

Comment by Didier Vibert on 2024-03-26 17:30:27:
à propos des samples négatifs dans le spectre:

il faut de toute façon éviter les samples trop proches de zéro à cause du bruit. Une façon de faire consiste à ne retenir que les samples supérieurs à un seuil en SNR.

  • Il faut donc définir un seuil dans les paramètres de l'opérateur (ou de la méthodeSolve) @nullThreshold@ comme pour le linemodel.
  • ajouter un test sur le nombre de samples retenus qui doit être assez grand. Dans le cas contraire on sort un warning indiquant un fit compatible avec zero, et on sort avec la solution (0.0, 0.0) comme paramètres pour la loi de puissance.
Comment by Redmine-Jira Migtation [ 26/Sep/24 ]

Comment by Pierre-yves Chabaud on 2024-09-12 06:54:37:
Merged into @develop@ (@308fff90@)

Generated at Sat Jul 12 17:08:54 JST 2025 using Jira 8.3.4#803005-sha1:1f96e09b3c60279a408a2ae47be3c745f571388b.