/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E L ' 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 G L U O N : */ /* */ /* */ /* Author of '$xrq/nucleon.LA$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 1991??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 G L U O N : */ /* */ /*************************************************************************************************************************************/ #define FACTEUR_D_ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE_DES_PARTICULES_COLLISIONNABLES \ GRO4(FU) DEFV(Local,DEFV(Float,INIT(facteur_d_allongement_de_la_duree_de_vie_moyenne_des_particules_collisionnables ,FACTEUR_D_ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE_DES_PARTICULES_COLLISIONNABLES ) ) ); /* Constante permettant d'allonger la duree de vie d'une particule dont on sait grace a */ /* 'INTERCEPTION_PARTICULE_PAR_UN_GLUON(...)' qu'elle peut collisionner. En allongeant sa */ /* duree de vie, on dimunue la probabilite des evenements conditionnels sur elle ; voir par */ /* exemple : */ /* */ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_QUARKS, */ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_ANTI_QUARKS, */ /* EVENEMENTS_CONDITIONNELS_POUR_CERTAINS_GLUONS. */ /* */ /* Ainsi, il y aura plus de chance que la collisions prevue ait lieu avant qu'un autre */ /* evenement (conditionnel) n'intervienne... */ #define PAS_ENCORE_VISE_PAR_UNE_AUTRE_PARTICULE(particule) \ IFEQ(DUREE_DE_VIE_MOYENNE_COURANTE(particule) \ ,DUREE_DE_VIE_MOYENNE_INITIALE(particule) \ ) \ /* Test permettant de savoir si une 'particule' est deja vise par une autre particule (un */ \ /* gluon en general...). */ #define ALLONGEMENT_DE_LA_DUREE_DE_VIE_MOYENNE(particule) \ Bblock \ EGAL(DUREE_DE_VIE_MOYENNE_COURANTE(particule) \ ,MUL2(facteur_d_allongement_de_la_duree_de_vie_moyenne_des_particules_collisionnables \ ,DUREE_DE_VIE_MOYENNE_INITIALE(particule) \ ) \ ); \ Eblock \ /* Allongement de la duree de vie moyenne d'une particule. On notera que rien empeche qu'une */ \ /* meme particule 'Q' ou 'AQ' soit "visee" par plusieurs 'G' ; si tel est le cas, il ne */ \ /* faut pas que 'duree_de_vie_moyenne_courante' augmente demesurement. C'est pourquoi, la */ \ /* valeur 'duree_de_vie_moyenne_courante' est recalculee systematiquement a partie de la */ \ /* valeur 'duree_de_vie_moyenne_initiale'... */ #define DUREE_DE_VOL_MAXIMALE_RELATIVE_A_LA_DUREE_DE_VIE_MOYENNE \ GRO10(FU) DEFV(Local,DEFV(Float,INIT(duree_de_vol_maximale_relative_a_la_duree_de_vie_moyenne ,DUREE_DE_VOL_MAXIMALE_RELATIVE_A_LA_DUREE_DE_VIE_MOYENNE ) ) ); /* Constante permettant de passer d'une duree de vie moyenne a une duree de vol maximale */ /* lors d'une phase d'interception. On notera que plus cette valeur est grande, et plus il */ /* aura d'echanges par "interception", mais aussi plus le risque sera grand que la particule */ /* cible (aussi bien que le gluon emis) ait alors le temps de changer d'etat par le biais */ /* d'un autre evenement dont elle pourra etre la victime... */ #define DUREE_DE_VOL_MAXIMALE(duree_de_vie_moyenne) \ MUL2(duree_de_vol_maximale_relative_a_la_duree_de_vie_moyenne,duree_de_vie_moyenne) \ /* La duree maximale d'un vol d'interception est une fonction de la duree de vie moyenne... */ #define INTERCEPTION_PARTICULE_PAR_UN_GLUON(particule_cible,particule_emettrice,gluon_emis,module_vitesse_gluon,duree_vie_gluon) \ /* On notera l'argument 'module_vitesse_gluon' qui a priori ne sert a rien puisque */ \ /* les gluons vont a la vitesse de la lumiere, mais qui a ete introduit au cas ou cette */ \ /* procedure serait etendue a d'autres particules. Il en est de meme pour l'argument */ \ /* donnant la duree de vie moyenne d'un gluon 'duree_vie_gluon'... */ \ Bblock \ Test(IFNE(particule_cible,PARTICULE_NON_DEFINIE)) \ Bblock \ /* Soit 'Pe' la particule emettrice du gluon 'G', et 'Pc' la particule cible visee. On a */ \ /* donc : */ \ /* */ \ /* ---> ----> ---> ---> */ \ /* Pc + V .dt = Pe + V .dt */ \ /* Pc G */ \ /* */ \ /* avec : */ \ /* */ \ /* 2 */ \ /* |--->| 2 */ \ /* | V | = c */ \ /* | G | */ \ /* */ \ /* (ou 'c' denote la vitesse de la lumiere) */ \ /* */ \ /* en effet, on a le schema : */ \ /* */ \ /* Pc */ \ /* *----->......................+ lieu d'interception 'dt' apres l'emission */ \ /* V . */ \ /* Pc . */ \ /* . */ \ /* . */ \ /* . */ \ /* . */ \ /* . */ \ /* . */ \ /* / gluon G */ \ /* \ */ \ /* / */ \ /* \ */ \ /* / */ \ /* \ */ \ /* / */ \ /* \ */ \ /* * */ \ /* Pe */ \ /* */ \ /* on en deduit : */ \ /* */ \ /* ---> ----> ---> ---> 1 */ \ /* V = V + ( Pc - Pe ).---- */ \ /* G Pc dt */ \ /* */ \ /* en elevant au carre cette equation vectorielle, on obtient une equation du second */ \ /* degre qui va nous donner 'dt' : */ \ /* */ \ /* 2 2 2 */ \ /* |---> --->| 1 ----> ---> ---> 1 |---->| |---->| */ \ /* | Pc - Pe | .----- + 2.[ V x( Pc - Pe )].---- + [| V | - | V | ] = 0 */ \ /* 2 Pc dt | Pc | | G | */ \ /* dt */ \ /* */ \ /* (ou 'x' denote le produit scalaire) */ \ /* */ \ /* son discriminant reduit vaut : */ \ /* */ \ /* 2 2 2 */ \ /* ----> ---> ---> 2 |---> --->| |---->| |---->| */ \ /* d = [ V x( Pc - Pe )] - | Pc - Pe | .[| V | - | V | ] */ \ /* Pc | Pc | | G | */ \ /* */ \ /* ou : */ \ /* */ \ /* 2 2 2 */ \ /* ----> ---> ---> 2 |---> --->| |---->| |---->| */ \ /* d = [ V x( Pc - Pe )] + | Pc - Pe | .[| V | - | V | ] */ \ /* Pc | G | | Pc | */ \ /* */ \ /* ce qui montre que l'equation a toujours deux racines, dont seule celle qui est */ \ /* positive nous interesse : */ \ /* __ */ \ /* ----> ---> ---> / */ \ /* -[ V x( Pc - Pe )] + \/ d */ \ /* 1 Pc */ \ /* ---- = -------------------------------- */ \ /* dt 2 */ \ /* |---> --->| */ \ /* | Pc - Pe | */ \ /* */ \ /* */ \ /* Enfin, on notera que si 'dt' parait trop grande devant la duree de vie moyenne du gluon, */ \ /* l'interception est abortee... */ \ DEFV(deltaF_3D,espace_entre_les_deux_particules); \ /* ---> ---> */ \ /* definition du vecteur Pc - Pe */ \ DEFV(Float,INIT(discriminant,FLOT__UNDEF)); \ /* Discriminant 'd' de l'equation du second degre. */ \ DEFV(Float,INIT(inverse_de_la_duree_du_vol,FLOT__UNDEF)); \ /* Inverse de la duree 'dt' necessaire au gluon pour atteindre 'Pc' depuis 'Pe'... */ \ INITIALISATION_ACCROISSEMENT_3D(espace_entre_les_deux_particules \ ,SOUS(COORDONNEES(particule_cible,x),COORDONNEES(particule_emettrice,x)) \ ,SOUS(COORDONNEES(particule_cible,y),COORDONNEES(particule_emettrice,y)) \ ,SOUS(COORDONNEES(particule_cible,z),COORDONNEES(particule_emettrice,z)) \ ); \ /* ---> ---> */ \ /* Calcul du vecteur Pc - Pe */ \ EGAL(discriminant \ ,ADD2(EXP2(prdF3D(ASI2(particule_cible,espace_temps,vitesse) \ ,espace_entre_les_deux_particules \ ) \ ) \ ,MUL2(pytF3D(espace_entre_les_deux_particules) \ ,SOUS(EXP2(module_vitesse_gluon) \ ,pytF3D(ASI2(particule_cible,espace_temps,vitesse)) \ ) \ ) \ ) \ ); \ /* Calcul du discriminant 'd' de l'equation du second degre. */ \ Test(IZGE(discriminant)) \ Bblock \ EGAL(inverse_de_la_duree_du_vol \ ,DIVZ(ADD2(NEGA(prdF3D(ASI2(particule_cible,espace_temps,vitesse) \ ,espace_entre_les_deux_particules \ ) \ ) \ ,RACX(discriminant) \ ) \ ,pytF3D(espace_entre_les_deux_particules) \ ) \ ); \ /* Calcul de l'inverse de la duree 'dt' necessaire au gluon pour atteindre 'Pc' depuis 'Pe'. */ \ Test(IZLE(inverse_de_la_duree_du_vol)) \ Bblock \ PRINT_ERREUR("lors de l'interception, la duree de vol est negative ou nulle"); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ PRINT_ERREUR("lors de l'interception, la duree de vol est imaginaire"); \ Eblock \ ETes \ Test(IFLT(INVE(inverse_de_la_duree_du_vol),DUREE_DE_VOL_MAXIMALE(duree_vie_gluon))) \ Bblock \ /* Lorsque la duree de vol parait acceptable devant la duree de vie moyenne du gluon, */ \ /* l'interception est acceptee et engagee... */ \ INITIALISATION_ACCROISSEMENT_3D(ASI2(gluon_emis,espace_temps,vitesse) \ ,ADD2(ASI3(particule_cible,espace_temps,vitesse,dx) \ ,MUL2(ASD1(espace_entre_les_deux_particules,dx) \ ,inverse_de_la_duree_du_vol \ ) \ ) \ ,ADD2(ASI3(particule_cible,espace_temps,vitesse,dy) \ ,MUL2(ASD1(espace_entre_les_deux_particules,dy) \ ,inverse_de_la_duree_du_vol \ ) \ ) \ ,ADD2(ASI3(particule_cible,espace_temps,vitesse,dz) \ ,MUL2(ASD1(espace_entre_les_deux_particules,dz) \ ,inverse_de_la_duree_du_vol \ ) \ ) \ ); \ /* Et enfin, determination des composantes de la vitesse necessaire au gluon pour */ \ /* intercepter 'Pc' depuis 'Pe' au bout du temps 'dt'... */ \ Test(IFEQ_a_peu_pres_absolu(longF3D(ASI2(gluon_emis,espace_temps,vitesse)) \ ,module_vitesse_gluon \ ,FRA10(FRA10(module_vitesse_gluon)) \ ) \ ) \ Bblock \ /* On notera que le test precedent laisse la place aux erreurs de calcul... */ \ Eblock \ ATes \ Bblock \ PRINT_ERREUR("les particules emettrice et cible sont probablement superposees"); \ CAL1(Prer1("duree de vol = %g\n",INVE(inverse_de_la_duree_du_vol))); \ CAL1(Prer1("vitesse prevue du gluon = %g\n",module_vitesse_gluon)); \ CAL1(Prer1("vitesse calculee du gluon = %g\n",longF3D(ASI2(gluon_emis,espace_temps,vitesse)))); \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ EGAL(particule_cible,PARTICULE_NON_DEFINIE); \ /* Lorsque la duree de vol prevue parait trop grande par rapport a la duree de vie moyenne */ \ /* des gluons, la sequence d'interception est abortee ; ceci est realisee en rendant */ \ /* indefinie la particule cible... */ \ Eblock \ ETes \ Eblock \ ATes \ Bblock \ PRINT_ERREUR("la particule cible n'est pas definie"); \ Eblock \ ETes \ Eblock \ /* Interception d'une particule 'Pc' par un gluon 'G' emis par une particule 'Pe'. Rappelons */ \ /* que l'interception peut etre abortee si sa duree parait trop importante vis a vis de la */ \ /* duree de vie moyenne du gluon 'G', et qu'alors la particule cible est rendue indefinie... */