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