TrackParticles[]の出力のリストを受け取り、ビームのモーメントをリストとして返す。
BeamStat[{pos_Real|String,
beam:{{__Real},{__Real},{__Real},{__Real},{__Real},{__Real},{__Real}}}] := Module[{benv,np,b,i,j},
b=Thread[Select[Thread[beam], #[[7]]&]];
benv[_]:=0;
np=Length[b[[7]];
benv[ 1]=Plus@@b[[1]]/np;
benv[ 2]=Plus@@b[[2]]/np;
benv[ 3]=Plus@@b[[3]]/np;
benv[ 4]=Plus@@b[[4]]/np;
benv[ 5]=Plus@@b[[5]]/np;
benv[ 6]=Plus@@b[[6]]/np;
benv[ 7]=Plus@@(b[[1]]*b[[1]])/np-benv[1]*benv[1];
benv[ 8]=Plus@@(b[[1]]*b[[2]])/np-benv[1]*benv[2];
benv[ 9]=Plus@@(b[[1]]*b[[3]])/np-benv[1]*benv[3];
benv[10]=Plus@@(b[[1]]*b[[4]])/np-benv[1]*benv[4];
benv[11]=Plus@@(b[[1]]*b[[5]])/np-benv[1]*benv[5];
benv[12]=Plus@@(b[[1]]*b[[6]])/np-benv[1]*benv[6];
benv[14]=Plus@@(b[[2]]*b[[2]])/np-benv[2]*benv[2];
benv[15]=Plus@@(b[[2]]*b[[3]])/np-benv[2]*benv[3];
benv[16]=Plus@@(b[[2]]*b[[4]])/np-benv[2]*benv[4];
benv[17]=Plus@@(b[[2]]*b[[5]])/np-benv[2]*benv[5];
benv[18]=Plus@@(b[[2]]*b[[6]])/np-benv[2]*benv[6];
benv[21]=Plus@@(b[[3]]*b[[3]])/np-benv[3]*benv[3];
benv[22]=Plus@@(b[[3]]*b[[4]])/np-benv[3]*benv[4];
benv[23]=Plus@@(b[[3]]*b[[5]])/np-benv[3]*benv[5];
benv[24]=Plus@@(b[[3]]*b[[6]])/np-benv[3]*benv[6];
benv[28]=Plus@@(b[[4]]*b[[4]])/np-benv[4]*benv[4];
benv[29]=Plus@@(b[[4]]*b[[5]])/np-benv[4]*benv[5];
benv[30]=Plus@@(b[[4]]*b[[6]])/np-benv[4]*benv[6];
benv[35]=Plus@@(b[[5]]*b[[5]])/np-benv[5]*benv[5];
benv[36]=Plus@@(b[[5]]*b[[6]])/np-benv[5]*benv[6];
benv[42]=Plus@@(b[[6]]*b[[6]])/np-benv[6]*benv[6];
benv[43]=Plus@@(b[[1]]^3])/np;
benv[44]=Plus@@(b[[3]]^3])/np;
benv[45]=Plus@@(b[[5]]^3])/np;
benv[46]=Plus@@(b[[1]]^4])/np;
benv[47]=Plus@@(b[[3]]^4])/np;
benv[48]=Plus@@(b[[3]]^4])/np;
Do[
Do[benv[j*6+i]=benv[i*6+j],{j,i+1,6}]
,{i,1,6}];
Table[benv[i],{i,1,48}]];