/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E S C O L L I S I O N S E N T R E P A R T I C U L E S : */ /* */ /* */ /* Author of '$xrq/nucleon.LH$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1991??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R A C T I O N F O R T E ( " S T R O N G I N T E R A C T I O N " ) */ /* */ /* D I F F E R E N T S T Y P E S D E C O L L I S I O N S E N T R E P A R T I C U L E S : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_STRONG_ANNHILATION_GxGxGxG___V \ GRO1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ANNHILATION_GxGxGxG___V,PROBABILITE_DE_STRONG_ANNHILATION_GxGxGxG___V))); /* Probabilite du vertex : GxGxGxG --> V. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ANNHILATION_GxGxGxG___V,ZERO))); /* Compteur des vertex : GxGxGxG --> V. */ #define STRONG_ANNHILATION_GxGxGxG___V(gluonD1,gluonD2,gluonD3,gluonD4) \ Bblock \ TRACE_D_UN_EVENEMENT(Prin4("STRONG_ANNHILATION_GxGxGxG___V G(%d)xG(%d)xG(%d)xG(%d) --> VIDE" \ ,ETIQUETTE(gluonD1) \ ,ETIQUETTE(gluonD2) \ ,ETIQUETTE(gluonD3) \ ,ETIQUETTE(gluonD4) \ ) \ ); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD2); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD3); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD4); \ INCR(compteur_de_STRONG_ANNHILATION_GxGxGxG___V,I); \ Eblock \ /* Vertex : GxGxGxG --> V. */ #define PROBABILITE_DE_STRONG_ANNHILATION_GxGxG___V \ GRO1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ANNHILATION_GxGxG___V,PROBABILITE_DE_STRONG_ANNHILATION_GxGxG___V))); /* Probabilite du vertex : GxGxG --> V. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ANNHILATION_GxGxG___V,ZERO))); /* Compteur des vertex : GxGxG --> V. */ #define STRONG_ANNHILATION_GxGxG___V(gluonD1,gluonD2,gluonD3) \ Bblock \ TRACE_D_UN_EVENEMENT(Prin3("STRONG_ANNHILATION_GxGxG___V G(%d)xG(%d)xG(%d) --> VIDE" \ ,ETIQUETTE(gluonD1) \ ,ETIQUETTE(gluonD2) \ ,ETIQUETTE(gluonD3) \ ) \ ); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD2); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD3); \ INCR(compteur_de_STRONG_ANNHILATION_GxGxG___V,I); \ Eblock \ /* Vertex : GxGxG --> V. */ #define PROBABILITE_DE_STRONG_ANNHILATION_QxAQxG___V \ GRO1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ANNHILATION_QxAQxG___V,PROBABILITE_DE_STRONG_ANNHILATION_QxAQxG___V))); /* _ */ /* Probabilite du vertex : QxQxG --> V. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ANNHILATION_QxAQxG___V,ZERO))); /* _ */ /* Compteur des vertex : QxQxG --> V. */ #define STRONG_ANNHILATION_QxAQxG___V(quarkD1,anti_quarkD1,gluonD1) \ Bblock \ ATTENTION_EST_CE_UN_QUARK_REEL(quarkD1); \ TRACE_D_UN_EVENEMENT(Prin3("STRONG_ANNHILATION_QxAQxG___V Q(%d)xAQ(%d)xG(%d) --> VIDE" \ ,ETIQUETTE(quarkD1) \ ,ETIQUETTE(anti_quarkD1) \ ,ETIQUETTE(gluonD1) \ ) \ ); \ DESTRUCTION_D_UN_QUARK_VIRTUEL(quarkD1); \ DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkD1); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1); \ INCR(compteur_de_STRONG_ANNHILATION_QxAQxG___V,I); \ Eblock \ /* _ */ \ /* Vertex : QxQxG --> V. */ #define PROBABILITE_DE_STRONG_ABSORBTION_QxG___Q \ GRO3(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ABSORBTION_QxG___Q,PROBABILITE_DE_STRONG_ABSORBTION_QxG___Q))); /* Probabilite du vertex : QxG --> Q. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ABSORBTION_QxG___Q,ZERO))); /* Compteur des vertex : QxG --> Q. */ #define STRONG_ABSORBTION_QxG___Q(quarkD1,gluonD1,quarkA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,quarkD1,gluonD1); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_QUARK_OU_D_UN_ANTI_QUARK(quarkD1); \ /* On fixe a priori la conservation de la vitesse du quark... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle \ ,PERTURBER_UNE_DIRECTION \ ); \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_QUARK_VIRTUEL(quarkA1 \ ,SAVEUR(quarkD1) \ ,position_du_vertex \ ,vitesse_courante \ ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(quarkA1,PERTURBER_UNE_POSITION); \ ADDITION_DE_2_CHARGES_DE_COULEUR(quarkA1 \ ,quarkD1,gluonD1 \ ); \ RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(quarkA1); \ PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(quarkA1); \ MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(quarkA1); \ CHANGEMENT_EVENTUEL_DE_QUARK_REEL(quarkD1,quarkA1); \ TRACE_D_UN_EVENEMENT(Prin3("STRONG_ABSORBTION_QxG___Q Q(%d)xG(%d) --> Q(%d)" \ ,ETIQUETTE(quarkD1) \ ,ETIQUETTE(gluonD1) \ ,ETIQUETTE(quarkA1) \ ) \ ); \ DESTRUCTION_D_UN_QUARK(quarkD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_QUARK_VIRTUEL(quarkD1)' car en effet, 'quarkD1' peut */ \ /* etre un quark REEL... */ \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ INCR(compteur_de_STRONG_ABSORBTION_QxG___Q,I); \ Eblock \ /* Vertex : QxG --> Q. */ #define PROBABILITE_DE_STRONG_ABSORBTION_AQxG___AQ \ GRO3(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_ABSORBTION_AQxG___AQ,PROBABILITE_DE_STRONG_ABSORBTION_AQxG___AQ))); /* _ _ */ /* Probabilite du vertex : QxG --> Q. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_ABSORBTION_AQxG___AQ,ZERO))); /* _ _ */ /* Compteur des vertex : QxG --> Q. */ #define STRONG_ABSORBTION_AQxG___AQ(anti_quarkD1,gluonD1,anti_quarkA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,anti_quarkD1,gluonD1); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_QUARK_OU_D_UN_ANTI_QUARK(anti_quarkD1); \ /* On fixe a priori la conservation de la vitesse de l'anti-quark... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle \ ,PERTURBER_UNE_DIRECTION \ ); \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkA1 \ ,SAVEUR(anti_quarkD1) \ ,position_du_vertex \ ,vitesse_courante \ ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_quarkA1,PERTURBER_UNE_POSITION); \ ADDITION_DE_2_CHARGES_DE_COULEUR(anti_quarkA1 \ ,anti_quarkD1,gluonD1 \ ); \ RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(anti_quarkA1); \ PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(anti_quarkA1); \ MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(anti_quarkA1); \ CHANGEMENT_EVENTUEL_D_ANTI_QUARK_REEL(anti_quarkD1,anti_quarkA1); \ TRACE_D_UN_EVENEMENT(Prin3("STRONG_ABSORBTION_AQxG___AQ AQ(%d)xG(%d) --> AQ(%d)" \ ,ETIQUETTE(anti_quarkD1) \ ,ETIQUETTE(gluonD1) \ ,ETIQUETTE(anti_quarkA1) \ ) \ ); \ DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkD1); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ INCR(compteur_de_STRONG_ABSORBTION_AQxG___AQ,I); \ Eblock \ /* _ _ */ \ /* Vertex : QxG --> Q. */ #define PROBABILITE_DE_STRONG_TRANSFORMATION_QxAQ___G \ GRO3(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_TRANSFORMATION_QxAQ___G,PROBABILITE_DE_STRONG_TRANSFORMATION_QxAQ___G))); /* _ */ /* Probabilite du vertex : QxQ --> G. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_TRANSFORMATION_QxAQ___G,ZERO))); /* _ */ /* Compteur des vertex : QxQ --> G. */ #define STRONG_TRANSFORMATION_QxAQ___G(quarkD1,anti_quarkD1,gluonA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,quarkD1,anti_quarkD1); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_GLUON; \ /* Le module de la vitesse des gluons est figees, puisque ces particules se deplacent a la */ \ /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques). */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle \ ,PERTURBER_UNE_DIRECTION \ ); \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_GLUON_VIRTUEL(gluonA1 \ ,position_du_vertex \ ,vitesse_courante \ ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION); \ ADDITION_DE_2_CHARGES_DE_COULEUR(gluonA1 \ ,quarkD1,anti_quarkD1 \ ); \ RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(gluonA1); \ PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1); \ MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1); \ ATTENTION_EST_CE_UN_QUARK_REEL(quarkD1); \ TRACE_D_UN_EVENEMENT(Prin3("STRONG_TRANSFORMATION_QxAQ___G Q(%d)xAQ(%d) --> G(%d)" \ ,ETIQUETTE(quarkD1) \ ,ETIQUETTE(anti_quarkD1) \ ,ETIQUETTE(gluonA1) \ ) \ ); \ DESTRUCTION_D_UN_QUARK_VIRTUEL(quarkD1); \ DESTRUCTION_D_UN_ANTI_QUARK_VIRTUEL(anti_quarkD1); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ INCR(compteur_de_STRONG_TRANSFORMATION_QxAQ___G,I); \ Eblock \ /* _ */ \ /* Vertex : QxQ --> G. */ #define PROBABILITE_DE_STRONG_TRANSFORMATION_GxG___G \ GRO3(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_STRONG_TRANSFORMATION_GxG___G,PROBABILITE_DE_STRONG_TRANSFORMATION_GxG___G))); /* Probabilite du vertex : GxG --> G. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_STRONG_TRANSFORMATION_GxG___G,ZERO))); /* Compteur des vertex : GxG --> G. */ #define STRONG_TRANSFORMATION_GxG___G(gluonD1,gluonD2,gluonA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex,vitesse_resultante_virtuelle,gluonD1,gluonD2); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_GLUON; \ /* Le module de la vitesse des gluons est figees, puisque ces particules se deplacent a la */ \ /* vitesse de la lumiere, et la direction est aleatoire (en coordonnees spheriques). */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION(vitesse_resultante_virtuelle \ ,PERTURBER_UNE_DIRECTION \ ); \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_GLUON_VIRTUEL(gluonA1 \ ,position_du_vertex \ ,vitesse_courante \ ,ROUGE_indefinie,VERTE_indefinie,BLEUE_indefinie \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(gluonA1,PERTURBER_UNE_POSITION); \ ADDITION_DE_2_CHARGES_DE_COULEUR(gluonA1 \ ,gluonD1,gluonD2 \ ); \ RENORMALISATION_DE_LA_CHARGE_DE_COULEUR(gluonA1); \ PERTURBATION_ALEATOIRE_ADDITIVE_DE_LA_CHARGE_DE_COULEUR(gluonA1); \ MAJORATION_DE_LA_COMPOSANTE_PREPONDERANTE_DE_LA_CHARGE_DE_COULEURS(gluonA1); \ TRACE_D_UN_EVENEMENT(Prin3("STRONG_TRANSFORMATION_GxG___G G(%d)xG(%d) --> G(%d)" \ ,ETIQUETTE(gluonD1) \ ,ETIQUETTE(gluonD2) \ ,ETIQUETTE(gluonA1) \ ) \ ); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD1); \ DESTRUCTION_D_UN_GLUON_VIRTUEL(gluonD2); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_DANS_UNE_DIRECTION; \ INCR(compteur_de_STRONG_TRANSFORMATION_GxG___G,I); \ Eblock \ /* Vertex : GxG --> G. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R A C T I O N F O R T E ( " S T R O N G I N T E R A C T I O N " ) */ /* */ /* C O L L I S I O N S E N T R E P A R T I C U L E S : */ /* */ /*************************************************************************************************************************************/ DEFV(Local,DEFV(Float,INIT(voisinage_1_D1_D2,VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES))); /* Distance en-dessous de laquelle 2 particules peuvent interagir dans tous les evenements */ /* de type 'COLLISION(...)' : */ /* */ /* STRONG_ABSORBTION_QxG___Q(...), */ /* STRONG_ABSORBTION_AQxG___AQ(...), */ /* STRONG_TRANSFORMATION_QxAQ___G(...). */ /* */ #define ADOLESCENCE_D_UNE_PARTICULE \ GRO4(FRA10(DIVI(VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES \ ,MIN2(VITESSE_MOYENNE_DES_QUARKS_ET_DES_ANTI_QUARKS \ ,VITESSE_DES_GLUONS \ ) \ ) \ ) \ ) \ /* Duree de l'adolescence d'une particule qui correspond a une periode au cours de laquelle */ \ /* elle ne peut rentrer en collision. La valeur implicite est choisie de facon telle qu'elle */ \ /* corresponde a une duree superieure a celle necessaire a s'echapper du voisinage d'une */ \ /* particule ; ceci permet d'eviter que des particules emises soient immediatement */ \ /* reabsorbee. Mais ATTENTION : il faut reduite cette duree par 'GRO4(FRA10(...))' car, en */ \ /* effet, une duree d'adolescence trop elevee fait qu'une particule risque de mourir avant */ \ /* d'avoir atteint cet age, et donc ne jamais pouvoir collisionner... */ \ /* */ \ /* ATTENTION : la valeur de 'ADOLESCENCE_D_UNE_PARTICULE' est plus grande dans le fichier */ \ /* '$xrq/di_elec.LH$I' que dans le fichier '$xrq/nucleon.LH$I', et ce afin de limiter au */ \ /* mieux l'absorbtion, par des electrons, des photons qu'ils viennent d'emettre... */ DEFV(Local,DEFV(Float,INIT(adolescence_d_une_particule,FLOT__UNDEF))); /* Duree de l'adolescence d'une particule qui correspond a une periode au cours de laquelle */ /* elle ne peut rentrer en collision. La valeur implicite est choisie de facon telle qu'elle */ /* corresponde a une duree superieure a celle necessaire a s'echapper du voisinage d'une */ /* particule ; ceci permet d'eviter que des particules emises soient immediatement */ /* reabsorbee. L'initialisation a lieu dans 'DEBUT_DE_L_INITIALISATION_DE_L_UNIVERS' a */ /* cause du compilateur de 'SYSTEME_SG4D..._IRIX_CC' qui refuse d'initialiser cette */ /* variable avec l'expression 'ADOLESCENCE_D_UNE_PARTICULE' qui contient un 'MIN2(...)'... */ #define COLLISION(condition,probabilite_de_la_collision,evenement) \ Bblock \ Test(condition) \ Bblock \ DEFV(Float,INIT(probabilite_d_evenement_collisionnel,FLOT__UNDEF)); \ GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_collisionnel); \ /* Probabilite pour que la collision courante ait lieu... */ \ Test(IFLE(probabilite_d_evenement_collisionnel \ ,REGUL9(probabilite_de_la_collision) \ ) \ ) \ Bblock \ BLOC(evenement); \ /* Lorsque toutes les conditions sont remplies, il y a interaction... */ \ Eblock \ ATes \ Bblock \ /* Lorsque toutes les conditions ('probabilite') ne sont pas remplies, rien ne se passe... */ \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Lorsque toutes les conditions ('condition') ne sont pas remplies, rien ne se passe... */ \ Eblock \ ETes \ Eblock \ /* Lorsqu'une collision a ete detectee, il faut verifier si les particules en cause */ \ /* remplissent un certain nombre de conditions pour pouvoir interagir... */ #ifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE # define COLLISION_EVENTUELLE_QxG \ Bblock \ COLLISION(IFET(IMEQ(NATURE(particuleD1) \ ,QUARK_REEL \ ,QUARK_VIRTUEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,GLUON_VIRTUEL \ ) \ ) \ ,probabilite_de_STRONG_ABSORBTION_QxG___Q \ ,STRONG_ABSORBTION_QxG___Q(particuleD1,particuleD2,quarkA1); \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* QxG --> Q */ \ /* */ # define COLLISION_EVENTUELLE_AQxG \ Bblock \ COLLISION(IFET(IMEQ(NATURE(particuleD1) \ ,ANTI_QUARK_REEL \ ,ANTI_QUARK_VIRTUEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,GLUON_VIRTUEL \ ) \ ) \ ,probabilite_de_STRONG_ABSORBTION_AQxG___AQ \ ,STRONG_ABSORBTION_AQxG___AQ(particuleD1,particuleD2,anti_quarkA1); \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* AQxG --> AQ */ \ /* */ #Aifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE # define COLLISION_EVENTUELLE_QxG \ Bblock \ COLLISION(IFET(IFEQ(NATURE(particuleD1) \ ,QUARK_VIRTUEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,GLUON_VIRTUEL \ ) \ ) \ ,probabilite_de_STRONG_ABSORBTION_QxG___Q \ ,STRONG_ABSORBTION_QxG___Q(particuleD1,particuleD2,quarkA1); \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* QxG --> Q */ \ /* */ # define COLLISION_EVENTUELLE_AQxG \ Bblock \ COLLISION(IFET(IFEQ(NATURE(particuleD1) \ ,ANTI_QUARK_VIRTUEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,GLUON_VIRTUEL \ ) \ ) \ ,probabilite_de_STRONG_ABSORBTION_AQxG___AQ \ ,STRONG_ABSORBTION_AQxG___AQ(particuleD1,particuleD2,anti_quarkA1); \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* AQxG --> AQ */ \ /* */ #Eifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE #define ___EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES \ Bblock \ DEFV(particule,POINTERs(particuleD1)); \ DEFV(particule,POINTERs(particuleD2)); \ /* Definition d'un ensemble de 2 particules en interaction... */ \ DEFV(Float,INIT(distance_D1_D2,FLOT__UNDEF)); \ /* Distance entre les 2 particules (D1,D2), et on notera la propriete triviale, mais */ \ /* essentielle suivante : */ \ /* */ \ /* distance(D1,D2) == distance(D2,D1). */ \ /* */ \ /* De plus, il serait possible d'optimiser en manipulant le carre des distances, mais il */ \ /* est plus physique de manipuler les distances elle-memes, et de plus le temps perdu a */ \ /* extraire les racines carrees est minime... */ \ ENSEMBLE_DES_PARTICULES(BLOC(VOISINAGE_D_UNE_PARTICULE(PARTICULE_COURANTE); \ /* Initialisation du detecteur de collisions a 2 particules. */ \ ) \ ); \ ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD1,PARTICULE_COURANTE); \ Test(IFGE(AGE(particuleD1),adolescence_d_une_particule)) \ Bblock \ /* Cas d'une particule assez agee : */ \ ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD2,PARTICULE_COURANTE); \ Test(IFET(IFNE(particuleD1,particuleD2) \ ,IFGE(AGE(particuleD2) \ ,adolescence_d_une_particule \ ) \ ) \ ) \ /* Cas ou les deux particules sont distinctes et suffisamment agees : */ \ Bblock \ EGAL(distance_D1_D2 \ ,pDISTANCE(particuleD1,particuleD2) \ ); \ Test(IFLT(distance_D1_D2 \ ,REGUL0(voisinage_1_D1_D2) \ ) \ ) \ /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'. */ \ Bblock \ /* Cas ou les deux particules sont suffisamment proches l'une de l'autre pour interagir : */ \ Test(IFLT(distance_D1_D2 \ ,ASI2(particuleD1 \ ,voisines \ ,distance1 \ ) \ ) \ ) \ Bblock \ EGAL(ASI2(particuleD1 \ ,voisines \ ,distance1 \ ) \ ,distance_D1_D2 \ ); \ EGAL(ASI2(particuleD1 \ ,voisines \ ,voisine1 \ ) \ ,particuleD2 \ ); \ EGAL(ASI2(particuleD1 \ ,voisines \ ,vide \ ) \ ,FAUX \ ); \ /* Memorisation de la proximite D1 --> D2 (on notera que la relation D2 --> D1 ne sera */ \ /* memorisee que si D1 et D2 forment bien les 2 voisines les plus proches...). */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Cas ou les deux particules sont trop eloignes, et ne peuvent interagir... */ \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Cas ou D1=D2... */ \ Eblock \ ETes \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas d'une particule trop jeune, pas de collisions possibles pour elle... */ \ Eblock \ ETes \ ) \ ); \ ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD1,PARTICULE_COURANTE); \ Test(EST_FAUX(ASI2(particuleD1,voisines,vide))) \ /* Nota important : lors du processus qui va suivre, des particles vont etre crees, mais, */ \ /* pour elles, le test precedent est faux (voir 'VOISINAGE_D_UNE_PARTICULE(...)'). Donc */ \ /* ces particules ne seront pas manipulees en ce qui concerne les collisions... */ \ Bblock \ EGAL(particuleD2,ASI2(particuleD1,voisines,voisine1)); \ /* Recuperation d'un couple (D1,D2) de 2 particules voisines... */ \ COLLISION_EVENTUELLE_QxG; \ /* Vertex : QxG --> Q. */ \ /* Nota : le vertex GxQ --> Q est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ COLLISION_EVENTUELLE_AQxG; \ /* _ _ */ \ /* Vertex : QxG --> Q. */ \ /* _ _ */ \ /* Nota : le vertex GxQ --> Q est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ COLLISION(IFET(IFEQ(NATURE(particuleD1) \ ,QUARK_VIRTUEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,ANTI_QUARK_VIRTUEL \ ) \ ) \ ,probabilite_de_STRONG_TRANSFORMATION_QxAQ___G \ ,STRONG_TRANSFORMATION_QxAQ___G(particuleD1,particuleD2,gluonA1); \ ); \ /* _ */ \ /* Vertex : QxQ --> G, */ \ /* _ */ \ /* Nota : le vertex QxQ --> G est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ /* */ \ /* ATTENTION : pour conserver les trois quarks REELs, on ne regarde pas si 'particuleD1' */ \ /* ou 'particuleD2' sont des quarks REELs ; le test 'COLLISION(...)' ci-dessus n'est donc */ \ /* fait que pour les 'QUARK_VIRTUEL' et les 'ANTI_QUARK_VIRTUEL'... */ \ COLLISION(IFET(IFEQ(NATURE(particuleD1) \ ,GLUON_VIRTUEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,GLUON_VIRTUEL \ ) \ ) \ ,probabilite_de_STRONG_TRANSFORMATION_GxG___G \ ,STRONG_TRANSFORMATION_GxG___G(particuleD1,particuleD2,gluonA1); \ ); \ /* Vertex : GxG --> G. */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ) \ ); \ Eblock \ /* Evenements collisionnels pour les ensembles de 2 particules voisines dans le proton. */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES,P2,___EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES)) EFonctionI #define ___EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES \ Bblock \ PROCESSUS_INCOMPLET("evenements collisionnels pour les ensembles de 3 particules"); \ Eblock \ /* Evenements collisionnels pour les ensembles de 3 particules voisines dans le proton. */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES,P3,___EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES)) EFonctionI #define ___EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES \ Bblock \ PROCESSUS_INCOMPLET("evenements collisionnels pour les ensembles de 4 particules"); \ Eblock \ /* Evenements collisionnels pour les ensembles de 4 particules voisines dans le proton. */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES,P4,___EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES)) EFonctionI #define ___EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES \ Bblock \ EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES; \ /* Les evenements a 4 particules etant les plus rares, ils sont testes en premier afin */ \ /* de ne pas etre masques par ceux a 3 et 2 particules... */ \ EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES; \ /* Evenements a 3 particules... */ \ EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES; \ /* Les evenements a 2 particules sont donc testes en dernier... */ \ Eblock \ /* Evenements collisionnels pour l'ensemble des particules presentes dans le proton, */ \ /* et correspondant, par exemple, a ce que j'appelerai, des collisions... */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES,P,___EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES)) EFonctionI