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