/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N S   D E S   E V E N E M E N T S   C O N D I T I O N N E L S   P O U R   L E S   P A R T I C U L E S  : */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrq/di_elec.LJ$I' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E F I N I T I O N   D U   V O I S I N A G E   D ' E C H A N G E  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   VOISINAGE_D_INTERACTION_2_POUR_2_PARTICULES                                                                                   \
                    GRO5(GRO16(FRA2(VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES)))
DEFV(Local,DEFV(Float,INIT(voisinage_2_D1_D2,VOISINAGE_D_INTERACTION_2_POUR_2_PARTICULES)));
                                        /* Distance en-dessous de laquelle 2 electrons (ou deux anti-electrons) peuvent echanger un  */
                                        /* photon dans des evenements du type :                                                      */
                                        /*                                                                                           */
                                        /*                  ELECTROWEAK_EMISSION_E___ExP(...),                                       */
                                        /*                  ELECTROWEAK_EMISSION_AE___AExP(...).                                     */
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R C E P T I O N   D ' U N E   P A R T I C U L E   P A R   U N   P H O T O N  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INTERCEPTION_PARTICULE_PAR_UN_PHOTON(particule_cible,particule_emettrice,photon_emis,module_vitesse_photon,duree_vie_photon)  \
                    INTERCEPTION_PARTICULE_PAR_UN_GLUON(particule_cible                                                                 \
                                                       ,particule_emettrice                                                             \
                                                       ,photon_emis                                                                     \
                                                       ,module_vitesse_photon                                                           \
                                                       ,duree_vie_photon                                                                \
                                                        )                                                                               \
                                        /* Interception d'une particule par un photon...                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R C E P T I O N   D ' U N E   P A R T I C U L E   P A R   U N   Z 0  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   INTERCEPTION_PARTICULE_PAR_UN_Z0(particule_cible,particule_emettrice,z0_emis,module_vitesse_z0,duree_vie_z0)                  \
                    INTERCEPTION_PARTICULE_PAR_UN_GLUON(particule_cible                                                                 \
                                                       ,particule_emettrice                                                             \
                                                       ,z0_emis                                                                         \
                                                       ,module_vitesse_z0                                                               \
                                                       ,duree_vie_z0                                                                    \
                                                        )                                                                               \
                                        /* Interception d'une particule par un z0...                                                 */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E D U C T I O N   D U   N O M B R E   D ' E V E N E M E N T S   R E L A T I F S                                          */
/*        A U X   E L E C T R O N S   E T   A U X   A N T I - E L E C T R O N S   V I R T U E L S  :                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   FACTEUR_REDUCTIF_DES_PROBABILITES_RELATIVES_AUX_ELECTRONS_ET_ANTI_ELECTRONS_VIRTUELS                                          \
                    GRO1(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(facteur_reductif_des_probabilites_relatives_aux_electrons_et_anti_electrons_virtuels
                          ,FACTEUR_REDUCTIF_DES_PROBABILITES_RELATIVES_AUX_ELECTRONS_ET_ANTI_ELECTRONS_VIRTUELS
                           )
                )
     );
                                        /* Facteur multiplicatif dans [0,1] permettant de passer des probabilites relatives aux      */
                                        /* electrons et anti-electrons REELs a celles des electrons et anti-electrons VIRTUELs.      */

#define   LIMIT_VIRT(probabilite,particule)                                                                                             \
                    MUL2(COND(IFET(IFNE(NATURE(particule),ELECTRON_VIRTUEL)                                                             \
                                  ,IFNE(NATURE(particule),ANTI_ELECTRON_VIRTUEL)                                                        \
                                   )                                                                                                    \
                             ,FU                                                                                                        \
                             ,facteur_reductif_des_probabilites_relatives_aux_electrons_et_anti_electrons_virtuels                      \
                              )                                                                                                         \
                        ,probabilite                                                                                                    \
                         )                                                                                                              \
                                        /* Afin de simuler une perte d'energie des particules au cours du temps, il faut reduire     */ \
                                        /* le nombre des evenements relatifs aux electrons virtuels, et en particulier leurs         */ \
                                        /* emissions de bosons, ce qui limitera alors le nombre de materialisation de ces derniers.  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        O R I E N T A T I O N   D E   L ' A X E   ' OZ2 '  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(particule)                                                                                  \
                    DEFV(Float,INIT(orientation_de_l_axe_OZ,orientation_aleatoire_de_l_axe_OZ(particule)));                             \
                                        /* Cas ou l'axe 'OZ' doit etre oriente aleatoirement independamment de 'particule'...        */

BFonctionF

DEFV(Local,DEFV(FonctionF,orientation_aleatoire_de_l_axe_OZ(particule_de_reference)))
                                        /* ATTENTION, cette fonction a ete introduite parce qu'il est devenu impossible de mettre    */
                                        /* des instructions executables dans 'ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(...)' depuis que     */
                                        /* cette procedure est utilisee dans '$xrq/di_elec.LH$I'...                                  */
DEFV(Argument,DEFV(particule,POINTERs(particule_de_reference)));
                                        /* Particule de reference (inutilisee...).                                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Float,INIT(orientation_de_l_axe_OZ,FLOT__UNDEF));
                                        /* Parametre donnant le sens de l'axe 'OZ' (+1 ou -1)...                                     */
     /*..............................................................................................................................*/
     GENERATION_D_UNE_VALEUR(orientation_de_l_axe_OZ,NEGA(FU),NEUT(FU));
                                        /* Calcul d'une valeur aleatoire dans [-1,+1].                                               */
     RETU(COND(IZGE(orientation_de_l_axe_OZ)
              ,NEUT(FU)
              ,NEGA(FU)
               )
          );
                                        /* Et renvoi a partir de la de +1 ou -1...                                                   */
     Eblock

EFonctionF

#define   ORIENTATION_A_PRIORI_DE_L_AXE_OZ(particule)                                                                                   \
                    DEFV(Float,INIT(orientation_de_l_axe_OZ,SENS_DE_L_AXE_OZ(particule)));                                              \
                                        /* Cas ou l'axe 'OZ' doit etre oriente en fonction de la particule 'particule'...            */
#define   SENS_DE_L_AXE_OZ(particule)                                                                                                   \
                    COND(IFOU(IFEQ(particule,electron_1_REEL),IFEQ(particule,neutrino_REEL))                                            \
                        ,NEGA(FU)                                                                                                       \
                        ,COND(IFEQ(particule,electron_2_REEL)                                                                           \
                             ,NEUT(FU)                                                                                                  \
                             ,NEUT(FU)                                                                                                  \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Orientation de l'axe 'OZ2' en fonction de l'identite de la particule. On notera que       */ \
                                        /* l'on a en general la configuration :                                                      */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /*              OY1 |                                                                        */ \
                                        /*                  |                   OZ2 /                                                */ \
                                        /*                  |                      /                                                 */ \
                                        /*                  |                     /                                                  */ \
                                        /*                  | electron REEL 1    /                                                   */ \
                                        /*                  | + + + + + + + + + O------------------- + + + + + + + + +               */ \
                                        /*                  |  neutrino REEL    | *             OX2                                  */ \
                                        /*                  |                   |  *                                                 */ \
                                        /*                  |                   |   *                                                */ \
                                        /*                  |                   |    * photon                                        */ \
                                        /*                  |                   |                                                    */ \
                                        /*                  |               OY2 |                                                    */ \
                                        /*                  |                                                                        */ \
                                        /*                  |                                                                        */ \
                                        /*                  |                                                                        */ \
                                        /*                  |               OY2 |                                                    */ \
                                        /*                  |                   |                                                    */ \
                                        /*                  |                   |    * photon                                        */ \
                                        /*                  |                   |   *                                                */ \
                                        /*                  |                   |  *                                                 */ \
                                        /*                  | electron          | *                                                  */ \
                                        /*                  | + + + + + + + + + O------------------- + + + + + + + + +               */ \
                                        /*                  |  REEL 2          /                OX2                                  */ \
                                        /*                  |                 /                                                      */ \
                                        /*                  |                /                                                       */ \
                                        /*                  |           OZ2 /                                                        */ \
                                        /*                  |                                                                        */ \
                                        /*                  |                                                                        */ \
                                        /*                  O-----------------------------------------------------------             */ \
                                        /*                 /                                                        OX1              */ \
                                        /*                /                                                                          */ \
                                        /*               /                                                                           */ \
                                        /*              /                                                                            */ \
                                        /*             /                                                                             */ \
                                        /*        OZ1 /                                                                              */ \
                                        /*                                                                                           */ \
                                        /*                                                                                           */ \
                                        /* d'ou le facteur multiplicatif valant plus ou moins un...                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   E L E C T R O N  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_E                                                                                                     \
                    GRO9(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_E,PROBABILITE_DE_INCHANGE_E)));
                                        /* Probabilite du vertex : E --> E.                                                          */
#define   INCHANGE_E(electronD1)                                                                                                        \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Vertex : E --> E.                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   E L E C T R O M A G N E T I Q U E                                                                  */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E L E C T R O N  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExP                                                                                   \
                    GRO1(FRA10(FRA10(PROBABILITE_DE_INCHANGE_E)))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_E___ExP,PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExP)));
                                        /* Probabilite du vertex : E --> ExP.                                                        */
#define   ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExP                                                                            \
                    FZERO
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExP
                          ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExP
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : E --> ExP.                                              */
#define   INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP                                                               \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP
                            ,INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP
                             )
                )
     );
                                        /* Cet indicateur precise si l'echange d'un photon se fait par une simple emission par un    */
                                        /* electron ('FAUX') ou par le processus d'interception ('VRAI').                            */
#define   PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP                                                 \
                    GRO1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP
                          ,PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP
                           )
                )
     );
                                        /* Cet valeur precise la probabilite d'echange d'un photon par le processus d'interception.  */
DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_E___ExP,ZERO)));
                                        /* Compteur des vertex : E --> ExP.                                                          */
#define   ELECTROWEAK_EMISSION_E___ExP(electronD1,electronA1,photonA1)                                                                  \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(electronD1);                                                                      \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(electronD1,espace_temps,vitesse)          \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de 'electronD1'...                                      */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExP' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le electron */ \
                                        /* se deplace le long de l'axe 'OX2'.                                                        */ \
                    CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(electronD1);                               \
                                        /* On fixe a priori la conservation de la vitesse du electron...                             */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2))                                                         \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExP)               \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ELECTRON_VIRTUEL(electronA1                                                                           \
                                                  ,LEPTON_PAS_DE_SAVEUR                                                                 \
                                                  ,ASI2(electronD1,espace_temps,position_courante)                                      \
                                                  ,vitesse_courante                                                                     \
                                                   );                                                                                   \
                    CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(electronD1,electronA1);                                        \
                                        /* La date de naisance est transmise du pere au fils...                                      */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_PHOTON;                                                       \
                                        /* Le module de la vitesse des photons est figees, puisque ces particules se deplacent a la  */ \
                                        /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO2(FRA8(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExP)               \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_PHOTON_VIRTUEL(photonA1                                                                               \
                                                ,ASI2(electronD1,espace_temps,position_courante)                                        \
                                                ,vitesse_courante                                                                       \
                                                 );                                                                                     \
                                        /* ATTENTION : 'photonA1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra */ \
                                        /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' au cas ou   */ \
                                        /* ce photon aurait la possibilite raisonnable d'intercepter un anti-electron...             */ \
                    EGAL(electronD2,electronD1);                                                                                        \
                                        /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire,           */ \
                                        /* 'electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'electronD1' en tant que    */ \
                                        /* 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion terrible... */ \
                    RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2                                                               \
                                             ,interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP                           \
                                             ,probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP             \
                                             ,electronD2,electronA1                                                                     \
                                             ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL)                             \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL)                          \
                                                             )                                                                          \
                                                       ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL)                        \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL)                     \
                                                             )                                                                          \
                                                        )                                                                               \
                                                  ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE)                          \
                                                  ,IFLT(pDISTANCE(electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2))             \
                                                   )                                                                                    \
                                              );                                                                                        \
                                        /* Recherche d'un 'electron_ou_anti_electronA2' proche du electron 'electronD1' (alias       */ \
                                        /* 'electronD2'...) et qui ne soit pas encore vise par un photon (d'ou le test sur la        */ \
                                        /* duree de vie moyenne).                                                                    */ \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                    Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         INTERCEPTION_PARTICULE_PAR_UN_PHOTON(electron_ou_anti_electronA2                                               \
                                                             ,electronD1                                                                \
                                                             ,photonA1,VITESSE_DES_PHOTONS,DUREE_DE_VIE_MOYENNE_COURANTE(photonA1)      \
                                                              );                                                                        \
                                        /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron    */ \
                                        /* 'electronD1', on tente l'interception de 'electron_ou_anti_electronA2' par 'photonA1'     */ \
                                        /* emis par 'electronD1'...                                                                  */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \
                                        /* 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' peut changer l'etat de                        */ \
                                        /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'...          */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION);            \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(photonA1,NE_PAS_PERTURBER_UNE_POSITION);              \
                                        /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de       */ \
                                        /* 'electronD1', on conserve pour le photon 'photonA1' la vitesse 'vitesse_courante'...      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2);                                           \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(photonA1);                                                              \
                                        /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron    */ \
                                        /* 'electronD1', on  allonge artificiellement la duree de vie moyenne de                     */ \
                                        /* 'electron_ou_anti_electronA2' et 'photonA1' afin de reduire au maximum les chances        */ \
                                        /* que se produisent pour eux des evenements conditionnels du type :                         */ \
                                        /*                                                                                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS,                        */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS.                          */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1);                                                         \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                                        /* Cas ou aucune particule ne peut etre "visee" :                                            */ \
                         TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_E___ExP                 E(%d) --> E(%d)xP(%d)"                \
                                                   ,ETIQUETTE(electronD1)                                                               \
                                                   ,ETIQUETTE(electronA1)                                                               \
                                                   ,ETIQUETTE(photonA1)                                                                 \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou une particule est "visee" :                                                        */ \
                         TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_E___ExP                 E(%d) --> E(%d)xP(%d) =O=> EAE(%d)"   \
                                                   ,ETIQUETTE(electronD1)                                                               \
                                                   ,ETIQUETTE(electronA1)                                                               \
                                                   ,ETIQUETTE(photonA1)                                                                 \
                                                   ,ETIQUETTE(electron_ou_anti_electronA2)                                              \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    DESTRUCTION_D_UN_ELECTRON(electronD1);                                                                              \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet,            */ \
                                        /* 'electronD1' peut etre un electron REEL...                                                */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                    \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                                 \
                    INCR(compteur_de_ELECTROWEAK_EMISSION_E___ExP,I);                                                                   \
                    Eblock                                                                                                              \
                                        /* Vertex : E --> ExP.                                                                       */

#define   PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExZ                                                                                   \
                    GRO0(FRA10(FRA10(PROBABILITE_DE_INCHANGE_E)))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_E___ExZ,PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExZ)));
                                        /* Probabilite du vertex : E --> ExZ.                                                        */
#define   ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExZ                                                                            \
                    FZERO
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExZ
                          ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExZ
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : E --> ExZ.                                              */
#define   INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_E___ExZ                                                                   \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_E___ExZ
                            ,INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_E___ExZ
                             )
                )
     );
                                        /* Cet indicateur precise si l'echange d'un z0 se fait par une simple emission par un        */
                                        /* electron ('FAUX') ou par le processus d'interception ('VRAI').                            */
DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_E___ExZ,ZERO)));
                                        /* Compteur des vertex : E --> ExZ.                                                          */
#define   ELECTROWEAK_EMISSION_E___ExZ(electronD1,electronA1,z0A1)                                                                      \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(electronD1);                                                                      \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(electronD1,espace_temps,vitesse)          \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de 'electronD1'...                                      */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExZ' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le electron */ \
                                        /* se deplace le long de l'axe 'OX2'.                                                        */ \
                    CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(electronD1);                               \
                                        /* On fixe a priori la conservation de la vitesse du electron...                             */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2))                                                         \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExZ)               \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ELECTRON_VIRTUEL(electronA1                                                                           \
                                                  ,LEPTON_PAS_DE_SAVEUR                                                                 \
                                                  ,ASI2(electronD1,espace_temps,position_courante)                                      \
                                                  ,vitesse_courante                                                                     \
                                                   );                                                                                   \
                    CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(electronD1,electronA1);                                        \
                                        /* La date de naisance est transmise du pere au fils...                                      */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0;                                                           \
                                        /* Le module de la vitesse des z0s est figees, puisque ces particules se deplacent a la      */ \
                                        /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO2(FRA8(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExZ)               \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_Z0_VIRTUEL(z0A1                                                                                       \
                                            ,ASI2(electronD1,espace_temps,position_courante)                                            \
                                            ,vitesse_courante                                                                           \
                                             );                                                                                         \
                                        /* ATTENTION : 'z0A1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra     */ \
                                        /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' au cas ou       */ \
                                        /* ce z0 aurait la possibilite raisonnable d'intercepter un anti-electron...                 */ \
                    EGAL(electronD2,electronD1);                                                                                        \
                                        /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire,           */ \
                                        /* 'electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'electronD1' en tant que    */ \
                                        /* 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion terrible... */ \
                    RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2                                                               \
                                             ,interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_E___ExZ                               \
                                             ,EVENEMENT_CERTAIN                                                                         \
                                             ,electronD2,electronA1                                                                     \
                                             ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL)                             \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL)                          \
                                                             )                                                                          \
                                                       ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL)                        \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL)                     \
                                                             )                                                                          \
                                                        )                                                                               \
                                                  ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE)                          \
                                                  ,IFLT(pDISTANCE(electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2))             \
                                                   )                                                                                    \
                                              );                                                                                        \
                                        /* Recherche d'un 'electron_ou_anti_electronA2' proche du electron 'electronD1' (alias       */ \
                                        /* 'electronD2'...) et qui ne soit pas encore vise par un z0 (d'ou le test sur la            */ \
                                        /* duree de vie moyenne).                                                                    */ \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                    Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         INTERCEPTION_PARTICULE_PAR_UN_Z0(electron_ou_anti_electronA2                                                   \
                                                         ,electronD1                                                                    \
                                                         ,z0A1,VITESSE_DES_Z0S,DUREE_DE_VIE_MOYENNE_COURANTE(z0A1)                      \
                                                          );                                                                            \
                                        /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron    */ \
                                        /* 'electronD1', on tente l'interception de 'electron_ou_anti_electronA2' par 'z0A1' emis    */ \
                                        /* par 'electronD1'...                                                                       */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \
                                        /* 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' peut changer l'etat de                            */ \
                                        /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'...          */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION);            \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,NE_PAS_PERTURBER_UNE_POSITION);                  \
                                        /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de       */ \
                                        /* 'electronD1', on conserve pour le z0 'z0A1' la vitesse 'vitesse_courante'...              */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2);                                           \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(z0A1);                                                                  \
                                        /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron    */ \
                                        /* 'electronD1', on  allonge artificiellement la duree de vie moyenne de                     */ \
                                        /* 'electron_ou_anti_electronA2' et de 'z0A1' afin de reduire au maximum les chances que se  */ \
                                        /* se produisent pour eux des evenements conditionnels du type :                             */ \
                                        /*                                                                                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS,                        */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S.                              */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1);                                                         \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                                        /* Cas ou aucune particule ne peut etre "visee" :                                            */ \
                         TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_E___ExZ                 E(%d) --> E(%d)xZ(%d)"                \
                                                   ,ETIQUETTE(electronD1)                                                               \
                                                   ,ETIQUETTE(electronA1)                                                               \
                                                   ,ETIQUETTE(z0A1)                                                                     \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou une particule est "visee" :                                                        */ \
                         TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_E___ExZ                 E(%d) --> E(%d)xZ(%d) =O=> EAE(%d)"   \
                                                   ,ETIQUETTE(electronD1)                                                               \
                                                   ,ETIQUETTE(electronA1)                                                               \
                                                   ,ETIQUETTE(z0A1)                                                                     \
                                                   ,ETIQUETTE(electron_ou_anti_electronA2)                                              \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    DESTRUCTION_D_UN_ELECTRON(electronD1);                                                                              \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet,            */ \
                                        /* 'electronD1' peut etre un electron REEL...                                                */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                    \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                                 \
                    INCR(compteur_de_ELECTROWEAK_EMISSION_E___ExZ,I);                                                                   \
                    Eblock                                                                                                              \
                                        /* Vertex : E --> ExZ.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D E   E L E C T R O N S  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ELECTRON                                                                         \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_electron
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ELECTRON
                           )
                )
     );
                                        /* Probabilite pour qu'un electron present dans le proton soit la "victime" d'un evenement   */
                                        /* conditionnel du type :                                                                    */
                                        /*                                                                                           */
                                        /*                  INCHANGE_E,                                                              */
                                        /*                  ELECTROWEAK_EMISSION_E___ExP,                                            */
                                        /*                  ELECTROWEAK_EMISSION_E___ExZ.                                            */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS                                                                           \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le electron courant soit la "victime" d'un evenement conditionnel    */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_E,                                                              */ \
                                        /*                  ELECTROWEAK_EMISSION_E___ExP,                                            */ \
                                        /*                  ELECTROWEAK_EMISSION_E___ExZ.                                            */ \
                                        /*                                                                                           */ \
                    TOTALITE_DES_ELECTRONS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);                  \
                                                Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                             \
                                                                      ,electronD1                                                       \
                                                                      ,DUREE_DE_VIE_MOYENNE_COURANTE(electronD1)                        \
                                                                       )                                                                \
                                                         ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_electron)                 \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                     Bblock                                                                             \
                                                     DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                                \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_E,                                                              */ \
                                        /*                  ELECTROWEAK_EMISSION_E___ExP,                                            */ \
                                        /*                  ELECTROWEAK_EMISSION_E___ExZ.                                            */ \
                                        /*                                                                                           */ \
                                                     GENERATION_D_UNE_VALEUR                                                            \
                                                         (probabilite_de_choix                                                          \
                                                         ,EVENEMENT_IMPOSSIBLE                                                          \
                                                         ,ADD3(REGUL0(probabilite_de_INCHANGE_E)                                        \
                                                              ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExP            \
                                                                                ,electronD1                                             \
                                                                                 )                                                      \
                                                                      )                                                                 \
                                                              ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExZ            \
                                                                                ,electronD1                                             \
                                                                                 )                                                      \
                                                                      )                                                                 \
                                                               )                                                                        \
                                                          );                                                                            \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                                     DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                                \
                                                         (probabilite_de_choix);                                                        \
                                                     CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                          \
                                                         (REGUL0(probabilite_de_INCHANGE_E)                                             \
                                                         ,INCHANGE_E(electronD1)                                                        \
                                                          );                                                                            \
                                                     CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                          \
                                                         (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExP                 \
                                                                           ,electronD1                                                  \
                                                                            )                                                           \
                                                                 )                                                                      \
                                                         ,BLOC(Test(IFLT(nombre_total_de_photons_VIRTUELs                               \
                                                                        ,nombre_maximal_de_photons_VIRTUELs_du_di_electron              \
                                                                         )                                                              \
                                                                    )                                                                   \
                                                                    Bblock                                                              \
                                                                    ELECTROWEAK_EMISSION_E___ExP(electronD1                             \
                                                                                                ,electronA1                             \
                                                                                                ,photonA1                               \
                                                                                                 );                                     \
                                        /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee  */ \
                                        /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de photons */ \
                                        /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_E___ExP(...)' n'est        */ \
                                        /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel   */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne       */ \
                                        /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur    */ \
                                        /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...).                                         */ \
                                                                    Eblock                                                              \
                                                               ATes                                                                     \
                                                                    Bblock                                                              \
                                                                    Eblock                                                              \
                                                               ETes                                                                     \
                                                               )                                                                        \
                                                          );                                                                            \
                                                     CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                          \
                                                         (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExZ                 \
                                                                           ,electronD1                                                  \
                                                                            )                                                           \
                                                                 )                                                                      \
                                                         ,BLOC(Test(IFLT(nombre_total_de_z0s_VIRTUELs                                   \
                                                                        ,nombre_maximal_de_z0s_VIRTUELs_du_di_electron                  \
                                                                         )                                                              \
                                                                    )                                                                   \
                                                                    Bblock                                                              \
                                                                    ELECTROWEAK_EMISSION_E___ExZ(electronD1                             \
                                                                                                ,electronA1                             \
                                                                                                ,z0A1                                   \
                                                                                                 );                                     \
                                        /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee  */ \
                                        /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de z0s     */ \
                                        /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_E___ExZ(...)' n'est        */ \
                                        /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel   */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne       */ \
                                        /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur    */ \
                                        /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...).                                         */ \
                                                                    Eblock                                                              \
                                                               ATes                                                                     \
                                                                    Bblock                                                              \
                                                                    Eblock                                                              \
                                                               ETes                                                                     \
                                                               )                                                                        \
                                                          );                                                                            \
                                                     FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                                 \
                                                     Eblock                                                                             \
                                                ATes                                                                                    \
                                                     Bblock                                                                             \
                                                     Eblock                                                                             \
                                                ETes                                                                                    \
                                                );                                                                                      \
                                           );                                                                                           \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des electrons presents dans le proton          */ \
                                        /* (REELs ou VIRTUELs).                                                                      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS,E,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   A N T I - E L E C T R O N  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_AE                                                                                                    \
                    PROBABILITE_DE_INCHANGE_E
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_AE,PROBABILITE_DE_INCHANGE_AE)));
                                        /*                         _     _                                                           */
                                        /* Probabilite du vertex : E --> E.                                                          */
#define   INCHANGE_AE(anti_electronD1)                                                                                                  \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /*          _     _                                                                          */ \
                                        /* Vertex : E --> E.                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   E L E C T R O M A G N E T I Q U E                                                                  */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   A N T I - E L E C T R O N  :                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExP                                                                                 \
                    PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExP
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExP,PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExP)));
                                        /*                         _     _                                                           */
                                        /* Probabilite du vertex : E --> ExP.                                                        */
#define   ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExP                                                                          \
                    FZERO
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExP
                          ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExP
                           )
                )
     );
                                        /*                                   _     _                                                 */
                                        /* Dispersion de l'angle du vertex : E --> ExP.                                              */
#define   INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP                                                             \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP
                            ,INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP
                             )
                )
     );
                                        /* Cet indicateur precise si l'echange d'un photon se fait par une simple emission par un    */
                                        /* anti-electron ('FAUX') ou par le processus d'interception ('VRAI').                       */
#define   PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP                                               \
                    GRO1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP
                          ,PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP
                           )
                )
     );
                                        /* Cet valeur precise la probabilite d'echange d'un photon par le processus d'interception.  */
DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_AE___AExP,ZERO)));
                                        /*                       _     _                                                             */
                                        /* Compteur des vertex : E --> ExP.                                                          */
#define   ELECTROWEAK_EMISSION_AE___AExP(anti_electronD1,anti_electronA1,photonA1)                                                      \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(anti_electronD1);                                                                 \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(anti_electronD1,espace_temps,vitesse)     \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de 'anti_electronD1'...                                 */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                                        /*                                                                   _     _                 */ \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExP' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que             */ \
                                        /* l'anti-electron se deplace le long de l'axe 'OX2'.                                        */ \
                    CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(anti_electronD1);                          \
                                        /* On fixe a priori la conservation de la vitesse de l'anti-electron...                      */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2))                                                         \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExP)             \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1                                                                 \
                                                       ,LEPTON_PAS_DE_SAVEUR                                                            \
                                                       ,ASI2(anti_electronD1,espace_temps,position_courante)                            \
                                                       ,vitesse_courante                                                                \
                                                        );                                                                              \
                    CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(anti_electronD1,anti_electronA1);                              \
                                        /* La date de naisance est transmise du pere au fils...                                      */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_PHOTON;                                                       \
                                        /* Le module de la vitesse des photons est figees, puisque ces particules se deplacent a la  */ \
                                        /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO2(FRA8(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExP)             \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_PHOTON_VIRTUEL(photonA1                                                                               \
                                                ,ASI2(anti_electronD1,espace_temps,position_courante)                                   \
                                                ,vitesse_courante                                                                       \
                                                 );                                                                                     \
                                        /* ATTENTION : 'photonA1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra */ \
                                        /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' au cas ou   */ \
                                        /* ce photon aurait la possibilite raisonnable d'intercepter un electron...                  */ \
                    EGAL(anti_electronD2,anti_electronD1);                                                                              \
                                        /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire,           */ \
                                        /* 'anti_electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'anti_electronD1' en   */ \
                                        /* tant que 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion    */ \
                                        /* terrible...                                                                               */ \
                    RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2                                                               \
                                             ,interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP                         \
                                             ,probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP           \
                                             ,anti_electronD2,anti_electronA1                                                           \
                                             ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL)                             \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL)                          \
                                                             )                                                                          \
                                                       ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL)                        \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL)                     \
                                                             )                                                                          \
                                                        )                                                                               \
                                                  ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE)                          \
                                                  ,IFLT(pDISTANCE(anti_electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2))        \
                                                   )                                                                                    \
                                              );                                                                                        \
                                        /* Recherche d'un 'electron_ou_anti_electronA2' proche de l'anti-electron                    */ \
                                        /* 'anti_electronD1' (alias 'anti_electronD2') et qui ne soit pas encore vise par photon     */ \
                                        /* (d'ou le test sur la duree de vie moyenne).                                               */ \
                                        /* vie moyenne).                                                                             */ \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                    Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         INTERCEPTION_PARTICULE_PAR_UN_PHOTON(electron_ou_anti_electronA2                                               \
                                                             ,anti_electronD1                                                           \
                                                             ,photonA1,VITESSE_DES_PHOTONS,DUREE_DE_VIE_MOYENNE_COURANTE(photonA1)      \
                                                              );                                                                        \
                                        /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche de             */ \
                                        /* l'anti-electron 'anti_electronD1', on tente l'interception de                             */ \
                                        /* 'electron_ou_anti_electronA2' par 'photonA1' emis par  l'anti-electron 'anti_electronD1'. */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \
                                        /* 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' peut changer l'etat de                        */ \
                                        /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'...          */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION);       \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(photonA1,NE_PAS_PERTURBER_UNE_POSITION);              \
                                        /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de       */ \
                                        /* l'anti-electron 'anti_electronD1', on conserve pour le photon 'photonA1' la vitesse       */ \
                                        /* 'vitesse_courante'...                                                                     */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2);                                           \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(photonA1);                                                              \
                                        /* Lorsque l'on a trouve un electron 'electron_ou_anti_electronA2' suffisamment proche de    */ \
                                        /* 'electronD1', on allonge artificiellement la duree de vie moyenne de                      */ \
                                        /* 'electron_ou_anti_electronA2' et de 'photonA1' afin de reduire au maximum les chances que */ \
                                        /* que se produisent pour eux des evenements conditionnels du type :                         */ \
                                        /*                                                                                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS,                   */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS.                          */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1);                                          \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                                        /* Cas ou aucune particule ne peut etre "visee" :                                            */ \
                         TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_AE___AExP               AE(%d) --> AE(%d)xP(%d)"              \
                                                   ,ETIQUETTE(anti_electronD1)                                                          \
                                                   ,ETIQUETTE(anti_electronA1)                                                          \
                                                   ,ETIQUETTE(photonA1)                                                                 \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou une particule est "visee" :                                                        */ \
                         TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_AE___AExP               AE(%d) --> AE(%d)xP(%d) =O=> EAE(%d)" \
                                                   ,ETIQUETTE(anti_electronD1)                                                          \
                                                   ,ETIQUETTE(anti_electronA1)                                                          \
                                                   ,ETIQUETTE(photonA1)                                                                 \
                                                   ,ETIQUETTE(electron_ou_anti_electronA2)                                              \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electronD1);                                                                    \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronD1)' car en effet,  */ \
                                        /* 'anti_electronD1' peut etre un anti-electron REEL...                                      */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                    \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                                 \
                    INCR(compteur_de_ELECTROWEAK_EMISSION_AE___AExP,I);                                                                 \
                    Eblock                                                                                                              \
                                        /*          _     _                                                                          */ \
                                        /* Vertex : E --> ExP.                                                                       */

#define   PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExZ                                                                                 \
                    PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExZ
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExZ,PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExZ)));
                                        /*                         _     _                                                           */
                                        /* Probabilite du vertex : E --> ExZ.                                                        */
#define   ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExZ                                                                          \
                    FZERO
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExZ
                          ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExZ
                           )
                )
     );
                                        /*                                   _     _                                                 */
                                        /* Dispersion de l'angle du vertex : E --> ExZ.                                              */
#define   INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_AE___AExZ                                                                 \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_AE___AExZ
                            ,INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_AE___AExZ
                             )
                )
     );
                                        /* Cet indicateur precise si l'echange d'un z0 se fait par une simple emission par un        */
                                        /* anti-electron ('FAUX') ou par le processus d'interception ('VRAI').                       */
DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_AE___AExZ,ZERO)));
                                        /*                       _     _                                                             */
                                        /* Compteur des vertex : E --> ExZ.                                                          */
#define   ELECTROWEAK_EMISSION_AE___AExZ(anti_electronD1,anti_electronA1,z0A1)                                                          \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(anti_electronD1);                                                                 \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(anti_electronD1,espace_temps,vitesse)     \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de 'anti_electronD1'...                                 */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                                        /*                                                                   _     _                 */ \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExZ' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que             */ \
                                        /* l'anti-electron se deplace le long de l'axe 'OX2'.                                        */ \
                    CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(anti_electronD1);                          \
                                        /* On fixe a priori la conservation de la vitesse de l'anti-electron...                      */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2))                                                         \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExZ)             \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1                                                                 \
                                                       ,LEPTON_PAS_DE_SAVEUR                                                            \
                                                       ,ASI2(anti_electronD1,espace_temps,position_courante)                            \
                                                       ,vitesse_courante                                                                \
                                                        );                                                                              \
                    CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(anti_electronD1,anti_electronA1);                              \
                                        /* La date de naisance est transmise du pere au fils...                                      */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0;                                                           \
                                        /* Le module de la vitesse des z0s est figees, puisque ces particules se deplacent a la      */ \
                                        /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO2(FRA8(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExZ)             \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_Z0_VIRTUEL(z0A1                                                                                       \
                                            ,ASI2(anti_electronD1,espace_temps,position_courante)                                       \
                                            ,vitesse_courante                                                                           \
                                             );                                                                                         \
                                        /* ATTENTION : 'z0A1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra     */ \
                                        /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' au cas ou       */ \
                                        /* ce z0 aurait la possibilite raisonnable d'intercepter un electron...                      */ \
                    EGAL(anti_electronD2,anti_electronD1);                                                                              \
                                        /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire,           */ \
                                        /* 'anti_electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'anti_electronD1' en   */ \
                                        /* tant que 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion    */ \
                                        /* terrible...                                                                               */ \
                    RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2                                                               \
                                             ,interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_AE___AExZ                             \
                                             ,EVENEMENT_CERTAIN                                                                         \
                                             ,anti_electronD2,anti_electronA1                                                           \
                                             ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL)                             \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL)                          \
                                                             )                                                                          \
                                                       ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL)                        \
                                                            ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL)                     \
                                                             )                                                                          \
                                                        )                                                                               \
                                                  ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE)                          \
                                                  ,IFLT(pDISTANCE(anti_electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2))        \
                                                   )                                                                                    \
                                              );                                                                                        \
                                        /* Recherche d'un 'electron_ou_anti_electronA2' proche de l'anti-electron                    */ \
                                        /* 'anti_electronD1' (alias 'anti_electronD2') et qui ne soit pas encore vise par z0         */ \
                                        /* (d'ou le test sur la duree de vie moyenne).                                               */ \
                                        /* vie moyenne).                                                                             */ \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                    Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         INTERCEPTION_PARTICULE_PAR_UN_Z0(electron_ou_anti_electronA2                                                   \
                                                         ,anti_electronD1                                                               \
                                                         ,z0A1,VITESSE_DES_Z0S,DUREE_DE_VIE_MOYENNE_COURANTE(z0A1)                      \
                                                          );                                                                            \
                                        /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche de             */ \
                                        /* l'anti-electron 'anti_electronD1', on tente l'interception de                             */ \
                                        /* 'electron_ou_anti_electronA2' par 'z0A1' emis par  l'anti-electron 'anti_electronD1'...   */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \
                                        /* 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' peut changer l'etat de                            */ \
                                        /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'...          */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION);       \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,NE_PAS_PERTURBER_UNE_POSITION);                  \
                                        /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de       */ \
                                        /* l'anti-electron 'anti_electronD1', on conserve pour le z0 'z0A1' la vitesse               */ \
                                        /* 'vitesse_courante'...                                                                     */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2);                                           \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(z0A1);                                                                  \
                                        /* Lorsque l'on a trouve un electron 'electron_ou_anti_electronA2' suffisamment proche de    */ \
                                        /* 'electronD1', on allonge artificiellement la duree de vie moyenne de                      */ \
                                        /* 'electron_ou_anti_electronA2' et de 'z0A1' afin de reduire au maximum les chances que se  */ \
                                        /* que se produisent pour eux des evenements conditionnels du type :                         */ \
                                        /*                                                                                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS,                   */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S.                              */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1);                                          \
                    Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE))                                                       \
                         Bblock                                                                                                         \
                         TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_AE___AExZ               AE(%d) --> AE(%d)xZ(%d)"              \
                                                   ,ETIQUETTE(anti_electronD1)                                                          \
                                                   ,ETIQUETTE(anti_electronA1)                                                          \
                                                   ,ETIQUETTE(z0A1)                                                                     \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou une particule est "visee" :                                                        */ \
                         TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_AE___AExZ               AE(%d) --> AE(%d)xZ(%d) =O=> EAE(%d)" \
                                                   ,ETIQUETTE(anti_electronD1)                                                          \
                                                   ,ETIQUETTE(anti_electronA1)                                                          \
                                                   ,ETIQUETTE(z0A1)                                                                     \
                                                   ,ETIQUETTE(electron_ou_anti_electronA2)                                              \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electronD1);                                                                    \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronD1)' car en effet,  */ \
                                        /* 'anti_electronD1' peut etre un anti-electron REEL...                                      */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                    \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                                 \
                    INCR(compteur_de_ELECTROWEAK_EMISSION_AE___AExZ,I);                                                                 \
                    Eblock                                                                                                              \
                                        /*          _     _                                                                          */ \
                                        /* Vertex : E --> ExZ.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D ' A N T I - E L E C T R O N S  : */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ANTI_ELECTRON                                                                    \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_anti_electron
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ANTI_ELECTRON
                           )
                )
     );
                                        /* Probabilite pour qu'un anti-electron present dans le proton soit la "victime" d'un        */
                                        /* evenement conditionnel du type :                                                          */
                                        /*                                                                                           */
                                        /*                  INCHANGE_AE,                                                             */
                                        /*                  ELECTROWEAK_EMISSION_AE___AExP,                                          */
                                        /*                  ELECTROWEAK_EMISSION_AE___AExZ.                                          */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS                                                                      \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le anti-electron courant soit la "victime" d'un evenement            */ \
                                        /* conditionnel du type :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_AE,                                                             */ \
                                        /*                  ELECTROWEAK_EMISSION_AE___AExP,                                          */ \
                                        /*                  ELECTROWEAK_EMISSION_AE___AExZ.                                          */ \
                                        /*                                                                                           */ \
                    TOTALITE_DES_ANTI_ELECTRONS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);             \
                                                     Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                        \
                                                                           ,anti_electronD1                                             \
                                                                           ,DUREE_DE_VIE_MOYENNE_COURANTE(anti_electronD1)              \
                                                                            )                                                           \
                                                              ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_anti_electron)       \
                                                               )                                                                        \
                                                          )                                                                             \
                                                          Bblock                                                                        \
                                                          DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                           \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_AE,                                                             */ \
                                        /*                  ELECTROWEAK_EMISSION_AE___AExP,                                          */ \
                                        /*                  ELECTROWEAK_EMISSION_AE___AExZ.                                          */ \
                                        /*                                                                                           */ \
                                                          GENERATION_D_UNE_VALEUR                                                       \
                                                              (probabilite_de_choix                                                     \
                                                              ,EVENEMENT_IMPOSSIBLE                                                     \
                                                              ,ADD3(REGUL0(probabilite_de_INCHANGE_AE)                                  \
                                                                   ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExP     \
                                                                                     ,anti_electronD1                                   \
                                                                                      )                                                 \
                                                                           )                                                            \
                                                                   ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExZ     \
                                                                                     ,anti_electronD1                                   \
                                                                                      )                                                 \
                                                                           )                                                            \
                                                                    )                                                                   \
                                                               );                                                                       \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                                          DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(probabilite_de_choix);    \
                                                          CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                     \
                                                              (REGUL0(probabilite_de_INCHANGE_AE)                                       \
                                                              ,INCHANGE_AE(anti_electronD1)                                             \
                                                               );                                                                       \
                                                          CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                     \
                                                              (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExP          \
                                                                                ,anti_electronD1                                        \
                                                                                 )                                                      \
                                                                      )                                                                 \
                                                              ,BLOC(Test(IFLT(nombre_total_de_photons_VIRTUELs                          \
                                                                             ,nombre_maximal_de_photons_VIRTUELs_du_di_electron         \
                                                                              )                                                         \
                                                                         )                                                              \
                                                                         Bblock                                                         \
                                                                         ELECTROWEAK_EMISSION_AE___AExP(anti_electronD1                 \
                                                                                                       ,anti_electronA1                 \
                                                                                                       ,photonA1                        \
                                                                                                        )                               \
                                        /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee  */ \
                                        /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de photons */ \
                                        /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_AE___AExP(...)' n'est      */ \
                                        /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel   */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne       */ \
                                        /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur    */ \
                                        /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...).                                         */ \
                                                                         Eblock                                                         \
                                                                    ATes                                                                \
                                                                         Bblock                                                         \
                                                                         Eblock                                                         \
                                                                    ETes                                                                \
                                                                    )                                                                   \
                                                               );                                                                       \
                                                          CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                     \
                                                              (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExZ          \
                                                                                ,anti_electronD1                                        \
                                                                                 )                                                      \
                                                                      )                                                                 \
                                                              ,BLOC(Test(IFLT(nombre_total_de_z0s_VIRTUELs                              \
                                                                             ,nombre_maximal_de_z0s_VIRTUELs_du_di_electron             \
                                                                              )                                                         \
                                                                         )                                                              \
                                                                         Bblock                                                         \
                                                                         ELECTROWEAK_EMISSION_AE___AExZ(anti_electronD1                 \
                                                                                                       ,anti_electronA1                 \
                                                                                                       ,z0A1                            \
                                                                                                        )                               \
                                        /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee  */ \
                                        /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de z0s     */ \
                                        /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_AE___AExZ(...)' n'est      */ \
                                        /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel   */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne       */ \
                                        /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur    */ \
                                        /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...).                                         */ \
                                                                         Eblock                                                         \
                                                                    ATes                                                                \
                                                                         Bblock                                                         \
                                                                         Eblock                                                         \
                                                                    ETes                                                                \
                                                                    )                                                                   \
                                                               );                                                                       \
                                                          FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                            \
                                                          Eblock                                                                        \
                                                     ATes                                                                               \
                                                          Bblock                                                                        \
                                                          Eblock                                                                        \
                                                     ETes                                                                               \
                                                     );                                                                                 \
                                                );                                                                                      \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des anti-electrons presents dans le proton     */ \
                                        /* (REELs ou VIRTUELs).                                                                      */

BFonctionI

#define   ___EVENEMENTS_ANTI_ELECTRONS                                                                                                  \
                    ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS
                                        /* Afin de reduire la longueur de la ligne suivante...                                       */

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS,AE,___EVENEMENTS_ANTI_ELECTRONS))

#undef    ___EVENEMENTS_ANTI_ELECTRONS

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   N E U T R I N O  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_N                                                                                                     \
                    GRO9(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_N,PROBABILITE_DE_INCHANGE_N)));
                                        /* Probabilite du vertex : N --> N.                                                          */
#define   INCHANGE_N(neutrinoD1)                                                                                                        \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Vertex : N --> N.                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   E L E C T R O M A G N E T I Q U E                                                                  */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   N E U T R I N O  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_ELECTROWEAK_EMISSION_N___NxZ                                                                                   \
                    GRO1(FRA5(FRA10(PROBABILITE_DE_INCHANGE_N)))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_N___NxZ,PROBABILITE_DE_ELECTROWEAK_EMISSION_N___NxZ)));
                                        /* Probabilite du vertex : N --> NxZ.                                                        */
#define   ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_N___NxZ                                                                            \
                    FZERO
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_N___NxZ
                          ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_N___NxZ
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : N --> NxZ.                                              */
#define   INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_N___NxZ                                                                   \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_N___NxZ
                            ,INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_N___NxZ
                             )
                )
     );
                                        /* Cet indicateur precise si l'echange d'un z0 se fait par une simple emission par un        */
                                        /* neutrino ('FAUX') ou par le processus d'interception ('VRAI').                            */
DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_N___NxZ,ZERO)));
                                        /* Compteur des vertex : N --> NxZ.                                                          */
#define   ELECTROWEAK_EMISSION_N___NxZ(neutrinoD1,neutrinoA1,z0A1)                                                                      \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    ORIENTATION_A_PRIORI_DE_L_AXE_OZ(neutrinoD1);                                                                       \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(neutrinoD1,espace_temps,vitesse)          \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de 'neutrinoD1'...                                      */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'N --> NxZ' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le neutrino */ \
                                        /* se deplace le long de l'axe 'OX2'.                                                        */ \
                    CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_NEUTRINO(neutrinoD1);                                                     \
                                        /* On fixe a priori la conservation de la vitesse du neutrino...                             */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2))                                                         \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_N___NxZ)               \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_NEUTRINO_VIRTUEL(neutrinoA1                                                                           \
                                                  ,LEPTON_PAS_DE_SAVEUR                                                                 \
                                                  ,ASI2(neutrinoD1,espace_temps,position_courante)                                      \
                                                  ,vitesse_courante                                                                     \
                                                   );                                                                                   \
                    CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(neutrinoD1,neutrinoA1);                                        \
                                        /* La date de naisance est transmise du pere au fils...                                      */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0;                                                           \
                                        /* Le module de la vitesse des z0s est figees, puisque ces particules se deplacent a la      */ \
                                        /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO2(FRA8(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_N___NxZ)               \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_Z0_VIRTUEL(z0A1                                                                                       \
                                            ,ASI2(neutrinoD1,espace_temps,position_courante)                                            \
                                            ,vitesse_courante                                                                           \
                                             );                                                                                         \
                                        /* ATTENTION : 'z0A1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra     */ \
                                        /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' au cas ou       */ \
                                        /* ce z0 aurait la possibilite raisonnable d'intercepter un anti-electron...                 */ \
                    EGAL(neutrinoD2,neutrinoD1);                                                                                        \
                                        /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire,           */ \
                                        /* 'neutrinoD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'neutrinoD1' en tant que    */ \
                                        /* 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion terrible... */ \
                    RECHERCHE_D_UNE_PARTICULE(electronA2                                                                                \
                                             ,interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_N___NxZ                               \
                                             ,EVENEMENT_CERTAIN                                                                         \
                                             ,neutrinoD2,neutrinoA1                                                                     \
                                             ,I3ET(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL)                                  \
                                                       ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL)                               \
                                                        )                                                                               \
                                                  ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE)                          \
                                                  ,IFLT(pDISTANCE(neutrinoD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2))             \
                                                   )                                                                                    \
                                              );                                                                                        \
                                        /* Recherche d'un electron 'electronA2' proche du neutrino 'neutrinoD1' (alias               */ \
                                        /* 'neutrinoD2'...) et qui ne soit pas encore vise par un z0 (d'ou le test sur la            */ \
                                        /* duree de vie moyenne).                                                                    */ \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                    Test(IFNE(electronA2,PARTICULE_NON_DEFINIE))                                                                        \
                         Bblock                                                                                                         \
                         INTERCEPTION_PARTICULE_PAR_UN_Z0(electronA2                                                                    \
                                                         ,neutrinoD1                                                                    \
                                                         ,z0A1,VITESSE_DES_Z0S,DUREE_DE_VIE_MOYENNE_COURANTE(z0A1)                      \
                                                          );                                                                            \
                                        /* Lorsque l'on a trouve un electron 'electronA2' suffisamment proche du neutrino            */ \
                                        /* 'neutrinoD1', on tente l'interception de 'electronA2' par 'z0A1' emis par le neutrino     */ \
                                        /* 'neutrinoD1'...                                                                           */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \
                                        /* 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' peut changer l'etat de 'electronA2' et lui        */ \
                                        /* donner la valeur 'PARTICULE_NON_DEFINIE'...                                               */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Test(IFEQ(electronA2,PARTICULE_NON_DEFINIE))                                                                        \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(neutrinoA1,NE_PAS_PERTURBER_UNE_POSITION);            \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,NE_PAS_PERTURBER_UNE_POSITION);                  \
                                        /* Lorsque l'on n'a pas trouve un electron 'electronA2' suffisamment proche du neutrino      */ \
                                        /* 'neutrinoD1', on conserve pour le z0 'z0A1' la vitesse 'vitesse_courante'...              */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electronA2);                                                            \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(z0A1);                                                                  \
                                        /* Lorsque l'on a trouve un electron 'electronA2' suffisamment proche du neutrino            */ \
                                        /* 'neutrinoD1', on  allonge artificiellement la duree de vie moyenne de 'electronA2' et de  */ \
                                        /* 'z0A1' afin de reduire au maximum les chances que se produisent pour eux des              */ \
                                        /* evenements conditionnels du type :                                                        */ \
                                        /*                                                                                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS,                        */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S.                              */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    CHANGEMENT_EVENTUEL_DE_NEUTRINO_REEL(neutrinoD1,neutrinoA1);                                                        \
                    Test(IFEQ(electronA2,PARTICULE_NON_DEFINIE))                                                                        \
                         Bblock                                                                                                         \
                                        /* Cas ou aucune particule ne peut etre "visee" :                                            */ \
                         TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_N___NxZ                 N(%d) --> N(%d)xZ(%d)"                \
                                                   ,ETIQUETTE(neutrinoD1)                                                               \
                                                   ,ETIQUETTE(neutrinoA1)                                                               \
                                                   ,ETIQUETTE(z0A1)                                                                     \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou une particule est "visee" :                                                        */ \
                         TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_N___NxZ                 N(%d) --> N(%d)xZ(%d) =O=> E(%d)"     \
                                                   ,ETIQUETTE(neutrinoD1)                                                               \
                                                   ,ETIQUETTE(neutrinoA1)                                                               \
                                                   ,ETIQUETTE(z0A1)                                                                     \
                                                   ,ETIQUETTE(electronA2)                                                               \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    DESTRUCTION_D_UN_NEUTRINO(neutrinoD1);                                                                              \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_NEUTRINO_VIRTUEL(neutrinoD1)' car en effet,            */ \
                                        /* 'neutrinoD1' peut etre un neutrino REEL...                                                */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                    \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                                 \
                    INCR(compteur_de_ELECTROWEAK_EMISSION_N___NxZ,I);                                                                   \
                    Eblock                                                                                                              \
                                        /* Vertex : N --> NxZ.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D E   N E U T R I N O S  :         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_NEUTRINO                                                                         \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_neutrino
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_NEUTRINO
                           )
                )
     );
                                        /* Probabilite pour qu'un neutrino present dans le proton soit la "victime" d'un evenement   */
                                        /* conditionnel du type :                                                                    */
                                        /*                                                                                           */
                                        /*                  INCHANGE_N,                                                              */
                                        /*                  ELECTROWEAK_EMISSION_N___NxZ.                                            */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS                                                                           \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le neutrino courant soit la "victime" d'un evenement conditionnel    */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_N,                                                              */ \
                                        /*                  ELECTROWEAK_EMISSION_N___NxZ.                                            */ \
                                        /*                                                                                           */ \
                    TOTALITE_DES_NEUTRINOS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);                  \
                                                Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                             \
                                                                      ,neutrinoD1                                                       \
                                                                      ,DUREE_DE_VIE_MOYENNE_COURANTE(neutrinoD1)                        \
                                                                       )                                                                \
                                                         ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_neutrino)                 \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                     Bblock                                                                             \
                                                     DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                                \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_N,                                                              */ \
                                        /*                  ELECTROWEAK_EMISSION_N___NxZ.                                            */ \
                                        /*                                                                                           */ \
                                                     GENERATION_D_UNE_VALEUR                                                            \
                                                         (probabilite_de_choix                                                          \
                                                         ,EVENEMENT_IMPOSSIBLE                                                          \
                                                         ,ADD2(REGUL0(probabilite_de_INCHANGE_N)                                        \
                                                              ,REGUL1(probabilite_de_ELECTROWEAK_EMISSION_N___NxZ)                      \
                                                               )                                                                        \
                                                          );                                                                            \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                                     DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                                \
                                                         (probabilite_de_choix);                                                        \
                                                     CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                          \
                                                         (REGUL0(probabilite_de_INCHANGE_N)                                             \
                                                         ,INCHANGE_N(neutrinoD1)                                                        \
                                                          );                                                                            \
                                                     CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                          \
                                                         (REGUL1(probabilite_de_ELECTROWEAK_EMISSION_N___NxZ)                           \
                                                         ,BLOC(Test(IFLT(nombre_total_de_z0s_VIRTUELs                                   \
                                                                        ,nombre_maximal_de_z0s_VIRTUELs_du_di_electron                  \
                                                                         )                                                              \
                                                                    )                                                                   \
                                                                    Bblock                                                              \
                                                                    ELECTROWEAK_EMISSION_N___NxZ(neutrinoD1                             \
                                                                                                ,neutrinoA1                             \
                                                                                                ,z0A1                                   \
                                                                                                 );                                     \
                                        /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee  */ \
                                        /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de z0s     */ \
                                        /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_N___NxZ(...)' n'est        */ \
                                        /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel   */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne       */ \
                                        /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur    */ \
                                        /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...).                                         */ \
                                                                    Eblock                                                              \
                                                               ATes                                                                     \
                                                                    Bblock                                                              \
                                                                    Eblock                                                              \
                                                               ETes                                                                     \
                                                               )                                                                        \
                                                          );                                                                            \
                                                     FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                                 \
                                                     Eblock                                                                             \
                                                ATes                                                                                    \
                                                     Bblock                                                                             \
                                                     Eblock                                                                             \
                                                ETes                                                                                    \
                                                );                                                                                      \
                                           );                                                                                           \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des neutrinos presents dans le proton          */ \
                                        /* (REELs ou VIRTUELs).                                                                      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS,N,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   P H O T O N  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_P                                                                                                     \
                    GRO8(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_P,PROBABILITE_DE_INCHANGE_P)));
                                        /* Probabilite du vertex : P --> P.                                                          */
#define   INCHANGE_P(photonD1)                                                                                                          \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Vertex : P --> P.                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   E L E C T R O M A G N E T I Q U E                                                                  */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   P H O T O N  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE                                                                            \
                    GRO1(FRA8(FRA10(PROBABILITE_DE_INCHANGE_P)))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_P___ExAE
                          ,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE
                           )
                )
     );
                                        /* Probabilite du vertex : P --> ExAE.                                                       */
#define   ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE                                                                     \
                    FZERO
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_P___ExAE
                          ,ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : P --> ExAE.                                             */
DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_P___ExAE,ZERO)));
                                        /* Compteur des vertex : P --> ExAE.                                                         */
#define   ELECTROWEAK_TRANSFORMATION_P___ExAE(photonD1,electronA1,anti_electronA1)                                                      \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    ORIENTATION_A_PRIORI_DE_L_AXE_OZ(photonD1);                                                                         \
                                        /* ATTENTION, il est imperatif de ne pas orienter aleatoirement l'axe 'OZ' afin que la       */ \
                                        /* gerbe electron/anti-electron soit belle...                                                */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(photonD1,espace_temps,vitesse)            \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de 'photonD1'...                                        */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'P --> ExAE' dans        */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le photon   */ \
                                        /* se deplace le long de l'axe 'OX2'.                                                        */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON;                               \
                                        /* Choix aleatoire du meme module de la vitesse pour 'E' et 'AE'...                          */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO1(FRA3(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_P___ExAE)        \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1                                                                 \
                                                       ,LEPTON_PAS_DE_SAVEUR                                                            \
                                                       ,ASI2(photonD1,espace_temps,position_courante)                                   \
                                                       ,vitesse_courante                                                                \
                                                        );                                                                              \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION);            \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA3(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_P___ExAE)        \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ELECTRON_VIRTUEL(electronA1                                                                           \
                                                  ,LEPTON_PAS_DE_SAVEUR                                                                 \
                                                  ,ASI2(photonD1,espace_temps,position_courante)                                        \
                                                  ,vitesse_courante                                                                     \
                                                   );                                                                                   \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION);                 \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_P___ExAE          P(%d) --> E(%d)xAE(%d)"                    \
                                              ,ETIQUETTE(photonD1)                                                                      \
                                              ,ETIQUETTE(electronA1)                                                                    \
                                              ,ETIQUETTE(anti_electronA1)                                                               \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_PHOTON(photonD1);                                                                                  \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_PHOTON_VIRTUEL(photonD1)' car en effet,                */ \
                                        /* 'photonD1' peut etre un photon REEL...                                                    */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                    \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                                 \
                    INCR(compteur_de_ELECTROWEAK_TRANSFORMATION_P___ExAE,I);                                                            \
                    Eblock                                                                                                              \
                                        /* Vertex : P --> ExAE.                                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D E   P H O T O N S  :             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_PHOTON                                                                           \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_photon
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_PHOTON
                           )
                )
     );
                                        /* Probabilite pour qu'un photon present dans le "di-electron" soit la "victime" d'un        */
                                        /* evenement conditionnel du type :                                                          */
                                        /*                                                                                           */
                                        /*                  INCHANGE_P,                                                              */
                                        /*                  ELECTROWEAK_TRANSFORMATION_P___ExAE.                                     */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS                                                                             \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le photon courant soit la "victime" d'un evenement conditionnel      */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_P,                                                              */ \
                                        /*                  ELECTROWEAK_TRANSFORMATION_P___ExAE.                                     */ \
                                        /*                                                                                           */ \
                    TOTALITE_DES_PHOTONS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);                    \
                                              Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                               \
                                                                    ,photonD1                                                           \
                                                                    ,DUREE_DE_VIE_MOYENNE_COURANTE(photonD1)                            \
                                                                     )                                                                  \
                                                       ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_photon)                     \
                                                        )                                                                               \
                                                   )                                                                                    \
                                                   Bblock                                                                               \
                                                   DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                                  \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_P,                                                              */ \
                                        /*                  ELECTROWEAK_TRANSFORMATION_P___ExAE.                                     */ \
                                        /*                                                                                           */ \
                                                   GENERATION_D_UNE_VALEUR                                                              \
                                                       (probabilite_de_choix                                                            \
                                                       ,EVENEMENT_IMPOSSIBLE                                                            \
                                                       ,ADD2(REGUL0(probabilite_de_INCHANGE_P)                                          \
                                                            ,REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_P___ExAE)                 \
                                                             )                                                                          \
                                                        );                                                                              \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                                   DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                                  \
                                                       (probabilite_de_choix);                                                          \
                                                   CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                            \
                                                       (REGUL0(probabilite_de_INCHANGE_P)                                               \
                                                       ,INCHANGE_P(photonD1)                                                            \
                                                        );                                                                              \
                                                   CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                            \
                                                       (REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_P___ExAE)                      \
                                                       ,BLOC(ELECTROWEAK_TRANSFORMATION_P___ExAE(photonD1                               \
                                                                                                ,electronA1                             \
                                                                                                ,anti_electronA1                        \
                                                                                                 );                                     \
                                                             )                                                                          \
                                                        );                                                                              \
                                                   FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                                   \
                                                   Eblock                                                                               \
                                              ATes                                                                                      \
                                                   Bblock                                                                               \
                                                   Eblock                                                                               \
                                              ETes                                                                                      \
                                              );                                                                                        \
                                         );                                                                                             \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des photons presents dans le "di-electron"     */ \
                                        /* (REELs ou VIRTUELs).                                                                      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS,P,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   Z 0  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_Z                                                                                                     \
                    GRO8(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_Z,PROBABILITE_DE_INCHANGE_Z)));
                                        /* Probabilite du vertex : Z --> Z.                                                          */
#define   INCHANGE_Z(z0D1)                                                                                                              \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Vertex : Z --> Z.                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   E L E C T R O M A G N E T I Q U E                                                                  */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   Z 0  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE                                                                            \
                    GRO0(FRA8(FRA10(PROBABILITE_DE_INCHANGE_Z)))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE
                          ,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE
                           )
                )
     );
                                        /* Probabilite du vertex : Z --> ExAE.                                                       */
#define   ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE                                                                     \
                    FZERO
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE
                          ,ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : Z --> ExAE.                                             */
DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE,ZERO)));
                                        /* Compteur des vertex : Z --> ExAE.                                                         */
#define   ELECTROWEAK_TRANSFORMATION_Z___ExAE(z0D1,electronA1,anti_electronA1)                                                          \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    ORIENTATION_A_PRIORI_DE_L_AXE_OZ(z0D1);                                                                             \
                                        /* ATTENTION, il est imperatif de ne pas orienter aleatoirement l'axe 'OZ' afin que la       */ \
                                        /* gerbe electron/anti-electron soit belle...                                                */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(z0D1,espace_temps,vitesse)                \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de 'z0D1'...                                            */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'Z --> ExAE' dans        */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le z0       */ \
                                        /* se deplace le long de l'axe 'OX2'.                                                        */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON;                               \
                                        /* Choix aleatoire du meme module de la vitesse pour 'E' et 'AE'...                          */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO1(FRA3(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE)        \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1                                                                 \
                                                       ,LEPTON_PAS_DE_SAVEUR                                                            \
                                                       ,ASI2(z0D1,espace_temps,position_courante)                                       \
                                                       ,vitesse_courante                                                                \
                                                        );                                                                              \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION);            \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA3(PI_SUR_2))                                                          \
                                                         ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE)        \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ELECTRON_VIRTUEL(electronA1                                                                           \
                                                  ,LEPTON_PAS_DE_SAVEUR                                                                 \
                                                  ,ASI2(z0D1,espace_temps,position_courante)                                            \
                                                  ,vitesse_courante                                                                     \
                                                   );                                                                                   \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION);                 \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_Z___ExAE          Z(%d) --> E(%d)xAE(%d)"                    \
                                              ,ETIQUETTE(z0D1)                                                                          \
                                              ,ETIQUETTE(electronA1)                                                                    \
                                              ,ETIQUETTE(anti_electronA1)                                                               \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_Z0(z0D1);                                                                                          \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_Z0_VIRTUEL(z0D1)' car en effet,                        */ \
                                        /* 'z0D1' peut etre un z0 REEL...                                                            */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                    \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                                 \
                    INCR(compteur_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE,I);                                                            \
                    Eblock                                                                                                              \
                                        /* Vertex : Z --> ExAE.                                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D E   Z 0 S  :                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_Z0                                                                               \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_z0
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_Z0
                           )
                )
     );
                                        /* Probabilite pour qu'un z0 present dans le "di-electron" soit la "victime" d'un            */
                                        /* evenement conditionnel du type :                                                          */
                                        /*                                                                                           */
                                        /*                  INCHANGE_Z,                                                              */
                                        /*                  ELECTROWEAK_TRANSFORMATION_Z___ExAE.                                     */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S                                                                                 \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le z0 courant soit la "victime" d'un evenement conditionnel          */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_Z,                                                              */ \
                                        /*                  ELECTROWEAK_TRANSFORMATION_Z___ExAE.                                     */ \
                                        /*                                                                                           */ \
                    TOTALITE_DES_Z0S(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);                        \
                                          Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                                   \
                                                                ,z0D1                                                                   \
                                                                ,DUREE_DE_VIE_MOYENNE_COURANTE(z0D1)                                    \
                                                                 )                                                                      \
                                                   ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_z0)                             \
                                                    )                                                                                   \
                                               )                                                                                        \
                                               Bblock                                                                                   \
                                               DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                                      \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_Z,                                                              */ \
                                        /*                  ELECTROWEAK_TRANSFORMATION_Z___ExAE.                                     */ \
                                        /*                                                                                           */ \
                                               GENERATION_D_UNE_VALEUR                                                                  \
                                                   (probabilite_de_choix                                                                \
                                                   ,EVENEMENT_IMPOSSIBLE                                                                \
                                                   ,ADD2(REGUL0(probabilite_de_INCHANGE_Z)                                              \
                                                        ,REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE)                     \
                                                         )                                                                              \
                                                    );                                                                                  \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                               DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                                      \
                                                   (probabilite_de_choix);                                                              \
                                               CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                                \
                                                   (REGUL0(probabilite_de_INCHANGE_Z)                                                   \
                                                   ,INCHANGE_Z(z0D1)                                                                    \
                                                    );                                                                                  \
                                               CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                                \
                                                   (REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE)                          \
                                                   ,BLOC(ELECTROWEAK_TRANSFORMATION_Z___ExAE(z0D1                                       \
                                                                                            ,electronA1                                 \
                                                                                            ,anti_electronA1                            \
                                                                                             );                                         \
                                                         )                                                                              \
                                                    );                                                                                  \
                                               FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                                       \
                                               Eblock                                                                                   \
                                          ATes                                                                                          \
                                               Bblock                                                                                   \
                                               Eblock                                                                                   \
                                          ETes                                                                                          \
                                          );                                                                                            \
                                     );                                                                                                 \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des z0s presents dans le "di-electron"         */ \
                                        /* (REELs ou VIRTUELs).                                                                      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S,Z,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S))

EFonctionI



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