/*************************************************************************************************************************************/ /* */ /* 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/di_elec.LJ$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 \ GRO5(GRO16(FRA2(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 electrons (ou deux anti-electrons) peuvent echanger un */ /* photon dans des evenements du type : */ /* */ /* ELECTROWEAK_EMISSION_E___ExP(...), */ /* ELECTROWEAK_EMISSION_AE___AExP(...). */ /* */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R C E P T I O N D ' U N E P A R T I C U L E P A R U N P H O T O N : */ /* */ /*************************************************************************************************************************************/ #define INTERCEPTION_PARTICULE_PAR_UN_PHOTON(particule_cible,particule_emettrice,photon_emis,module_vitesse_photon,duree_vie_photon) \ INTERCEPTION_PARTICULE_PAR_UN_GLUON(particule_cible \ ,particule_emettrice \ ,photon_emis \ ,module_vitesse_photon \ ,duree_vie_photon \ ) \ /* Interception d'une particule par un photon... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R C E P T I O N D ' U N E P A R T I C U L E P A R U N Z 0 : */ /* */ /*************************************************************************************************************************************/ #define INTERCEPTION_PARTICULE_PAR_UN_Z0(particule_cible,particule_emettrice,z0_emis,module_vitesse_z0,duree_vie_z0) \ INTERCEPTION_PARTICULE_PAR_UN_GLUON(particule_cible \ ,particule_emettrice \ ,z0_emis \ ,module_vitesse_z0 \ ,duree_vie_z0 \ ) \ /* Interception d'une particule par un z0... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E D U C T I O N D U N O M B R E D ' E V E N E M E N T S R E L A T I F S */ /* A U X E L E C T R O N S E T A U X A N T I - E L E C T R O N S V I R T U E L S : */ /* */ /*************************************************************************************************************************************/ #define FACTEUR_REDUCTIF_DES_PROBABILITES_RELATIVES_AUX_ELECTRONS_ET_ANTI_ELECTRONS_VIRTUELS \ GRO1(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(facteur_reductif_des_probabilites_relatives_aux_electrons_et_anti_electrons_virtuels ,FACTEUR_REDUCTIF_DES_PROBABILITES_RELATIVES_AUX_ELECTRONS_ET_ANTI_ELECTRONS_VIRTUELS ) ) ); /* Facteur multiplicatif dans [0,1] permettant de passer des probabilites relatives aux */ /* electrons et anti-electrons REELs a celles des electrons et anti-electrons VIRTUELs. */ #define LIMIT_VIRT(probabilite,particule) \ MUL2(COND(IFET(IFNE(NATURE(particule),ELECTRON_VIRTUEL) \ ,IFNE(NATURE(particule),ANTI_ELECTRON_VIRTUEL) \ ) \ ,FU \ ,facteur_reductif_des_probabilites_relatives_aux_electrons_et_anti_electrons_virtuels \ ) \ ,probabilite \ ) \ /* Afin de simuler une perte d'energie des particules au cours du temps, il faut reduire */ \ /* le nombre des evenements relatifs aux electrons virtuels, et en particulier leurs */ \ /* emissions de bosons, ce qui limitera alors le nombre de materialisation de ces derniers. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* O R I E N T A T I O N D E L ' A X E ' OZ2 ' : */ /* */ /*************************************************************************************************************************************/ #define ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(particule) \ DEFV(Float,INIT(orientation_de_l_axe_OZ,orientation_aleatoire_de_l_axe_OZ(particule))); \ /* Cas ou l'axe 'OZ' doit etre oriente aleatoirement independamment de 'particule'... */ BFonctionF DEFV(Local,DEFV(FonctionF,orientation_aleatoire_de_l_axe_OZ(particule_de_reference))) /* ATTENTION, cette fonction a ete introduite parce qu'il est devenu impossible de mettre */ /* des instructions executables dans 'ORIENTATION_ALEATOIRE_DE_L_AXE_OZ(...)' depuis que */ /* cette procedure est utilisee dans '$xrq/di_elec.LH$I'... */ DEFV(Argument,DEFV(particule,POINTERs(particule_de_reference))); /* Particule de reference (inutilisee...). */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Float,INIT(orientation_de_l_axe_OZ,FLOT__UNDEF)); /* Parametre donnant le sens de l'axe 'OZ' (+1 ou -1)... */ /*..............................................................................................................................*/ GENERATION_D_UNE_VALEUR(orientation_de_l_axe_OZ,NEGA(FU),NEUT(FU)); /* Calcul d'une valeur aleatoire dans [-1,+1]. */ RETU(COND(IZGE(orientation_de_l_axe_OZ) ,NEUT(FU) ,NEGA(FU) ) ); /* Et renvoi a partir de la de +1 ou -1... */ Eblock EFonctionF #define ORIENTATION_A_PRIORI_DE_L_AXE_OZ(particule) \ DEFV(Float,INIT(orientation_de_l_axe_OZ,SENS_DE_L_AXE_OZ(particule))); \ /* Cas ou l'axe 'OZ' doit etre oriente en fonction de la particule 'particule'... */ #define SENS_DE_L_AXE_OZ(particule) \ COND(IFOU(IFEQ(particule,electron_1_REEL),IFEQ(particule,neutrino_REEL)) \ ,NEGA(FU) \ ,COND(IFEQ(particule,electron_2_REEL) \ ,NEUT(FU) \ ,NEUT(FU) \ ) \ ) \ /* Orientation de l'axe 'OZ2' en fonction de l'identite de la particule. On notera que */ \ /* l'on a en general la configuration : */ \ /* */ \ /* */ \ /* OY1 | */ \ /* | OZ2 / */ \ /* | / */ \ /* | / */ \ /* | electron REEL 1 / */ \ /* | + + + + + + + + + O------------------- + + + + + + + + + */ \ /* | neutrino REEL | * OX2 */ \ /* | | * */ \ /* | | * */ \ /* | | * photon */ \ /* | | */ \ /* | OY2 | */ \ /* | */ \ /* | */ \ /* | */ \ /* | OY2 | */ \ /* | | */ \ /* | | * photon */ \ /* | | * */ \ /* | | * */ \ /* | electron | * */ \ /* | + + + + + + + + + O------------------- + + + + + + + + + */ \ /* | REEL 2 / OX2 */ \ /* | / */ \ /* | / */ \ /* | OZ2 / */ \ /* | */ \ /* | */ \ /* O----------------------------------------------------------- */ \ /* / OX1 */ \ /* / */ \ /* / */ \ /* / */ \ /* / */ \ /* OZ1 / */ \ /* */ \ /* */ \ /* d'ou le facteur multiplicatif valant plus ou moins un... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E V E N E M E N T N E U T R E P O U R U N E L E C T R O N : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_INCHANGE_E \ GRO9(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_E,PROBABILITE_DE_INCHANGE_E))); /* Probabilite du vertex : E --> E. */ #define INCHANGE_E(electronD1) \ Bblock \ Eblock \ /* Vertex : E --> E. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 */ /* */ /* 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 L E C T R O N : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExP \ GRO1(FRA10(FRA10(PROBABILITE_DE_INCHANGE_E))) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_E___ExP,PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExP))); /* Probabilite du vertex : E --> ExP. */ #define ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExP \ FZERO DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExP ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExP ) ) ); /* Dispersion de l'angle du vertex : E --> ExP. */ #define INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP \ VRAI DEFV(Local,DEFV(Logical,INIT(interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP ,INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP ) ) ); /* Cet indicateur precise si l'echange d'un photon se fait par une simple emission par un */ /* electron ('FAUX') ou par le processus d'interception ('VRAI'). */ #define PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP \ GRO1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP ,PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_E___ExP ) ) ); /* Cet valeur precise la probabilite d'echange d'un photon par le processus d'interception. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_E___ExP,ZERO))); /* Compteur des vertex : E --> ExP. */ #define ELECTROWEAK_EMISSION_E___ExP(electronD1,electronA1,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(electronD1); \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(electronD1,espace_temps,vitesse) \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de 'electronD1'... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExP' dans */ \ /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le electron */ \ /* se deplace le long de l'axe 'OX2'. */ \ 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... */ \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExP) \ ) \ ) \ ); \ CREATION_D_UN_ELECTRON_VIRTUEL(electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(electronD1,electronA1); \ /* La date de naisance est transmise du pere au fils... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_PHOTON; \ /* Le module de la vitesse des photons 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(GRO2(FRA8(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExP) \ ) \ ) \ ); \ CREATION_D_UN_PHOTON_VIRTUEL(photonA1 \ ,ASI2(electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ /* ATTENTION : 'photonA1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra */ \ /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' au cas ou */ \ /* ce photon aurait la possibilite raisonnable d'intercepter un anti-electron... */ \ EGAL(electronD2,electronD1); \ /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire, */ \ /* 'electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'electronD1' en tant que */ \ /* 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion terrible... */ \ RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2 \ ,interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP \ ,probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_E___ExP \ ,electronD2,electronA1 \ ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL) \ ) \ ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL) \ ) \ ) \ ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE) \ ,IFLT(pDISTANCE(electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2)) \ ) \ ); \ /* Recherche d'un 'electron_ou_anti_electronA2' proche du electron 'electronD1' (alias */ \ /* 'electronD2'...) et qui ne soit pas encore vise par un photon (d'ou le test sur la */ \ /* duree de vie moyenne). */ \ /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'. */ \ Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ INTERCEPTION_PARTICULE_PAR_UN_PHOTON(electron_ou_anti_electronA2 \ ,electronD1 \ ,photonA1,VITESSE_DES_PHOTONS,DUREE_DE_VIE_MOYENNE_COURANTE(photonA1) \ ); \ /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron */ \ /* 'electronD1', on tente l'interception de 'electron_ou_anti_electronA2' par 'photonA1' */ \ /* emis par 'electronD1'... */ \ Eblock \ ATes \ Bblock \ /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \ /* 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' peut changer l'etat de */ \ /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'... */ \ Eblock \ ETes \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(photonA1,NE_PAS_PERTURBER_UNE_POSITION); \ /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* 'electronD1', on conserve pour le photon 'photonA1' la vitesse 'vitesse_courante'... */ \ Eblock \ ATes \ Bblock \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2); \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(photonA1); \ /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron */ \ /* 'electronD1', on allonge artificiellement la duree de vie moyenne de */ \ /* 'electron_ou_anti_electronA2' et 'photonA1' afin de reduire au maximum les chances */ \ /* que se produisent pour eux des evenements conditionnels du type : */ \ /* */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS, */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS. */ \ /* */ \ Eblock \ ETes \ CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1); \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ /* Cas ou aucune particule ne peut etre "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_E___ExP E(%d) --> E(%d)xP(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(electronA1) \ ,ETIQUETTE(photonA1) \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas ou une particule est "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_E___ExP E(%d) --> E(%d)xP(%d) =O=> EAE(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(electronA1) \ ,ETIQUETTE(photonA1) \ ,ETIQUETTE(electron_ou_anti_electronA2) \ ) \ ); \ Eblock \ ETes \ DESTRUCTION_D_UN_ELECTRON(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_EMISSION_E___ExP,I); \ Eblock \ /* Vertex : E --> ExP. */ #define PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExZ \ GRO0(FRA10(FRA10(PROBABILITE_DE_INCHANGE_E))) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_E___ExZ,PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExZ))); /* Probabilite du vertex : E --> ExZ. */ #define ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExZ \ FZERO DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExZ ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_E___ExZ ) ) ); /* Dispersion de l'angle du vertex : E --> ExZ. */ #define INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_E___ExZ \ VRAI DEFV(Local,DEFV(Logical,INIT(interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_E___ExZ ,INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_E___ExZ ) ) ); /* Cet indicateur precise si l'echange d'un z0 se fait par une simple emission par un */ /* electron ('FAUX') ou par le processus d'interception ('VRAI'). */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_E___ExZ,ZERO))); /* Compteur des vertex : E --> ExZ. */ #define ELECTROWEAK_EMISSION_E___ExZ(electronD1,electronA1,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(electronD1); \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(electronD1,espace_temps,vitesse) \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de 'electronD1'... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExZ' dans */ \ /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le electron */ \ /* se deplace le long de l'axe 'OX2'. */ \ 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... */ \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExZ) \ ) \ ) \ ); \ CREATION_D_UN_ELECTRON_VIRTUEL(electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(electronD1,electronA1); \ /* La date de naisance est transmise du pere au fils... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0; \ /* Le module de la vitesse des z0s 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(GRO2(FRA8(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_E___ExZ) \ ) \ ) \ ); \ CREATION_D_UN_Z0_VIRTUEL(z0A1 \ ,ASI2(electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ /* ATTENTION : 'z0A1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra */ \ /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' au cas ou */ \ /* ce z0 aurait la possibilite raisonnable d'intercepter un anti-electron... */ \ EGAL(electronD2,electronD1); \ /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire, */ \ /* 'electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'electronD1' en tant que */ \ /* 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion terrible... */ \ RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2 \ ,interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_E___ExZ \ ,EVENEMENT_CERTAIN \ ,electronD2,electronA1 \ ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL) \ ) \ ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL) \ ) \ ) \ ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE) \ ,IFLT(pDISTANCE(electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2)) \ ) \ ); \ /* Recherche d'un 'electron_ou_anti_electronA2' proche du electron 'electronD1' (alias */ \ /* 'electronD2'...) et qui ne soit pas encore vise par un z0 (d'ou le test sur la */ \ /* duree de vie moyenne). */ \ /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'. */ \ Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ INTERCEPTION_PARTICULE_PAR_UN_Z0(electron_ou_anti_electronA2 \ ,electronD1 \ ,z0A1,VITESSE_DES_Z0S,DUREE_DE_VIE_MOYENNE_COURANTE(z0A1) \ ); \ /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron */ \ /* 'electronD1', on tente l'interception de 'electron_ou_anti_electronA2' par 'z0A1' emis */ \ /* par 'electronD1'... */ \ Eblock \ ATes \ Bblock \ /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \ /* 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' peut changer l'etat de */ \ /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'... */ \ Eblock \ ETes \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,NE_PAS_PERTURBER_UNE_POSITION); \ /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* 'electronD1', on conserve pour le z0 'z0A1' la vitesse 'vitesse_courante'... */ \ Eblock \ ATes \ Bblock \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2); \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(z0A1); \ /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche du electron */ \ /* 'electronD1', on allonge artificiellement la duree de vie moyenne de */ \ /* 'electron_ou_anti_electronA2' et de 'z0A1' afin de reduire au maximum les chances que se */ \ /* se produisent pour eux des evenements conditionnels du type : */ \ /* */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS, */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S. */ \ /* */ \ Eblock \ ETes \ CHANGEMENT_EVENTUEL_D_ELECTRON_REEL(electronD1,electronA1); \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ /* Cas ou aucune particule ne peut etre "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_E___ExZ E(%d) --> E(%d)xZ(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(electronA1) \ ,ETIQUETTE(z0A1) \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas ou une particule est "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_E___ExZ E(%d) --> E(%d)xZ(%d) =O=> EAE(%d)" \ ,ETIQUETTE(electronD1) \ ,ETIQUETTE(electronA1) \ ,ETIQUETTE(z0A1) \ ,ETIQUETTE(electron_ou_anti_electronA2) \ ) \ ); \ Eblock \ ETes \ DESTRUCTION_D_UN_ELECTRON(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_EMISSION_E___ExZ,I); \ Eblock \ /* Vertex : E --> ExZ. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 E L E C T R O N S : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ELECTRON \ FRA1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_electron ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ELECTRON ) ) ); /* Probabilite pour qu'un electron present dans le proton soit la "victime" d'un evenement */ /* conditionnel du type : */ /* */ /* INCHANGE_E, */ /* ELECTROWEAK_EMISSION_E___ExP, */ /* ELECTROWEAK_EMISSION_E___ExZ. */ /* */ #define ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS \ Bblock \ DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF)); \ /* Probabilite pour que le electron courant soit la "victime" d'un evenement conditionnel */ \ /* du type : */ \ /* */ \ /* INCHANGE_E, */ \ /* ELECTROWEAK_EMISSION_E___ExP, */ \ /* ELECTROWEAK_EMISSION_E___ExZ. */ \ /* */ \ TOTALITE_DES_ELECTRONS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel); \ Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel \ ,electronD1 \ ,DUREE_DE_VIE_MOYENNE_COURANTE(electronD1) \ ) \ ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_electron) \ ) \ ) \ Bblock \ DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF)); \ /* Probabilite de choix entre : */ \ /* */ \ /* INCHANGE_E, */ \ /* ELECTROWEAK_EMISSION_E___ExP, */ \ /* ELECTROWEAK_EMISSION_E___ExZ. */ \ /* */ \ GENERATION_D_UNE_VALEUR \ (probabilite_de_choix \ ,EVENEMENT_IMPOSSIBLE \ ,ADD3(REGUL0(probabilite_de_INCHANGE_E) \ ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExP \ ,electronD1 \ ) \ ) \ ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExZ \ ,electronD1 \ ) \ ) \ ) \ ); \ /* 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_E) \ ,INCHANGE_E(electronD1) \ ); \ CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES \ (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExP \ ,electronD1 \ ) \ ) \ ,BLOC(Test(IFLT(nombre_total_de_photons_VIRTUELs \ ,nombre_maximal_de_photons_VIRTUELs_du_di_electron \ ) \ ) \ Bblock \ ELECTROWEAK_EMISSION_E___ExP(electronD1 \ ,electronA1 \ ,photonA1 \ ); \ /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee */ \ /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de photons */ \ /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_E___ExP(...)' n'est */ \ /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel */ \ /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne */ \ /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur */ \ /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...). */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ) \ ); \ CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES \ (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_E___ExZ \ ,electronD1 \ ) \ ) \ ,BLOC(Test(IFLT(nombre_total_de_z0s_VIRTUELs \ ,nombre_maximal_de_z0s_VIRTUELs_du_di_electron \ ) \ ) \ Bblock \ ELECTROWEAK_EMISSION_E___ExZ(electronD1 \ ,electronA1 \ ,z0A1 \ ); \ /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee */ \ /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de z0s */ \ /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_E___ExZ(...)' n'est */ \ /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel */ \ /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne */ \ /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur */ \ /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...). */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ) \ ); \ FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES; \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ); \ ); \ Eblock \ /* Evenements conditionnels pour quelques uns des electrons presents dans le proton */ \ /* (REELs ou VIRTUELs). */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS,E,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ELECTRONS)) 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 - E L E C T R O N : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_INCHANGE_AE \ PROBABILITE_DE_INCHANGE_E DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_AE,PROBABILITE_DE_INCHANGE_AE))); /* _ _ */ /* Probabilite du vertex : E --> E. */ #define INCHANGE_AE(anti_electronD1) \ Bblock \ Eblock \ /* _ _ */ \ /* Vertex : E --> E. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 */ /* */ /* 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 - E L E C T R O N : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExP \ PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExP DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExP,PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExP))); /* _ _ */ /* Probabilite du vertex : E --> ExP. */ #define ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExP \ FZERO DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExP ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExP ) ) ); /* _ _ */ /* Dispersion de l'angle du vertex : E --> ExP. */ #define INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP \ VRAI DEFV(Local,DEFV(Logical,INIT(interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP ,INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP ) ) ); /* Cet indicateur precise si l'echange d'un photon se fait par une simple emission par un */ /* anti-electron ('FAUX') ou par le processus d'interception ('VRAI'). */ #define PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP \ GRO1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP ,PROBABILITE_D_INTERCEPTION_PAR_UN_PHOTON_LORS_DE_ELECTROWEAK_EMISSION_AE___AExP ) ) ); /* Cet valeur precise la probabilite d'echange d'un photon par le processus d'interception. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_AE___AExP,ZERO))); /* _ _ */ /* Compteur des vertex : E --> ExP. */ #define ELECTROWEAK_EMISSION_AE___AExP(anti_electronD1,anti_electronA1,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(anti_electronD1); \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(anti_electronD1,espace_temps,vitesse) \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de 'anti_electronD1'... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ /* _ _ */ \ /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExP' dans */ \ /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que */ \ /* l'anti-electron se deplace le long de l'axe 'OX2'. */ \ 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... */ \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExP) \ ) \ ) \ ); \ CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(anti_electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(anti_electronD1,anti_electronA1); \ /* La date de naisance est transmise du pere au fils... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_PHOTON; \ /* Le module de la vitesse des photons 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(GRO2(FRA8(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExP) \ ) \ ) \ ); \ CREATION_D_UN_PHOTON_VIRTUEL(photonA1 \ ,ASI2(anti_electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ /* ATTENTION : 'photonA1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra */ \ /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' au cas ou */ \ /* ce photon aurait la possibilite raisonnable d'intercepter un electron... */ \ EGAL(anti_electronD2,anti_electronD1); \ /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire, */ \ /* 'anti_electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'anti_electronD1' en */ \ /* tant que 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion */ \ /* terrible... */ \ RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2 \ ,interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP \ ,probabilite_d_interception_par_un_photon_lors_de_ELECTROWEAK_EMISSION_AE___AExP \ ,anti_electronD2,anti_electronA1 \ ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL) \ ) \ ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL) \ ) \ ) \ ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE) \ ,IFLT(pDISTANCE(anti_electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2)) \ ) \ ); \ /* Recherche d'un 'electron_ou_anti_electronA2' proche de l'anti-electron */ \ /* 'anti_electronD1' (alias 'anti_electronD2') et qui ne soit pas encore vise par photon */ \ /* (d'ou le test sur la duree de vie moyenne). */ \ /* vie moyenne). */ \ /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'. */ \ Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ INTERCEPTION_PARTICULE_PAR_UN_PHOTON(electron_ou_anti_electronA2 \ ,anti_electronD1 \ ,photonA1,VITESSE_DES_PHOTONS,DUREE_DE_VIE_MOYENNE_COURANTE(photonA1) \ ); \ /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* l'anti-electron 'anti_electronD1', on tente l'interception de */ \ /* 'electron_ou_anti_electronA2' par 'photonA1' emis par l'anti-electron 'anti_electronD1'. */ \ Eblock \ ATes \ Bblock \ /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \ /* 'INTERCEPTION_PARTICULE_PAR_UN_PHOTON(...)' peut changer l'etat de */ \ /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'... */ \ Eblock \ ETes \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(photonA1,NE_PAS_PERTURBER_UNE_POSITION); \ /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* l'anti-electron 'anti_electronD1', on conserve pour le photon 'photonA1' la vitesse */ \ /* 'vitesse_courante'... */ \ Eblock \ ATes \ Bblock \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2); \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(photonA1); \ /* Lorsque l'on a trouve un electron 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* 'electronD1', on allonge artificiellement la duree de vie moyenne de */ \ /* 'electron_ou_anti_electronA2' et de 'photonA1' afin de reduire au maximum les chances que */ \ /* que se produisent pour eux des evenements conditionnels du type : */ \ /* */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS, */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS. */ \ /* */ \ Eblock \ ETes \ CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1); \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ /* Cas ou aucune particule ne peut etre "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_AE___AExP AE(%d) --> AE(%d)xP(%d)" \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(anti_electronA1) \ ,ETIQUETTE(photonA1) \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas ou une particule est "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_AE___AExP AE(%d) --> AE(%d)xP(%d) =O=> EAE(%d)" \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(anti_electronA1) \ ,ETIQUETTE(photonA1) \ ,ETIQUETTE(electron_ou_anti_electronA2) \ ) \ ); \ Eblock \ ETes \ 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 anti-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_EMISSION_AE___AExP,I); \ Eblock \ /* _ _ */ \ /* Vertex : E --> ExP. */ #define PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExZ \ PROBABILITE_DE_ELECTROWEAK_EMISSION_E___ExZ DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExZ,PROBABILITE_DE_ELECTROWEAK_EMISSION_AE___AExZ))); /* _ _ */ /* Probabilite du vertex : E --> ExZ. */ #define ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExZ \ FZERO DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExZ ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_AE___AExZ ) ) ); /* _ _ */ /* Dispersion de l'angle du vertex : E --> ExZ. */ #define INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_AE___AExZ \ VRAI DEFV(Local,DEFV(Logical,INIT(interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_AE___AExZ ,INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_AE___AExZ ) ) ); /* Cet indicateur precise si l'echange d'un z0 se fait par une simple emission par un */ /* anti-electron ('FAUX') ou par le processus d'interception ('VRAI'). */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_AE___AExZ,ZERO))); /* _ _ */ /* Compteur des vertex : E --> ExZ. */ #define ELECTROWEAK_EMISSION_AE___AExZ(anti_electronD1,anti_electronA1,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(anti_electronD1); \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(anti_electronD1,espace_temps,vitesse) \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de 'anti_electronD1'... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ /* _ _ */ \ /* Rotation aleatoire de l'espace physique afin de placer le vertex 'E --> ExZ' dans */ \ /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que */ \ /* l'anti-electron se deplace le long de l'axe 'OX2'. */ \ 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... */ \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExZ) \ ) \ ) \ ); \ CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(anti_electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(anti_electronD1,anti_electronA1); \ /* La date de naisance est transmise du pere au fils... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0; \ /* Le module de la vitesse des z0s 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(GRO2(FRA8(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_AE___AExZ) \ ) \ ) \ ); \ CREATION_D_UN_Z0_VIRTUEL(z0A1 \ ,ASI2(anti_electronD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ /* ATTENTION : 'z0A1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra */ \ /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' au cas ou */ \ /* ce z0 aurait la possibilite raisonnable d'intercepter un electron... */ \ EGAL(anti_electronD2,anti_electronD1); \ /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire, */ \ /* 'anti_electronD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'anti_electronD1' en */ \ /* tant que 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion */ \ /* terrible... */ \ RECHERCHE_D_UNE_PARTICULE(electron_ou_anti_electronA2 \ ,interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_AE___AExZ \ ,EVENEMENT_CERTAIN \ ,anti_electronD2,anti_electronA1 \ ,I3ET(IFOU(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL) \ ) \ ,IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ANTI_ELECTRON_VIRTUEL) \ ) \ ) \ ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE) \ ,IFLT(pDISTANCE(anti_electronD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2)) \ ) \ ); \ /* Recherche d'un 'electron_ou_anti_electronA2' proche de l'anti-electron */ \ /* 'anti_electronD1' (alias 'anti_electronD2') et qui ne soit pas encore vise par z0 */ \ /* (d'ou le test sur la duree de vie moyenne). */ \ /* vie moyenne). */ \ /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'. */ \ Test(IFNE(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ INTERCEPTION_PARTICULE_PAR_UN_Z0(electron_ou_anti_electronA2 \ ,anti_electronD1 \ ,z0A1,VITESSE_DES_Z0S,DUREE_DE_VIE_MOYENNE_COURANTE(z0A1) \ ); \ /* Lorsque l'on a trouve un 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* l'anti-electron 'anti_electronD1', on tente l'interception de */ \ /* 'electron_ou_anti_electronA2' par 'z0A1' emis par l'anti-electron 'anti_electronD1'... */ \ Eblock \ ATes \ Bblock \ /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \ /* 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' peut changer l'etat de */ \ /* 'electron_ou_anti_electronA2' et lui donner la valeur 'PARTICULE_NON_DEFINIE'... */ \ Eblock \ ETes \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,NE_PAS_PERTURBER_UNE_POSITION); \ /* Lorsque l'on n'a pas trouve un 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* l'anti-electron 'anti_electronD1', on conserve pour le z0 'z0A1' la vitesse */ \ /* 'vitesse_courante'... */ \ Eblock \ ATes \ Bblock \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electron_ou_anti_electronA2); \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(z0A1); \ /* Lorsque l'on a trouve un electron 'electron_ou_anti_electronA2' suffisamment proche de */ \ /* 'electronD1', on allonge artificiellement la duree de vie moyenne de */ \ /* 'electron_ou_anti_electronA2' et de 'z0A1' afin de reduire au maximum les chances que se */ \ /* que se produisent pour eux des evenements conditionnels du type : */ \ /* */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS, */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S. */ \ /* */ \ Eblock \ ETes \ CHANGEMENT_EVENTUEL_D_ANTI_ELECTRON_REEL(anti_electronD1,anti_electronA1); \ Test(IFEQ(electron_ou_anti_electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_AE___AExZ AE(%d) --> AE(%d)xZ(%d)" \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(anti_electronA1) \ ,ETIQUETTE(z0A1) \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas ou une particule est "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_AE___AExZ AE(%d) --> AE(%d)xZ(%d) =O=> EAE(%d)" \ ,ETIQUETTE(anti_electronD1) \ ,ETIQUETTE(anti_electronA1) \ ,ETIQUETTE(z0A1) \ ,ETIQUETTE(electron_ou_anti_electronA2) \ ) \ ); \ Eblock \ ETes \ 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 anti-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_EMISSION_AE___AExZ,I); \ Eblock \ /* _ _ */ \ /* Vertex : E --> ExZ. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 - E L E C T R O N S : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ANTI_ELECTRON \ FRA1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_anti_electron ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_ANTI_ELECTRON ) ) ); /* Probabilite pour qu'un anti-electron present dans le proton soit la "victime" d'un */ /* evenement conditionnel du type : */ /* */ /* INCHANGE_AE, */ /* ELECTROWEAK_EMISSION_AE___AExP, */ /* ELECTROWEAK_EMISSION_AE___AExZ. */ /* */ #define ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS \ Bblock \ DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF)); \ /* Probabilite pour que le anti-electron courant soit la "victime" d'un evenement */ \ /* conditionnel du type : */ \ /* */ \ /* INCHANGE_AE, */ \ /* ELECTROWEAK_EMISSION_AE___AExP, */ \ /* ELECTROWEAK_EMISSION_AE___AExZ. */ \ /* */ \ TOTALITE_DES_ANTI_ELECTRONS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel); \ Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel \ ,anti_electronD1 \ ,DUREE_DE_VIE_MOYENNE_COURANTE(anti_electronD1) \ ) \ ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_anti_electron) \ ) \ ) \ Bblock \ DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF)); \ /* Probabilite de choix entre : */ \ /* */ \ /* INCHANGE_AE, */ \ /* ELECTROWEAK_EMISSION_AE___AExP, */ \ /* ELECTROWEAK_EMISSION_AE___AExZ. */ \ /* */ \ GENERATION_D_UNE_VALEUR \ (probabilite_de_choix \ ,EVENEMENT_IMPOSSIBLE \ ,ADD3(REGUL0(probabilite_de_INCHANGE_AE) \ ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExP \ ,anti_electronD1 \ ) \ ) \ ,REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExZ \ ,anti_electronD1 \ ) \ ) \ ) \ ); \ /* 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_AE) \ ,INCHANGE_AE(anti_electronD1) \ ); \ CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES \ (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExP \ ,anti_electronD1 \ ) \ ) \ ,BLOC(Test(IFLT(nombre_total_de_photons_VIRTUELs \ ,nombre_maximal_de_photons_VIRTUELs_du_di_electron \ ) \ ) \ Bblock \ ELECTROWEAK_EMISSION_AE___AExP(anti_electronD1 \ ,anti_electronA1 \ ,photonA1 \ ) \ /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee */ \ /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de photons */ \ /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_AE___AExP(...)' n'est */ \ /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel */ \ /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne */ \ /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur */ \ /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...). */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ) \ ); \ CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES \ (REGUL1(LIMIT_VIRT(probabilite_de_ELECTROWEAK_EMISSION_AE___AExZ \ ,anti_electronD1 \ ) \ ) \ ,BLOC(Test(IFLT(nombre_total_de_z0s_VIRTUELs \ ,nombre_maximal_de_z0s_VIRTUELs_du_di_electron \ ) \ ) \ Bblock \ ELECTROWEAK_EMISSION_AE___AExZ(anti_electronD1 \ ,anti_electronA1 \ ,z0A1 \ ) \ /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee */ \ /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de z0s */ \ /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_AE___AExZ(...)' n'est */ \ /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel */ \ /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne */ \ /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur */ \ /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...). */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ) \ ); \ FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES; \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ); \ ); \ Eblock \ /* Evenements conditionnels pour quelques uns des anti-electrons presents dans le proton */ \ /* (REELs ou VIRTUELs). */ BFonctionI #define ___EVENEMENTS_ANTI_ELECTRONS \ ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS /* Afin de reduire la longueur de la ligne suivante... */ DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_ELECTRONS,AE,___EVENEMENTS_ANTI_ELECTRONS)) #undef ___EVENEMENTS_ANTI_ELECTRONS EFonctionI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E V E N E M E N T N E U T R E P O U R U N N E U T R I N O : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_INCHANGE_N \ GRO9(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_N,PROBABILITE_DE_INCHANGE_N))); /* Probabilite du vertex : N --> N. */ #define INCHANGE_N(neutrinoD1) \ Bblock \ Eblock \ /* Vertex : N --> N. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 */ /* */ /* 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 N E U T R I N O : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_ELECTROWEAK_EMISSION_N___NxZ \ GRO1(FRA5(FRA10(PROBABILITE_DE_INCHANGE_N))) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_EMISSION_N___NxZ,PROBABILITE_DE_ELECTROWEAK_EMISSION_N___NxZ))); /* Probabilite du vertex : N --> NxZ. */ #define ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_N___NxZ \ FZERO DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_EMISSION_N___NxZ ,ANGLE_POLARISATION_DE_ELECTROWEAK_EMISSION_N___NxZ ) ) ); /* Dispersion de l'angle du vertex : N --> NxZ. */ #define INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_N___NxZ \ VRAI DEFV(Local,DEFV(Logical,INIT(interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_N___NxZ ,INTERCEPTION_PAR_UN_Z0_LORS_DE_ELECTROWEAK_EMISSION_N___NxZ ) ) ); /* Cet indicateur precise si l'echange d'un z0 se fait par une simple emission par un */ /* neutrino ('FAUX') ou par le processus d'interception ('VRAI'). */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_EMISSION_N___NxZ,ZERO))); /* Compteur des vertex : N --> NxZ. */ #define ELECTROWEAK_EMISSION_N___NxZ(neutrinoD1,neutrinoA1,z0A1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_A_PRIORI_DE_L_AXE_OZ(neutrinoD1); \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(neutrinoD1,espace_temps,vitesse) \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de 'neutrinoD1'... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ /* Rotation aleatoire de l'espace physique afin de placer le vertex 'N --> NxZ' dans */ \ /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le neutrino */ \ /* se deplace le long de l'axe 'OX2'. */ \ CONSERVATION_DU_MODULE_DE_LA_VITESSE_D_UN_NEUTRINO(neutrinoD1); \ /* On fixe a priori la conservation de la vitesse du neutrino... */ \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEGA(ADD2(GRO1(FRA16(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_N___NxZ) \ ) \ ) \ ); \ CREATION_D_UN_NEUTRINO_VIRTUEL(neutrinoA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(neutrinoD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ CONSERVATION_DE_LA_DATE_DE_NAISSANCE_D_UNE_PARTICULE(neutrinoD1,neutrinoA1); \ /* La date de naisance est transmise du pere au fils... */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_Z0; \ /* Le module de la vitesse des z0s 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(GRO2(FRA8(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_EMISSION_N___NxZ) \ ) \ ) \ ); \ CREATION_D_UN_Z0_VIRTUEL(z0A1 \ ,ASI2(neutrinoD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ /* ATTENTION : 'z0A1' recoit a priori une vitesse courante 'vitesse_courante' qui pourra */ \ /* etre modifiee du tout au tout par 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' au cas ou */ \ /* ce z0 aurait la possibilite raisonnable d'intercepter un anti-electron... */ \ EGAL(neutrinoD2,neutrinoD1); \ /* ATTENTION : cette manipulation est due au fait qu'au niveau allocation memoire, */ \ /* 'neutrinoD1' est en fait 'PARTICULE_COURANTE', et qu'utiliser 'neutrinoD1' en tant que */ \ /* 'particuleA' dans 'RECHERCHE_D_UNE_PARTICULE(...)' aboutirait a une confusion terrible... */ \ RECHERCHE_D_UNE_PARTICULE(electronA2 \ ,interception_par_un_z0_lors_de_ELECTROWEAK_EMISSION_N___NxZ \ ,EVENEMENT_CERTAIN \ ,neutrinoD2,neutrinoA1 \ ,I3ET(IFOU(IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_REEL) \ ,IFEQ(NATURE(PARTICULE_COURANTE),ELECTRON_VIRTUEL) \ ) \ ,PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(PARTICULE_COURANTE) \ ,IFLT(pDISTANCE(neutrinoD2,PARTICULE_COURANTE),REGUL0(voisinage_2_D1_D2)) \ ) \ ); \ /* Recherche d'un electron 'electronA2' proche du neutrino 'neutrinoD1' (alias */ \ /* 'neutrinoD2'...) et qui ne soit pas encore vise par un z0 (d'ou le test sur la */ \ /* duree de vie moyenne). */ \ /* Nota : a la place de 'REGUL0(...)', on pourrait utiliser 'REGUL9(...)'. */ \ Test(IFNE(electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ INTERCEPTION_PARTICULE_PAR_UN_Z0(electronA2 \ ,neutrinoD1 \ ,z0A1,VITESSE_DES_Z0S,DUREE_DE_VIE_MOYENNE_COURANTE(z0A1) \ ); \ /* Lorsque l'on a trouve un electron 'electronA2' suffisamment proche du neutrino */ \ /* 'neutrinoD1', on tente l'interception de 'electronA2' par 'z0A1' emis par le neutrino */ \ /* 'neutrinoD1'... */ \ Eblock \ ATes \ Bblock \ /* ATTENTION : a la decomposition en deux 'Test(...)' distincts due au fait que la procedure */ \ /* 'INTERCEPTION_PARTICULE_PAR_UN_Z0(...)' peut changer l'etat de 'electronA2' et lui */ \ /* donner la valeur 'PARTICULE_NON_DEFINIE'... */ \ Eblock \ ETes \ Test(IFEQ(electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(neutrinoA1,NE_PAS_PERTURBER_UNE_POSITION); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(z0A1,NE_PAS_PERTURBER_UNE_POSITION); \ /* Lorsque l'on n'a pas trouve un electron 'electronA2' suffisamment proche du neutrino */ \ /* 'neutrinoD1', on conserve pour le z0 'z0A1' la vitesse 'vitesse_courante'... */ \ Eblock \ ATes \ Bblock \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(electronA2); \ ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(z0A1); \ /* Lorsque l'on a trouve un electron 'electronA2' suffisamment proche du neutrino */ \ /* 'neutrinoD1', on allonge artificiellement la duree de vie moyenne de 'electronA2' et de */ \ /* 'z0A1' afin de reduire au maximum les chances que se produisent pour eux des */ \ /* evenements conditionnels du type : */ \ /* */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS, */ \ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S. */ \ /* */ \ Eblock \ ETes \ CHANGEMENT_EVENTUEL_DE_NEUTRINO_REEL(neutrinoD1,neutrinoA1); \ Test(IFEQ(electronA2,PARTICULE_NON_DEFINIE)) \ Bblock \ /* Cas ou aucune particule ne peut etre "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_EMISSION_N___NxZ N(%d) --> N(%d)xZ(%d)" \ ,ETIQUETTE(neutrinoD1) \ ,ETIQUETTE(neutrinoA1) \ ,ETIQUETTE(z0A1) \ ) \ ); \ Eblock \ ATes \ Bblock \ /* Cas ou une particule est "visee" : */ \ TRACE_D_UN_EVENEMENT(Prin4("ELECTROWEAK_EMISSION_N___NxZ N(%d) --> N(%d)xZ(%d) =O=> E(%d)" \ ,ETIQUETTE(neutrinoD1) \ ,ETIQUETTE(neutrinoA1) \ ,ETIQUETTE(z0A1) \ ,ETIQUETTE(electronA2) \ ) \ ); \ Eblock \ ETes \ DESTRUCTION_D_UN_NEUTRINO(neutrinoD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_NEUTRINO_VIRTUEL(neutrinoD1)' car en effet, */ \ /* 'neutrinoD1' peut etre un neutrino 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_EMISSION_N___NxZ,I); \ Eblock \ /* Vertex : N --> NxZ. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 N E U T R I N O S : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_NEUTRINO \ FRA1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_neutrino ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_NEUTRINO ) ) ); /* Probabilite pour qu'un neutrino present dans le proton soit la "victime" d'un evenement */ /* conditionnel du type : */ /* */ /* INCHANGE_N, */ /* ELECTROWEAK_EMISSION_N___NxZ. */ /* */ #define ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS \ Bblock \ DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF)); \ /* Probabilite pour que le neutrino courant soit la "victime" d'un evenement conditionnel */ \ /* du type : */ \ /* */ \ /* INCHANGE_N, */ \ /* ELECTROWEAK_EMISSION_N___NxZ. */ \ /* */ \ TOTALITE_DES_NEUTRINOS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel); \ Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel \ ,neutrinoD1 \ ,DUREE_DE_VIE_MOYENNE_COURANTE(neutrinoD1) \ ) \ ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_neutrino) \ ) \ ) \ Bblock \ DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF)); \ /* Probabilite de choix entre : */ \ /* */ \ /* INCHANGE_N, */ \ /* ELECTROWEAK_EMISSION_N___NxZ. */ \ /* */ \ GENERATION_D_UNE_VALEUR \ (probabilite_de_choix \ ,EVENEMENT_IMPOSSIBLE \ ,ADD2(REGUL0(probabilite_de_INCHANGE_N) \ ,REGUL1(probabilite_de_ELECTROWEAK_EMISSION_N___NxZ) \ ) \ ); \ /* 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_N) \ ,INCHANGE_N(neutrinoD1) \ ); \ CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES \ (REGUL1(probabilite_de_ELECTROWEAK_EMISSION_N___NxZ) \ ,BLOC(Test(IFLT(nombre_total_de_z0s_VIRTUELs \ ,nombre_maximal_de_z0s_VIRTUELs_du_di_electron \ ) \ ) \ Bblock \ ELECTROWEAK_EMISSION_N___NxZ(neutrinoD1 \ ,neutrinoA1 \ ,z0A1 \ ); \ /* ATTENTION, 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' est realisee */ \ /* de telle facon que si le test ci-dessus est 'FAUX' (c'est-a-dire s'il y a trop de z0s */ \ /* VIRTUELs...), alors bien sur l'evenement 'ELECTROWEAK_EMISSION_N___NxZ(...)' n'est */ \ /* pas realise ce qui est normal ; mais ce qui pourrait l'etre moins, c'est qu'un eventuel */ \ /* 'CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES(...)' qui le suivrait ne */ \ /* serait pas pris en compte (voir le positionnement de le positionnement de l'indicateur */ \ /* 'l_evenement_qui_va_avoir_lieu_a_ete_trouve'...). */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ) \ ); \ FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES; \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ); \ ); \ Eblock \ /* Evenements conditionnels pour quelques uns des neutrinos presents dans le proton */ \ /* (REELs ou VIRTUELs). */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS,N,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_NEUTRINOS)) EFonctionI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E V E N E M E N T N E U T R E P O U R U N P H O T O N : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_INCHANGE_P \ GRO8(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_P,PROBABILITE_DE_INCHANGE_P))); /* Probabilite du vertex : P --> P. */ #define INCHANGE_P(photonD1) \ Bblock \ Eblock \ /* Vertex : P --> P. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 */ /* */ /* 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 P H O T O N : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE \ GRO1(FRA8(FRA10(PROBABILITE_DE_INCHANGE_P))) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_P___ExAE ,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE ) ) ); /* Probabilite du vertex : P --> ExAE. */ #define ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE \ FZERO DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_P___ExAE ,ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_P___ExAE ) ) ); /* Dispersion de l'angle du vertex : P --> ExAE. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_P___ExAE,ZERO))); /* Compteur des vertex : P --> ExAE. */ #define ELECTROWEAK_TRANSFORMATION_P___ExAE(photonD1,electronA1,anti_electronA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_A_PRIORI_DE_L_AXE_OZ(photonD1); \ /* ATTENTION, il est imperatif de ne pas orienter aleatoirement l'axe 'OZ' afin que la */ \ /* gerbe electron/anti-electron soit belle... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(photonD1,espace_temps,vitesse) \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de 'photonD1'... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ /* Rotation aleatoire de l'espace physique afin de placer le vertex 'P --> ExAE' dans */ \ /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le photon */ \ /* se deplace le long de l'axe 'OX2'. */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON; \ /* Choix aleatoire du meme module de la vitesse pour 'E' et 'AE'... */ \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEUT(ADD2(GRO1(FRA3(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_P___ExAE) \ ) \ ) \ ); \ CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(photonD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEGA(ADD2(GRO1(FRA3(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_P___ExAE) \ ) \ ) \ ); \ CREATION_D_UN_ELECTRON_VIRTUEL(electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(photonD1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_P___ExAE P(%d) --> E(%d)xAE(%d)" \ ,ETIQUETTE(photonD1) \ ,ETIQUETTE(electronA1) \ ,ETIQUETTE(anti_electronA1) \ ) \ ); \ DESTRUCTION_D_UN_PHOTON(photonD1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_PHOTON_VIRTUEL(photonD1)' car en effet, */ \ /* 'photonD1' peut etre un photon 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_P___ExAE,I); \ Eblock \ /* Vertex : P --> ExAE. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 P H O T O N S : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_PHOTON \ FRA1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_photon ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_PHOTON ) ) ); /* Probabilite pour qu'un photon present dans le "di-electron" soit la "victime" d'un */ /* evenement conditionnel du type : */ /* */ /* INCHANGE_P, */ /* ELECTROWEAK_TRANSFORMATION_P___ExAE. */ /* */ #define ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS \ Bblock \ DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF)); \ /* Probabilite pour que le photon courant soit la "victime" d'un evenement conditionnel */ \ /* du type : */ \ /* */ \ /* INCHANGE_P, */ \ /* ELECTROWEAK_TRANSFORMATION_P___ExAE. */ \ /* */ \ TOTALITE_DES_PHOTONS(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel); \ Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel \ ,photonD1 \ ,DUREE_DE_VIE_MOYENNE_COURANTE(photonD1) \ ) \ ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_photon) \ ) \ ) \ Bblock \ DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF)); \ /* Probabilite de choix entre : */ \ /* */ \ /* INCHANGE_P, */ \ /* ELECTROWEAK_TRANSFORMATION_P___ExAE. */ \ /* */ \ GENERATION_D_UNE_VALEUR \ (probabilite_de_choix \ ,EVENEMENT_IMPOSSIBLE \ ,ADD2(REGUL0(probabilite_de_INCHANGE_P) \ ,REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_P___ExAE) \ ) \ ); \ /* 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_P) \ ,INCHANGE_P(photonD1) \ ); \ CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES \ (REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_P___ExAE) \ ,BLOC(ELECTROWEAK_TRANSFORMATION_P___ExAE(photonD1 \ ,electronA1 \ ,anti_electronA1 \ ); \ ) \ ); \ FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES; \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ); \ ); \ Eblock \ /* Evenements conditionnels pour quelques uns des photons presents dans le "di-electron" */ \ /* (REELs ou VIRTUELs). */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS,P,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_PHOTONS)) EFonctionI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E V E N E M E N T N E U T R E P O U R U N Z 0 : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_INCHANGE_Z \ GRO8(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_de_INCHANGE_Z,PROBABILITE_DE_INCHANGE_Z))); /* Probabilite du vertex : Z --> Z. */ #define INCHANGE_Z(z0D1) \ Bblock \ Eblock \ /* Vertex : Z --> Z. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 */ /* */ /* 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 Z 0 : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE \ GRO0(FRA8(FRA10(PROBABILITE_DE_INCHANGE_Z))) DEFV(Local,DEFV(Float,INIT(probabilite_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE ,PROBABILITE_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE ) ) ); /* Probabilite du vertex : Z --> ExAE. */ #define ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE \ FZERO DEFV(Local,DEFV(Float,INIT(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE ,ANGLE_POLARISATION_DE_ELECTROWEAK_TRANSFORMATION_Z___ExAE ) ) ); /* Dispersion de l'angle du vertex : Z --> ExAE. */ DEFV(Local,DEFV(Positive,INIT(compteur_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE,ZERO))); /* Compteur des vertex : Z --> ExAE. */ #define ELECTROWEAK_TRANSFORMATION_Z___ExAE(z0D1,electronA1,anti_electronA1) \ Bblock \ DEFINITION_DE_LA_VITESSE_ALEATOIRE; \ /* Structures necessaires a definir une vitesse en coordonnees spheriques et en coordonnees */ \ /* cartesiennes. */ \ ORIENTATION_A_PRIORI_DE_L_AXE_OZ(z0D1); \ /* ATTENTION, il est imperatif de ne pas orienter aleatoirement l'axe 'OZ' afin que la */ \ /* gerbe electron/anti-electron soit belle... */ \ DEBUT_DE_ROTATION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ(ASI2(z0D1,espace_temps,vitesse) \ ,orientation_de_l_axe_OZ \ ); \ /* Alignement de l'axe 'OX2' le long de 'z0D1'... */ \ DEBUT_DE_CHOIX_D_UNE_DIRECTION_D_ALIGNEMENT_DE_L_ESPACE_PHYSIQUE_EN_CONSERVANT_OZ; \ /* Rotation aleatoire de l'espace physique afin de placer le vertex 'Z --> ExAE' dans */ \ /* le plan (OX2,OY2) du referentiel aleatoire (OX2,OY2,OZ2) et de facon a ce que le z0 */ \ /* se deplace le long de l'axe 'OX2'. */ \ INITIALISATION_DU_MODULE_DE_LA_VITESSE_ALEATOIRE_D_UN_ELECTRON_OU_D_UN_ANTI_ELECTRON; \ /* Choix aleatoire du meme module de la vitesse pour 'E' et 'AE'... */ \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEUT(ADD2(GRO1(FRA3(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE) \ ) \ ) \ ); \ CREATION_D_UN_ANTI_ELECTRON_VIRTUEL(anti_electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(z0D1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(anti_electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ VITESSE_CARTESIENNE_POLAIRE(vitesse_courante \ ,rho_de_la_vitesse \ ,theta_polaire \ ,NEGA(ADD2(GRO1(FRA3(PI_SUR_2)) \ ,EXAGERATION(angle_polarisation_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE) \ ) \ ) \ ); \ CREATION_D_UN_ELECTRON_VIRTUEL(electronA1 \ ,LEPTON_PAS_DE_SAVEUR \ ,ASI2(z0D1,espace_temps,position_courante) \ ,vitesse_courante \ ); \ FLUCTUATION_ALEATOIRE_DES_POSITIONS_INITIALE_ET_COURANTE(electronA1,NE_PAS_PERTURBER_UNE_POSITION); \ TRACE_D_UN_EVENEMENT(Prin3("ELECTROWEAK_TRANSFORMATION_Z___ExAE Z(%d) --> E(%d)xAE(%d)" \ ,ETIQUETTE(z0D1) \ ,ETIQUETTE(electronA1) \ ,ETIQUETTE(anti_electronA1) \ ) \ ); \ DESTRUCTION_D_UN_Z0(z0D1); \ /* On n'utilise pas 'DESTRUCTION_D_UN_Z0_VIRTUEL(z0D1)' car en effet, */ \ /* 'z0D1' peut etre un z0 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_Z___ExAE,I); \ Eblock \ /* Vertex : Z --> ExAE. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 Z 0 S : */ /* */ /*************************************************************************************************************************************/ #define PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_Z0 \ FRA1(FRA2(FU)) DEFV(Local,DEFV(Float,INIT(probabilite_d_evenement_conditionnel_pour_un_z0 ,PROBABILITE_D_EVENEMENT_CONDITIONNEL_POUR_UN_Z0 ) ) ); /* Probabilite pour qu'un z0 present dans le "di-electron" soit la "victime" d'un */ /* evenement conditionnel du type : */ /* */ /* INCHANGE_Z, */ /* ELECTROWEAK_TRANSFORMATION_Z___ExAE. */ /* */ #define ___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S \ Bblock \ DEFV(Float,INIT(probabilite_d_evenement_conditionnel,FLOT__UNDEF)); \ /* Probabilite pour que le z0 courant soit la "victime" d'un evenement conditionnel */ \ /* du type : */ \ /* */ \ /* INCHANGE_Z, */ \ /* ELECTROWEAK_TRANSFORMATION_Z___ExAE. */ \ /* */ \ TOTALITE_DES_Z0S(BLOC(GENERATION_D_UNE_PROBABILITE_01(probabilite_d_evenement_conditionnel); \ Test(IFLE(aPROBABILITE(probabilite_d_evenement_conditionnel \ ,z0D1 \ ,DUREE_DE_VIE_MOYENNE_COURANTE(z0D1) \ ) \ ,REGUL0(probabilite_d_evenement_conditionnel_pour_un_z0) \ ) \ ) \ Bblock \ DEFV(Float,INIT(probabilite_de_choix,FLOT__UNDEF)); \ /* Probabilite de choix entre : */ \ /* */ \ /* INCHANGE_Z, */ \ /* ELECTROWEAK_TRANSFORMATION_Z___ExAE. */ \ /* */ \ GENERATION_D_UNE_VALEUR \ (probabilite_de_choix \ ,EVENEMENT_IMPOSSIBLE \ ,ADD2(REGUL0(probabilite_de_INCHANGE_Z) \ ,REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE) \ ) \ ); \ /* 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_Z) \ ,INCHANGE_Z(z0D1) \ ); \ CHOIX_D_UN_EVENEMENT_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES \ (REGUL1(probabilite_de_ELECTROWEAK_TRANSFORMATION_Z___ExAE) \ ,BLOC(ELECTROWEAK_TRANSFORMATION_Z___ExAE(z0D1 \ ,electronA1 \ ,anti_electronA1 \ ); \ ) \ ); \ FIN_DU_CHOIX_ENTRE_PLUSIEURS_EVENEMENTS_POSSIBLES; \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ ); \ ); \ Eblock \ /* Evenements conditionnels pour quelques uns des z0s presents dans le "di-electron" */ \ /* (REELs ou VIRTUELs). */ BFonctionI DEFV(LoF,GENERE__Fonction__OPT(EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S,Z,___EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_Z0S)) EFonctionI