Ray tracing test for the X-rays alignment:


In [1]:
import foxsisim
from foxsisim.module import Module
from foxsisim.detector import Detector
from foxsisim.source import Source
from foxsisim.plotting import scatterHist
import matplotlib.pyplot as plt
from foxsisim.plotting import plot
import numpy as np
%matplotlib inline

After make a complete alignment using the X-rays generator yesterday (November 10, 2014), today we are ready to do an analysis of the how off-axis are the optical modules mounted over the foxsi meter-tube.


In [2]:
# create module of 7 shells
#module = Module(radii=[5.151,4.9,4.659,4.429,4.21,4.0,3.799],
module = Module(radii=[5.151, 3.799],
                seglen=30.0,
                base=[0,0,0],
                focal=200,
                angles=None,
                conic=False)

detector = Detector(width=2, 
                    height=2,
                    normal=[0,0,1],
                    center=[0,0,200.0+30.0],
                    reso =[256,256])

In [3]:
source_distance = -2187.5
offaxis_angle_arcmin = 0.0
source = Source(type='point',          
                center=[ source_distance * np.sin(np.deg2rad(offaxis_angle_arcmin/60.0)) , 0.0 , source_distance ],
                color=[0,1,1])

In [4]:
rays = source.generateRays(module.targetFront, 10)
module.passRays(rays, robust=True)
detector.catchRays(rays)


0 ray bounce number 1
[-0.00942174 -0.01176619  0.99988639]
0 ray bounce number 2
[-0.01495632 -0.01867795  0.99971368]
2 ray bounce number 1
[ 0.00813149  0.01257094  0.99988792]
2 ray bounce number 2
None
2 ray killed by reflect
4 ray bounce number 1
[ 0.01105836  0.01023287  0.99988649]
4 ray bounce number 2
[ 0.01758537  0.01627265  0.99971294]
4 ray bounce number 3
None
4 ray killed by reflect
6 ray bounce number 1
[ -4.09627916e-02   1.28058749e-04   9.99160664e-01]
6 ray bounce number 2
None
6 ray killed by reflect
7 ray bounce number 1
[ 0.03223915 -0.0253576   0.99915846]
8 ray bounce number 1
[ 0.03642411  0.01923226  0.99915134]
8 ray bounce number 2
None
8 ray killed by reflect

In [5]:
plot(detector)



In [6]:
scatterHist(rays)



In [7]:
for ray in rays:
    print("x=%f, y=%f, bounce=%i, dead=%i" % (ray.des[0], ray.des[1], ray.bounces, ray.dead))


x=0.286698, y=0.358038, bounce=2, dead=1
x=0.000000, y=0.000000, bounce=0, dead=0
x=0.000000, y=0.000000, bounce=2, dead=1
x=0.000000, y=0.000000, bounce=0, dead=0
x=0.000000, y=0.000000, bounce=3, dead=1
x=0.000000, y=0.000000, bounce=0, dead=0
x=0.000000, y=0.000000, bounce=2, dead=1
x=0.000000, y=0.000000, bounce=1, dead=0
x=0.000000, y=0.000000, bounce=2, dead=1
x=0.000000, y=0.000000, bounce=0, dead=0

In [8]:
np.sum([ray.dead for ray in rays])


Out[8]:
5

In [9]:
fig = plt.figure(figsize=(7,7), dpi=100)

x = np.array([ray.des[0] for ray in rays])
y = np.array([ray.des[1] for ray in rays])

# Defining colors:
colors = []
for ray in rays:
        if ray.bounces == 1: col = 'r' # red
        elif ray.bounces == 2: col = 'g' # green
        elif ray.bounces == 3: col = 'b' # blue
        else: col = 'k' # black
        colors.append(col)

# definitions for the axes 
left, width = 0.1, 0.8
bottom, height = 0.1, 0.8
rect_scatter = [left, bottom, width, height]
axScatter = fig.add_axes(rect_scatter)
        
axScatter.scatter(x,y,c=colors)

plt.title('X-rays alignment - simulation')
plt.grid()
plt.show()


Testing Straight Through Flux Shield


In [10]:
module = Module(radii=[5.151, 3.799],
                seglen=30.0,
                base=[0,0,0],
                focal=200,
                angles=None,
                conic=False,
                core_radius=1.0)

detector = Detector(width=2, 
                    height=2,
                    normal=[0,0,1],
                    center=[0,0,210.0],
                    reso =[256,256])
source_distance = -2187.5
offaxis_angle_arcmin = 0.0
source = Source(type='atinf',          
                center=[ source_distance * np.sin(np.deg2rad(offaxis_angle_arcmin/60.0)) , 0.0 , -10 ],
                color=[0,1,1],
                width=15,
                height=15)
rays = source.generateRays(module.targetFront, 1000)
module.passRays(rays, robust=True)
detector.catchRays(rays)


3 ray bounce number 1
[-0.03801226  0.00734302  0.99925029]
3 ray bounce number 2
None
3 ray killed by reflect
5 ray bounce number 1
[-0.00225195  0.01227078  0.99992218]
5 ray bounce number 2
[-0.00479586  0.0261324   0.99964699]
9 ray bounce number 1
[ 0.02401382 -0.0154593   0.99959209]
9 ray bounce number 2
None
9 ray killed by reflect
12 ray bounce number 1
[-0.02103972  0.03249316  0.99925048]
12 ray bounce number 2
None
12 ray killed by reflect
13 ray bounce number 1
[ 0.00791057  0.00973436  0.99992133]
13 ray bounce number 2
[ 0.0166656   0.02050787  0.99965078]
13 ray bounce number 3
None
13 ray killed by reflect
17 ray bounce number 1
[-0.03841428 -0.0047083   0.99925081]
17 ray bounce number 2
None
17 ray killed by reflect
18 ray bounce number 1
[ 0.03889365  0.0043495   0.99923389]
18 ray bounce number 2
None
18 ray killed by reflect
35 ray bounce number 1
[ 0.02668957  0.00998925  0.99959386]
35 ray bounce number 2
None
35 ray killed by reflect
46 ray bounce number 1
[-0.00628479 -0.0381845   0.99925094]
46 ray bounce number 2
None
46 ray killed by reflect
50 ray bounce number 1
[ 0.03810862 -0.00889441  0.99923402]
50 ray bounce number 2
None
50 ray killed by reflect
53 ray bounce number 1
[ 0.00401058 -0.00854952  0.99995541]
53 ray bounce number 2
[ 0.00811064 -0.0172898   0.99981762]
53 ray bounce number 3
None
53 ray killed by reflect
ray hit face 0
66 ray bounce number 1
[-0.00896146  0.00889425  0.99992029]
66 ray bounce number 2
[-0.01863319  0.01849345  0.99965534]
66 ray bounce number 3
None
66 ray killed by reflect
ray hit face 0
78 ray bounce number 1
[-0.02123199 -0.03227055  0.99925363]
78 ray bounce number 2
None
78 ray killed by reflect
80 ray bounce number 1
[-0.00268299  0.03880952  0.99924302]
80 ray bounce number 2
None
80 ray killed by reflect
81 ray bounce number 1
[  8.21179461e-04   3.89426567e-02   9.99241110e-01]
85 ray bounce number 1
[-0.00844302  0.00404401  0.99995618]
85 ray bounce number 2
[-0.01737453  0.00832199  0.99981442]
87 ray bounce number 1
[ 0.02805062  0.00573895  0.99959003]
89 ray bounce number 1
[ 0.00440588 -0.0083782   0.9999552 ]
89 ray bounce number 2
None
89 ray killed by reflect
93 ray bounce number 1
[ 0.01784684  0.02256001  0.99958618]
94 ray bounce number 1
[ 0.00403273  0.03841554  0.99925371]
96 ray bounce number 1
[ 0.01799872  0.03454292  0.99924113]
103 ray bounce number 1
[-0.03331703  0.01957195  0.99925318]
103 ray bounce number 2
None
103 ray killed by reflect
107 ray bounce number 1
[-0.03350801  0.02012248  0.99923586]
107 ray bounce number 2
None
107 ray killed by reflect
116 ray bounce number 1
[ 0.03732904 -0.01143413  0.99923761]
119 ray bounce number 1
[ 0.00933637  0.02728899  0.99958399]
121 ray bounce number 1
[-0.00810598 -0.00977999  0.99991932]
121 ray bounce number 2
None
121 ray killed by reflect
136 ray bounce number 1
[-0.00759235  0.00518901  0.99995771]
136 ray bounce number 2
[-0.01619092  0.01106572  0.99980768]
139 ray bounce number 1
[-0.00907828 -0.03762309  0.99925076]
152 ray bounce number 1
[ 0.00520915 -0.03870932  0.99923694]
157 ray bounce number 1
[-0.02462516  0.01454374  0.99959096]
157 ray bounce number 2
None
157 ray killed by reflect
160 ray bounce number 1
[-0.03396995 -0.01910518  0.99924023]
ray hit face 0
199 ray bounce number 1
[-0.00935406 -0.00832374  0.99992161]
199 ray bounce number 2
[-0.01977602 -0.01759775  0.99964955]
200 ray bounce number 1
[  7.77989027e-05  -2.88682097e-02   9.99583223e-01]
205 ray bounce number 1
[ 0.03172885 -0.02261409  0.99924065]
207 ray bounce number 1
[-0.01330688 -0.03625392  0.99925401]
210 ray bounce number 1
[-0.02348154  0.03087667  0.99924734]
210 ray bounce number 2
None
210 ray killed by reflect
ray hit face 0
232 ray bounce number 1
[ 0.00951841 -0.03767818  0.99924459]
243 ray bounce number 1
[-0.02595976 -0.01208835  0.9995899 ]
243 ray bounce number 2
None
243 ray killed by reflect
250 ray bounce number 1
[  2.01117038e-04  -2.85230642e-02   9.99593114e-01]
250 ray bounce number 2
None
250 ray killed by reflect
264 ray bounce number 1
[-0.03749944 -0.009923    0.99924738]
265 ray bounce number 1
[-0.03898837  0.00390811  0.99923202]
265 ray bounce number 2
None
265 ray killed by reflect
267 ray bounce number 1
[-0.01324965  0.02553678  0.99958607]
267 ray bounce number 2
None
267 ray killed by reflect
272 ray bounce number 1
[ 0.03169698  0.02216332  0.99925176]
281 ray bounce number 1
[ 0.01190532  0.02605875  0.99958952]
281 ray bounce number 2
None
281 ray killed by reflect
287 ray bounce number 1
[ 0.01969326 -0.02071362  0.99959148]
287 ray bounce number 2
None
287 ray killed by reflect
295 ray bounce number 1
[-0.00495987 -0.01182614  0.99991777]
295 ray bounce number 2
[-0.00999669 -0.02383577  0.99966591]
296 ray bounce number 1
[ 0.00287744  0.02869288  0.99958413]
296 ray bounce number 2
None
296 ray killed by reflect
304 ray bounce number 1
[ 0.02687188  0.00979767  0.99959087]
304 ray bounce number 2
None
304 ray killed by reflect
305 ray bounce number 1
[-0.03445736  0.01756817  0.99925174]
305 ray bounce number 2
None
305 ray killed by reflect
317 ray bounce number 1
[ 0.02147856 -0.03223126  0.99924963]
ray hit face 0
331 ray bounce number 1
[ 0.01888656 -0.02149076  0.99959064]
331 ray bounce number 2
None
331 ray killed by reflect
333 ray bounce number 1
[  4.21909200e-04  -9.25077007e-03   9.99957122e-01]
333 ray bounce number 2
[  8.87300573e-04  -1.94549291e-02   9.99810341e-01]
333 ray bounce number 3
None
333 ray killed by reflect
336 ray bounce number 1
[ 0.01231938  0.0020865   0.99992194]
336 ray bounce number 2
[ 0.02615571  0.00442993  0.99964807]
341 ray bounce number 1
[-0.00898616 -0.00262059  0.99995619]
341 ray bounce number 2
[-0.01849646 -0.00539402  0.99981438]
345 ray bounce number 1
[ 0.00579681  0.01146052  0.99991752]
345 ray bounce number 2
[ 0.01164896  0.02303043  0.9996669 ]
355 ray bounce number 1
[ 0.02761862 -0.0080904   0.99958579]
356 ray bounce number 1
[-0.03035375 -0.02474756  0.99923281]
356 ray bounce number 2
None
356 ray killed by reflect
359 ray bounce number 1
[ 0.02803249  0.00676445  0.99958412]
361 ray bounce number 1
[ 0.02002038  0.03339567  0.99924167]
361 ray bounce number 2
None
361 ray killed by reflect
368 ray bounce number 1
[ 0.01545828  0.02413292  0.99958924]
368 ray bounce number 2
None
368 ray killed by reflect
ray hit face 0
371 ray bounce number 1
[-0.03880931  0.00354872  0.99924033]
371 ray bounce number 2
None
371 ray killed by reflect
372 ray bounce number 1
[ 0.03894898 -0.00312508  0.99923631]
372 ray bounce number 2
None
372 ray killed by reflect
375 ray bounce number 1
[ 0.0087584   0.00365755  0.99995496]
375 ray bounce number 2
[ 0.01753367  0.00732215  0.99981946]
376 ray bounce number 1
[-0.03869652 -0.00147698  0.99924992]
376 ray bounce number 2
None
376 ray killed by reflect
385 ray bounce number 1
[ 0.03320174 -0.02023847  0.99924374]
385 ray bounce number 2
None
385 ray killed by reflect
406 ray bounce number 1
[ 0.02875128  0.00281851  0.99958262]
413 ray bounce number 1
[ 0.01731934 -0.03493036  0.99923967]
421 ray bounce number 1
[ 0.00648301 -0.02800064  0.99958688]
421 ray bounce number 2
None
421 ray killed by reflect
423 ray bounce number 1
[-0.02707787 -0.00961111  0.99958712]
425 ray bounce number 1
[ 0.03792613 -0.00875867  0.99924216]
425 ray bounce number 2
None
425 ray killed by reflect
430 ray bounce number 1
[ 0.02124721 -0.01925163  0.99958888]
431 ray bounce number 1
[ 0.02170663  0.03235371  0.99924074]
438 ray bounce number 1
[-0.03586289 -0.01578135  0.99923211]
438 ray bounce number 2
None
438 ray killed by reflect
ray hit face 0
443 ray bounce number 1
[ 0.03889044  0.00417791  0.99923475]
445 ray bounce number 1
[ 0.02839407 -0.00425227  0.99958776]
446 ray bounce number 1
[ 0.02714188  0.02801998  0.99923881]
446 ray bounce number 2
None
446 ray killed by reflect
ray hit face 0
458 ray bounce number 1
[ 0.01182492 -0.03732946  0.99923305]
460 ray bounce number 1
[ 0.01731762  0.0349203   0.99924005]
460 ray bounce number 2
None
460 ray killed by reflect
469 ray bounce number 1
[ 0.02086642 -0.03257339  0.9992515 ]
469 ray bounce number 2
None
469 ray killed by reflect
485 ray bounce number 1
[ 0.00703081  0.02782627  0.99958805]
ray hit face 0
517 ray bounce number 1
[-0.00992608 -0.02700983  0.99958589]
517 ray bounce number 2
None
517 ray killed by reflect
519 ray bounce number 1
[-0.00169881 -0.0388306   0.99924436]
536 ray bounce number 1
[ 0.00576749  0.03833047  0.99924847]
536 ray bounce number 2
None
536 ray killed by reflect
539 ray bounce number 1
[ 0.00310154  0.01247335  0.99991739]
539 ray bounce number 2
[ 0.00622297  0.02502669  0.99966741]
548 ray bounce number 1
[-0.02222744 -0.01804248  0.99959012]
548 ray bounce number 2
None
548 ray killed by reflect
569 ray bounce number 1
[ -2.85599397e-02   1.03154048e-04   9.99592076e-01]
569 ray bounce number 2
None
569 ray killed by reflect
572 ray bounce number 1
[-0.00815346 -0.00991049  0.99991765]
572 ray bounce number 2
[-0.01640958 -0.01994578  0.99966639]
581 ray bounce number 1
[ 0.01290822 -0.03696623  0.99923314]
582 ray bounce number 1
[ 0.02146166  0.03274789  0.99923319]
582 ray bounce number 2
None
582 ray killed by reflect
584 ray bounce number 1
[ 0.01949932 -0.0208688   0.99959205]
584 ray bounce number 2
None
584 ray killed by reflect
601 ray bounce number 1
[ 0.01191076  0.02606656  0.99958925]
605 ray bounce number 1
[-0.03902676  0.00218192  0.99923578]
605 ray bounce number 2
None
605 ray killed by reflect
610 ray bounce number 1
[ 0.01867505 -0.02162898  0.99959163]
612 ray bounce number 1
[ 0.00539137  0.03827675  0.99925263]
623 ray bounce number 1
[ 0.00831429 -0.0093934   0.99992132]
623 ray bounce number 2
[ 0.01751298 -0.01978597  0.99965084]
624 ray bounce number 1
[ 0.01028493 -0.00742202  0.99991956]
624 ray bounce number 2
[ 0.0211922  -0.01529315  0.99965845]
625 ray bounce number 1
[ 0.02498379  0.02994903  0.99923914]
631 ray bounce number 1
[-0.00196422  0.0090558   0.99995707]
631 ray bounce number 2
[-0.00412553  0.01902029  0.99981059]
653 ray bounce number 1
[-0.02140866  0.03214379  0.99925394]
653 ray bounce number 2
None
653 ray killed by reflect
658 ray bounce number 1
[ 0.0223512   0.03207588  0.99923549]
658 ray bounce number 2
None
658 ray killed by reflect
660 ray bounce number 1
[-0.0195225   0.02125389  0.99958349]
666 ray bounce number 1
[-0.02233239  0.03200363  0.99923823]
666 ray bounce number 2
None
666 ray killed by reflect
669 ray bounce number 1
[-0.00780997  0.03794227  0.99924941]
669 ray bounce number 2
None
669 ray killed by reflect
674 ray bounce number 1
[ 0.02583802 -0.02869822  0.99925413]
674 ray bounce number 2
None
674 ray killed by reflect
696 ray bounce number 1
[ 0.02854842  0.00298816  0.99958794]
696 ray bounce number 2
None
696 ray killed by reflect
698 ray bounce number 1
[  9.44262378e-03  -5.40723044e-04   9.99955271e-01]
698 ray bounce number 2
[ 0.01903692 -0.00109013  0.99981819]
700 ray bounce number 1
[-0.01190336 -0.00489309  0.99991718]
700 ray bounce number 2
None
700 ray killed by reflect
702 ray bounce number 1
[-0.03814836  0.00769468  0.99924246]
702 ray bounce number 2
None
702 ray killed by reflect
ray hit face 0
711 ray bounce number 1
[-0.03584351  0.01449215  0.99925233]
719 ray bounce number 1
[ 0.02285059 -0.03176255  0.9992342 ]
719 ray bounce number 2
None
719 ray killed by reflect
722 ray bounce number 1
[-0.00658967 -0.00651223  0.99995708]
722 ray bounce number 2
[-0.01384586 -0.01368314  0.99981051]
722 ray bounce number 3
None
722 ray killed by reflect
724 ray bounce number 1
[-0.00899185 -0.00861528  0.99992246]
724 ray bounce number 2
None
724 ray killed by reflect
726 ray bounce number 1
[ 0.03881321  0.00506618  0.99923364]
729 ray bounce number 1
[-0.001488   -0.00933202  0.99995535]
729 ray bounce number 2
None
729 ray killed by reflect
733 ray bounce number 1
[-0.0107667   0.02653898  0.9995898 ]
742 ray bounce number 1
[ 0.01234256  0.00277497  0.99991998]
742 ray bounce number 2
None
742 ray killed by reflect
746 ray bounce number 1
[ 0.03368396 -0.01889765  0.99925386]
748 ray bounce number 1
[ 0.02744661  0.00792533  0.99959185]
748 ray bounce number 2
None
748 ray killed by reflect
758 ray bounce number 1
[ 0.02176444  0.01847896  0.99959234]
758 ray bounce number 2
None
758 ray killed by reflect
764 ray bounce number 1
[ 0.01125587 -0.03750358  0.9992331 ]
764 ray bounce number 2
None
764 ray killed by reflect
ray hit face 0
772 ray bounce number 1
[ 0.01534724 -0.02406966  0.99959247]
772 ray bounce number 2
None
772 ray killed by reflect
779 ray bounce number 1
[ 0.03798789 -0.00720576  0.99925222]
779 ray bounce number 2
None
779 ray killed by reflect
782 ray bounce number 1
[ 0.03377905  0.0187433   0.99925355]
782 ray bounce number 2
None
782 ray killed by reflect
ray hit face 0
ray hit face 0
799 ray bounce number 1
[-0.00641684  0.03862703  0.99923309]
799 ray bounce number 2
None
799 ray killed by reflect
827 ray bounce number 1
[ 0.03289563 -0.02075144  0.99924334]
828 ray bounce number 1
[ 0.00965905 -0.0378902   0.99923523]
838 ray bounce number 1
[ 0.0037178   0.01232466  0.99991714]
838 ray bounce number 2
[ 0.00743625  0.02465149  0.99966845]
856 ray bounce number 1
[-0.02998002 -0.02496699  0.99923863]
857 ray bounce number 1
[ -1.28516564e-02   5.27142628e-04   9.99917275e-01]
857 ray bounce number 2
None
857 ray killed by reflect
ray hit face 0
873 ray bounce number 1
[ 0.01240876 -0.03681829  0.99924493]
873 ray bounce number 2
None
873 ray killed by reflect
891 ray bounce number 1
[ 0.02599785  0.01234571  0.99958576]
891 ray bounce number 2
None
891 ray killed by reflect
897 ray bounce number 1
[ 0.02561281 -0.01300695  0.99958732]
897 ray bounce number 2
None
897 ray killed by reflect
898 ray bounce number 1
[ 0.03558769  0.01576802  0.99924216]
898 ray bounce number 2
None
898 ray killed by reflect
915 ray bounce number 1
[-0.00433125  0.01185992  0.99992029]
915 ray bounce number 2
[-0.00900568  0.02465954  0.99965534]
915 ray bounce number 3
None
915 ray killed by reflect
921 ray bounce number 1
[-0.0282537  -0.00534829  0.99958648]
921 ray bounce number 2
None
921 ray killed by reflect
931 ray bounce number 1
[ 0.02794932 -0.00572758  0.99959293]
932 ray bounce number 1
[ 0.0216964   0.03230323  0.9992426 ]
932 ray bounce number 2
None
932 ray killed by reflect
935 ray bounce number 1
[-0.03884321 -0.00284598  0.99924127]
935 ray bounce number 2
None
935 ray killed by reflect
ray hit face 0
937 ray bounce number 1
[ 0.02054189 -0.03310324  0.99924081]
943 ray bounce number 1
[ 0.01776497  0.03442588  0.99924935]
943 ray bounce number 2
None
943 ray killed by reflect
944 ray bounce number 1
[ 0.01337799 -0.02536282  0.99958879]
952 ray bounce number 1
[-0.02314316  0.01662483  0.99959392]
ray hit face 0
963 ray bounce number 1
[-0.02728111  0.00895708  0.99958767]
963 ray bounce number 2
None
963 ray killed by reflect
977 ray bounce number 1
[-0.0125381   0.00204884  0.9999193 ]
977 ray bounce number 2
[-0.02574917  0.00420766  0.99965958]
977 ray bounce number 3
None
977 ray killed by reflect
985 ray bounce number 1
[-0.01307163 -0.03672389  0.99923996]
988 ray bounce number 1
[ 0.01034739 -0.00762613  0.99991738]
988 ray bounce number 2
None
988 ray killed by reflect
994 ray bounce number 1
[ 0.01209405 -0.02616083  0.99958459]
994 ray bounce number 2
None
994 ray killed by reflect

In [11]:
scatterHist(detector.rays)



In [18]:
detector.rays[4].pos


Out[18]:
array([   0.33034062,    0.96554273,  210.        ])

In [21]:
detector.rays[5].hist


Out[21]:
[array([  3.23878796,  -2.21355742, -10.        ]),
 array([ 3.23878796, -2.21355742,  3.46828714]),
 array([  2.85950186,  -1.95433342,  53.42254001]),
 array([   0.32388073,   -0.22135707,  210.        ])]

In [22]:
detector.rays[5].bounces


Out[22]:
2

In [14]: