/*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N S D E L A V I S U A L I S A T I O N D E S P A R T I C U L E S : */ /* */ /* */ /* Author of '$xrq/nucleon.LU$I' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1991??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P O U R A S S U R E R L A C O M P A T I B I L I T E : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.27.I" /* ATTENTION : cet include est destine uniquement a definir les deux indicateurs relatifs */ /* a la projection du rayon ; ils sont en fait inutilises dans les programmes de '$xrq' */ /* mais references par le fichier 'v $xrv/champs_5.1A$I projeter_correctement_le_rayon_'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E N O R M A L I S A T I O N D E S D I F F E R E N T I E L L E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.1D.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E S T I O N D E S C O U L E U R S ( A U S E N S " S U B J E C T I F " ) : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.15.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E S T I O N D E L A B R U M E E V E N T U E L L E : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.16.I" /* ATTENTION : cette reference n'est faite que pour 'valeur_d_initialisation_du_Z_Buffer'... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S Q U A R K S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_QUARKS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_quarks,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_QUARKS))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_quarks' doit absolument etre du meme */ /* type que 'nombre_negatif_de_spheres_de_materialisation'... */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_QUARKS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_quarks,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_QUARKS))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_quarks' doit absolument etre du meme */ /* type que 'nombre_positif_de_spheres_de_materialisation'... */ #define FRACTION_DE_LA_VITESSE_POUR_LES_QUARKS \ FRA1(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_quarks,FRACTION_DE_LA_VITESSE_POUR_LES_QUARKS))); #define RAPPORT_DES_AXES_POUR_LES_QUARKS \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_quarks,RAPPORT_DES_AXES_POUR_LES_QUARKS))); /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S A N T I - Q U A R K S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_ANTI_QUARKS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_anti_quarks,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_ANTI_QUARKS))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_anti_quarks' doit absolument etre du meme */ /* type que 'nombre_negatif_de_spheres_de_materialisation'... */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_ANTI_QUARKS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_anti_quarks,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_ANTI_QUARKS))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_anti_quarks' doit absolument etre du meme */ /* type que 'nombre_positif_de_spheres_de_materialisation'... */ #define FRACTION_DE_LA_VITESSE_POUR_LES_ANTI_QUARKS \ FRA1(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_anti_quarks,FRACTION_DE_LA_VITESSE_POUR_LES_ANTI_QUARKS))); #define RAPPORT_DES_AXES_POUR_LES_ANTI_QUARKS \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_anti_quarks,RAPPORT_DES_AXES_POUR_LES_ANTI_QUARKS))); /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S G L U O N S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_GLUONS \ TRENTE_DEUX DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_gluons,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_GLUONS))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_gluons' doit absolument etre du meme */ /* type que 'nombre_negatif_de_spheres_de_materialisation'... */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_GLUONS \ TRENTE_DEUX DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_gluons,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_GLUONS))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_gluons' doit absolument etre du meme */ /* type que 'nombre_positif_de_spheres_de_materialisation'... */ #define FRACTION_DE_LA_VITESSE_POUR_LES_GLUONS \ FRA2(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_gluons,FRACTION_DE_LA_VITESSE_POUR_LES_GLUONS))); #define RAPPORT_DES_AXES_POUR_LES_GLUONS \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_gluons,RAPPORT_DES_AXES_POUR_LES_GLUONS))); /* Rapport du grand axe au petit axe pour un gluon. On notera qu'autrefois, on utilisait */ /* 'GRO4(FRA1(FU))' ; en fait, il est impossible de visualiser proprement les gluons en */ /* tant qu'ellipsoide projette sous forme d'une ellipse : en effet, la coordonnee 'Z' qui */ /* est essentielle pour les intersections, les eliminations de lignes cachees, mais aussi */ /* pour la coherence des paires stereoscopiques est inconnue, et de plus, elle n'est pas */ /* approximable. Dorenavant, les gluons seront donc materialises par de petites chaines */ /* de particules... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S E L E C T R O N S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_ELECTRONS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_electrons,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_ELECTRONS))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_electrons' doit absolument etre du meme */ /* type que 'nombre_negatif_de_spheres_de_materialisation'... */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_ELECTRONS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_electrons,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_ELECTRONS))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_electrons' doit absolument etre du meme */ /* type que 'nombre_positif_de_spheres_de_materialisation'... */ #define FRACTION_DE_LA_VITESSE_POUR_LES_ELECTRONS \ FRA1(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_electrons,FRACTION_DE_LA_VITESSE_POUR_LES_ELECTRONS))); #define RAPPORT_DES_AXES_POUR_LES_ELECTRONS \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_electrons,RAPPORT_DES_AXES_POUR_LES_ELECTRONS))); /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S A N T I - E L E C T R O N S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_ANTI_ELECTRONS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_anti_electrons,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_ANTI_ELECTRONS))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_anti_electrons' doit absolument etre */ /* du meme type que 'nombre_negatif_de_spheres_de_materialisation'... */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_ANTI_ELECTRONS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_anti_electrons,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_ANTI_ELECTRONS))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_anti_electrons' doit absolument etre */ /* du meme type que 'nombre_positif_de_spheres_de_materialisation'... */ #define FRACTION_DE_LA_VITESSE_POUR_LES_ANTI_ELECTRONS \ FRA1(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_anti_electrons,FRACTION_DE_LA_VITESSE_POUR_LES_ANTI_ELECTRONS))); #define RAPPORT_DES_AXES_POUR_LES_ANTI_ELECTRONS \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_anti_electrons,RAPPORT_DES_AXES_POUR_LES_ANTI_ELECTRONS))); /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S N E U T R I N O S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_NEUTRINOS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_neutrinos,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_NEUTRINOS))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_neutrinos' doit absolument etre du meme */ /* type que 'nombre_negatif_de_spheres_de_materialisation'... */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_NEUTRINOS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_neutrinos,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_NEUTRINOS))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_neutrinos' doit absolument etre du meme */ /* type que 'nombre_positif_de_spheres_de_materialisation'... */ #define FRACTION_DE_LA_VITESSE_POUR_LES_NEUTRINOS \ FRA2(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_neutrinos,FRACTION_DE_LA_VITESSE_POUR_LES_NEUTRINOS))); #define RAPPORT_DES_AXES_POUR_LES_NEUTRINOS \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_neutrinos,RAPPORT_DES_AXES_POUR_LES_NEUTRINOS))); /* Rapport du grand axe au petit axe pour un neutrino. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S P H O T O N S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_PHOTONS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_photons,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_PHOTONS))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_photons' doit absolument etre du meme */ /* type que 'nombre_negatif_de_spheres_de_materialisation'... */ /* */ /* ATTENTION, afin d'eliminer le probleme de l'apparence visuelle d'une chaine de spheres */ /* qui s'agglutinent (la derniere tracee l'emporte visuellement sur les autres, la surface */ /* cylindique obtenue n'est donc pas uniforme...) on ramene les photons a une seule sphere. */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_PHOTONS \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_photons,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_PHOTONS))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_photons' doit absolument etre du meme */ /* type que 'nombre_positif_de_spheres_de_materialisation'... */ /* */ /* ATTENTION, afin d'eliminer le probleme de l'apparence visuelle d'une chaine de spheres */ /* qui s'agglutinent (la derniere tracee l'emporte visuellement sur les autres, la surface */ /* cylindique obtenue n'est donc pas uniforme...) on ramene les photons a une seule sphere. */ #define FRACTION_DE_LA_VITESSE_POUR_LES_PHOTONS \ FRA2(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_photons,FRACTION_DE_LA_VITESSE_POUR_LES_PHOTONS))); #define RAPPORT_DES_AXES_POUR_LES_PHOTONS \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_photons,RAPPORT_DES_AXES_POUR_LES_PHOTONS))); /* Rapport du grand axe au petit axe pour un photon. On notera qu'autrefois, on utilisait */ /* 'GRO4(FRA1(FU))' ; en fait, il est impossible de visualiser proprement les photons en */ /* tant qu'ellipsoide projette sous forme d'une ellipse : en effet, la coordonnee 'Z' qui */ /* est essentielle pour les intersections, les eliminations de lignes cachees, mais aussi */ /* pour la coherence des paires stereoscopiques est inconnue, et de plus, elle n'est pas */ /* approximable. Dorenavant, les photons seront donc materialises par de petites chaines */ /* de particules... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N */ /* D E S Z 0 S : */ /* */ /*************************************************************************************************************************************/ #define NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_Z0S \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_negatif_de_spheres_pour_les_z0s,NOMBRE_NEGATIF_DE_SPHERES_POUR_LES_Z0S))); /* ATTENTION : 'nombre_negatif_de_spheres_pour_les_z0s' doit absolument etre du meme */ /* type que 'nombre_negatif_de_spheres_de_materialisation'... */ #define NOMBRE_POSITIF_DE_SPHERES_POUR_LES_Z0S \ ZERO DEFV(Local,DEFV(Int,INIT(nombre_positif_de_spheres_pour_les_z0s,NOMBRE_POSITIF_DE_SPHERES_POUR_LES_Z0S))); /* ATTENTION : 'nombre_positif_de_spheres_pour_les_z0s' doit absolument etre du meme */ /* type que 'nombre_positif_de_spheres_de_materialisation'... */ #define FRACTION_DE_LA_VITESSE_POUR_LES_Z0S \ FRA2(FRA10(FU)) DEFV(Local,DEFV(Float,INIT(fraction_de_la_vitesse_pour_les_z0s,FRACTION_DE_LA_VITESSE_POUR_LES_Z0S))); #define RAPPORT_DES_AXES_POUR_LES_Z0S \ FZERO DEFV(Local,DEFV(Float,INIT(rapport_des_axes_pour_les_z0s,RAPPORT_DES_AXES_POUR_LES_Z0S))); /* Rapport du grand axe au petit axe pour un z0. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D E F I N I T I O N D E S S P H E R E S R E P R E S E N T A T I V E S : */ /* */ /*************************************************************************************************************************************/ #define RAYON_DE_VISUALISATION_D_UN_QUARK_REEL \ FRA2(FRA10(RAYON_D_UN_HADRON)) \ /* Rayon du disque materialisant un quark ou un anti-quark REEL, */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_quark_REEL,RAYON_DE_VISUALISATION_D_UN_QUARK_REEL))); /* Rayon du disque materialisant un quark ou un anti-quark REEL, */ #define RAYON_DE_VISUALISATION_D_UN_QUARK_VIRTUEL \ RAYON_DE_VISUALISATION_D_UN_QUARK_REEL \ /* Rayon du disque materialisant un quark ou un anti-quark VIRTUEL. */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_quark_VIRTUEL,RAYON_DE_VISUALISATION_D_UN_QUARK_VIRTUEL))); /* Rayon du disque materialisant un quark ou un anti-quark VIRTUEL. */ #define RAYON_DE_VISUALISATION_D_UN_GLUON \ GRO1(FRA4(RAYON_DE_VISUALISATION_D_UN_QUARK_VIRTUEL)) \ /* Rayon du disque materialisant un gluon ; en fait, et plus recemment, il s'agit du petit */ \ /* axe de l'ellipse le materialisant... */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_gluon,RAYON_DE_VISUALISATION_D_UN_GLUON))); /* Rayon du disque materialisant un gluon. */ #define RAYON_DE_VISUALISATION_D_UN_ELECTRON_REEL \ GRO4(FRA3(FRA10(RAYON_D_UN_HADRON))) \ /* Rayon du disque materialisant un electron ou un anti-electron REEL, */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_electron_REEL,RAYON_DE_VISUALISATION_D_UN_ELECTRON_REEL))); /* Rayon du disque materialisant un electron ou un anti-electron REEL, */ #define RAYON_DE_VISUALISATION_D_UN_ELECTRON_VIRTUEL \ RAYON_DE_VISUALISATION_D_UN_ELECTRON_REEL \ /* Rayon du disque materialisant un electron ou un anti-electron VIRTUEL. */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_electron_VIRTUEL,RAYON_DE_VISUALISATION_D_UN_ELECTRON_VIRTUEL))); /* Rayon du disque materialisant un electron ou un anti-electron VIRTUEL. */ #define RAYON_DE_VISUALISATION_D_UN_NEUTRINO \ GRO9(FRA16(RAYON_DE_VISUALISATION_D_UN_ELECTRON_VIRTUEL)) \ /* Rayon du disque materialisant un neutrino ; en fait, et plus recemment, il s'agit */ \ /* du petit axe de l'ellipse le materialisant... */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_neutrino,RAYON_DE_VISUALISATION_D_UN_NEUTRINO))); /* Rayon du disque materialisant un neutrino. */ #define RAYON_DE_VISUALISATION_D_UN_PHOTON \ GRO9(FRA16(RAYON_DE_VISUALISATION_D_UN_ELECTRON_VIRTUEL)) \ /* Rayon du disque materialisant un photon ; en fait, et plus recemment, il s'agit du petit */ \ /* axe de l'ellipse le materialisant... */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_photon,RAYON_DE_VISUALISATION_D_UN_PHOTON))); /* Rayon du disque materialisant un photon. */ #define AMPLITUDE_DE_PULSATION_D_UN_PHOTON \ FDU DEFV(Local,DEFV(Float,INIT(amplitude_de_pulsation_d_un_photon,AMPLITUDE_DE_PULSATION_D_UN_PHOTON))); /* Facteur dans [0,1] permettant de faire pulser periodiquement un photon... */ #define PERIODE_DE_PULSATION_D_UN_PHOTON \ GRO2(GRO10(PERIODE_INITIALE_DE_L_HORLOGE)) DEFV(Local,DEFV(Float,INIT(periode_de_pulsation_d_un_photon,PERIODE_DE_PULSATION_D_UN_PHOTON))); /* Periode permettant de faire pulser periodiquement un photon... */ #define PHASE_DE_PULSATION_D_UN_PHOTON \ FZERO DEFV(Local,DEFV(Float,INIT(phase_de_pulsation_d_un_photon,PHASE_DE_PULSATION_D_UN_PHOTON))); /* Phase permettant de faire pulser periodiquement un photon... */ #define PULSATION_D_UN_PHOTON(photon,composante) \ MUL2(AXPB(NEGA(amplitude_de_pulsation_d_un_photon) \ ,MOIT(ADD2(FU \ ,COSX(AXPB(DIVI(CERCLE_TRIGONOMETRIQUE,periode_de_pulsation_d_un_photon) \ ,AGE(photon) \ ,phase_de_pulsation_d_un_photon \ ) \ ) \ ) \ ) \ ,FU \ ) \ ,composante \ ) \ /* Fonction de pulsation des composantes chromatiques d'un photon ; la loi utilisee est du */ \ /* type : */ \ /* */ \ /* 1 + cos(OMEGA.t+PHASE) */ \ /* composante.[1 - A.(------------------------) */ \ /* 2 */ \ /* */ \ /* ou 'OMEGA' vaut deux pi sur la periode, et 't' represente l'age du photon... */ #define RAYON_DE_VISUALISATION_D_UN_Z0 \ GRO9(FRA16(RAYON_DE_VISUALISATION_D_UN_ELECTRON_VIRTUEL)) \ /* Rayon du disque materialisant un z0 ; en fait, et plus recemment, il s'agit */ \ /* du petit axe de l'ellipse le materialisant... */ DEFV(Local,DEFV(Float,INIT(rayon_de_visualisation_d_un_z0,RAYON_DE_VISUALISATION_D_UN_Z0))); /* Rayon du disque materialisant un z0. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N D I C A T E U R D E C O N T R O L E D E V I S U A L I S A T I O N S E L E C T I V E : */ /* */ /*************************************************************************************************************************************/ #ifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE # define VISUALISER_LES_QUARKS_REELS \ VRAI #Aifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE # define VISUALISER_LES_QUARKS_REELS \ FAUX #Eifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE DEFV(Local,DEFV(Logical,INIT(visualiser_les_quarks_REELs,VISUALISER_LES_QUARKS_REELS))); #define VISUALISER_LES_QUARKS_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_quarks_VIRTUELs,VISUALISER_LES_QUARKS_VIRTUELS))); #ifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE # define VISUALISER_LES_ANTI_QUARKS_REELS \ VRAI #Aifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE # define VISUALISER_LES_ANTI_QUARKS_REELS \ FAUX #Eifdef __VERSION__LES_PARTICULES_REELLES_SONT_SOUMISES_A_L_INTERACTION_FORTE DEFV(Local,DEFV(Logical,INIT(visualiser_les_anti_quarks_REELs,VISUALISER_LES_ANTI_QUARKS_REELS))); #define VISUALISER_LES_ANTI_QUARKS_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_anti_quarks_VIRTUELs,VISUALISER_LES_ANTI_QUARKS_VIRTUELS))); #define VISUALISER_LES_GLUONS_REELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_gluons_REELs,VISUALISER_LES_GLUONS_REELS))); #define VISUALISER_LES_GLUONS_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_gluons_VIRTUELs,VISUALISER_LES_GLUONS_VIRTUELS))); #define VISUALISER_LES_ELECTRONS_REELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_electrons_REELs,VISUALISER_LES_ELECTRONS_REELS))); #define VISUALISER_LES_ELECTRONS_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_electrons_VIRTUELs,VISUALISER_LES_ELECTRONS_VIRTUELS))); #define VISUALISER_LES_ANTI_ELECTRONS_REELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_anti_electrons_REELs,VISUALISER_LES_ANTI_ELECTRONS_REELS))); #define VISUALISER_LES_ANTI_ELECTRONS_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_anti_electrons_VIRTUELs,VISUALISER_LES_ANTI_ELECTRONS_VIRTUELS))); #define VISUALISER_LES_NEUTRINOS_REELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_neutrinos_REELs,VISUALISER_LES_NEUTRINOS_REELS))); #define VISUALISER_LES_NEUTRINOS_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_neutrinos_VIRTUELs,VISUALISER_LES_NEUTRINOS_VIRTUELS))); #define VISUALISER_LES_PHOTONS_REELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_photons_REELs,VISUALISER_LES_PHOTONS_REELS))); #define VISUALISER_LES_PHOTONS_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_photons_VIRTUELs,VISUALISER_LES_PHOTONS_VIRTUELS))); #define VISUALISER_LES_Z0S_REELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_z0s_REELs,VISUALISER_LES_Z0S_REELS))); #define VISUALISER_LES_Z0S_VIRTUELS \ VRAI DEFV(Local,DEFV(Logical,INIT(visualiser_les_z0s_VIRTUELs,VISUALISER_LES_Z0S_VIRTUELS))); /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O C E D U R E S S P E C I F I Q U E S D E V I S U A L I S A T I O N : */ /* */ /*************************************************************************************************************************************/ #define VISUALISATION_D_UN_QUARK(quark) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(quark),QUARK_REEL) \ ,IL_FAUT(visualiser_les_quarks_REELs) \ ) \ ,IFET(IFEQ(NATURE(quark),QUARK_VIRTUEL) \ ,IL_FAUT(visualiser_les_quarks_VIRTUELs) \ ) \ ) \ ) \ Bblock \ CALS(visualisation_d_une_particule(quark \ ,rapport_des_axes_pour_les_quarks \ ,nombre_negatif_de_spheres_pour_les_quarks \ ,nombre_positif_de_spheres_pour_les_quarks \ ,fraction_de_la_vitesse_pour_les_quarks \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un quark... */ #define VISUALISATION_D_UN_ANTI_QUARK(anti_quark) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(anti_quark),ANTI_QUARK_REEL) \ ,IL_FAUT(visualiser_les_anti_quarks_REELs) \ ) \ ,IFET(IFEQ(NATURE(anti_quark),ANTI_QUARK_VIRTUEL) \ ,IL_FAUT(visualiser_les_anti_quarks_VIRTUELs) \ ) \ ) \ ) \ Bblock \ CALS(visualisation_d_une_particule(anti_quark \ ,rapport_des_axes_pour_les_anti_quarks \ ,nombre_negatif_de_spheres_pour_les_anti_quarks \ ,nombre_positif_de_spheres_pour_les_anti_quarks \ ,fraction_de_la_vitesse_pour_les_anti_quarks \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un anti-quark... */ #define VISUALISATION_D_UN_GLUON(gluon) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(gluon),GLUON_REEL) \ ,IL_FAUT(visualiser_les_gluons_REELs) \ ) \ ,IFET(IFEQ(NATURE(gluon),GLUON_VIRTUEL) \ ,IL_FAUT(visualiser_les_gluons_VIRTUELs) \ ) \ ) \ ) \ Bblock \ CALS(visualisation_d_une_particule(gluon \ ,rapport_des_axes_pour_les_gluons \ ,nombre_negatif_de_spheres_pour_les_gluons \ ,nombre_positif_de_spheres_pour_les_gluons \ ,fraction_de_la_vitesse_pour_les_gluons \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un gluon... */ #define VISUALISATION_D_UN_ELECTRON(electron) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(electron),ELECTRON_REEL) \ ,IL_FAUT(visualiser_les_electrons_REELs) \ ) \ ,IFET(IFEQ(NATURE(electron),ELECTRON_VIRTUEL) \ ,IL_FAUT(visualiser_les_electrons_VIRTUELs) \ ) \ ) \ ) \ Bblock \ CALS(visualisation_d_une_particule(electron \ ,rapport_des_axes_pour_les_electrons \ ,nombre_negatif_de_spheres_pour_les_electrons \ ,nombre_positif_de_spheres_pour_les_electrons \ ,fraction_de_la_vitesse_pour_les_electrons \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un electron... */ #define VISUALISATION_D_UN_ANTI_ELECTRON(anti_electron) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(anti_electron),ANTI_ELECTRON_REEL) \ ,IL_FAUT(visualiser_les_anti_electrons_REELs) \ ) \ ,IFET(IFEQ(NATURE(anti_electron),ANTI_ELECTRON_VIRTUEL) \ ,IL_FAUT(visualiser_les_anti_electrons_VIRTUELs) \ ) \ ) \ ) \ Bblock \ CALS(visualisation_d_une_particule(anti_electron \ ,rapport_des_axes_pour_les_anti_electrons \ ,nombre_negatif_de_spheres_pour_les_anti_electrons \ ,nombre_positif_de_spheres_pour_les_anti_electrons \ ,fraction_de_la_vitesse_pour_les_anti_electrons \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un anti-electron... */ #define VISUALISATION_D_UN_NEUTRINO(neutrino) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(neutrino),NEUTRINO_REEL) \ ,IL_FAUT(visualiser_les_neutrinos_REELs) \ ) \ ,IFET(IFEQ(NATURE(neutrino),NEUTRINO_VIRTUEL) \ ,IL_FAUT(visualiser_les_neutrinos_VIRTUELs) \ ) \ ) \ ) \ Bblock \ CALS(visualisation_d_une_particule(neutrino \ ,rapport_des_axes_pour_les_neutrinos \ ,nombre_negatif_de_spheres_pour_les_neutrinos \ ,nombre_positif_de_spheres_pour_les_neutrinos \ ,fraction_de_la_vitesse_pour_les_neutrinos \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un neutrino... */ #define VISUALISATION_D_UN_PHOTON(photon) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(photon),PHOTON_REEL) \ ,IL_FAUT(visualiser_les_photons_REELs) \ ) \ ,IFET(IFEQ(NATURE(photon),PHOTON_VIRTUEL) \ ,IL_FAUT(visualiser_les_photons_VIRTUELs) \ ) \ ) \ ) \ Bblock \ DEFV(charge_de_couleur,couleur_du_photon); \ EGAL(ASD1(couleur_du_photon,ROUGE),cCOULEUR(photon,ROUGE)); \ EGAL(ASD1(couleur_du_photon,VERTE),cCOULEUR(photon,VERTE)); \ EGAL(ASD1(couleur_du_photon,BLEUE),cCOULEUR(photon,BLEUE)); \ /* Sauvegarde de la couleur "originale" du photon... */ \ COULEUR_D_UNE_PARTICULE(photon \ ,PULSATION_D_UN_PHOTON(photon,cCOULEUR(photon,ROUGE)) \ ,PULSATION_D_UN_PHOTON(photon,cCOULEUR(photon,VERTE)) \ ,PULSATION_D_UN_PHOTON(photon,cCOULEUR(photon,BLEUE)) \ ); \ /* Pulsation eventuelle de la couleur du photon... */ \ CALS(visualisation_d_une_particule(photon \ ,rapport_des_axes_pour_les_photons \ ,nombre_negatif_de_spheres_pour_les_photons \ ,nombre_positif_de_spheres_pour_les_photons \ ,fraction_de_la_vitesse_pour_les_photons \ ) \ ); \ COULEUR_D_UNE_PARTICULE(photon \ ,ASD1(couleur_du_photon,ROUGE) \ ,ASD1(couleur_du_photon,VERTE) \ ,ASD1(couleur_du_photon,BLEUE) \ ); \ /* Restauration de la couleur "originale" du photon... */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un photon... */ #define VISUALISATION_D_UN_Z0(z0) \ Bblock \ Test(IFOU(IFET(IFEQ(NATURE(z0),Z0_REEL) \ ,IL_FAUT(visualiser_les_z0s_REELs) \ ) \ ,IFET(IFEQ(NATURE(z0),Z0_VIRTUEL) \ ,IL_FAUT(visualiser_les_z0s_VIRTUELs) \ ) \ ) \ ) \ Bblock \ CALS(visualisation_d_une_particule(z0 \ ,rapport_des_axes_pour_les_z0s \ ,nombre_negatif_de_spheres_pour_les_z0s \ ,nombre_positif_de_spheres_pour_les_z0s \ ,fraction_de_la_vitesse_pour_les_z0s \ ) \ ); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Visualisation d'un z0... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E S T I O N D E L A L I S T E D E S P O I N T S D E S T I N E E A F A I R E U N T R I */ /* S U R L A C O O R D O N N E E ' Z ' D ' A R R I E R E E N A V A N T P O U R L U T T E R */ /* E F F I C A C E M E N T C O N T R E L ' A L I A S I N G : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.11.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N D E V I S U A L I S A T I O N D U P O I N T C O U R A N T : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.1C.I" /* Cette appel rend donc dorenavant l'appel a '$xrq/nucleon.LS$I' inutile, puisque la */ /* definition de 'store_ellipsoide(...)' est remplacee par 'store_sphere(...)'. */ #include xrv/champs_5.12.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F O N C T I O N C E N T R A L E D E V I S U A L I S A T I O N Q U I E N F A I T */ /* M E M O R I S E L ' E N S E M B L E D E S S P H E R E S C O N S T I T U T I V E S : */ /* */ /*************************************************************************************************************************************/ #include xrk/attractor.24.I" /* Par compatibilite avec 'MEMORISATION_D_UN_POINT(...)'... */ #define COORDONNEES_DE_MATERIALISATION(particule,Ccomposante,Vcomposante) \ ADD2(COORDONNEES(particule,Ccomposante) \ ,MUL2(tiSCALE(MUL2(MUL2(ASI3(particule,espace_temps,vitesse,Vcomposante) \ ,fraction_de_la_vitesse \ ) \ ,PERIODE_COURANTE_DE_L_HORLOGE \ ) \ ) \ ,FLOT(numero_de_la_sphere_de_materialisation) \ ) \ ) \ /* Passage d'une sphere de materialisation a la suivante le long du vecteur vitesse de la */ \ /* particule lorsqu'une chaine de sphere materialise une particule. Le pas spatial est egal */ \ /* a la distance parcourue pendant 'PERIODE_COURANTE_DE_L_HORLOGE' par la particule courante */ \ /* en supposant qu'elle se deplace a une vitesse egale a 'fraction_de_la_vitesse' de sa */ \ /* vitesse courante. On notera que la formule ci-dessus suppose que la sphere qui occupe */ \ /* la meme position que la particule (toutes deux ont le meme centre) a le numero 0... */ #define NATU(particule_courante,nature_courante,nom_de_la_nature_courante) \ Bblock \ Test(IFEQ(NATURE(particule_courante),nature_courante)) \ Bblock \ BASE_DE_DONNEES(Prin1("%s",nom_de_la_nature_courante)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Procedure introduite uniquement pour reduire la longueur des lignes de generation de la */ \ /* base de donnees... */ #define SAVE(particule_courante,saveur_courante,nom_de_la_saveur_courante) \ Bblock \ Test(IFEQ(SAVEUR(particule_courante),saveur_courante)) \ Bblock \ BASE_DE_DONNEES(Prin1("%s",nom_de_la_saveur_courante)); \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ /* Procedure introduite uniquement pour reduire la longueur des lignes de generation de la */ \ /* base de donnees... */ BFonctionI DEFV(Local,DEFV(FonctionI,visualisation_d_une_particule(ARGUMENT_POINTERs(particule_courante) ,rapport_des_axes_de_la_particule ,nombre_negatif_de_spheres_de_materialisation ,nombre_positif_de_spheres_de_materialisation ,fraction_de_la_vitesse ) ) ) DEFV(Argument,DEFV(particule,POINTERs(particule_courante))); /* Definition de la particule a visualiser. */ DEFV(Argument,DEFV(Float,rapport_des_axes_de_la_particule)); /* Definition du rapport entre le grand axe et le petit axe de l'ellipsoide representatif, */ /* et ce a une unite pres (voir le calcul de 'grand_axe_de_la_particule_visualisee'). */ DEFV(Argument,DEFV(Int,nombre_negatif_de_spheres_de_materialisation)); DEFV(Argument,DEFV(Int,nombre_positif_de_spheres_de_materialisation)); /* Si 'Sn' et 'Sp' designent respectivement 'nombre_negatif_de_spheres_de_materialisation', */ /* 'nombre_positif_de_spheres_de_materialisation', le nombre de spheres qui seront utilisees */ /* pour visualiser la particule courante sera alors 'Sn+Sp+1'. */ /* */ /* ATTENTION : il serait logique que 'nombre_positif_de_spheres_de_materialisation' et */ /* 'nombre_negatif_de_spheres_de_materialisation' soient du type 'Positive', mais ce dernier */ /* etant utilise dans un 'DoIn(...)' avec la fonction 'NEGA(...)', il est imperatif qu'ils */ /* soient signes et donc du type 'Int' (ce que l'on fait pour l'un, on le fait aussi pour */ /* l'autre par symetrie...). */ DEFV(Argument,DEFV(Float,fraction_de_la_vitesse)); /* Le passage d'une sphere de materialisation a la suivante se fera a l'aide d'une fraction */ /* du vecteur vitesse qui est donnee par ce parametre. Voir pour plus de precisions le */ /* commentaire qui suit le 'DoIn(...)' correspondant... */ /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Int,INIT(numero_de_la_sphere_de_materialisation,UNDEF)); /* Numero de la sphere courante de materialisation dans [-Sn,+Sp] (voir la definition de */ /* de 'Sn' et 'Sp' avec les arguments 'nombre_negatif_de_spheres_de_materialisation' et */ /* 'nombre_positif_de_spheres_de_materialisation'). Le numero '0' correspond a la position */ /* "reelle" de la particule. */ DEFV(Float,INIT(Xf,FLOT__UNDEF)); DEFV(Float,INIT(Yf,FLOT__UNDEF)); DEFV(Float,INIT(Zf,FLOT__UNDEF)); /* Pour definir les coordonnees {x,y,z} de la particule dans [0,1] ; cette facon de */ /* proceder est liee au fait que d'introduire directement les expressions du type : */ /* 'X_PHYSIQUE_DANS_01(...)' dans 'store_point_3D(...)' conduit a generer des expressions */ /* trop longues a compiler... */ DEFV(Float,INIT(module_de_la_vitesse_de_la_particule,FLOT__UNDEF)); /* Module de la vitesse de la particule. */ DEFV(deltaF_3D,vitesse_normalisee_de_la_particule); /* Definition de la vitesse normalisee de la particule. */ DEFV(Float,INIT(Xf_de_la_vitesse,FLOT__UNDEF)); DEFV(Float,INIT(Yf_de_la_vitesse,FLOT__UNDEF)); DEFV(Float,INIT(Zf_de_la_vitesse,FLOT__UNDEF)); /* Definition de l'extremite du vecteur vitesse de la particule dans [0.1]. */ DEFV(deltaF_2D,vitesse_projetee_de_la_particule); /* Definition des composantes dans [0,1] de la vitesse projetee de la particule. */ DEFV(Float,INIT(module_de_la_vitesse_projetee_de_la_particule,FLOT__UNDEF)); /* Module normalise de la vitesse projetee de la particule. */ DEFV(Float,INIT(Yf_au_pole_nord_de_la_sphere,FLOT__UNDEF)); /* Definition de la coordonnee 'y' au pole de la particule dans [0,1]. */ DEFV(Float,INIT(rayon_de_la_particule ,fCOND(IFOU(IFEQ(NATURE(particule_courante),QUARK_REEL) ,IFEQ(NATURE(particule_courante),ANTI_QUARK_REEL) ) ,rayon_de_visualisation_d_un_quark_REEL ,fCOND(IFOU(IFEQ(NATURE(particule_courante),QUARK_VIRTUEL) ,IFEQ(NATURE(particule_courante),ANTI_QUARK_VIRTUEL) ) ,rayon_de_visualisation_d_un_quark_VIRTUEL ,fCOND(IFOU(IFEQ(NATURE(particule_courante),GLUON_REEL) ,IFEQ(NATURE(particule_courante),GLUON_VIRTUEL) ) ,rayon_de_visualisation_d_un_gluon ,fCOND(IFOU(IFEQ(NATURE(particule_courante),ELECTRON_REEL) ,IFEQ(NATURE(particule_courante),ANTI_ELECTRON_REEL) ) ,rayon_de_visualisation_d_un_electron_REEL ,fCOND(IFOU(IFEQ(NATURE(particule_courante),ELECTRON_VIRTUEL) ,IFEQ(NATURE(particule_courante),ANTI_ELECTRON_VIRTUEL) ) ,rayon_de_visualisation_d_un_electron_VIRTUEL ,fCOND(IFOU(IFEQ(NATURE(particule_courante),NEUTRINO_REEL) ,IFEQ(NATURE(particule_courante),NEUTRINO_VIRTUEL) ) ,rayon_de_visualisation_d_un_neutrino ,fCOND(IFOU(IFEQ(NATURE(particule_courante),PHOTON_REEL) ,IFEQ(NATURE(particule_courante),PHOTON_VIRTUEL) ) ,rayon_de_visualisation_d_un_photon ,fCOND(IFOU(IFEQ(NATURE(particule_courante),Z0_REEL) ,IFEQ(NATURE(particule_courante),Z0_VIRTUEL) ) ,rayon_de_visualisation_d_un_z0 ,FLOT__UNDEF ) ) ) ) ) ) ) ) ) ); /* Rayon de la particule dans l'espace physique (introduit pour simplifier le travail du */ /* compilateur...). */ DEFV(Float,INIT(petit_axe_de_la_particule_visualisee,FLOT__UNDEF)); DEFV(Float,INIT(grand_axe_de_la_particule_visualisee,FLOT__UNDEF)); /* Petit axe et grand axe de l'ellipsoide visualisant une particule. ATTENTION : ils ne sont */ /* conserves que pour des raisons historiques, puisqu'aujourd'hui on ne trace plus que des */ /* spheres... */ DEFV(Float,INIT(rayon_de_visualisation_projete,FLOT__UNDEF)); /* Rayon de la particule dans [0,1] apres projection. */ DEFV(Float,INIT(charge_ROUGE,cCOULEUR(particule_courante,ROUGE))); DEFV(Float,INIT(charge_VERTE,cCOULEUR(particule_courante,VERTE))); DEFV(Float,INIT(charge_BLEUE,cCOULEUR(particule_courante,BLEUE))); /* Charge de couleur de la particule courante. */ /* ATTENTION, il y avait autrefois (avant l'introduction de '$xrv/champs_5.11$I' et de */ /* '$xrv/champs_5.12$I') : */ /* */ /* DEFV(Float,INIT(charge_ROUGE_attenuee,COULEUR_indefinie)); */ /* DEFV(Float,INIT(charge_VERTE_attenuee,COULEUR_indefinie)); */ /* DEFV(Float,INIT(charge_BLEUE_attenuee,COULEUR_indefinie)); */ /* /* charge de couleur de la particule courante apres */ /* /* attenuation par la fonction de "depth-cueing". */ /* DEFV(Float,INIT(charge_ROUGE_normalisee,COULEUR_indefinie)); */ /* DEFV(Float,INIT(charge_VERTE_normalisee,COULEUR_indefinie)); */ /* DEFV(Float,INIT(charge_BLEUE_normalisee,COULEUR_indefinie)); */ /* /* charge de couleur de la particule courante : elle */ /* /* est dupliquee afin d'accelerer la compilation. */ /* */ INIT_ERROR; /*..............................................................................................................................*/ Test(I3ET(IFEQ(COORDONNEES(particule_courante,x),ASD1(position_indefinie,x)) ,IFEQ(COORDONNEES(particule_courante,y),ASD1(position_indefinie,y)) ,IFEQ(COORDONNEES(particule_courante,z),ASD1(position_indefinie,z)) ) ) Bblock PROCESSUS_INCOMPLET("nous sommes en presence d'une particule non definie"); Eblock ATes Bblock DoIn(numero_de_la_sphere_de_materialisation ,NEGA(nombre_negatif_de_spheres_de_materialisation) ,NEUT(nombre_positif_de_spheres_de_materialisation) ,I ) /* L'unite de base de la visualisation des particules est la sphere ; on offre ici la */ /* possibilite d'enrichir cette representation, en les materialisant (en fait cela n'est */ /* utilise que pour les gluons) par une chaine de 'Sn+Sp+1' spheres centree sur la position */ /* courante de la particule (donnee par 'COORDONNEES(...)') et disposees sur la direction */ /* du vecteur vitesse. Le nombre de spheres a utiliser est donne par les arguments */ /* 'Sn' et 'Sp' definis ci-dessus, alors que l'espacement des spheres le long du vecteur */ /* vitesse est exprime en une fraction 'fraction_de_la_vitesse' de ce meme vecteur vitesse */ /* convertit en une distance parcourue pendant la duree 'PERIODE_COURANTE_DE_L_HORLOGE'. */ /* */ /* Position courante de la particule ___ */ /* | --> */ /* \|/ vitesse V */ /* . */ /* *===================> */ /* : */ /* Visualisation de la particule : : */ /* : */ /* * * * * * * * */ /* 2 1 0 /1 2\ 3 4 */ /* (-) / \ (+) */ /* / \ */ /* / \ */ /* <----------> */ /* fraction.vitesse.periode */ /* */ /* (l'exemple ci-dessus suppose Sn=2 et Sp=4, et chaque '*' represente une sphere). */ /* */ /* On notera que cette methode, par rapport a celle des ellipsoides projetes, a de nombreux */ /* avantages ; en particulier, elle permettra, si cela s'avere utile (voir par exemple le */ /* probleme de la visualisation de la charge d'anti-couleur que les gluons portent en plus */ /* de leur charge de couleur) de faire varier au long de cette chaine de spheres la couleur */ /* de visualisation des particules (par exemple par une interpolation de la couleur a */ /* l'anti-couleur). */ Bblock /* ATTENTION, la sequence de code qui suit se retrouve, a quelque chose pres, dans les */ /* deux fichiers suivants : */ /* */ /* $xrq/nucleon.LU$I */ /* $xrv/champs_5.26$I */ /* */ /* Donc, toute modification faite dans l'un, peut avoir a etre reportee dans l'autre... */ EGAL(Xf ,TRANSFORMATION_GEOMETRIQUE_3D_Fx(COORDONNEES_DE_MATERIALISATION(particule_courante,x,dx) ,COORDONNEES_DE_MATERIALISATION(particule_courante,y,dy) ,COORDONNEES_DE_MATERIALISATION(particule_courante,z,dz) ,ASD1(translation_de_l_origine,dx) ) ); EGAL(Yf ,TRANSFORMATION_GEOMETRIQUE_3D_Fy(COORDONNEES_DE_MATERIALISATION(particule_courante,x,dx) ,COORDONNEES_DE_MATERIALISATION(particule_courante,y,dy) ,COORDONNEES_DE_MATERIALISATION(particule_courante,z,dz) ,ASD1(translation_de_l_origine,dy) ) ); EGAL(Zf ,TRANSFORMATION_GEOMETRIQUE_3D_Fz(COORDONNEES_DE_MATERIALISATION(particule_courante,x,dx) ,COORDONNEES_DE_MATERIALISATION(particule_courante,y,dy) ,COORDONNEES_DE_MATERIALISATION(particule_courante,z,dz) ,ASD1(translation_de_l_origine,dz) ) ); /* Coordonnees {x,y,z} de la particule dans l'espace physique eventuellement translatee */ /* le long de la direction de la vitesse afin de visualiser des chaines de sphere lorsque */ /* cela est demande... */ EGAL(Yf_au_pole_nord_de_la_sphere ,Y_PHYSIQUE_DANS_01(ADD2(Yf ,MUL2(rapport_courant_du_zoom,rayon_de_la_particule) ) ) ); /* Calcul de la coordonnee 'y' de l'un des "poles" de la particule dans [0,1], afin de */ /* calculer son rayon apparent... */ EGAL(Xf,X_PHYSIQUE_DANS_01(Xf)); EGAL(Yf,Y_PHYSIQUE_DANS_01(Yf)); EGAL(Zf,lZ_PHYSIQUE_DANS_01(Zf)); /* Coordonnees {x,y,z} de la particule dans [0,1]... */ Test(EST_FAUX(LE_POINT_EST_INVISIBLE_OU_INDETERMINE(Xf,Yf,Zf))) Bblock /* Cas ou le point {Xf,Yf,Zf} est visible apres projection... */ EGAL(petit_axe_de_la_particule_visualisee ,SOUA(F__cDENORMALISE_OY(Projection_OY(Xf,Yf_au_pole_nord_de_la_sphere,Zf)) ,F__cDENORMALISE_OY(Projection_OY(Xf,Yf,Zf)) ) ); /* Calcul du petit axe de l'ellipsoide representatif d'une particule ; toute cette */ /* manipulation etant destinee a projeter le rayon de la particule afin d'avoir un */ /* effet de perspective... */ EGAL(module_de_la_vitesse_de_la_particule ,longF3D(ASI2(particule_courante,espace_temps,vitesse)) ); /* Calcul du module de la vitesse de la particule... */ Test(IZGT(module_de_la_vitesse_de_la_particule)) Bblock INITIALISATION_ACCROISSEMENT_3D(vitesse_normalisee_de_la_particule ,DIVI(ASI3(particule_courante,espace_temps,vitesse,dx) ,longF3D(ASI2(particule_courante,espace_temps,vitesse)) ) ,DIVI(ASI3(particule_courante,espace_temps,vitesse,dy) ,longF3D(ASI2(particule_courante,espace_temps,vitesse)) ) ,DIVI(ASI3(particule_courante,espace_temps,vitesse,dz) ,longF3D(ASI2(particule_courante,espace_temps,vitesse)) ) ); /* Normalisation de la vitesse de la particule (en mouvement...). */ Eblock ATes Bblock Test(IZEQ(module_de_la_vitesse_de_la_particule)) Bblock INITIALISATION_ACCROISSEMENT_3D(vitesse_normalisee_de_la_particule ,FZERO ,FZERO ,FZERO ); /* Normalisation de la vitesse de la particule (immobile, cas par exemple des quarks REELs). */ Eblock ATes Bblock PRINT_ERREUR("un module de vitesse est negatif"); Eblock ETes Eblock ETes EGAL(Xf_de_la_vitesse ,ADD2(Xf ,TRANSFORMATION_GEOMETRIQUE_3D_Fx(ASD1(vitesse_normalisee_de_la_particule,dx) ,ASD1(vitesse_normalisee_de_la_particule,dy) ,ASD1(vitesse_normalisee_de_la_particule,dz) ,ASD1(translation_de_l_origine,dx) ) ) ); EGAL(Yf_de_la_vitesse ,ADD2(Yf ,TRANSFORMATION_GEOMETRIQUE_3D_Fy(ASD1(vitesse_normalisee_de_la_particule,dx) ,ASD1(vitesse_normalisee_de_la_particule,dy) ,ASD1(vitesse_normalisee_de_la_particule,dz) ,ASD1(translation_de_l_origine,dy) ) ) ); EGAL(Zf_de_la_vitesse ,ADD2(Zf ,TRANSFORMATION_GEOMETRIQUE_3D_Fz(ASD1(vitesse_normalisee_de_la_particule,dx) ,ASD1(vitesse_normalisee_de_la_particule,dy) ,ASD1(vitesse_normalisee_de_la_particule,dz) ,ASD1(translation_de_l_origine,dz) ) ) ); /* Extremite dans [0,1] du vecteur vitesse de la particule courante, son origine etant bien */ /* entendu, dans [0,1], le point {Xf,Yf,Zf}. */ Test(EST_FAUX(LE_POINT_EST_INVISIBLE_OU_INDETERMINE(Xf_de_la_vitesse,Yf_de_la_vitesse,Zf_de_la_vitesse))) Bblock /* Cas ou le point situe a l'extremite du vecteur vitesse du point {Xf,Yf,Zf} est visible */ /* apres projection... */ INITIALISATION_ACCROISSEMENT_2D(vitesse_projetee_de_la_particule ,SOUS(Projection_OX(Xf_de_la_vitesse,Yf_de_la_vitesse,Zf_de_la_vitesse) ,Projection_OX(Xf,Yf,Zf) ) ,SOUS(Projection_OY(Xf_de_la_vitesse,Yf_de_la_vitesse,Zf_de_la_vitesse) ,Projection_OY(Xf,Yf,Zf) ) ); /* Composantes du vecteur vitesse projetee de la particule dans [0,1]. */ EGAL(module_de_la_vitesse_projetee_de_la_particule ,longF2D(vitesse_projetee_de_la_particule) ); /* Module de la vitesse projetee de la particule. */ Test(IZGT(module_de_la_vitesse_projetee_de_la_particule)) Bblock INITIALISATION_ACCROISSEMENT_2D(vitesse_projetee_de_la_particule ,DIVI(ASD1(vitesse_projetee_de_la_particule,dx) ,module_de_la_vitesse_projetee_de_la_particule ) ,DIVI(ASD1(vitesse_projetee_de_la_particule,dy) ,module_de_la_vitesse_projetee_de_la_particule ) ); /* Calcul des cosinus et sinus de la vitesse projetee de la particule : */ /* */ /* ---> --> */ /* V designant la projection du vecteur V , on a : */ /* p */ /* */ /* V */ /* p */ /* x */ /* cos(t) = -------- */ /* |--->| */ /* | V | */ /* | p | */ /* */ /* */ /* V */ /* p */ /* y */ /* sin(t) = -------- */ /* |--->| */ /* | V | */ /* | p | */ /* */ /* ---> */ /* 't' etant l'angle du vecteur V avec l'axe des abscisses. */ /* p */ Eblock ATes Bblock Test(IZEQ(module_de_la_vitesse_projetee_de_la_particule)) Bblock INITIALISATION_ACCROISSEMENT_2D(vitesse_projetee_de_la_particule ,COSX(FZERO) ,SINX(FZERO) ); /* Lorsque le vecteur vitesse de la particule est orthogonal au plan de projection, on */ /* choisit arbitrairement un angle nul pour sa projection. En effet, cet angle est */ /* arbitraire, car ainsi qu'on peut le voir facilement, dans ces conditions, le grand axe */ /* et le petit axe sont egaux : nous sommes donc ramenes a un disque, et alors la rotation */ /* du grand axe est "neutre"... */ Eblock ATes Bblock PRINT_ERREUR("un module de vitesse projetee est negatif"); Eblock ETes Eblock ETes EGAL(grand_axe_de_la_particule_visualisee ,MUL2(AXPB(rapport_des_axes_de_la_particule ,module_de_la_vitesse_projetee_de_la_particule ,FU ) ,petit_axe_de_la_particule_visualisee ) ); /* Calcul du petit axe de l'ellipsoide representatif d'une particule. On notera que le */ /* grand axe est d'une part proportionnel au petit axe, et d'autre part lie a la projection */ /* de la vitesse de la particule. Ainsi pour une particule se dirigeant dans la direction */ /* de l'observateur (ou a l'oppose), le petit axe et le grand axe seront egaux, et la */ /* particule apparaitra telle une sphere... */ /* ATTENTION, il y avait autrefois (avant l'introduction de '$xrv/champs_5.11$I' et de */ /* '$xrv/champs_5.12$I') : */ /* */ /* EGAL(charge_ROUGE_attenuee */ /* ,ATTENUATION_DE_DEPTH_CUEING(charge_ROUGE,Zf) */ /* ); */ /* EGAL(charge_VERTE_attenuee */ /* ,ATTENUATION_DE_DEPTH_CUEING(charge_VERTE,Zf) */ /* ); */ /* EGAL(charge_BLEUE_attenuee */ /* ,ATTENUATION_DE_DEPTH_CUEING(charge_BLEUE,Zf) */ /* ); */ /* /* charge de couleur de la particule courante apres */ /* /* attenuation par la fonction de "depth-cueing". */ /* EGAL(charge_ROUGE_normalisee */ /* ,TRON(NORMALISATION_DU_ROUGE(charge_ROUGE_attenuee) */ /* ,seuil_inferieur_du_ROUGE */ /* ,seuil_superieur_du_ROUGE */ /* ) */ /* ); */ /* EGAL(charge_VERTE_normalisee */ /* ,TRON(NORMALISATION_DU_VERTE(charge_VERTE_attenuee) */ /* ,seuil_inferieur_du_VERTE */ /* ,seuil_superieur_du_VERTE */ /* ) */ /* ); */ /* EGAL(charge_BLEUE_normalisee */ /* ,TRON(NORMALISATION_DU_BLEUE(charge_BLEUE_attenuee) */ /* ,seuil_inferieur_du_BLEUE */ /* ,seuil_superieur_du_BLEUE */ /* ) */ /* ); */ /* /* charge de couleur de la particule courante : elle */ /* /* est dupliquee afin d'accelerer la compilation. */ /* /* De plus, l'operation 'TRON(...,inf,sup)' est */ /* /* destinee a compenser sur le plan visuel les */ /* /* charges de couleur qui sont trop faibles (par */ /* /* exemple un bleu tout seul est tres sombre...). */ /* */ #ifdef store_ellipsoide EGAL(rayon_de_visualisation_projete ,CHOI(petit_axe_de_la_particule_visualisee,grand_axe_de_la_particule_visualisee) ); /* Calcul du rayon de la sphere de visualisation (version '$xrq/nucleon.LS$I')... */ #Aifdef store_ellipsoide #Eifdef store_ellipsoide #ifdef store_sphere EGAL(rayon_de_visualisation_projete ,CHOI(_____lNORMALISE_OY(petit_axe_de_la_particule_visualisee) ,_____lNORMALISE_OX(grand_axe_de_la_particule_visualisee) ) ); /* Calcul du rayon de la sphere de visualisation (version '$xrv/champs_5.1C$I')... */ #Aifdef store_sphere #Eifdef store_sphere MEMORISATION_D_UN_POINT(Xf,Yf,Zf ,Z_PHYSIQUE_DANS_01(rayon_de_la_particule) ,rayon_de_visualisation_projete ,charge_ROUGE,charge_VERTE,charge_BLEUE ); /* Memorisation du point courant dans l'espace de visualisation. ATTENTION, il y avait */ /* autrefois : */ /* */ /* #define VISUALISATION_D_UN_ELLIPSOIDE(image */ /* ,niveau_au_centre,niveau_au_bord */ /* ,mise_a_jour_du_Z_Buffer */ /* ) \ */ /* Bblock \ */ /* store_ellipsoide(niveau_au_bord \ */ /* ,niveau_au_centre \ */ /* ,image \ */ /* ,X_DE_VISUALISATION(Xf) \ */ /* ,Y_DE_VISUALISATION(Yf) \ */ /* ,Z_DE_VISUALISATION(Zf) \ */ /* ,petit_axe_de_la_particule_visualisee \ */ /* ,grand_axe_de_la_particule_visualisee \ */ /* ,vitesse_projetee_de_la_particule \ */ /* ); \ */ /* Eblock */ /* */ /* et : */ /* */ /* VISUALISATION_D_UN_ELLIPSOIDE(Image_ROUGE */ /* ,charge_ROUGE_normalisee */ /* ,NIVEAU_AU_BORD_D_UN_DISQUE(charge_ROUGE_normalisee) */ /* ,BLOC(NE_PAS_METTRE_A_JOUR_LE_Z_Buffer;); */ /* ); */ /* VISUALISATION_D_UN_ELLIPSOIDE(Image_VERTE */ /* ,charge_VERTE_normalisee */ /* ,NIVEAU_AU_BORD_D_UN_DISQUE(charge_VERTE_normalisee) */ /* ,BLOC(NE_PAS_METTRE_A_JOUR_LE_Z_Buffer;); */ /* ); */ /* VISUALISATION_D_UN_ELLIPSOIDE(Image_BLEUE */ /* ,charge_BLEUE_normalisee */ /* ,NIVEAU_AU_BORD_D_UN_DISQUE(charge_BLEUE_normalisee) */ /* ,BLOC(METTRE_A_JOUR_LE_Z_Buffer;); */ /* ); */ /* */ /* Mais cela n'est plus necessaire depuis que les spheres a tracer sont triees par 'Z' */ /* croissant afin de bien corriger l'aliasing... */ Test(IFEQ(numero_de_la_sphere_de_materialisation,ZERO)) Bblock BASE_DE_DONNEES (Prin1("\n Geometrie : etiquette={%d};" ,ETIQUETTE(particule_courante) ) ); BASE_DE_DONNEES(Prin0(" particule={")); NATU(particule_courante,QUARK_REEL,"QUARK_REEL"); NATU(particule_courante,ANTI_QUARK_REEL,"ANTI_QUARK_REEL"); NATU(particule_courante,QUARK_VIRTUEL,"QUARK_VIRTUEL"); NATU(particule_courante,ANTI_QUARK_VIRTUEL,"ANTI_QUARK_VIRTUEL"); NATU(particule_courante,GLUON_REEL,"GLUON_REEL"); NATU(particule_courante,GLUON_VIRTUEL,"GLUON_VIRTUEL"); NATU(particule_courante,ELECTRON_REEL,"ELECTRON_REEL"); NATU(particule_courante,ANTI_ELECTRON_REEL,"ANTI_ELECTRON_REEL"); NATU(particule_courante,ELECTRON_VIRTUEL,"ELECTRON_VIRTUEL"); NATU(particule_courante,ANTI_ELECTRON_VIRTUEL,"ANTI_ELECTRON_VIRTUEL"); NATU(particule_courante,NEUTRINO_REEL,"NEUTRINO_REEL"); NATU(particule_courante,NEUTRINO_VIRTUEL,"NEUTRINO_VIRTUEL"); NATU(particule_courante,PHOTON_REEL,"PHOTON_REEL"); NATU(particule_courante,PHOTON_VIRTUEL,"PHOTON_VIRTUEL"); NATU(particule_courante,Z0_REEL,"Z0_REEL"); NATU(particule_courante,Z0_VIRTUEL,"Z0_VIRTUEL"); BASE_DE_DONNEES(Prin0("};")); BASE_DE_DONNEES(Prin0(" saveur={")); SAVE(particule_courante,QUARK_d,"d"); SAVE(particule_courante,QUARK_u,"u"); SAVE(particule_courante,QUARK_s,"s"); SAVE(particule_courante,QUARK_c,"c"); SAVE(particule_courante,QUARK_b,"b"); SAVE(particule_courante,QUARK_t,"t"); SAVE(particule_courante,QUARK_SAVEUR_INDEFINIE,"QUARK_SAVEUR_INDEFINIE"); SAVE(particule_courante,QUARK_PAS_DE_SAVEUR,"QUARK_PAS_DE_SAVEUR"); SAVE(particule_courante,LEPTON_e,"e"); SAVE(particule_courante,LEPTON_m,"m"); SAVE(particule_courante,LEPTON_t,"t"); SAVE(particule_courante,LEPTON_SAVEUR_INDEFINIE,"LEPTON_SAVEUR_INDEFINIE"); SAVE(particule_courante,LEPTON_PAS_DE_SAVEUR,"LEPTON_PAS_DE_SAVEUR"); BASE_DE_DONNEES(Prin0("};")); BASE_DE_DONNEES (Prin1(" date={%g};" ,temps_courant ) ); BASE_DE_DONNEES (Prin3(" position={%g,%g,%g};" ,COORDONNEES(particule_courante,x) ,COORDONNEES(particule_courante,y) ,COORDONNEES(particule_courante,z) ) ); BASE_DE_DONNEES (Prin3(" vitesse={%g,%g,%g};" ,ASI3(particule_courante,espace_temps,vitesse,dx) ,ASI3(particule_courante,espace_temps,vitesse,dy) ,ASI3(particule_courante,espace_temps,vitesse,dz) ) ); BASE_DE_DONNEES (Prin3(" moment_angulaire={%g,%g,%g};" ,ASI3(particule_courante,espace_temps,moment_angulaire,dx) ,ASI3(particule_courante,espace_temps,moment_angulaire,dy) ,ASI3(particule_courante,espace_temps,moment_angulaire,dz) ) ); Test(IL_FAUT(editer_la_couleur_en_flottant)) Bblock BASE_DE_DONNEES (Prin3(" couleur={%g,%g,%g};" ,charge_ROUGE ,charge_VERTE ,charge_BLEUE ) ); Eblock ATes Bblock BASE_DE_DONNEES (Prin3(" couleur={%d,%d,%d};" ,NORMALISATION_DU_ROUGE(charge_ROUGE) ,NORMALISATION_DU_VERTE(charge_VERTE) ,NORMALISATION_DU_BLEUE(charge_BLEUE) ) ); Eblock ETes Eblock ATes Bblock Eblock ETes Eblock ATes Bblock /* Cas ou le point situe a l'extremite du vecteur vitesse du point {Xf,Yf,Zf} n'est pas */ /* visible apres projection... */ Eblock ETes Eblock ATes Bblock /* Cas ou le point {Xf,Yf,Zf} n'est pas visible apres projection... */ Eblock ETes /* ATTENTION, la sequence de code qui precede se retrouve, a quelque chose pres, dans les */ /* deux fichiers suivants : */ /* */ /* $xrq/nucleon.LU$I */ /* $xrv/champs_5.26$I */ /* */ /* Donc, toute modification faite dans l'un, peut avoir a etre reportee dans l'autre... */ Eblock EDoI Eblock ETes RETU_ERROR; Eblock EFonctionI /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* G E S T I O N D E L A V I S U A L I S A T I O N S T E R E O S C O P I Q U E : */ /* */ /*************************************************************************************************************************************/ #include xrv/champs_5.13.I"