/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T U D E   D E   L ' A C T I V I T E   N E U R O N A L E   S P O N T A N E E  :                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    ....+o*o+-::::---..:......................... .     .                                                          */
/*                   ....:-o*o+:::-:-::.......................... .. ..                                                              */
/*                   .. .:-o**+::.-:-:::........................... .... .                                                           */
/*                     ..:-+oo+:..::--::......................  .. ..                                                                */
/*                    ....-+oo-:..:::-::.......................... .. .  .   .                                                       */
/*                    . ..-oo+-:..::-:..:......................... .    .                                                            */
/*                    ....:+o+-...:::-::..................... .  .  ... . .                                                          */
/*                    ....-+o+-:..:::::::................... ... .     .  .                                                          */
/*                     ...-+++-:...-::..:....:............... ....                                                                   */
/*                    ....-++-::...::::................... .......  .    .    .                                                      */
/*                    ....:+++::..:..:.:.......................... ..  .       .                                                     */
/*                    ....--+-:...:::.......................... . .     ..  . .                                                      */
/*                     ...----:...:::::........................   .       .                                                          */
/*                    .....--:::....:.:.....................  ..  . .      .                                                         */
/*                   . ...:---:.......:..................... ... . .      .      .                                                   */
/*                     ....:--:................................ ...  ..    .                                                         */
/*                   . ....:-:............................ . . . .  .                                                                */
/*                     ....:::.......................... ...    .    .                                                               */
/*                    .....:::........................... . . ..         .                                                           */
/*                     ....:.:.......................... . . ......                                                                  */
/*                     ....:.:............................  .. ...  ..      .                                                        */
/*                    ......:............................... ....   .                                                                */
/*                   . ............................... ..   ..  ..                                                                   */
/*                     ................................... ... . .     ..                                                            */
/*                      .......................... . ..... .                                                                         */
/*                     ............................ .....  .  . . .                                                                  */
/*                      ......................... . .. .  ...         .                                                              */
/*                     ..................... ......... .                                                                             */
/*                       ........................ .....   .. . ..                                                                    */
/*                      ........ ........ ... .... . .     . ..                                                                      */
/*                      .. ..... ...... .... .. .                                                                                    */
/*                        ....   . .                                                                                                 */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/synapse.11$K' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
@define   PRAGMA_CPP_____MODULE_NON_DERIVABLE

@define   PRAGMA_CL_____MODULE_NON_OPTIMISABLE

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E   B A S E   E T   U N I V E R S E L L E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.11.I"
#include  xrv/particule.41.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   F O N C T I O N S   U T I L E S   ( C O M P A T I B I L I T E )  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/synapse.18.I"
#include  xrq/synapse.19.I"
                                        /* Inutile, mais pour la compatibilite...                                                    */
                                        /* Introduit le 20030130113158 a cause de 'v $xcc/cpp$Z INCLUDES_1.sed'.                     */

#include  xrk/attractor.12.I"

#define   NOMBRE_D_ITERATIONS                                                                                                           \
                    HUIT                                                                                                                \
                                        /* Ici, il definit le nombre d'elements que l'on sommera pour calculer la probabilite        */ \
                                        /* d'observer spontanement le signal 'x'...                                                  */
#include  xrs/surfaces.11.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   S Y N A P S E S  :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    L'influx nerveux est transmis le long                                                                          */
/*                  des axones par un potentiel d'action (lui                                                                        */
/*                  meme materialise par la concentration en ions                                                                    */
/*                  Na+ et K+). Il est transmis de neurone en                                                                        */
/*                  neurone a l'aide de neuro-mediateurs (tel                                                                        */
/*                  l'Acetycholine) qui sont stockes dans des                                                                        */
/*                  vesicules. Ces vesicules peuvent se fondre                                                                       */
/*                  avec la membrane cellulaire ("exocytose" ?)                                                                      */
/*                  et leur contenu se trouver libere dans le                                                                        */
/*                  vide synaptique...                                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition des probabilites :                                                                                              */
/*                                                                                                                                   */
/*                  1-probabilite d'exciter 'n' vesicules synaptiques :                                                              */
/*                                                                                                                                   */
/*                                                             n                                                                     */
/*                                              -lambda  lambda                                                                      */
/*                                      P(n) = e       .---------                                                                    */
/*                                                          n!                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  2-probabilite d'observer un signal 'x' si 'n' vesicules sont excitees :                                          */
/*                                                                                                                                   */
/*                                                                             2                                                     */
/*                                                                        (x-n)                                                      */
/*                                                                   - ------------                                                  */
/*                                                                               2                                                   */
/*                                                       1              2.n.sigma                                                    */
/*                                      P (x) = -------------------.e                                                                */
/*                                       n             \  ________                                                                   */
/*                                               sigma. \/ 2.pi.n                                                                    */
/*                                                                                                                                   */
/*                  (ou le facteur multiplicatif est la pour assurer que la                                                          */
/*                  probabilite 'P(x)' est bien dans [0,1], et s'obtient en                                                          */
/*                  integrant de 0 a l'infini...).                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  3-densite de probabilite d'observer spontanement un signal 'x' :                                                 */
/*                                                                                                                                   */
/*                                                                                                                  2                */
/*                                                              n=infini                                       (x-n)                 */
/*                                                             __________                                 - ------------             */
/*                                                             \                 n                                    2              */
/*                                                   1          \          lambda             1              2.n.sigma               */
/*                                      P(x) = ---------------. /         ---------. -------------------.e                           */
/*                                                lambda       /_________     n!            \  ________                              */
/*                                              (e       - 1)                         sigma. \/ 2.pi.n                               */
/*                                                                 n=1                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  ('infini' sera designe par la suite comme etant 'nombre_d_iterations')                                           */
/*                                                                                                                                   */
/*                  avec :                                                                                                           */
/*                                                                                                                                   */
/*                                    +infini                                                                                        */
/*                                                                                                                                   */
/*                                      /                                                                                            */
/*                                     ||                                                                                            */
/*                                     || P(x)dx = 1                                                                                 */
/*                                     ||                                                                                            */
/*                                     /                                                                                             */
/*                                                                                                                                   */
/*                                 -infini                                                                                           */
/*                                                                                                                                   */
/*                  d'ou le coefficient de normalisation puisque :                                                                   */
/*                                                                                                                                   */
/*                                        n=infini                                                                                   */
/*                                       __________                                                                                  */
/*                                       \                 n                                                                         */
/*                                        \          lambda      lambda                                                              */
/*                                        /         --------- = e                                                                    */
/*                                       /_________     n!                                                                           */
/*                                                                                                                                   */
/*                                           n=0                                                                                     */
/*                                                                                                                                   */
/*                                        n=infini                                                                                   */
/*                                       __________                                                                                  */
/*                                       \                 n                                                                         */
/*                                        \          lambda      lambda                                                              */
/*                                        /         --------- = e       - 1                                                          */
/*                                       /_________     n!                                                                           */
/*                                                                                                                                   */
/*                                           n=1                                                                                     */
/*                                                                                                                                   */
/*                  enfin, on rappelle que :                                                                                         */
/*                                                                                                                                   */
/*                                    +infini                                                                                        */
/*                                                                                                                                   */
/*                                      /                                                                                            */
/*                                     ||                                                                                            */
/*                                     ||    2                                                                                       */
/*                                     ||  -x      \  ____                                                                           */
/*                                     || e   dx =  \/ pi                                                                            */
/*                                     ||                                                                                            */
/*                                     /                                                                                             */
/*                                                                                                                                   */
/*                                 -infini                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Information visualisee :                                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      .                                                                                            */
/*                           nombre    /|\                                                                                           */
/*                        d'evenements  |                                                                                            */
/*                           generes    |                                                                                            */
/*                                      |   ....+o*o+-::::---..:......................... .     .   lambda=1.5                       */
/*                                      |  ....:-o*o+:::-:-::.......................... .. ..       sigma=0.25                       */
/*                                      |  .. .:-o**+::.-:-:::........................... .... .                                     */
/*                                      |    ..:-+oo+:..::--::......................  .. ..                                          */
/*                                      |   ....-+oo-:..:::-::.......................... .. .  .   .                                 */
/*                                      |   . ..-oo+-:..::-:..:......................... .    .                                      */
/*                                      |   ....:+o+-...:::-::..................... .  .  ... . .                                    */
/*                                      |   ....-+o+-:..:::::::................... ... .     .  .                                    */
/*                                      |    ...-+++-:...-::..:....:............... ....                                             */
/*                                      |   ....-++-::...::::................... .......  .    .    .                                */
/*                                      |   ....:+++::..:..:.:.......................... ..  .       .                               */
/*                                      |   ....--+-:...:::.......................... . .     ..  . .                                */
/*                                      |    ...----:...:::::........................   .       .                                    */
/*                                      |   .....--:::....:.:.....................  ..  . .      .                                   */
/*                                      |  . ...:---:.......:..................... ... . .      .      .                             */
/*                                      |    ....:--:................................ ...  ..    .                                   */
/*                                      |  . ....:-:............................ . . . .  .                                          */
/*                                      |    ....:::.......................... ...    .    .                                         */
/*                                      |   .....:::........................... . . ..         .                                     */
/*                                      |    ....:.:.......................... . . ......                                            */
/*                                      |    ....:.:............................  .. ...  ..      .                                  */
/*                                      |   ......:............................... ....   .                                          */
/*                                      |  . ............................... ..   ..  ..                                             */
/*                                      |    ................................... ... . .     ..                                      */
/*                                      |     .......................... . ..... .                                                   */
/*                                      |    ............................ .....  .  . . .                                            */
/*                                      |     ......................... . .. .  ...         .                                        */
/*                                      |    ..................... ......... .                                                       */
/*                                      |      ........................ .....   .. . ..                                              */
/*                                      |     ........ ........ ... .... . .     . ..                                                */
/*                                      |     .. ..... ...... .... .. .                                                              */
/*                                      |       ....   . .                                                                           */
/*                                      O---------------------------------------------------------------------->                     */
/*                                                                                                                                   */
/*                                                                                                    signal 'x' observe             */
/*                                                                                                                                   */
/*                    Le nombre d'evenements generes est donne                                                                       */
/*                  pour la totalite d'une ligne 'Y' donnee. Cela                                                                    */
/*                  explique la divisions qui sera faite plus tard                                                                   */
/*                  par 'dimX' afin de generer un certain nombre                                                                     */
/*                  d'evenements en chaque point {X,Y}...                                                                            */
/*                                                                                                                                   */
/*                    Le niveau de gris de chaque point visualise                                                                    */
/*                  donc le nombre de signaux 'x' observes (la valeur                                                                */
/*                  de 'x' etant une fonction de l'abscisse 'X' pour                                                                 */
/*                  un nombre donne d'evenements generes (et defini                                                                  */
/*                  comme une fonction de l'ordonnee 'Y').                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Examinons une coupe horizontale du champ                                                                       */
/*                  precedent obtenue par '$xci/coupe$X' pour une                                                                    */
/*                  ordonnee de 0.9 :                                                                                                */
/*                                                                                                                                   */
/*                                      .                                                                                            */
/*                           nombre    /|\                                                                                           */
/*                       de signaux 'x' |                                                                                            */
/*                          observes    |                                                                                            */
/*                                      |         .                                                                                  */
/*                                      |         .                   diminuer 'sigma' permet de reduire la largeur des pics,        */
/*                                      |        ...                  augmenter 'lambda' permet de remonter l'ensemble des pics.     */
/*                                      |        ...                                                                                 */
/*                                      |        ...                                                                                 */
/*                                      |        ...                                                                                 */
/*                                      |        ...                                                                                 */
/*                                      |        ...                                                                                 */
/*                                      |        ...                                                                                 */
/*                                      |       .....                                                                                */
/*                                      |       .....     .                                                                          */
/*                                      |       .....    ...                                                                         */
/*                                      |       .....    ...                                                                         */
/*                                      |       .....    ...                                                                         */
/*                                      |       .....   .... .                                                                       */
/*                                      |       ......  ......                                                                       */
/*                                      |       ......  ......                                                                       */
/*                                      |      ...............    .                                                                  */
/*                                      |      ................ ...                                                                  */
/*                                      |      .................... .                                                                */
/*                                      |      ...................... ..                                                             */
/*                                      |      ...........................                                                           */
/*                                      |     ............................  ..                                                       */
/*                                      |    ............................. ...                                                       */
/*                                      | ................................................................                           */
/*                                      O---------------------------------------------------------------------->                     */
/*                                                                                                                                   */
/*                                                                                                    signal 'x' observe             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INDICE_N1                                                                                                                     \
                    UN                                                                                                                  \
                                        /* Premier indice d'une sommation...                                                         */

dfTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,fichier_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE,NOMBRE_D_ITERATIONS)
                                        /* Definition du fichier des nombres d'iterations.                                           */
#define   sNOMBRE_D_ITERATIONS(numero_de_la_periode)                                                                                    \
                    INTE(sTRANSFORMAT_31(numero_de_la_periode,liste_NOMBRE_D_ITERATIONS))                                               \
                                        /* Formule generale definissant les variations du nombre d'iterations.                       */

#define   LAMBDA                                                                                                                        \
                    GRO3(FRA2(FU))
#define   SIGMA                                                                                                                         \
                    GRO1(FRA8(FU))
DEFV(Local,DEFV(Float,INIT(lambda,LAMBDA)));
DEFV(Local,DEFV(Float,INIT(sigma,SIGMA)));
                                        /* Definition de la valeur des parametres 'lambda' et 'sigma'.                               */

#define   PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE                                                                                           \
                    FAUX
DEFV(Local,DEFV(Logical,INIT(prendre_une_dynamique_logarithmique,PRENDRE_UNE_DYNAMIQUE_LOGARITHMIQUE)));
                                        /* Faut-il prendre une dynamique logarithmique ('VRAI') ou laisser la comptabilisation des   */
                                        /* collisions telle qu'elle a ete calculee ('FAUX') ?                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N S   D E   V I S U A L I S A T I O N   E T   D ' I N T E R P O L A T I O N  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
dfTRANSFORMAT_31(liste_LAMBDA,fichier_LAMBDA,LAMBDA_IMPLICITE,LAMBDA)
dfTRANSFORMAT_31(liste_SIGMA,fichier_SIGMA,SIGMA_IMPLICITE,SIGMA)
                                        /* Definition des fichiers des parametres 'lambda' et 'sigma'.                               */

#define   sLAMBDA(numero_de_la_periode)                                                                                                 \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_LAMBDA))
#define   sSIGMA(numero_de_la_periode)                                                                                                  \
                    FLOT(sTRANSFORMAT_31(numero_de_la_periode,liste_SIGMA))
                                        /* Formule generale definissant les variations des parametres 'lambda' et 'sigma'.           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C A L C U L   D E   L A   D E N S I T E   D E   P R O B A B I L I T E  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CALCUL_DE_LA_DENSITE_DE_PROBABILITE(sequence)                                                                                 \
                    Bblock                                                                                                              \
                    begin_ligne                                                                                                         \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(signal_a_observer                                                                              \
                                        ,HOMO(X                                                                                         \
                                             ,Xmin,Xmax                                                                                 \
                                             ,signal_minimal_a_observer,signal_maximal_a_observer                                       \
                                              )                                                                                         \
                                         )                                                                                              \
                              );                                                                                                        \
                                        /* Valeur du signal 'x' a observer (associe a la coordonnee 'X').                            */ \
                         DEFV(Float,INIT(densite_de_probabilite_en_X,FZERO));                                                           \
                                        /* Pour decreter que l'evenement ("signal 'x'" detecte) a ete rencontre. Cette valeur est    */ \
                                        /* est en fait un cumul initialise a 0...                                                    */ \
                         DEFV(Int,INIT(indice_n,UNDEF));                                                                                \
                                        /* Indice 'n' de calcul de la probabilite...                                                 */ \
                                                                                                                                        \
                         DoIn(indice_n,INDICE_N1,nombre_d_iterations,I)                                                                 \
                              Bblock                                                                                                    \
                              INCR(densite_de_probabilite_en_X                                                                          \
                                  ,MUL3(DIVI(MONX(lambda,indice_n)                                                                      \
                                            ,FACT(indice_n)                                                                             \
                                             )                                                                                          \
                                       ,INVE(MUL2(sigma,RACX(MUL2(CERCLE_TRIGONOMETRIQUE,FLOT(indice_n)))))                             \
                                       ,EXEX(NEGA(DIVI(EXP2(SOUS(signal_a_observer,FLOT(indice_n)))                                     \
                                                      ,MUL3(FDEUX,FLOT(indice_n),EXP2(sigma))                                           \
                                                       )                                                                                \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                   );                                                                                                   \
                                        /* Calcul incremental de la densite de probabilite d'observer spontanement                   */ \
                                        /* 'signal_a_observer'. On notera l'utilisation de la fonction 'EXEX(...)', et ceci a cause  */ \
                                        /* d'eventuels bugs du type 'BUG_SYSTEME_SGIND424_IRIX_CC_pow' (anomalie definie lorsque le  */ \
                                        /* fichier '$xil/defi_K2$vv$DEF' est utilise) ou 'BUG_SYSTEME_SG_C_pow' (anomalie definie    */ \
                                        /* lorsque le fichier '$xil/defi_K2$vv$DEF' est utilise) rapidement ici ; par exemple :      */ \
                                        /*                                                                                           */ \
                                        /*                  x       = 4.7749510763209386                                             */ \
                                        /*                  sigma   = 0.1                                                            */ \
                                        /*                  n       = 1                                                              */ \
                                        /*                                                                                           */ \
                                        /* donne pour l'exposant de l'exponentielle la valeur -712.513...                            */ \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                                                                                                                                        \
                         EGAL(densite_de_probabilite_en_X                                                                               \
                             ,MUL2(INVZ(SOUS(EXEX(lambda),FU))                                                                          \
                                  ,densite_de_probabilite_en_X                                                                          \
                                   )                                                                                                    \
                              );                                                                                                        \
                                        /* Calcul de la densite de probabilite d'observer spontanement le signal                     */ \
                                        /* 'signal_a_observer' :                                                                     */ \
                                        /*                                                                                           */ \
                                        /*                                                                                    2      */ \
                                        /*                                n=infini                                       (x-n)       */ \
                                        /*                               __________                                 - ------------   */ \
                                        /*                               \                 n                                    2    */ \
                                        /*                     1          \          lambda             1              2.n.sigma     */ \
                                        /*        P(x) = ---------------. /         ---------. -------------------.e                 */ \
                                        /*                  lambda       /_________     n!            \  ________                    */ \
                                        /*                (e       - 1)                         sigma. \/ 2.pi.n                     */ \
                                        /*                                   n=1                                                     */ \
                                        /*                                                                                           */ \
                         BLOC(sequence);                                                                                                \
                                        /* Calcul des extrema de la densite de probabilite ou memorisation de la densite de          */ \
                                        /* probabilite au point 'X'.                                                                 */ \
                         Eblock                                                                                                         \
                    end_ligne                                                                                                           \
                    Eblock                                                                                                              \
                                        /* Procedure d'etude de la densite de probabilite...                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   E V E N E M E N T S   A   G E N E R E R   E T   A   A T T E N D R E  :                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrq/nucleon.LC.I"

#define   NOMBRE_MINIMAL_D_EVENEMENTS                                                                                                   \
                    GRO1(k___dimX)
#define   NOMBRE_MAXIMAL_D_EVENEMENTS                                                                                                   \
                    GRO1(k___dimXY)
DEFV(Local,DEFV(Int,INIT(nombre_minimal_d_evenements,NOMBRE_MINIMAL_D_EVENEMENTS)));
DEFV(Local,DEFV(Int,INIT(nombre_maximal_d_evenements,NOMBRE_MAXIMAL_D_EVENEMENTS)));
                                        /* Definition du nombre d'evenements a simuler. ATTENTION, dans le cas ou :                  */
                                        /*                                                                                           */
                                        /*                  IL_NE_FAUT_PAS(des_tirages_aleatoires_coherents)                         */
                                        /*                                                                                           */
                                        /* il vaut mieux prendre pour 'nombre_maximal_d_evenements' une valeur de l'ordre de :       */
                                        /*                                                                                           */
                                        /*                  FRA4(k___dimXY)                                                          */
                                        /*                                                                                           */
                                        /* ou inferieure...                                                                          */

#define   SIGNAL_MINIMAL_A_OBSERVER                                                                                                     \
                    FZERO
#define   SIGNAL_MAXIMAL_A_OBSERVER                                                                                                     \
                    GRO8(FU)
DEFV(Local,DEFV(Float,INIT(signal_minimal_a_observer,SIGNAL_MINIMAL_A_OBSERVER)));
DEFV(Local,DEFV(Float,INIT(signal_maximal_a_observer,SIGNAL_MAXIMAL_A_OBSERVER)));
                                        /* Definition du signal a observer...                                                        */

#define   DES_TIRAGES_ALEATOIRES_COHERENTS                                                                                              \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(des_tirages_aleatoires_coherents,DES_TIRAGES_ALEATOIRES_COHERENTS)));
                                        /* Cet indicateur precise s'il doit y avoir coherence de la generation aleatoire d'une       */
                                        /* ligne a l'autre ('VRAI') ou independance ('FAUX').                                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P O U R   D E S   R A I S O N S   D E   C O M P A T I B I L I T E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/integr.1B.vv.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   I N I T I A L I S A T I O N S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xrk/attractor.18.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E T U D E   D E   L ' A C T I V I T E   N E U R O N A L E   S P O N T A N E E  :                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom de la sequence d'images a generer.                                                    */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */
     /*..............................................................................................................................*/
     INITIALISATIONS_GENERALES;
                                        /* Initialisations generales faites au tout debut...                                         */

     iTRANSFORMAT_31(liste_LAMBDA,LAMBDA_IMPLICITE);
     iTRANSFORMAT_31(liste_SIGMA,SIGMA_IMPLICITE);
                                        /* Initialisation des parametres 'lambda' et 'sigma'.                                        */

     iTRANSFORMAT_31(liste_NOMBRE_D_ITERATIONS,NOMBRE_D_ITERATIONS_IMPLICITE);
                                        /* Initialisation du nombre d'iterations.                                                    */

#include  xrv/champs_5.1A.I"

     GET_ARGUMENTSv(nombre_d_arguments
                   ,BLOC(PROCESS_ARGUMENTS_GEOMETRIQUES;

                         PROCESS_ARGUMENT_FICHIER("LAMBDA="
                                                 ,fichier_LAMBDA
                                                 ,liste_LAMBDA
                                                 ,LAMBDA_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );
                         PROCESS_ARGUMENT_FICHIER("SIGMA="
                                                 ,fichier_SIGMA
                                                 ,liste_SIGMA
                                                 ,SIGMA_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENT_FICHIER("NOMBRE_D_ITERATIONS="
                                                 ,fichier_NOMBRE_D_ITERATIONS
                                                 ,liste_NOMBRE_D_ITERATIONS
                                                 ,NOMBRE_D_ITERATIONS_IMPLICITE
                                                 ,gTRANSFORMAT_31
                                                  );

                         PROCESS_ARGUMENTS_DE_VISUALISATION;

                         GET_ARGUMENT_I("n=""iterations=",nombre_d_iterations);

                         GET_ARGUMENT_I("graine=",graine_du_generateur_d_evenements);
                         GET_ARGUMENT_L("affiner_rdn=",rdnIFnD_____affiner_la_generation);
                         GET_ARGUMENT_L("iterer_rdn=",rdnIFnD_____iterer_la_generation);
                         GET_ARGUMENT_L("coherents=""coherence=",des_tirages_aleatoires_coherents);

                         GET_ARGUMENT_I("Nmin=",nombre_minimal_d_evenements);
                         GET_ARGUMENT_I("Nmax=",nombre_maximal_d_evenements);
                         GET_ARGUMENT_F("Smin=",signal_minimal_a_observer);
                         GET_ARGUMENT_F("Smax=",signal_maximal_a_observer);

                         GET_ARGUMENT_L("logarithmique=""log=",prendre_une_dynamique_logarithmique);
                         )
                    );

#include  xrq/synapse.11.I"

     begin_nouveau_block
          Bblock
          DEFV(genere_Float,INIT(minimum_de_la_densite_de_probabilite,F_INFINI));
          DEFV(genere_Float,INIT(maximum_de_la_densite_de_probabilite,F_MOINS_L_INFINI));
                                        /* Afin de rechercher les extrema de la densite de probabilite 'P(x)'. On notera qu'il       */
                                        /* est essentiel que ces extrema soient calcules par rapport a l'ensemble des parametres     */
                                        /* variables ('sLAMBDA', 'sSIGMA' et 'sNOMBRE_D_ITERATIONS').                                */

          DONNEES_DE_RECHERCHE_DES_EXTREMA_GLOBAUX_D_UNE_SEQUENCE_D_IMAGES;
                                        /* Extrema globaux de l'ensemble de la sequence...                                           */

          BDEFV(imageF,comptage_des_signaux);
                                        /* Image flottante dans laquelle on trouve le nombre de signaux 'x' observes...              */

          CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat.                                                       */

          Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
               Bblock
               EGAL(lambda,sLAMBDA(numero_de_la_periode_courante));
               EGAL(sigma,sSIGMA(numero_de_la_periode_courante));
                                        /* Calcul de la valeur des parametres 'lambda' et 'sigma'.                                   */

               vTRANSFORMAT_31(nombre_d_iterations
                              ,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS
                               );
                                        /* Calcul du nombre d'iterations lorsqu'il est variable.                                     */

               CALCUL_DE_LA_DENSITE_DE_PROBABILITE(BLOC(Bblock
                                                        EGAL(minimum_de_la_densite_de_probabilite
                                                            ,MIN2(densite_de_probabilite_en_X
                                                                 ,minimum_de_la_densite_de_probabilite
                                                                  )
                                                             );
                                                        EGAL(maximum_de_la_densite_de_probabilite
                                                            ,MAX2(densite_de_probabilite_en_X
                                                                 ,maximum_de_la_densite_de_probabilite
                                                                  )
                                                             );
                                                        Eblock
                                                        )
                                                   );
                                        /* Calcul des extrema de la densite de probabilite par rapport a l'ensemble des parametres   */
                                        /* variables ('sLAMBDA', 'sSIGMA' et 'sNOMBRE_D_ITERATIONS').                                */

               INCR(numero_de_la_periode_courante,I);
                                        /* Et passage a l'image suivante...                                                          */
               Eblock
          EKom

          EGAL(numero_de_la_periode_courante,NUMERO_DE_LA_PREMIERE_PERIODE_DE_LA_SIMULATION);
                                        /* Reinitialisation...                                                                       */

          Komp(numero_de_la_periode_courante_de_la_simulation,nombre_de_periodes_de_la_simulation)
               Bblock
               BDEFV(ligneF,densite_de_probabilite);
                                        /* Calcul de la densite de probabilite 'P(x)' en chaque point 'X'.                           */

               DONNEES_DE_RECHERCHE_DES_EXTREMA_LOCAUX_D_UNE_SEQUENCE_D_IMAGES;
                                        /* Extrema locaux de la sequence...                                                          */

               FORCAGE_DE_LA_REINITIALISATION_DU_GENERATEUR_D_EVENEMENTS;
                                        /* Afin de forcer la (re-)initialisation du generateur d'evenements afin de garantir la      */
                                        /* "continuite" entre les differentes images...                                              */

               EGAL(lambda,sLAMBDA(numero_de_la_periode_courante));
               EGAL(sigma,sSIGMA(numero_de_la_periode_courante));
                                        /* Calcul de la valeur des parametres 'lambda' et 'sigma'.                                   */

               vTRANSFORMAT_31(nombre_d_iterations
                              ,sNOMBRE_D_ITERATIONS,numero_de_la_periode_courante,fichier_NOMBRE_D_ITERATIONS
                               );
                                        /* Calcul du nombre d'iterations lorsqu'il est variable.                                     */

               CALCUL_DE_LA_DENSITE_DE_PROBABILITE(BLOC(Bblock
                                                        Test(IFEXff(densite_de_probabilite_en_X
                                                                   ,minimum_de_la_densite_de_probabilite
                                                                   ,maximum_de_la_densite_de_probabilite
                                                                    )
                                                             )
                                                             Bblock
                                                             PRINT_ATTENTION("la densite de probabilite 'P(x)' deborde");
                                                             CAL1(Prer2("P(%d)=%g\n",X,densite_de_probabilite_en_X));
                                                             CAL1(Prer1("minimum global=%g\n"
                                                                       ,minimum_de_la_densite_de_probabilite
                                                                        )
                                                                  );
                                                             CAL1(Prer1("maximum global=%g\n"
                                                                       ,maximum_de_la_densite_de_probabilite
                                                                        )
                                                                  );
                                                             CAL1(Prer3("lambda=%g   sigma=%g   infini=%d\n"
                                                                       ,lambda,sigma,nombre_d_iterations
                                                                        )
                                                                  );
                                                             Eblock
                                                        ATes
                                                             Bblock
                                                             Eblock
                                                        ETes

                                                        EGAL(LIGNE(densite_de_probabilite,X,Ymin)
                                                            ,HOMO(densite_de_probabilite_en_X
                                                                 ,minimum_de_la_densite_de_probabilite
                                                                 ,maximum_de_la_densite_de_probabilite
                                                                 ,EVENEMENT_IMPOSSIBLE
                                                                 ,EVENEMENT_CERTAIN
                                                                  )
                                                             );
                                                        Eblock
                                                        )
                                                   );
                                        /* Calcul de la densite de probabilite renormalisee.                                         */

               begin_colonne
                    Bblock
                    DEFV(Int,INIT(nombre_d_evenements_de_la_ligne_precedente
                                 ,COND(IFOU(IFEQ(Y,Ymin),IL_NE_FAUT_PAS(des_tirages_aleatoires_coherents))
                                      ,ZERO
                                      ,INTE(DIVI(HOMO(PREY(Y)
                                                     ,Ymin,Ymax
                                                     ,nombre_minimal_d_evenements,nombre_maximal_d_evenements
                                                      )
                                                ,dimX
                                                 )
                                            )
                                       )
                                  )
                         );
                                        /* Nombre d'evenements generes sur la ligne precedente (ou 0 lorsque l'on est sur la         */
                                        /* premiere ligne 'Ymin').                                                                   */
                                        /* On notera que le nombre d'evenements a generer s'applique a une ligne 'Y' entiere, ce     */
                                        /* qui explique que l'on divise par 'dimX' afin de connaitre le nombre d'evenements a        */
                                        /* generer pour chaque point {X,Y}.                                                          */
                    DEFV(Int,INIT(nombre_d_evenements
                                 ,INTE(DIVI(HOMO(Y
                                                ,Ymin,Ymax
                                                ,nombre_minimal_d_evenements,nombre_maximal_d_evenements
                                                 )
                                           ,dimX
                                            )
                                       )
                                  )
                         );
                                        /* Nombre d'evenements a generer pour chaque valeur du signal 'x' a observer (associe a la   */
                                        /* coordonnee 'Y') sur la ligne courante...                                                  */
                                        /* On notera que le nombre d'evenements a generer s'applique a une ligne 'Y' entiere, ce     */
                                        /* qui explique que l'on divise par 'dimX' afin de connaitre le nombre d'evenements a        */
                                        /* generer pour chaque point {X,Y}.                                                          */

                    begin_ligne
                         Bblock
                         DEFV(Float,INIT(probabilite,LIGNE(densite_de_probabilite,X,Ymin)));
                                        /* Pour decreter que l'evenement ("signal 'x'" detecte) a ete rencontre.                     */

                         Test(IFEXff(probabilite,EVENEMENT_IMPOSSIBLE,EVENEMENT_CERTAIN))
                              Bblock
                              PRINT_ATTENTION("la probabilite 'P(x)' est hors de [0,1]");
                              CAL1(Prer2("P(%d)=%g\n",X,probabilite));
                              CAL1(Prer3("lambda=%g   sigma=%g   infini=%d\n",lambda,sigma,nombre_d_iterations));
                              Eblock
                         ATes
                              Bblock
                              Eblock
                         ETes

                         storeF_point(COND(IFOU(IFEQ(Y,Ymin),IL_NE_FAUT_PAS(des_tirages_aleatoires_coherents))
                                          ,FZERO
                                          ,loadF_point(comptage_des_signaux,X,PREY(Y))
                                           )
                                     ,comptage_des_signaux
                                     ,X,Y
                                      );
                                        /* Pour la premiere ligne ('Ymin'), on initialise a zero le comptage des evenements, alors   */
                                        /* pour les lignes suivant la premiere ligne ('Ymin'), on recupere les evenements de la      */
                                        /* ligne precedente, ce qui permet de rendre lineaire le temps de calcul par rapport au      */
                                        /* nombre d'evenements demandes, mais surtout de faire que l'ensemble des lignes corresponde */
                                        /* a une evolution temporelle coherente...                                                   */

                         Repe(SOUS(nombre_d_evenements,nombre_d_evenements_de_la_ligne_precedente))
                              Bblock
                              DEFV(Float,INIT(valeur_aleatoire,FLOT__UNDEF));
                                        /* Pour generer une valeur aleatoire.                                                        */
                              GENERATION_D_UNE_PROBABILITE_01(valeur_aleatoire);
                                        /* Generation d'une valeur aleatoire.                                                        */

                              Test(IFLE(valeur_aleatoire,probabilite))
                                   Bblock
                                   storeF_point(ADD2(loadF_point(comptage_des_signaux,X,Y),FU)
                                               ,comptage_des_signaux
                                               ,X,Y
                                                );
                                        /* Comptage de l'evenement courant.                                                          */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ERep
                         Eblock
                    end_ligne
                    Eblock
               end_colonne

               Test(IL_FAUT(prendre_une_dynamique_logarithmique))
                    Bblock
                    CALS(IFdynamique_logarithmique_sans_translation_dynamique(comptage_des_signaux
                                                                             ,comptage_des_signaux
                                                                             ,FZERO
                                                                              )
                         );
                                        /* S'il le faut, la dynamique de la matrice de comptage des evenements est reduite par       */
                                        /* application d'une fonction logarithme ce qui permet de la "lisser"...                     */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               RECHERCHE_DES_EXTREMA_D_UNE_SEQUENCE_D_IMAGES(comptage_des_signaux);
                                        /* Recherche des extrema locaux et globaux de l'ensemble de la sequence...                   */

               EGAL(nom_image
                   ,chain_Aconcaten2_sauf_nom_pipe(nom_imageR
                                                  ,ChaineNumero(numero_de_la_periode_courante
                                                               ,NOMBRE_DE_CHIFFRES
                                                                )
                                                   )
                    );
                                        /* Le 20080602135413 fut introduit 'ChaineNumero(...)' afin de pouvoir parametrer            */
                                        /* aisement le nombre de chiffres des numeros...                                             */
               CALi(IupdateF_image(nom_image,comptage_des_signaux));
                                        /* Sauvegarde du champ sans renormalisation...                                               */
               CALZ_FreCC(nom_image);

               INCR(numero_de_la_periode_courante,I);
                                        /* Et passage a l'image suivante...                                                          */

               EDEFV(ligneF,densite_de_probabilite);
                                        /* Calcul de la densite de probabilite 'P(x)' en chaque point 'X'.                           */
               Eblock
          EKom

          RENORMALISATION_GLOBALE_D_UNE_SEQUENCE_D_IMAGES(comptage_des_signaux);
                                        /* Renormalisation globale de la sequence d'images...                                        */

          EDEFV(imageF,comptage_des_signaux);
                                        /* Image flottante dans laquelle on trouve le nombre de signaux 'x' observes...              */
          Eblock
     end_nouveau_block

     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.