/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   F A M I L L E S   D E   P A R T I C U L E S  :                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/nucleon.L8$I' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 1991??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E S T I O N   D E S   E N S E M B L E S   D E   P A R T I C U L E S  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Nota : suivant que l'on est 'FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_01' ou    */
                                        /* 'FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_02' 'nombre_instantane_de_particules' */
                                        /* est defini soit explicitement soit implicitement dans 'CREATION_D_UNE_LISTE(...)'...      */

DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_quarks_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_d_anti_quarks_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_quarks_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_d_anti_quarks_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_gluons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_gluons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_d_electrons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_d_anti_electrons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_d_electrons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_d_anti_electrons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_neutrinos_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_neutrinos_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_photons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_photons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_z0s_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_z0s_VIRTUELs,ZERO)));
                                        /* Compteurs instantes des particules par categorie (on notera la presence des anti-quarks   */
                                        /* REELs et des gluons REELs uniquement par symetrie...). Ils sont donc incrementes et       */
                                        /* decrementes au cours du temps...                                                          */

DEFV(Local,DEFV(Positive,INIT(nombre_total_de_quarks_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_d_anti_quarks_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_quarks_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_d_anti_quarks_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_gluons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_gluons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_d_electrons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_d_anti_electrons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_d_electrons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_d_anti_electrons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_neutrinos_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_neutrinos_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_photons_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_photons_VIRTUELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_z0s_REELs,ZERO)));
DEFV(Local,DEFV(Positive,INIT(nombre_total_de_z0s_VIRTUELs,ZERO)));
                                        /* Compteurs total des particules par categorie (on notera la presence des anti-quarks       */
                                        /* REELs et des gluons REELs uniquement par symetrie...). Ils ne sont donc qu'incrementes    */
                                        /* et jamais decrementes au cours du temps...                                                */

DEFV(Local,DEFV(Positive,INIT(nombre_total_de_particules,ZERO)));
                                        /* Compteur global des particules (de toute nature...) qui ne fait donc l'objet que          */
                                        /* d'incrementations...                                                                      */

#ifdef    FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_01
#    define    PREMIERE_PARTICULE                                                                                                       \
                         UN                                                                                                             \
                                        /* Numero de la premiere particule de la liste...                                            */
#    define    NOMBRE_MAXIMAL_DE_QUARKS_ET_D_ANTI_QUARKS_DANS_LE_PROTON                                                                 \
                         GRO1(FRA1(NOMBRE_MAXIMAL_DE_GLUONS_DANS_LE_PROTON))                                                            \
                                        /* Nombre maximal de quarks (REELs ou VIRTUELs) presents dans le proton a un instant donne.  */
#    define    NOMBRE_MAXIMAL_DE_GLUONS_DANS_LE_PROTON                                                                                  \
                         DIX_MILLE                                                                                                      \
                                        /* Nombre maximal de gluons (REELs ou VIRTUELs) presents dans le proton a un instant donne.  */
#    define    NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON                                                                              \
                         ADD2(NOMBRE_MAXIMAL_DE_QUARKS_ET_D_ANTI_QUARKS_DANS_LE_PROTON,NOMBRE_MAXIMAL_DE_GLUONS_DANS_LE_PROTON)         \
                                        /* Nombre maximal de particules (quarks et gluons, REELs, VIRTUELs ou"INEXISTANTs")          */ \
                                        /* presentes dans le proton.                                                                 */
#    define    ACCES_PARTICULE(particule_courante)                                                                                      \
                         COND(IFINff(particule_courante                                                                                 \
                                    ,PREMIERE_PARTICULE                                                                                 \
                                    ,LSTX(PREMIERE_PARTICULE,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON)                               \
                                     )                                                                                                  \
                             ,ADRESSE(ITb1(liste_des_particules,INDX(particule_courante,PREMIERE_PARTICULE)))                           \
                             ,ADRESSE(debordement_de_la_liste_des_particules)                                                           \
                              )                                                                                                         \
                                        /* Acces a une particule de numero donne dans la liste avec validation. On notera que l'on   */ \
                                        /* ecrit 'COND(ADRESSE(...))' et non pas 'ADRESSE(COND(...))' parce que certains             */ \
                                        /* compilateurs l'interdisent...                                                             */
DEFV(Local,DEFV(particule,DTb1(liste_des_particules,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON)));
                                        /* "Liste" des particules (quarks et gluons, REELs, VIRTUELs ou "INEXISTANTs") presentes     */
                                        /* dans le proton.                                                                           */
DEFV(Local,DEFV(particule,debordement_de_la_liste_des_particules));
                                        /* Au cas ou la liste precedente serait saturee...                                           */
DEFV(Local,DEFV(Positive,INIT(nombre_instantane_de_particules,ZERO)));
                                        /* Compteur instantane des particules (de toute nature...) qui fait donc l'objet             */
                                        /* d'incrementations et de decrementations...                                                */
#    define    ENSEMBLE_DES_PARTICULES(sequence)                                                                                        \
                         Bblock                                                                                                         \
                         DEFV(Positive,INIT(particule_courante,UNDEF));                                                                 \
                                        /* Numero de la particule courante dans la liste...                                          */ \
                         DoIn(particule_courante                                                                                        \
                             ,PREMIERE_PARTICULE                                                                                        \
                             ,LSTX(PREMIERE_PARTICULE,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON)                                      \
                             ,I                                                                                                         \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              BLOC(sequence);                                                                                           \
                                        /* Execution de la sequence argument sur chaque position a priori, quel que soit son         */ \
                                        /* etat (INEXISTANT, REEL ou VIRTUEL).                                                       */ \
                              Eblock                                                                                                    \
                         EDoI                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Repetition d'une certaine sequence sur un ensemble de particules, quel que soit leur      */ \
                                        /* etat (INEXISTANT, REEL ou VIRTUEL).                                                       */
#    define    CREATION_D_UNE_PARTICULE(particule_creee)                                                                                \
                         Bblock                                                                                                         \
                         DEFV(Positive,INIT(particule_courante,PREMIERE_PARTICULE));                                                    \
                                        /* Numero de la particule courante dans la liste...                                          */ \
                         Tant(IFET(IFNE(NATURE(PARTICULE_COURANTE),PARTICULE_INEXISTANTE)                                               \
                                  ,IFLT(particule_courante                                                                              \
                                       ,LSTX(PREMIERE_PARTICULE,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON)                            \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                                        /* ATTENTION : on utilise 'IFLT(particule_courante,...)' afin que                            */ \
                                        /* 'ACCES_PARTICULE(particule_courante)' ne provoque pas un debordement de la                */ \
                                        /* liste lorsque 'particule_courante' atteint sa valeur maximale qui est                     */ \
                                        /* 'LSTX(PREMIERE_PARTICULE,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON)'...                 */ \
                              INCR(particule_courante,I);                                                                               \
                                        /* Passage a l'element suivant de la liste...                                                */ \
                              Eblock                                                                                                    \
                         ETan                                                                                                           \
                         Test(IFLT(particule_courante                                                                                   \
                                  ,LSTX(PREMIERE_PARTICULE,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON)                                 \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              EGAL(particule_creee,PARTICULE_COURANTE);                                                                 \
                                        /* Envoi de la premiere particule INEXISTANTe trouvee,                                       */ \
                              NATURE_D_UNE_PARTICULE(particule_creee,PARTICULE_NAISSANTE);                                              \
                                        /* Et on indique ainsi que cette particule a ete allouee...                                  */ \
                              INCR(nombre_instantane_de_particules,I);                                                                  \
                              INCR(nombre_total_de_particules,I);                                                                       \
                                        /* Et comptage instantane et global des particules en presence...                            */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la liste des particules est saturee");                                                      \
                              CAL1(Prer1("(%d particules)\n",nombre_instantane_de_particules));                                         \
                              EGAL(particule_creee,ADRESSE(debordement_de_la_liste_des_particules));                                    \
                                        /* Ou du "debordement" si la liste des particules est saturee...                             */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Creation d'une particule (REELle ou VIRTUELle) a partir d'une particule INEXISTANTe.      */
#    define    DESTRUCTION_D_UNE_PARTICULE(particule_a_detruire)                                                                        \
                         Bblock                                                                                                         \
                         Test(IFNE(particule_a_detruire,ADRESSE(debordement_de_la_liste_des_particules)))                               \
                              Bblock                                                                                                    \
                              Test(IFINff(particule_a_detruire                                                                          \
                                         ,ACCES_PARTICULE(PREMIERE_PARTICULE)                                                           \
                                         ,ACCES_PARTICULE(LSTX(PREMIERE_PARTICULE,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON))         \
                                          )                                                                                             \
                                   )                                                                                                    \
                                   Bblock                                                                                               \
                                   Test(IFNE(NATURE(particule_a_detruire),PARTICULE_INEXISTANTE))                                       \
                                        Bblock                                                                                          \
                                        DECR(nombre_instantane_de_particules,I);                                                        \
                                        /* Decomptage global des particules en presence...                                           */ \
                                        NATURE_D_UNE_PARTICULE(particule_a_detruire,PARTICULE_INEXISTANTE);                             \
                                        /* Et on libere tout betement la particule...                                                */ \
                                        Eblock                                                                                          \
                                   ATes                                                                                                 \
                                        Bblock                                                                                          \
                                        PRINT_ERREUR("la particule a detruire est INEXISTANT");                                         \
                                        Eblock                                                                                          \
                                   ETes                                                                                                 \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la particule a detruire est bizarre");                                                 \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                                        /* La zone de debordement ne peut etre detruite...                                           */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                                        /* Destruction d'une particule...                                                            */
#    define    INITIALISATION_DE_L_ENSEMBLE_DES_PARTICULES                                                                              \
                         Bblock                                                                                                         \
                         ENSEMBLE_DES_PARTICULES(BLOC(INITIALISATION_D_UNE_PARTICULE_INEXISTANTE(PARTICULE_COURANTE);                   \
                                                      )                                                                                 \
                                                 );                                                                                     \
                                        /* Initialisation a priori de la particule courante...                                       */ \
                         Eblock                                                                                                         \
                                        /* Initialisation de la liste des particules presentes dans le proton (INEXISTANTs).         */
#Aifdef   FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_01
#Eifdef   FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_01

#ifdef    FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_02
#    define    NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON                                                                              \
                         GRO4(MILLE)                                                                                                    \
                                        /* Nombre maximal de particules (quarks et gluons, REELs, VIRTUELs ou"INEXISTANTs")          */ \
                                        /* presentes dans le proton.                                                                 */
#    define    SUIVANT(particule_courante)                                                                                              \
                         SUIVANT_DANS_UNE_LISTE(ASI1(particule_courante,ensemble))
#    define    PRECEDENT(particule_courante)                                                                                            \
                         PRECEDENT_DANS_UNE_LISTE(ASI1(particule_courante,ensemble))
#    define    VALIDATION(particule_courante)                                                                                           \
                         VALIDATION_D_UN_ELEMENT_D_UNE_LISTE(ASI1(particule_courante,ensemble))
                                        /* Procedures d'acces aux particules suivantes et precedentes. La procedure                  */
                                        /* 'VALIDATION(...)' a ete introduite le 20031103120919...                                   */
#    define    ACCES_PARTICULE(particule_courante)                                                                                      \
                         ACCES_A_UN_ELEMENT_D_UNE_LISTE(particule_courante)                                                             \
                                        /* Acces a une particule donnee...                                                           */
CREATION_D_UNE_LISTE(particule
                    ,premiere_particule,derniere_particule
                    ,nombre_instantane_de_particules
                    ,debordement_de_la_liste_des_particules
                    ,PARTICULE_NON_DEFINIE
                     );
                                        /* Creation de la liste des particules...                                                    */
#    define    ENSEMBLE_DES_PARTICULES(sequence)                                                                                        \
                         Bblock                                                                                                         \
                         PARCOURS_D_UNE_LISTE(particule                                                                                 \
                                             ,premiere_particule,derniere_particule                                                     \
                                             ,nombre_instantane_de_particules                                                           \
                                             ,debordement_de_la_liste_des_particules                                                    \
                                             ,PARTICULE_NON_DEFINIE                                                                     \
                                             ,SUIVANT,PRECEDENT,VALIDATION                                                              \
                                             ,particule_courante                                                                        \
                                             ,BLOC(sequence)                                                                            \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                                        /* Repetition d'une certaine sequence sur un ensemble de particules, quel que soit leur      */ \
                                        /* etat (INEXISTANT, REEL ou VIRTUEL).                                                       */
#    define    CREATION_D_UNE_PARTICULE(particule_creee)                                                                                \
                         Bblock                                                                                                         \
                         INSERTION_ELEMENT(particule                                                                                    \
                                          ,premiere_particule,derniere_particule                                                        \
                                          ,nombre_instantane_de_particules                                                              \
                                          ,debordement_de_la_liste_des_particules                                                       \
                                          ,PARTICULE_NON_DEFINIE                                                                        \
                                          ,SUIVANT,PRECEDENT,VALIDATION                                                                 \
                                          ,particule_creee                                                                              \
                                          ,BLOC(NATURE_D_UNE_PARTICULE(particule_creee,PARTICULE_NAISSANTE);)                           \
                                           );                                                                                           \
                         INCR(nombre_total_de_particules,I);                                                                            \
                                        /* Et comptage global des particules en presence...                                          */ \
                         Eblock                                                                                                         \
                                        /* Creation d'une particule (REELle ou VIRTUELle) a partir d'une particule INEXISTANTe.      */
#    define    DESTRUCTION_D_UNE_PARTICULE(particule_a_detruire)                                                                        \
                         Bblock                                                                                                         \
                         DESTRUCTION_ELEMENT(particule                                                                                  \
                                            ,premiere_particule,derniere_particule                                                      \
                                            ,nombre_instantane_de_particules                                                            \
                                            ,debordement_de_la_liste_des_particules                                                     \
                                            ,PARTICULE_NON_DEFINIE                                                                      \
                                            ,SUIVANT,PRECEDENT,VALIDATION                                                               \
                                            ,particule_a_detruire                                                                       \
                                            ,BLOC(Test(IFNE(NATURE(particule_a_detruire),PARTICULE_INEXISTANTE))                        \
                                                       Bblock                                                                           \
                                                       NATURE_D_UNE_PARTICULE(particule_a_detruire,PARTICULE_INEXISTANTE);              \
                                                       Eblock                                                                           \
                                                  ATes                                                                                  \
                                                       Bblock                                                                           \
                                                       PRINT_ERREUR("la particule a detruire est INEXISTANT");                          \
                                                       Eblock                                                                           \
                                                  ETes                                                                                  \
                                                  )                                                                                     \
                                             );                                                                                         \
                         Eblock                                                                                                         \
                                        /* Destruction d'une particule...                                                            */
#    define    INITIALISATION_DE_L_ENSEMBLE_DES_PARTICULES                                                                              \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                                        /* Initialisation de la liste des particules presentes dans le proton (INEXISTANTs).         */
#Aifdef   FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_02
#Eifdef   FACON_DE_GERER_LES_ENSEMBLES_DE_PARTICULES_VERSION_02

#define   PARTICULE_COURANTE                                                                                                            \
                    ACCES_PARTICULE(particule_courante)                                                                                 \
                                        /* Definition de la particule courante lors de 'ENSEMBLE_DES_PARTICULES(...)'.               */
DEFV(Local,DEFV(Positive,INIT(nombre_maximal_de_particules_dans_le_proton,NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON)));
                                        /* Nombre maximal de particules (quarks et gluons, REELs, VIRTUELs ou"INEXISTANTs")          */
                                        /* presentes dans le proton. Il est utilise dans 'AUTO_REGULATION'...                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        L I M I T A T I O N   E V E N T U E L L E   D E   L A   P O P U L A T I O N  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#ifdef    __VERSION__GENERATION_D_UN_DI_ELECTRON
#    define    NOMBRE_MAXIMAL_DE_PHOTONS_REELS_DU_DI_ELECTRON                                                                           \
                         NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON
DEFV(Local,DEFV(Positive,INIT(nombre_maximal_de_photons_REELs_du_di_electron
                             ,NOMBRE_MAXIMAL_DE_PHOTONS_REELS_DU_DI_ELECTRON
                              )
                )
     );
                                        /* Nombre maximal de photons REELs dans un "di-electron" a un instant donne.                 */
#    define    NOMBRE_MAXIMAL_DE_PHOTONS_VIRTUELS_DU_DI_ELECTRON                                                                        \
                         NOMBRE_MAXIMAL_DE_PARTICULES_DANS_LE_PROTON
DEFV(Local,DEFV(Positive,INIT(nombre_maximal_de_photons_VIRTUELs_du_di_electron
                             ,NOMBRE_MAXIMAL_DE_PHOTONS_VIRTUELS_DU_DI_ELECTRON
                              )
                )
     );
                                        /* Nombre maximal de photons VIRTUELs dans un "di-electron" a un instant donne.              */

#    define    NOMBRE_MAXIMAL_DE_Z0S_REELS_DU_DI_ELECTRON                                                                               \
                         UN
DEFV(Local,DEFV(Positive,INIT(nombre_maximal_de_z0s_REELs_du_di_electron
                             ,NOMBRE_MAXIMAL_DE_Z0S_REELS_DU_DI_ELECTRON
                              )
                )
     );
                                        /* Nombre maximal de z0s REELs dans un "di-electron" a un instant donne.                     */
#    define    NOMBRE_MAXIMAL_DE_Z0S_VIRTUELS_DU_DI_ELECTRON                                                                            \
                         UN
DEFV(Local,DEFV(Positive,INIT(nombre_maximal_de_z0s_VIRTUELs_du_di_electron
                             ,NOMBRE_MAXIMAL_DE_Z0S_VIRTUELS_DU_DI_ELECTRON
                              )
                )
     );
                                        /* Nombre maximal de z0s VIRTUELs dans un "di-electron" a un instant donne.                  */
#Aifdef   __VERSION__GENERATION_D_UN_DI_ELECTRON
#Eifdef   __VERSION__GENERATION_D_UN_DI_ELECTRON

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        T E S T   D E   P R E S E N C E   D A N S   L ' U N I V E R S   P O U R   U N E   P A R T I C U L E  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
                                        /* Les '..._VERSION_0[12](...)' sont passees de 'define' a 'nodefine' le 20030222110715      */
                                        /* afin de ne pas etre recupere par le processus 'v $xcc/cpp$Z _VERSION_'.                   */

#nodefine EXTENSION_DE_L_UNIVERS_VERSION_01(dimension)                                                                                  \
                    GRO10(FRA8(dimension))                                                                                              \
                                        /* Afin que l'univers des particules soit superieur a l'univers visible...                   */
#nodefine EST_HORS_DE_L_UNIVERS_VERSION_01(particule)                                                                                   \
                    I3OU(IFEXff(COORDONNEES(particule,x)                                                                                \
                               ,EXTENSION_DE_L_UNIVERS_VERSION_01(ASD2(espace_physique,origine,x))                                      \
                               ,EXTENSION_DE_L_UNIVERS_VERSION_01(ASD2(espace_physique,extremite,x))                                    \
                                )                                                                                                       \
                        ,IFEXff(COORDONNEES(particule,y)                                                                                \
                               ,EXTENSION_DE_L_UNIVERS_VERSION_01(ASD2(espace_physique,origine,y))                                      \
                               ,EXTENSION_DE_L_UNIVERS_VERSION_01(ASD2(espace_physique,extremite,y))                                    \
                                )                                                                                                       \
                        ,IFEXff(COORDONNEES(particule,z)                                                                                \
                               ,EXTENSION_DE_L_UNIVERS_VERSION_01(ASD2(espace_physique,origine,z))                                      \
                               ,EXTENSION_DE_L_UNIVERS_VERSION_01(ASD2(espace_physique,extremite,z))                                    \
                                )                                                                                                       \
                         )                                                                                                              \
                                        /* Test verifiant si la particule argument est dans l'univers de la simulation (version 01), */ \
                                        /* l'univers etant donc considere comme parallelepipedique.                                  */

#nodefine EXTENSION_DE_L_UNIVERS_VERSION_02(dimension)                                                                                  \
                    GRO10(FRA8(dimension))                                                                                              \
                                        /* Afin que l'univers des particules soit superieur a l'univers visible...                   */
#nodefine EST_HORS_DE_L_UNIVERS_VERSION_02(particule)                                                                                   \
                    IFGT(RdisF3D(COORDONNEES(particule,x)                                                                               \
                                ,COORDONNEES(particule,y)                                                                               \
                                ,COORDONNEES(particule,z)                                                                               \
                                ,Xcentre_ESPACE                                                                                         \
                                ,Ycentre_ESPACE                                                                                         \
                                ,Zcentre_ESPACE                                                                                         \
                                 )                                                                                                      \
                        ,MOIT(MIN3(SOUA(EXTENSION_DE_L_UNIVERS_VERSION_02(ASD2(espace_physique,extremite,x))                            \
                                       ,EXTENSION_DE_L_UNIVERS_VERSION_02(ASD2(espace_physique,origine,x))                              \
                                        )                                                                                               \
                                  ,SOUA(EXTENSION_DE_L_UNIVERS_VERSION_02(ASD2(espace_physique,extremite,y))                            \
                                       ,EXTENSION_DE_L_UNIVERS_VERSION_02(ASD2(espace_physique,origine,y))                              \
                                        )                                                                                               \
                                  ,SOUA(EXTENSION_DE_L_UNIVERS_VERSION_02(ASD2(espace_physique,extremite,z))                            \
                                       ,EXTENSION_DE_L_UNIVERS_VERSION_02(ASD2(espace_physique,origine,z))                              \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Test verifiant si la particule argument est dans l'univers de la simulation (version 02), */ \
                                        /* l'univers etant donc considere comme une sphere inscrite dans le parallelepipede.         */

                                        /* Les '..._VERSION_0[12](...)' sont passees de 'define' a 'nodefine' le 20030222110715      */
                                        /* afin de ne pas etre recupere par le processus 'v $xcc/cpp$Z _VERSION_'.                   */

#if       (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )
#    define    EXTENSION_DE_L_UNIVERS_VERSION_03(dimension)                                                                             \
                         GRO2(FRA2(dimension))                                                                                          \
                                        /* Afin que l'univers des particules soit superieur a l'univers visible...                   */
#Aif      (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )
#Eif      (         (defined(__VERSION__GENERATION_D_UN_NUCLEON))                                                                       \
          ||        (defined(__VERSION__GENERATION_D_UN_MESON))                                                                         \
          ||        (defined(__VERSION__GENERATION_DU_VIDE))                                                                            \
           )

#if       (defined(__VERSION__GENERATION_D_UN_DI_ELECTRON))
#    define    EXTENSION_DE_L_UNIVERS_VERSION_03(dimension)                                                                             \
                         GRO2(FRA1(dimension))                                                                                          \
                                        /* Afin que l'univers des particules soit superieur a l'univers visible...                   */
#Aif      (defined(__VERSION__GENERATION_D_UN_DI_ELECTRON))
#Eif      (defined(__VERSION__GENERATION_D_UN_DI_ELECTRON))

#define   EST_HORS_DE_L_UNIVERS_VERSION_03(particule)                                                                                   \
                    IFGT(RdisF3D(COORDONNEES(particule,x)                                                                               \
                                ,COORDONNEES(particule,y)                                                                               \
                                ,COORDONNEES(particule,z)                                                                               \
                                ,Xcentre_ESPACE                                                                                         \
                                ,Ycentre_ESPACE                                                                                         \
                                ,Zcentre_ESPACE                                                                                         \
                                 )                                                                                                      \
                        ,MOIT(RdisF3D(EXTENSION_DE_L_UNIVERS_VERSION_03(ASD2(espace_physique,origine,x))                                \
                                     ,EXTENSION_DE_L_UNIVERS_VERSION_03(ASD2(espace_physique,origine,y))                                \
                                     ,EXTENSION_DE_L_UNIVERS_VERSION_03(ASD2(espace_physique,origine,z))                                \
                                     ,EXTENSION_DE_L_UNIVERS_VERSION_03(ASD2(espace_physique,extremite,x))                              \
                                     ,EXTENSION_DE_L_UNIVERS_VERSION_03(ASD2(espace_physique,extremite,y))                              \
                                     ,EXTENSION_DE_L_UNIVERS_VERSION_03(ASD2(espace_physique,extremite,z))                              \
                                      )                                                                                                 \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Test verifiant si la particule argument est dans l'univers de la simulation (version 03), */ \
                                        /* l'univers etant donc considere comme une sphere circonscrite au parallelepipede.          */

#define   EST_HORS_DE_L_UNIVERS(particule)                                                                                              \
                    EST_HORS_DE_L_UNIVERS_VERSION_03(particule)                                                                         \
                                        /* Test courant verifiant si la particule argument est dans l'univers de la simulation...    */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E C H E R C H E   D E   L A   P R E M I E R E   P A R T I C U L E   R E P O N D A N T                                    */
/*        A   C E R T A I N S   C R I T E R E S   D A N S   L ' E N S E M B L E   D E S   P A R T I C U L E S  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   RECHERCHE_D_UNE_PARTICULE(particuleR,chercher_particuleR,probabilite_chercher_particuleR,particuleA1,particuleA2,conditions)  \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_collisionnel,FLOT__UNDEF));                                                 \
                    GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_collisionnel);                                              \
                                        /* Probabilite pour que la rechrche de 'particuleR' ait lieu...                              */ \
                                                                                                                                        \
                    EGAL(particuleR,PARTICULE_NON_DEFINIE);                                                                             \
                                        /* A priori, la particule recherchee 'particuleR' n'existe pas...                            */ \
                                                                                                                                        \
                    Test(IFET(IL_FAUT(chercher_particuleR)                                                                              \
                             ,IFLE(probabilite_d_evenement_collisionnel,REGUL9(probabilite_chercher_particuleR))                        \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         ENSEMBLE_DES_PARTICULES(BLOC(Test(I3ET(IFEQ(particuleR,PARTICULE_NON_DEFINIE)                                  \
                                                               ,IFET(IFNE(PARTICULE_COURANTE,particuleA1)                               \
                                                                    ,IFNE(PARTICULE_COURANTE,particuleA2)                               \
                                                                     )                                                                  \
                                                               ,conditions                                                              \
                                                                )                                                                       \
                                                           )                                                                            \
                                                           Bblock                                                                       \
                                                           EGAL(particuleR,PARTICULE_COURANTE);                                         \
                                        /* Memorisation de la premiere particule repondant aux <conditions> et etant differente      */ \
                                        /* de la particule 'particuleA'. ATTENTION : dans <conditions> on ne peut utiliser le nom    */ \
                                        /* de particule 'particuleR' puiqu'elle est encore indefinie, mais bien plutot le nom de la  */ \
                                        /* particule courante 'PARTICULE_COURANTE'...                                                */ \
                                        /*                                                                                           */ \
                                        /* Nota important sur l'aleatoire : en general, 'RECHERCHE_D_UNE_PARTICULE(...)' est         */ \
                                        /* destinee a trouver une particule 'particuleR' appartenant au voisinage de la particule    */ \
                                        /* 'particuleA' ; pour ce faire, on pourrait creer une liste contenant toutes celles du      */ \
                                        /* voisinage, puis a l'interieur, en selectionner une aleatoirement. Or la liste generale    */ \
                                        /* des particules peut etre consideree comme contenant l'ensemble des particules dans un     */ \
                                        /* ordre aleatoire. En consequence de quoi, prendre comme 'particuleR' la premiere particule */ \
                                        /* satisfaisante dans le voisinage est equivalent a faire une selection aleatoire dans le    */ \
                                        /* voisinage...                                                                              */ \
                                                           Eblock                                                                       \
                                                      ATes                                                                              \
                                                           Bblock                                                                       \
                                                           Eblock                                                                       \
                                                      ETes                                                                              \
                                                      )                                                                                 \
                                                 );                                                                                     \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Dans le cas ou la recherche de 'particuleR' n'est pas demandee, cette derniere prend      */ \
                                        /* l'etat 'PARTICULE_NON_DEFINIE'...                                                         */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Recherche de la premiere particule 'particuleR' differente de 'particuleA1' et de         */ \
                                        /* 'particuleA2' et repondant a certaines <conditions>. La "subtilite" dans les arguments    */ \
                                        /* ('particuleA1'/'particuleA2') est liee au fait que dans les processus evenementiels,      */ \
                                        /* lorsqu'ils sont pris en compte, les particules qui les subissent existent pendant un      */ \
                                        /* cours instant sous la forme de deux blocs de donnees (l'ancien et le nouveau...).         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E S T I O N   D E S   P A R T I C U L E S   R E E L L E S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ATTENTION_EST_CE_UN_QUARK_REEL(quarkD)                                                                                        \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(quarkD),QUARK_REEL))                                                                               \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("le quark 'quarkD' est REEL et va surement etre detruit");                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Passage de l'etat REEL d'un quark qui le possedait (et qui va etre detruit) a un qui      */ \
                                        /* va l'acquerir (et qui vient d'etre cree).                                                 */
#define   ATTENTION_EST_CE_UN_ANTI_QUARK_REEL(anti_quarkD)                                                                              \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(anti_quarkD),ANTI_QUARK_REEL))                                                                     \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("l'anti-quark 'anti_quarkD' est REEL et va surement etre detruit");                               \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Passage de l'etat REEL d'un anti-quark qui le possedait (et qui va etre detruit) a un qui */ \
                                        /* va l'acquerir (et qui vient d'etre cree).                                                 */
#define   CHANGEMENT_DE_QUARK_REEL(quark_REEL,quarkA)                                                                                   \
                    Bblock                                                                                                              \
                    Test(IFEQ(particule_REELLE_dominante,quark_REEL))                                                                   \
                         Bblock                                                                                                         \
                         EGAL(particule_REELLE_dominante,quarkA);                                                                       \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    EGAL(quark_REEL,quarkA);                                                                                            \
                    Eblock                                                                                                              \
                                        /* Changement d'un quark REEL, et mise a jour de la particule REELLE dominante si            */ \
                                        /* necessaire...                                                                             */
#define   CHANGEMENT_D_ANTI_QUARK_REEL(anti_quark_REEL,anti_quarkA)                                                                     \
                    Bblock                                                                                                              \
                    Test(IFEQ(particule_REELLE_dominante,anti_quark_REEL))                                                              \
                         Bblock                                                                                                         \
                         EGAL(particule_REELLE_dominante,anti_quarkA);                                                                  \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    EGAL(anti_quark_REEL,anti_quarkA);                                                                                  \
                    Eblock                                                                                                              \
                                        /* Changement d'un anti-quark REEL, et mise a jour de la particule REELLE dominante si       */ \
                                        /* necessaire...                                                                             */
#define   ATTENTION_EST_CE_UN_ELECTRON_REEL(electronD)                                                                                  \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(electronD),ELECTRON_REEL))                                                                         \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("l'electron 'electronD' est REEL et va surement etre detruit");                                   \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Passage de l'etat REEL d'un electron qui le possedait (et qui va etre detruit) a un qui   */ \
                                        /* va l'acquerir (et qui vient d'etre cree).                                                 */
#define   ATTENTION_EST_CE_UN_ANTI_ELECTRON_REEL(anti_electronD)                                                                        \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(anti_electronD),ANTI_ELECTRON_REEL))                                                               \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("l'anti-electron 'anti_electronD' est REEL et va surement etre detruit");                         \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Passage de l'etat REEL d'un anti-electron qui le possedait (et qui va etre detruit) a un  */ \
                                        /* qui va l'acquerir (et qui vient d'etre cree).                                             */
#define   CHANGEMENT_D_ELECTRON_REEL(electron_REEL,electronA)                                                                           \
                    Bblock                                                                                                              \
                    Test(IFEQ(particule_REELLE_dominante,electron_REEL))                                                                \
                         Bblock                                                                                                         \
                         EGAL(particule_REELLE_dominante,electronA);                                                                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    EGAL(electron_REEL,electronA);                                                                                      \
                    Eblock                                                                                                              \
                                        /* Changement d'un electron REEL, et mise a jour de la particule REELLE dominante si         */ \
                                        /* necessaire...                                                                             */
#define   CHANGEMENT_D_ANTI_ELECTRON_REEL(anti_electron_REEL,anti_electronA)                                                            \
                    Bblock                                                                                                              \
                    Test(IFEQ(particule_REELLE_dominante,anti_electron_REEL))                                                           \
                         Bblock                                                                                                         \
                         EGAL(particule_REELLE_dominante,anti_electronA);                                                               \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    EGAL(anti_electron_REEL,anti_electronA);                                                                            \
                    Eblock                                                                                                              \
                                        /* Changement d'un anti-electron REEL, et mise a jour de la particule REELLE dominante si    */ \
                                        /* necessaire...                                                                             */
#define   ATTENTION_EST_CE_UN_NEUTRINO_REEL(neutrinoD)                                                                                  \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(neutrinoD),NEUTRINO_REEL))                                                                         \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("le neutrino 'neutrinoD' est REEL et va surement etre detruit");                                  \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Passage de l'etat REEL d'un neutrino qui le possedait (et qui va etre detruit) a un qui   */ \
                                        /* va l'acquerir (et qui vient d'etre cree).                                                 */
#define   CHANGEMENT_DE_NEUTRINO_REEL(neutrino_REEL,neutrinoA)                                                                          \
                    Bblock                                                                                                              \
                    Test(IFEQ(particule_REELLE_dominante,neutrino_REEL))                                                                \
                         Bblock                                                                                                         \
                         EGAL(particule_REELLE_dominante,neutrinoA);                                                                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    EGAL(neutrino_REEL,neutrinoA);                                                                                      \
                    Eblock                                                                                                              \
                                        /* Changement d'un neutrino REEL, et mise a jour de la particule REELLE dominante si         */ \
                                        /* necessaire...                                                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   Q U A R K S   ( R E E L S   O U   V I R T U E L S )  :           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_QUARK(identite_du_quark_courant)                                                                                        \
                    ACCES_PARTICULE(identite_du_quark_courant)                                                                          \
                                        /* Acces a un quark de numero donne dans la liste...                                         */
#define   identite_du_quark_courant                                                                                                     \
                    particule_courante                                                                                                  \
                                        /* Numero du quark courant...                                                                */
#define   ENSEMBLE_DES_QUARKS(sequence)                                                                                                 \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(quarkD1),QUARK_REEL)                                             \
                                                          ,IFEQ(NATURE(quarkD1),QUARK_VIRTUEL)                                          \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les quarks REELs ou VIRTUELs.            */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des quarks REELs ou VIRTUELs.           */
#define   ENSEMBLE_DES_QUARKS_VIRTUELS(sequence)                                                                                        \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFEQ(NATURE(quarkD1),QUARK_VIRTUEL))                                              \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les quarks VIRTUELs.                     */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des quarks VIRTUELs.                    */

#ifdef    __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE
#    define    TOTALITE_DES_QUARKS(sequence)                                                                                            \
                         Bblock                                                                                                         \
                         ENSEMBLE_DES_QUARKS(sequence);                                                                                 \
                         Eblock                                                                                                         \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des quarks.   */
#Aifdef   __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE
#    define    TOTALITE_DES_QUARKS(sequence)                                                                                            \
                         Bblock                                                                                                         \
                         ENSEMBLE_DES_QUARKS_VIRTUELS(sequence);                                                                        \
                         Eblock                                                                                                         \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des quarks.   */
#Eifdef   __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE

#define   CREATION_D_UN_QUARK(quark_cree,nature_du_quark_cree)                                                                          \
                                        /* 'nature_du_quark_cree' a ete introduit pour permettre le comptage des particules,         */ \
                                        /* mais, ne modifie pas 'NATURE(quark_cree)'...                                              */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(quark_cree);                                                                               \
                    Choi(nature_du_quark_cree)                                                                                          \
                         Bblock                                                                                                         \
                         Ca1e(QUARK_REEL)                                                                                               \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_quarks_REELs,I);                                                                \
                              INCR(nombre_total_de_quarks_REELs,I);                                                                     \
                                        /* Comptage des quarks REELs.                                                                */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(QUARK_VIRTUEL)                                                                                            \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_quarks_VIRTUELs,I);                                                             \
                              INCR(nombre_total_de_quarks_VIRTUELs,I);                                                                  \
                                        /* Comptage des quarks VIRTUELs.                                                             */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature du quark a creer n'est pas reconnue");                                            \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un quark (REEL ou VIRTUEL) a partir d'une particule INEXISTANTe.               */
#define   DESTRUCTION_D_UN_QUARK(quark_a_detruire)                                                                                      \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(quark_a_detruire),QUARK_REEL)                                                                 \
                             ,IFEQ(NATURE(quark_a_detruire),QUARK_VIRTUEL)                                                              \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(quark_a_detruire))                                                                                 \
                              Bblock                                                                                                    \
                              Ca1e(QUARK_REEL)                                                                                          \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_quarks_REELs,I);                                                           \
                                        /* Decomptage des quarks REELs.                                                              */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(QUARK_VIRTUEL)                                                                                       \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_quarks_VIRTUELs,I);                                                        \
                                        /* Decomptage des quarks VIRTUELs.                                                           */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature du quark a detruire n'est pas reconnue");                                    \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(quark_a_detruire);                                                                 \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'quark_a_detruire' n'est ni 'QUARK REEL' ni 'QUARK VIRTUEL'");                                   \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un quark (REEL ou VIRTUEL).                                                 */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_QUARKS                                                                                        \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_QUARKS(BLOC(VISUALISATION_D_UN_QUARK(quarkD1);););                                                     \
                                        /* Et visualisation du quark...                                                              */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des quarks presents dans le proton (REELs ou VIRTUELs).         */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_QUARKS                                                                                       \
                    Bblock                                                                                                              \
                    TOTALITE_DES_QUARKS(BLOC(DEPLACEMENT_D_UN_QUARK(quarkD1);                                                           \
                                        /* Deplacement du quark...                                                                   */ \
                                             Test(EST_HORS_DE_L_UNIVERS(quarkD1))                                                       \
                                                  Bblock                                                                                \
                                                  ATTENTION_EST_CE_UN_QUARK_REEL(quarkD1);                                              \
                                                  DESTRUCTION_D_UN_QUARK(quarkD1);                                                      \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                  TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      Q(%d) --> VIDE"                  \
                                                                            ,ETIQUETTE(quarkD1)                                         \
                                                                             )                                                          \
                                                                       );                                                               \
                                                  Eblock                                                                                \
                                             ATes                                                                                       \
                                                  Bblock                                                                                \
                                                  Eblock                                                                                \
                                             ETes                                                                                       \
                                             )                                                                                          \
                                        );                                                                                              \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des quarks presents dans le proton (REELs ou VIRTUELs).           */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_QUARKS,Q,___DEPLACEMENT_DE_L_ENSEMBLE_DES_QUARKS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   A N T I - Q U A R K S   R E E L S   O U   V I R T U E L S  :     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_ANTI_QUARK(identite_de_l_anti_quark_courant)                                                                            \
                    ACCES_PARTICULE(identite_de_l_anti_quark_courant)                                                                   \
                                        /* Acces a un anti-quark de numero donne dans la liste...                                    */
#define   identite_de_l_anti_quark_courant                                                                                              \
                    particule_courante                                                                                                  \
                                        /* Numero de l'anti-quark courant...                                                         */
#define   ENSEMBLE_DES_ANTI_QUARKS(sequence)                                                                                            \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(anti_quarkD1),ANTI_QUARK_REEL)                                   \
                                                          ,IFEQ(NATURE(anti_quarkD1),ANTI_QUARK_VIRTUEL)                                \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les anti-quarks REELs ou VIRTUELs.       */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des anti-quarks REELs ou VIRTUELs.      */
#define   ENSEMBLE_DES_ANTI_QUARKS_VIRTUELS(sequence)                                                                                   \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFEQ(NATURE(anti_quarkD1),ANTI_QUARK_VIRTUEL))                                    \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les anti-quarks VIRTUELs.                */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des anti-quarks VIRTUELs.               */

#ifdef    __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE
#    define    TOTALITE_DES_ANTI_QUARKS(sequence)                                                                                       \
                         Bblock                                                                                                         \
                         ENSEMBLE_DES_ANTI_QUARKS(sequence);                                                                            \
                         Eblock                                                                                                         \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des quarks.   */
#Aifdef   __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE
#    define    TOTALITE_DES_ANTI_QUARKS(sequence)                                                                                       \
                         Bblock                                                                                                         \
                         ENSEMBLE_DES_ANTI_QUARKS_VIRTUELS(sequence);                                                                   \
                         Eblock                                                                                                         \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des quarks.   */
#Eifdef   __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE

#define   CREATION_D_UN_ANTI_QUARK(anti_quark_cree,nature_de_l_anti_quark_cree)                                                         \
                                        /* 'nature_de_l_anti_quark_cree' a ete introduit pour permettre le comptage des particules,  */ \
                                        /* mais, ne modifie pas 'NATURE(anti_quark_cree)'...                                         */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(anti_quark_cree);                                                                          \
                    Choi(nature_de_l_anti_quark_cree)                                                                                   \
                         Bblock                                                                                                         \
                         Ca1e(ANTI_QUARK_REEL)                                                                                          \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_d_anti_quarks_REELs,I);                                                            \
                              INCR(nombre_total_d_anti_quarks_REELs,I);                                                                 \
                                        /* Comptage des anti-quarks REELs.                                                           */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(ANTI_QUARK_VIRTUEL)                                                                                       \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_d_anti_quarks_VIRTUELs,I);                                                         \
                              INCR(nombre_total_d_anti_quarks_VIRTUELs,I);                                                              \
                                        /* Comptage des anti-quarks VIRTUELs.                                                        */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature de l'anti-quark a creer n'est pas reconnue");                                     \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un anti-quark (REEL ou VIRTUEL) a partir d'une particule INEXISTANTe.          */
#define   DESTRUCTION_D_UN_ANTI_QUARK(anti_quark_a_detruire)                                                                            \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(anti_quark_a_detruire),ANTI_QUARK_REEL)                                                       \
                             ,IFEQ(NATURE(anti_quark_a_detruire),ANTI_QUARK_VIRTUEL)                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(anti_quark_a_detruire))                                                                            \
                              Bblock                                                                                                    \
                              Ca1e(ANTI_QUARK_REEL)                                                                                     \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_d_anti_quarks_REELs,I);                                                       \
                                        /* Decomptage des anti-quarks REELs.                                                         */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(ANTI_QUARK_VIRTUEL)                                                                                  \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_d_anti_quarks_VIRTUELs,I);                                                    \
                                        /* Decomptage des anti-quarks VIRTUELs.                                                      */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature de l'anti-quark a detruire n'est pas reconnue");                             \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(anti_quark_a_detruire);                                                            \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'anti_quark_a_detruire' n'est ni 'ANTI-QUARK REEL' ni 'ANTI-QUARK VIRTUEL'");                    \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un anti-quark (REEL ou VIRTUEL).                                            */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_ANTI_QUARKS                                                                                   \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_ANTI_QUARKS(BLOC(VISUALISATION_D_UN_ANTI_QUARK(anti_quarkD1);););                                      \
                                        /* Et visualisation de l'anti-quark...                                                       */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des anti-quarks presents dans le proton (REELs ou VIRTUELs).    */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_ANTI_QUARKS                                                                                  \
                    Bblock                                                                                                              \
                    TOTALITE_DES_ANTI_QUARKS(BLOC(DEPLACEMENT_D_UN_ANTI_QUARK(anti_quarkD1);                                            \
                                        /* Deplacement du anti-quark...                                                              */ \
                                                  Test(EST_HORS_DE_L_UNIVERS(anti_quarkD1))                                             \
                                                       Bblock                                                                           \
                                                       DESTRUCTION_D_UN_ANTI_QUARK(anti_quarkD1);                                       \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                       TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      AQ(%d) --> VIDE"            \
                                                                                 ,ETIQUETTE(anti_quarkD1)                               \
                                                                                  )                                                     \
                                                                            );                                                          \
                                                       Eblock                                                                           \
                                                  ATes                                                                                  \
                                                       Bblock                                                                           \
                                                       Eblock                                                                           \
                                                  ETes                                                                                  \
                                                  )                                                                                     \
                                             );                                                                                         \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des anti-quarks presents dans le proton (REELs ou VIRTUELs).      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_ANTI_QUARKS,AQ,___DEPLACEMENT_DE_L_ENSEMBLE_DES_ANTI_QUARKS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   G L U O N S   ( V I R T U E L S )  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_GLUON(identite_du_gluon_courant)                                                                                        \
                    ACCES_PARTICULE(identite_du_gluon_courant)                                                                          \
                                        /* Acces a un gluon de numero donne dans la liste...                                         */
#define   identite_du_gluon_courant                                                                                                     \
                    particule_courante                                                                                                  \
                                        /* Numero du gluon courant...                                                                */
#define   ENSEMBLE_DES_GLUONS_EXISTANTS(sequence)                                                                                       \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(gluonD1),GLUON_REEL)                                             \
                                                          ,IFEQ(NATURE(gluonD1),GLUON_VIRTUEL)                                          \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les etats gluons REELs ou VIRTUELs.      */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des gluons (REELs ou VIRTUELs).         */
#define   CREATION_D_UN_GLUON(gluon_cree,nature_du_gluon_cree)                                                                          \
                                        /* 'nature_du_gluon_cree' a ete introduit pour permettre le comptage des particules,         */ \
                                        /* mais, ne modifie pas 'NATURE(gluon_cree)'...                                              */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(gluon_cree);                                                                               \
                    Choi(nature_du_gluon_cree)                                                                                          \
                         Bblock                                                                                                         \
                         Ca1e(GLUON_REEL)                                                                                               \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_gluons_REELs,I);                                                                \
                              INCR(nombre_total_de_gluons_REELs,I);                                                                     \
                                        /* Comptage des gluons REELs.                                                                */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(GLUON_VIRTUEL)                                                                                            \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_gluons_VIRTUELs,I);                                                             \
                              INCR(nombre_total_de_gluons_VIRTUELs,I);                                                                  \
                                        /* Comptage des gluons VIRTUELs.                                                             */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature du gluon a creer n'est pas reconnue");                                            \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un gluon (VIRTUEL) a partir d'une particule INEXISTANTe.                       */
#define   DESTRUCTION_D_UN_GLUON(gluon_a_detruire)                                                                                      \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(gluon_a_detruire),GLUON_REEL)                                                                 \
                             ,IFEQ(NATURE(gluon_a_detruire),GLUON_VIRTUEL)                                                              \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(gluon_a_detruire))                                                                                 \
                              Bblock                                                                                                    \
                              Ca1e(GLUON_REEL)                                                                                          \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_gluons_REELs,I);                                                           \
                                        /* Decomptage des gluons REELs.                                                              */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(GLUON_VIRTUEL)                                                                                       \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_gluons_VIRTUELs,I);                                                        \
                                        /* Decomptage des gluons VIRTUELs.                                                           */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature du gluon a detruire n'est pas reconnue");                                    \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(gluon_a_detruire);                                                                 \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'gluon_a_detruire' n'est ni 'GLUON REEL' ni 'GLUON VIRTUEL'");                                   \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un gluon (REEL ou VIRTUEL).                                                 */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_GLUONS                                                                                        \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_GLUONS_EXISTANTS(BLOC(VISUALISATION_D_UN_GLUON(gluonD1);););                                           \
                                        /* Et visualisation du gluon...                                                              */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des gluons presents dans le proton.                             */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_GLUONS                                                                                       \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_GLUONS_EXISTANTS(BLOC(DEPLACEMENT_D_UN_GLUON(gluonD1);                                                 \
                                        /* Deplacement du gluon...                                                                   */ \
                                                       Test(EST_HORS_DE_L_UNIVERS(gluonD1))                                             \
                                                            Bblock                                                                      \
                                                            DESTRUCTION_D_UN_GLUON(gluonD1);                                            \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                            TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      G(%d) --> VIDE"        \
                                                                                      ,ETIQUETTE(gluonD1)                               \
                                                                                       )                                                \
                                                                                 );                                                     \
                                                            Eblock                                                                      \
                                                       ATes                                                                             \
                                                            Bblock                                                                      \
                                                            Eblock                                                                      \
                                                       ETes                                                                             \
                                                       )                                                                                \
                                                  );                                                                                    \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des gluons presents dans le proton (VIRTUELs).                    */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_GLUONS,G,___DEPLACEMENT_DE_L_ENSEMBLE_DES_GLUONS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   E L E C T R O N S                                                */
/*        R E E L S   O U   V I R T U E L S  :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_ELECTRON(identite_de_l_electron_courant)                                                                                \
                    ACCES_PARTICULE(identite_de_l_electron_courant)                                                                     \
                                        /* Acces a un electron de numero donne dans la liste...                                      */
#define   identite_de_l_electron_courant                                                                                                \
                    particule_courante                                                                                                  \
                                        /* Numero de l'electron courant...                                                           */
#define   ENSEMBLE_DES_ELECTRONS(sequence)                                                                                              \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(electronD1),ELECTRON_REEL)                                       \
                                                          ,IFEQ(NATURE(electronD1),ELECTRON_VIRTUEL)                                    \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les electrons REELs ou VIRTUELs.         */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des electrons REELs ou VIRTUELs.        */
#define   ENSEMBLE_DES_ELECTRONS_VIRTUELS(sequence)                                                                                     \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFEQ(NATURE(electronD1),ELECTRON_VIRTUEL))                                        \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les electrons VIRTUELs.                  */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des electrons VIRTUELs.                 */
#define   TOTALITE_DES_ELECTRONS(sequence)                                                                                              \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_ELECTRONS(sequence);                                                                                   \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des           */ \
                                        /* electrons.                                                                                */

#define   CREATION_D_UN_ELECTRON(electron_cree,nature_de_l_electron_cree)                                                               \
                                        /* 'nature_de_l_electron_cree' a ete introduit pour permettre le comptage des particules,    */ \
                                        /* mais, ne modifie pas 'NATURE(electron_cree)'...                                           */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(electron_cree);                                                                            \
                    Choi(nature_de_l_electron_cree)                                                                                     \
                         Bblock                                                                                                         \
                         Ca1e(ELECTRON_REEL)                                                                                            \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_d_electrons_REELs,I);                                                              \
                              INCR(nombre_total_d_electrons_REELs,I);                                                                   \
                                        /* Comptage des electrons REELs.                                                             */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(ELECTRON_VIRTUEL)                                                                                         \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_d_electrons_VIRTUELs,I);                                                           \
                              INCR(nombre_total_d_electrons_VIRTUELs,I);                                                                \
                                        /* Comptage des electrons VIRTUELs.                                                          */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature de l'electron a creer n'est pas reconnue");                                       \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un electron (REEL ou VIRTUEL) a partir d'une particule INEXISTANTe.            */
#define   DESTRUCTION_D_UN_ELECTRON(electron_a_detruire)                                                                                \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(electron_a_detruire),ELECTRON_REEL)                                                           \
                             ,IFEQ(NATURE(electron_a_detruire),ELECTRON_VIRTUEL)                                                        \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(electron_a_detruire))                                                                              \
                              Bblock                                                                                                    \
                              Ca1e(ELECTRON_REEL)                                                                                       \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_d_electrons_REELs,I);                                                         \
                                        /* Decomptage des electrons REELs.                                                           */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(ELECTRON_VIRTUEL)                                                                                    \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_d_electrons_VIRTUELs,I);                                                      \
                                        /* Decomptage des electrons VIRTUELs.                                                        */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature de l'electron a detruire n'est pas reconnue");                               \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(electron_a_detruire);                                                              \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'electron_a_detruire' n'est ni 'ELECTRON REEL' ni 'ELECTRON VIRTUEL'");                          \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un electron (REEL ou VIRTUEL).                                              */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_ELECTRONS                                                                                     \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_ELECTRONS(BLOC(VISUALISATION_D_UN_ELECTRON(electronD1);););                                            \
                                        /* Et visualisation de l'electron.                                                           */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des electrons presents dans le proton (REELs ou VIRTUELs).      */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_ELECTRONS                                                                                    \
                    Bblock                                                                                                              \
                    TOTALITE_DES_ELECTRONS(BLOC(DEPLACEMENT_D_UN_ELECTRON(electronD1);                                                  \
                                        /* Deplacement de l'electron.                                                                */ \
                                                Test(EST_HORS_DE_L_UNIVERS(electronD1))                                                 \
                                                     Bblock                                                                             \
                                                     ATTENTION_EST_CE_UN_ELECTRON_REEL(electronD1);                                     \
                                                     DESTRUCTION_D_UN_ELECTRON(electronD1);                                             \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                     TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      E(%d) --> VIDE"               \
                                                                               ,ETIQUETTE(electronD1)                                   \
                                                                                )                                                       \
                                                                          );                                                            \
                                                     Eblock                                                                             \
                                                ATes                                                                                    \
                                                     Bblock                                                                             \
                                                     Eblock                                                                             \
                                                ETes                                                                                    \
                                                )                                                                                       \
                                           );                                                                                           \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des electrons presents dans le proton (REELs ou VIRTUELs).        */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_ELECTRONS,Q,___DEPLACEMENT_DE_L_ENSEMBLE_DES_ELECTRONS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   A N T I - E L E C T R O N S                                      */
/*        R E E L S   O U   V I R T U E L S  :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_ANTI_ELECTRON(identite_de_l_anti_electron_courant)                                                                      \
                    ACCES_PARTICULE(identite_de_l_anti_electron_courant)                                                                \
                                        /* Acces a un anti-electron de numero donne dans la liste...                                 */
#define   identite_de_l_anti_electron_courant                                                                                           \
                    particule_courante                                                                                                  \
                                        /* Numero de l'anti-electron courant...                                                      */
#define   ENSEMBLE_DES_ANTI_ELECTRONS(sequence)                                                                                         \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(anti_electronD1),ANTI_ELECTRON_REEL)                             \
                                                          ,IFEQ(NATURE(anti_electronD1),ANTI_ELECTRON_VIRTUEL)                          \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les anti-electrons REELs ou VIRTUELs.    */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des anti-electrons REELs ou VIRTUELs.   */
#define   ENSEMBLE_DES_ANTI_ELECTRONS_VIRTUELS(sequence)                                                                                \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFEQ(NATURE(anti_electronD1),ANTI_ELECTRON_VIRTUEL))                              \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les anti-electrons VIRTUELs.             */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des anti-electrons VIRTUELs.            */
#define   TOTALITE_DES_ANTI_ELECTRONS(sequence)                                                                                         \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_ANTI_ELECTRONS(sequence);                                                                              \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des           */
                                        /* electrons.                                                                                */

#define   CREATION_D_UN_ANTI_ELECTRON(anti_electron_cree,nature_de_l_anti_electron_cree)                                                \
                                        /* 'nature_de_l_anti_electron_cree' a ete introduit pour permettre le comptage des           */ \
                                        /* particules, mais, ne modifie pas 'NATURE(anti_electron_cree)'...                          */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(anti_electron_cree);                                                                       \
                    Choi(nature_de_l_anti_electron_cree)                                                                                \
                         Bblock                                                                                                         \
                         Ca1e(ANTI_ELECTRON_REEL)                                                                                       \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_d_anti_electrons_REELs,I);                                                         \
                              INCR(nombre_total_d_anti_electrons_REELs,I);                                                              \
                                        /* Comptage des anti-electrons REELs.                                                        */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(ANTI_ELECTRON_VIRTUEL)                                                                                    \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_d_anti_electrons_VIRTUELs,I);                                                      \
                              INCR(nombre_total_d_anti_electrons_VIRTUELs,I);                                                           \
                                        /* Comptage des anti-electrons VIRTUELs.                                                     */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature de l'anti-electron a creer n'est pas reconnue");                                  \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un anti-electron (REEL ou VIRTUEL) a partir d'une particule INEXISTANTe.       */
#define   DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electron_a_detruire)                                                                      \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(anti_electron_a_detruire),ANTI_ELECTRON_REEL)                                                 \
                             ,IFEQ(NATURE(anti_electron_a_detruire),ANTI_ELECTRON_VIRTUEL)                                              \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(anti_electron_a_detruire))                                                                         \
                              Bblock                                                                                                    \
                              Ca1e(ANTI_ELECTRON_REEL)                                                                                  \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_d_anti_electrons_REELs,I);                                                    \
                                        /* Decomptage des anti-electrons REELs.                                                      */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(ANTI_ELECTRON_VIRTUEL)                                                                               \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_d_anti_electrons_VIRTUELs,I);                                                 \
                                        /* Decomptage des anti-electrons VIRTUELs.                                                   */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature de l'anti-electron a detruire n'est pas reconnue");                          \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(anti_electron_a_detruire);                                                         \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'anti_electron_a_detruire' n'est ni 'ANTI-ELECTRON REEL' ni 'ANTI-ELECTRON VIRTUEL'");           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un anti-electron (REEL ou VIRTUEL).                                         */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_ANTI_ELECTRONS                                                                                \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_ANTI_ELECTRONS(BLOC(VISUALISATION_D_UN_ANTI_ELECTRON(anti_electronD1);););                             \
                                        /* Et visualisation de l'anti-electron...                                                    */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des anti-electrons presents dans le proton (REELs ou VIRTUELs). */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_ANTI_ELECTRONS                                                                               \
                    Bblock                                                                                                              \
                    TOTALITE_DES_ANTI_ELECTRONS(BLOC(DEPLACEMENT_D_UN_ANTI_ELECTRON(anti_electronD1);                                   \
                                        /* Deplacement du anti-electron...                                                           */ \
                                                     Test(EST_HORS_DE_L_UNIVERS(anti_electronD1))                                       \
                                                          Bblock                                                                        \
                                                          DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electronD1);                              \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                          TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      AE(%d) --> VIDE"         \
                                                                                    ,ETIQUETTE(anti_electronD1)                         \
                                                                                     )                                                  \
                                                                               );                                                       \
                                                          Eblock                                                                        \
                                                     ATes                                                                               \
                                                          Bblock                                                                        \
                                                          Eblock                                                                        \
                                                     ETes                                                                               \
                                                     )                                                                                  \
                                                );                                                                                      \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des anti-electrons presents dans le proton (REELs ou VIRTUELs).   */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_ANTI_ELECTRONS,AQ,___DEPLACEMENT_DE_L_ENSEMBLE_DES_ANTI_ELECTRONS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   N E U T R I N O S  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_NEUTRINO(identite_du_neutrino_courant)                                                                                  \
                    ACCES_PARTICULE(identite_du_neutrino_courant)                                                                       \
                                        /* Acces a un neutrino de numero donne dans la liste...                                      */
#define   identite_du_neutrino_courant                                                                                                  \
                    particule_courante                                                                                                  \
                                        /* Numero du neutrino courant...                                                             */
#define   ENSEMBLE_DES_NEUTRINOS_EXISTANTS(sequence)                                                                                    \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(neutrinoD1),NEUTRINO_REEL)                                       \
                                                          ,IFEQ(NATURE(neutrinoD1),NEUTRINO_VIRTUEL)                                    \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les etats neutrinos REELs ou VIRTUELs.   */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des neutrinos (REELs ou VIRTUELs).      */
#define   TOTALITE_DES_NEUTRINOS(sequence)                                                                                              \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_NEUTRINOS_EXISTANTS(sequence);                                                                         \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des           */
                                        /* neutrinos.                                                                                */

#define   CREATION_D_UN_NEUTRINO(neutrino_cree,nature_du_neutrino_cree)                                                                 \
                                        /* 'nature_du_neutrino_cree' a ete introduit pour permettre le comptage des particules,      */ \
                                        /* mais, ne modifie pas 'NATURE(neutrino_cree)'...                                           */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(neutrino_cree);                                                                            \
                    Choi(nature_du_neutrino_cree)                                                                                       \
                         Bblock                                                                                                         \
                         Ca1e(NEUTRINO_REEL)                                                                                            \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_neutrinos_REELs,I);                                                             \
                              INCR(nombre_total_de_neutrinos_REELs,I);                                                                  \
                                        /* Comptage des neutrinos REELs.                                                             */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(NEUTRINO_VIRTUEL)                                                                                         \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_neutrinos_VIRTUELs,I);                                                          \
                              INCR(nombre_total_de_neutrinos_VIRTUELs,I);                                                               \
                                        /* Comptage des neutrinos VIRTUELs.                                                          */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature du neutrino a creer n'est pas reconnue");                                         \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un neutrino (VIRTUEL) a partir d'une particule INEXISTANTe.                    */
#define   DESTRUCTION_D_UN_NEUTRINO(neutrino_a_detruire)                                                                                \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(neutrino_a_detruire),NEUTRINO_REEL)                                                           \
                             ,IFEQ(NATURE(neutrino_a_detruire),NEUTRINO_VIRTUEL)                                                        \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(neutrino_a_detruire))                                                                              \
                              Bblock                                                                                                    \
                              Ca1e(NEUTRINO_REEL)                                                                                       \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_neutrinos_REELs,I);                                                        \
                                        /* Decomptage des neutrinos REELs.                                                           */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(NEUTRINO_VIRTUEL)                                                                                    \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_neutrinos_VIRTUELs,I);                                                     \
                                        /* Decomptage des neutrinos VIRTUELs.                                                        */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature du neutrino a detruire n'est pas reconnue");                                 \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(neutrino_a_detruire);                                                              \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'neutrino_a_detruire' n'est ni 'NEUTRINO REEL' ni 'NEUTRINO VIRTUEL'");                          \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un neutrino (REEL ou VIRTUEL).                                              */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_NEUTRINOS                                                                                     \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_NEUTRINOS_EXISTANTS(BLOC(VISUALISATION_D_UN_NEUTRINO(neutrinoD1);););                                  \
                                        /* Et visualisation du neutrino...                                                           */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des neutrinos presents dans le proton.                          */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_NEUTRINOS                                                                                    \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_NEUTRINOS_EXISTANTS(BLOC(DEPLACEMENT_D_UN_NEUTRINO(neutrinoD1);                                        \
                                        /* Deplacement du neutrino...                                                                */ \
                                                          Test(EST_HORS_DE_L_UNIVERS(neutrinoD1))                                       \
                                                               Bblock                                                                   \
                                                               DESTRUCTION_D_UN_NEUTRINO(neutrinoD1);                                   \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                               TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      N(%d) --> VIDE"     \
                                                                                         ,ETIQUETTE(neutrinoD1)                         \
                                                                                          )                                             \
                                                                                    );                                                  \
                                                               Eblock                                                                   \
                                                          ATes                                                                          \
                                                               Bblock                                                                   \
                                                               Eblock                                                                   \
                                                          ETes                                                                          \
                                                          )                                                                             \
                                                     );                                                                                 \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des neutrinos presents dans le proton (VIRTUELs).                 */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_NEUTRINOS,G,___DEPLACEMENT_DE_L_ENSEMBLE_DES_NEUTRINOS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   P H O T O N S   ( V I R T U E L S )  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_PHOTON(identite_du_photon_courant)                                                                                      \
                    ACCES_PARTICULE(identite_du_photon_courant)                                                                         \
                                        /* Acces a un photon de numero donne dans la liste...                                        */
#define   identite_du_photon_courant                                                                                                    \
                    particule_courante                                                                                                  \
                                        /* Numero du photon courant...                                                               */
#define   ENSEMBLE_DES_PHOTONS_EXISTANTS(sequence)                                                                                      \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(photonD1),PHOTON_REEL)                                           \
                                                          ,IFEQ(NATURE(photonD1),PHOTON_VIRTUEL)                                        \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les etats photons REELs ou VIRTUELs.     */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des photons (REELs ou VIRTUELs).        */
#define   TOTALITE_DES_PHOTONS(sequence)                                                                                                \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PHOTONS_EXISTANTS(sequence);                                                                           \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des           */
                                        /* photons.                                                                                  */

#define   CREATION_D_UN_PHOTON(photon_cree,nature_du_photon_cree)                                                                       \
                                        /* 'nature_du_photon_cree' a ete introduit pour permettre le comptage des particules,        */ \
                                        /* mais, ne modifie pas 'NATURE(photon_cree)'...                                             */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(photon_cree);                                                                              \
                    Choi(nature_du_photon_cree)                                                                                         \
                         Bblock                                                                                                         \
                         Ca1e(PHOTON_REEL)                                                                                              \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_photons_REELs,I);                                                               \
                              INCR(nombre_total_de_photons_REELs,I);                                                                    \
                                        /* Comptage des photons REELs.                                                               */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(PHOTON_VIRTUEL)                                                                                           \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_photons_VIRTUELs,I);                                                            \
                              INCR(nombre_total_de_photons_VIRTUELs,I);                                                                 \
                                        /* Comptage des photons VIRTUELs.                                                            */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature du photon a creer n'est pas reconnue");                                           \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un photon (VIRTUEL) a partir d'une particule INEXISTANTe.                      */
#define   DESTRUCTION_D_UN_PHOTON(photon_a_detruire)                                                                                    \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(photon_a_detruire),PHOTON_REEL)                                                               \
                             ,IFEQ(NATURE(photon_a_detruire),PHOTON_VIRTUEL)                                                            \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(photon_a_detruire))                                                                                \
                              Bblock                                                                                                    \
                              Ca1e(PHOTON_REEL)                                                                                         \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_photons_REELs,I);                                                          \
                                        /* Decomptage des photons REELs.                                                             */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(PHOTON_VIRTUEL)                                                                                      \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_photons_VIRTUELs,I);                                                       \
                                        /* Decomptage des photons VIRTUELs.                                                          */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature du photon a detruire n'est pas reconnue");                                   \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(photon_a_detruire);                                                                \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'photon_a_detruire' n'est ni 'PHOTON REEL' ni 'PHOTON VIRTUEL'");                                \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un photon (REEL ou VIRTUEL).                                                */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_PHOTONS                                                                                       \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PHOTONS_EXISTANTS(BLOC(VISUALISATION_D_UN_PHOTON(photonD1);););                                        \
                                        /* Et visualisation du photon...                                                             */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des photons presents dans le proton.                            */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_PHOTONS                                                                                      \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PHOTONS_EXISTANTS(BLOC(DEPLACEMENT_D_UN_PHOTON(photonD1);                                              \
                                        /* Deplacement du photon...                                                                  */ \
                                                        Test(EST_HORS_DE_L_UNIVERS(photonD1))                                           \
                                                             Bblock                                                                     \
                                                             DESTRUCTION_D_UN_PHOTON(photonD1);                                         \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                             TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      P(%d) --> VIDE"       \
                                                                                       ,ETIQUETTE(photonD1)                             \
                                                                                        )                                               \
                                                                                  );                                                    \
                                                             Eblock                                                                     \
                                                        ATes                                                                            \
                                                             Bblock                                                                     \
                                                             Eblock                                                                     \
                                                        ETes                                                                            \
                                                        )                                                                               \
                                                   );                                                                                   \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des photons presents dans le proton (VIRTUELs).                   */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_PHOTONS,G,___DEPLACEMENT_DE_L_ENSEMBLE_DES_PHOTONS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E   L ' E N S E M B L E   D E S   Z 0  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ACCES_Z0(identite_du_z0_courant)                                                                                              \
                    ACCES_PARTICULE(identite_du_z0_courant)                                                                             \
                                        /* Acces a un z0 de numero donne dans la liste...                                            */
#define   identite_du_z0_courant                                                                                                        \
                    particule_courante                                                                                                  \
                                        /* Numero du z0 courant...                                                                   */
#define   ENSEMBLE_DES_Z0S_EXISTANTS(sequence)                                                                                          \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_PARTICULES(BLOC(Test(IFOU(IFEQ(NATURE(z0D1),Z0_REEL)                                                   \
                                                          ,IFEQ(NATURE(z0D1),Z0_VIRTUEL)                                                \
                                                           )                                                                            \
                                                      )                                                                                 \
                                                      Bblock                                                                            \
                                                      BLOC(sequence);                                                                   \
                                        /* Execution de la sequence argument uniquement sur les etats z0s REELs ou VIRTUELs.         */ \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur l'ensemble des z0s (REELs ou VIRTUELs).            */
#define   TOTALITE_DES_Z0S(sequence)                                                                                                    \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_Z0S_EXISTANTS(sequence);                                                                               \
                    Eblock                                                                                                              \
                                        /* Repetition d'une certaine sequence sur un ensemble (eventuellement partiel) des           */
                                        /* z0s.                                                                                      */

#define   CREATION_D_UN_Z0(z0_cree,nature_du_z0_cree)                                                                                   \
                                        /* 'nature_du_z0_cree' a ete introduit pour permettre le comptage des particules,            */ \
                                        /* mais, ne modifie pas 'NATURE(z0_cree)'...                                                 */ \
                    Bblock                                                                                                              \
                    CREATION_D_UNE_PARTICULE(z0_cree);                                                                                  \
                    Choi(nature_du_z0_cree)                                                                                             \
                         Bblock                                                                                                         \
                         Ca1e(Z0_REEL)                                                                                                  \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_z0s_REELs,I);                                                                   \
                              INCR(nombre_total_de_z0s_REELs,I);                                                                        \
                                        /* Comptage des z0s REELs.                                                                   */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Ca1e(Z0_VIRTUEL)                                                                                               \
                              Bblock                                                                                                    \
                              INCR(nombre_instantane_de_z0s_VIRTUELs,I);                                                                \
                              INCR(nombre_total_de_z0s_VIRTUELs,I);                                                                     \
                                        /* Comptage des z0s VIRTUELs.                                                                */ \
                              Eblock                                                                                                    \
                         ECa1                                                                                                           \
                                                                                                                                        \
                         Defo                                                                                                           \
                              Bblock                                                                                                    \
                              PRINT_ERREUR("la nature du z0 a creer n'est pas reconnue");                                               \
                              Eblock                                                                                                    \
                         EDef                                                                                                           \
                         Eblock                                                                                                         \
                    ECho                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Creation d'un z0 (VIRTUEL) a partir d'une particule INEXISTANTe.                          */
#define   DESTRUCTION_D_UN_Z0(z0_a_detruire)                                                                                            \
                    Bblock                                                                                                              \
                    Test(IFOU(IFEQ(NATURE(z0_a_detruire),Z0_REEL)                                                                       \
                             ,IFEQ(NATURE(z0_a_detruire),Z0_VIRTUEL)                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                         Bblock                                                                                                         \
                         Choi(NATURE(z0_a_detruire))                                                                                    \
                              Bblock                                                                                                    \
                              Ca1e(Z0_REEL)                                                                                             \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_z0s_REELs,I);                                                              \
                                        /* Decomptage des z0s REELs.                                                                 */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Ca1e(Z0_VIRTUEL)                                                                                          \
                                   Bblock                                                                                               \
                                   DECR(nombre_instantane_de_z0s_VIRTUELs,I);                                                           \
                                        /* Decomptage des z0s VIRTUELs.                                                              */ \
                                   Eblock                                                                                               \
                              ECa1                                                                                                      \
                                                                                                                                        \
                              Defo                                                                                                      \
                                   Bblock                                                                                               \
                                   PRINT_ERREUR("la nature du z0 a detruire n'est pas reconnue");                                       \
                                   Eblock                                                                                               \
                              EDef                                                                                                      \
                              Eblock                                                                                                    \
                         ECho                                                                                                           \
                         DESTRUCTION_D_UNE_PARTICULE(z0_a_detruire);                                                                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'z0_a_detruire' n'est ni 'Z0 REEL' ni 'Z0 VIRTUEL'");                                            \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Destruction d'un z0 (REEL ou VIRTUEL).                                                    */
#define   VISUALISATION_DE_L_ENSEMBLE_DES_Z0S                                                                                           \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_Z0S_EXISTANTS(BLOC(VISUALISATION_D_UN_Z0(z0D1);););                                                    \
                                        /* Et visualisation du z0...                                                                 */ \
                    Eblock                                                                                                              \
                                        /* Visualisation de la liste des z0s presents dans le proton.                                */
#define   ___DEPLACEMENT_DE_L_ENSEMBLE_DES_Z0S                                                                                          \
                    Bblock                                                                                                              \
                    ENSEMBLE_DES_Z0S_EXISTANTS(BLOC(DEPLACEMENT_D_UN_Z0(z0D1);                                                          \
                                        /* Deplacement du z0...                                                                      */ \
                                                    Test(EST_HORS_DE_L_UNIVERS(z0D1))                                                   \
                                                         Bblock                                                                         \
                                                         DESTRUCTION_D_UN_Z0(z0D1);                                                     \
                                        /* Et sa destruction s'il sort de l'univers de la simulation...                              */ \
                                                         TRACE_D_UN_EVENEMENT(Prin1("SORTIE DE L'UNIVERS      Z(%d) --> VIDE"           \
                                                                                   ,ETIQUETTE(z0D1)                                     \
                                                                                    )                                                   \
                                                                              );                                                        \
                                                         Eblock                                                                         \
                                                    ATes                                                                                \
                                                         Bblock                                                                         \
                                                         Eblock                                                                         \
                                                    ETes                                                                                \
                                                    )                                                                                   \
                                               );                                                                                       \
                    Eblock                                                                                                              \
                                        /* Deplacement de la liste des z0s presents dans le proton (VIRTUELs).                       */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(DEPLACEMENT_DE_L_ENSEMBLE_DES_Z0S,G,___DEPLACEMENT_DE_L_ENSEMBLE_DES_Z0S))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D E S   D I F F E R E N T S   E V E N E M E N T S                                                    */
/*        D A N S   L A   V I E   D E S   P A R T I C U L E S  :                                                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Notations :                                                                                                                */
/*                                                                                                                                   */
/*                  V                   Vide,                                                                                        */
/*                                                                                                                                   */
/*                  Q                   Quark,                                                                                       */
/*                                                                                                                                   */
/*                  AQ                  Anti-Quark,                                                                                  */
/*                                                                                                                                   */
/*                  G                   Gluon,                                                                                       */
/*                                                                                                                                   */
/*                  ___                 -->,                                                                                         */
/*                                                                                                                                   */
/*                  x                   "union" ou ".".                                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EDITER_LES_MESSAGES_DES_PROCESSUS_INCOMPLETS                                                                                  \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(editer_les_messages_des_processus_incomplets,EDITER_LES_MESSAGES_DES_PROCESSUS_INCOMPLETS)));
                                        /* Indique s'il faut ('VRAI') ou pas  ('FAUX') editer les messages relatifs aux processus    */
                                        /* encore incomplets dans 'PROCESSUS_INCOMPLET(...)'.                                        */
#define   PROCESSUS_INCOMPLET(message)                                                                                                  \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_les_messages_des_processus_incomplets))                                                         \
                         Bblock                                                                                                         \
                         SEQUENCE_INCOMPLETE(message);                                                                                  \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Sequence destinee a montrer quels sont les processus encore incomplets, et permettant     */ \
                                        /* donc de faciliter le "prototypage"...                                                     */

#define   CREATION_D_UN_QUARK_VIRTUEL(quark,qs,position_initiale,vitesse_initiale,qr,qv,qb)                                             \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_QUARK_VIRTUEL(quark,qs,position_initiale,vitesse_initiale,qr,qv,qb);                                \
                                        /* Initialisation a priori du quark courant...                                               */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un quark VIRTUEL.                                            */
#define   DESTRUCTION_D_UN_QUARK_VIRTUEL(quark)                                                                                         \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(quark),QUARK_VIRTUEL))                                                                             \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_QUARK(quark);                                                                                 \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'quark' a detruire n'est pas 'QUARK VIRTUEL'");                                                  \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un quark VIRTUEL...                                                         */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un quark VIRTUEL...                                                         */

#define   CREATION_D_UN_ANTI_QUARK_VIRTUEL(anti_quark,qs,position_initiale,vitesse_initiale,qr,qv,qb)                                   \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_ANTI_QUARK_VIRTUEL(anti_quark,qs,position_initiale,vitesse_initiale,qr,qv,qb);                      \
                                        /* Initialisation a priori de l'anti-quark courant...                                        */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un anti-quark VIRTUEL.                                       */
#define   DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quark)                                                                               \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(anti_quark),ANTI_QUARK_VIRTUEL))                                                                   \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_ANTI_QUARK(anti_quark);                                                                       \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'anti_quark' a detruire n'est pas 'ANTI-QUARK VIRTUEL'");                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un anti-quark VIRTUEL...                                                    */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un anti-quark VIRTUEL...                                                    */

#define   CREATION_D_UN_GLUON_VIRTUEL(gluon,position_initiale,vitesse_initiale,gr,gv,gb)                                                \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_GLUON_VIRTUEL(gluon,position_initiale,vitesse_initiale,gr,gv,gb);                                   \
                                        /* Initialisation a priori du gluon courant...                                               */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un gluon VIRTUEL.                                            */
#define   DESTRUCTION_D_UN_GLUON_VIRTUEL(gluon)                                                                                         \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(gluon),GLUON_VIRTUEL))                                                                             \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_GLUON(gluon);                                                                                 \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'gluon' a detruire n'est pas 'GLUON VIRTUEL'");                                                  \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un gluon VIRTUEL...                                                         */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un gluon VIRTUEL...                                                         */

#define   CREATION_D_UN_ELECTRON_VIRTUEL(electron,es,position_initiale,vitesse_initiale)                                                \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_ELECTRON_VIRTUEL(electron,es,position_initiale,vitesse_initiale);                                   \
                                        /* Initialisation a priori de l'electron courant...                                          */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un electron VIRTUEL.                                         */
#define   DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electron)                                                                                   \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(electron),ELECTRON_VIRTUEL))                                                                       \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_ELECTRON(electron);                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'electron' a detruire n'est pas 'ELECTRON VIRTUEL'");                                            \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un electron VIRTUEL...                                                      */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un electron VIRTUEL...                                                      */

#define   CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electron,es,position_initiale,vitesse_initiale)                                      \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electron,es,position_initiale,vitesse_initiale);                         \
                                        /* Initialisation a priori de l'anti-electron courant...                                     */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un anti-electron VIRTUEL.                                    */
#define   DESTRUCTION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electron)                                                                         \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(anti_electron),ANTI_ELECTRON_VIRTUEL))                                                             \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electron);                                                                 \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'anti_electron' a detruire n'est pas 'ANTI-ELECTRON VIRTUEL'");                                  \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un anti-electron VIRTUEL...                                                 */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un anti-electron VIRTUEL...                                                 */

#define   CREATION_D_UN_NEUTRINO_VIRTUEL(neutrino,ns,position_initiale,vitesse_initiale)                                                \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_NEUTRINO_VIRTUEL(neutrino,ns,position_initiale,vitesse_initiale);                                   \
                                        /* Initialisation a priori du neutrino courant...                                            */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un neutrino VIRTUEL.                                         */
#define   DESTRUCTION_D_UN_NEUTRINO_VIRTUEL(neutrino)                                                                                   \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(neutrino),NEUTRINO_VIRTUEL))                                                                       \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_NEUTRINO(neutrino);                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'neutrino' a detruire n'est pas 'NEUTRINO VIRTUEL'");                                            \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un neutrino VIRTUEL...                                                      */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un neutrino VIRTUEL...                                                      */

#define   CREATION_D_UN_PHOTON_VIRTUEL(photon,position_initiale,vitesse_initiale)                                                       \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_PHOTON_VIRTUEL(photon,position_initiale,vitesse_initiale);                                          \
                                        /* Initialisation a priori du photon courant...                                              */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un photon VIRTUEL.                                           */
#define   DESTRUCTION_D_UN_PHOTON_VIRTUEL(photon)                                                                                       \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(photon),PHOTON_VIRTUEL))                                                                           \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_PHOTON(photon);                                                                               \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'photon' a detruire n'est pas 'PHOTON VIRTUEL'");                                                \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un photon VIRTUEL...                                                        */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un photon VIRTUEL...                                                        */

#define   CREATION_D_UN_Z0_VIRTUEL(z0,position_initiale,vitesse_initiale)                                                               \
                    Bblock                                                                                                              \
                    DEFINITION_D_UN_Z0_VIRTUEL(z0,position_initiale,vitesse_initiale);                                                  \
                                        /* Initialisation a priori du z0 courant...                                                  */ \
                    Eblock                                                                                                              \
                                        /* Creation et initialisation d'un z0 VIRTUEL.                                               */
#define   DESTRUCTION_D_UN_Z0_VIRTUEL(z0)                                                                                               \
                    Bblock                                                                                                              \
                    Test(IFEQ(NATURE(z0),Z0_VIRTUEL))                                                                                   \
                         Bblock                                                                                                         \
                         DESTRUCTION_D_UN_Z0(z0);                                                                                       \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         PRINT_ERREUR("'z0' a detruire n'est pas 'Z0 VIRTUEL'");                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Destruction d'un z0 VIRTUEL...                                                            */ \
                    Eblock                                                                                                              \
                                        /* Destruction d'un z0 VIRTUEL...                                                            */



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.