@@ -23,9 +23,11 @@ import {
2323 LineSegments ,
2424 LineDashedMaterial ,
2525 CanvasTexture ,
26- ArrowHelper ,
2726} from 'three' ;
2827import { ConvexGeometry } from 'three/examples/jsm/geometries/ConvexGeometry.js' ;
28+ import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js' ;
29+ import { Font } from 'three/examples/jsm/loaders/FontLoader.js' ;
30+ import HelvetikerFont from '../../managers/three-manager/fonts/helvetiker_regular.typeface.json' ;
2931import { EVENT_DATA_TYPE_COLORS } from '../../helpers/constants' ;
3032import { RKHelper } from '../../helpers/rk-helper' ;
3133import { CoordinateHelper } from '../../helpers/coordinate-helper' ;
@@ -912,12 +914,12 @@ export class PhoenixObjects {
912914 public static getMCParticle ( mcParticleParams : {
913915 origin : number [ ] ;
914916 momentum : number [ ] ;
917+ pdgid : number ;
915918 status ?: number ;
916919 color ?: string ;
917920 uuid : string ;
918921 } ) : Object3D {
919922 const defaultColor : string = '#ffff00' ;
920- const defaultStatus = 0 ;
921923
922924 const origin = new Vector3 (
923925 mcParticleParams . origin [ 0 ] ,
@@ -934,18 +936,16 @@ export class PhoenixObjects {
934936 direction . normalize ( ) ;
935937
936938 const lineLength = 0.85 * length ;
937- let lineWidth = Math . log ( length * 100 ) / 10 ;
938- console . log ( lineWidth ) ;
939+ let lineWidth = Math . log ( length * 1000 ) / 100 ;
939940 if ( lineWidth < 0 ) {
940941 lineWidth = 0.00001 ;
941942 }
942- if ( lineWidth > 0.4 ) {
943- lineWidth = 0.4 ;
943+ if ( lineWidth > 0.1 ) {
944+ lineWidth = 0.1 ;
944945 }
945946 const coneLength = 0.15 * length ;
946947 const coneWidth = 2.5 * lineWidth ;
947948
948- // const lineGeometry = new CylinderGeometry(2, 2, lineLength, 16, 2);
949949 const lineGeometry = new CylinderGeometry (
950950 lineWidth ,
951951 lineWidth ,
@@ -955,7 +955,6 @@ export class PhoenixObjects {
955955 lineGeometry . rotateZ ( Math . PI / 2 ) ;
956956 lineGeometry . translate ( lineLength / 2 , 0 , 0 ) ;
957957
958- // const coneGeometry = new ConeGeometry(2, coneLength, 16, 2);
959958 const coneGeometry = new ConeGeometry ( coneWidth , coneLength , 16 ) ;
960959 coneGeometry . rotateZ ( - Math . PI / 2 ) ;
961960 coneGeometry . translate ( length - coneLength / 2 , 0 , 0 ) ;
@@ -969,32 +968,129 @@ export class PhoenixObjects {
969968 quaternion . setFromUnitVectors ( buildDirection , direction ) ;
970969 mergedGeometry . applyQuaternion ( quaternion ) ;
971970
972- mergedGeometry . translate ( origin . x , origin . y , origin . z ) ;
973- mergedGeometry . computeBoundingBox ( ) ;
974-
975971 const material = new MeshPhongMaterial ( {
976972 color : mcParticleParams . color ?? defaultColor ,
977973 } ) ;
978974
979975 const arrowObject = new Mesh ( mergedGeometry , material ) ;
980976
981- // const arrowHelper = new ArrowHelper(direction, origin, length);
982- // arrowHelper.position.copy(origin);
983- // arrowHelper.setDirection(direction);
977+ const font = new Font ( HelvetikerFont ) ;
978+ const labelGeometry = new TextGeometry (
979+ PhoenixObjects . getMCParticleName ( mcParticleParams . pdgid ) ,
980+ {
981+ font : font ,
982+ size : 80 ,
983+ height : 2 ,
984+ curveSegments : 12 ,
985+ bevelEnabled : true ,
986+ bevelThickness : 4 ,
987+ bevelSize : 4 ,
988+ bevelOffset : 0 ,
989+ bevelSegments : 5 ,
990+ }
991+ ) ;
992+ labelGeometry . scale ( 0.01 , 0.01 , 0.01 ) ;
993+
994+ labelGeometry . rotateX ( Math . PI / 2 ) ;
995+ labelGeometry . translate ( length , 0 , 0 ) ;
996+
997+ labelGeometry . applyQuaternion ( quaternion ) ;
998+
999+ const labelObject = new Mesh ( labelGeometry , material ) ;
9841000
985- // const arrowObject = new Group();
986- // arrowObject.add(arrowHelper.line);
987- // arrowObject.add(arrowHelper.cone);
1001+ const arrowContainer = new Group ( ) ;
1002+ arrowContainer . position . x = origin . x ;
1003+ arrowContainer . position . y = origin . y ;
1004+ arrowContainer . position . z = origin . z ;
9881005
989- // console.log(arrowHelper.line );
990- // console.log(arrowHelper.cone );
1006+ arrowContainer . add ( arrowObject ) ;
1007+ arrowContainer . add ( labelObject ) ;
9911008
992- mcParticleParams . uuid = arrowObject . uuid ;
993- // mcParticleParams.uuid = arrowHelper.uuid ;
1009+ mcParticleParams . uuid = arrowContainer . uuid ;
1010+ arrowContainer . userData = Object . assign ( { } , mcParticleParams ) ;
9941011
995- arrowObject . name = 'MCParticle' ;
996- // arrowHelper.name = 'MCParticle';
1012+ arrowContainer . name = 'MCParticle' ;
9971013
998- return arrowObject ;
1014+ return arrowContainer ;
1015+ }
1016+
1017+ /**
1018+ * Return a Monte Carlo particle name from PDG ID.
1019+ * @param mcParticlePDGid PDG ID.
1020+ * @returns MCParticle name.
1021+ */
1022+ public static getMCParticleName ( mcParticlePDGid : number ) : string {
1023+ switch ( mcParticlePDGid ) {
1024+ case 1 :
1025+ return 'd' ;
1026+ case - 1 :
1027+ return '!d' ;
1028+ case 2 :
1029+ return 'u' ;
1030+ case - 2 :
1031+ return '!u' ;
1032+ case 3 :
1033+ return 's' ;
1034+ case - 3 :
1035+ return '!s' ;
1036+ case 4 :
1037+ return 'c' ;
1038+ case - 4 :
1039+ return '!c' ;
1040+ case 5 :
1041+ return 'b' ;
1042+ case - 5 :
1043+ return '!b' ;
1044+ case 6 :
1045+ return 't' ;
1046+ case - 6 :
1047+ return '!t' ;
1048+ case 11 :
1049+ return 'e-' ;
1050+ case - 11 :
1051+ return 'e+' ;
1052+ case 12 :
1053+ return 'νe' ;
1054+ case 13 :
1055+ return 'μ-' ;
1056+ case - 13 :
1057+ return 'μ+' ;
1058+ case 14 :
1059+ return 'νμ' ;
1060+ case 15 :
1061+ return 'τ' ;
1062+ case - 15 :
1063+ return 'τ-' ;
1064+ case 16 :
1065+ return 'ντ' ;
1066+ case 21 :
1067+ return 'g' ;
1068+ case 22 :
1069+ return 'γ' ;
1070+ case 23 :
1071+ return 'Z' ;
1072+ case 24 :
1073+ return 'W+' ;
1074+ case - 24 :
1075+ return 'W-' ;
1076+ case 25 :
1077+ return 'H' ;
1078+ case 111 :
1079+ return 'π0' ;
1080+ case 211 :
1081+ return 'π+' ;
1082+ case - 211 :
1083+ return 'π-' ;
1084+ case 221 :
1085+ return 'η' ;
1086+ case 311 :
1087+ return 'K0' ;
1088+ case 321 :
1089+ return 'K+' ;
1090+ case - 321 :
1091+ return 'K-' ;
1092+ default :
1093+ return mcParticlePDGid . toString ( ) ;
1094+ }
9991095 }
10001096}
0 commit comments