Jump to content

euldulle

Membre
  • Content Count

    36
  • Joined

  • Last visited

About euldulle

  • Rank
    Membre

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Salut Vincent, il n'y a vraiment pas de quoi. Ça fait surtout plaisir de remettre 3 lignes de code dans siril.. a+
  2. Woosh, c'était rapide C'est quoi la subtilité entre main.c et main-cli.c ? (J'avais fait les 2, pis comme ça marchait avec juste le main.c, j'avais annulé dans main-cli.c)
  3. Salut Cyril. Tu verras, pour le coup, je ne me suis pas foulé niveau code... Un truc de dinosaure. Mais c'est super pratique. (Par contre sous windows, ça doit pas exister stdin... Il faut ptet ajouter un test pour la compilation.)
  4. Bonjour, permettre à siril de lire stdin en spécifiant - comme nom de script permet d'inclure des sections de traitement siril dans un script en bash par exemple : #!/bin/bash # bash commands to prepare files # initdir=$(pwd) # etc... snapped echo "Launching siril..." /usr/local/bin/siril -i /home/fmeyer/.siril/siril.cfg -s - <<ENDSIRIL # ############################################# # Simple Script for Siril 0.9.9 # (master and flat preexist) ############################################ setext $ext #preprocess lights # cd $working_directory preprocess $sequence -dark=$dark -flat=$flat #align lights register pp_$sequence #stack calibrated lights stack r_pp_$sequence rej 3 3 -norm=addscale close ENDSIRIL # # # echo done Siril part echo bash stuff, eg to clean up things... cd $working_directory # etc... snapped (proposition de patch attaché) -- fm patch_siril_stdin
  5. Bon, ça a fini d'infuser C'est finalement plus simple que prévu, mais c'est assez long à expliquer. Sous ce repo git : https://github.com/euldulle/seqfits il y a le document pdf/tex style "livre blanc"détaillant la démarche, un Makefile et les listes de tâches qu'il génère. Le pdf est aussi en pièce jointe. J'insère le Makefile pour donner une idée de la chose, mais les infos pertinentes sont vraiment dans le pdf : ################################################################ # # Section définie par l'utilisateur : nom du projet et composantes # # contraintes (amendables) d'implémentation choisies pour ce premier jet: # # chaque composante est décrite par un mot composé d'une lettre # définissant la fréquence, et d'un nombre définissant le # temps d'exposition en secondes. Les règles du Makefile utilise # ces contraintes donc si on les modifie (si on veut plus de caracteres # pour FREQ par exemple), il faut modifier les recettes du Makefile # en conséquence. L = NOFILTER # R = RED # G = GREEN # B = BLUE # O = OIII # H = Halpha # A = Aucune idée # ... # # project=projectname components=L300 L120 L30 R60 G60 B60 A60 H120 K60 # # Fin de la section observateur ################################################################################### # Section générique : elle traduit une # stratégie d'acquisition/traitement classique en tâches ACQ et PROCESS. # # On créée 3 fichiers séparés, pour la facilité de lecture : # le fichier .tasks contient toutes les tâches ACQ et PROCESS, dans l'ordre # où elles sont générées par le Makefile, donc c'est un ordre consistant : # les tâches PROCESS apparaissent apres que les acquisitions nécessaires # aient été programmées. # # le fichier projectname.acq ne contient que les tâches d'acquisition # # le fichier projectname.process ne contient que le tâches de traitement, # c'est un squelette symbolique du script final de traitement. # .SILENT:project SHELL := /bin/bash explist := $(shell for i in $(components); do echo $${i:1}; done | sort | uniq) freqlist := $(shell for i in $(components); do echo $${i:0:1}; done | sort | uniq) darklist := $(shell for i in $(explist); do echo Master_Dark_$$i; done) lightlist := $(shell for i in $(components); do echo Master_Light_$$i; done) flatlist := $(shell for i in $(freqlist); do echo Master_Flat_$$i; done) biaslist := Master_Bias acq := $(project).acq process := $(project).process tasks := $(project).tasks rm := $(shell rm $(acq) $(process) $(tasks) 2>/dev/null) project: $(biaslist) $(darklist) $(flatlist) $(lightlist) @echo NEWPROCESS composite ${lightlist} \ |tee -a $(process)|tee -a $(tasks) Master_Bias: Seq_Bias @echo NEWPROCESS makemaster IMAGETYP="Bias" \ |tee -a $(process)|tee -a $(tasks) Seq_Bias: @echo NEWACQ Seq IMAGETYP='Bias' \ |tee -a $(acq)|tee -a $(tasks) Master_Dark_%: Seq_Dark_% @echo NEWPROCESS makemaster IMAGETYP="Dark" EXPTIME=$* \ |tee -a $(process)|tee -a $(tasks) Seq_Dark_%: @echo NEWACQ Seq IMAGETYP='Dark' EXPTIME=$* \ |tee -a $(acq)|tee -a $(tasks) Master_Flat_%: Seq_Flat_% @echo NEWPROCESS makemaster IMAGETYP="Flat" FREQ=$* \ |tee -a $(process)|tee -a $(tasks) Seq_Flat_%: @echo NEWACQ Seq IMAGETYP='Flat' FREQ=$* \ |tee -a $(acq)|tee -a $(tasks) Master_Light_%: freq = $(shell i=$(*); echo $${i:0:1}) Master_Light_%: exp = $(shell i=$(*); echo $${i:1}) Master_Light_%: Seq_Light_% @echo NEWPROCESS makemaster IMAGETYP="Light" FREQ=$(freq) EXPTIME=$(exp) \ |tee -a $(process)|tee -a $(tasks) Seq_Light_%: freq = $(shell i=$(*); echo $${i:0:1}) Seq_Light_%: exp = $(shell i=$(*); echo $${i:1}) Seq_Light_%: @echo NEWACQ Seq IMAGETYP='Light' EXPTIME=$(exp) FREQ=$(freq) \ |tee -a $(acq) |tee -a $(tasks) Et bon tant qu'on y est, la liste des tâches générées dans cet exemple (dans l'ordre de sortie du Makefile, donc consistant avec les contraintes et les prérequis pour chaque tâche) : NEWACQ Seq IMAGETYP=Bias NEWPROCESS makemaster IMAGETYP=Bias NEWACQ Seq IMAGETYP=Dark EXPTIME=120 NEWPROCESS makemaster IMAGETYP=Dark EXPTIME=120 NEWACQ Seq IMAGETYP=Dark EXPTIME=30 NEWPROCESS makemaster IMAGETYP=Dark EXPTIME=30 NEWACQ Seq IMAGETYP=Dark EXPTIME=300 NEWPROCESS makemaster IMAGETYP=Dark EXPTIME=300 NEWACQ Seq IMAGETYP=Dark EXPTIME=60 NEWPROCESS makemaster IMAGETYP=Dark EXPTIME=60 NEWACQ Seq IMAGETYP=Flat FREQ=A NEWPROCESS makemaster IMAGETYP=Flat FREQ=A NEWACQ Seq IMAGETYP=Flat FREQ=B NEWPROCESS makemaster IMAGETYP=Flat FREQ=B NEWACQ Seq IMAGETYP=Flat FREQ=G NEWPROCESS makemaster IMAGETYP=Flat FREQ=G NEWACQ Seq IMAGETYP=Flat FREQ=H NEWPROCESS makemaster IMAGETYP=Flat FREQ=H NEWACQ Seq IMAGETYP=Flat FREQ=K NEWPROCESS makemaster IMAGETYP=Flat FREQ=K NEWACQ Seq IMAGETYP=Flat FREQ=L NEWPROCESS makemaster IMAGETYP=Flat FREQ=L NEWACQ Seq IMAGETYP=Flat FREQ=R NEWPROCESS makemaster IMAGETYP=Flat FREQ=R NEWACQ Seq IMAGETYP=Light EXPTIME=300 FREQ=L NEWPROCESS makemaster IMAGETYP=Light FREQ=L EXPTIME=300 NEWACQ Seq IMAGETYP=Light EXPTIME=120 FREQ=L NEWPROCESS makemaster IMAGETYP=Light FREQ=L EXPTIME=120 NEWACQ Seq IMAGETYP=Light EXPTIME=30 FREQ=L NEWPROCESS makemaster IMAGETYP=Light FREQ=L EXPTIME=30 NEWACQ Seq IMAGETYP=Light EXPTIME=60 FREQ=R NEWPROCESS makemaster IMAGETYP=Light FREQ=R EXPTIME=60 NEWACQ Seq IMAGETYP=Light EXPTIME=60 FREQ=G NEWPROCESS makemaster IMAGETYP=Light FREQ=G EXPTIME=60 NEWACQ Seq IMAGETYP=Light EXPTIME=60 FREQ=B NEWPROCESS makemaster IMAGETYP=Light FREQ=B EXPTIME=60 NEWACQ Seq IMAGETYP=Light EXPTIME=60 FREQ=A NEWPROCESS makemaster IMAGETYP=Light FREQ=A EXPTIME=60 NEWACQ Seq IMAGETYP=Light EXPTIME=120 FREQ=H NEWPROCESS makemaster IMAGETYP=Light FREQ=H EXPTIME=120 NEWACQ Seq IMAGETYP=Light EXPTIME=60 FREQ=K NEWPROCESS makemaster IMAGETYP=Light FREQ=K EXPTIME=60 NEWPROCESS composite Master_Light_L300 Master_Light_L120 Master_Light_L30 \ Master_Light_R60 Master_Light_G60 Master_Light_B60 \ Master_Light_A60 Master_Light_H120 Master_Light_K60 Coffee time seqfits.pdf
  6. Yep, prononcé à la franc-comtoise, ça donne ça J'ai jamais eu l'occasion de le dire, mais vous avez fait de siril un truc génial. La fonctionnalité script était vraiment un des points de mire initiaux et maintenant c'est là et c'est encore mieux que bien, versatile, souple, puissant. Et ça ne fait que commencer, c'est un outil universel, ouvert, sur lequel on peut construire... Merci et bravo aux devs. Yep, je vais tâcher de pondre quelque chose avant la fin du sympathique pont qui s'annonce (pour le moment ça infuse doucement pendant la nuit...) -- fm
  7. Faut pas se précipiter à mon avis et bien poser le problème avant de savoir ce qu'il y a besoin d'écrire comme code. J'essaie de mettre de l'ordre dans ce que j'ai écrit et je reviens avec une proposition un peu plus propre.
  8. Non mais 15° c'est à la louche, juste pour dire que c'est vraiment conséquent (Je referai quelques tests et reviendrai avec des chiffres précis.) Tous les composants raspberry/odroid/portable sont en UTC, donc de ce côté-là je suis sûr qu'il n'y a pas d'ambiguïté. Oki. Merci.
  9. Ok merci Patrick, je vais faire ça. J'avais déjà un peu l'impression d'être submergé par le nombre de boutons "connect" donc mes premiers réflexes allaient pas forcément vers en ajouter d'autres mais je vais tester ça et je te redis. Le problème du unpark (2) tu penses que ça peut être lié ? C'est un comportement assez bizarre, reproductible mais pas tout le temps ; je suis parqué à une position non standard (tube horizontal). Ah oui autre chose : pour suivre un petit corps genre comète ou astéroide, avec instructions de guidage envoyés au phd2 server, est-ce qu'il faut régler les "rates" à la fois dans l'outil phd2 et dans indi ou juste dans un des deux ?
  10. Yep. Velu à souhait, apparemment illisible, finalement assez simple et surtout diaboliquement efficace : le pedigree irréprochable d'un script réussi L'illisibilité est liée à l'efficacité, et elle n'est vraiment qu'apparente.
  11. Ok d'accord. Pour tes renommages de fichiers, un petit script est ce qu'il y a de plus simple : en bash sous linux ça donne un truc comme ça, juste pour illustrer comment c'est rapide de résoudre en ligne de commande certaines tâches impossibles à faire simplement sur une interface graphique si elle n'est pas spécifiquement prévue pour ça. bash est disponible sous windows et ça rend tellement de petits (ou gros) services de ce genre, que ça vaut vraiment la peine de jeter un oeil (en attendant les fits structurés :)). La syntaxe a l'air archaïque, alors qu'en fait euh... elle est vraiment TRÈS archaïque, les origines de ce machin là doivent remonter à un demi-siècle ; mais si même Microsoft l'a intégré à windows10 , c'est que ça doit rendre quelques services. Donc à titre d'exemple (pas testé), les # c'est des commentaires (sauf la premiere ligne, qu'il faut laisser comme ça) : #!/bin/bash # # # $1 = premier argument passe au script : le numero auquel on veut que la sequence commence # if [[ "$1" == "" ]]; then # si pas d'argument, on commence a 1 let seq=1 else let seq=$1 fi destrep="/autre/repertoire/ for fichier in $(ls *.fits); do # # $fichier dans la boucle est le fichier en cours de traitement # # # extraction de l'extension : # basename=$(basename "$fichier" ".fits") cp "$fichier" "$destrep/$basename"_$seq.fits let seq=$seq+1 done si on enleve les commentaires et les tests pour faire beau, il reste 5 lignes utiles, qui prennent 2 minutes à écrire avec un peu d'habitude. Ça pourrait donner : copie.bash, lancé sans argument, il commence la sequence a 1 : fmeyer@ganymede:~/astrolab/Bias$ ./copie.bash cp bias2_Bias_001.fits /autre/repertoire//bias2_Bias_001_1.fits cp bias2_Bias_002.fits /autre/repertoire//bias2_Bias_002_2.fits cp bias2_Bias_003.fits /autre/repertoire//bias2_Bias_003_3.fits cp bias2_Bias_004.fits /autre/repertoire//bias2_Bias_004_4.fits cp bias2_Bias_005.fits /autre/repertoire//bias2_Bias_005_5.fits cp bias2_Bias_006.fits /autre/repertoire//bias2_Bias_006_6.fits cp bias2_Bias_007.fits /autre/repertoire//bias2_Bias_007_7.fits cp bias2_Bias_008.fits /autre/repertoire//bias2_Bias_008_8.fits cp bias2_Bias_009.fits /autre/repertoire//bias2_Bias_009_9.fits cp bias2_Bias_010.fits /autre/repertoire//bias2_Bias_010_10.fits cp bias2_Bias_011.fits /autre/repertoire//bias2_Bias_011_11.fits cp bias2_Bias_stacked.fits /autre/repertoire//bias2_Bias_stacked_12.fits cp bias_Bias_001.fits /autre/repertoire//bias_Bias_001_13.fits cp bias_Bias_002.fits /autre/repertoire//bias_Bias_002_14.fits cp bias_Bias_003.fits /autre/repertoire//bias_Bias_003_15.fits cp bias_Bias_004.fits /autre/repertoire//bias_Bias_004_16.fits cp bias_Bias_005.fits /autre/repertoire//bias_Bias_005_17.fits cp bias_Bias_006.fits /autre/repertoire//bias_Bias_006_18.fits cp bias_Bias_007.fits /autre/repertoire//bias_Bias_007_19.fits cp bias_Bias_008.fits /autre/repertoire//bias_Bias_008_20.fits cp bias_Bias_009.fits /autre/repertoire//bias_Bias_009_21.fits cp bias_Bias_010.fits /autre/repertoire//bias_Bias_010_22.fits cp bias_Bias_011.fits /autre/repertoire//bias_Bias_011_23.fits cp Bias_stacked.fits /autre/repertoire//Bias_stacked_24.fits Avec un argument, 12, on commence la séquence à 42 (forcément) fmeyer@ganymede:~/astrolab/Bias$ ../copie.bash 12 cp bias2_Bias_001.fits /autre/repertoire//bias2_Bias_001_12.fits cp bias2_Bias_002.fits /autre/repertoire//bias2_Bias_002_13.fits cp bias2_Bias_003.fits /autre/repertoire//bias2_Bias_003_14.fits cp bias2_Bias_004.fits /autre/repertoire//bias2_Bias_004_15.fits cp bias2_Bias_005.fits /autre/repertoire//bias2_Bias_005_16.fits cp bias2_Bias_006.fits /autre/repertoire//bias2_Bias_006_17.fits cp bias2_Bias_007.fits /autre/repertoire//bias2_Bias_007_18.fits cp bias2_Bias_008.fits /autre/repertoire//bias2_Bias_008_19.fits cp bias2_Bias_009.fits /autre/repertoire//bias2_Bias_009_20.fits cp bias2_Bias_010.fits /autre/repertoire//bias2_Bias_010_21.fits cp bias2_Bias_011.fits /autre/repertoire//bias2_Bias_011_22.fits cp bias2_Bias_stacked.fits /autre/repertoire//bias2_Bias_stacked_23.fits cp bias_Bias_001.fits /autre/repertoire//bias_Bias_001_24.fits cp bias_Bias_002.fits /autre/repertoire//bias_Bias_002_25.fits cp bias_Bias_003.fits /autre/repertoire//bias_Bias_003_26.fits cp bias_Bias_004.fits /autre/repertoire//bias_Bias_004_27.fits cp bias_Bias_005.fits /autre/repertoire//bias_Bias_005_28.fits cp bias_Bias_006.fits /autre/repertoire//bias_Bias_006_29.fits cp bias_Bias_007.fits /autre/repertoire//bias_Bias_007_30.fits cp bias_Bias_008.fits /autre/repertoire//bias_Bias_008_31.fits cp bias_Bias_009.fits /autre/repertoire//bias_Bias_009_32.fits cp bias_Bias_010.fits /autre/repertoire//bias_Bias_010_33.fits cp bias_Bias_011.fits /autre/repertoire//bias_Bias_011_34.fits cp Bias_stacked.fits /autre/repertoire//Bias_stacked_35.fits et c'est évidemment tellement customisable que ça peut TOUT faire.
  12. Ok, bon, désolé je vais évidemment pas avoir de solution immédiate pas de solution immédiate, il ne peut pas y en avoir, sauf si elle est spécifiquement écrite pour résoudre ton problème ce qui est évidemment impossible à faire du point de vue de siril. Mais c'est un cas d'école qui montre que la diversité des besoins les rend impossibles à résoudre du point de vue de siril sans une approche systématique. Je vais dérouler ton problème et montrer comment on se sort de ce labyrinthe de fichiers avec les entetes fits/ Je décris ce que je propose de demander au soft d'acquisition de faire, à l'acquisition, pour garantir un traitement fluide et sans douleur à la fin. Je donne un nom à mon projet et je l'inscris (le soft d'acquisition l'inscrit) dans les entetes fits : PROJECT = "MaBelleImage" TOUTES les images du projet promènent ce header fits Pour les LRVB, créer à l'acquisition un sac de fichiers distingués en plus du PROJECT par le KEYWORD (standard) FREQ : FREQ = L FREQ = R FREQ =V FREQ =B Dans chacune de ces bandes chaque image porte en plus de l'entete FREQ, une entete disant qu'elle fait partie d'une séquence et son numéro dans la séquence : IMAGECPS = SEQ IMAGENUM = n Et bien sûr le type de l'image, en l'occurrence IMAGETYP=Light Tout ça dans le même répertoire avec les noms qu'on veut réglé une fois pour toutes dans le soft d'acquisition, ajusté (flat, dark, light, hA) au moment du lancement de l'acquisition. Et au traitement, on peut retrouver dans ce répertoire tout ce qu'on veut sans aucun input de l'utilisateur. dans le même répertoire que ci-dessus, 1 sac de fichiers par temps de pose, distingués par les KEYWORD (standard) : IMAGETYP = Dark EXPTIM = 30s et bien sur PROJECT, IMAGESEQ, IMAGENUM Pas de champ FREQ pour les darks of course. Idem darks, toujours même répertoire, IMAGETYP = Bias On continue, IMAGETYP=FLAT FREQ = L ou R ou V ou B IMAGESEQ et IMAGENUM comme d'hab. Encore une fois tout ça sans autre intervention que de signaler au soft qu'on acquiert des Flat, et que c'est du L ou du R si c'est pas fait automatiquement via la route a filtres. J'ai toujours un seul répertoire et la structure complète de mon acquisition est inscrite dans les fichiers au moment de l'acquisition. Quand disperser dans plusieurs répertoires sera devenu inutile, ce sera même plus une question. Donc, je dis que structuré comme décrit ci-dessus, siril n'a besoin que du répertoire de travail comme input pour pouvoir tout faire ; c'est un traitement LRVB classique, 1 seul temps de pose, aucun problème. Straight. Out of the box. Problème inexistant dans la nouvelle structure. juste pour être sûr de comprendre, tes flats2 c'est pas les mêmes que flats1 ? idem les offsets 1 et 2 ? les darks2 sont distingués des dark1s par le temps de pose, les bias1/bias2 et les flat1/flats2 pour moi c'est les mêmes, mais si c'était pas le cas, là il me manque quelque chose pour les distinguer les uns des autres (c'est pas un problème il faut juste décider comment on intègre ça dans les fits ; ça pourrait être un champ SESSION ; un PROJECT aurait potentiellement plusieurs SESSION distinctes avec des flats/darks/offsets différents). Ok. Moyennant ça, à la fin de l'acquisition, si je sais quoi faire des différentes sessions, je n'ai toujours besoin de rien d'autre que le répertoire où se trouvent les sacs de fichiers pour pouvoir faire tout le traitement, recréer les séquences (sous formes de listes de fichiers, pas de copie des fichiers), et faire ce que j'ai à faire, sans que l'utilisateur n'ait rien d'autre à faire que, au plus haut niveau spécifier quel flot de traitement il veut appliquer. Bon il reste 2-3 bricoles à régler, mais dans l'ensemble ça marche bien :))))
  13. Bô, c'est toujours ça de pris Bin disons que si l'eau tiède existe déjà (et en fait je pense, mais peut-être que je me trompe, qu'elle n'existe pas pour gérer les séquences), c'est un peu con de continuer à se doucher à l'eau froide, et c'est exactement ce qu'on est train de faire en diluant de l'information dans des répertoires, des noms de répertoires et des noms de fichiers.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.