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

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   Q U A R K  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_Q                                                                                                     \
                    GRO1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_Q,PROBABILITE_DE_INCHANGE_Q)));
                                        /* Probabilite du vertex : Q --> Q.                                                          */
#define   INCHANGE_Q(quarkD1)                                                                                                           \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Vertex : Q --> Q.                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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 " )                                            */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   Q U A R K  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_STRONG_EMISSION_Q___QxG                                                                                        \
                    GRO1(FRA12(PROBABILITE_DE_INCHANGE_Q))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_EMISSION_Q___QxG,PROBABILITE_DE_STRONG_EMISSION_Q___QxG)));
                                        /* Probabilite du vertex : Q --> QxG.                                                        */
#define   ANGLE_POLARISATION_DE_STRONG_EMISSION_Q___QxG                                                                                 \
                    NEGA(GRO5(FRA9(PI_SUR_2)))
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_STRONG_EMISSION_Q___QxG
                          ,ANGLE_POLARISATION_DE_STRONG_EMISSION_Q___QxG
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : Q --> QxG.                                              */
#define   INTERCEPTION_PAR_UN_GLUON_LORS_DE_STRONG_EMISSION_Q___QxG                                                                     \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(interception_par_un_gluon_lors_de_STRONG_EMISSION_Q___QxG
                            ,INTERCEPTION_PAR_UN_GLUON_LORS_DE_STRONG_EMISSION_Q___QxG
                             )
                )
     );
                                        /* Cet indicateur precise si l'echange d'un gluon se fait par une simple emission par un     */
                                        /* quark ('FAUX') ou par le processus d'interception ('VRAI').                               */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_EMISSION_Q___QxG,ZERO)));
                                        /* Compteur des vertex : Q --> QxG.                                                          */
#define   STRONG_EMISSION_Q___QxG(quarkD1,quarkA1,gluonA1)                                                                              \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE(quarkD1);                                     \
                                        /* Alignement de l'axe 'OX2' le long de 'quarkD1'...                                         */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                 \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'Q --> QxG' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le quark    */ \
                                        /* se deplace le long de l'axe 'OX2'.                                                        */ \
                    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...                                */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_EMISSION_Q___QxG)                    \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_QUARK_VIRTUEL(quarkA1                                                                                 \
                                               ,SAVEUR(quarkD1)                                                                         \
                                               ,ASI2(quarkD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                    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).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_EMISSION_Q___QxG)                    \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA1                                                                                 \
                                               ,ASI2(quarkD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                                        /* ATTENTION : 'gluonA1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra  */ \
                                        /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_GLUON(...)' au cas ou    */ \
                                        /* ce gluon aurait la possibilite raisonnable d'intercepter un anti-quark...                 */ \
                    EGAL(quarkD2,quarkD1);                                                                                              \
                                        /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire, 'quarkD1' */ \
                                        /* est en fait 'PARTICULE_COURANTE', et qu'utiliser 'quarkD1' en tant que 'particuleA' dans  */ \
                                        /* 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion terrible...                   */ \
                    RECHERCHE_D_UNE_PARTICULE(quarkA2                                                                                   \
                                             ,interception_par_un_gluon_lors_de_STRONG_EMISSION_Q___QxG                                 \
                                             ,EVENEMENT_CERTAIN                                                                         \
                                             ,quarkD2,quarkA1                                                                           \
                                             ,I3ET(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),QUARK_REEL)                                     \
                                                       ,IFEQ(NATURE(PARTICULE_COURANTE),QUARK_VIRTUEL)                                  \
                                                        )                                                                               \
                                                  ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE)                          \
                                                  ,IFLT(pDISTANCE(quarkD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2))                \
                                                   )                                                                                    \
                                              );                                                                                        \
                                        /* Recherche d'un quark 'quarkA2' proche du quark 'quarkD1' (alias 'quarkD2'...) et qui ne   */ \
                                        /* soit pas encore vise par un gluon (d'ou le test sur la duree de vie moyenne).             */ \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                    Test(IFNE(quarkA2,PARTICULE_NON_DEFINIE))                                                                           \
                         Bblock                                                                                                         \
                         INTERCEPTION_PARTICULE_PAR_UN_GLUON(quarkA2                                                                    \
                                                            ,quarkD1                                                                    \
                                                            ,gluonA1,VITESSE_DES_GLUONS,DUREE_DE_VIE_MOYENNE_COURANTE(gluonA1)          \
                                                             );                                                                         \
                                        /* Lorsque l'on a trouve un quark 'quarkA2' suffisamment proche du quark 'quarkD1', on tente */ \
                                        /* l'interception de 'quarkA2' par 'gluonA1' emis par le quark 'quarkD1'...                  */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \
                                        /* 'INTERCEPTION_PARTICULE_PAR_UN_GLUON(...)' peut changer l'etat de 'quarkA2' et lui donner */ \
                                        /* la valeur 'PARTICULE_NON_DEFINIE'...                                                      */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Test(IFEQ(quarkA2,PARTICULE_NON_DEFINIE))                                                                           \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(quarkA1,PERTURBER_UNE_POSITION);                      \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION);                      \
                                        /* Lorsque l'on n'a pas trouve un quark 'quarkA2' suffisamment proche du quark 'quarkD1',    */ \
                                        /* on conserve pour le gluon 'gluonA1' la vitesse 'vitesse_courante'...                      */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(quarkA2);                                                               \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(gluonA1);                                                               \
                                        /* Lorsque l'on a trouve un quark 'quarkA2' suffisamment proche du quark 'quarkD1', on       */ \
                                        /* allonge artificiellement la duree de vie moyenne de 'quarkA2' et de 'gluonA1' afin        */ \
                                        /* de reduire au maximum les chances que se produisent pour eux des evenements conditionnels */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_QUARKS,                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_GLUONS.                           */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    CONSERVATION_DE_2_CHARGES_DE_COULEUR(quarkA1,gluonA1                                                                \
                                                        ,quarkD1                                                                        \
                                                         );                                                                             \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(quarkA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(quarkA1);                                        \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1);                                        \
                    CHANGEMENT_EVENTUEL_DE_QUARK_REEL(quarkD1,quarkA1);                                                                 \
                    Test(IFEQ(quarkA2,PARTICULE_NON_DEFINIE))                                                                           \
                         Bblock                                                                                                         \
                                        /* Cas ou aucune particule ne peut etre "visee" :                                            */ \
                         TRACE_D_UN_EVENEMENT(Prin3("STRONG_EMISSION_Q___QxG                      Q(%d) --> Q(%d)xG(%d)"                \
                                                   ,ETIQUETTE(quarkD1)                                                                  \
                                                   ,ETIQUETTE(quarkA1)                                                                  \
                                                   ,ETIQUETTE(gluonA1)                                                                  \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou une particule est "visee" :                                                        */ \
                         TRACE_D_UN_EVENEMENT(Prin4("STRONG_EMISSION_Q___QxG                      Q(%d) --> Q(%d)xG(%d) =O=> Q(%d)"     \
                                                   ,ETIQUETTE(quarkD1)                                                                  \
                                                   ,ETIQUETTE(quarkA1)                                                                  \
                                                   ,ETIQUETTE(gluonA1)                                                                  \
                                                   ,ETIQUETTE(quarkA2)                                                                  \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    DESTRUCTION_D_UN_QUARK(quarkD1);                                                                                    \
                                        /* On n'utilise pas 'DESTRUCTION_D_UN_QUARK_VIRTUEL(quarkD1)' car en effet, 'quarkD1' peut   */ \
                                        /* etre un quark REEL...                                                                     */ \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                   \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                                \
                    INCR(compteur_de_STRONG_EMISSION_Q___QxG,I);                                                                        \
                    Eblock                                                                                                              \
                                        /* Vertex : Q --> QxG.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D E   Q U A R K S  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_QUARK                                                                            \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_quark
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_QUARK
                           )
                )
     );
                                        /* Probabilite pour qu'un quark present dans le proton soit la "victime" d'un evenement      */
                                        /* conditionnel du type :                                                                    */
                                        /*                                                                                           */
                                        /*                  INCHANGE_Q,                                                              */
                                        /*                  STRONG_EMISSION_Q___QxG.                                                 */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_QUARKS                                                                              \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le quark courant soit la "victime" d'un evenement conditionnel       */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_Q,                                                              */ \
                                        /*                  STRONG_EMISSION_Q___QxG.                                                 */ \
                                        /*                                                                                           */ \
                    TOTALITE_DES_QUARKS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);                     \
                                             Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                                \
                                                                   ,quarkD1                                                             \
                                                                   ,DUREE_DE_VIE_MOYENNE_COURANTE(quarkD1)                              \
                                                                    )                                                                   \
                                                      ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_quark)                       \
                                                       )                                                                                \
                                                  )                                                                                     \
                                                  Bblock                                                                                \
                                                  DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                                   \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_Q,                                                              */ \
                                        /*                  STRONG_EMISSION_Q___QxG.                                                 */ \
                                        /*                                                                                           */ \
                                                  GENERATION_D_UNE_VALEUR(probabilite_de_choix                                          \
                                                                         ,EVENEMENT_IMPOSSIBLE                                          \
                                                                         ,ADD2(REGUL0(probabilite_de_INCHANGE_Q)                        \
                                                                              ,REGUL1(probabilite_de_STRONG_EMISSION_Q___QxG)           \
                                                                               )                                                        \
                                                                          );                                                            \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                                  DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                                   \
                                                      (probabilite_de_choix);                                                           \
                                                  CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                             \
                                                      (REGUL0(probabilite_de_INCHANGE_Q)                                                \
                                                      ,INCHANGE_Q(quarkD1)                                                              \
                                                       );                                                                               \
                                                  CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                             \
                                                      (REGUL1(probabilite_de_STRONG_EMISSION_Q___QxG)                                   \
                                                      ,STRONG_EMISSION_Q___QxG(quarkD1,quarkA1,gluonA1)                                 \
                                                       );                                                                               \
                                                  FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                                    \
                                                  Eblock                                                                                \
                                             ATes                                                                                       \
                                                  Bblock                                                                                \
                                                  Eblock                                                                                \
                                             ETes                                                                                       \
                                             );                                                                                         \
                                        );                                                                                              \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des quarks presents dans le proton             */ \
                                        /* (REELs ou VIRTUELs).                                                                      */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_QUARKS,Q,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_QUARKS))

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   A N T I - Q U A R K  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_AQ                                                                                                    \
                    PROBABILITE_DE_INCHANGE_Q
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_AQ,PROBABILITE_DE_INCHANGE_AQ)));
                                        /*                         _     _                                                           */
                                        /* Probabilite du vertex : Q --> Q.                                                          */
#define   INCHANGE_AQ(anti_quarkD1)                                                                                                     \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /*          _     _                                                                          */ \
                                        /* Vertex : Q --> Q.                                                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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 " )                                            */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   A N T I - Q U A R K  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_STRONG_EMISSION_AQ___AQxG                                                                                      \
                    PROBABILITE_DE_STRONG_EMISSION_Q___QxG
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_EMISSION_AQ___AQxG,PROBABILITE_DE_STRONG_EMISSION_AQ___AQxG)));
                                        /*                         _     _                                                           */
                                        /* Probabilite du vertex : Q --> QxG.                                                        */
#define   ANGLE_POLARISATION_DE_STRONG_EMISSION_AQ___AQxG                                                                               \
                    NEGA(GRO5(FRA9(PI_SUR_2)))
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_STRONG_EMISSION_AQ___AQxG
                          ,ANGLE_POLARISATION_DE_STRONG_EMISSION_AQ___AQxG
                           )
                )
     );
                                        /*                                   _     _                                                 */
                                        /* Dispersion de l'angle du vertex : Q --> QxG.                                              */
#define   INTERCEPTION_PAR_UN_GLUON_LORS_DE_STRONG_EMISSION_AQ___AQxG                                                                   \
                    VRAI
DEFV(Local,DEFV(Logical,INIT(interception_par_un_gluon_lors_de_STRONG_EMISSION_AQ___AQxG
                            ,INTERCEPTION_PAR_UN_GLUON_LORS_DE_STRONG_EMISSION_AQ___AQxG
                             )
                )
     );
                                        /* Cet indicateur precise si l'echange d'un gluon se fait par une simple emission par un     */
                                        /* anti-quark ('FAUX') ou par le processus d'interception ('VRAI').                          */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_EMISSION_AQ___AQxG,ZERO)));
                                        /*                       _     _                                                             */
                                        /* Compteur des vertex : Q --> QxG.                                                          */
#define   STRONG_EMISSION_AQ___AQxG(anti_quarkD1,anti_quarkA1,gluonA1)                                                                  \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE(anti_quarkD1);                                \
                                        /* Alignement de l'axe 'OX2' le long de 'anti_quarkD1'...                                    */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                 \
                                        /*                                                                   _     _                 */ \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'Q --> QxG' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que             */ \
                                        /* l'anti-quark se deplace le long de l'axe 'OX2'.                                           */ \
                    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...                         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_EMISSION_AQ___AQxG)                  \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkA1                                                                       \
                                                    ,SAVEUR(anti_quarkD1)                                                               \
                                                    ,ASI2(anti_quarkD1,espace_temps,position_courante)                                  \
                                                    ,vitesse_courante                                                                   \
                                                    ,ROUGE_indefinie                                                                    \
                                                    ,VERTE_indefinie                                                                    \
                                                    ,BLEUE_indefinie                                                                    \
                                                     );                                                                                 \
                    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).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_EMISSION_AQ___AQxG)                  \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA1                                                                                 \
                                               ,ASI2(anti_quarkD1,espace_temps,position_courante)                                       \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                                        /* ATTENTION : 'gluonA1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra  */ \
                                        /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_GLUON(...)' au cas ou    */ \
                                        /* ce gluon aurait la possibilite raisonnable d'intercepter un quark...                      */ \
                    EGAL(anti_quarkD2,anti_quarkD1);                                                                                    \
                                        /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire,           */ \
                                        /* 'anti_quarkD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'anti_quarkD1' en tant    */ \
                                        /* que 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion         */ \
                                        /* terrible...                                                                               */ \
                    RECHERCHE_D_UNE_PARTICULE(anti_quarkA2                                                                              \
                                             ,interception_par_un_gluon_lors_de_STRONG_EMISSION_AQ___AQxG                               \
                                             ,EVENEMENT_CERTAIN                                                                         \
                                             ,anti_quarkD2,anti_quarkA1                                                                 \
                                             ,I3ET(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_QUARK_REEL)                                \
                                                       ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_QUARK_VIRTUEL)                             \
                                                        )                                                                               \
                                                  ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE)                          \
                                                  ,IFLT(pDISTANCE(anti_quarkD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2))           \
                                                   )                                                                                    \
                                              );                                                                                        \
                                        /* Recherche d'un anti-quark 'anti_quarkA2' proche de l'anti-quark 'anti_quarkD1' (alias     */ \
                                        /* 'anti_quarkD2') et qui ne soit pas encore vise par gluon (d'ou le test sur la duree de    */ \
                                        /* vie moyenne).                                                                             */ \
                                        /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'.                   */ \
                    Test(IFNE(anti_quarkA2,PARTICULE_NON_DEFINIE))                                                                      \
                         Bblock                                                                                                         \
                         INTERCEPTION_PARTICULE_PAR_UN_GLUON(anti_quarkA2                                                               \
                                                            ,anti_quarkD1                                                               \
                                                            ,gluonA1,VITESSE_DES_GLUONS,DUREE_DE_VIE_MOYENNE_COURANTE(gluonA1)          \
                                                             );                                                                         \
                                        /* Lorsque l'on a trouve un anti-quark 'anti_quarkA2' suffisamment proche de l'anti-quark    */ \
                                        /* 'anti_quarkD1', on tente l'interception de 'anti_quarkA2' par 'gluonA1' emis par          */ \
                                        /* l'anti-quark 'anti_quarkD1'...                                                            */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \
                                        /* 'INTERCEPTION_PARTICULE_PAR_UN_GLUON(...)' peut changer l'etat de 'anti_quarkA2' et lui   */ \
                                        /* donner la valeur 'PARTICULE_NON_DEFINIE'...                                               */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Test(IFEQ(anti_quarkA2,PARTICULE_NON_DEFINIE))                                                                      \
                         Bblock                                                                                                         \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_quarkA1,PERTURBER_UNE_POSITION);                 \
                         FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION);                      \
                                        /* Lorsque l'on n'a pas trouve un anti-quark 'anti_quarkA2' suffisamment proche de           */ \
                                        /* l'anti-quark 'anti_quarkD1', on conserve pour le gluon 'gluonA1' la vitesse               */ \
                                        /* 'vitesse_courante'...                                                                     */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(anti_quarkA2);                                                          \
                         ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(gluonA1);                                                               \
                                        /* Lorsque l'on a trouve un quark 'anti_quarkA2' suffisamment proche du quark 'quarkD1', on  */ \
                                        /* allonge artificiellement la duree de vie moyenne de 'anti_quarkA2' et de 'gluonA1' afin   */ \
                                        /* de reduire au maximum les chances que se produisent pour eux des evenements conditionnels */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_QUARKS,                      */ \
                                        /*                  EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_GLUONS.                           */ \
                                        /*                                                                                           */ \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    CONSERVATION_DE_2_CHARGES_DE_COULEUR(anti_quarkA1,gluonA1                                                           \
                                                        ,anti_quarkD1                                                                   \
                                                         );                                                                             \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(anti_quarkA1);                                              \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(anti_quarkA1);                                   \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1);                                        \
                    CHANGEMENT_EVENTUEL_D_ANTI_QUARK_REEL(anti_quarkD1,anti_quarkA1);                                                   \
                    Test(IFEQ(anti_quarkA2,PARTICULE_NON_DEFINIE))                                                                      \
                         Bblock                                                                                                         \
                                        /* Cas ou aucune particule ne peut etre "visee" :                                            */ \
                         TRACE_D_UN_EVENEMENT(Prin3("STRONG_EMISSION_AQ___AQxG                    AQ(%d) --> AQ(%d)xG(%d)"              \
                                                   ,ETIQUETTE(anti_quarkD1)                                                             \
                                                   ,ETIQUETTE(anti_quarkA1)                                                             \
                                                   ,ETIQUETTE(gluonA1)                                                                  \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Cas ou une particule est "visee" :                                                        */ \
                         TRACE_D_UN_EVENEMENT(Prin4("STRONG_EMISSION_AQ___AQxG                    AQ(%d) --> AQ(%d)xG(%d) =O=> AQ(%d)"  \
                                                   ,ETIQUETTE(anti_quarkD1)                                                             \
                                                   ,ETIQUETTE(anti_quarkA1)                                                             \
                                                   ,ETIQUETTE(gluonA1)                                                                  \
                                                   ,ETIQUETTE(anti_quarkA2)                                                             \
                                                    )                                                                                   \
                                              );                                                                                        \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkD1);                                                                  \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                   \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                                \
                    INCR(compteur_de_STRONG_EMISSION_AQ___AQxG,I);                                                                      \
                    Eblock                                                                                                              \
                                        /*          _     _                                                                          */ \
                                        /* Vertex : Q --> QxG.                                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D ' A N T I - Q U A R K S  :       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ANTI_QUARK                                                                       \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_anti_quark
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ANTI_QUARK
                           )
                )
     );
                                        /* Probabilite pour qu'un anti-quark present dans le proton soit la "victime" d'un evenement */
                                        /* conditionnel du type :                                                                    */
                                        /*                                                                                           */
                                        /*                  INCHANGE_AQ,                                                             */
                                        /*                  STRONG_EMISSION_AQ___AQxG.                                               */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_QUARKS                                                                         \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le anti-quark courant soit la "victime" d'un evenement conditionnel  */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_AQ,                                                             */ \
                                        /*                  STRONG_EMISSION_AQ___AQxG.                                               */ \
                                        /*                                                                                           */ \
                    TOTALITE_DES_ANTI_QUARKS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);                \
                                                  Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                           \
                                                                        ,anti_quarkD1                                                   \
                                                                        ,DUREE_DE_VIE_MOYENNE_COURANTE(anti_quarkD1)                    \
                                                                         )                                                              \
                                                           ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_anti_quark)             \
                                                            )                                                                           \
                                                       )                                                                                \
                                                       Bblock                                                                           \
                                                       DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                              \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_AQ,                                                             */ \
                                        /*                  STRONG_EMISSION_AQ___AQxG.                                               */ \
                                        /*                                                                                           */ \
                                                       GENERATION_D_UNE_VALEUR(probabilite_de_choix                                     \
                                                                              ,EVENEMENT_IMPOSSIBLE                                     \
                                                                              ,ADD2(REGUL0(probabilite_de_INCHANGE_AQ)                  \
                                                                                   ,REGUL1(probabilite_de_STRONG_EMISSION_AQ___AQxG)    \
                                                                                    )                                                   \
                                                                               );                                                       \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                                       DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(probabilite_de_choix);       \
                                                       CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                        \
                                                           (REGUL0(probabilite_de_INCHANGE_AQ)                                          \
                                                           ,INCHANGE_AQ(anti_quarkD1)                                                   \
                                                            );                                                                          \
                                                       CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                        \
                                                           (REGUL1(probabilite_de_STRONG_EMISSION_AQ___AQxG)                            \
                                                           ,STRONG_EMISSION_AQ___AQxG(anti_quarkD1,anti_quarkA1,gluonA1)                \
                                                            );                                                                          \
                                                       FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                               \
                                                       Eblock                                                                           \
                                                  ATes                                                                                  \
                                                       Bblock                                                                           \
                                                       Eblock                                                                           \
                                                  ETes                                                                                  \
                                                  );                                                                                    \
                                             );                                                                                         \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des anti-quarks presents dans le proton        */ \
                                        /* (REELs ou VIRTUELs).                                                                      */

BFonctionI

#define   ___EVENEMENTS_ANTI_QUARKS                                                                                                     \
                    ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_QUARKS
                                        /* Afin de reduire la longueur de la ligne suivante...                                       */

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_QUARKS,AQ,___EVENEMENTS_ANTI_QUARKS))

#undef    ___EVENEMENTS_ANTI_QUARKS

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T   N E U T R E   P O U R   U N   G L U O N  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_INCHANGE_G                                                                                                     \
                    GRO1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_G,PROBABILITE_DE_INCHANGE_G)));
                                        /* Probabilite du vertex : G --> G.                                                          */
#define   INCHANGE_G(gluonD1)                                                                                                           \
                    Bblock                                                                                                              \
                    Eblock                                                                                                              \
                                        /* Vertex : G --> 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 " )                                            */
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   G L U O N  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_DE_STRONG_TRANSFORMATION_G___QxAQ                                                                                 \
                    GRO1(FRA12(PROBABILITE_DE_INCHANGE_G))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_TRANSFORMATION_G___QxAQ,PROBABILITE_DE_STRONG_TRANSFORMATION_G___QxAQ)));
                                        /*                                 _                                                         */
                                        /* Probabilite du vertex : G --> QxQ.                                                        */
#define   ANGLE_POLARISATION_DE_STRONG_TRANSFORMATION_G___QxAQ                                                                          \
                    NEGA(GRO5(FRA9(PI_SUR_2)))
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_STRONG_TRANSFORMATION_G___QxAQ
                          ,ANGLE_POLARISATION_DE_STRONG_TRANSFORMATION_G___QxAQ
                           )
                )
     );
                                        /*                                           _                                               */
                                        /* Dispersion de l'angle du vertex : G --> QxQ.                                              */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_TRANSFORMATION_G___QxAQ,ZERO)));
                                        /*                               _                                                           */
                                        /* Compteur des vertex : G --> QxQ.                                                          */
#define   STRONG_TRANSFORMATION_G___QxAQ(gluonD1,quarkA1,anti_quarkA1)                                                                  \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE(gluonD1);                                     \
                                        /* Alignement de l'axe 'OX2' le long de 'gluonD1'...                                         */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                 \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'G --> QxAQ' dans        */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2).                                 */ \
                    INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_QUARK_OU_D_UN_ANTI_QUARK;                                     \
                                        /* Choix aleatoire du meme module de la vitesse pour 'Q' et 'AQ'...                          */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_TRANSFORMATION_G___QxAQ)             \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_QUARK_VIRTUEL(quarkA1                                                                                 \
                                               ,QUARK_SAVEUR_INDEFINIE                                                                  \
                                               ,ASI2(gluonD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(quarkA1,PERTURBER_UNE_POSITION);                           \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_TRANSFORMATION_G___QxAQ)             \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkA1                                                                       \
                                                    ,QUARK_SAVEUR_INDEFINIE                                                             \
                                                    ,ASI2(gluonD1,espace_temps,position_courante)                                       \
                                                    ,vitesse_courante                                                                   \
                                                    ,ROUGE_indefinie                                                                    \
                                                    ,VERTE_indefinie                                                                    \
                                                    ,BLEUE_indefinie                                                                    \
                                                     );                                                                                 \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_quarkA1,PERTURBER_UNE_POSITION);                      \
                    CONSERVATION_DE_2_CHARGES_DE_COULEUR(quarkA1,anti_quarkA1                                                           \
                                                        ,gluonD1                                                                        \
                                                         );                                                                             \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(quarkA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(quarkA1);                                        \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(anti_quarkA1);                                              \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(anti_quarkA1);                                   \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_TRANSFORMATION_G___QxAQ               G(%d) --> Q(%d)xAQ(%d)"                    \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(quarkA1)                                                                       \
                                              ,ETIQUETTE(anti_quarkA1)                                                                  \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                   \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                                \
                    INCR(compteur_de_STRONG_TRANSFORMATION_G___QxAQ,I);                                                                 \
                    Eblock                                                                                                              \
                                        /*                  _                                                                        */ \
                                        /* Vertex : G --> QxQ.                                                                       */

#define   PROBABILITE_DE_STRONG_TRANSFORMATION_G___GxG                                                                                  \
                    GRO4(FRA3(PROBABILITE_DE_STRONG_TRANSFORMATION_G___QxAQ))
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_TRANSFORMATION_G___GxG,PROBABILITE_DE_STRONG_TRANSFORMATION_G___GxG)));
                                        /* Probabilite du vertex : G --> GxG.                                                        */
#define   ANGLE_POLARISATION_DE_STRONG_TRANSFORMATION_G___GxG                                                                           \
                    NEGA(GRO5(FRA9(PI_SUR_2)))
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_STRONG_TRANSFORMATION_G___GxG
                          ,ANGLE_POLARISATION_DE_STRONG_TRANSFORMATION_G___GxG
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : G --> GxG.                                              */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_TRANSFORMATION_G___GxG,ZERO)));
                                        /* Compteur des vertex : G --> GxG.                                                          */
#define   STRONG_TRANSFORMATION_G___GxG(gluonD1,gluonA1,gluonA2)                                                                        \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE(gluonD1);                                     \
                                        /* Alignement de l'axe 'OX2' le long de 'gluonD1'...                                         */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                 \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'G --> GxG' dans         */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2).                                 */ \
                    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).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_TRANSFORMATION_G___GxG)              \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA1                                                                                 \
                                               ,ASI2(gluonD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION);                           \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(MOIT(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE)))                                      \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_TRANSFORMATION_G___GxG)              \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA2                                                                                 \
                                               ,ASI2(gluonD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA2,PERTURBER_UNE_POSITION);                           \
                    CONSERVATION_DE_2_CHARGES_DE_COULEUR(gluonA1,gluonA2                                                                \
                                                        ,gluonD1                                                                        \
                                                         );                                                                             \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1);                                        \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA2);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA2);                                        \
                    TRACE_D_UN_EVENEMENT(Prin3("STRONG_TRANSFORMATION_G___GxG                G(%d) --> G(%d)xG(%d)"                     \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(gluonA1)                                                                       \
                                              ,ETIQUETTE(gluonA2)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                   \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                                \
                    INCR(compteur_de_STRONG_TRANSFORMATION_G___GxG,I);                                                                  \
                    Eblock                                                                                                              \
                                        /* Vertex : G --> GxG.                                                                       */

#define   PROBABILITE_DE_STRONG_TRANSFORMATION_G___GxGxG                                                                                \
                    EXP2(PROBABILITE_DE_STRONG_TRANSFORMATION_G___GxG)
DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_TRANSFORMATION_G___GxGxG,PROBABILITE_DE_STRONG_TRANSFORMATION_G___GxGxG)));
                                        /* Probabilite du vertex : G --> GxGxG.                                                      */
#define   ANGLE_POLARISATION_DE_STRONG_TRANSFORMATION_G___GxGxG                                                                         \
                    NEUT(GRO5(FRA9(PI_SUR_2)))
DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_STRONG_TRANSFORMATION_G___GxGxG
                          ,ANGLE_POLARISATION_DE_STRONG_TRANSFORMATION_G___GxGxG
                           )
                )
     );
                                        /* Dispersion de l'angle du vertex : G --> GxGxG.                                            */
DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_TRANSFORMATION_G___GxGxG,ZERO)));
                                        /* Compteur des vertex : G --> GxGxG.                                                        */
#define   STRONG_TRANSFORMATION_G___GxGxG(gluonD1,gluonA1,gluonA2,gluonA3)                                                              \
                    Bblock                                                                                                              \
                    DEFINITION_DE_LA_VITESSE_ALEATOIRE;                                                                                 \
                                        /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees  */ \
                                        /* cartesiennes.                                                                             */ \
                    DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE(gluonD1);                                     \
                                        /* Alignement de l'axe 'OX2' le long de 'gluonD1'...                                         */ \
                    DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                 \
                                        /* Rotation aleatoire de l'espace physique afin de placer le vertex 'G --> GxGxG' dans       */ \
                                        /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2).                                 */ \
                    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).         */ \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,PAS_DE_DEPHASAGE                                                                        \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA1                                                                                 \
                                               ,ASI2(gluonD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION);                           \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEUT(ADD2(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE))                                            \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_TRANSFORMATION_G___GxGxG)            \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA2                                                                                 \
                                               ,ASI2(gluonD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA2,PERTURBER_UNE_POSITION);                           \
                    VITESSE_CARTESIENNE_POLAIRE(vitesse_courante                                                                        \
                                               ,rho_de_la_vitesse                                                                       \
                                               ,theta_polaire                                                                           \
                                               ,NEGA(ADD2(GRO1(FRA3(CERCLE_TRIGONOMETRIQUE))                                            \
                                                         ,EXAGERATION(angle_polarisation_de_STRONG_TRANSFORMATION_G___GxGxG)            \
                                                          )                                                                             \
                                                     )                                                                                  \
                                                );                                                                                      \
                    CREATION_D_UN_GLUON_VIRTUEL(gluonA3                                                                                 \
                                               ,ASI2(gluonD1,espace_temps,position_courante)                                            \
                                               ,vitesse_courante                                                                        \
                                               ,ROUGE_indefinie                                                                         \
                                               ,VERTE_indefinie                                                                         \
                                               ,BLEUE_indefinie                                                                         \
                                                );                                                                                      \
                    FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA3,PERTURBER_UNE_POSITION);                           \
                    CONSERVATION_DE_3_CHARGES_DE_COULEUR(gluonA1,gluonA2,gluonA3                                                        \
                                                        ,gluonD1                                                                        \
                                                         );                                                                             \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1);                                        \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA2);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA2);                                        \
                    PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA3);                                                   \
                    MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA3);                                        \
                    TRACE_D_UN_EVENEMENT(Prin4("STRONG_TRANSFORMATION_G___GxGxG              G(%d) --> G(%d)xG(%d)xG(%d)"               \
                                              ,ETIQUETTE(gluonD1)                                                                       \
                                              ,ETIQUETTE(gluonA1)                                                                       \
                                              ,ETIQUETTE(gluonA2)                                                                       \
                                              ,ETIQUETTE(gluonA3)                                                                       \
                                               )                                                                                        \
                                         );                                                                                             \
                    DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1);                                                                            \
                    FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                   \
                    FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_SUR_UNE_PARTICULE;                                                \
                    INCR(compteur_de_STRONG_TRANSFORMATION_G___GxGxG,I);                                                                \
                    Eblock                                                                                                              \
                                        /* Vertex : G --> GxGxG.                                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        E V E N E M E N T S   " C O N D I T I O N N E L S "   P O U R   U N   E N S E M B L E   D E   G L U O N S  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_GLUON                                                                            \
                    FRA1(FRA2(FU))
DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_gluon
                          ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_GLUON
                           )
                )
     );
                                        /* Probabilite pour qu'un gluon present dans le proton soit la "victime" d'un evenement      */
                                        /* conditionnel du type :                                                                    */
                                        /*                                                                                           */
                                        /*                  INCHANGE_G,                                                              */
                                        /*                  STRONG_TRANSFORMATION_G___GxG,                                           */
                                        /*                  STRONG_TRANSFORMATION_G___QxAQ,                                          */
                                        /*                  STRONG_TRANSFORMATION_G___GxGxG.                                         */
                                        /*                                                                                           */
#define   ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_GLUONS                                                                              \
                    Bblock                                                                                                              \
                    DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF));                                                 \
                                        /* Probabilite pour que le gluon courant soit la "victime" d'un evenement conditionnel       */ \
                                        /* du type :                                                                                 */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_G,                                                              */ \
                                        /*                  STRONG_TRANSFORMATION_G___GxG,                                           */ \
                                        /*                  STRONG_TRANSFORMATION_G___QxAQ,                                          */ \
                                        /*                  STRONG_TRANSFORMATION_G___GxGxG.                                         */ \
                                        /*                                                                                           */ \
                    ENSEMBLE_DES_GLUONS_EXISTANTS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel);           \
                                                       Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel                      \
                                                                             ,gluonD1                                                   \
                                                                             ,DUREE_DE_VIE_MOYENNE_COURANTE(gluonD1)                    \
                                                                              )                                                         \
                                                                ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_gluon)             \
                                                                 )                                                                      \
                                                            )                                                                           \
                                                            Bblock                                                                      \
                                                            DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF));                         \
                                        /* Probabilite de choix entre :                                                              */ \
                                        /*                                                                                           */ \
                                        /*                  INCHANGE_Q,                                                              */ \
                                        /*                  STRONG_EMISSION_Q___QxG,                                                 */ \
                                        /*                  STRONG_TRANSFORMATION_G___QxAQ,                                          */ \
                                        /*                  STRONG_TRANSFORMATION_G___GxGxG.                                         */ \
                                        /*                                                                                           */ \
                                                            GENERATION_D_UNE_VALEUR                                                     \
                                                                (probabilite_de_choix                                                   \
                                                                ,EVENEMENT_IMPOSSIBLE                                                   \
                                                                ,ADD4(REGUL0(probabilite_de_INCHANGE_G)                                 \
                                                                ,REGUL1(probabilite_de_STRONG_TRANSFORMATION_G___GxG)                   \
                                                                ,REGUL1(probabilite_de_STRONG_TRANSFORMATION_G___QxAQ)                  \
                                                                ,REGUL1(probabilite_de_STRONG_TRANSFORMATION_G___GxGxG)                 \
                                                                      )                                                                 \
                                                                 );                                                                     \
                                        /* ATTENTION : 'hPROBABILITE(...)' ne doit pas intervenir ici, car ici, dans                 */ \
                                        /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)', le choix est            */ \
                                        /* instantane, contrairement a celui effectue par 'GENERATION_D_UNE_PROBABILITE_01(...)'.    */ \
                                                            DEBUT_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(probabilite_de_choix);  \
                                                            CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                   \
                                                                (REGUL0(probabilite_de_INCHANGE_G)                                      \
                                                                ,INCHANGE_G(gluonD1)                                                    \
                                                                 );                                                                     \
                                                            CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                   \
                                                                (REGUL1(probabilite_de_STRONG_TRANSFORMATION_G___GxG)                   \
                                                                ,STRONG_TRANSFORMATION_G___GxG(gluonD1,gluonA1,gluonA2)                 \
                                                                 );                                                                     \
                                                            CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                   \
                                                                (REGUL1(probabilite_de_STRONG_TRANSFORMATION_G___QxAQ)                  \
                                                                ,STRONG_TRANSFORMATION_G___QxAQ(gluonD1,quarkA1,anti_quarkA1)           \
                                                                 );                                                                     \
                                                            CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES                   \
                                                                (REGUL1(probabilite_de_STRONG_TRANSFORMATION_G___GxGxG)                 \
                                                                ,STRONG_TRANSFORMATION_G___GxGxG(gluonD1,gluonA1,gluonA2,gluonA3)       \
                                                                 );                                                                     \
                                                            FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES;                          \
                                                            Eblock                                                                      \
                                                       ATes                                                                             \
                                                            Bblock                                                                      \
                                                            Eblock                                                                      \
                                                       ETes                                                                             \
                                                       );                                                                               \
                                                  );                                                                                    \
                    Eblock                                                                                                              \
                                        /* Evenements conditionnels pour quelques uns des gluons presents dans le proton.            */

BFonctionI

DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_GLUONS,G,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_GLUONS))

EFonctionI



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