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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExP___E                                                                                 \
                    GRO9(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_ExP___E,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExP___E)));
                                        /* Probabilite du vertex : ExP --> E.                                                        */

#define   PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExP___E                                                                                \
                    GRO8(FRA8(FU))
DEFV(Local,DEFV(Float,INIT(participation_E_ELECTROWEAK_ABSORBTION_ExP___E
                          ,PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExP___E
                           )
                )
     );
                                        /* Participation de la vitesse de E dans le vertex : ExP --> E.                              */
#define   PARTICIPATION_P_ELECTROWEAK_ABSORBTION_ExP___E                                                                                \
                    GRO1(FRA16(FU))
DEFV(Local,DEFV(Float,INIT(participation_P_ELECTROWEAK_ABSORBTION_ExP___E
                          ,PARTICIPATION_P_ELECTROWEAK_ABSORBTION_ExP___E
                           )
                )
     );
                                        /* Participation de la vitesse de P dans le vertex : ExP --> E.                              */

DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_ExP___E,ZERO)));
                                        /* Compteur des vertex : ExP --> E.                                                          */
#define   ELECTROWEAK_ABSORBTION_ExP___E(electronD1,photonD1,electronA1)                                                                \
                    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(ADRESSE(particule_indifferente));                                                 \
                    DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex                                                      \
                                                               ,vitesse_resultante_virtuelle                                            \
                                                               ,participation_E_ELECTROWEAK_ABSORBTION_ExP___E,electronD1               \
                                                               ,participation_P_ELECTROWEAK_ABSORBTION_ExP___E,photonD1                 \
                                                                );                                                                      \
                                        /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur          */ \
                                        /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut     */ \
                                        /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance,        */ \
                                        /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est    */ \
                                        /* pas utilisee...                                                                           */ \
                    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...                             */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle                   \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses...              */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_ELECTRON_VIRTUEL(electronA1                                                                           \
                                                  ,LEPTON_PAS_DE_SAVEUR                                                                 \
                                                  ,position_du_vertex                                                                   \
                                                  ,vitesse_courante                                                                     \
                                                   );                                                                                   \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,PERTURBER_UNE_POSITION);                        \
                    CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1);                                                         \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_ExP___E               E(%d)xP(%d) --> E(%d)"                     \
                                              ,ETIQUETTE(electronD1)                                                                    \
                                              ,ETIQUETTE(photonD1)                                                                      \
                                              ,ETIQUETTE(electronA1)                                                                    \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_ELECTRON(electronD1);                                                                              \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet,            */ \
                                        /* 'electronD1' peut etre un electron REEL...                                                */ \
                    DESTRUCTION_D_UN_PHOTON_VIRTUEL(photonD1);                                                                          \
                    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_ABSORBTION_ExP___E,I);                                                                 \
                    Eblock                                                                                                              \
                                        /* Vertex : ExP --> E.                                                                       */

#define   PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExP___AE                                                                               \
                    PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExP___E
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_AExP___AE,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExP___AE)));
                                        /*                         _       _                                                         */
                                        /* Probabilite du vertex : ExP --> E.                                                        */

#define   PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExP___AE                                                                             \
                    PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExP___E
DEFV(Local,DEFV(Float,INIT(participation_AE_ELECTROWEAK_ABSORBTION_AExP___AE
                          ,PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExP___AE
                           )
                )
     );
                                        /*                                                   _       _                               */
                                        /* Participation de la vitesse de E dans le vertex : ExP --> E.                              */
#define   PARTICIPATION_P_ELECTROWEAK_ABSORBTION_AExP___AE                                                                              \
                    PARTICIPATION_P_ELECTROWEAK_ABSORBTION_ExP___E
DEFV(Local,DEFV(Float,INIT(participation_P_ELECTROWEAK_ABSORBTION_AExP___AE
                          ,PARTICIPATION_P_ELECTROWEAK_ABSORBTION_AExP___AE
                           )
                )
     );
                                        /*                                                   _       _                               */
                                        /* Participation de la vitesse de P dans le vertex : ExP --> E.                              */

DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_AExP___AE,ZERO)));
                                        /*                       _       _                                                           */
                                        /* Compteur des vertex : ExP --> E.                                                          */
#define   ELECTROWEAK_ABSORBTION_AExP___AE(anti_electronD1,photonD1,anti_electronA1)                                                    \
                    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(ADRESSE(particule_indifferente));                                                 \
                    DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex                                                      \
                                                               ,vitesse_resultante_virtuelle                                            \
                                                               ,participation_AE_ELECTROWEAK_ABSORBTION_AExP___AE,anti_electronD1       \
                                                               ,participation_P_ELECTROWEAK_ABSORBTION_AExP___AE,photonD1               \
                                                                );                                                                      \
                                        /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur          */ \
                                        /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut     */ \
                                        /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance,        */ \
                                        /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est    */ \
                                        /* pas utilisee...                                                                           */ \
                    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...                      */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle                   \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses...              */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1                                                                 \
                                                       ,LEPTON_PAS_DE_SAVEUR                                                            \
                                                       ,position_du_vertex                                                              \
                                                       ,vitesse_courante                                                                \
                                                        );                                                                              \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,PERTURBER_UNE_POSITION);                   \
                    CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1);                                          \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_AExP___AE             AE(%d)xP(%d) --> AE(%d)"                   \
                                              ,ETIQUETTE(anti_electronD1)                                                               \
                                              ,ETIQUETTE(photonD1)                                                                      \
                                              ,ETIQUETTE(anti_electronA1)                                                               \
                                               )                                                                                        \
                                         );                                                                                             \
                    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 electron REEL...                                           */ \
                    DESTRUCTION_D_UN_PHOTON_VIRTUEL(photonD1);                                                                          \
                    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_ABSORBTION_AExP___AE,I);                                                               \
                    Eblock                                                                                                              \
                                        /*          _       _                                                                        */ \
                                        /* Vertex : ExP --> E.                                                                       */

#define   PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___P                                                                            \
                    GRO5(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___P,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___P)));
                                        /*                           _                                                               */
                                        /* Probabilite du vertex : ExE --> P.                                                        */

DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_ExAE___P,ZERO)));
                                        /*                         _                                                                 */
                                        /* Compteur des vertex : ExE --> P.                                                          */
#define   ELECTROWEAK_TRANSFORMATION_ExAE___P(electronD1,anti_electronD1,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(ADRESSE(particule_indifferente));                                                 \
                    DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex                                                       \
                                                              ,vitesse_resultante_virtuelle                                             \
                                                              ,electronD1                                                               \
                                                              ,anti_electronD1                                                          \
                                                               );                                                                       \
                                        /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur          */ \
                                        /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut     */ \
                                        /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance,        */ \
                                        /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est    */ \
                                        /* pas utilisee...                                                                           */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_PHOTON;                                                       \
                                        /* Les photons se deplacent a la  vitesse de la lumiere...                                   */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle                   \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses...              */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_PHOTON_VIRTUEL(photonA1                                                                               \
                                                ,position_du_vertex                                                                     \
                                                ,vitesse_courante                                                                       \
                                                 );                                                                                     \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(photonA1,PERTURBER_UNE_POSITION);                          \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_ExAE___P          E(%d)xAE(%d) --> P(%d)"                    \
                                              ,ETIQUETTE(electronD1)                                                                    \
                                              ,ETIQUETTE(anti_electronD1)                                                               \
                                              ,ETIQUETTE(photonA1)                                                                      \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_ELECTRON(electronD1);                                                                              \
                    DESTRUCTION_D_UN_ANTI_ELECTRON(anti_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_TRANSFORMATION_ExAE___P,I);                                                            \
                    Eblock                                                                                                              \
                                        /*            _                                                                              */ \
                                        /* Vertex : ExE --> P.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   F A I B L E  :                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExZ___E                                                                                 \
                    GRO9(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_ExZ___E,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExZ___E)));
                                        /* Probabilite du vertex : ExZ --> E.                                                        */

#define   PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExZ___E                                                                                \
                    GRO8(FRA8(FU))
DEFV(Local,DEFV(Float,INIT(participation_E_ELECTROWEAK_ABSORBTION_ExZ___E
                          ,PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExZ___E
                           )
                )
     );
                                        /* Participation de la vitesse de E dans le vertex : ExZ --> E.                              */
#define   PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_ExZ___E                                                                                \
                    GRO1(FRA16(FU))
DEFV(Local,DEFV(Float,INIT(participation_Z_ELECTROWEAK_ABSORBTION_ExZ___E
                          ,PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_ExZ___E
                           )
                )
     );
                                        /* Participation de la vitesse de Z dans le vertex : ExZ --> E.                              */

DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_ExZ___E,ZERO)));
                                        /* Compteur des vertex : ExZ --> E.                                                          */
#define   ELECTROWEAK_ABSORBTION_ExZ___E(electronD1,z0D1,electronA1)                                                                    \
                    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(ADRESSE(particule_indifferente));                                                 \
                    DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex                                                      \
                                                               ,vitesse_resultante_virtuelle                                            \
                                                               ,participation_E_ELECTROWEAK_ABSORBTION_ExZ___E,electronD1               \
                                                               ,participation_Z_ELECTROWEAK_ABSORBTION_ExZ___E,z0D1                     \
                                                                );                                                                      \
                                        /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur          */ \
                                        /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut     */ \
                                        /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance,        */ \
                                        /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est    */ \
                                        /* pas utilisee...                                                                           */ \
                    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...                             */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle                   \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses...              */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_ELECTRON_VIRTUEL(electronA1                                                                           \
                                                  ,LEPTON_PAS_DE_SAVEUR                                                                 \
                                                  ,position_du_vertex                                                                   \
                                                  ,vitesse_courante                                                                     \
                                                   );                                                                                   \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,PERTURBER_UNE_POSITION);                        \
                    CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1);                                                         \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_ExZ___E               E(%d)xZ(%d) --> E(%d)"                     \
                                              ,ETIQUETTE(electronD1)                                                                    \
                                              ,ETIQUETTE(z0D1)                                                                          \
                                              ,ETIQUETTE(electronA1)                                                                    \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_ELECTRON(electronD1);                                                                              \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet,            */ \
                                        /* 'electronD1' peut etre un electron REEL...                                                */ \
                    DESTRUCTION_D_UN_Z0_VIRTUEL(z0D1);                                                                                  \
                    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_ABSORBTION_ExZ___E,I);                                                                 \
                    Eblock                                                                                                              \
                                        /* Vertex : ExZ --> E.                                                                       */

#define   PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExZ___AE                                                                               \
                    PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExZ___E
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_AExZ___AE,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExZ___AE)));
                                        /*                         _       _                                                         */
                                        /* Probabilite du vertex : ExZ --> E.                                                        */

#define   PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExZ___AE                                                                             \
                    PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExZ___E
DEFV(Local,DEFV(Float,INIT(participation_AE_ELECTROWEAK_ABSORBTION_AExZ___AE
                          ,PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExZ___AE
                           )
                )
     );
                                        /*                                                   _       _                               */
                                        /* Participation de la vitesse de E dans le vertex : ExZ --> E.                              */
#define   PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_AExZ___AE                                                                              \
                    PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_ExZ___E
DEFV(Local,DEFV(Float,INIT(participation_Z_ELECTROWEAK_ABSORBTION_AExZ___AE
                          ,PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_AExZ___AE
                           )
                )
     );
                                        /*                                                   _       _                               */
                                        /* Participation de la vitesse de Z dans le vertex : ExZ --> E.                              */

DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_AExZ___AE,ZERO)));
                                        /*                       _       _                                                           */
                                        /* Compteur des vertex : ExZ --> E.                                                          */
#define   ELECTROWEAK_ABSORBTION_AExZ___AE(anti_electronD1,z0D1,anti_electronA1)                                                        \
                    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(ADRESSE(particule_indifferente));                                                 \
                    DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex                                                      \
                                                               ,vitesse_resultante_virtuelle                                            \
                                                               ,participation_AE_ELECTROWEAK_ABSORBTION_AExZ___AE,anti_electronD1       \
                                                               ,participation_Z_ELECTROWEAK_ABSORBTION_AExZ___AE,z0D1                   \
                                                                );                                                                      \
                                        /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur          */ \
                                        /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut     */ \
                                        /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance,        */ \
                                        /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est    */ \
                                        /* pas utilisee...                                                                           */ \
                    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...                      */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle                   \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses...              */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1                                                                 \
                                                       ,LEPTON_PAS_DE_SAVEUR                                                            \
                                                       ,position_du_vertex                                                              \
                                                       ,vitesse_courante                                                                \
                                                        );                                                                              \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,PERTURBER_UNE_POSITION);                   \
                    CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1);                                          \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_AExZ___AE             AE(%d)xZ(%d) --> AE(%d)"                   \
                                              ,ETIQUETTE(anti_electronD1)                                                               \
                                              ,ETIQUETTE(z0D1)                                                                          \
                                              ,ETIQUETTE(anti_electronA1)                                                               \
                                               )                                                                                        \
                                         );                                                                                             \
                    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 electron REEL...                                           */ \
                    DESTRUCTION_D_UN_Z0_VIRTUEL(z0D1);                                                                                  \
                    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_ABSORBTION_AExZ___AE,I);                                                               \
                    Eblock                                                                                                              \
                                        /*          _       _                                                                        */ \
                                        /* Vertex : ExZ --> E.                                                                       */

#define   PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___Z                                                                            \
                    GRO9(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___Z,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___Z)));
                                        /*                           _                                                               */
                                        /* Probabilite du vertex : ExE --> Z.                                                        */

DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_ExAE___Z,ZERO)));
                                        /*                         _                                                                 */
                                        /* Compteur des vertex : ExE --> Z.                                                          */
#define   ELECTROWEAK_TRANSFORMATION_ExAE___Z(electronD1,anti_electronD1,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(ADRESSE(particule_indifferente));                                                 \
                    DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex                                                       \
                                                              ,vitesse_resultante_virtuelle                                             \
                                                              ,electronD1                                                               \
                                                              ,anti_electronD1                                                          \
                                                               );                                                                       \
                                        /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur          */ \
                                        /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut     */ \
                                        /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance,        */ \
                                        /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est    */ \
                                        /* pas utilisee...                                                                           */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0;                                                           \
                                        /* Les photons se deplacent a la  vitesse de la lumiere...                                   */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle                   \
                                                                                        ,orientation_de_l_axe_OZ                        \
                                                                                         );                                             \
                                        /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses...              */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ;                                  \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_Z0_VIRTUEL(z0A1                                                                                       \
                                            ,position_du_vertex                                                                         \
                                            ,vitesse_courante                                                                           \
                                             );                                                                                         \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,PERTURBER_UNE_POSITION);                              \
                    TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_ExAE___Z          E(%d)xAE(%d) --> Z(%d)"                    \
                                              ,ETIQUETTE(electronD1)                                                                    \
                                              ,ETIQUETTE(anti_electronD1)                                                               \
                                              ,ETIQUETTE(z0A1)                                                                          \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_ELECTRON(electronD1);                                                                              \
                    DESTRUCTION_D_UN_ANTI_ELECTRON(anti_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_TRANSFORMATION_ExAE___Z,I);                                                            \
                    Eblock                                                                                                              \
                                        /*            _                                                                              */ \
                                        /* Vertex : ExE --> Z.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   E L E C T R O - F A I B L E                                                                        */
/*                                                                                                                                   */
/*        C O L L I S I O N S   E N T R E   P A R T I C U L E S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Float,INIT(voisinage_1_D1_D2,VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES)));
                                        /* Distance en-dessous de laquelle 2 particules peuvent interagir dans tous les evenements   */
                                        /* de type 'COLLISION(...)' :                                                                */
                                        /*                                                                                           */
                                        /*                  ELECTROWEAK_ABSORBTION_ExP___E(...),                                     */
                                        /*                  ELECTROWEAK_ABSORBTION_AExP___AE(...),                                   */
                                        /*                  ELECTROWEAK_ABSORBTION_ExZ___E(...),                                     */
                                        /*                  ELECTROWEAK_ABSORBTION_AExZ___AE(...),                                   */
                                        /*                  ELECTROWEAK_TRANSFORMATION_ExAE___P(...),                                */
                                        /*                  ELECTROWEAK_TRANSFORMATION_ExAE___Z(...).                                */
                                        /*                                                                                           */
#define   ADOLESCENCE_D_UNE_PARTICULE                                                                                                   \
                    GRO2(FRA2(DIVI(VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES                                                          \
                                  ,MIN4(VITESSE_MOYENNE_DES_ELECTRONS_ET_DES_ANTI_ELECTRONS                                             \
                                       ,VITESSE_MOYENNE_DES_NEUTRINOS                                                                   \
                                       ,VITESSE_DES_PHOTONS                                                                             \
                                       ,VITESSE_DES_Z0S                                                                                 \
                                        )                                                                                               \
                                   )                                                                                                    \
                              )                                                                                                         \
                         )                                                                                                              \
                                        /* Duree de l'adolescence d'une particule qui correspond a une periode au cours de laquelle  */ \
                                        /* elle ne peut rentrer en collision. La valeur implicite est choisie de facon telle qu'elle */ \
                                        /* corresponde a une duree superieure a celle necessaire a s'echapper du voisinage d'une     */ \
                                        /* particule ; ceci permet d'eviter que des particules emises soient immediatement           */ \
                                        /* reabsorbee.                                                                               */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la valeur de 'ADOLESCENCE_D_UNE_PARTICULE' est plus grande dans le fichier    */ \
                                        /* '$xrq/di_elec.LH$I' que dans le fichier '$xrq/nucleon.LH$I', et ce afin de limiter au     */ \
                                        /* mieux l'absorbtion, par des electrons, des photons qu'ils viennent d'emettre...           */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : la valeur de 'ADOLESCENCE_D_UNE_PARTICULE' est liee a la valeur du parametre  */ \
                                        /* 'VITESSE_MOYENNE_DES_ELECTRONS_ET_DES_ANTI_ELECTRONS'...                                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION, on est oblige d'utiliser ici :                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  VITESSE_MOYENNE_DES_ELECTRONS_ET_DES_ANTI_ELECTRONS                      */ \
                                        /*                                                                                           */ \
                                        /* et non pas :                                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  vitesse_moyenne_des_electrons_et_des_anti_electrons                      */ \
                                        /*                                                                                           */ \
                                        /* a cause du fait que 'adolescence_d_une_particule' est initialisee avant l'entree des      */ \
                                        /* parametres, donc avant de redefinir 'vitesse_moyenne_des_electrons_et_des_anti_electrons' */ \
                                        /* eventuellement...                                                                         */
DEFV(Local,DEFV(Float,INIT(adolescence_d_une_particule,FLOT__UNDEF)));
                                        /* Duree de l'adolescence d'une particule qui correspond a une periode au cours de laquelle  */
                                        /* elle ne peut rentrer en collision. La valeur implicite est choisie de facon telle qu'elle */
                                        /* corresponde a une duree superieure a celle necessaire a s'echapper du voisinage d'une     */
                                        /* particule ; ceci permet d'eviter que des particules emises soient immediatement           */
                                        /* reabsorbee. L'initialisation a lieu dans 'DEBUT_DE_L_INITIALISATION_DE_L_UNIVERS' a       */
                                        /* cause du compilateur de 'SYSTEME_SG4D..._IRIX_CC' qui refuse d'initialiser cette          */
                                        /* variable avec l'expression 'ADOLESCENCE_D_UNE_PARTICULE' qui contient un 'MIN2(...)'...   */
#define   COLLISION(condition,probabilite_de_la_collision,evenement,l_evenement_a_eu_lieu)                                              \
                    Bblock                                                                                                              \
                    Test(condition)                                                                                                     \
                         Bblock                                                                                                         \
                         DEFV(Float,INIT(probabilite_d_evenement_collisionnel,FLOT__UNDEF));                                            \
                         GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_collisionnel);                                         \
                                        /* Probabilite pour que la collision courante ait lieu...                                    */ \
                         Test(IFLE(probabilite_d_evenement_collisionnel                                                                 \
                                  ,REGUL9(probabilite_de_la_collision)                                                                  \
                                   )                                                                                                    \
                              )                                                                                                         \
                              Bblock                                                                                                    \
                              BLOC(evenement);                                                                                          \
                                        /* Lorsque toutes les conditions sont remplies, il y a interaction...                        */ \
                              EGAL(l_evenement_a_eu_lieu,VRAI);                                                                         \
                                        /* Et on le signale au cas ou il y aurait plusieurs evenements possibles pour un meme        */ \
                                        /* ensemble de particules...                                                                 */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                                        /* Lorsque toutes les conditions ('probabilite') ne sont pas remplies, rien ne se passe...   */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Lorsque toutes les conditions ('condition') ne sont pas remplies, rien ne se passe...     */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Lorsqu'une collision a ete detectee, il faut verifier si les particules en cause          */ \
                                        /* remplissent un certain nombre de conditions pour pouvoir interagir...                     */

#define   COLLISION_EVENTUELLE_ExP                                                                                                      \
                    Bblock                                                                                                              \
                    DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX));                                                                     \
                                        /* Ainsi on peut savoir si l'evenement a eu lieu...                                          */ \
                    COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ELECTRON_REEL                                                                              \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ELECTRON_VIRTUEL                                                                           \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,IFOU(IFEQ(NATURE(particuleD2)                                                                        \
                                            ,PHOTON_REEL                                                                                \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,PHOTON_VIRTUEL                                                                             \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,probabilite_de_ELECTROWEAK_ABSORBTION_ExP___E                                                             \
                             ,ELECTROWEAK_ABSORBTION_ExP___E(particuleD1,particuleD2,electronA1);                                       \
                             ,l_evenement_a_eu_lieu                                                                                     \
                              );                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  ExP --> E                                                                */ \
                                        /*                                                                                           */
#define   COLLISION_EVENTUELLE_AExP                                                                                                     \
                    Bblock                                                                                                              \
                    DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX));                                                                     \
                                        /* Ainsi on peut savoir si l'evenement a eu lieu...                                          */ \
                    COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ANTI_ELECTRON_REEL                                                                         \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ANTI_ELECTRON_VIRTUEL                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,IFOU(IFEQ(NATURE(particuleD2)                                                                        \
                                            ,PHOTON_REEL                                                                                \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,PHOTON_VIRTUEL                                                                             \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,probabilite_de_ELECTROWEAK_ABSORBTION_AExP___AE                                                           \
                             ,ELECTROWEAK_ABSORBTION_AExP___AE(particuleD1,particuleD2,anti_electronA1);                                \
                             ,l_evenement_a_eu_lieu                                                                                     \
                              );                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  AExP --> AE                                                              */ \
                                        /*                                                                                           */

#define   COLLISION_EVENTUELLE_ExZ                                                                                                      \
                    Bblock                                                                                                              \
                    DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX));                                                                     \
                                        /* Ainsi on peut savoir si l'evenement a eu lieu...                                          */ \
                    COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ELECTRON_REEL                                                                              \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ELECTRON_VIRTUEL                                                                           \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,IFOU(IFEQ(NATURE(particuleD2)                                                                        \
                                            ,Z0_REEL                                                                                    \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,Z0_VIRTUEL                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,probabilite_de_ELECTROWEAK_ABSORBTION_ExZ___E                                                             \
                             ,ELECTROWEAK_ABSORBTION_ExZ___E(particuleD1,particuleD2,electronA1);                                       \
                             ,l_evenement_a_eu_lieu                                                                                     \
                              );                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  ExZ --> E                                                                */ \
                                        /*                                                                                           */
#define   COLLISION_EVENTUELLE_AExZ                                                                                                     \
                    Bblock                                                                                                              \
                    DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX));                                                                     \
                                        /* Ainsi on peut savoir si l'evenement a eu lieu...                                          */ \
                    COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ANTI_ELECTRON_REEL                                                                         \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ANTI_ELECTRON_VIRTUEL                                                                      \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,IFOU(IFEQ(NATURE(particuleD2)                                                                        \
                                            ,Z0_REEL                                                                                    \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,Z0_VIRTUEL                                                                                 \
                                             )                                                                                          \
                                        )                                                                                               \
                                   )                                                                                                    \
                             ,probabilite_de_ELECTROWEAK_ABSORBTION_AExZ___AE                                                           \
                             ,ELECTROWEAK_ABSORBTION_AExZ___AE(particuleD1,particuleD2,anti_electronA1);                                \
                             ,l_evenement_a_eu_lieu                                                                                     \
                              );                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  AExZ --> AE                                                              */ \
                                        /*                                                                                           */

#define   COLLISION_EVENTUELLE_ExAE                                                                                                     \
                    Bblock                                                                                                              \
                    DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX));                                                                     \
                                        /* Ainsi on peut savoir si l'evenement a eu lieu...                                          */ \
                    COLLISION(I3ET(IFET(IFOU(IFEQ(NATURE(particuleD1)                                                                   \
                                                 ,ELECTRON_REEL                                                                         \
                                                  )                                                                                     \
                                            ,IFEQ(NATURE(particuleD1)                                                                   \
                                                 ,ELECTRON_VIRTUEL                                                                      \
                                                  )                                                                                     \
                                             )                                                                                          \
                                       ,IFOU(IFEQ(NATURE(particuleD2)                                                                   \
                                                 ,ANTI_ELECTRON_REEL                                                                    \
                                                  )                                                                                     \
                                            ,IFEQ(NATURE(particuleD2)                                                                   \
                                                 ,ANTI_ELECTRON_VIRTUEL                                                                 \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,IFLT(nombre_total_de_z0s_VIRTUELs,nombre_maximal_de_z0s_VIRTUELs_du_di_electron)                     \
                                  ,TOUJOURS_VRAI                                                                                        \
                                   )                                                                                                    \
                             ,probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___Z                                                        \
                             ,ELECTROWEAK_TRANSFORMATION_ExAE___Z(particuleD1,particuleD2,z0A1);                                        \
                             ,l_evenement_a_eu_lieu                                                                                     \
                              );                                                                                                        \
                    COLLISION(I3ET(IFET(IFOU(IFEQ(NATURE(particuleD1)                                                                   \
                                                 ,ELECTRON_REEL                                                                         \
                                                  )                                                                                     \
                                            ,IFEQ(NATURE(particuleD1)                                                                   \
                                                 ,ELECTRON_VIRTUEL                                                                      \
                                                  )                                                                                     \
                                             )                                                                                          \
                                       ,IFOU(IFEQ(NATURE(particuleD2)                                                                   \
                                                 ,ANTI_ELECTRON_REEL                                                                    \
                                                  )                                                                                     \
                                            ,IFEQ(NATURE(particuleD2)                                                                   \
                                                 ,ANTI_ELECTRON_VIRTUEL                                                                 \
                                                  )                                                                                     \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,IFLT(nombre_total_de_photons_VIRTUELs,nombre_maximal_de_photons_VIRTUELs_du_di_electron)             \
                                  ,EST_FAUX(l_evenement_a_eu_lieu)                                                                      \
                                   )                                                                                                    \
                             ,probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___P                                                        \
                             ,ELECTROWEAK_TRANSFORMATION_ExAE___P(particuleD1,particuleD2,photonA1);                                    \
                             ,l_evenement_a_eu_lieu                                                                                     \
                              );                                                                                                        \
                    Eblock                                                                                                              \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                    _                                                                      */ \
                                        /*                  ExE --> Z                                                                */ \
                                        /*                                                                                           */ \
                                        /* ou :                                                                                      */ \
                                        /*                    _                                                                      */ \
                                        /*                  ExE --> P                                                                */ \
                                        /*                                                                                           */

#define   ___EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES                                                                                 \
                    Bblock                                                                                                              \
                    DEFV(particule,POINTERs(particuleD1));                                                                              \
                    DEFV(particule,POINTERs(particuleD2));                                                                              \
                                        /* Definition d'un ensemble de 2 particules en interaction...                                */ \
                    DEFV(Float,INIT(distance_D1_D2,FLOT__UNDEF));                                                                       \
                                        /* Distance entre les 2 particules (D1,D2), et on notera la propriete triviale, mais         */ \
                                        /* essentielle suivante :                                                                    */ \
                                        /*                                                                                           */ \
                                        /*                  distance(D1,D2) == distance(D2,D1).                                      */ \
                                        /*                                                                                           */ \
                                        /* De plus, il serait possible d'optimiser en manipulant le carre des distances, mais il     */ \
                                        /* est plus physique de manipuler les distances elle-memes, et de plus le temps perdu a      */ \
                                        /* extraire les racines carrees est minime...                                                */ \
                    ENSEMBLE_DES_PARTICULES(BLOC(VOISINAGE_D_UNE_PARTICULE(PARTICULE_COURANTE);                                         \
                                        /* Initialisation du detecteur de collisions a 2 particules.                                 */ \
                                                 )                                                                                      \
                                            );                                                                                          \
                    ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD1,PARTICULE_COURANTE);                                                  \
                                                 Test(IFGE(AGE(particuleD1),adolescence_d_une_particule))                               \
                                                      Bblock                                                                            \
                                        /* Cas d'une particule assez agee :                                                          */ \
                                                      ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD2,PARTICULE_COURANTE);                \
                                                                                   Test(IFET(IFNE(particuleD1,particuleD2)              \
                                                                                            ,IFGE(AGE(particuleD2)                      \
                                                                                                 ,adolescence_d_une_particule           \
                                                                                                  )                                     \
                                                                                             )                                          \
                                                                                        )                                               \
                                        /* Cas ou les deux particules sont distinctes et suffisamment agees :                        */ \
                                                                                        Bblock                                          \
                                                                                        EGAL(distance_D1_D2                             \
                                                                                            ,pDISTANCE(particuleD1,particuleD2)         \
                                                                                             );                                         \
                                                                                        Test(IFLT(distance_D1_D2                        \
                                                                                                 ,REGUL0(voisinage_1_D1_D2)             \
                                                                                                  )                                     \
                                                                                             )                                          \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                                                                                             Bblock                                     \
                                        /* Cas ou les deux particules sont suffisamment proches l'une de l'autre pour interagir :    */ \
                                                                                             Test(IFLT(distance_D1_D2                   \
                                                                                                      ,ASI2(particuleD1                 \
                                                                                                           ,voisines                    \
                                                                                                           ,distance1                   \
                                                                                                            )                           \
                                                                                                       )                                \
                                                                                                  )                                     \
                                                                                                  Bblock                                \
                                                                                                  EGAL(ASI2(particuleD1                 \
                                                                                                           ,voisines                    \
                                                                                                           ,distance1                   \
                                                                                                            )                           \
                                                                                                      ,distance_D1_D2                   \
                                                                                                       );                               \
                                                                                                  EGAL(ASI2(particuleD1                 \
                                                                                                           ,voisines                    \
                                                                                                           ,voisine1                    \
                                                                                                            )                           \
                                                                                                      ,particuleD2                      \
                                                                                                       );                               \
                                                                                                  EGAL(ASI2(particuleD1                 \
                                                                                                           ,voisines                    \
                                                                                                           ,vide                        \
                                                                                                            )                           \
                                                                                                      ,FAUX                             \
                                                                                                       );                               \
                                        /* Memorisation de la proximite D1 --> D2 (on notera que la relation D2 --> D1 ne sera       */ \
                                        /* memorisee que si D1 et D2 forment bien les 2 voisines les plus proches...).               */ \
                                                                                                  Eblock                                \
                                                                                             ATes                                       \
                                                                                                  Bblock                                \
                                                                                                  Eblock                                \
                                                                                             ETes                                       \
                                                                                             Eblock                                     \
                                                                                        ATes                                            \
                                                                                             Bblock                                     \
                                        /* Cas ou les deux particules sont trop eloignes, et ne peuvent interagir...                 */ \
                                                                                             Eblock                                     \
                                                                                        ETes                                            \
                                                                                        Eblock                                          \
                                                                                   ATes                                                 \
                                                                                        Bblock                                          \
                                        /* Cas ou D1=D2...                                                                           */ \
                                                                                        Eblock                                          \
                                                                                   ETes                                                 \
                                                                                   )                                                    \
                                                                              );                                                        \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                        /* Cas d'une particule trop jeune, pas de collisions possibles pour elle...                  */ \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD1,PARTICULE_COURANTE);                                                  \
                                                 Test(EST_FAUX(ASI2(particuleD1,voisines,vide)))                                        \
                                        /* Nota important : lors du processus qui va suivre, des particles vont etre crees, mais,    */ \
                                        /* pour elles, le test precedent est faux (voir 'VOISINAGE_D_UNE_PARTICULE(...)'). Donc      */ \
                                        /* ces particules ne seront pas manipulees en ce qui concerne les collisions...              */ \
                                                      Bblock                                                                            \
                                                      EGAL(particuleD2,ASI2(particuleD1,voisines,voisine1));                            \
                                        /* Recuperation d'un couple (D1,D2) de 2 particules voisines...                              */ \
                                                                                                                                        \
                                                      COLLISION_EVENTUELLE_ExP;                                                         \
                                        /* Vertex : ExP --> E.                                                                       */ \
                                        /* Nota : le vertex PxE --> E est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                                      COLLISION_EVENTUELLE_AExP;                                                        \
                                        /*          _       _                                                                        */ \
                                        /* Vertex : ExP --> E.                                                                       */ \
                                        /*                    _     _                                                                */ \
                                        /* Nota : le vertex PxE --> E est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                                                                                                                        \
                                                      COLLISION_EVENTUELLE_ExZ;                                                         \
                                        /* Vertex : ExZ --> E.                                                                       */ \
                                        /* Nota : le vertex ZxE --> E est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                                      COLLISION_EVENTUELLE_AExZ;                                                        \
                                        /*          _       _                                                                        */ \
                                        /* Vertex : ExZ --> E.                                                                       */ \
                                        /*                    _     _                                                                */ \
                                        /* Nota : le vertex ZxE --> E est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                                      COLLISION_EVENTUELLE_ExAE;                                                        \
                                        /*            _                                                                              */ \
                                        /* Vertex : ExE --> P.                                                                       */ \
                                        /*                  _                                                                        */ \
                                        /* Nota : le vertex ExE --> P est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                        /*                                                                                           */ \
                                        /*            _                                                                              */ \
                                        /* Vertex : ExE --> Z.                                                                       */ \
                                        /*                  _                                                                        */ \
                                        /* Nota : le vertex ExE --> Z est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                                                                                                                        \
                                                      Eblock                                                                            \
                                                 ATes                                                                                   \
                                                      Bblock                                                                            \
                                                      Eblock                                                                            \
                                                 ETes                                                                                   \
                                                 )                                                                                      \
                                            );                                                                                          \
                    Eblock                                                                                                              \
                                        /* Evenements collisionnels pour les ensembles de 2 particules voisines dans le proton.      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES,P2,___EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES))

EFonctionI

#define   ___EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES                                                                                 \
                    Bblock                                                                                                              \
                    PROCESSUS_INCOMPLET("evenements collisionnels pour les ensembles de 3 particules");                                 \
                    Eblock                                                                                                              \
                                        /* Evenements collisionnels pour les ensembles de 3 particules voisines dans le proton.      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES,P3,___EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES))

EFonctionI

#define   ___EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES                                                                                 \
                    Bblock                                                                                                              \
                    PROCESSUS_INCOMPLET("evenements collisionnels pour les ensembles de 4 particules");                                 \
                    Eblock                                                                                                              \
                                        /* Evenements collisionnels pour les ensembles de 4 particules voisines dans le proton.      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES,P4,___EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES))

EFonctionI

#define   ___EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES                                                                               \
                    Bblock                                                                                                              \
                    EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES;                                                                         \
                                        /* Les evenements a 4 particules etant les plus rares, ils sont testes en premier afin       */ \
                                        /* de ne pas etre masques par ceux a 3 et 2 particules...                                    */ \
                    EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES;                                                                         \
                                        /* Evenements a 3 particules...                                                              */ \
                    EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES;                                                                         \
                                        /* Les evenements a 2 particules sont donc testes en dernier...                              */ \
                    Eblock                                                                                                              \
                                        /* Evenements collisionnels pour l'ensemble des particules presentes dans le proton,         */ \
                                        /* et correspondant, par exemple, a ce que j'appelerai, des collisions...                    */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES,P,___EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES))

EFonctionI



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