/*************************************************************************************************************************************/ /* */ /* 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