/*************************************************************************************************************************************/
/* */
/* 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