/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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/nucleon.LH$I' :                                                                                            */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1991??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   F O R T E   ( " S T R O N G   I N T E R A C T I O N " )                                            */
/*                                                                                                                                   */
/*        D I F F E R E N T S   T Y P E S   D 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  :                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_STRONG_ANNHILATION_GxGxGxG___V                                                                                 \
                    GRO1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ANNHILATION_GxGxGxG___V,PROBABILITE_DE_STRONG_ANNHILATION_GxGxGxG___V)));
                                        /* Probabilite du vertex : GxGxGxG --> V.                                                    */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ANNHILATION_GxGxGxG___V,ZERO)));
                                        /* Compteur des vertex : GxGxGxG --> V.                                                      */
#define   STRONG_ANNHILATION_GxGxGxG___V(gluonD1,gluonD2,gluonD3,gluonD4)                                                               \
                    Bblock                                                                                                              \
                    TRACE_D_UN_EVENEMENT(Prin4("STRONG_ANNHILATION_GxGxGxG___V               G(%d)xG(%d)xG(%d)xG(%d) --> VIDE"          \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(gluonD2)                                                                       \
                                              ,ETIQUETTE(gluonD3)                                                                       \
                                              ,ETIQUETTE(gluonD4)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD2);                                                                            \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD3);                                                                            \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD4);                                                                            \
                    INCR(compteur_de_STRONG_ANNHILATION_GxGxGxG___V,I);                                                                 \
                    Eblock                                                                                                              \
                                        /* Vertex : GxGxGxG --> V.                                                                   */

#define   PROBABILITE_DE_STRONG_ANNHILATION_GxGxG___V                                                                                   \
                    GRO1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ANNHILATION_GxGxG___V,PROBABILITE_DE_STRONG_ANNHILATION_GxGxG___V)));
                                        /* Probabilite du vertex : GxGxG --> V.                                                      */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ANNHILATION_GxGxG___V,ZERO)));
                                        /* Compteur des vertex : GxGxG --> V.                                                        */
#define   STRONG_ANNHILATION_GxGxG___V(gluonD1,gluonD2,gluonD3)                                                                         \
                    Bblock                                                                                                              \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_ANNHILATION_GxGxG___V                 G(%d)xG(%d)xG(%d) --> VIDE"                \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(gluonD2)                                                                       \
                                              ,ETIQUETTE(gluonD3)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD2);                                                                            \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD3);                                                                            \
                    INCR(compteur_de_STRONG_ANNHILATION_GxGxG___V,I);                                                                   \
                    Eblock                                                                                                              \
                                        /* Vertex : GxGxG --> V.                                                                     */

#define   PROBABILITE_DE_STRONG_ANNHILATION_QxAQxG___V                                                                                  \
                    GRO1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ANNHILATION_QxAQxG___V,PROBABILITE_DE_STRONG_ANNHILATION_QxAQxG___V)));
                                        /*                           _                                                               */
                                        /* Probabilite du vertex : QxQxG --> V.                                                      */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ANNHILATION_QxAQxG___V,ZERO)));
                                        /*                         _                                                                 */
                                        /* Compteur des vertex : QxQxG --> V.                                                        */
#define   STRONG_ANNHILATION_QxAQxG___V(quarkD1,anti_quarkD1,gluonD1)                                                                   \
                    Bblock                                                                                                              \
                    ATTENTION_EST_CE_UN_QUARK_REEL(quarkD1);                                                                            \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_ANNHILATION_QxAQxG___V                Q(%d)xAQ(%d)xG(%d) --> VIDE"               \
                                              ,ETIQUETTE(quarkD1)                                                                       \
                                              ,ETIQUETTE(anti_quarkD1)                                                                  \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_QUARK_VIRTUEL(quarkD1);                                                                            \
                    DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkD1);                                                                  \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    INCR(compteur_de_STRONG_ANNHILATION_QxAQxG___V,I);                                                                  \
                    Eblock                                                                                                              \
                                        /*            _                                                                              */ \
                                        /* Vertex : QxQxG --> V.                                                                     */

#define   PROBABILITE_DE_STRONG_ABSORBTION_QxG___Q                                                                                      \
                    GRO3(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ABSORBTION_QxG___Q,PROBABILITE_DE_STRONG_ABSORBTION_QxG___Q)));
                                        /* Probabilite du vertex : QxG --> Q.                                                        */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ABSORBTION_QxG___Q,ZERO)));
                                        /* Compteur des vertex : QxG --> Q.                                                          */
#define   STRONG_ABSORBTION_QxG___Q(quarkD1,gluonD1,quarkA1)                                                                            \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,quarkD1,gluonD1);        \
                                        /* 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_QUARK_OU_D_UN_ANTI_QUARK(quarkD1);                                        \
                                        /* On fixe a priori la conservation de la vitesse du quark...                                */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle                 \
                                                                                          ,PERTURBER_UNE_DIRECTION                      \
                                                                                           );                                           \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_QUARK_VIRTUEL(quarkA1                                                                                 \
                                               ,SAVEUR(quarkD1)                                                                         \
                                               ,position_du_vertex                                                                      \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(quarkA1,PERTURBER_UNE_POSITION);                           \
                    ADDITION_DE_2_CHARGES_DE_COULEUR(quarkA1                                                                            \
                                                    ,quarkD1,gluonD1                                                                    \
                                                     );                                                                                 \
                    RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(quarkA1);                                                                   \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(quarkA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(quarkA1);                                        \
                    CHANGEMENT_EVENTUEL_DE_QUARK_REEL(quarkD1,quarkA1);                                                                 \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_ABSORBTION_QxG___Q                    Q(%d)xG(%d) --> Q(%d)"                     \
                                              ,ETIQUETTE(quarkD1)                                                                       \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(quarkA1)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_QUARK(quarkD1);                                                                                    \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_QUARK_VIRTUEL(quarkD1)' car en effet, 'quarkD1' peut   */ \
                                        /* etre un quark REEL...                                                                     */ \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                  \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                               \
                    INCR(compteur_de_STRONG_ABSORBTION_QxG___Q,I);                                                                      \
                    Eblock                                                                                                              \
                                        /* Vertex : QxG --> Q.                                                                       */

#define   PROBABILITE_DE_STRONG_ABSORBTION_AQxG___AQ                                                                                    \
                    GRO3(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ABSORBTION_AQxG___AQ,PROBABILITE_DE_STRONG_ABSORBTION_AQxG___AQ)));
                                        /*                         _       _                                                         */
                                        /* Probabilite du vertex : QxG --> Q.                                                        */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ABSORBTION_AQxG___AQ,ZERO)));
                                        /*                       _       _                                                           */
                                        /* Compteur des vertex : QxG --> Q.                                                          */
#define   STRONG_ABSORBTION_AQxG___AQ(anti_quarkD1,gluonD1,anti_quarkA1)                                                                \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,anti_quarkD1,gluonD1);   \
                                        /* 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_QUARK_OU_D_UN_ANTI_QUARK(anti_quarkD1);                                   \
                                        /* On fixe a priori la conservation de la vitesse de l'anti-quark...                         */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle                 \
                                                                                          ,PERTURBER_UNE_DIRECTION                      \
                                                                                           );                                           \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkA1                                                                       \
                                                    ,SAVEUR(anti_quarkD1)                                                               \
                                                    ,position_du_vertex                                                                 \
                                                    ,vitesse_courante                                                                   \
                                                    ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie                                    \
                                                     );                                                                                 \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_quarkA1,PERTURBER_UNE_POSITION);                      \
                    ADDITION_DE_2_CHARGES_DE_COULEUR(anti_quarkA1                                                                       \
                                                    ,anti_quarkD1,gluonD1                                                               \
                                                     );                                                                                 \
                    RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(anti_quarkA1);                                                              \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(anti_quarkA1);                                              \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(anti_quarkA1);                                   \
                    CHANGEMENT_EVENTUEL_D_ANTI_QUARK_REEL(anti_quarkD1,anti_quarkA1);                                                   \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_ABSORBTION_AQxG___AQ                  AQ(%d)xG(%d) --> AQ(%d)"                   \
                                              ,ETIQUETTE(anti_quarkD1)                                                                  \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(anti_quarkA1)                                                                  \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkD1);                                                                  \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                  \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                               \
                    INCR(compteur_de_STRONG_ABSORBTION_AQxG___AQ,I);                                                                    \
                    Eblock                                                                                                              \
                                        /*          _       _                                                                        */ \
                                        /* Vertex : QxG --> Q.                                                                       */

#define   PROBABILITE_DE_STRONG_TRANSFORMATION_QxAQ___G                                                                                 \
                    GRO3(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_TRANSFORMATION_QxAQ___G,PROBABILITE_DE_STRONG_TRANSFORMATION_QxAQ___G)));
                                        /*                           _                                                               */
                                        /* Probabilite du vertex : QxQ --> G.                                                        */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_TRANSFORMATION_QxAQ___G,ZERO)));
                                        /*                         _                                                                 */
                                        /* Compteur des vertex : QxQ --> G.                                                          */
#define   STRONG_TRANSFORMATION_QxAQ___G(quarkD1,anti_quarkD1,gluonA1)                                                                  \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,quarkD1,anti_quarkD1);   \
                                        /* 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...                                                     */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_GLUON;                                                        \
                                        /* Le module de la vitesse des gluons est figees, puisque ces particules se deplacent a la   */ \
                                        /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques).         */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle                 \
                                                                                          ,PERTURBER_UNE_DIRECTION                      \
                                                                                           );                                           \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA1                                                                                 \
                                               ,position_du_vertex                                                                      \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION);                           \
                    ADDITION_DE_2_CHARGES_DE_COULEUR(gluonA1                                                                            \
                                                    ,quarkD1,anti_quarkD1                                                               \
                                                     );                                                                                 \
                    RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                                   \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1);                                        \
                    ATTENTION_EST_CE_UN_QUARK_REEL(quarkD1);                                                                            \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_TRANSFORMATION_QxAQ___G               Q(%d)xAQ(%d) --> G(%d)"                    \
                                              ,ETIQUETTE(quarkD1)                                                                       \
                                              ,ETIQUETTE(anti_quarkD1)                                                                  \
                                              ,ETIQUETTE(gluonA1)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_QUARK_VIRTUEL(quarkD1);                                                                            \
                    DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkD1);                                                                  \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                  \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                               \
                    INCR(compteur_de_STRONG_TRANSFORMATION_QxAQ___G,I);                                                                 \
                    Eblock                                                                                                              \
                                        /*            _                                                                              */ \
                                        /* Vertex : QxQ --> G.                                                                       */

#define   PROBABILITE_DE_STRONG_TRANSFORMATION_GxG___G                                                                                  \
                    GRO3(FRA10(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_TRANSFORMATION_GxG___G,PROBABILITE_DE_STRONG_TRANSFORMATION_GxG___G)));
                                        /* Probabilite du vertex : GxG --> G.                                                        */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_TRANSFORMATION_GxG___G,ZERO)));
                                        /* Compteur des vertex : GxG --> G.                                                          */
#define   STRONG_TRANSFORMATION_GxG___G(gluonD1,gluonD2,gluonA1)                                                                        \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,gluonD1,gluonD2);        \
                                        /* 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...                                                     */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_GLUON;                                                        \
                                        /* Le module de la vitesse des gluons est figees, puisque ces particules se deplacent a la   */ \
                                        /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques).         */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle                 \
                                                                                          ,PERTURBER_UNE_DIRECTION                      \
                                                                                           );                                           \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA1                                                                                 \
                                               ,position_du_vertex                                                                      \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION);                           \
                    ADDITION_DE_2_CHARGES_DE_COULEUR(gluonA1                                                                            \
                                                    ,gluonD1,gluonD2                                                                    \
                                                     );                                                                                 \
                    RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                                   \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1);                                        \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_TRANSFORMATION_GxG___G                G(%d)xG(%d) --> G(%d)"                     \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(gluonD2)                                                                       \
                                              ,ETIQUETTE(gluonA1)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD2);                                                                            \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                  \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION;                                               \
                    INCR(compteur_de_STRONG_TRANSFORMATION_GxG___G,I);                                                                  \
                    Eblock                                                                                                              \
                                        /* Vertex : GxG --> G.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R A C T I O N   F O R T E   ( " S T R O N G   I N T E R A C T I O N " )                                            */
/*                                                                                                                                   */
/*        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(...)' :                                                                */
                                        /*                                                                                           */
                                        /*                  STRONG_ABSORBTION_QxG___Q(...),                                          */
                                        /*                  STRONG_ABSORBTION_AQxG___AQ(...),                                        */
                                        /*                  STRONG_TRANSFORMATION_QxAQ___G(...).                                     */
                                        /*                                                                                           */
#define   ADOLESCENCE_D_UNE_PARTICULE                                                                                                   \
                    GRO4(FRA10(DIVI(VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES                                                         \
                                   ,MIN2(VITESSE_MOYENNE_DES_QUARKS_ET_DES_ANTI_QUARKS                                                  \
                                        ,VITESSE_DES_GLUONS                                                                             \
                                         )                                                                                              \
                                    )                                                                                                   \
                               )                                                                                                        \
                         )                                                                                                              \
                                        /* 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. Mais ATTENTION : il faut reduite cette duree par 'GRO4(FRA10(...))' car, en   */ \
                                        /* effet, une duree d'adolescence trop elevee fait qu'une particule risque de mourir avant   */ \
                                        /* d'avoir atteint cet age, et donc ne jamais pouvoir collisionner...                        */ \
                                        /*                                                                                           */ \
                                        /* 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...           */
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)                                                                    \
                    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...                        */ \
                              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...                     */

#ifdef    __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE
#    define    COLLISION_EVENTUELLE_QxG                                                                                                 \
                         Bblock                                                                                                         \
                         COLLISION(IFET(IMEQ(NATURE(particuleD1)                                                                        \
                                            ,QUARK_REEL                                                                                 \
                                            ,QUARK_VIRTUEL                                                                              \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,GLUON_VIRTUEL                                                                              \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,probabilite_de_STRONG_ABSORBTION_QxG___Q                                                             \
                                  ,STRONG_ABSORBTION_QxG___Q(particuleD1,particuleD2,quarkA1);                                          \
                                   );                                                                                                   \
                         Eblock                                                                                                         \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  QxG --> Q                                                                */ \
                                        /*                                                                                           */
#    define    COLLISION_EVENTUELLE_AQxG                                                                                                \
                         Bblock                                                                                                         \
                         COLLISION(IFET(IMEQ(NATURE(particuleD1)                                                                        \
                                            ,ANTI_QUARK_REEL                                                                            \
                                            ,ANTI_QUARK_VIRTUEL                                                                         \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,GLUON_VIRTUEL                                                                              \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,probabilite_de_STRONG_ABSORBTION_AQxG___AQ                                                           \
                                  ,STRONG_ABSORBTION_AQxG___AQ(particuleD1,particuleD2,anti_quarkA1);                                   \
                                   );                                                                                                   \
                         Eblock                                                                                                         \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  AQxG --> AQ                                                              */ \
                                        /*                                                                                           */
#Aifdef   __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE
#    define    COLLISION_EVENTUELLE_QxG                                                                                                 \
                         Bblock                                                                                                         \
                         COLLISION(IFET(IFEQ(NATURE(particuleD1)                                                                        \
                                            ,QUARK_VIRTUEL                                                                              \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,GLUON_VIRTUEL                                                                              \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,probabilite_de_STRONG_ABSORBTION_QxG___Q                                                             \
                                  ,STRONG_ABSORBTION_QxG___Q(particuleD1,particuleD2,quarkA1);                                          \
                                   );                                                                                                   \
                         Eblock                                                                                                         \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  QxG --> Q                                                                */ \
                                        /*                                                                                           */
#    define    COLLISION_EVENTUELLE_AQxG                                                                                                \
                         Bblock                                                                                                         \
                         COLLISION(IFET(IFEQ(NATURE(particuleD1)                                                                        \
                                            ,ANTI_QUARK_VIRTUEL                                                                         \
                                             )                                                                                          \
                                       ,IFEQ(NATURE(particuleD2)                                                                        \
                                            ,GLUON_VIRTUEL                                                                              \
                                             )                                                                                          \
                                        )                                                                                               \
                                  ,probabilite_de_STRONG_ABSORBTION_AQxG___AQ                                                           \
                                  ,STRONG_ABSORBTION_AQxG___AQ(particuleD1,particuleD2,anti_quarkA1);                                   \
                                   );                                                                                                   \
                         Eblock                                                                                                         \
                                        /* Collision eventuelle du type :                                                            */ \
                                        /*                                                                                           */ \
                                        /*                  AQxG --> AQ                                                              */ \
                                        /*                                                                                           */
#Eifdef   __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE

#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_QxG;                                                         \
                                        /* Vertex : QxG --> Q.                                                                       */ \
                                        /* Nota : le vertex GxQ --> Q est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                                      COLLISION_EVENTUELLE_AQxG;                                                        \
                                        /*          _       _                                                                        */ \
                                        /* Vertex : QxG --> Q.                                                                       */ \
                                        /*                    _     _                                                                */ \
                                        /* Nota : le vertex GxQ --> Q est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                                      COLLISION(IFET(IFEQ(NATURE(particuleD1)                                           \
                                                                         ,QUARK_VIRTUEL                                                 \
                                                                          )                                                             \
                                                                    ,IFEQ(NATURE(particuleD2)                                           \
                                                                         ,ANTI_QUARK_VIRTUEL                                            \
                                                                          )                                                             \
                                                                     )                                                                  \
                                                               ,probabilite_de_STRONG_TRANSFORMATION_QxAQ___G                           \
                                                               ,STRONG_TRANSFORMATION_QxAQ___G(particuleD1,particuleD2,gluonA1);        \
                                                                );                                                                      \
                                        /*            _                                                                              */ \
                                        /* Vertex : QxQ --> G,                                                                       */ \
                                        /*                  _                                                                        */ \
                                        /* Nota : le vertex QxQ --> G est obligatoirement present dans la liste (voir la symetrie    */ \
                                        /* de 'distance_D1_D2'...).                                                                  */ \
                                        /*                                                                                           */ \
                                        /* ATTENTION : pour conserver les trois quarks REELs, on ne regarde pas si 'particuleD1'     */ \
                                        /* ou 'particuleD2' sont des quarks REELs ; le test 'COLLISION(...)' ci-dessus n'est donc    */ \
                                        /* fait que pour les 'QUARK_VIRTUEL' et les 'ANTI_QUARK_VIRTUEL'...                          */ \
                                                      COLLISION(IFET(IFEQ(NATURE(particuleD1)                                           \
                                                                         ,GLUON_VIRTUEL                                                 \
                                                                          )                                                             \
                                                                    ,IFEQ(NATURE(particuleD2)                                           \
                                                                         ,GLUON_VIRTUEL                                                 \
                                                                          )                                                             \
                                                                     )                                                                  \
                                                               ,probabilite_de_STRONG_TRANSFORMATION_GxG___G                            \
                                                               ,STRONG_TRANSFORMATION_GxG___G(particuleD1,particuleD2,gluonA1);         \
                                                                );                                                                      \
                                        /* Vertex : GxG --> G.                                                                       */ \
                                                      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-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.