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



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.