/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E S C O L L I S I O N S E N T R E P A R T I C U L E S : */ /* */ /* */ /* Author of '$xrq/di_elec.LH$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R A C T I O N E L E C T R O - M A G N E T I Q U E : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExP___E \ GRO9(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_ExP___E,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExP___E))); /* Probabilite du vertex : ExP --> E. */ #define PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExP___E \ GRO8(FRA8(FU)) DEFV(Local,DEFV(Float,INIT(participation_E_ELECTROWEAK_ABSORBTION_ExP___E ,PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExP___E ) ) ); /* Participation de la vitesse de E dans le vertex : ExP --> E. */ #define PARTICIPATION_P_ELECTROWEAK_ABSORBTION_ExP___E \ GRO1(FRA16(FU)) DEFV(Local,DEFV(Float,INIT(participation_P_ELECTROWEAK_ABSORBTION_ExP___E ,PARTICIPATION_P_ELECTROWEAK_ABSORBTION_ExP___E ) ) ); /* Participation de la vitesse de P dans le vertex : ExP --> E. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_ExP___E,ZERO))); /* Compteur des vertex : ExP --> E. */ #define ELECTROWEAK_ABSORBTION_ExP___E(electronD1,photonD1,electronA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(ADRESSE(particule_indifferente)); \ DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex \ ,vitesse_resultante_virtuelle \ ,participation_E_ELECTROWEAK_ABSORBTION_ExP___E,electronD1 \ ,participation_P_ELECTROWEAK_ABSORBTION_ExP___E,photonD1 \ ); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(electronD1); \ /* On fixe a priori la conservation de la vitesse du electron... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_ELECTRON_VIRTUEL(electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,position_du_vertex \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,PERTURBER_UNE_POSITION); \ CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_ExP___E E(%d)xP(%d) --> E(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(photonD1) \ ,ETIQUETTE(electronA1) \ ) \ ); \ DESTRUCTION_D_UN_ELECTRON(electronD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet, */ \ /* 'electronD1' peut etre un electron REEL... */ \ DESTRUCTION_D_UN_PHOTON_VIRTUEL(photonD1); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ INCR(compteur_de_ELECTROWEAK_ABSORBTION_ExP___E,I); \ Eblock \ /* Vertex : ExP --> E. */ #define PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExP___AE \ PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExP___E DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_AExP___AE,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExP___AE))); /* _ _ */ /* Probabilite du vertex : ExP --> E. */ #define PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExP___AE \ PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExP___E DEFV(Local,DEFV(Float,INIT(participation_AE_ELECTROWEAK_ABSORBTION_AExP___AE ,PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExP___AE ) ) ); /* _ _ */ /* Participation de la vitesse de E dans le vertex : ExP --> E. */ #define PARTICIPATION_P_ELECTROWEAK_ABSORBTION_AExP___AE \ PARTICIPATION_P_ELECTROWEAK_ABSORBTION_ExP___E DEFV(Local,DEFV(Float,INIT(participation_P_ELECTROWEAK_ABSORBTION_AExP___AE ,PARTICIPATION_P_ELECTROWEAK_ABSORBTION_AExP___AE ) ) ); /* _ _ */ /* Participation de la vitesse de P dans le vertex : ExP --> E. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_AExP___AE,ZERO))); /* _ _ */ /* Compteur des vertex : ExP --> E. */ #define ELECTROWEAK_ABSORBTION_AExP___AE(anti_electronD1,photonD1,anti_electronA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(ADRESSE(particule_indifferente)); \ DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex \ ,vitesse_resultante_virtuelle \ ,participation_AE_ELECTROWEAK_ABSORBTION_AExP___AE,anti_electronD1 \ ,participation_P_ELECTROWEAK_ABSORBTION_AExP___AE,photonD1 \ ); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(anti_electronD1); \ /* On fixe a priori la conservation de la vitesse de l'anti-electron... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,position_du_vertex \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,PERTURBER_UNE_POSITION); \ CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_AExP___AE AE(%d)xP(%d) --> AE(%d)" \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(photonD1) \ ,ETIQUETTE(anti_electronA1) \ ) \ ); \ DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electronD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronD1)' car en effet, */ \ /* 'anti_electronD1' peut etre un electron REEL... */ \ DESTRUCTION_D_UN_PHOTON_VIRTUEL(photonD1); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ INCR(compteur_de_ELECTROWEAK_ABSORBTION_AExP___AE,I); \ Eblock \ /* _ _ */ \ /* Vertex : ExP --> E. */ #define PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___P \ GRO5(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___P,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___P))); /* _ */ /* Probabilite du vertex : ExE --> P. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_ExAE___P,ZERO))); /* _ */ /* Compteur des vertex : ExE --> P. */ #define ELECTROWEAK_TRANSFORMATION_ExAE___P(electronD1,anti_electronD1,photonA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(ADRESSE(particule_indifferente)); \ DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex \ ,vitesse_resultante_virtuelle \ ,electronD1 \ ,anti_electronD1 \ ); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_PHOTON; \ /* Les photons se deplacent a la vitesse de la lumiere... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_PHOTON_VIRTUEL(photonA1 \ ,position_du_vertex \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(photonA1,PERTURBER_UNE_POSITION); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_ExAE___P E(%d)xAE(%d) --> P(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(photonA1) \ ) \ ); \ DESTRUCTION_D_UN_ELECTRON(electronD1); \ DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electronD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet, */ \ /* 'electronD1' peut etre un electron REEL... */ \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ INCR(compteur_de_ELECTROWEAK_TRANSFORMATION_ExAE___P,I); \ Eblock \ /* _ */ \ /* Vertex : ExE --> P. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R A C T I O N F A I B L E : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExZ___E \ GRO9(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_ExZ___E,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExZ___E))); /* Probabilite du vertex : ExZ --> E. */ #define PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExZ___E \ GRO8(FRA8(FU)) DEFV(Local,DEFV(Float,INIT(participation_E_ELECTROWEAK_ABSORBTION_ExZ___E ,PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExZ___E ) ) ); /* Participation de la vitesse de E dans le vertex : ExZ --> E. */ #define PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_ExZ___E \ GRO1(FRA16(FU)) DEFV(Local,DEFV(Float,INIT(participation_Z_ELECTROWEAK_ABSORBTION_ExZ___E ,PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_ExZ___E ) ) ); /* Participation de la vitesse de Z dans le vertex : ExZ --> E. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_ExZ___E,ZERO))); /* Compteur des vertex : ExZ --> E. */ #define ELECTROWEAK_ABSORBTION_ExZ___E(electronD1,z0D1,electronA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(ADRESSE(particule_indifferente)); \ DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex \ ,vitesse_resultante_virtuelle \ ,participation_E_ELECTROWEAK_ABSORBTION_ExZ___E,electronD1 \ ,participation_Z_ELECTROWEAK_ABSORBTION_ExZ___E,z0D1 \ ); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(electronD1); \ /* On fixe a priori la conservation de la vitesse du electron... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_ELECTRON_VIRTUEL(electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,position_du_vertex \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,PERTURBER_UNE_POSITION); \ CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_ExZ___E E(%d)xZ(%d) --> E(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(z0D1) \ ,ETIQUETTE(electronA1) \ ) \ ); \ DESTRUCTION_D_UN_ELECTRON(electronD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet, */ \ /* 'electronD1' peut etre un electron REEL... */ \ DESTRUCTION_D_UN_Z0_VIRTUEL(z0D1); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ INCR(compteur_de_ELECTROWEAK_ABSORBTION_ExZ___E,I); \ Eblock \ /* Vertex : ExZ --> E. */ #define PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExZ___AE \ PROBABILITE_DE_ELECTROWEAK_ABSORBTION_ExZ___E DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_ABSORBTION_AExZ___AE,PROBABILITE_DE_ELECTROWEAK_ABSORBTION_AExZ___AE))); /* _ _ */ /* Probabilite du vertex : ExZ --> E. */ #define PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExZ___AE \ PARTICIPATION_E_ELECTROWEAK_ABSORBTION_ExZ___E DEFV(Local,DEFV(Float,INIT(participation_AE_ELECTROWEAK_ABSORBTION_AExZ___AE ,PARTICIPATION_AE_ELECTROWEAK_ABSORBTION_AExZ___AE ) ) ); /* _ _ */ /* Participation de la vitesse de E dans le vertex : ExZ --> E. */ #define PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_AExZ___AE \ PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_ExZ___E DEFV(Local,DEFV(Float,INIT(participation_Z_ELECTROWEAK_ABSORBTION_AExZ___AE ,PARTICIPATION_Z_ELECTROWEAK_ABSORBTION_AExZ___AE ) ) ); /* _ _ */ /* Participation de la vitesse de Z dans le vertex : ExZ --> E. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_ABSORBTION_AExZ___AE,ZERO))); /* _ _ */ /* Compteur des vertex : ExZ --> E. */ #define ELECTROWEAK_ABSORBTION_AExZ___AE(anti_electronD1,z0D1,anti_electronA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(ADRESSE(particule_indifferente)); \ DEFINITION_DE_LA_COMBINAISON_DE_2_POSITIONS(position_du_vertex \ ,vitesse_resultante_virtuelle \ ,participation_AE_ELECTROWEAK_ABSORBTION_AExZ___AE,anti_electronD1 \ ,participation_Z_ELECTROWEAK_ABSORBTION_AExZ___AE,z0D1 \ ); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON(anti_electronD1); \ /* On fixe a priori la conservation de la vitesse de l'anti-electron... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,position_du_vertex \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,PERTURBER_UNE_POSITION); \ CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_ABSORBTION_AExZ___AE AE(%d)xZ(%d) --> AE(%d)" \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(z0D1) \ ,ETIQUETTE(anti_electronA1) \ ) \ ); \ DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electronD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronD1)' car en effet, */ \ /* 'anti_electronD1' peut etre un electron REEL... */ \ DESTRUCTION_D_UN_Z0_VIRTUEL(z0D1); \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ INCR(compteur_de_ELECTROWEAK_ABSORBTION_AExZ___AE,I); \ Eblock \ /* _ _ */ \ /* Vertex : ExZ --> E. */ #define PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___Z \ GRO9(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___Z,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_ExAE___Z))); /* _ */ /* Probabilite du vertex : ExE --> Z. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_ExAE___Z,ZERO))); /* _ */ /* Compteur des vertex : ExE --> Z. */ #define ELECTROWEAK_TRANSFORMATION_ExAE___Z(electronD1,anti_electronD1,z0A1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(ADRESSE(particule_indifferente)); \ DEFINITION_DE_LA_RESULTANTE_DE_2_POSITIONS(position_du_vertex \ ,vitesse_resultante_virtuelle \ ,electronD1 \ ,anti_electronD1 \ ); \ /* Definition d'une position moyenne entre les 2 particules, ainsi que d'un vecteur */ \ /* resultante des deux vecteurs vitesse ; il est dit "virtuel" parce que son module peut */ \ /* tres bien etre superieur a la vitesse de la lumiere, ce qui n'a aucune importance, */ \ /* puisque seule sa direction importe. On notera que 'vitesse_resultante_virtuelle' n'est */ \ /* pas utilisee... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0; \ /* Les photons se deplacent a la vitesse de la lumiere... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(vitesse_resultante_virtuelle \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de la resultante virtuelle des vitesses... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,PAS_DE_DEPHASAGE \ ); \ CREATION_D_UN_Z0_VIRTUEL(z0A1 \ ,position_du_vertex \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,PERTURBER_UNE_POSITION); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_ExAE___Z E(%d)xAE(%d) --> Z(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(z0A1) \ ) \ ); \ DESTRUCTION_D_UN_ELECTRON(electronD1); \ DESTRUCTION_D_UN_ANTI_ELECTRON(anti_electronD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_ELECTRON_VIRTUEL(electronD1)' car en effet, */ \ /* 'electronD1' peut etre un electron REEL... */ \ FIN_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ FIN_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ INCR(compteur_de_ELECTROWEAK_TRANSFORMATION_ExAE___Z,I); \ Eblock \ /* _ */ \ /* Vertex : ExE --> Z. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R A C T I O N E L E C T R O - F A I B L E */ /* */ /* C O L L I S I O N S E N T R E P A R T I C U L E S : */ /* */ /*************************************************************************************************************************************/ DEFV(Local,DEFV(Float,INIT(voisinage_1_D1_D2,VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES))); /* Distance en-dessous de laquelle 2 particules peuvent interagir dans tous les evenements */ /* de type 'COLLISION(...)' : */ /* */ /* ELECTROWEAK_ABSORBTION_ExP___E(...), */ /* ELECTROWEAK_ABSORBTION_AExP___AE(...), */ /* ELECTROWEAK_ABSORBTION_ExZ___E(...), */ /* ELECTROWEAK_ABSORBTION_AExZ___AE(...), */ /* ELECTROWEAK_TRANSFORMATION_ExAE___P(...), */ /* ELECTROWEAK_TRANSFORMATION_ExAE___Z(...). */ /* */ #define ADOLESCENCE_D_UNE_PARTICULE \ GRO2(FRA2(DIVI(VOISINAGE_D_INTERACTION_1_POUR_2_PARTICULES \ ,MIN4(VITESSE_MOYENNE_DES_ELECTRONS_ET_DES_ANTI_ELECTRONS \ ,VITESSE_MOYENNE_DES_NEUTRINOS \ ,VITESSE_DES_PHOTONS \ ,VITESSE_DES_Z0S \ ) \ ) \ ) \ ) \ /* Duree de l'adolescence d'une particule qui correspond a une periode au cours de laquelle */ \ /* elle ne peut rentrer en collision. La valeur implicite est choisie de facon telle qu'elle */ \ /* corresponde a une duree superieure a celle necessaire a s'echapper du voisinage d'une */ \ /* particule ; ceci permet d'eviter que des particules emises soient immediatement */ \ /* reabsorbee. */ \ /* */ \ /* ATTENTION : la valeur de 'ADOLESCENCE_D_UNE_PARTICULE' est plus grande dans le fichier */ \ /* '$xrq/di_elec.LH$I' que dans le fichier '$xrq/nucleon.LH$I', et ce afin de limiter au */ \ /* mieux l'absorbtion, par des electrons, des photons qu'ils viennent d'emettre... */ \ /* */ \ /* ATTENTION : la valeur de 'ADOLESCENCE_D_UNE_PARTICULE' est liee a la valeur du parametre */ \ /* 'VITESSE_MOYENNE_DES_ELECTRONS_ET_DES_ANTI_ELECTRONS'... */ \ /* */ \ /* ATTENTION, on est oblige d'utiliser ici : */ \ /* */ \ /* VITESSE_MOYENNE_DES_ELECTRONS_ET_DES_ANTI_ELECTRONS */ \ /* */ \ /* et non pas : */ \ /* */ \ /* vitesse_moyenne_des_electrons_et_des_anti_electrons */ \ /* */ \ /* a cause du fait que 'adolescence_d_une_particule' est initialisee avant l'entree des */ \ /* parametres, donc avant de redefinir 'vitesse_moyenne_des_electrons_et_des_anti_electrons' */ \ /* eventuellement... */ DEFV(Local,DEFV(Float,INIT(adolescence_d_une_particule,FLOT__UNDEF))); /* Duree de l'adolescence d'une particule qui correspond a une periode au cours de laquelle */ /* elle ne peut rentrer en collision. La valeur implicite est choisie de facon telle qu'elle */ /* corresponde a une duree superieure a celle necessaire a s'echapper du voisinage d'une */ /* particule ; ceci permet d'eviter que des particules emises soient immediatement */ /* reabsorbee. L'initialisation a lieu dans 'DEBUT_DE_L_INITIALISATION_DE_L_UNIVERS' a */ /* cause du compilateur de 'SYSTEME_SG4D..._IRIX_CC' qui refuse d'initialiser cette */ /* variable avec l'expression 'ADOLESCENCE_D_UNE_PARTICULE' qui contient un 'MIN2(...)'... */ #define COLLISION(condition,probabilite_de_la_collision,evenement,l_evenement_a_eu_lieu) \ Bblock \ Test(condition) \ Bblock \ DEFV(Float,INIT(probabilite_d_evenement_collisionnel,FLOT__UNDEF)); \ GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_collisionnel); \ /* Probabilite pour que la collision courante ait lieu... */ \ Test(IFLE(probabilite_d_evenement_collisionnel \ ,REGUL9(probabilite_de_la_collision) \ ) \ ) \ Bblock \ BLOC(evenement); \ /* Lorsque toutes les conditions sont remplies, il y a interaction... */ \ EGAL(l_evenement_a_eu_lieu,VRAI); \ /* Et on le signale au cas ou il y aurait plusieurs evenements possibles pour un meme */ \ /* ensemble de particules... */ \ Eblock \ ATes \ Bblock \ /* Lorsque toutes les conditions ('probabilite') ne sont pas remplies, rien ne se passe... */ \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Lorsque toutes les conditions ('condition') ne sont pas remplies, rien ne se passe... */ \ Eblock \ ETes \ Eblock \ /* Lorsqu'une collision a ete detectee, il faut verifier si les particules en cause */ \ /* remplissent un certain nombre de conditions pour pouvoir interagir... */ #define COLLISION_EVENTUELLE_ExP \ Bblock \ DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX)); \ /* Ainsi on peut savoir si l'evenement a eu lieu... */ \ COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1) \ ,ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD1) \ ,ELECTRON_VIRTUEL \ ) \ ) \ ,IFOU(IFEQ(NATURE(particuleD2) \ ,PHOTON_REEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,PHOTON_VIRTUEL \ ) \ ) \ ) \ ,probabilite_de_ELECTROWEAK_ABSORBTION_ExP___E \ ,ELECTROWEAK_ABSORBTION_ExP___E(particuleD1,particuleD2,electronA1); \ ,l_evenement_a_eu_lieu \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* ExP --> E */ \ /* */ #define COLLISION_EVENTUELLE_AExP \ Bblock \ DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX)); \ /* Ainsi on peut savoir si l'evenement a eu lieu... */ \ COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1) \ ,ANTI_ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD1) \ ,ANTI_ELECTRON_VIRTUEL \ ) \ ) \ ,IFOU(IFEQ(NATURE(particuleD2) \ ,PHOTON_REEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,PHOTON_VIRTUEL \ ) \ ) \ ) \ ,probabilite_de_ELECTROWEAK_ABSORBTION_AExP___AE \ ,ELECTROWEAK_ABSORBTION_AExP___AE(particuleD1,particuleD2,anti_electronA1); \ ,l_evenement_a_eu_lieu \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* AExP --> AE */ \ /* */ #define COLLISION_EVENTUELLE_ExZ \ Bblock \ DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX)); \ /* Ainsi on peut savoir si l'evenement a eu lieu... */ \ COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1) \ ,ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD1) \ ,ELECTRON_VIRTUEL \ ) \ ) \ ,IFOU(IFEQ(NATURE(particuleD2) \ ,Z0_REEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,Z0_VIRTUEL \ ) \ ) \ ) \ ,probabilite_de_ELECTROWEAK_ABSORBTION_ExZ___E \ ,ELECTROWEAK_ABSORBTION_ExZ___E(particuleD1,particuleD2,electronA1); \ ,l_evenement_a_eu_lieu \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* ExZ --> E */ \ /* */ #define COLLISION_EVENTUELLE_AExZ \ Bblock \ DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX)); \ /* Ainsi on peut savoir si l'evenement a eu lieu... */ \ COLLISION(IFET(IFOU(IFEQ(NATURE(particuleD1) \ ,ANTI_ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD1) \ ,ANTI_ELECTRON_VIRTUEL \ ) \ ) \ ,IFOU(IFEQ(NATURE(particuleD2) \ ,Z0_REEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,Z0_VIRTUEL \ ) \ ) \ ) \ ,probabilite_de_ELECTROWEAK_ABSORBTION_AExZ___AE \ ,ELECTROWEAK_ABSORBTION_AExZ___AE(particuleD1,particuleD2,anti_electronA1); \ ,l_evenement_a_eu_lieu \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* AExZ --> AE */ \ /* */ #define COLLISION_EVENTUELLE_ExAE \ Bblock \ DEFV(Logical,INIT(l_evenement_a_eu_lieu,FAUX)); \ /* Ainsi on peut savoir si l'evenement a eu lieu... */ \ COLLISION(I3ET(IFET(IFOU(IFEQ(NATURE(particuleD1) \ ,ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD1) \ ,ELECTRON_VIRTUEL \ ) \ ) \ ,IFOU(IFEQ(NATURE(particuleD2) \ ,ANTI_ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,ANTI_ELECTRON_VIRTUEL \ ) \ ) \ ) \ ,IFLT(nombre_total_de_z0s_VIRTUELs,nombre_maximal_de_z0s_VIRTUELs_du_di_electron) \ ,TOUJOURS_VRAI \ ) \ ,probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___Z \ ,ELECTROWEAK_TRANSFORMATION_ExAE___Z(particuleD1,particuleD2,z0A1); \ ,l_evenement_a_eu_lieu \ ); \ COLLISION(I3ET(IFET(IFOU(IFEQ(NATURE(particuleD1) \ ,ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD1) \ ,ELECTRON_VIRTUEL \ ) \ ) \ ,IFOU(IFEQ(NATURE(particuleD2) \ ,ANTI_ELECTRON_REEL \ ) \ ,IFEQ(NATURE(particuleD2) \ ,ANTI_ELECTRON_VIRTUEL \ ) \ ) \ ) \ ,IFLT(nombre_total_de_photons_VIRTUELs,nombre_maximal_de_photons_VIRTUELs_du_di_electron) \ ,EST_FAUX(l_evenement_a_eu_lieu) \ ) \ ,probabilite_de_ELECTROWEAK_TRANSFORMATION_ExAE___P \ ,ELECTROWEAK_TRANSFORMATION_ExAE___P(particuleD1,particuleD2,photonA1); \ ,l_evenement_a_eu_lieu \ ); \ Eblock \ /* Collision eventuelle du type : */ \ /* */ \ /* _ */ \ /* ExE --> Z */ \ /* */ \ /* ou : */ \ /* _ */ \ /* ExE --> P */ \ /* */ #define ___EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES \ Bblock \ DEFV(particule,POINTERs(particuleD1)); \ DEFV(particule,POINTERs(particuleD2)); \ /* Definition d'un ensemble de 2 particules en interaction... */ \ DEFV(Float,INIT(distance_D1_D2,FLOT__UNDEF)); \ /* Distance entre les 2 particules (D1,D2), et on notera la propriete triviale, mais */ \ /* essentielle suivante : */ \ /* */ \ /* distance(D1,D2) == distance(D2,D1). */ \ /* */ \ /* De plus, il serait possible d'optimiser en manipulant le carre des distances, mais il */ \ /* est plus physique de manipuler les distances elle-memes, et de plus le temps perdu a */ \ /* extraire les racines carrees est minime... */ \ ENSEMBLE_DES_PARTICULES(BLOC(VOISINAGE_D_UNE_PARTICULE(PARTICULE_COURANTE); \ /* Initialisation du detecteur de collisions a 2 particules. */ \ ) \ ); \ ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD1,PARTICULE_COURANTE); \ Test(IFGE(AGE(particuleD1),adolescence_d_une_particule)) \ Bblock \ /* Cas d'une particule assez agee : */ \ ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD2,PARTICULE_COURANTE); \ Test(IFET(IFNE(particuleD1,particuleD2) \ ,IFGE(AGE(particuleD2) \ ,adolescence_d_une_particule \ ) \ ) \ ) \ /* Cas ou les deux particules sont distinctes et suffisamment agees : */ \ Bblock \ EGAL(distance_D1_D2 \ ,pDISTANCE(particuleD1,particuleD2) \ ); \ Test(IFLT(distance_D1_D2 \ ,REGUL0(voisinage_1_D1_D2) \ ) \ ) \ /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'. */ \ Bblock \ /* Cas ou les deux particules sont suffisamment proches l'une de l'autre pour interagir : */ \ Test(IFLT(distance_D1_D2 \ ,ASI2(particuleD1 \ ,voisines \ ,distance1 \ ) \ ) \ ) \ Bblock \ EGAL(ASI2(particuleD1 \ ,voisines \ ,distance1 \ ) \ ,distance_D1_D2 \ ); \ EGAL(ASI2(particuleD1 \ ,voisines \ ,voisine1 \ ) \ ,particuleD2 \ ); \ EGAL(ASI2(particuleD1 \ ,voisines \ ,vide \ ) \ ,FAUX \ ); \ /* Memorisation de la proximite D1 --> D2 (on notera que la relation D2 --> D1 ne sera */ \ /* memorisee que si D1 et D2 forment bien les 2 voisines les plus proches...). */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Cas ou les deux particules sont trop eloignes, et ne peuvent interagir... */ \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ /* Cas ou D1=D2... */ \ Eblock \ ETes \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas d'une particule trop jeune, pas de collisions possibles pour elle... */ \ Eblock \ ETes \ ) \ ); \ ENSEMBLE_DES_PARTICULES(BLOC(EGAL(particuleD1,PARTICULE_COURANTE); \ Test(EST_FAUX(ASI2(particuleD1,voisines,vide))) \ /* Nota important : lors du processus qui va suivre, des particles vont etre crees, mais, */ \ /* pour elles, le test precedent est faux (voir 'VOISINAGE_D_UNE_PARTICULE(...)'). Donc */ \ /* ces particules ne seront pas manipulees en ce qui concerne les collisions... */ \ Bblock \ EGAL(particuleD2,ASI2(particuleD1,voisines,voisine1)); \ /* Recuperation d'un couple (D1,D2) de 2 particules voisines... */ \ \ COLLISION_EVENTUELLE_ExP; \ /* Vertex : ExP --> E. */ \ /* Nota : le vertex PxE --> E est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ COLLISION_EVENTUELLE_AExP; \ /* _ _ */ \ /* Vertex : ExP --> E. */ \ /* _ _ */ \ /* Nota : le vertex PxE --> E est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ \ COLLISION_EVENTUELLE_ExZ; \ /* Vertex : ExZ --> E. */ \ /* Nota : le vertex ZxE --> E est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ COLLISION_EVENTUELLE_AExZ; \ /* _ _ */ \ /* Vertex : ExZ --> E. */ \ /* _ _ */ \ /* Nota : le vertex ZxE --> E est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ COLLISION_EVENTUELLE_ExAE; \ /* _ */ \ /* Vertex : ExE --> P. */ \ /* _ */ \ /* Nota : le vertex ExE --> P est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ /* */ \ /* _ */ \ /* Vertex : ExE --> Z. */ \ /* _ */ \ /* Nota : le vertex ExE --> Z est obligatoirement present dans la liste (voir la symetrie */ \ /* de 'distance_D1_D2'...). */ \ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ) \ ); \ Eblock \ /* Evenements collisionnels pour les ensembles de 2 particules voisines dans le proton. */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES,P2,___EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES)) EFonctionI #define ___EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES \ Bblock \ PROCESSUS_INCOMPLET("evenements collisionnels pour les ensembles de 3 particules"); \ Eblock \ /* Evenements collisionnels pour les ensembles de 3 particules voisines dans le proton. */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES,P3,___EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES)) EFonctionI #define ___EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES \ Bblock \ PROCESSUS_INCOMPLET("evenements collisionnels pour les ensembles de 4 particules"); \ Eblock \ /* Evenements collisionnels pour les ensembles de 4 particules voisines dans le proton. */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES,P4,___EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES)) EFonctionI #define ___EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES \ Bblock \ EVENEMENTS_COLLISIONNELS_POUR_4_PARTICULES; \ /* Les evenements a 4 particules etant les plus rares, ils sont testes en premier afin */ \ /* de ne pas etre masques par ceux a 3 et 2 particules... */ \ EVENEMENTS_COLLISIONNELS_POUR_3_PARTICULES; \ /* Evenements a 3 particules... */ \ EVENEMENTS_COLLISIONNELS_POUR_2_PARTICULES; \ /* Les evenements a 2 particules sont donc testes en dernier... */ \ Eblock \ /* Evenements collisionnels pour l'ensemble des particules presentes dans le proton, */ \ /* et correspondant, par exemple, a ce que j'appelerai, des collisions... */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES,P,___EVENEMENTS_COLLISIONNELS_POUR_LES_PARTICULES)) EFonctionI