/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I L T R A G E   " P A S S E - B A N D E "   O U   S E U I L L A G E   D ' U N   F I C H I E R   N U M E R I Q U E  :     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Note sur les listes de selection :                                                                                         */
/*                                                                                                                                   */
/*                    Il est possible grace a 'v $xrv/passe_ban.01$K'                                                                */
/*                  de generer des listes de selection destinees a                                                                   */
/*                  'v $xrv/selection.01$K' de la facon suivante :                                                                   */
/*                                                                                                                                   */
/*                                      $xrv/passe_ban.01$X                                                                       \  */
/*                                                ne=0                                                                            \  */
/*                                                fichier=...                                                                     \  */
/*                                                minimum=...                                                                     \  */
/*                                                maximum=...                                                                     \  */
/*                                                marquer_hors_bande=VRAI  valeur_inferieure=$NEXIST valeur_superieure=$NEXIST    \  */
/*                                                marquer_bande=VRAI       valeur_intermediaire=$EXIST                               */
/*                                                                                                                                   */
/*                  On obtient ainsi un fichier de selection dans                                                                    */
/*                  lequel '$NEXIST' correspond aux valeurs qui                                                                      */
/*                  sont hors bandes et '$EXIST' aux valeurs qui                                                                     */
/*                  sont a l'interieur de ces memes bandes.                                                                          */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/passe_ban.01$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1997??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R S   I M P L I C I T E S   D E S   P A R A M E T R E S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   LES_TESTS_SONT_STRICTS_A_GAUCHE                                                                                               \
                    FAUX
#define   LES_TESTS_SONT_STRICTS_A_DROITE                                                                                               \
                    FAUX
                                        /* Pour definir la nature des tests a effectuer (introduit le 20020708180841).               */

#define   MINIMUM_DU_FICHIER                                                                                                            \
                    F_MOINS_L_INFINI
#define   MAXIMUM_DU_FICHIER                                                                                                            \
                    F_INFINI
                                        /* Pour definir le filtre "passe-bande" qui passe tout implicitement...                      */

#define   EDITER_LES_VALEURS_HORS_BANDE                                                                                                 \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit ou pas editer les valeurs hors de la bande. Lorsqu'elles sont        */ \
                                        /* editees ('VRAI'), on leur substitue les valeurs suivantes :                               */
#define   VALEUR_INFERIEURE                                                                                                             \
                    F_MOINS_L_INFINI
#define   VALEUR_SUPERIEURE                                                                                                             \
                    F_INFINI
                                        /* Valeurs a substituer aux valeurs hors bandes lorsqu'elles sont editees...                 */

#define   MARQUER_LES_VALEURS_DE_LA_BANDE                                                                                               \
                    FAUX                                                                                                                \
                                        /* Indique si l'on doit ou pas marquer les valeurs de la bande. Lorsqu'elles sont marquees,  */ \
                                        /* ('VRAI'), on leur substitue la valeur suivante :                                          */
#define   VALEUR_INTERMEDIAIRE                                                                                                          \
                    FZERO                                                                                                               \
                                        /* Valeur a substituer aux valeurs de la bande lorsqu'elles sont marquees...                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   F I C H I E R  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrv/ARITHMET.1d.I"
                                        /* Passage a l'allocation dynamique le 20060214193105...                                     */
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   VALEUR_IMPLICITE                                                                                                              \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_des_valeurs,liste_des_valeurs);
                                        /* Definition en memoire du fichier.                                                         */

#define   ELEMENT_DU_FICHIER(index)                                                                                                     \
                    gELEMENT_DU_FICHIER(liste_des_valeurs,index)                                                                        \
                                        /* Acces a un element courant du fichier.                                                    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I L T R A G E   " P A S S E - B A N D E "   O U   S E U I L L A G E   D ' U N   F I C H I E R   N U M E R I Q U E  :     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     DEFV(Logical,INIT(les_tests_sont_stricts_a_gauche,LES_TESTS_SONT_STRICTS_A_GAUCHE));
     DEFV(Logical,INIT(les_tests_sont_stricts_a_droite,LES_TESTS_SONT_STRICTS_A_DROITE));
                                        /* Pour definir la nature des tests a effectuer (introduit le 20020708180841).               */

     DEFV(Float,INIT(minimum_du_fichier,MINIMUM_DU_FICHIER));
     DEFV(Float,INIT(maximum_du_fichier,MAXIMUM_DU_FICHIER));
                                        /* Pour definir le filtre "passe-bande".                                                     */
     DEFV(Logical,INIT(editer_les_valeurs_hors_bande,EDITER_LES_VALEURS_HORS_BANDE));
                                        /* Indique si l'on doit ou pas editer les valeurs hors de la bande. Lorsqu'elles sont        */
                                        /* editees ('VRAI'), on leur substitue les valeurs suivantes :                               */
     DEFV(Float,INIT(valeur_inferieure,VALEUR_INFERIEURE));
     DEFV(Float,INIT(valeur_superieure,VALEUR_SUPERIEURE));
                                        /* Valeurs a substituer aux valeurs hors bandes lorsqu'elles sont editees...                 */
     DEFV(Logical,INIT(marquer_les_valeurs_de_la_bande,MARQUER_LES_VALEURS_DE_LA_BANDE));
                                        /* Indique si l'on doit ou pas marquer les valeurs de la bande. Lorsqu'elles sont marquees,  */
                                        /* ('VRAI'), on leur substitue la valeur suivante :                                          */
     DEFV(Float,INIT(valeur_intermediaire,VALEUR_INTERMEDIAIRE));
                                        /* Valeur a substituer aux valeurs de la bande lorsqu'elles sont marquees...                 */
     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"
                                        /* Ceci fut introduit le 20070103174154...                                                   */

     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
                                                 Eblock
                                                 )
                                            );

                         PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;

                         PROKESF_ARGUMENT_FICHIER("fichier="
                                                 ,fichier_des_valeurs
                                                 ,liste_des_valeurs
                                                 ,VALEUR_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROCESS_ARGUMENT_F("seuil="
                                           ,minimum_du_fichier
                                           ,BLOC(VIDE;)
                                           ,BLOC(Bblock
                                                 EGAL(les_tests_sont_stricts_a_gauche,VRAI);
                                                 EGAL(les_tests_sont_stricts_a_droite,VRAI);
                                                 EGAL(editer_les_valeurs_hors_bande,VRAI);
                                                 EGAL(maximum_du_fichier,minimum_du_fichier);
                                                 Eblock
                                                 )
                                            );
                                        /* Introduit le 20100103101507 afin de faciliter une utilisation de type "seuillage". Il     */
                                        /* faudra alors donner aussi les arguments suivants :                                        */
                                        /*                                                                                           */
                                        /*                  tests_stricts_a_gauche=VRAI                                              */
                                        /*                  tests_stricts_a_droite=VRAI                                              */
                                        /*                  editer_hors_bande=VRAI                                                   */
                                        /*                  valeur_marquage_inferieure=...                                           */
                                        /*                  valeur_marquage_superieure=...                                           */
                                        /*                                                                                           */
                                        /* Ces valeurs garantissent alors un seuillage du type :                                     */
                                        /*                                                                                           */
                                        /*                  <= seuil          : valeur_marquage_inferieure                           */
                                        /*                  >  seuil          : valeur_marquage_superieure                           */
                                        /*                                                                                           */
                                        /* comme le fait 'v $xiii/di_image$FON Ibinarisation_generale'...                            */
                                        /*                                                                                           */
                                        /* Le 20100105102620 le 'GET_ARGUMENT_F(...)' fut remplace par 'PROCESS_ARGUMENTS2_F(...)'   */
                                        /* afin de forcer les options necessaires au bon fonctionnement du seuillage. On notera      */
                                        /* qu'a cette occasion, ce 'PROCESS_ARGUMENTS2_F(...)' a ete place devant tous les           */
                                        /* 'GET_ARGUMENT_?(...)' correspondant aux 'EGAL(...)'s ci-dessus de facon a pouvoir         */
                                        /* outrepasser ces initialisations a priori...                                               */
                                        /*                                                                                           */
                                        /* Jusqu'au 20150222125337 et au 20150222184825, il y avait ici :                            */
                                        /*                                                                                           */
                                        /*                  PROCESS_ARGUMENTS2_F("seuil="                                            */
                                        /*                                      ,minimum_du_fichier                                  */
                                        /*                                      ,maximum_du_fichier                                  */
                                        /*                                      ,BLOC(VIDE;)                                         */
                                        /*                                      ,BLOC(Bblock                                         */
                                        /*                                            EGAL(les_tests_sont_stricts_a_gauche,VRAI);    */
                                        /*                                            EGAL(les_tests_sont_stricts_a_droite,VRAI);    */
                                        /*                                            EGAL(editer_les_valeurs_hors_bande,VRAI);      */
                                        /*                                            Eblock                                         */
                                        /*                                            )                                              */
                                        /*                                       );                                                  */
                                        /*                                                                                           */
                                        /* mais la consequence de cela est que cela donnait SYSTEMATIQUEMENT a l'argument            */
                                        /* 'maximum_du_fichier' la valeur 'minimum_du_fichier'...                                    */

                         GET_ARGUMENT_L("tests_stricts_a_gauche=""strict_gauche=""gauche=""sg=",les_tests_sont_stricts_a_gauche);
                         GET_ARGUMENT_L("tests_stricts_a_droite=""strict_droite=""droite=""sd=",les_tests_sont_stricts_a_droite);
                                        /* Arguments completes le 20180522135121 par "sg=" et "sd="...                               */

                         GET_ARGUMENT_F("minimum=""m=",minimum_du_fichier);
                         GET_ARGUMENT_F("maximum=""M=",maximum_du_fichier);

                         GET_ARGUMENT_L("marquer_hors_bande=""editer_hors_bande=""hors_bande=""hb=",editer_les_valeurs_hors_bande);
                                        /* Arguments completes par "marquer_hors_bande=" 20120503120102958 et par "hb=" le           */
                                        /* 20180522135302...                                                                         */
                         GET_ARGUMENT_F("valeur_marquage_inferieure=""valeur_inferieure=""vi=",valeur_inferieure);
                         GET_ARGUMENT_F("valeur_marquage_superieure=""valeur_superieure=""vs=",valeur_superieure);
                                        /* Arguments completes le 20180522135302 par "vi=" et "vs="...                               */

                         GET_ARGUMENT_L("marquer_bande=""marquer=""mb=",marquer_les_valeurs_de_la_bande);
                                        /* Arguments completes par "marquer_bande=" le 20120503114958 et completes le 20180522135302 */
                                        /* par "mb="...                                                                              */
                         GET_ARGUMENT_F("valeur_intermediaire=""valeur_bande=""vb=",valeur_intermediaire);
                                        /* Arguments completes par "valeur_bande=" le 20120503114958 et par "vb=" le 20180522135302. */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
                                        /* Cette procedure fut introduite le 20070103174154...                                       */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                                        /* Cette procedure fut introduite le 20061226192646...                                       */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5;
                                        /* Cette procedure fut introduite le 20211005105807...                                       */
                         )
                    );

     gOPERATION_SUR_LES_FICHIERS(BLOC(
                                      DEFV(Float,INIT(valeur_courante,ELEMENT_DU_FICHIER(index)));
                                        /* Recuperation de la valeur courante dans le fichier.                                       */
                                      )
                                ,COND(INCLcc(valeur_courante
                                            ,minimum_du_fichier,maximum_du_fichier
                                            ,les_tests_sont_stricts_a_gauche,les_tests_sont_stricts_a_droite
                                             )
                                     ,COND(IL_NE_FAUT_PAS(marquer_les_valeurs_de_la_bande)
                                          ,valeur_courante
                                          ,valeur_intermediaire
                                           )
                                     ,COND(IFLc(valeur_courante,minimum_du_fichier,NOTL(les_tests_sont_stricts_a_gauche))
                                          ,valeur_inferieure
                                          ,COND(IFGc(valeur_courante,maximum_du_fichier,NOTL(les_tests_sont_stricts_a_droite))
                                               ,valeur_superieure
                                               ,FLOT__UNDEF
                                                )
                                           )
                                      )
                                ,IFOU(IL_FAUT(editer_les_valeurs_hors_bande)
                                     ,INCLcc(valeur_courante
                                            ,minimum_du_fichier,maximum_du_fichier
                                            ,les_tests_sont_stricts_a_gauche,les_tests_sont_stricts_a_droite
                                             )
                                      )
                                ,nombre_d_exemplaires_du_resultat_de_l_operation_sur_les_valeurs_courantes
                                 );
                                        /* Filtrage "passe-bande" du fichier...                                                      */

     lGENERATION_D_UN_FICHIER(liste_des_valeurs,VALEUR_IMPLICITE);

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.