diff --git a/INSTALL b/INSTALL index acd0b7ebbddf099bb8557d15c723ab89e84e1eba..5f4fa705f21ec3375cb06ba952f17382b93c083a 100644 --- a/INSTALL +++ b/INSTALL @@ -28,9 +28,10 @@ I) REQUIREMENTS II) WORKING CONFIGURATIONS The NPTool package has been mainly tested (and developped) with - the two following configurations: - 1) Mac OS X (10.5.7) + G4 (4.9.2) + CLHEP (2.0.4.2) + ROOT (5.22/00) + GSL () + the following configurations: + 1) Mac OS X (10.5.7) + G4 (4.9.2 and 4.9.3.b1) + CLHEP (2.0.4.2) + ROOT (5.22/00 and 5.24/00) + GSL () 2) Linux Fedora (kernel 2.6.29) + G4 (4.9.1p3) + CLHEP (2.0.4.2) + ROOT (5.22/00) + GSL (1.12) + 3) Linux Fedora (kernel 2.6.29) + G4 (4.9.2p2) + CLHEP (2.0.4.2) + ROOT (5.25/02) + GSL (1.12) Please, report any working or non-working configuration. III) INSTALLATION diff --git a/Inputs/CrossSection/9Li(d,p).txt b/Inputs/CrossSection/9Li(d,p).txt new file mode 100644 index 0000000000000000000000000000000000000000..990d337d600e572e207806c4601838a61b4bfa91 --- /dev/null +++ b/Inputs/CrossSection/9Li(d,p).txt @@ -0,0 +1,73 @@ + 0.0 0.5625 + 2.500 0.5625 + 5.000 0.5126 + 7.500 0.4400 + 10.00 0.3576 + 12.50 0.2777 + 15.00 0.2090 + 17.50 0.1542 + 20.00 0.1124 + 22.50 0.8230E-01 + 25.00 0.6235E-01 + 27.50 0.4957E-01 + 30.00 0.3973E-01 + 32.50 0.3012E-01 + 35.00 0.2102E-01 + 37.50 0.1382E-01 + 40.00 0.8849E-02 + 42.50 0.5495E-02 + 45.00 0.3248E-02 + 47.50 0.1931E-02 + 50.00 0.1310E-02 + 52.50 0.1027E-02 + 55.00 0.8610E-03 + 57.50 0.7619E-03 + 60.00 0.7002E-03 + 62.50 0.6196E-03 + 65.00 0.5018E-03 + 67.50 0.3850E-03 + 70.00 0.2985E-03 + 72.50 0.2351E-03 + 75.00 0.1775E-03 + 77.50 0.1254E-03 + 80.00 0.8818E-04 + 82.50 0.6599E-04 + 85.00 0.5158E-04 + 87.50 0.3920E-04 + 90.00 0.2942E-04 + 92.50 0.2407E-04 + 95.00 0.2225E-04 + 97.50 0.2153E-04 + 100.0 0.2032E-04 + 102.5 0.1965E-04 + 105.0 0.2056E-04 + 107.5 0.2278E-04 + 110.0 0.2474E-04 + 112.5 0.2588E-04 + 115.0 0.2744E-04 + 117.5 0.2992E-04 + 120.0 0.3240E-04 + 122.5 0.3335E-04 + 125.0 0.3324E-04 + 127.5 0.3343E-04 + 130.0 0.3451E-04 + 132.5 0.3613E-04 + 135.0 0.3783E-04 + 137.5 0.4010E-04 + 140.0 0.4281E-04 + 142.5 0.4557E-04 + 145.0 0.4781E-04 + 147.5 0.4930E-04 + 150.0 0.4997E-04 + 152.5 0.4978E-04 + 155.0 0.5003E-04 + 157.5 0.5155E-04 + 160.0 0.5415E-04 + 162.5 0.5615E-04 + 165.0 0.5711E-04 + 167.5 0.5915E-04 + 170.0 0.6297E-04 + 172.5 0.6685E-04 + 175.0 0.6678E-04 + 177.5 0.6329E-04 + 180.0 0.6145E-04 diff --git a/Inputs/CrossSection/flat.txt b/Inputs/CrossSection/flat.txt index 3968c9853205e927f131021c5af5de2c8b5c0619..8ff95131d31b76632f13d5a153b2f52cd12614de 100644 --- a/Inputs/CrossSection/flat.txt +++ b/Inputs/CrossSection/flat.txt @@ -1,1800 +1,1801 @@ - 0. 1.8497963 - 0.100000001 1.85060704 - 0.200000003 1.85318649 - 0.300000012 1.85738742 - 0.400000006 1.86328328 - 0.5 1.87087452 - 0.600000024 1.88008702 - 0.699999988 1.890921 - 0.800000012 1.90337622 - 0.899999976 1.91730535 - 1. 1.93278253 - 1.10000002 1.9497335 - 1.20000005 1.96815848 - 1.29999995 1.98791003 - 1.39999998 2.00898838 - 1.5 2.03131938 - 1.60000002 2.0548296 - 1.70000005 2.07951927 - 1.79999995 2.10524058 - 1.89999998 2.13199353 - 2. 2.15963101 - 2.0999999 2.18807912 - 2.20000005 2.21741176 - 2.29999995 2.247334 - 2.4000001 2.27791953 - 2.5 2.309021 - 2.5999999 2.34049082 - 2.70000005 2.37240314 - 2.79999995 2.40453625 - 2.9000001 2.43689036 - 3. 2.46924472 - 3.0999999 2.50167274 - 3.20000005 2.53395343 - 3.29999995 2.56608653 - 3.4000001 2.59792495 - 3.5 2.62946844 - 3.5999999 2.66049623 - 3.70000005 2.69100809 - 3.79999995 2.72093034 - 3.9000001 2.75011539 - 4. 2.7785635 - 4.0999999 2.80612755 - 4.19999981 2.83280683 - 4.30000019 2.85845447 - 4.4000001 2.88299656 - 4.5 2.90635943 - 4.5999999 2.92854309 - 4.69999981 2.94940019 - 4.80000019 2.96893072 - 4.9000001 2.98706079 - 5. 3.00371718 - 5.0999999 3.0188992 - 5.19999981 3.03253388 - 5.30000019 3.04454708 - 5.4000001 3.05486488 - 5.5 3.06356144 - 5.5999999 3.07056308 - 5.69999981 3.07579589 - 5.80000019 3.07925963 - 5.9000001 3.08095479 - 6. 3.08080745 - 6.0999999 3.07889128 - 6.19999981 3.07513261 - 6.30000019 3.06960487 - 6.4000001 3.06216121 - 6.5 3.05294871 - 6.5999999 3.04189372 - 6.69999981 3.02907014 - 6.80000019 3.01447749 - 6.9000001 2.99804211 - 7. 2.97991204 - 7.0999999 2.96001315 - 7.19999981 2.93841887 - 7.30000019 2.91512966 - 7.4000001 2.89029288 - 7.5 2.86383462 - 7.5999999 2.83582854 - 7.69999981 2.80627489 - 7.80000019 2.77532077 - 7.9000001 2.74289298 - 8. 2.70913839 - 8.10000038 2.67413068 - 8.19999981 2.63779664 - 8.30000019 2.60035706 - 8.39999962 2.56173825 - 8.5 2.52208757 - 8.60000038 2.48140526 - 8.69999981 2.43976474 - 8.80000019 2.39723992 - 8.89999962 2.35397816 - 9. 2.30990529 - 9.10000038 2.26516962 - 9.19999981 2.21991754 - 9.30000019 2.17400241 - 9.39999962 2.12771916 - 9.5 2.08099318 - 9.60000038 2.0339725 - 9.69999981 1.98665726 - 9.80000019 1.93912077 - 9.89999962 1.89151049 - 10. 1.84382665 - 10.1000004 1.7961427 - 10.1999998 1.7486062 - 10.3000002 1.70114338 - 10.3999996 1.6539017 - 10.5 1.60688114 - 10.6000004 1.56022906 - 10.6999998 1.51394534 - 10.8000002 1.468104 - 10.8999996 1.42270482 - 11. 1.37789512 - 11.1000004 1.33367515 - 11.1999998 1.29011858 - 11.3000002 1.24729872 - 11.3999996 1.20514238 - 11.5 1.16379666 - 11.6000004 1.12326169 - 11.6999998 1.08361101 - 11.8000002 1.04491866 - 11.8999996 1.00711048 - 12. 0.970260501 - 12.1000004 0.93436861 - 12.1999998 0.899582207 - 12.3000002 0.86582762 - 12.3999996 0.833104789 - 12.5 0.801487505 - 12.6000004 0.770975709 - 12.6999998 0.741643071 - 12.8000002 0.71341598 - 12.8999996 0.686345935 - 13. 0.660433054 - 13.1000004 0.635684609 - 13.1999998 0.612107933 - 13.3000002 0.589703143 - 13.3999996 0.56847018 - 13.5 0.548401713 - 13.6000004 0.529505014 - 13.6999998 0.511772811 - 13.8000002 0.495182931 - 13.8999996 0.479735434 - 14. 0.465422869 - 14.1000004 0.452223212 - 14.1999998 0.440129012 - 14.3000002 0.429110885 - 14.3999996 0.419161379 - 14.5 0.410265803 - 14.6000004 0.402387261 - 14.6999998 0.395511061 - 14.8000002 0.389615029 - 14.8999996 0.384677142 - 15. 0.380660474 - 15.1000004 0.377550364 - 15.1999998 0.375309885 - 15.3000002 0.373916954 - 15.3999996 0.373342097 - 15.5 0.373541087 - 15.6000004 0.374506563 - 15.6999998 0.376186907 - 15.8000002 0.378560036 - 15.8999996 0.381596506 - 16. 0.385252029 - 16.1000004 0.389504492 - 16.2000008 0.394317091 - 16.2999992 0.399660349 - 16.3999996 0.405497402 - 16.5 0.411791384 - 16.6000004 0.418520182 - 16.7000008 0.4256396 - 16.7999992 0.433120161 - 16.8999996 0.440932333 - 17. 0.449046731 - 17.1000004 0.457426399 - 17.2000008 0.466041952 - 17.2999992 0.474856436 - 17.3999996 0.483855218 - 17.5 0.492986649 - 17.6000004 0.5022434 - 17.7000008 0.511581123 - 17.7999992 0.520985305 - 17.8999996 0.530411541 - 18. 0.5398525 - 18.1000004 0.549271345 - 18.2000008 0.558646023 - 18.2999992 0.56794697 - 18.3999996 0.577166796 - 18.5 0.586268783 - 18.6000004 0.59523803 - 18.7000008 0.604045212 - 18.7999992 0.612690151 - 18.8999996 0.621136248 - 19. 0.629375875 - 19.1000004 0.637387097 - 19.2000008 0.645155013 - 19.2999992 0.652665079 - 19.3999996 0.659909785 - 19.5 0.666874409 - 19.6000004 0.673544288 - 19.7000008 0.67990458 - 19.7999992 0.685955405 - 19.8999996 0.691681862 - 20. 0.697076678 - 20.1000004 0.702132523 - 20.2000008 0.706849337 - 20.2999992 0.711212337 - 20.3999996 0.715221643 - 20.5 0.718884528 - 20.6000004 0.722178936 - 20.7000008 0.7251122 - 20.7999992 0.72769171 - 20.8999996 0.729902685 - 21. 0.731759906 - 21.1000004 0.733256042 - 21.2000008 0.734391034 - 21.2999992 0.735179603 - 21.3999996 0.735614419 - 21.5 0.735702813 - 21.6000004 0.735444903 - 21.7000008 0.734855294 - 21.7999992 0.733934045 - 21.8999996 0.732695937 - 22. 0.731133461 - 22.1000004 0.729261458 - 22.2000008 0.727087319 - 22.2999992 0.724625766 - 22.3999996 0.72187674 - 22.5 0.718847692 - 22.6000004 0.715553284 - 22.7000008 0.712008297 - 22.7999992 0.708212733 - 22.8999996 0.704173982 - 23. 0.699914157 - 23.1000004 0.695440531 - 23.2000008 0.690760612 - 23.2999992 0.685881674 - 23.3999996 0.68082583 - 23.5 0.675593138 - 23.6000004 0.670198321 - 23.7000008 0.664648652 - 23.7999992 0.658966422 - 23.8999996 0.653151512 - 24. 0.647218645 - 24.1000004 0.641182601 - 24.2000008 0.635050774 - 24.2999992 0.628830492 - 24.3999996 0.62253648 - 24.5 0.616176188 - 24.6000004 0.609764338 - 24.7000008 0.603308201 - 24.7999992 0.596822619 - 24.8999996 0.590307474 - 25. 0.583785057 - 25.1000004 0.577247858 - 25.2000008 0.570725441 - 25.2999992 0.564210355 - 25.3999996 0.557717323 - 25.5 0.551246524 - 25.6000004 0.544819832 - 25.7000008 0.538444817 - 25.7999992 0.532113969 - 25.8999996 0.52584213 - 26. 0.519643962 - 26.1000004 0.513512075 - 26.2000008 0.507461369 - 26.2999992 0.501491606 - 26.3999996 0.495617777 - 26.5 0.489839673 - 26.6000004 0.484157383 - 26.7000008 0.478578299 - 26.7999992 0.473117143 - 26.8999996 0.467759162 - 27. 0.462519079 - 27.1000004 0.457396924 - 27.2000008 0.452400059 - 27.2999992 0.447528511 - 27.3999996 0.442782223 - 27.5 0.438161254 - 27.6000004 0.433672905 - 27.7000008 0.429309875 - 27.7999992 0.425086856 - 27.8999996 0.420996517 - 28. 0.417031437 - 28.1000004 0.413206398 - 28.2000008 0.40951404 - 28.2999992 0.405954331 - 28.3999996 0.402519912 - 28.5 0.399225503 - 28.6000004 0.396056414 - 28.7000008 0.393020004 - 28.7999992 0.390101463 - 28.8999996 0.387315631 - 29. 0.384655029 - 29.1000004 0.382112384 - 29.2000008 0.379680276 - 29.2999992 0.377373457 - 29.3999996 0.375177205 - 29.5 0.373091489 - 29.6000004 0.37111634 - 29.7000008 0.369244367 - 29.7999992 0.367468208 - 29.8999996 0.365795195 - 30. 0.364210635 - 30.1000004 0.36272189 - 30.2000008 0.361314237 - 30.2999992 0.359995008 - 30.3999996 0.358749479 - 30.5 0.357585013 - 30.6000004 0.356494248 - 30.7000008 0.355462462 - 30.7999992 0.354496986 - 30.8999996 0.35359785 - 31. 0.35274294 - 31.1000004 0.35194698 - 31.2000008 0.351195216 - 31.2999992 0.350487739 - 31.3999996 0.349824399 - 31.5 0.349190593 - 31.6000004 0.348593622 - 31.7000008 0.348018765 - 31.7999992 0.347466022 - 31.8999996 0.346942753 - 32. 0.346426845 - 32.0999985 0.345925689 - 32.2000008 0.345431894 - 32.2999992 0.344952852 - 32.4000015 0.344466418 - 32.5 0.343980014 - 32.5999985 0.34348622 - 32.7000008 0.342992425 - 32.7999992 0.342483908 - 32.9000015 0.341960639 - 33. 0.341415226 - 33.0999985 0.340855122 - 33.2000008 0.340272903 - 33.2999992 0.339668542 - 33.4000015 0.339034736 - 33.5 0.338371456 - 33.5999985 0.33767128 - 33.7000008 0.336941659 - 33.7999992 0.336175174 - 33.9000015 0.335371822 - 34. 0.334524274 - 34.0999985 0.33363989 - 34.2000008 0.332711279 - 34.2999992 0.331738442 - 34.4000015 0.330713987 - 34.5 0.329652727 - 34.5999985 0.328539848 - 34.7000008 0.327375382 - 34.7999992 0.326166719 - 34.9000015 0.324906439 - 35. 0.3235946 - 35.0999985 0.322231144 - 35.2000008 0.32081607 - 35.2999992 0.319349468 - 35.4000015 0.317831248 - 35.5 0.316261441 - 35.5999985 0.314640015 - 35.7000008 0.312974423 - 35.7999992 0.311249822 - 35.9000015 0.309473664 - 36. 0.307653278 - 36.0999985 0.305781305 - 36.2000008 0.303857714 - 36.2999992 0.301889926 - 36.4000015 0.299870551 - 36.5 0.297806948 - 36.5999985 0.29569912 - 36.7000008 0.293547094 - 36.7999992 0.291350812 - 36.9000015 0.289110363 - 37. 0.286833048 - 37.0999985 0.284511477 - 37.2000008 0.282160431 - 37.2999992 0.279765189 - 37.4000015 0.277340472 - 37.5 0.274878889 - 37.5999985 0.272380471 - 37.7000008 0.26985994 - 37.7999992 0.267309904 - 37.9000015 0.264730394 - 38. 0.262121409 - 38.0999985 0.259490341 - 38.2000008 0.25683713 - 38.2999992 0.254169196 - 38.4000015 0.251479149 - 38.5 0.248766959 - 38.5999985 0.246040076 - 38.7000008 0.243305817 - 38.7999992 0.240556791 - 38.9000015 0.237800404 - 39. 0.23502931 - 39.0999985 0.232258171 - 39.2000008 0.229472324 - 39.2999992 0.226693824 - 39.4000015 0.223907962 - 39.5 0.221122101 - 39.5999985 0.218343616 - 39.7000008 0.215557754 - 39.7999992 0.21278663 - 39.9000015 0.21001552 - 40. 0.207259133 - 40.0999985 0.204502761 - 40.2000008 0.201761112 - 40.2999992 0.199034214 - 40.4000015 0.196322054 - 40.5 0.193624645 - 40.5999985 0.19094196 - 40.7000008 0.188274011 - 40.7999992 0.185628191 - 40.9000015 0.182997108 - 41. 0.180388108 - 41.0999985 0.177808627 - 41.2000008 0.175243869 - 41.2999992 0.172708571 - 41.4000015 0.170195401 - 41.5 0.167711705 - 41.5999985 0.165250137 - 41.7000008 0.162825406 - 41.7999992 0.160422787 - 41.9000015 0.158042282 - 42. 0.155698612 - 42.0999985 0.153391808 - 42.2000008 0.151107103 - 42.2999992 0.148859262 - 42.4000015 0.146640897 - 42.5 0.144452006 - 42.5999985 0.142299965 - 42.7000008 0.140177399 - 42.7999992 0.138091683 - 42.9000015 0.136035457 - 43. 0.134023458 - 43.0999985 0.132033542 - 43.2000008 0.130087867 - 43.2999992 0.128171667 - 43.4000015 0.126284942 - 43.5 0.124442443 - 43.5999985 0.122629426 - 43.7000008 0.120853253 - 43.7999992 0.119106568 - 43.9000015 0.117396735 - 44. 0.115716368 - 44.0999985 0.114080228 - 44.2000008 0.112466194 - 44.2999992 0.110889018 - 44.4000015 0.109348685 - 44.5 0.107837833 - 44.5999985 0.106356464 - 44.7000008 0.104911946 - 44.7999992 0.103496902 - 44.9000015 0.102111347 - 45. 0.100762635 - 45.0999985 0.0994360372 - 45.2000008 0.0981462896 - 45.2999992 0.0968786478 - 45.4000015 0.095640488 - 45.5 0.0944318101 - 45.5999985 0.0932526067 - 45.7000008 0.0921028927 - 45.7999992 0.0909752771 - 45.9000015 0.0898697823 - 46. 0.0887937546 - 46.0999985 0.0877398476 - 46.2000008 0.0867080539 - 46.2999992 0.0857057273 - 46.4000015 0.0847255215 - 46.5 0.0837600529 - 46.5999985 0.0828240588 - 46.7000008 0.0819028094 - 46.7999992 0.0810036659 - 46.9000015 0.0801266357 - 47. 0.0792643502 - 47.0999985 0.078416802 - 47.2000008 0.0775913596 - 47.2999992 0.0767806545 - 47.4000015 0.0759920701 - 47.5 0.075210847 - 47.5999985 0.0744517371 - 47.7000008 0.0736999959 - 47.7999992 0.0729659498 - 47.9000015 0.0722436905 - 48. 0.0715339556 - 48.0999985 0.070836015 - 48.2000008 0.0701491311 - 48.2999992 0.0694733039 - 48.4000015 0.0688077882 - 48.5 0.0681511238 - 48.5999985 0.0675040334 - 48.7000008 0.0668650568 - 48.7999992 0.0662349239 - 48.9000015 0.0656121597 - 49. 0.0649960265 - 49.0999985 0.0643865317 - 49.2000008 0.063783668 - 49.2999992 0.0631866977 - 49.4000015 0.0625948831 - 49.5 0.0620074943 - 49.5999985 0.0614252612 - 49.7000008 0.0608474575 - 49.7999992 0.0602733307 - 49.9000015 0.0597028956 - 50. 0.0591354072 - 50.0999985 0.0585708618 - 50.2000008 0.0580092706 - 50.2999992 0.0574498884 - 50.4000015 0.0568927154 - 50.5 0.0563377552 - 50.5999985 0.0557842627 - 50.7000008 0.0552322529 - 50.7999992 0.0546817146 - 50.9000015 0.0541326478 - 51. 0.0535843223 - 51.0999985 0.0530367307 - 51.2000008 0.0524906144 - 51.2999992 0.0519444942 - 51.4000015 0.0513991155 - 51.5 0.0508544743 - 51.5999985 0.0503098331 - 51.7000008 0.0497659221 - 51.7999992 0.0492227562 - 51.9000015 0.0486795865 - 52. 0.0481364168 - 52.0999985 0.0475939848 - 52.2000008 0.0470515527 - 52.2999992 0.0465098582 - 52.4000015 0.0459689014 - 52.5 0.0454279408 - 52.5999985 0.0448877215 - 52.7000008 0.0443474986 - 52.7999992 0.0438087508 - 52.9000015 0.0432700068 - 53. 0.0427327342 - 53.0999985 0.0421961993 - 53.2000008 0.0416611359 - 53.2999992 0.04112681 - 53.4000015 0.0405932218 - 53.5 0.0400618464 - 53.5999985 0.0395319425 - 53.7000008 0.0390035138 - 53.7999992 0.0384765603 - 53.9000015 0.0379518159 - 54. 0.0374292806 - 54.0999985 0.0369089581 - 54.2000008 0.0363915861 - 54.2999992 0.0358764231 - 54.4000015 0.035363473 - 54.5 0.0348542035 - 54.5999985 0.0343471467 - 54.7000008 0.0338437781 - 54.7999992 0.03334409 - 54.9000015 0.0328473523 - 55. 0.0323550366 - 55.0999985 0.0318664052 - 55.2000008 0.031381458 - 55.2999992 0.030900199 - 55.4000015 0.0304240957 - 55.5 0.0299524162 - 55.5999985 0.0294851586 - 55.7000008 0.0290230606 - 55.7999992 0.0285653826 - 55.9000015 0.0281136017 - 56. 0.0276662428 - 56.0999985 0.0272247791 - 56.2000008 0.026788475 - 56.2999992 0.026358068 - 56.4000015 0.0259335563 - 56.5 0.0255142022 - 56.5999985 0.0251014829 - 56.7000008 0.0246946588 - 56.7999992 0.0242944676 - 56.9000015 0.0239009093 - 57. 0.0235132482 - 57.0999985 0.023132218 - 57.2000008 0.022757085 - 57.2999992 0.0223900601 - 57.4000015 0.0220289286 - 57.5 0.0216744319 - 57.5999985 0.0213273056 - 57.7000008 0.0209875479 - 57.7999992 0.020654425 - 57.9000015 0.0203286707 - 58. 0.0200095493 - 58.0999985 0.0196977984 - 58.2000008 0.019393418 - 58.2999992 0.019096408 - 58.4000015 0.0188067667 - 58.5 0.0185237583 - 58.5999985 0.0182488579 - 58.7000008 0.0179805886 - 58.7999992 0.0177196916 - 58.9000015 0.017466899 - 59. 0.017220743 - 59.0999985 0.0169819538 - 59.2000008 0.0167497993 - 59.2999992 0.016525751 - 59.4000015 0.0163083356 - 59.5 0.0160982907 - 59.5999985 0.0158956144 - 59.7000008 0.0156995729 - 59.7999992 0.0155109018 - 59.9000015 0.0153288618 - 60. 0.0151541941 - 60.0999985 0.0149854207 - 60.2000008 0.014824017 - 60.2999992 0.0146692479 - 60.4000015 0.0145211108 - 60.5 0.0143796066 - 60.5999985 0.0142439995 - 60.7000008 0.014115761 - 60.7999992 0.0139926821 - 60.9000015 0.013876236 - 61. 0.0137656862 - 61.0999985 0.0136610316 - 61.2000008 0.0135622742 - 61.2999992 0.0134694111 - 61.4000015 0.0133817084 - 61.5 0.013299902 - 61.5999985 0.0132232541 - 61.7000008 0.0131517649 - 61.7999992 0.0130854351 - 61.9000015 0.0130242631 - 62. 0.0129675148 - 62.0999985 0.0129159242 - 62.2000008 0.0128687574 - 62.2999992 0.0128260106 - 62.4000015 0.0127876876 - 62.5 0.0127537847 - 62.5999985 0.0127235679 - 62.7000008 0.0126977721 - 62.7999992 0.0126756635 - 62.9000015 0.0126572382 - 63. 0.0126424981 - 63.0999985 0.0126307057 - 63.2000008 0.0126225986 - 63.2999992 0.01261744 - 63.4000015 0.012615229 - 63.5 0.0126159657 - 63.5999985 0.0126196509 - 63.7000008 0.0126255471 - 63.7999992 0.012634391 - 63.9000015 0.0126454458 - 64. 0.0126587125 - 64.0999985 0.0126741892 - 64.1999969 0.0126911392 - 64.3000031 0.0127110388 - 64.4000015 0.0127316751 - 64.5 0.0127545223 - 64.5999985 0.0127788428 - 64.6999969 0.0128039001 - 64.8000031 0.0128311701 - 64.9000015 0.0128591759 - 65. 0.012888656 - 65.0999985 0.0129181352 - 65.1999969 0.0129498271 - 65.3000031 0.0129815182 - 65.4000015 0.0130139459 - 65.5 0.0130471103 - 65.5999985 0.0130802756 - 65.6999969 0.0131149152 - 65.8000031 0.0131488163 - 65.9000015 0.0131834559 - 66. 0.0132180946 - 66.0999985 0.0132534709 - 66.1999969 0.0132881096 - 66.3000031 0.0133227492 - 66.4000015 0.0133581245 - 66.5 0.0133920265 - 66.5999985 0.0134266661 - 66.6999969 0.0134605682 - 66.8000031 0.0134944692 - 66.9000015 0.0135276346 - 67. 0.0135607999 - 67.0999985 0.0135932276 - 67.1999969 0.0136249186 - 67.3000031 0.0136566097 - 67.4000015 0.0136868274 - 67.5 0.0137170432 - 67.5999985 0.0137465242 - 67.6999969 0.0137752667 - 67.8000031 0.0138032725 - 67.9000015 0.0138305416 - 68. 0.0138563365 - 68.0999985 0.0138821322 - 68.1999969 0.0139071904 - 68.3000031 0.0139307734 - 68.4000015 0.0139543572 - 68.5 0.0139764678 - 68.5999985 0.0139978407 - 68.6999969 0.0140184769 - 68.8000031 0.0140383756 - 68.9000015 0.0140575375 - 69. 0.0140752262 - 69.0999985 0.0140921772 - 69.1999969 0.0141083905 - 69.3000031 0.0141238682 - 69.4000015 0.0141386082 - 69.5 0.0141526107 - 69.5999985 0.0141658764 - 69.6999969 0.0141776688 - 69.8000031 0.0141894603 - 69.9000015 0.0141997784 - 70. 0.0142100966 - 70.0999985 0.0142189413 - 70.1999969 0.0142277852 - 70.3000031 0.0142351547 - 70.4000015 0.0142425252 - 70.5 0.0142484214 - 70.5999985 0.0142543167 - 70.6999969 0.0142594753 - 70.8000031 0.0142646348 - 70.9000015 0.0142683191 - 71. 0.0142720044 - 71.0999985 0.0142749529 - 71.1999969 0.0142779006 - 71.3000031 0.0142801115 - 71.4000015 0.0142815858 - 71.5 0.0142830592 - 71.5999985 0.0142837968 - 71.6999969 0.0142845334 - 71.8000031 0.0142845334 - 71.9000015 0.0142845334 - 72. 0.0142845334 - 72.0999985 0.0142837968 - 72.1999969 0.0142830592 - 72.3000031 0.0142823225 - 72.4000015 0.0142815858 - 72.5 0.0142801115 - 72.5999985 0.0142793749 - 72.6999969 0.0142779006 - 72.8000031 0.0142764263 - 72.9000015 0.0142756896 - 73. 0.0142742153 - 73.0999985 0.014272741 - 73.1999969 0.0142720044 - 73.3000031 0.0142705301 - 73.4000015 0.0142697934 - 73.5 0.0142690567 - 73.5999985 0.0142683191 - 73.6999969 0.0142675824 - 73.8000031 0.0142675824 - 73.9000015 0.0142675824 - 74. 0.0142675824 - 74.0999985 0.0142675824 - 74.1999969 0.0142683191 - 74.3000031 0.0142697934 - 74.4000015 0.0142705301 - 74.5 0.0142720044 - 74.5999985 0.0142742153 - 74.6999969 0.0142764263 - 74.8000031 0.0142786372 - 74.9000015 0.0142815858 - 75. 0.0142845334 - 75.0999985 0.0142882187 - 75.1999969 0.0142919039 - 75.3000031 0.0142963259 - 75.4000015 0.0143007478 - 75.5 0.0143059064 - 75.5999985 0.0143110659 - 75.6999969 0.0143169621 - 75.8000031 0.0143228583 - 75.9000015 0.0143294912 - 76. 0.0143361241 - 76.0999985 0.0143434936 - 76.1999969 0.0143508641 - 76.3000031 0.0143589713 - 76.4000015 0.0143670775 - 76.5 0.0143759213 - 76.5999985 0.0143847652 - 76.6999969 0.0143936099 - 76.8000031 0.0144031914 - 76.9000015 0.0144135095 - 77. 0.01442309 - 77.0999985 0.0144341439 - 77.1999969 0.014444462 - 77.3000031 0.0144555178 - 77.4000015 0.0144665726 - 77.5 0.0144776283 - 77.5999985 0.0144894207 - 77.6999969 0.0145012122 - 77.8000031 0.0145130046 - 77.9000015 0.0145255327 - 78. 0.0145373251 - 78.0999985 0.0145498533 - 78.1999969 0.0145623833 - 78.3000031 0.0145749114 - 78.4000015 0.0145874415 - 78.5 0.0145999696 - 78.5999985 0.0146124996 - 78.6999969 0.0146250278 - 78.8000031 0.0146375578 - 78.9000015 0.0146500859 - 79. 0.0146626141 - 79.0999985 0.0146751441 - 79.1999969 0.0146876723 - 79.3000031 0.0146994647 - 79.4000015 0.0147119947 - 79.5 0.0147237862 - 79.5999985 0.0147355786 - 79.6999969 0.0147466324 - 79.8000031 0.0147584248 - 79.9000015 0.0147694787 - 80. 0.0147805354 - 80.0999985 0.0147908526 - 80.1999969 0.0148011707 - 80.3000031 0.0148114888 - 80.4000015 0.0148210693 - 80.5 0.0148299132 - 80.5999985 0.0148394955 - 80.6999969 0.0148476018 - 80.8000031 0.0148564456 - 80.9000015 0.0148638161 - 81. 0.0148719233 - 81.0999985 0.0148785561 - 81.1999969 0.0148851881 - 81.3000031 0.0148910843 - 81.4000015 0.0148969805 - 81.5 0.01490214 - 81.5999985 0.0149072986 - 81.6999969 0.0149117205 - 81.8000031 0.0149154058 - 81.9000015 0.0149183543 - 82. 0.014921302 - 82.0999985 0.014923512 - 82.1999969 0.0149257239 - 82.3000031 0.0149264606 - 82.4000015 0.0149271982 - 82.5 0.0149279339 - 82.5999985 0.0149271982 - 82.6999969 0.0149264606 - 82.8000031 0.0149249863 - 82.9000015 0.0149227763 - 83. 0.0149205644 - 83.0999985 0.0149168801 - 83.1999969 0.0149139324 - 83.3000031 0.0149095105 - 83.4000015 0.01490435 - 83.5 0.0148991924 - 83.5999985 0.0148932962 - 83.6999969 0.0148874 - 83.8000031 0.0148800295 - 83.9000015 0.0148726599 - 84. 0.0148645537 - 84.0999985 0.0148564456 - 84.1999969 0.0148468651 - 84.3000031 0.0148372836 - 84.4000015 0.0148277031 - 84.5 0.0148166474 - 84.5999985 0.0148055935 - 84.6999969 0.0147945369 - 84.8000031 0.0147820087 - 84.9000015 0.0147694787 - 85. 0.0147569505 - 85.0999985 0.0147429481 - 85.1999969 0.0147296824 - 85.3000031 0.0147149423 - 85.4000015 0.0147002023 - 85.5 0.0146847246 - 85.5999985 0.0146692479 - 85.6999969 0.0146537703 - 85.8000031 0.0146368193 - 85.9000015 0.0146206059 - 86. 0.0146029172 - 86.0999985 0.0145859672 - 86.1999969 0.014567541 - 86.3000031 0.0145498533 - 86.4000015 0.0145314289 - 86.5 0.014512267 - 86.5999985 0.0144931041 - 86.6999969 0.0144739421 - 86.8000031 0.0144540444 - 86.9000015 0.0144341439 - 87. 0.0144142453 - 87.0999985 0.0143936099 - 87.1999969 0.0143729737 - 87.3000031 0.0143516008 - 87.4000015 0.0143309645 - 87.5 0.0143095916 - 87.5999985 0.0142882187 - 87.6999969 0.0142661082 - 87.8000031 0.0142439995 - 87.9000015 0.014221889 - 88. 0.0141997784 - 88.0999985 0.0141776688 - 88.1999969 0.0141548216 - 88.3000031 0.014132712 - 88.4000015 0.0141098648 - 88.5 0.0140870176 - 88.5999985 0.0140634337 - 88.6999969 0.0140405865 - 88.8000031 0.0140177403 - 88.9000015 0.0139941564 - 89. 0.0139705716 - 89.0999985 0.0139477244 - 89.1999969 0.0139241405 - 89.3000031 0.0139005575 - 89.4000015 0.0138769727 - 89.5 0.0138533888 - 89.5999985 0.013829805 - 89.6999969 0.0138054835 - 89.8000031 0.0137819005 - 89.9000015 0.0137583157 - 90. 0.0137339951 - 90.0999985 0.0137104103 - 90.1999969 0.0136860898 - 90.3000031 0.0136625059 - 90.4000015 0.0136381844 - 90.5 0.0136138638 - 90.5999985 0.013590279 - 90.6999969 0.0135659594 - 90.8000031 0.0135416379 - 90.9000015 0.0135173164 - 91. 0.0134929959 - 91.0999985 0.0134686744 - 91.1999969 0.0134443538 - 91.3000031 0.0134200333 - 91.4000015 0.0133957118 - 91.5 0.0133706536 - 91.5999985 0.0133463331 - 91.6999969 0.0133220116 - 91.8000031 0.0132969534 - 91.9000015 0.0132718952 - 92. 0.0132468371 - 92.0999985 0.0132225174 - 92.1999969 0.0131974593 - 92.3000031 0.0131716635 - 92.4000015 0.0131466053 - 92.5 0.0131215481 - 92.5999985 0.0130957533 - 92.6999969 0.0130699575 - 92.8000031 0.0130448993 - 92.9000015 0.0130191045 - 93. 0.012992573 - 93.0999985 0.0129667781 - 93.1999969 0.0129402457 - 93.3000031 0.0129144508 - 93.4000015 0.0128871817 - 93.5 0.0128606502 - 93.5999985 0.0128341177 - 93.6999969 0.0128068486 - 93.8000031 0.0127795804 - 93.9000015 0.0127523113 - 94. 0.0127250422 - 94.0999985 0.0126970354 - 94.1999969 0.0126690306 - 94.3000031 0.0126410238 - 94.4000015 0.012613018 - 94.5 0.0125842746 - 94.5999985 0.0125555322 - 94.6999969 0.0125267887 - 94.8000031 0.0124973087 - 94.9000015 0.0124685653 - 95. 0.0124383494 - 95.0999985 0.0124088693 - 95.1999969 0.0123793883 - 95.3000031 0.0123491716 - 95.4000015 0.0123182181 - 95.5 0.0122880004 - 95.5999985 0.012257047 - 95.6999969 0.0122260926 - 95.8000031 0.0121951392 - 95.9000015 0.0121634481 - 96. 0.0121317562 - 96.0999985 0.0121000661 - 96.1999969 0.012068375 - 96.3000031 0.0120359464 - 96.4000015 0.0120035186 - 96.5 0.0119710909 - 96.5999985 0.0119386632 - 96.6999969 0.0119054979 - 96.8000031 0.0118730702 - 96.9000015 0.0118399048 - 97. 0.0118060028 - 97.0999985 0.0117728384 - 97.1999969 0.0117389364 - 97.3000031 0.0117050335 - 97.4000015 0.0116711315 - 97.5 0.0116372304 - 97.5999985 0.0116033275 - 97.6999969 0.0115694255 - 97.8000031 0.0115347868 - 97.9000015 0.0115001481 - 98. 0.0114655085 - 98.0999985 0.0114316074 - 98.1999969 0.0113969678 - 98.3000031 0.0113623291 - 98.4000015 0.0113276895 - 98.5 0.0112930508 - 98.5999985 0.0112576745 - 98.6999969 0.0112230359 - 98.8000031 0.0111883972 - 98.9000015 0.0111537576 - 99. 0.0111191189 - 99.0999985 0.0110844802 - 99.1999969 0.0110498406 - 99.3000031 0.0110152019 - 99.4000015 0.0109805632 - 99.5 0.0109466612 - 99.5999985 0.0109120216 - 99.6999969 0.0108781196 - 99.8000031 0.0108434809 - 99.9000015 0.0108095789 - 100. 0.0107756769 - 100.099998 0.0107417749 - 100.199997 0.0107086096 - 100.300003 0.0106747076 - 100.400002 0.0106415432 - 100.5 0.0106083779 - 100.599998 0.0105759501 - 100.699997 0.0105427848 - 100.800003 0.0105103571 - 100.900002 0.0104779284 - 101. 0.0104462374 - 101.099998 0.0104145473 - 101.199997 0.0103828562 - 101.300003 0.0103511643 - 101.400002 0.0103202108 - 101.5 0.0102892574 - 101.599998 0.010258303 - 101.699997 0.0102280853 - 101.800003 0.0101978686 - 101.900002 0.0101683894 - 102. 0.0101389084 - 102.099998 0.0101094283 - 102.199997 0.0100806858 - 102.300003 0.0100519434 - 102.400002 0.0100232 - 102.5 0.00999519322 - 102.599998 0.00996718835 - 102.699997 0.00993991923 - 102.800003 0.0099126501 - 102.900002 0.00988538098 - 103. 0.00985884946 - 103.099998 0.00983231701 - 103.199997 0.00980652217 - 103.300003 0.0097807264 - 103.400002 0.00975566823 - 103.5 0.009730611 - 103.599998 0.00970555283 - 103.699997 0.00968049467 - 103.800003 0.00965617318 - 103.900002 0.00963259023 - 104. 0.00960826874 - 104.099998 0.00958542153 - 104.199997 0.00956183765 - 104.300003 0.00953899045 - 104.400002 0.00951614417 - 104.5 0.00949329697 - 104.599998 0.00947118644 - 104.699997 0.00944907684 - 104.800003 0.00942696631 - 104.900002 0.00940559432 - 105. 0.00938348379 - 105.099998 0.00936211087 - 105.199997 0.00934147462 - 105.300003 0.0093201017 - 105.400002 0.00929946546 - 105.5 0.00927883014 - 105.599998 0.0092581939 - 105.699997 0.00923755765 - 105.800003 0.0092169214 - 105.900002 0.00919628516 - 106. 0.00917638745 - 106.099998 0.00915575121 - 106.199997 0.00913585164 - 106.300003 0.00911521539 - 106.400002 0.00909531675 - 106.5 0.00907541718 - 106.599998 0.00905478187 - 106.699997 0.00903488323 - 106.800003 0.00901424699 - 106.900002 0.00899434742 - 107. 0.00897371117 - 107.099998 0.00895381346 - 107.199997 0.00893317722 - 107.300003 0.00891254097 - 107.400002 0.00889116805 - 107.5 0.0088705318 - 107.599998 0.00884989556 - 107.699997 0.00882852357 - 107.800003 0.00880714972 - 107.900002 0.00878504012 - 108. 0.00876366626 - 108.099998 0.00874155667 - 108.199997 0.00871944707 - 108.300003 0.00869733747 - 108.400002 0.00867449027 - 108.5 0.00865164306 - 108.599998 0.00862805825 - 108.699997 0.00860521197 - 108.800003 0.00858089142 - 108.900002 0.0085573066 - 109. 0.00853298604 - 109.099998 0.00850866456 - 109.199997 0.00848360732 - 109.300003 0.00845854916 - 109.400002 0.00843275338 - 109.5 0.00840695854 - 109.599998 0.00838116463 - 109.699997 0.00835463218 - 109.800003 0.00832809974 - 109.900002 0.00830083061 - 110. 0.00827356242 - 110.099998 0.00824555568 - 110.199997 0.00821754988 - 110.300003 0.00818954315 - 110.400002 0.0081608016 - 110.5 0.00813132059 - 110.599998 0.00810257811 - 110.699997 0.00807236042 - 110.800003 0.00804288127 - 110.900002 0.00801266357 - 111. 0.00798171014 - 111.099998 0.00795075577 - 111.199997 0.00791980233 - 111.300003 0.00788811129 - 111.400002 0.00785715692 - 111.5 0.0078247292 - 111.599998 0.00779230101 - 111.699997 0.00775987282 - 111.800003 0.00772744464 - 111.900002 0.00769501692 - 112. 0.00766185205 - 112.099998 0.00762794958 - 112.199997 0.00759478519 - 112.300003 0.00756088318 - 112.400002 0.00752771785 - 112.5 0.00749381538 - 112.599998 0.00745917717 - 112.699997 0.0074252747 - 112.800003 0.00739063555 - 112.900002 0.00735666044 - 113. 0.00732224248 - 113.099998 0.00728775095 - 113.199997 0.00725325895 - 113.300003 0.00721876742 - 113.400002 0.00718420232 - 113.5 0.00714971079 - 113.599998 0.00711521879 - 113.699997 0.00708080083 - 113.800003 0.00704645691 - 113.900002 0.00701218657 - 114. 0.00697806338 - 114.099998 0.00694401423 - 114.199997 0.00691011176 - 114.300003 0.00687635737 - 114.400002 0.0068428237 - 114.5 0.00680943765 - 114.599998 0.00677627278 - 114.699997 0.00674332865 - 114.800003 0.0067106057 - 114.900002 0.00667817798 - 115. 0.00664597098 - 115.099998 0.00661405921 - 115.199997 0.00658251531 - 115.300003 0.00655126665 - 115.400002 0.00652031275 - 115.5 0.00648972718 - 115.599998 0.00645950995 - 115.699997 0.00642966153 - 115.800003 0.00640025549 - 115.900002 0.00637121731 - 116. 0.00634254841 - 116.099998 0.006314395 - 116.199997 0.00628660992 - 116.300003 0.00625934079 - 116.400002 0.00623244047 - 116.5 0.00620612921 - 116.599998 0.00618018722 - 116.699997 0.00615476072 - 116.800003 0.00612985017 - 116.900002 0.0061054551 - 117. 0.00608157646 - 117.099998 0.00605813973 - 117.199997 0.00603529299 - 117.300003 0.00601288816 - 117.400002 0.00599107286 - 117.5 0.00596977351 - 117.599998 0.00594899058 - 117.699997 0.00592872268 - 117.800003 0.00590904476 - 117.900002 0.00588980922 - 118. 0.00587116275 - 118.099998 0.00585303316 - 118.199997 0.00583541859 - 118.300003 0.00581832044 - 118.400002 0.00580173777 - 118.5 0.00578567106 - 118.599998 0.0057701203 - 118.699997 0.0057550855 - 118.800003 0.00574049307 - 118.900002 0.0057264166 - 119. 0.00571278157 - 119.099998 0.00569958938 - 119.199997 0.00568691269 - 119.300003 0.00567467883 - 119.400002 0.00566281285 - 119.5 0.00565138925 - 119.599998 0.00564040802 - 119.699997 0.00562972203 - 119.800003 0.00561947748 - 119.900002 0.00560960174 - 120. 0.0056000948 - 120.099998 0.00559088215 - 120.199997 0.00558196427 - 120.300003 0.00557334162 - 120.400002 0.00556501281 - 120.5 0.00555697968 - 120.599998 0.00554916775 - 120.699997 0.00554150296 - 120.800003 0.00553413294 - 120.900002 0.00552691007 - 121. 0.00551990885 - 121.099998 0.00551298121 - 121.199997 0.00550620072 - 121.300003 0.0054994938 - 121.400002 0.00549293449 - 121.5 0.00548637519 - 121.599998 0.00547988992 - 121.699997 0.00547347777 - 121.800003 0.00546699204 - 121.900002 0.00546050677 - 122. 0.00545394747 - 122.099998 0.00544738816 - 122.199997 0.00544075528 - 122.300003 0.00543397432 - 122.400002 0.00542704668 - 122.5 0.005420045 - 122.599998 0.00541289663 - 122.699997 0.00540552661 - 122.800003 0.0053979354 - 122.900002 0.00539019704 - 123. 0.00538216345 - 123.099998 0.00537390914 - 123.199997 0.00536536006 - 123.300003 0.0053565898 - 123.400002 0.00534745073 - 123.5 0.00533809094 - 123.599998 0.00532828877 - 123.699997 0.0053181923 - 123.800003 0.00530780014 - 123.900002 0.00529696653 - 124. 0.00528576365 - 124.099998 0.0052741929 - 124.199997 0.00526218023 - 124.300003 0.0052497983 - 124.400002 0.00523697445 - 124.5 0.00522370869 - 124.599998 0.00521007413 - 124.699997 0.00519592362 - 124.800003 0.00518140476 - 124.900002 0.00516636996 - 125. 0.00515089324 - 125.099998 0.00513497368 - 125.199997 0.0051186122 - 125.300003 0.00510173524 - 125.400002 0.00508448947 - 125.5 0.00506672729 - 125.599998 0.00504852366 - 125.699997 0.00502987765 - 125.800003 0.00501071522 - 125.900002 0.00499118492 - 126. 0.00497121224 - 126.099998 0.00495079719 - 126.199997 0.00492994022 - 126.300003 0.00490871491 - 126.400002 0.00488704676 - 126.5 0.00486501027 - 126.599998 0.00484253233 - 126.699997 0.0048197587 - 126.800003 0.00479654316 - 126.900002 0.00477303332 - 127. 0.00474915421 - 127.099998 0.0047249808 - 127.199997 0.00470051216 - 127.300003 0.00467574876 - 127.400002 0.00465069106 - 127.5 0.00462541217 - 127.599998 0.00459983805 - 127.699997 0.00457411679 - 127.800003 0.00454810075 - 127.900002 0.00452201068 - 128. 0.00449569989 - 128.100006 0.00446924148 - 128.199997 0.0044427095 - 128.300003 0.00441603037 - 128.399994 0.00438935077 - 128.5 0.00436252402 - 128.600006 0.00433569727 - 128.699997 0.00430887053 - 128.800003 0.00428204378 - 128.899994 0.00425529061 - 129. 0.00422853744 - 129.100006 0.00420193188 - 129.199997 0.0041753999 - 129.300003 0.00414894149 - 129.399994 0.00412263023 - 129.5 0.00409654062 - 129.600006 0.00407067221 - 129.699997 0.00404495047 - 129.800003 0.0040194504 - 129.899994 0.00399424508 - 130. 0.00396933453 - 130.100006 0.00394471874 - 130.199997 0.00392039772 - 130.300003 0.00389637146 - 130.399994 0.00387278758 - 130.5 0.00384957204 - 130.600006 0.00382672483 - 130.699997 0.00380432047 - 130.800003 0.00378228398 - 130.899994 0.00376076368 - 131. 0.00373968529 - 131.100006 0.00371912285 - 131.199997 0.00369907659 - 131.300003 0.00367947249 - 131.399994 0.00366045791 - 131.5 0.00364195905 - 131.600006 0.00362397614 - 131.699997 0.00360658322 - 131.800003 0.00358977937 - 131.899994 0.00357356551 - 132. 0.00355794118 - 132.100006 0.00354290614 - 132.199997 0.00352846109 - 132.300003 0.00351460557 - 132.399994 0.00350141316 - 132.5 0.0034888105 - 132.600006 0.00347687118 - 132.699997 0.00346552138 - 132.800003 0.00345483492 - 132.899994 0.00344473799 - 133. 0.00343530439 - 133.100006 0.00342646055 - 133.199997 0.00341827958 - 133.300003 0.00341061479 - 133.399994 0.00340368715 - 133.5 0.00339727523 - 133.600006 0.00339152641 - 133.699997 0.00338629377 - 133.800003 0.00338165066 - 133.899994 0.00337767089 - 134. 0.00337413326 - 134.100006 0.00337118539 - 134.199997 0.00336882682 - 134.300003 0.00336691085 - 134.399994 0.00336551061 - 134.5 0.00336462609 - 134.600006 0.00336418394 - 134.699997 0.00336425751 - 134.800003 0.00336469966 - 134.899994 0.00336558418 - 135. 0.00336691085 - 135.100006 0.00336853205 - 135.199997 0.00337059586 - 135.300003 0.0033728804 - 135.399994 0.00337560731 - 135.5 0.00337855518 - 135.600006 0.00338179828 - 135.699997 0.0033852621 - 135.800003 0.00338894688 - 135.899994 0.00339285308 - 136. 0.00339690666 - 136.100006 0.00340110762 - 136.199997 0.00340538216 - 136.300003 0.00340980431 - 136.399994 0.0034142998 - 136.5 0.00341879553 - 136.600006 0.00342329126 - 136.699997 0.00342786056 - 136.800003 0.00343228271 - 136.899994 0.00343670463 - 137. 0.00344105298 - 137.100006 0.00344525394 - 137.199997 0.00344930729 - 137.300003 0.00345313968 - 137.399994 0.00345682492 - 137.5 0.00346028875 - 137.600006 0.00346353138 - 137.699997 0.00346647948 - 137.800003 0.00346913259 - 137.899994 0.00347149116 - 138. 0.00347348093 - 138.100006 0.00347510236 - 138.199997 0.00347635522 - 138.300003 0.00347723952 - 138.399994 0.00347768189 - 138.5 0.00347760809 - 138.600006 0.00347716594 - 138.699997 0.00347620784 - 138.800003 0.00347473379 - 138.899994 0.00347274402 - 139. 0.00347023807 - 139.100006 0.00346714258 - 139.199997 0.00346353138 - 139.300003 0.00345933065 - 139.399994 0.00345461373 - 139.5 0.00344923371 - 139.600006 0.00344326394 - 139.699997 0.00343670463 - 139.800003 0.0034295558 - 139.899994 0.0034217434 - 140. 0.00341334171 - 140.100006 0.00340427668 - 140.199997 0.00339454832 - 140.300003 0.00338423019 - 140.399994 0.00337332278 - 140.5 0.00336175179 - 140.600006 0.00334951747 - 140.699997 0.00333669386 - 140.800003 0.00332328025 - 140.899994 0.00330920354 - 141. 0.00329453731 - 141.100006 0.00327928155 - 141.199997 0.00326343603 - 141.300003 0.00324700098 - 141.399994 0.00323004997 - 141.5 0.00321250921 - 141.600006 0.00319445273 - 141.699997 0.00317588029 - 141.800003 0.00315679214 - 141.899994 0.0031371878 - 142. 0.00311714131 - 142.100006 0.00309665268 - 142.199997 0.00307579571 - 142.300003 0.00305442279 - 142.399994 0.00303275487 - 142.5 0.00301071862 - 142.600006 0.00298831379 - 142.699997 0.00296554063 - 142.800003 0.00294254604 - 142.899994 0.00291933073 - 143. 0.00289582019 - 143.100006 0.00287216273 - 143.199997 0.00284828385 - 143.300003 0.00282425759 - 143.399994 0.00280008395 - 143.5 0.00277591031 - 143.600006 0.00275158929 - 143.699997 0.0027272685 - 143.800003 0.00270294747 - 143.899994 0.00267870026 - 144. 0.00265445281 - 144.100006 0.00263035297 - 144.199997 0.00260632671 - 144.300003 0.00258244784 - 144.399994 0.00255879038 - 144.5 0.00253535365 - 144.600006 0.0025121381 - 144.699997 0.00248921756 - 144.800003 0.00246659154 - 144.899994 0.0024443341 - 145. 0.00242244522 - 145.100006 0.00240092492 - 145.199997 0.00237984653 - 145.300003 0.00235921075 - 145.399994 0.00233909069 - 145.5 0.00231948635 - 145.600006 0.00230032438 - 145.699997 0.00228182576 - 145.800003 0.00226384285 - 145.899994 0.00224652328 - 146. 0.00222986704 - 146.100006 0.00221380056 - 146.199997 0.00219839718 - 146.300003 0.00218373095 - 146.399994 0.00216980185 - 146.5 0.00215660944 - 146.600006 0.00214415416 - 146.699997 0.00213243579 - 146.800003 0.00212152814 - 146.899994 0.00211143121 - 147. 0.00210214499 - 147.100006 0.00209366949 - 147.199997 0.00208607852 - 147.300003 0.00207929802 - 147.399994 0.00207332848 - 147.5 0.00206824299 - 147.600006 0.00206404203 - 147.699997 0.00206072559 - 147.800003 0.00205821986 - 147.899994 0.00205659843 - 148. 0.00205586152 - 148.100006 0.00205593533 - 148.199997 0.00205689319 - 148.300003 0.00205873582 - 148.399994 0.00206138892 - 148.5 0.00206492655 - 148.600006 0.00206927489 - 148.699997 0.00207443396 - 148.800003 0.0020804035 - 148.899994 0.002087184 - 149. 0.00209477497 - 149.100006 0.00210310309 - 149.199997 0.00211216812 - 149.300003 0.00212197029 - 149.399994 0.00213243579 - 149.5 0.00214363821 - 149.600006 0.00215550396 - 149.699997 0.00216795923 - 149.800003 0.00218107784 - 149.899994 0.00219478598 - 150. 0.00220901007 - 150.100006 0.00222382369 - 150.199997 0.00223915349 - 150.300003 0.0022549252 - 150.399994 0.00227106549 - 150.5 0.00228772149 - 150.600006 0.00230467273 - 150.699997 0.00232206588 - 150.800003 0.00233968021 - 150.899994 0.00235758931 - 151. 0.0023757196 - 151.100006 0.00239407062 - 151.199997 0.00241256948 - 151.300003 0.00243121549 - 151.399994 0.0024499353 - 151.5 0.00246872893 - 151.600006 0.00248752232 - 151.699997 0.00250631571 - 151.800003 0.00252496195 - 151.899994 0.00254360819 - 152. 0.00256203301 - 152.100006 0.00258031068 - 152.199997 0.00259836717 - 152.300003 0.00261612888 - 152.399994 0.00263359584 - 152.5 0.0026507678 - 152.600006 0.00266757142 - 152.699997 0.00268393289 - 152.800003 0.00269985199 - 152.899994 0.00271532894 - 153. 0.00273029017 - 153.100006 0.00274466164 - 153.199997 0.00275851716 - 153.300003 0.00277170958 - 153.399994 0.00278423866 - 153.5 0.00279610418 - 153.600006 0.00280723278 - 153.699997 0.00281769829 - 153.800003 0.00282735308 - 153.899994 0.00283619692 - 154. 0.00284423027 - 154.100006 0.00285145291 - 154.199997 0.00285779103 - 154.300003 0.00286331866 - 154.399994 0.00286781439 - 154.5 0.0028714994 - 154.600006 0.00287422608 - 154.699997 0.00287592132 - 154.800003 0.00287673203 - 154.899994 0.00287658465 - 155. 0.00287540536 - 155.100006 0.0028731944 - 155.199997 0.00287002535 - 155.300003 0.00286582438 - 155.399994 0.00286066532 - 155.5 0.00285447459 - 155.600006 0.00284725218 - 155.699997 0.00283899764 - 155.800003 0.00282978523 - 155.899994 0.00281954091 - 156. 0.00280826492 - 156.100006 0.00279610418 - 156.199997 0.00278291199 - 156.300003 0.00276876171 - 156.399994 0.0027536531 - 156.5 0.00273758639 - 156.600006 0.00272070919 - 156.699997 0.00270287367 - 156.800003 0.00268415408 - 156.899994 0.00266462332 - 157. 0.0026442823 - 157.100006 0.00262313033 - 157.199997 0.00260116765 - 157.300003 0.00257854187 - 157.399994 0.00255517894 - 157.5 0.00253115292 - 157.600006 0.00250646309 - 157.699997 0.0024811842 - 157.800003 0.00245538913 - 157.899994 0.00242900476 - 158. 0.00240217778 - 158.100006 0.00237490865 - 158.199997 0.00234719738 - 158.300003 0.00231919135 - 158.399994 0.00229081698 - 158.5 0.00226222142 - 158.600006 0.00223333109 - 158.699997 0.00220429315 - 158.800003 0.00217518164 - 158.899994 0.00214599655 - 159. 0.00211673765 - 159.100006 0.00208747876 - 159.199997 0.00205836724 - 159.300003 0.00202932954 - 159.399994 0.00200043921 - 159.5 0.00197184342 - 159.600006 0.00194346893 - 159.699997 0.00191546301 - 159.800003 0.00188782543 - 159.899994 0.00186063023 - 160. 0.00183387718 - 160.100006 0.00180771365 - 160.199997 0.00178213976 - 160.300003 0.00175715541 - 160.399994 0.00173290807 - 160.5 0.00170939777 - 160.600006 0.00168669818 - 160.699997 0.0016648093 - 160.800003 0.00164380472 - 160.899994 0.00162375835 - 161. 0.00160467008 - 161.100006 0.00158661359 - 161.199997 0.0015695889 - 161.300003 0.00155374338 - 161.399994 0.00153900334 - 161.5 0.00152551627 - 161.600006 0.00151328207 - 161.699997 0.00150222704 - 161.800003 0.00149257237 - 161.899994 0.00148424425 - 162. 0.00147731649 - 162.100006 0.00147178909 - 162.199997 0.00146766182 - 162.300003 0.00146508228 - 162.399994 0.00146397681 - 162.5 0.00146441895 - 162.600006 0.00146640884 - 162.699997 0.00146994647 - 162.800003 0.00147510541 - 162.899994 0.00148188591 - 163. 0.00149021391 - 163.100006 0.00150023727 - 163.199997 0.00151195552 - 163.300003 0.0015252952 - 163.399994 0.00154033001 - 163.5 0.00155698624 - 163.600006 0.00157533749 - 163.699997 0.00159538386 - 163.800003 0.00161712547 - 163.899994 0.00164056197 - 164. 0.00166562002 - 164.100006 0.00169229938 - 164.199997 0.00172067387 - 164.300003 0.00175066979 - 164.399994 0.00178236072 - 164.5 0.00181559962 - 164.600006 0.00185038603 - 164.699997 0.00188679376 - 164.800003 0.00192474911 - 164.899994 0.00196417863 - 165. 0.00200508209 - 165.100006 0.0020475334 - 165.199997 0.00209131115 - 165.300003 0.00213656295 - 165.399994 0.00218314142 - 165.5 0.00223104632 - 165.600006 0.00228020409 - 165.699997 0.00233061495 - 165.800003 0.00238227891 - 165.899994 0.00243504811 - 166. 0.00248892256 - 166.100006 0.00254382915 - 166.199997 0.00259984098 - 166.300003 0.00265673734 - 166.399994 0.00271451846 - 166.5 0.0027731834 - 166.600006 0.00283265929 - 166.699997 0.00289287255 - 166.800003 0.00295374845 - 166.899994 0.00301528815 - 167. 0.00307741715 - 167.100006 0.00313998852 - 167.199997 0.0032030018 - 167.300003 0.0032664577 - 167.399994 0.00333020813 - 167.5 0.00339425355 - 167.600006 0.00345844612 - 167.699997 0.00352278608 - 167.800003 0.00358727365 - 167.899994 0.00365168764 - 168. 0.0037160276 - 168.100006 0.00378029398 - 168.199997 0.00384441298 - 168.300003 0.00390823744 - 168.399994 0.00397176668 - 168.5 0.00403492758 - 168.600006 0.0040976461 - 168.699997 0.00415984914 - 168.800003 0.00422153575 - 168.899994 0.00428263331 - 169. 0.00434299326 - 169.100006 0.00440261653 - 169.199997 0.00446150312 - 169.300003 0.00451950496 - 169.399994 0.00457662251 - 169.5 0.00463278219 - 169.600006 0.0046879095 - 169.699997 0.00474200537 - 169.800003 0.00479499577 - 169.899994 0.00484680664 - 170. 0.00489736488 - 170.100006 0.00494674407 - 170.199997 0.00499479612 - 170.300003 0.00504152197 - 170.399994 0.00508684805 - 170.5 0.00513077294 - 170.600006 0.0051732976 - 170.699997 0.00521427486 - 170.800003 0.0052537783 - 170.899994 0.00529173389 - 171. 0.00532806804 - 171.100006 0.00536285434 - 171.199997 0.0053960192 - 171.300003 0.00542756263 - 171.399994 0.00545741105 - 171.5 0.00548563804 - 171.600006 0.00551209645 - 171.699997 0.00553693343 - 171.800003 0.00556000136 - 171.899994 0.00558137475 - 172. 0.00560105266 - 172.100006 0.00561896153 - 172.199997 0.00563517585 - 172.300003 0.00564969424 - 172.399994 0.00566251809 - 172.5 0.00567357335 - 172.600006 0.00568293314 - 172.699997 0.0056906715 - 172.800003 0.00569671532 - 172.899994 0.00570113724 - 173. 0.00570386415 - 173.100006 0.00570496963 - 173.199997 0.00570452726 - 173.300003 0.00570253748 - 173.399994 0.00569899939 - 173.5 0.00569398794 - 173.600006 0.0056874291 - 173.699997 0.00567946956 - 173.800003 0.0056701093 - 173.899994 0.0056594233 - 174. 0.00564733613 - 174.100006 0.00563399633 - 174.199997 0.00561940391 - 174.300003 0.00560355838 - 174.399994 0.00558660692 - 174.5 0.0055685509 - 174.600006 0.00554946251 - 174.699997 0.00552934268 - 174.800003 0.00550826406 - 174.899994 0.00548622804 - 175. 0.00546338083 - 175.100006 0.00543972338 - 175.199997 0.00541532831 - 175.300003 0.00539019704 - 175.399994 0.00536447531 - 175.5 0.00533816451 - 175.600006 0.00531133777 - 175.699997 0.00528399507 - 175.800003 0.00525628403 - 175.899994 0.00522820419 - 176. 0.00519990362 - 176.100006 0.00517130783 - 176.199997 0.00514256489 - 176.300003 0.00511367433 - 176.399994 0.00508478377 - 176.5 0.00505581964 - 176.600006 0.00502692955 - 176.699997 0.0049981866 - 176.800003 0.00496959081 - 176.899994 0.00494129024 - 177. 0.0049132104 - 177.100006 0.00488542579 - 177.199997 0.00485808263 - 177.300003 0.0048311823 - 177.399994 0.00480479794 - 177.5 0.00477892905 - 177.600006 0.00475365017 - 177.699997 0.00472903438 - 177.800003 0.00470508169 - 177.899994 0.00468186615 - 178. 0.00465938775 - 178.100006 0.00463779364 - 178.199997 0.00461701024 - 178.300003 0.00459711114 - 178.399994 0.00457817037 - 178.5 0.00456026103 - 178.600006 0.00454323646 - 178.699997 0.00452731736 - 178.800003 0.00451243017 - 178.899994 0.00449864799 - 179. 0.00448597176 - 179.100006 0.00447440054 - 179.199997 0.00446400885 - 179.300003 0.00445479667 - 179.399994 0.00444683712 - 179.5 0.00443998259 - 179.600006 0.00443445519 - 179.699997 0.00443003327 - 179.800003 0.00442693802 - 179.899994 0.00442509539 +0 1 +0.1 1 +0.2 1 +0.3 1 +0.4 1 +0.5 1 +0.6 1 +0.7 1 +0.8 1 +0.9 1 +1 1 +1.1 1 +1.2 1 +1.3 1 +1.4 1 +1.5 1 +1.6 1 +1.7 1 +1.8 1 +1.9 1 +2 1 +2.1 1 +2.2 1 +2.3 1 +2.4 1 +2.5 1 +2.6 1 +2.7 1 +2.8 1 +2.9 1 +3 1 +3.1 1 +3.2 1 +3.3 1 +3.4 1 +3.5 1 +3.6 1 +3.7 1 +3.8 1 +3.9 1 +4 1 +4.1 1 +4.2 1 +4.3 1 +4.4 1 +4.5 1 +4.6 1 +4.7 1 +4.8 1 +4.9 1 +5 1 +5.1 1 +5.2 1 +5.3 1 +5.4 1 +5.5 1 +5.6 1 +5.7 1 +5.8 1 +5.9 1 +6 1 +6.1 1 +6.2 1 +6.3 1 +6.4 1 +6.5 1 +6.6 1 +6.7 1 +6.8 1 +6.9 1 +7 1 +7.1 1 +7.2 1 +7.3 1 +7.4 1 +7.5 1 +7.6 1 +7.7 1 +7.8 1 +7.9 1 +8 1 +8.1 1 +8.2 1 +8.3 1 +8.4 1 +8.5 1 +8.6 1 +8.7 1 +8.8 1 +8.9 1 +9 1 +9.1 1 +9.2 1 +9.3 1 +9.4 1 +9.5 1 +9.6 1 +9.7 1 +9.8 1 +9.9 1 +10 1 +10.1 1 +10.2 1 +10.3 1 +10.4 1 +10.5 1 +10.6 1 +10.7 1 +10.8 1 +10.9 1 +11 1 +11.1 1 +11.2 1 +11.3 1 +11.4 1 +11.5 1 +11.6 1 +11.7 1 +11.8 1 +11.9 1 +12 1 +12.1 1 +12.2 1 +12.3 1 +12.4 1 +12.5 1 +12.6 1 +12.7 1 +12.8 1 +12.9 1 +13 1 +13.1 1 +13.2 1 +13.3 1 +13.4 1 +13.5 1 +13.6 1 +13.7 1 +13.8 1 +13.9 1 +14 1 +14.1 1 +14.2 1 +14.3 1 +14.4 1 +14.5 1 +14.6 1 +14.7 1 +14.8 1 +14.9 1 +15 1 +15.1 1 +15.2 1 +15.3 1 +15.4 1 +15.5 1 +15.6 1 +15.7 1 +15.8 1 +15.9 1 +16 1 +16.1 1 +16.2 1 +16.3 1 +16.4 1 +16.5 1 +16.6 1 +16.7 1 +16.8 1 +16.9 1 +17 1 +17.1 1 +17.2 1 +17.3 1 +17.4 1 +17.5 1 +17.6 1 +17.7 1 +17.8 1 +17.9 1 +18 1 +18.1 1 +18.2 1 +18.3 1 +18.4 1 +18.5 1 +18.6 1 +18.7 1 +18.8 1 +18.9 1 +19 1 +19.1 1 +19.2 1 +19.3 1 +19.4 1 +19.5 1 +19.6 1 +19.7 1 +19.8 1 +19.9 1 +20 1 +20.1 1 +20.2 1 +20.3 1 +20.4 1 +20.5 1 +20.6 1 +20.7 1 +20.8 1 +20.9 1 +21 1 +21.1 1 +21.2 1 +21.3 1 +21.4 1 +21.5 1 +21.6 1 +21.7 1 +21.8 1 +21.9 1 +22 1 +22.1 1 +22.2 1 +22.3 1 +22.4 1 +22.5 1 +22.6 1 +22.7 1 +22.8 1 +22.9 1 +23 1 +23.1 1 +23.2 1 +23.3 1 +23.4 1 +23.5 1 +23.6 1 +23.7 1 +23.8 1 +23.9 1 +24 1 +24.1 1 +24.2 1 +24.3 1 +24.4 1 +24.5 1 +24.6 1 +24.7 1 +24.8 1 +24.9 1 +25 1 +25.1 1 +25.2 1 +25.3 1 +25.4 1 +25.5 1 +25.6 1 +25.7 1 +25.8 1 +25.9 1 +26 1 +26.1 1 +26.2 1 +26.3 1 +26.4 1 +26.5 1 +26.6 1 +26.7 1 +26.8 1 +26.9 1 +27 1 +27.1 1 +27.2 1 +27.3 1 +27.4 1 +27.5 1 +27.6 1 +27.7 1 +27.8 1 +27.9 1 +28 1 +28.1 1 +28.2 1 +28.3 1 +28.4 1 +28.5 1 +28.6 1 +28.7 1 +28.8 1 +28.9 1 +29 1 +29.1 1 +29.2 1 +29.3 1 +29.4 1 +29.5 1 +29.6 1 +29.7 1 +29.8 1 +29.9 1 +30 1 +30.1 1 +30.2 1 +30.3 1 +30.4 1 +30.5 1 +30.6 1 +30.7 1 +30.8 1 +30.9 1 +31 1 +31.1 1 +31.2 1 +31.3 1 +31.4 1 +31.5 1 +31.6 1 +31.7 1 +31.8 1 +31.9 1 +32 1 +32.1 1 +32.2 1 +32.3 1 +32.4 1 +32.5 1 +32.6 1 +32.7 1 +32.8 1 +32.9 1 +33 1 +33.1 1 +33.2 1 +33.3 1 +33.4 1 +33.5 1 +33.6 1 +33.7 1 +33.8 1 +33.9 1 +34 1 +34.1 1 +34.2 1 +34.3 1 +34.4 1 +34.5 1 +34.6 1 +34.7 1 +34.8 1 +34.9 1 +35 1 +35.1 1 +35.2 1 +35.3 1 +35.4 1 +35.5 1 +35.6 1 +35.7 1 +35.8 1 +35.9 1 +36 1 +36.1 1 +36.2 1 +36.3 1 +36.4 1 +36.5 1 +36.6 1 +36.7 1 +36.8 1 +36.9 1 +37 1 +37.1 1 +37.2 1 +37.3 1 +37.4 1 +37.5 1 +37.6 1 +37.7 1 +37.8 1 +37.9 1 +38 1 +38.1 1 +38.2 1 +38.3 1 +38.4 1 +38.5 1 +38.6 1 +38.7 1 +38.8 1 +38.9 1 +39 1 +39.1 1 +39.2 1 +39.3 1 +39.4 1 +39.5 1 +39.6 1 +39.7 1 +39.8 1 +39.9 1 +40 1 +40.1 1 +40.2 1 +40.3 1 +40.4 1 +40.5 1 +40.6 1 +40.7 1 +40.8 1 +40.9 1 +41 1 +41.1 1 +41.2 1 +41.3 1 +41.4 1 +41.5 1 +41.6 1 +41.7 1 +41.8 1 +41.9 1 +42 1 +42.1 1 +42.2 1 +42.3 1 +42.4 1 +42.5 1 +42.6 1 +42.7 1 +42.8 1 +42.9 1 +43 1 +43.1 1 +43.2 1 +43.3 1 +43.4 1 +43.5 1 +43.6 1 +43.7 1 +43.8 1 +43.9 1 +44 1 +44.1 1 +44.2 1 +44.3 1 +44.4 1 +44.5 1 +44.6 1 +44.7 1 +44.8 1 +44.9 1 +45 1 +45.1 1 +45.2 1 +45.3 1 +45.4 1 +45.5 1 +45.6 1 +45.7 1 +45.8 1 +45.9 1 +46 1 +46.1 1 +46.2 1 +46.3 1 +46.4 1 +46.5 1 +46.6 1 +46.7 1 +46.8 1 +46.9 1 +47 1 +47.1 1 +47.2 1 +47.3 1 +47.4 1 +47.5 1 +47.6 1 +47.7 1 +47.8 1 +47.9 1 +48 1 +48.1 1 +48.2 1 +48.3 1 +48.4 1 +48.5 1 +48.6 1 +48.7 1 +48.8 1 +48.9 1 +49 1 +49.1 1 +49.2 1 +49.3 1 +49.4 1 +49.5 1 +49.6 1 +49.7 1 +49.8 1 +49.9 1 +50 1 +50.1 1 +50.2 1 +50.3 1 +50.4 1 +50.5 1 +50.6 1 +50.7 1 +50.8 1 +50.9 1 +51 1 +51.1 1 +51.2 1 +51.3 1 +51.4 1 +51.5 1 +51.6 1 +51.7 1 +51.8 1 +51.9 1 +52 1 +52.1 1 +52.2 1 +52.3 1 +52.4 1 +52.5 1 +52.6 1 +52.7 1 +52.8 1 +52.9 1 +53 1 +53.1 1 +53.2 1 +53.3 1 +53.4 1 +53.5 1 +53.6 1 +53.7 1 +53.8 1 +53.9 1 +54 1 +54.1 1 +54.2 1 +54.3 1 +54.4 1 +54.5 1 +54.6 1 +54.7 1 +54.8 1 +54.9 1 +55 1 +55.1 1 +55.2 1 +55.3 1 +55.4 1 +55.5 1 +55.6 1 +55.7 1 +55.8 1 +55.9 1 +56 1 +56.1 1 +56.2 1 +56.3 1 +56.4 1 +56.5 1 +56.6 1 +56.7 1 +56.8 1 +56.9 1 +57 1 +57.1 1 +57.2 1 +57.3 1 +57.4 1 +57.5 1 +57.6 1 +57.7 1 +57.8 1 +57.9 1 +58 1 +58.1 1 +58.2 1 +58.3 1 +58.4 1 +58.5 1 +58.6 1 +58.7 1 +58.8 1 +58.9 1 +59 1 +59.1 1 +59.2 1 +59.3 1 +59.4 1 +59.5 1 +59.6 1 +59.7 1 +59.8 1 +59.9 1 +60 1 +60.1 1 +60.2 1 +60.3 1 +60.4 1 +60.5 1 +60.6 1 +60.7 1 +60.8 1 +60.9 1 +61 1 +61.1 1 +61.2 1 +61.3 1 +61.4 1 +61.5 1 +61.6 1 +61.7 1 +61.8 1 +61.9 1 +62 1 +62.1 1 +62.2 1 +62.3 1 +62.4 1 +62.5 1 +62.6 1 +62.7 1 +62.8 1 +62.9 1 +63 1 +63.1 1 +63.2 1 +63.3 1 +63.4 1 +63.5 1 +63.6 1 +63.7 1 +63.8 1 +63.9 1 +64 1 +64.1 1 +64.2 1 +64.3 1 +64.4 1 +64.5 1 +64.6 1 +64.7 1 +64.8 1 +64.9 1 +65 1 +65.1 1 +65.2 1 +65.3 1 +65.4 1 +65.5 1 +65.6 1 +65.7 1 +65.8 1 +65.9 1 +66 1 +66.1 1 +66.2 1 +66.3 1 +66.4 1 +66.5 1 +66.6 1 +66.7 1 +66.8 1 +66.9 1 +67 1 +67.1 1 +67.2 1 +67.3 1 +67.4 1 +67.5 1 +67.6 1 +67.7 1 +67.8 1 +67.9 1 +68 1 +68.1 1 +68.2 1 +68.3 1 +68.4 1 +68.5 1 +68.6 1 +68.7 1 +68.8 1 +68.9 1 +69 1 +69.1 1 +69.2 1 +69.3 1 +69.4 1 +69.5 1 +69.6 1 +69.7 1 +69.8 1 +69.9 1 +70 1 +70.1 1 +70.2 1 +70.3 1 +70.4 1 +70.5 1 +70.6 1 +70.7 1 +70.8 1 +70.9 1 +71 1 +71.1 1 +71.2 1 +71.3 1 +71.4 1 +71.5 1 +71.6 1 +71.7 1 +71.8 1 +71.9 1 +72 1 +72.1 1 +72.2 1 +72.3 1 +72.4 1 +72.5 1 +72.6 1 +72.7 1 +72.8 1 +72.9 1 +73 1 +73.1 1 +73.2 1 +73.3 1 +73.4 1 +73.5 1 +73.6 1 +73.7 1 +73.8 1 +73.9 1 +74 1 +74.1 1 +74.2 1 +74.3 1 +74.4 1 +74.5 1 +74.6 1 +74.7 1 +74.8 1 +74.9 1 +75 1 +75.1 1 +75.2 1 +75.3 1 +75.4 1 +75.5 1 +75.6 1 +75.7 1 +75.8 1 +75.9 1 +76 1 +76.1 1 +76.2 1 +76.3 1 +76.4 1 +76.5 1 +76.6 1 +76.7 1 +76.8 1 +76.9 1 +77 1 +77.1 1 +77.2 1 +77.3 1 +77.4 1 +77.5 1 +77.6 1 +77.7 1 +77.8 1 +77.9 1 +78 1 +78.1 1 +78.2 1 +78.3 1 +78.4 1 +78.5 1 +78.6 1 +78.7 1 +78.8 1 +78.9 1 +79 1 +79.1 1 +79.2 1 +79.3 1 +79.4 1 +79.5 1 +79.6 1 +79.7 1 +79.8 1 +79.9 1 +80 1 +80.1 1 +80.2 1 +80.3 1 +80.4 1 +80.5 1 +80.6 1 +80.7 1 +80.8 1 +80.9 1 +81 1 +81.1 1 +81.2 1 +81.3 1 +81.4 1 +81.5 1 +81.6 1 +81.7 1 +81.8 1 +81.9 1 +82 1 +82.1 1 +82.2 1 +82.3 1 +82.4 1 +82.5 1 +82.6 1 +82.7 1 +82.8 1 +82.9 1 +83 1 +83.1 1 +83.2 1 +83.3 1 +83.4 1 +83.5 1 +83.6 1 +83.7 1 +83.8 1 +83.9 1 +84 1 +84.1 1 +84.2 1 +84.3 1 +84.4 1 +84.5 1 +84.6 1 +84.7 1 +84.8 1 +84.9 1 +85 1 +85.1 1 +85.2 1 +85.3 1 +85.4 1 +85.5 1 +85.6 1 +85.7 1 +85.8 1 +85.9 1 +86 1 +86.1 1 +86.2 1 +86.3 1 +86.4 1 +86.5 1 +86.6 1 +86.7 1 +86.8 1 +86.9 1 +87 1 +87.1 1 +87.2 1 +87.3 1 +87.4 1 +87.5 1 +87.6 1 +87.7 1 +87.8 1 +87.9 1 +88 1 +88.1 1 +88.2 1 +88.3 1 +88.4 1 +88.5 1 +88.6 1 +88.7 1 +88.8 1 +88.9 1 +89 1 +89.1 1 +89.2 1 +89.3 1 +89.4 1 +89.5 1 +89.6 1 +89.7 1 +89.8 1 +89.9 1 +90 1 +90.1 1 +90.2 1 +90.3 1 +90.4 1 +90.5 1 +90.6 1 +90.7 1 +90.8 1 +90.9 1 +91 1 +91.1 1 +91.2 1 +91.3 1 +91.4 1 +91.5 1 +91.6 1 +91.7 1 +91.8 1 +91.9 1 +92 1 +92.1 1 +92.2 1 +92.3 1 +92.4 1 +92.5 1 +92.6 1 +92.7 1 +92.8 1 +92.9 1 +93 1 +93.1 1 +93.2 1 +93.3 1 +93.4 1 +93.5 1 +93.6 1 +93.7 1 +93.8 1 +93.9 1 +94 1 +94.1 1 +94.2 1 +94.3 1 +94.4 1 +94.5 1 +94.6 1 +94.7 1 +94.8 1 +94.9 1 +95 1 +95.1 1 +95.2 1 +95.3 1 +95.4 1 +95.5 1 +95.6 1 +95.7 1 +95.8 1 +95.9 1 +96 1 +96.1 1 +96.2 1 +96.3 1 +96.4 1 +96.5 1 +96.6 1 +96.7 1 +96.8 1 +96.9 1 +97 1 +97.1 1 +97.2 1 +97.3 1 +97.4 1 +97.5 1 +97.6 1 +97.7 1 +97.8 1 +97.9 1 +98 1 +98.1 1 +98.2 1 +98.3 1 +98.4 1 +98.5 1 +98.6 1 +98.7 1 +98.8 1 +98.9 1 +99 1 +99.1 1 +99.2 1 +99.3 1 +99.4 1 +99.5 1 +99.6 1 +99.7 1 +99.8 1 +99.9 1 +100 1 +100.1 1 +100.2 1 +100.3 1 +100.4 1 +100.5 1 +100.6 1 +100.7 1 +100.8 1 +100.9 1 +101 1 +101.1 1 +101.2 1 +101.3 1 +101.4 1 +101.5 1 +101.6 1 +101.7 1 +101.8 1 +101.9 1 +102 1 +102.1 1 +102.2 1 +102.3 1 +102.4 1 +102.5 1 +102.6 1 +102.7 1 +102.8 1 +102.9 1 +103 1 +103.1 1 +103.2 1 +103.3 1 +103.4 1 +103.5 1 +103.6 1 +103.7 1 +103.8 1 +103.9 1 +104 1 +104.1 1 +104.2 1 +104.3 1 +104.4 1 +104.5 1 +104.6 1 +104.7 1 +104.8 1 +104.9 1 +105 1 +105.1 1 +105.2 1 +105.3 1 +105.4 1 +105.5 1 +105.6 1 +105.7 1 +105.8 1 +105.9 1 +106 1 +106.1 1 +106.2 1 +106.3 1 +106.4 1 +106.5 1 +106.6 1 +106.7 1 +106.8 1 +106.9 1 +107 1 +107.1 1 +107.2 1 +107.3 1 +107.4 1 +107.5 1 +107.6 1 +107.7 1 +107.8 1 +107.9 1 +108 1 +108.1 1 +108.2 1 +108.3 1 +108.4 1 +108.5 1 +108.6 1 +108.7 1 +108.8 1 +108.9 1 +109 1 +109.1 1 +109.2 1 +109.3 1 +109.4 1 +109.5 1 +109.6 1 +109.7 1 +109.8 1 +109.9 1 +110 1 +110.1 1 +110.2 1 +110.3 1 +110.4 1 +110.5 1 +110.6 1 +110.7 1 +110.8 1 +110.9 1 +111 1 +111.1 1 +111.2 1 +111.3 1 +111.4 1 +111.5 1 +111.6 1 +111.7 1 +111.8 1 +111.9 1 +112 1 +112.1 1 +112.2 1 +112.3 1 +112.4 1 +112.5 1 +112.6 1 +112.7 1 +112.8 1 +112.9 1 +113 1 +113.1 1 +113.2 1 +113.3 1 +113.4 1 +113.5 1 +113.6 1 +113.7 1 +113.8 1 +113.9 1 +114 1 +114.1 1 +114.2 1 +114.3 1 +114.4 1 +114.5 1 +114.6 1 +114.7 1 +114.8 1 +114.9 1 +115 1 +115.1 1 +115.2 1 +115.3 1 +115.4 1 +115.5 1 +115.6 1 +115.7 1 +115.8 1 +115.9 1 +116 1 +116.1 1 +116.2 1 +116.3 1 +116.4 1 +116.5 1 +116.6 1 +116.7 1 +116.8 1 +116.9 1 +117 1 +117.1 1 +117.2 1 +117.3 1 +117.4 1 +117.5 1 +117.6 1 +117.7 1 +117.8 1 +117.9 1 +118 1 +118.1 1 +118.2 1 +118.3 1 +118.4 1 +118.5 1 +118.6 1 +118.7 1 +118.8 1 +118.9 1 +119 1 +119.1 1 +119.2 1 +119.3 1 +119.4 1 +119.5 1 +119.6 1 +119.7 1 +119.8 1 +119.9 1 +120 1 +120.1 1 +120.2 1 +120.3 1 +120.4 1 +120.5 1 +120.6 1 +120.7 1 +120.8 1 +120.9 1 +121 1 +121.1 1 +121.2 1 +121.3 1 +121.4 1 +121.5 1 +121.6 1 +121.7 1 +121.8 1 +121.9 1 +122 1 +122.1 1 +122.2 1 +122.3 1 +122.4 1 +122.5 1 +122.6 1 +122.7 1 +122.8 1 +122.9 1 +123 1 +123.1 1 +123.2 1 +123.3 1 +123.4 1 +123.5 1 +123.6 1 +123.7 1 +123.8 1 +123.9 1 +124 1 +124.1 1 +124.2 1 +124.3 1 +124.4 1 +124.5 1 +124.6 1 +124.7 1 +124.8 1 +124.9 1 +125 1 +125.1 1 +125.2 1 +125.3 1 +125.4 1 +125.5 1 +125.6 1 +125.7 1 +125.8 1 +125.9 1 +126 1 +126.1 1 +126.2 1 +126.3 1 +126.4 1 +126.5 1 +126.6 1 +126.7 1 +126.8 1 +126.9 1 +127 1 +127.1 1 +127.2 1 +127.3 1 +127.4 1 +127.5 1 +127.6 1 +127.7 1 +127.8 1 +127.9 1 +128 1 +128.1 1 +128.2 1 +128.3 1 +128.4 1 +128.5 1 +128.6 1 +128.7 1 +128.8 1 +128.9 1 +129 1 +129.1 1 +129.2 1 +129.3 1 +129.4 1 +129.5 1 +129.6 1 +129.7 1 +129.8 1 +129.9 1 +130 1 +130.1 1 +130.2 1 +130.3 1 +130.4 1 +130.5 1 +130.6 1 +130.7 1 +130.8 1 +130.9 1 +131 1 +131.1 1 +131.2 1 +131.3 1 +131.4 1 +131.5 1 +131.6 1 +131.7 1 +131.8 1 +131.9 1 +132 1 +132.1 1 +132.2 1 +132.3 1 +132.4 1 +132.5 1 +132.6 1 +132.7 1 +132.8 1 +132.9 1 +133 1 +133.1 1 +133.2 1 +133.3 1 +133.4 1 +133.5 1 +133.6 1 +133.7 1 +133.8 1 +133.9 1 +134 1 +134.1 1 +134.2 1 +134.3 1 +134.4 1 +134.5 1 +134.6 1 +134.7 1 +134.8 1 +134.9 1 +135 1 +135.1 1 +135.2 1 +135.3 1 +135.4 1 +135.5 1 +135.6 1 +135.7 1 +135.8 1 +135.9 1 +136 1 +136.1 1 +136.2 1 +136.3 1 +136.4 1 +136.5 1 +136.6 1 +136.7 1 +136.8 1 +136.9 1 +137 1 +137.1 1 +137.2 1 +137.3 1 +137.4 1 +137.5 1 +137.6 1 +137.7 1 +137.8 1 +137.9 1 +138 1 +138.1 1 +138.2 1 +138.3 1 +138.4 1 +138.5 1 +138.6 1 +138.7 1 +138.8 1 +138.9 1 +139 1 +139.1 1 +139.2 1 +139.3 1 +139.4 1 +139.5 1 +139.6 1 +139.7 1 +139.8 1 +139.9 1 +140 1 +140.1 1 +140.2 1 +140.3 1 +140.4 1 +140.5 1 +140.6 1 +140.7 1 +140.8 1 +140.9 1 +141 1 +141.1 1 +141.2 1 +141.3 1 +141.4 1 +141.5 1 +141.6 1 +141.7 1 +141.8 1 +141.9 1 +142 1 +142.1 1 +142.2 1 +142.3 1 +142.4 1 +142.5 1 +142.6 1 +142.7 1 +142.8 1 +142.9 1 +143 1 +143.1 1 +143.2 1 +143.3 1 +143.4 1 +143.5 1 +143.6 1 +143.7 1 +143.8 1 +143.9 1 +144 1 +144.1 1 +144.2 1 +144.3 1 +144.4 1 +144.5 1 +144.6 1 +144.7 1 +144.8 1 +144.9 1 +145 1 +145.1 1 +145.2 1 +145.3 1 +145.4 1 +145.5 1 +145.6 1 +145.7 1 +145.8 1 +145.9 1 +146 1 +146.1 1 +146.2 1 +146.3 1 +146.4 1 +146.5 1 +146.6 1 +146.7 1 +146.8 1 +146.9 1 +147 1 +147.1 1 +147.2 1 +147.3 1 +147.4 1 +147.5 1 +147.6 1 +147.7 1 +147.8 1 +147.9 1 +148 1 +148.1 1 +148.2 1 +148.3 1 +148.4 1 +148.5 1 +148.6 1 +148.7 1 +148.8 1 +148.9 1 +149 1 +149.1 1 +149.2 1 +149.3 1 +149.4 1 +149.5 1 +149.6 1 +149.7 1 +149.8 1 +149.9 1 +150 1 +150.1 1 +150.2 1 +150.3 1 +150.4 1 +150.5 1 +150.6 1 +150.7 1 +150.8 1 +150.9 1 +151 1 +151.1 1 +151.2 1 +151.3 1 +151.4 1 +151.5 1 +151.6 1 +151.7 1 +151.8 1 +151.9 1 +152 1 +152.1 1 +152.2 1 +152.3 1 +152.4 1 +152.5 1 +152.6 1 +152.7 1 +152.8 1 +152.9 1 +153 1 +153.1 1 +153.2 1 +153.3 1 +153.4 1 +153.5 1 +153.6 1 +153.7 1 +153.8 1 +153.9 1 +154 1 +154.1 1 +154.2 1 +154.3 1 +154.4 1 +154.5 1 +154.6 1 +154.7 1 +154.8 1 +154.9 1 +155 1 +155.1 1 +155.2 1 +155.3 1 +155.4 1 +155.5 1 +155.6 1 +155.7 1 +155.8 1 +155.9 1 +156 1 +156.1 1 +156.2 1 +156.3 1 +156.4 1 +156.5 1 +156.6 1 +156.7 1 +156.8 1 +156.9 1 +157 1 +157.1 1 +157.2 1 +157.3 1 +157.4 1 +157.5 1 +157.6 1 +157.7 1 +157.8 1 +157.9 1 +158 1 +158.1 1 +158.2 1 +158.3 1 +158.4 1 +158.5 1 +158.6 1 +158.7 1 +158.8 1 +158.9 1 +159 1 +159.1 1 +159.2 1 +159.3 1 +159.4 1 +159.5 1 +159.6 1 +159.7 1 +159.8 1 +159.9 1 +160 1 +160.1 1 +160.2 1 +160.3 1 +160.4 1 +160.5 1 +160.6 1 +160.7 1 +160.8 1 +160.9 1 +161 1 +161.1 1 +161.2 1 +161.3 1 +161.4 1 +161.5 1 +161.6 1 +161.7 1 +161.8 1 +161.9 1 +162 1 +162.1 1 +162.2 1 +162.3 1 +162.4 1 +162.5 1 +162.6 1 +162.7 1 +162.8 1 +162.9 1 +163 1 +163.1 1 +163.2 1 +163.3 1 +163.4 1 +163.5 1 +163.6 1 +163.7 1 +163.8 1 +163.9 1 +164 1 +164.1 1 +164.2 1 +164.3 1 +164.4 1 +164.5 1 +164.6 1 +164.7 1 +164.8 1 +164.9 1 +165 1 +165.1 1 +165.2 1 +165.3 1 +165.4 1 +165.5 1 +165.6 1 +165.7 1 +165.8 1 +165.9 1 +166 1 +166.1 1 +166.2 1 +166.3 1 +166.4 1 +166.5 1 +166.6 1 +166.7 1 +166.8 1 +166.9 1 +167 1 +167.1 1 +167.2 1 +167.3 1 +167.4 1 +167.5 1 +167.6 1 +167.7 1 +167.8 1 +167.9 1 +168 1 +168.1 1 +168.2 1 +168.3 1 +168.4 1 +168.5 1 +168.6 1 +168.7 1 +168.8 1 +168.9 1 +169 1 +169.1 1 +169.2 1 +169.3 1 +169.4 1 +169.5 1 +169.6 1 +169.7 1 +169.8 1 +169.9 1 +170 1 +170.1 1 +170.2 1 +170.3 1 +170.4 1 +170.5 1 +170.6 1 +170.7 1 +170.8 1 +170.9 1 +171 1 +171.1 1 +171.2 1 +171.3 1 +171.4 1 +171.5 1 +171.6 1 +171.7 1 +171.8 1 +171.9 1 +172 1 +172.1 1 +172.2 1 +172.3 1 +172.4 1 +172.5 1 +172.6 1 +172.7 1 +172.8 1 +172.9 1 +173 1 +173.1 1 +173.2 1 +173.3 1 +173.4 1 +173.5 1 +173.6 1 +173.7 1 +173.8 1 +173.9 1 +174 1 +174.1 1 +174.2 1 +174.3 1 +174.4 1 +174.5 1 +174.6 1 +174.7 1 +174.8 1 +174.9 1 +175 1 +175.1 1 +175.2 1 +175.3 1 +175.4 1 +175.5 1 +175.6 1 +175.7 1 +175.8 1 +175.9 1 +176 1 +176.1 1 +176.2 1 +176.3 1 +176.4 1 +176.5 1 +176.6 1 +176.7 1 +176.8 1 +176.9 1 +177 1 +177.1 1 +177.2 1 +177.3 1 +177.4 1 +177.5 1 +177.6 1 +177.7 1 +177.8 1 +177.9 1 +178 1 +178.1 1 +178.2 1 +178.3 1 +178.4 1 +178.5 1 +178.6 1 +178.7 1 +178.8 1 +178.9 1 +179 1 +179.1 1 +179.2 1 +179.3 1 +179.4 1 +179.5 1 +179.6 1 +179.7 1 +179.8 1 +179.9 1 +180 1 diff --git a/Inputs/DetectorConfiguration/AnnularS1.detector b/Inputs/DetectorConfiguration/AnnularS1.detector index 2733b1795fc5a8de118ce799e654e055af0cf0da..145d0667d91151ae2d72c5224ae92b75eb9cfccf 100644 --- a/Inputs/DetectorConfiguration/AnnularS1.detector +++ b/Inputs/DetectorConfiguration/AnnularS1.detector @@ -1,7 +1,18 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 +GeneralTarget +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 +Target + THICKNESS= 309.278350515 + RADIUS= 7.5 + MATERIAL= CD2 + X= 0 + Y= 0 + Z= 0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% AnnularS1 - Z= -158.7 - RMIN= 24 - RMAX= 48 + Z= 100 + VIS= all +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +AnnularS1 + Z= -100 VIS= all - diff --git a/Inputs/DetectorConfiguration/DUMMYDetector.detector b/Inputs/DetectorConfiguration/DUMMYDetector.detector new file mode 100755 index 0000000000000000000000000000000000000000..135a20792d276c041a2fee553bd6cab2a53039a3 --- /dev/null +++ b/Inputs/DetectorConfiguration/DUMMYDetector.detector @@ -0,0 +1,25 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +TheDUMMYDetector +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +DUMMYDetector + THETA= 0 + PHI= 0 + R= 150 + Thickness= 20 + Radius= 50 + Material= material1 + LeadThickness= 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +DUMMYDetector + THETA= 90 + PHI= 0 + R= 175 + Thickness= 100 + Radius= 50 + Material= material2 + LeadThickness= 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Avaible material: +% material1 +% material2 diff --git a/Inputs/DetectorConfiguration/MUST2.detector b/Inputs/DetectorConfiguration/MUST2.detector index 4a7ebad47d22ce1fd369b06a54b37fdfde88b633..bf64823e4fdb1b16bc850eff3c80161fb5d24c59 100644 --- a/Inputs/DetectorConfiguration/MUST2.detector +++ b/Inputs/DetectorConfiguration/MUST2.detector @@ -22,3 +22,13 @@ M2Telescope CSI= 0 VIS= all +%%%%%%% Telescope 2 %%%%%%% +M2Telescope + THETA= -40 + PHI= 0 + R= 150 + BETA= 0 0 0 + SI= 1 + SILI= 1 + CSI= 1 + VIS= all diff --git a/Inputs/DetectorConfiguration/Riken_30mm.detector b/Inputs/DetectorConfiguration/Riken_30mm.detector deleted file mode 100644 index 9b4ab4aec4e3b209c26c16fe6df7bf8603191609..0000000000000000000000000000000000000000 --- a/Inputs/DetectorConfiguration/Riken_30mm.detector +++ /dev/null @@ -1,121 +0,0 @@ -%%%%%%%%%%%Target%%%%%%%%%%%%%%%%%%%1 -%Thickness in micrometer -%Radius in mm -%Temperature in K, Pressure in bar -%Material name according to the target library - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -GeneralTarget -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%Target - THICKNESS= 1 - RADIUS= 45 - MATERIAL= CD2 - X= 0 - Y= 0 - Z= 0 - -CryoTarget - THICKNESS= 3 - RADIUS= 45 - TEMPERATURE= 26 - PRESSURE= 1 - MATERIAL= D2 - WINDOWSTHICKNESS= 0 - WINDOWSMATERIAL= Mylar - X= 0 - Y= 0 - Z= 0 - - -%%%%%%%%%%%%%%%%%%%%% -MUST2Array -%%%%%%% Telescope 1 %%%%%%% -M2Telescope -X1_Y1= 10.85 105.03 146.16 -X1_Y128= 22.8 9.84 175.95 -X128_Y1= 104.09 105.03 108.76 -X128_Y128= 116.04 9.84 138.55 -SI= 1 -SILI= 0 -CSI= 1 -VIS= all - -%%%%%%% Telescope 2 %%%%%%% -M2Telescope -X1_Y1= -116.04 9.84 138.55 -X1_Y128= -22.8 9.84 175.95 -X128_Y1= -104.09 105.03 108.76 -X128_Y128= -10.85 105.03 146.16 -SI= 1 -SILI= 0 -CSI= 1 -VIS= all - -%%%%%%% Telescope 3 %%%%%%% -M2Telescope -X1_Y1= -10.85 -105.03 146.16 -X1_Y128= -22.8 -9.84 175.95 -X128_Y1= -104.09 -105.03 108.76 -X128_Y128= -116.04 -9.84 138.55 -SI= 1 -SILI= 0 -CSI= 1 -VIS= all - -%%%%%%% Telescope 4 %%%%%%% -M2Telescope -X1_Y1= 116.04 -9.84 138.55 -X1_Y128= 22.8 -9.84 175.95 -X128_Y1= 104.09 -105.03 108.76 -X128_Y128= 10.85 -105.03 146.16 -SI= 1 -SILI= 0 -CSI= 1 -VIS= all - -%%%%%%% Telescope 5 %%%%%%% -M2Telescope -X1_Y1= -50.23 -50.23 325 -X1_Y128= 50.23 -50.23 325 -X128_Y1= -50.23 50.23 325 -X128_Y128= 50.23 50.23 325 -SI= 1 -SILI= 0 -CSI= 1 -VIS= all - -%%%%%%%%%%%%%%%%%%%% -AddThinSi -%%%%%%%%% Det 1 %%%%%%%% -ThinSi -A= 18.39 9.66 143.67 -B= 65.26 9.66 124.87 -C= 59.44 56.09 110.34 -D= 12.57 56.09 129.14 - -%%%%%%%%% Det 2 %%%%%%%% -ThinSi -A= -12.57 56.09 129.14 -B= -59.44 56.09 110.34 -C= -65.26 9.66 124.87 -D= -18.39 9.66 143.67 - -%%%%%%%%% Det 3 %%%%%%%% -ThinSi -A= -18.39 -9.66 143.67 -B= -65.26 -9.66 124.87 -C= -59.44 -56.09 110.34 -D= -12.57 -56.09 129.14 - -%%%%%%%%% Det 4 %%%%%%%% -ThinSi -A= 12.57 -56.09 129.14 -B= 59.44 -56.09 110.34 -C= 65.26 -9.66 124.87 -D= 18.39 -9.66 143.67 - - - - - diff --git a/Inputs/DetectorConfiguration/Riken_65mm.detector b/Inputs/DetectorConfiguration/Riken_65mm.detector index 0c25c3e988018a4baad82e44162fc84aac8650e2..bee456b3d8bd5104bcb017232ee3a0cc5bc03615 100644 --- a/Inputs/DetectorConfiguration/Riken_65mm.detector +++ b/Inputs/DetectorConfiguration/Riken_65mm.detector @@ -11,6 +11,7 @@ GeneralTarget THICKNESS= 1 RADIUS= 45 MATERIAL= CD2 + ANGLE= 45 X= 0 Y= 0 Z= 0 @@ -75,10 +76,10 @@ VIS= all %%%%%%% Telescope 5 %%%%%%% M2Telescope -X1_Y1= -50.23 -50.23 325 -X1_Y128= 50.23 -50.23 325 -X128_Y1= -50.23 50.23 325 -X128_Y128= 50.23 50.23 325 +X1_Y1= -50.23 -50.23 365 +X1_Y128= 50.23 -50.23 365 +X128_Y1= -50.23 50.23 365 +X128_Y128= 50.23 50.23 365 SI= 1 SILI= 0 CSI= 1 @@ -144,5 +145,25 @@ B= 58.66 -56.29 70.79 C= 64.48 -9.85 85.31 D= 17.61 -9.85 104.11 - +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +ScintillatorPlastic +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Plastic + THETA= 0 + PHI= 0 + R= 318 + Thickness= 20 + Radius= 20 + Scintillator= BC400 + LeadThickness= 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Plastic + THETA= 0 + PHI= 0 + R= 343 + Thickness= 30 + Radius= 20 + Scintillator= BC400 + LeadThickness= 2 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Inputs/DetectorConfiguration/e530.detector b/Inputs/DetectorConfiguration/e530.detector index 83a8642e9ae43a98fd11d52e3721815e7ca4f02c..fbe1240194f44a603020ddcc03edf293037381ea 100644 --- a/Inputs/DetectorConfiguration/e530.detector +++ b/Inputs/DetectorConfiguration/e530.detector @@ -22,14 +22,13 @@ Target THICKNESS= 309.278350515 RADIUS= 7.5 MATERIAL= CD2 + ANGLE= 45 X= 0 Y= 0 Z= 40 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% AnnularS1 Z= -158.7 - RMIN= 24 - RMAX= 48 VIS= all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MUST2Array diff --git a/Inputs/DetectorConfiguration/gaspardTestSpheric.detector b/Inputs/DetectorConfiguration/gaspardTestSpheric.detector index 5465fea0426fe14a09e3bedd7c97de63b6382e72..91d535366e794c964708febb232c9fa41ad4ed2c 100644 --- a/Inputs/DetectorConfiguration/gaspardTestSpheric.detector +++ b/Inputs/DetectorConfiguration/gaspardTestSpheric.detector @@ -9,9 +9,11 @@ GeneralTarget %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Target - THICKNESS= 0.0001 + THICKNESS= 10.3 + ANGLE= 0 RADIUS= 12 MATERIAL= CD2 + NBLAYERS= 50 X= 0 Y= 0 Z= 0 diff --git a/Inputs/DetectorConfiguration/plastic.detector b/Inputs/DetectorConfiguration/plastic.detector index 138a7f665cb5624ba7e36280e99ab848f141516c..71fd2e95bfcb1028cc57920f0983fb8358eea0d4 100644 --- a/Inputs/DetectorConfiguration/plastic.detector +++ b/Inputs/DetectorConfiguration/plastic.detector @@ -1,5 +1,3 @@ -%Fichier de configuration manip E225 - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ScintillatorPlastic %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -9,6 +7,7 @@ Plastic R= 150 Thickness= 20 Radius= 50 + Scintillator= BC400 LeadThickness= 0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plastic @@ -17,5 +16,12 @@ Plastic R= 175 Thickness= 20 Radius= 50 + Scintillator= BC452_5 LeadThickness= 0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Avaible material: +% BC400 +% BC452_2 : BC400 with 2% Pb +% BC452_5 : BC400 with 5% Pb +% BC452_10 : BC400 with 10% Pb diff --git a/Inputs/dEdX/3He_Al.txt b/Inputs/EnergyLoss/3He_Al.txt similarity index 100% rename from Inputs/dEdX/3He_Al.txt rename to Inputs/EnergyLoss/3He_Al.txt diff --git a/Inputs/dEdX/3He_CsI.txt b/Inputs/EnergyLoss/3He_CsI.txt similarity index 100% rename from Inputs/dEdX/3He_CsI.txt rename to Inputs/EnergyLoss/3He_CsI.txt diff --git a/Inputs/dEdX/3He_D2gaz_1b_26K.txt b/Inputs/EnergyLoss/3He_D2gaz_1b_26K.txt similarity index 100% rename from Inputs/dEdX/3He_D2gaz_1b_26K.txt rename to Inputs/EnergyLoss/3He_D2gaz_1b_26K.txt diff --git a/Inputs/dEdX/3He_Mylar.txt b/Inputs/EnergyLoss/3He_Mylar.txt similarity index 100% rename from Inputs/dEdX/3He_Mylar.txt rename to Inputs/EnergyLoss/3He_Mylar.txt diff --git a/Inputs/dEdX/3He_Si.txt b/Inputs/EnergyLoss/3He_Si.txt similarity index 100% rename from Inputs/dEdX/3He_Si.txt rename to Inputs/EnergyLoss/3He_Si.txt diff --git a/Inputs/EnergyLoss/deuton_cd2.txt b/Inputs/EnergyLoss/deuton_cd2.txt new file mode 100644 index 0000000000000000000000000000000000000000..2fe13fa413e0bc2a8965b082f90fd3a4fc862e0b --- /dev/null +++ b/Inputs/EnergyLoss/deuton_cd2.txt @@ -0,0 +1,218 @@ +Energy (MeV/u)1 0 - [He-base] F.Hubert et al, AD&ND Tables 46(1990)1 Energy (MeV/u)2 1 - [H -base] J.F.Ziegler et al, Pergamon Press, NY (low energy) Energy (MeV/u)3 2 - ATIMA 1.2 LS-theory (recommended for high energy) Energy (MeV/u)4 3 - ATIMA 1.2 without LS-correction Energy (MeV/u)5 4 - electrical component of [1] - J.F.Ziegler et al Energy (MeV/u)6 5 - nuclear component of [1] - J.F.Ziegler et al +0.001000 0.0212619 0.001000 0.0265849 0.001000 0.0349196 0.001000 0.0349196 0.001000 0.0229095 0.001000 0.00367538 +0.002000 0.025331 0.002000 0.0316497 0.002000 0.0396059 0.002000 0.0396059 0.002000 0.0291996 0.002000 0.00245012 +0.005000 0.033267 0.005000 0.0415734 0.005000 0.0480545 0.005000 0.0480545 0.005000 0.0402398 0.005000 0.00133354 +0.008000 0.0387088 0.008000 0.0483854 0.008000 0.0534967 0.008000 0.0534967 0.008000 0.0474349 0.008000 0.000950509 +0.010000 0.0416759 0.010000 0.0520884 0.010000 0.0563611 0.010000 0.0563611 0.010000 0.0512881 0.010000 0.00080031 +0.015000 0.0502657 0.015000 0.0601465 0.015000 0.062076 0.015000 0.062076 0.015000 0.0595587 0.015000 0.000587807 +0.020000 0.0573036 0.020000 0.0666561 0.020000 0.0665431 0.020000 0.0665431 0.020000 0.0661864 0.020000 0.000469732 +0.025000 0.0631244 0.025000 0.0720883 0.025000 0.0702577 0.025000 0.0702577 0.025000 0.0716946 0.025000 0.000393705 +0.030000 0.0679066 0.030000 0.0766875 0.030000 0.0738343 0.030000 0.0738343 0.030000 0.0763472 0.030000 0.000340288 +0.035000 0.0717679 0.035000 0.0806006 0.035000 0.0768226 0.035000 0.0768226 0.035000 0.0803001 0.035000 0.000300518 +0.040000 0.0748013 0.040000 0.0839257 0.040000 0.0793222 0.040000 0.0793222 0.040000 0.0836561 0.040000 0.000269655 +0.045000 0.0770898 0.045000 0.0867338 0.045000 0.0814053 0.045000 0.0814053 0.045000 0.0864889 0.045000 0.000244948 +0.050000 0.0787138 0.050000 0.0890801 0.050000 0.0831278 0.050000 0.0831278 0.050000 0.0888554 0.050000 0.000224684 +0.055000 0.0797523 0.055000 0.09101 0.055000 0.0845344 0.055000 0.0845344 0.055000 0.0908022 0.055000 0.000207737 +0.060000 0.080283 0.060000 0.0925627 0.060000 0.0856624 0.060000 0.0856624 0.060000 0.0923694 0.060000 0.000193337 +0.070000 0.0801177 0.070000 0.0946742 0.070000 0.0872044 0.070000 0.0872044 0.070000 0.0945041 0.070000 0.000170138 +0.080000 0.0787637 0.080000 0.0956641 0.080000 0.087962 0.080000 0.087962 0.080000 0.0955119 0.080000 0.000152222 +0.090000 0.0766704 0.090000 0.0957507 0.090000 0.0880983 0.090000 0.0880983 0.090000 0.0956128 0.090000 0.000137936 +0.100000 0.0741784 0.100000 0.0951269 0.100000 0.0877451 0.100000 0.0877451 0.100000 0.0950007 0.100000 0.000126257 +0.120000 0.0688744 0.120000 0.0923935 0.120000 0.0859813 0.120000 0.0859813 0.120000 0.0922852 0.120000 0.000108265 +0.140000 0.0639 0.140000 0.0885087 0.140000 0.0833176 0.140000 0.0833176 0.140000 0.0884137 0.140000 9.50087e-05 +0.160000 0.0595816 0.160000 0.0841611 0.160000 0.0801843 0.160000 0.0801843 0.160000 0.0840763 0.160000 8.48081e-05 +0.180000 0.055933 0.180000 0.079763 0.180000 0.0768615 0.180000 0.0768615 0.180000 0.0796863 0.180000 7.66986e-05 +0.200000 0.052863 0.200000 0.0755389 0.200000 0.0735258 0.200000 0.0735258 0.200000 0.0754688 0.200000 7.00864e-05 +0.250000 0.0470328 0.250000 0.0662838 0.250000 0.0657209 0.250000 0.0657209 0.250000 0.066226 0.250000 5.7861e-05 +0.300000 0.0428758 0.300000 0.0589624 0.300000 0.0590735 0.300000 0.0590735 0.300000 0.0589129 0.300000 4.94376e-05 +0.350000 0.0396837 0.350000 0.053215 0.350000 0.0535872 0.350000 0.0535872 0.350000 0.0531717 0.350000 4.32593e-05 +0.400000 0.0370952 0.400000 0.0486407 0.400000 0.0490785 0.400000 0.0490785 0.400000 0.0486022 0.400000 3.85221e-05 +0.450000 0.0349167 0.450000 0.0449277 0.450000 0.0453471 0.450000 0.0453471 0.450000 0.0448929 0.450000 3.47673e-05 +0.500000 0.0330365 0.500000 0.0418523 0.500000 0.0422233 0.500000 0.0422233 0.500000 0.0418205 0.500000 3.17136e-05 +0.600000 0.0299151 0.600000 0.0370321 0.600000 0.0372993 0.600000 0.0372993 0.600000 0.0370051 0.600000 2.7038e-05 +0.700000 0.0273993 0.700000 0.0333931 0.700000 0.0335853 0.700000 0.0335853 0.700000 0.0333695 0.700000 2.36176e-05 +0.800000 0.0253126 0.800000 0.0305188 0.800000 0.0306671 0.800000 0.0306671 0.800000 0.0304978 0.800000 2.10005e-05 +0.900000 0.0235471 0.900000 0.0281721 0.900000 0.028299 0.900000 0.028299 0.900000 0.0281532 0.900000 1.89298e-05 +1.000000 0.0220303 1.000000 0.0262083 1.000000 0.0263281 1.000000 0.0263281 1.000000 0.026191 1.000000 1.72484e-05 +1.250000 0.0190239 1.250000 0.0224276 1.250000 0.0225608 1.250000 0.0225608 1.250000 0.0224135 1.250000 1.41571e-05 +1.500000 0.0167842 1.500000 0.0196835 1.500000 0.0198441 1.500000 0.0198441 1.500000 0.0196714 1.500000 1.20416e-05 +1.750000 0.0150456 1.750000 0.0175838 1.750000 0.0177716 1.750000 0.0177716 1.750000 0.0175733 1.750000 1.04982e-05 +2.000000 0.0136537 2.000000 0.0159176 2.000000 0.0161286 2.000000 0.0161286 2.000000 0.0159083 2.000000 9.31995e-06 +2.250000 0.0125124 2.250000 0.0145591 2.250000 0.0147888 2.250000 0.0147888 2.250000 0.0145507 2.250000 8.38949e-06 +2.500000 0.0115082 2.500000 0.013428 2.500000 0.0136722 2.500000 0.0136722 2.500000 0.0134204 2.500000 7.63515e-06 +3.000000 0.0100487 3.000000 0.0116475 3.000000 0.0119113 3.000000 0.0119113 3.000000 0.011641 3.000000 6.48464e-06 +3.500000 0.00894107 3.500000 0.0103055 3.500000 0.0105802 3.500000 0.0105802 3.500000 0.0102998 3.500000 5.64668e-06 +4.000000 0.00806927 4.000000 0.00925497 4.000000 0.009535 4.000000 0.009535 4.000000 0.00924996 4.000000 5.00786e-06 +4.500000 0.00736381 4.500000 0.0084087 4.500000 0.00869045 4.500000 0.00869045 4.500000 0.0084042 4.500000 4.50398e-06 +5.000000 0.0067803 5.000000 0.00771138 5.000000 0.00799256 5.000000 0.00799256 5.000000 0.00770728 5.000000 4.09589e-06 +5.500000 0.00628901 5.500000 0.0071262 5.500000 0.00740533 5.500000 0.00740533 5.500000 0.00712244 5.500000 3.75832e-06 +6.000000 0.00586925 6.000000 0.00662767 6.000000 0.00690381 6.000000 0.00690381 6.000000 0.00662419 6.000000 3.47424e-06 +6.500000 0.00550616 6.500000 0.00619755 6.500000 0.00647009 6.500000 0.00647009 6.500000 0.00619432 6.500000 3.23172e-06 +7.000000 0.00518876 7.000000 0.00582243 7.000000 0.00609099 7.000000 0.00609099 7.000000 0.00581941 7.000000 3.02213e-06 +7.500000 0.00490876 7.500000 0.00549222 7.500000 0.00575659 7.500000 0.00575659 7.500000 0.00548938 7.500000 2.83912e-06 +8.000000 0.0046598 8.000000 0.00519917 8.000000 0.00545925 8.000000 0.00545925 8.000000 0.00519649 8.000000 2.67788e-06 +8.500000 0.00443689 8.500000 0.00493723 8.500000 0.00519299 8.500000 0.00519299 8.500000 0.0049347 8.500000 2.53467e-06 +9.000000 0.00423606 9.000000 0.00470163 9.000000 0.00495307 9.000000 0.00495307 9.000000 0.00469923 9.000000 2.40661e-06 +9.500000 0.00405412 9.500000 0.00448851 9.500000 0.0047357 9.500000 0.0047357 9.500000 0.00448622 9.500000 2.29137e-06 +10.000000 0.00388847 10.000000 0.00444633 10.000000 0.00453776 10.000000 0.00453776 10.000000 0.00444415 10.000000 2.1871e-06 +11.000000 0.00359787 11.000000 0.00412019 11.000000 0.00418625 11.000000 0.00418628 11.000000 0.00411819 11.000000 2.00567e-06 +12.000000 0.00335108 12.000000 0.00384175 12.000000 0.00388831 12.000000 0.00388837 12.000000 0.00383989 12.000000 1.85308e-06 +13.000000 0.00313872 13.000000 0.00360113 13.000000 0.00363257 13.000000 0.00363261 13.000000 0.00359941 13.000000 1.7229e-06 +14.000000 0.00295393 14.000000 0.00339103 14.000000 0.00341064 14.000000 0.00341063 14.000000 0.00338942 14.000000 1.61046e-06 +15.000000 0.00279158 15.000000 0.00320592 15.000000 0.00321615 15.000000 0.00321616 15.000000 0.0032044 15.000000 1.51233e-06 +16.000000 0.00264774 16.000000 0.00304153 16.000000 0.00304443 16.000000 0.00304439 16.000000 0.0030401 16.000000 1.42591e-06 +17.000000 0.00251937 17.000000 0.00289452 17.000000 0.00289173 17.000000 0.0028916 17.000000 0.00289317 17.000000 1.34919e-06 +18.000000 0.00240406 18.000000 0.00276223 18.000000 0.00275501 18.000000 0.00275483 18.000000 0.00276095 18.000000 1.28061e-06 +19.000000 0.00229987 19.000000 0.00264253 19.000000 0.0026319 19.000000 0.00263172 19.000000 0.00264131 19.000000 1.21892e-06 +20.000000 0.00220524 20.000000 0.00253368 20.000000 0.00252054 20.000000 0.00252035 20.000000 0.00253252 20.000000 1.16313e-06 +21.000000 0.00211888 21.000000 0.00243425 21.000000 0.00241935 21.000000 0.00241915 21.000000 0.00243314 21.000000 1.1124e-06 +22.000000 0.00203975 22.000000 0.00234305 22.000000 0.00232702 22.000000 0.00232683 22.000000 0.00234198 22.000000 1.06609e-06 +23.000000 0.00196695 23.000000 0.00225908 23.000000 0.00224249 23.000000 0.00224229 23.000000 0.00225805 23.000000 1.02361e-06 +24.000000 0.00189973 24.000000 0.0021815 24.000000 0.00216491 24.000000 0.00216463 24.000000 0.00218052 24.000000 9.84523e-07 +25.000000 0.00183747 25.000000 0.0021096 25.000000 0.00209347 25.000000 0.00209307 25.000000 0.00210865 25.000000 9.4842e-07 +27.000000 0.00172574 27.000000 0.00198048 27.000000 0.0019662 27.000000 0.0019657 27.000000 0.0019796 27.000000 8.83889e-07 +29.000000 0.00162829 29.000000 0.00186778 29.000000 0.00185641 29.000000 0.00185591 29.000000 0.00186695 29.000000 8.27878e-07 +31.000000 0.00154249 31.000000 0.0017685 31.000000 0.00175939 31.000000 0.00175889 31.000000 0.00176772 31.000000 7.78786e-07 +33.000000 0.00146633 33.000000 0.00168036 33.000000 0.00167199 33.000000 0.00167152 33.000000 0.00167963 33.000000 7.3539e-07 +35.000000 0.00139825 35.000000 0.00160156 35.000000 0.00159381 35.000000 0.00159339 35.000000 0.00160086 35.000000 6.96743e-07 +38.000000 0.00130863 38.000000 0.00149781 38.000000 0.00149107 38.000000 0.0014905 38.000000 0.00149716 38.000000 6.46082e-07 +41.000000 0.00123121 41.000000 0.00140821 41.000000 0.00140219 41.000000 0.00140161 41.000000 0.00140761 41.000000 6.02528e-07 +44.000000 0.00116363 44.000000 0.00133001 44.000000 0.00132453 44.000000 0.00132399 44.000000 0.00132945 44.000000 5.64669e-07 +47.000000 0.00110407 47.000000 0.00126114 47.000000 0.00125611 47.000000 0.0012556 47.000000 0.00126061 47.000000 5.31443e-07 +50.000000 0.00105118 50.000000 0.00120001 50.000000 0.00119534 50.000000 0.00119487 50.000000 0.00119951 50.000000 5.02041e-07 +55.000000 0.000974995 55.000000 0.00111204 55.000000 0.00110784 55.000000 0.0011074 55.000000 0.00111158 55.000000 4.5988e-07 +60.000000 0.000910668 60.000000 0.00103786 60.000000 0.00103403 60.000000 0.00103359 60.000000 0.00103743 60.000000 4.24468e-07 +65.000000 0.000855583 65.000000 0.000974428 65.000000 0.000970947 65.000000 0.000970435 65.000000 0.000974034 65.000000 3.94289e-07 +70.000000 0.000807845 70.000000 0.000919548 70.000000 0.000916217 70.000000 0.000915751 70.000000 0.00091918 70.000000 3.68251e-07 +75.000000 0.000766048 75.000000 0.000871579 75.000000 0.000868364 75.000000 0.000867924 75.000000 0.000871233 75.000000 3.45548e-07 +80.000000 0.000729126 80.000000 0.000829279 80.000000 0.00082614 80.000000 0.000825724 80.000000 0.000828953 80.000000 3.2557e-07 +85.000000 0.000696255 85.000000 0.000791689 85.000000 0.000788598 85.000000 0.000788205 85.000000 0.000791381 85.000000 3.07851e-07 +90.000000 0.000666789 90.000000 0.000758057 90.000000 0.000754997 90.000000 0.00075462 90.000000 0.000757765 90.000000 2.92023e-07 +95.000000 0.000640214 95.000000 0.000727782 95.000000 0.000724823 95.000000 0.000724375 95.000000 0.000727504 95.000000 2.77796e-07 +100.000000 0.000616115 100.000000 0.000700381 100.000000 0.00069742 100.000000 0.000696992 100.000000 0.000700116 100.000000 2.64936e-07 +105.000000 0.000594153 105.000000 0.00067546 105.000000 0.000672488 105.000000 0.000672078 105.000000 0.000675207 105.000000 2.53253e-07 +110.000000 0.00057405 110.000000 0.000652693 110.000000 0.000649707 110.000000 0.000649312 110.000000 0.00065245 110.000000 2.4259e-07 +115.000000 0.000555573 115.000000 0.00063181 115.000000 0.000628805 115.000000 0.000628425 115.000000 0.000631578 115.000000 2.32819e-07 +120.000000 0.000538529 120.000000 0.000612585 120.000000 0.000609559 120.000000 0.000609193 120.000000 0.000612362 120.000000 2.2383e-07 +125.000000 0.000522752 125.000000 0.000594827 125.000000 0.00059178 125.000000 0.000591425 125.000000 0.000594611 125.000000 2.15533e-07 +130.000000 0.000508103 130.000000 0.000578372 130.000000 0.000575302 130.000000 0.000574959 130.000000 0.000578164 130.000000 2.07849e-07 +135.000000 0.000494463 135.000000 0.000563081 135.000000 0.000559982 135.000000 0.000559656 135.000000 0.00056288 135.000000 2.00712e-07 +140.000000 0.000481727 140.000000 0.000548833 140.000000 0.000545746 140.000000 0.000545397 140.000000 0.000548639 140.000000 1.94065e-07 +145.000000 0.000469806 145.000000 0.000535526 145.000000 0.000532459 145.000000 0.000532078 145.000000 0.000535338 145.000000 1.87859e-07 +150.000000 0.000458624 150.000000 0.000523068 150.000000 0.000519978 150.000000 0.000519609 150.000000 0.000522886 150.000000 1.82051e-07 +155.000000 0.000442878 155.000000 0.00051138 155.000000 0.000508266 155.000000 0.000507911 155.000000 0.000511204 155.000000 1.76603e-07 +160.000000 0.000433649 160.000000 0.000500393 160.000000 0.000497263 160.000000 0.000496914 160.000000 0.000500221 160.000000 1.71482e-07 +165.000000 0.000424946 165.000000 0.000490044 165.000000 0.000486898 165.000000 0.000486557 165.000000 0.000489878 165.000000 1.6666e-07 +170.000000 0.000416725 170.000000 0.000480281 170.000000 0.000477119 170.000000 0.000476787 170.000000 0.000480119 170.000000 1.62111e-07 +175.000000 0.000408946 175.000000 0.000471053 175.000000 0.000467879 175.000000 0.000467554 175.000000 0.000470896 175.000000 1.57812e-07 +180.000000 0.000401574 180.000000 0.000462319 180.000000 0.000459133 180.000000 0.000458815 180.000000 0.000462166 180.000000 1.53742e-07 +185.000000 0.000394577 185.000000 0.00045404 185.000000 0.000450844 185.000000 0.000450532 185.000000 0.00045389 185.000000 1.49885e-07 +190.000000 0.000387927 190.000000 0.00044618 190.000000 0.000442977 190.000000 0.000442671 190.000000 0.000446034 190.000000 1.46222e-07 +195.000000 0.000381599 195.000000 0.00043871 195.000000 0.000435496 195.000000 0.000435199 195.000000 0.000438567 195.000000 1.4274e-07 +200.000000 0.00037557 200.000000 0.0004316 200.000000 0.000428379 200.000000 0.00042809 200.000000 0.00043146 200.000000 1.39426e-07 +210.000000 0.000364325 210.000000 0.000418362 210.000000 0.000415179 210.000000 0.000414856 210.000000 0.000418229 210.000000 1.33253e-07 +220.000000 0.000354048 220.000000 0.00040629 220.000000 0.000403115 220.000000 0.000402793 220.000000 0.000406162 220.000000 1.2762e-07 +230.000000 0.000344618 230.000000 0.000395237 230.000000 0.000392062 230.000000 0.000391753 230.000000 0.000395114 230.000000 1.2246e-07 +240.000000 0.000335934 240.000000 0.000385079 240.000000 0.000381912 240.000000 0.000381612 240.000000 0.000384961 240.000000 1.17713e-07 +250.000000 0.000327909 250.000000 0.000375712 250.000000 0.000372558 250.000000 0.000372266 250.000000 0.000375599 250.000000 1.13333e-07 +260.000000 0.000320472 260.000000 0.000367049 260.000000 0.00036391 260.000000 0.000363626 260.000000 0.00036694 260.000000 1.09276e-07 +270.000000 0.00031356 270.000000 0.000359014 270.000000 0.000355893 270.000000 0.000355616 270.000000 0.000358908 270.000000 1.0551e-07 +280.000000 0.000307119 280.000000 0.00035154 280.000000 0.000348441 280.000000 0.000348171 280.000000 0.000351438 280.000000 1.02002e-07 +290.000000 0.000301103 290.000000 0.000344573 290.000000 0.000341494 290.000000 0.000341234 290.000000 0.000344474 290.000000 9.87279e-08 +300.000000 0.000295472 300.000000 0.000338062 300.000000 0.000335028 300.000000 0.000334756 300.000000 0.000337966 300.000000 9.56639e-08 +310.000000 0.000290189 310.000000 0.000331966 310.000000 0.000328984 310.000000 0.000328693 310.000000 0.000331873 310.000000 9.27903e-08 +320.000000 0.000285223 320.000000 0.000326246 320.000000 0.000323293 320.000000 0.000323008 320.000000 0.000326156 320.000000 9.00898e-08 +330.000000 0.000280548 330.000000 0.000320869 330.000000 0.000317945 330.000000 0.000317668 330.000000 0.000320782 330.000000 8.7547e-08 +340.000000 0.000276139 340.000000 0.000315807 340.000000 0.000312915 340.000000 0.000312643 340.000000 0.000315722 340.000000 8.51483e-08 +350.000000 0.000271973 350.000000 0.000311032 350.000000 0.000308174 350.000000 0.000307906 350.000000 0.000310949 350.000000 8.28818e-08 +360.000000 0.000268032 360.000000 0.000306522 360.000000 0.000303698 360.000000 0.000303435 360.000000 0.000306441 360.000000 8.07366e-08 +370.000000 0.000264298 370.000000 0.000302255 370.000000 0.000299439 370.000000 0.000299181 370.000000 0.000302177 370.000000 7.87032e-08 +380.000000 0.000260756 380.000000 0.000298214 380.000000 0.000295408 380.000000 0.000295153 380.000000 0.000298137 380.000000 7.6773e-08 +390.000000 0.000257391 390.000000 0.000294381 390.000000 0.000291586 390.000000 0.000291335 390.000000 0.000294306 390.000000 7.49382e-08 +400.000000 0.000254192 400.000000 0.000290741 400.000000 0.000287958 400.000000 0.000287711 400.000000 0.000290668 400.000000 7.31918e-08 +410.000000 0.000251146 410.000000 0.000287281 410.000000 0.000284512 410.000000 0.000284268 410.000000 0.000287209 410.000000 7.15275e-08 +420.000000 0.000248243 420.000000 0.000283987 420.000000 0.000281234 420.000000 0.000280993 420.000000 0.000283917 420.000000 6.99397e-08 +430.000000 0.000245473 430.000000 0.000280849 430.000000 0.000278112 430.000000 0.000277874 430.000000 0.000280781 430.000000 6.8423e-08 +440.000000 0.000242828 440.000000 0.000277857 440.000000 0.000275133 440.000000 0.000274901 440.000000 0.00027779 440.000000 6.69728e-08 +450.000000 0.000240301 450.000000 0.000275 450.000000 0.000272294 450.000000 0.000272065 450.000000 0.000274935 450.000000 6.55848e-08 +460.000000 0.000237883 460.000000 0.000272271 460.000000 0.000269592 460.000000 0.000269356 460.000000 0.000272207 460.000000 6.4255e-08 +470.000000 0.000235568 470.000000 0.000269661 470.000000 0.000267015 470.000000 0.000266767 470.000000 0.000269599 470.000000 6.29797e-08 +480.000000 0.00023335 480.000000 0.000267164 480.000000 0.000264544 480.000000 0.000264291 480.000000 0.000267102 480.000000 6.17557e-08 +490.000000 0.000231223 490.000000 0.000264772 490.000000 0.000262172 490.000000 0.00026192 490.000000 0.000264711 490.000000 6.05799e-08 +500.000000 0.000229183 500.000000 0.000262479 500.000000 0.000259895 500.000000 0.000259649 500.000000 0.00026242 500.000000 5.94494e-08 +520.000000 0.000225341 520.000000 0.00025817 520.000000 0.000255623 520.000000 0.000255382 520.000000 0.000258113 520.000000 5.73143e-08 +540.000000 0.00022179 540.000000 0.000254195 540.000000 0.000251686 540.000000 0.000251449 540.000000 0.00025414 540.000000 5.53318e-08 +560.000000 0.000218501 560.000000 0.00025052 560.000000 0.000248048 560.000000 0.000247815 560.000000 0.000250467 560.000000 5.34861e-08 +580.000000 0.000215448 580.000000 0.000247115 580.000000 0.000244678 580.000000 0.000244449 580.000000 0.000247063 580.000000 5.17632e-08 +600.000000 0.000212608 600.000000 0.000243952 600.000000 0.00024155 600.000000 0.000241325 600.000000 0.000243902 600.000000 5.01512e-08 +620.000000 0.000209962 620.000000 0.000241011 620.000000 0.000238641 620.000000 0.000238419 620.000000 0.000240962 620.000000 4.86396e-08 +640.000000 0.000207493 640.000000 0.000238269 640.000000 0.000235931 640.000000 0.000235712 640.000000 0.000238222 640.000000 4.72192e-08 +660.000000 0.000205185 660.000000 0.00023571 660.000000 0.0002334 660.000000 0.000233184 660.000000 0.000235664 660.000000 4.58819e-08 +680.000000 0.000203024 680.000000 0.000233318 680.000000 0.000231032 680.000000 0.000230821 680.000000 0.000233273 680.000000 4.46206e-08 +700.000000 0.000201 700.000000 0.000231078 700.000000 0.000228821 700.000000 0.000228608 700.000000 0.000231035 700.000000 4.34288e-08 +720.000000 0.000199101 720.000000 0.000228979 720.000000 0.000226755 720.000000 0.000226533 720.000000 0.000228937 720.000000 4.2301e-08 +740.000000 0.000197317 740.000000 0.00022701 740.000000 0.000224814 740.000000 0.000224584 740.000000 0.000226969 740.000000 4.12321e-08 +760.000000 0.00019564 760.000000 0.00022516 760.000000 0.000222981 760.000000 0.000222752 760.000000 0.00022512 760.000000 4.02175e-08 +780.000000 0.000194063 780.000000 0.00022342 780.000000 0.000221252 780.000000 0.000221028 780.000000 0.000223381 780.000000 3.92531e-08 +800.000000 0.000192577 800.000000 0.000221783 800.000000 0.000219624 800.000000 0.000219403 800.000000 0.000221744 800.000000 3.83353e-08 +820.000000 0.000191177 820.000000 0.00022024 820.000000 0.000218089 820.000000 0.000217869 820.000000 0.000220203 820.000000 3.74608e-08 +840.000000 0.000189857 840.000000 0.000218786 840.000000 0.000216639 840.000000 0.000216421 840.000000 0.00021875 840.000000 3.66264e-08 +860.000000 0.000188612 860.000000 0.000217415 860.000000 0.000215269 860.000000 0.000215053 860.000000 0.000217379 860.000000 3.58296e-08 +880.000000 0.000187437 880.000000 0.00021612 880.000000 0.000213972 880.000000 0.000213758 880.000000 0.000216085 880.000000 3.50677e-08 +900.000000 0.000186327 900.000000 0.000214897 900.000000 0.000212745 900.000000 0.000212532 900.000000 0.000214863 900.000000 3.43386e-08 +920.000000 0.000185278 920.000000 0.000213742 920.000000 0.000211581 920.000000 0.00021137 920.000000 0.000213708 920.000000 3.364e-08 +940.000000 0.000184288 940.000000 0.00021265 940.000000 0.000210478 940.000000 0.000210268 940.000000 0.000212617 940.000000 3.29702e-08 +960.000000 0.000183351 960.000000 0.000211616 960.000000 0.000209431 960.000000 0.000209222 960.000000 0.000211584 960.000000 3.23274e-08 +980.000000 0.000182466 980.000000 0.000210639 980.000000 0.000208436 980.000000 0.000208229 980.000000 0.000210607 980.000000 3.17099e-08 +1000.000000 0.000181629 1000.000000 0.000209714 1000.000000 0.000207491 1000.000000 0.000207286 1000.000000 0.000209683 1000.000000 3.11162e-08 +1020.000000 0.000180838 1020.000000 0.000208839 1020.000000 0.000206593 1020.000000 0.000206388 1020.000000 0.000208808 1020.000000 3.05451e-08 +1040.000000 0.000180091 1040.000000 0.00020801 1040.000000 0.000205738 1040.000000 0.000205535 1040.000000 0.00020798 1040.000000 2.99952e-08 +1060.000000 0.000179384 1060.000000 0.000207225 1060.000000 0.000204924 1060.000000 0.000204722 1060.000000 0.000207195 1060.000000 2.94653e-08 +1080.000000 0.000178715 1080.000000 0.000206481 1080.000000 0.000204149 1080.000000 0.000203948 1080.000000 0.000206452 1080.000000 2.89544e-08 +1100.000000 0.000178084 1100.000000 0.000205778 1100.000000 0.00020341 1100.000000 0.000203211 1100.000000 0.000205749 1100.000000 2.84614e-08 +1120.000000 0.000177487 1120.000000 0.000205111 1120.000000 0.000202706 1120.000000 0.000202508 1120.000000 0.000205083 1120.000000 2.79855e-08 +1140.000000 0.000176924 1140.000000 0.00020448 1140.000000 0.000202035 1140.000000 0.000201837 1140.000000 0.000204452 1140.000000 2.75257e-08 +1160.000000 0.000176392 1160.000000 0.000203882 1160.000000 0.000201395 1160.000000 0.000201197 1160.000000 0.000203855 1160.000000 2.70812e-08 +1180.000000 0.000175891 1180.000000 0.000203317 1180.000000 0.000200783 1180.000000 0.000200587 1180.000000 0.00020329 1180.000000 2.66513e-08 +1200.000000 0.000175418 1200.000000 0.000202782 1200.000000 0.000200199 1200.000000 0.000200003 1200.000000 0.000202755 1200.000000 2.62352e-08 +1220.000000 0.000174972 1220.000000 0.000202275 1220.000000 0.00019964 1220.000000 0.000199447 1220.000000 0.00020225 1220.000000 2.58323e-08 +1240.000000 0.000174553 1240.000000 0.000201797 1240.000000 0.000199106 1240.000000 0.000198914 1240.000000 0.000201771 1240.000000 2.5442e-08 +1260.000000 0.000174158 1260.000000 0.000201344 1260.000000 0.000198596 1260.000000 0.000198406 1260.000000 0.000201319 1260.000000 2.50637e-08 +1280.000000 0.000173788 1280.000000 0.000200917 1280.000000 0.000198109 1280.000000 0.00019792 1280.000000 0.000200892 1280.000000 2.46967e-08 +1300.000000 0.00017344 1300.000000 0.000200513 1300.000000 0.000197645 1300.000000 0.000197455 1300.000000 0.000200489 1300.000000 2.43407e-08 +1320.000000 0.000173114 1320.000000 0.000200133 1320.000000 0.000197201 1320.000000 0.00019701 1320.000000 0.000200109 1320.000000 2.39952e-08 +1340.000000 0.00017281 1340.000000 0.000199774 1340.000000 0.000196778 1340.000000 0.000196585 1340.000000 0.00019975 1340.000000 2.36595e-08 +1360.000000 0.000172525 1360.000000 0.000199436 1360.000000 0.000196373 1360.000000 0.000196178 1360.000000 0.000199412 1360.000000 2.33335e-08 +1380.000000 0.00017226 1380.000000 0.000199118 1380.000000 0.000195986 1380.000000 0.000195788 1380.000000 0.000199095 1380.000000 2.30166e-08 +1400.000000 0.000172013 1400.000000 0.000198819 1400.000000 0.000195616 1400.000000 0.000195415 1400.000000 0.000198796 1400.000000 2.27084e-08 +1420.000000 0.000171784 1420.000000 0.000198538 1420.000000 0.000195261 1420.000000 0.000195058 1420.000000 0.000198516 1420.000000 2.24086e-08 +1440.000000 0.000171572 1440.000000 0.000198275 1440.000000 0.000194921 1440.000000 0.000194716 1440.000000 0.000198253 1440.000000 2.21169e-08 +1460.000000 0.000171376 1460.000000 0.000198029 1460.000000 0.000194595 1460.000000 0.000194389 1460.000000 0.000198007 1460.000000 2.18329e-08 +1480.000000 0.000171197 1480.000000 0.000197799 1480.000000 0.000194281 1480.000000 0.000194076 1480.000000 0.000197778 1480.000000 2.15563e-08 +1500.000000 0.000171033 1500.000000 0.000197585 1500.000000 0.000193981 1500.000000 0.000193776 1500.000000 0.000197564 1500.000000 2.12868e-08 +1520.000000 0.000170883 1520.000000 0.000197386 1520.000000 0.000193693 1520.000000 0.000193488 1520.000000 0.000197365 1520.000000 2.10242e-08 +1540.000000 0.000170748 1540.000000 0.000197201 1540.000000 0.000193417 1540.000000 0.000193213 1540.000000 0.00019718 1540.000000 2.07682e-08 +1560.000000 0.000170626 1560.000000 0.00019703 1560.000000 0.000193152 1560.000000 0.000192949 1560.000000 0.000197009 1560.000000 2.05186e-08 +1580.000000 0.000170518 1580.000000 0.000196872 1580.000000 0.000192898 1580.000000 0.000192697 1580.000000 0.000196852 1580.000000 2.0275e-08 +1600.000000 0.000170422 1600.000000 0.000196727 1600.000000 0.000192655 1600.000000 0.000192455 1600.000000 0.000196707 1600.000000 2.00374e-08 +1620.000000 0.000170338 1620.000000 0.000196594 1620.000000 0.000192423 1620.000000 0.000192223 1620.000000 0.000196575 1620.000000 1.98054e-08 +1640.000000 0.000170267 1640.000000 0.000196474 1640.000000 0.0001922 1640.000000 0.000192001 1640.000000 0.000196454 1640.000000 1.95789e-08 +1660.000000 0.000170207 1660.000000 0.000196365 1660.000000 0.000191987 1660.000000 0.000191789 1660.000000 0.000196345 1660.000000 1.93577e-08 +1680.000000 0.000170158 1680.000000 0.000196266 1680.000000 0.000191784 1680.000000 0.000191585 1680.000000 0.000196247 1680.000000 1.91415e-08 +1700.000000 0.00017012 1700.000000 0.000196179 1700.000000 0.000191588 1700.000000 0.00019139 1700.000000 0.00019616 1700.000000 1.89303e-08 +1750.000000 0.00017007 1750.000000 0.000196005 1750.000000 0.000191136 1750.000000 0.000190939 1750.000000 0.000195986 1750.000000 1.84227e-08 +1800.000000 0.00017008 1800.000000 0.00019589 1800.000000 0.000190732 1800.000000 0.000190535 1800.000000 0.000195872 1800.000000 1.79424e-08 +1850.000000 0.000170146 1850.000000 0.000195829 1850.000000 0.00019037 1850.000000 0.000190174 1850.000000 0.000195812 1850.000000 1.74872e-08 +1900.000000 0.000170264 1900.000000 0.000195819 1900.000000 0.000190047 1900.000000 0.000189852 1900.000000 0.000195802 1900.000000 1.70552e-08 +1950.000000 0.000170431 1950.000000 0.000195855 1950.000000 0.000189759 1950.000000 0.000189565 1950.000000 0.000195839 1950.000000 1.66446e-08 +2000.000000 0.000170642 2000.000000 0.000195934 2000.000000 0.000189504 2000.000000 0.000189311 2000.000000 0.000195918 2000.000000 1.62539e-08 +2100.000000 0.000171189 2100.000000 0.000196208 2100.000000 0.00018908 2100.000000 0.000188889 2100.000000 0.000196193 2100.000000 1.55265e-08 +2200.000000 0.000171883 2200.000000 0.00019662 2200.000000 0.000188756 2200.000000 0.000188565 2200.000000 0.000196606 2200.000000 1.48632e-08 +2300.000000 0.000172709 2300.000000 0.000197152 2300.000000 0.000188515 2300.000000 0.000188326 2300.000000 0.000197138 2300.000000 1.42558e-08 +2400.000000 0.000173651 2400.000000 0.000197788 2400.000000 0.000188346 2400.000000 0.000188158 2400.000000 0.000197775 2400.000000 1.36974e-08 +2500.000000 0.000174699 2500.000000 0.000198517 2500.000000 0.000188237 2500.000000 0.00018805 2500.000000 0.000198504 2500.000000 1.31823e-08 +2600.000000 0.00017584 2600.000000 0.000199327 2600.000000 0.00018818 2600.000000 0.000187994 2600.000000 0.000199314 2600.000000 1.27056e-08 +2700.000000 0.000177067 2700.000000 0.000200209 2700.000000 0.000188167 2700.000000 0.000187981 2700.000000 0.000200197 2700.000000 1.22631e-08 +2800.000000 0.000178372 2800.000000 0.000201155 2800.000000 0.000188192 2800.000000 0.000188007 2800.000000 0.000201143 2800.000000 1.18512e-08 +2900.000000 0.000179749 2900.000000 0.000202159 2900.000000 0.00018825 2900.000000 0.000188065 2900.000000 0.000202148 2900.000000 1.14668e-08 +3000.000000 0.00018119 3000.000000 0.000203215 3000.000000 0.000188335 3000.000000 0.000188151 3000.000000 0.000203204 3000.000000 1.11073e-08 diff --git a/Inputs/EnergyLoss/helium3_cd2.txt b/Inputs/EnergyLoss/helium3_cd2.txt new file mode 100644 index 0000000000000000000000000000000000000000..9e1c2717c33db0cd9b0bd3889caf2648705c3cdb --- /dev/null +++ b/Inputs/EnergyLoss/helium3_cd2.txt @@ -0,0 +1,218 @@ +Energy (MeV/u)1 0 - [He-base] F.Hubert et al, AD&ND Tables 46(1990)1 Energy (MeV/u)2 1 - [H -base] J.F.Ziegler et al, Pergamon Press, NY (low energy) Energy (MeV/u)3 2 - ATIMA 1.2 LS-theory (recommended for high energy) Energy (MeV/u)4 3 - ATIMA 1.2 without LS-correction Energy (MeV/u)5 4 - electrical component of [1] - J.F.Ziegler et al Energy (MeV/u)6 5 - nuclear component of [1] - J.F.Ziegler et al +0.001000 0.0276173 0.001000 0.0344409 0.001000 0.0427462 0.001000 0.0427462 0.001000 0.0228283 0.001000 0.0116127 +0.002000 0.0360505 0.002000 0.0449758 0.002000 0.0550192 0.002000 0.0550192 0.002000 0.0368591 0.002000 0.00811677 +0.005000 0.056437 0.005000 0.0704831 0.005000 0.0810943 0.005000 0.0810943 0.005000 0.0658823 0.005000 0.00460078 +0.008000 0.0715815 0.008000 0.0894315 0.008000 0.0987086 0.008000 0.0987086 0.008000 0.0860954 0.008000 0.00333605 +0.010000 0.0798773 0.010000 0.099833 0.010000 0.107913 0.010000 0.107913 0.010000 0.0969868 0.010000 0.00284626 +0.015000 0.101992 0.015000 0.122067 0.015000 0.125953 0.015000 0.125953 0.015000 0.119966 0.015000 0.00210113 +0.020000 0.120478 0.020000 0.140182 0.020000 0.139945 0.020000 0.139945 0.020000 0.13849 0.020000 0.00169136 +0.025000 0.136235 0.025000 0.155625 0.025000 0.151688 0.025000 0.151688 0.025000 0.1542 0.025000 0.00142476 +0.030000 0.149741 0.030000 0.169146 0.030000 0.162871 0.030000 0.162871 0.030000 0.16791 0.030000 0.0012361 +0.035000 0.161283 0.035000 0.181171 0.035000 0.172699 0.035000 0.172699 0.035000 0.180077 0.035000 0.00109489 +0.040000 0.171061 0.040000 0.191961 0.040000 0.181452 0.040000 0.181452 0.040000 0.190977 0.040000 0.000984833 +0.045000 0.179232 0.045000 0.201684 0.045000 0.189313 0.045000 0.189313 0.045000 0.200787 0.045000 0.000896426 +0.050000 0.18594 0.050000 0.210452 0.050000 0.19641 0.050000 0.19641 0.050000 0.209628 0.050000 0.000823705 +0.055000 0.191322 0.055000 0.218349 0.055000 0.202832 0.055000 0.202832 0.055000 0.217586 0.055000 0.000762738 +0.060000 0.195516 0.060000 0.225438 0.060000 0.20865 0.060000 0.20865 0.060000 0.224727 0.060000 0.000710822 +0.070000 0.200881 0.070000 0.237387 0.070000 0.218673 0.070000 0.218673 0.070000 0.236761 0.070000 0.00062696 +0.080000 0.203075 0.080000 0.246652 0.080000 0.226807 0.080000 0.226807 0.080000 0.24609 0.080000 0.000561994 +0.090000 0.203024 0.090000 0.253547 0.090000 0.233295 0.090000 0.233295 0.090000 0.253037 0.090000 0.000510059 +0.100000 0.201481 0.100000 0.258376 0.100000 0.238335 0.100000 0.238335 0.100000 0.257908 0.100000 0.000467514 +0.120000 0.196065 0.120000 0.263008 0.120000 0.244762 0.120000 0.244762 0.120000 0.262607 0.120000 0.000401796 +0.140000 0.189668 0.140000 0.262702 0.140000 0.247299 0.140000 0.247299 0.140000 0.262349 0.140000 0.000353239 +0.160000 0.183499 0.160000 0.259191 0.160000 0.246946 0.160000 0.246946 0.160000 0.258875 0.160000 0.000315786 +0.180000 0.177939 0.180000 0.253743 0.180000 0.244514 0.180000 0.244514 0.180000 0.253457 0.180000 0.000285953 +0.200000 0.173018 0.200000 0.247229 0.200000 0.240642 0.200000 0.240642 0.200000 0.246968 0.200000 0.000261588 +0.250000 0.162858 0.250000 0.229515 0.250000 0.227566 0.250000 0.227566 0.250000 0.229299 0.250000 0.000216438 +0.300000 0.154561 0.300000 0.21255 0.300000 0.212951 0.300000 0.212951 0.300000 0.212365 0.300000 0.000185245 +0.350000 0.147246 0.350000 0.197454 0.350000 0.198835 0.350000 0.198835 0.350000 0.197291 0.350000 0.000162319 +0.400000 0.140546 0.400000 0.18429 0.400000 0.185949 0.400000 0.185949 0.400000 0.184145 0.400000 0.00014471 +0.450000 0.134324 0.450000 0.172836 0.450000 0.17445 0.450000 0.17445 0.450000 0.172706 0.450000 0.000130733 +0.500000 0.128528 0.500000 0.162825 0.500000 0.164269 0.500000 0.164269 0.500000 0.162706 0.500000 0.000119351 +0.600000 0.118111 0.600000 0.146211 0.600000 0.147266 0.600000 0.147266 0.600000 0.146109 0.600000 0.0001019 +0.700000 0.109118 0.700000 0.132989 0.700000 0.133755 0.700000 0.133755 0.700000 0.1329 0.700000 8.9111e-05 +0.800000 0.101354 0.800000 0.122201 0.800000 0.122795 0.800000 0.122795 0.800000 0.122121 0.800000 7.93125e-05 +0.900000 0.0946234 0.900000 0.11321 0.900000 0.11372 0.900000 0.11372 0.900000 0.113139 0.900000 7.1551e-05 +1.000000 0.0887527 1.000000 0.105586 1.000000 0.106069 1.000000 0.106069 1.000000 0.105521 1.000000 6.52419e-05 +1.250000 0.076939 1.250000 0.0907067 1.250000 0.0912458 1.250000 0.0912458 1.250000 0.090653 1.250000 5.36271e-05 +1.500000 0.0680187 1.500000 0.0797702 1.500000 0.0804217 1.500000 0.0804217 1.500000 0.0797245 1.500000 4.56653e-05 +1.750000 0.0610323 1.750000 0.0713307 1.750000 0.0720932 1.750000 0.0720932 1.750000 0.0712908 1.750000 3.9849e-05 +2.000000 0.0554016 2.000000 0.0645897 2.000000 0.0654463 2.000000 0.0654463 2.000000 0.0645543 2.000000 3.54041e-05 +2.250000 0.0507608 2.250000 0.0590661 2.250000 0.0599981 2.250000 0.0599981 2.250000 0.0590342 2.250000 3.18907e-05 +2.500000 0.0460818 2.500000 0.0544501 2.500000 0.0554406 2.500000 0.0554406 2.500000 0.0544211 2.500000 2.904e-05 +3.000000 0.0402224 3.000000 0.0471605 3.000000 0.0482291 3.000000 0.0482291 3.000000 0.0471358 3.000000 2.4688e-05 +3.500000 0.0357808 3.500000 0.0416566 3.500000 0.0427673 3.500000 0.0427673 3.500000 0.0416351 3.500000 2.15149e-05 +4.000000 0.0322876 4.000000 0.0373499 4.000000 0.03848 4.000000 0.03848 4.000000 0.0373308 4.000000 1.90936e-05 +4.500000 0.0294622 4.500000 0.0338857 4.500000 0.0350212 4.500000 0.0350212 4.500000 0.0338685 4.500000 1.71823e-05 +5.000000 0.027126 5.000000 0.0310371 5.000000 0.0321689 5.000000 0.0321689 5.000000 0.0310215 5.000000 1.56332e-05 +5.500000 0.0251594 5.500000 0.028652 5.500000 0.0297743 5.500000 0.0297743 5.500000 0.0286376 5.500000 1.43512e-05 +6.000000 0.0234794 6.000000 0.0266245 6.000000 0.0277338 6.000000 0.0277338 6.000000 0.0266112 6.000000 1.32717e-05 +6.500000 0.0220264 6.500000 0.0248788 6.500000 0.0259728 6.500000 0.0259728 6.500000 0.0248664 6.500000 1.23497e-05 +7.000000 0.0207564 7.000000 0.0233591 7.000000 0.0244366 7.000000 0.0244366 7.000000 0.0233476 7.000000 1.15526e-05 +7.500000 0.0196361 7.500000 0.0220236 7.500000 0.0230837 7.500000 0.0230837 7.500000 0.0220127 7.500000 1.08563e-05 +8.000000 0.01864 8.000000 0.0208401 8.000000 0.0218826 8.000000 0.0218826 8.000000 0.0208298 8.000000 1.02426e-05 +8.500000 0.0177482 8.500000 0.0197836 8.500000 0.0208084 8.500000 0.0208084 8.500000 0.0197739 8.500000 9.69734e-06 +9.000000 0.0169447 9.000000 0.0188343 9.000000 0.0198416 9.000000 0.0198416 9.000000 0.0188251 9.000000 9.2096e-06 +9.500000 0.0162169 9.500000 0.0179765 9.500000 0.0189665 9.500000 0.0189665 9.500000 0.0179677 9.500000 8.77058e-06 +10.000000 0.0155542 10.000000 0.0178042 10.000000 0.0181703 10.000000 0.0181703 10.000000 0.0177958 10.000000 8.37324e-06 +11.000000 0.0143917 11.000000 0.0164934 11.000000 0.0167575 11.000000 0.0167584 11.000000 0.0164857 11.000000 7.68162e-06 +12.000000 0.0134045 12.000000 0.0153756 12.000000 0.0155616 12.000000 0.0155631 12.000000 0.0153685 12.000000 7.09971e-06 +13.000000 0.012555 13.000000 0.0144105 13.000000 0.0145361 13.000000 0.0145378 13.000000 0.0144039 13.000000 6.60302e-06 +14.000000 0.0118158 14.000000 0.0135683 14.000000 0.0136468 14.000000 0.0136485 14.000000 0.0135621 14.000000 6.17389e-06 +15.000000 0.0111664 15.000000 0.0128266 15.000000 0.012868 15.000000 0.0128696 15.000000 0.0128208 15.000000 5.79923e-06 +16.000000 0.010591 16.000000 0.0121682 16.000000 0.0121804 16.000000 0.0121819 16.000000 0.0121627 16.000000 5.46917e-06 +17.000000 0.0100775 17.000000 0.0115796 17.000000 0.011569 17.000000 0.0115704 17.000000 0.0115744 17.000000 5.17609e-06 +18.000000 0.00961626 18.000000 0.01105 18.000000 0.011022 18.000000 0.011023 18.000000 0.0110451 18.000000 4.91403e-06 +19.000000 0.00919949 19.000000 0.0105709 19.000000 0.0105296 19.000000 0.0105303 19.000000 0.0105662 19.000000 4.67825e-06 +20.000000 0.00882096 20.000000 0.0101353 20.000000 0.0100839 20.000000 0.0100847 20.000000 0.0101308 20.000000 4.46493e-06 +21.000000 0.00847555 21.000000 0.00973739 21.000000 0.00967897 21.000000 0.00967979 21.000000 0.00973312 21.000000 4.27097e-06 +22.000000 0.008159 22.000000 0.00937246 22.000000 0.00930978 22.000000 0.00931039 22.000000 0.00936836 22.000000 4.09382e-06 +23.000000 0.00786779 23.000000 0.00903648 23.000000 0.00897199 23.000000 0.00897217 23.000000 0.00903255 23.000000 3.93135e-06 +24.000000 0.00759893 24.000000 0.0087261 24.000000 0.0086617 24.000000 0.00866145 24.000000 0.00872232 24.000000 3.78178e-06 +25.000000 0.0073499 25.000000 0.00843846 25.000000 0.00837578 25.000000 0.00837514 25.000000 0.00843482 25.000000 3.64362e-06 +27.000000 0.00690298 27.000000 0.00792192 27.000000 0.00786715 27.000000 0.00786553 27.000000 0.00791853 27.000000 3.39661e-06 +29.000000 0.00651316 29.000000 0.00747107 29.000000 0.00742829 29.000000 0.00742627 29.000000 0.00746788 29.000000 3.18215e-06 +31.000000 0.00616995 31.000000 0.00707395 31.000000 0.00704007 31.000000 0.00703795 31.000000 0.00707095 31.000000 2.99413e-06 +33.000000 0.00586532 33.000000 0.00672137 33.000000 0.00669095 33.000000 0.00668817 33.000000 0.00671854 33.000000 2.82788e-06 +35.000000 0.00559301 35.000000 0.00640615 35.000000 0.00637805 35.000000 0.00637542 35.000000 0.00640347 35.000000 2.67979e-06 +38.000000 0.00523451 38.000000 0.00599115 38.000000 0.00596663 38.000000 0.00596357 38.000000 0.00598867 38.000000 2.4856e-06 +41.000000 0.00492485 41.000000 0.00563275 41.000000 0.00561089 41.000000 0.00560776 41.000000 0.00563043 41.000000 2.31861e-06 +44.000000 0.0046545 44.000000 0.00531996 44.000000 0.00529987 44.000000 0.0052971 44.000000 0.00531779 44.000000 2.17341e-06 +47.000000 0.0044163 47.000000 0.0050445 47.000000 0.00502654 47.000000 0.0050234 47.000000 0.00504245 47.000000 2.04595e-06 +50.000000 0.00420473 50.000000 0.00479997 50.000000 0.00478349 50.000000 0.00478032 50.000000 0.00479804 50.000000 1.93314e-06 +55.000000 0.00389998 55.000000 0.00444808 55.000000 0.00443376 55.000000 0.0044303 55.000000 0.00444631 55.000000 1.77131e-06 +60.000000 0.00364267 60.000000 0.00415136 60.000000 0.00413813 60.000000 0.00413495 60.000000 0.00414973 60.000000 1.63535e-06 +65.000000 0.00342233 65.000000 0.00389765 65.000000 0.00388549 65.000000 0.00388222 65.000000 0.00389614 65.000000 1.51944e-06 +70.000000 0.00323138 70.000000 0.00367814 70.000000 0.00366673 70.000000 0.00366342 70.000000 0.00367672 70.000000 1.41941e-06 +75.000000 0.00306419 75.000000 0.00348626 75.000000 0.0034751 75.000000 0.00347205 75.000000 0.00348493 75.000000 1.33217e-06 +80.000000 0.0029165 80.000000 0.00331707 80.000000 0.00330652 80.000000 0.0033032 80.000000 0.00331581 80.000000 1.25539e-06 +85.000000 0.00278502 85.000000 0.00316671 85.000000 0.00315623 85.000000 0.00315309 85.000000 0.00316553 85.000000 1.18727e-06 +90.000000 0.00266716 90.000000 0.00303219 90.000000 0.00302172 90.000000 0.00301871 90.000000 0.00303106 90.000000 1.12641e-06 +95.000000 0.00256086 95.000000 0.00291109 95.000000 0.00290093 95.000000 0.00289771 95.000000 0.00291002 95.000000 1.0717e-06 +100.000000 0.00246446 100.000000 0.00280149 100.000000 0.00279123 100.000000 0.00278815 100.000000 0.00280047 100.000000 1.02223e-06 +105.000000 0.00237661 105.000000 0.0027018 105.000000 0.00269143 105.000000 0.00268848 105.000000 0.00270083 105.000000 9.77283e-07 +110.000000 0.0022962 110.000000 0.00261074 110.000000 0.00260021 110.000000 0.0025974 110.000000 0.0026098 110.000000 9.36257e-07 +115.000000 0.00222229 115.000000 0.00252721 115.000000 0.00251675 115.000000 0.00251384 115.000000 0.00252631 115.000000 8.98655e-07 +120.000000 0.00215411 120.000000 0.00245031 120.000000 0.00243986 120.000000 0.00243689 120.000000 0.00244945 120.000000 8.64059e-07 +125.000000 0.00209101 125.000000 0.00237928 125.000000 0.00236863 125.000000 0.00236581 125.000000 0.00237844 125.000000 8.32119e-07 +130.000000 0.00203241 130.000000 0.00231346 130.000000 0.00230267 130.000000 0.00229994 130.000000 0.00231266 130.000000 8.02537e-07 +135.000000 0.00197785 135.000000 0.00225229 135.000000 0.00224157 135.000000 0.00223872 135.000000 0.00225152 135.000000 7.75058e-07 +140.000000 0.00192691 140.000000 0.00219531 140.000000 0.00218454 140.000000 0.00218167 140.000000 0.00219456 140.000000 7.49464e-07 +145.000000 0.00187923 145.000000 0.00214208 145.000000 0.00213115 145.000000 0.00212839 145.000000 0.00214135 145.000000 7.25564e-07 +150.000000 0.00183449 150.000000 0.00209225 150.000000 0.0020812 150.000000 0.00207851 150.000000 0.00209154 150.000000 7.03193e-07 +155.000000 0.00177151 155.000000 0.0020455 155.000000 0.00203431 155.000000 0.00203171 155.000000 0.00204481 155.000000 6.82208e-07 +160.000000 0.0017346 160.000000 0.00200155 160.000000 0.00199029 160.000000 0.00198772 160.000000 0.00200088 160.000000 6.62483e-07 +165.000000 0.00169978 165.000000 0.00196015 165.000000 0.00194896 165.000000 0.00194629 165.000000 0.00195951 165.000000 6.43905e-07 +170.000000 0.0016669 170.000000 0.0019211 170.000000 0.00190988 170.000000 0.0019072 170.000000 0.00192047 170.000000 6.26377e-07 +175.000000 0.00163578 175.000000 0.00188419 175.000000 0.00187286 175.000000 0.00187026 175.000000 0.00188358 175.000000 6.09811e-07 +180.000000 0.00160629 180.000000 0.00184926 180.000000 0.00183785 180.000000 0.00183531 180.000000 0.00184866 180.000000 5.94128e-07 +185.000000 0.00157831 185.000000 0.00181614 185.000000 0.00180466 185.000000 0.00180217 185.000000 0.00181556 185.000000 5.7926e-07 +190.000000 0.00155171 190.000000 0.0017847 190.000000 0.00177315 190.000000 0.00177072 190.000000 0.00178414 190.000000 5.65143e-07 +195.000000 0.0015264 195.000000 0.00175482 195.000000 0.00174327 195.000000 0.00174084 195.000000 0.00175427 195.000000 5.51722e-07 +200.000000 0.00150228 200.000000 0.00172638 200.000000 0.0017149 200.000000 0.00171239 200.000000 0.00172584 200.000000 5.38946e-07 +210.000000 0.0014573 210.000000 0.00167343 210.000000 0.00166192 210.000000 0.00165946 210.000000 0.00167291 210.000000 5.15147e-07 +220.000000 0.00141619 220.000000 0.00162514 220.000000 0.00161358 220.000000 0.0016112 220.000000 0.00162465 220.000000 4.9343e-07 +230.000000 0.00137847 230.000000 0.00158093 230.000000 0.00156932 230.000000 0.00156704 230.000000 0.00158046 230.000000 4.73528e-07 +240.000000 0.00134373 240.000000 0.0015403 240.000000 0.00152881 240.000000 0.00152647 240.000000 0.00153984 240.000000 4.55222e-07 +250.000000 0.00131164 250.000000 0.00150283 250.000000 0.00149143 250.000000 0.00148908 250.000000 0.0015024 250.000000 4.38324e-07 +260.000000 0.00128189 260.000000 0.00146818 260.000000 0.00145679 260.000000 0.00145452 260.000000 0.00146776 260.000000 4.22677e-07 +270.000000 0.00125424 270.000000 0.00143604 270.000000 0.00142469 270.000000 0.00142248 270.000000 0.00143563 270.000000 4.08145e-07 +280.000000 0.00122848 280.000000 0.00140615 280.000000 0.00139485 280.000000 0.0013927 280.000000 0.00140575 280.000000 3.94611e-07 +290.000000 0.00120441 290.000000 0.00137828 290.000000 0.00136717 290.000000 0.00136495 290.000000 0.0013779 290.000000 3.81976e-07 +300.000000 0.00118189 300.000000 0.00135224 300.000000 0.00134126 300.000000 0.00133903 300.000000 0.00135187 300.000000 3.70151e-07 +310.000000 0.00116076 310.000000 0.00132785 310.000000 0.00131695 310.000000 0.00131478 310.000000 0.00132749 310.000000 3.5906e-07 +320.000000 0.00114089 320.000000 0.00130497 320.000000 0.00129417 320.000000 0.00129204 320.000000 0.00130462 320.000000 3.48636e-07 +330.000000 0.00112219 330.000000 0.00128347 330.000000 0.00127275 330.000000 0.00127068 330.000000 0.00128313 330.000000 3.3882e-07 +340.000000 0.00110455 340.000000 0.00126322 340.000000 0.00125263 340.000000 0.00125058 340.000000 0.00126289 340.000000 3.2956e-07 +350.000000 0.00108789 350.000000 0.00124412 350.000000 0.00123373 350.000000 0.00123163 350.000000 0.0012438 350.000000 3.20809e-07 +360.000000 0.00107213 360.000000 0.00122608 360.000000 0.00121586 360.000000 0.00121375 360.000000 0.00122576 360.000000 3.12526e-07 +370.000000 0.00105719 370.000000 0.00120901 370.000000 0.0011988 370.000000 0.00119673 370.000000 0.00120871 370.000000 3.04674e-07 +380.000000 0.00104302 380.000000 0.00119285 380.000000 0.00118265 380.000000 0.00118062 380.000000 0.00119255 380.000000 2.9722e-07 +390.000000 0.00102957 390.000000 0.00117751 390.000000 0.00116735 390.000000 0.00116534 390.000000 0.00117722 390.000000 2.90133e-07 +400.000000 0.00101677 400.000000 0.00116295 400.000000 0.00115282 400.000000 0.00115085 400.000000 0.00116267 400.000000 2.83388e-07 +410.000000 0.00100458 410.000000 0.00114911 410.000000 0.00113902 410.000000 0.00113708 410.000000 0.00114884 410.000000 2.7696e-07 +420.000000 0.000992971 420.000000 0.00113594 420.000000 0.00112595 420.000000 0.00112397 420.000000 0.00113567 420.000000 2.70827e-07 +430.000000 0.000981892 430.000000 0.00112339 430.000000 0.00111351 430.000000 0.0011115 430.000000 0.00112312 430.000000 2.64968e-07 +440.000000 0.000971314 440.000000 0.00111142 440.000000 0.00110161 440.000000 0.00109961 440.000000 0.00111116 440.000000 2.59365e-07 +450.000000 0.000961203 450.000000 0.00109999 450.000000 0.00109023 450.000000 0.00108826 450.000000 0.00109974 450.000000 2.54003e-07 +460.000000 0.000951531 460.000000 0.00108908 460.000000 0.00107937 460.000000 0.00107743 460.000000 0.00108883 460.000000 2.48865e-07 +470.000000 0.000942272 470.000000 0.00107864 470.000000 0.00106899 470.000000 0.00106707 470.000000 0.00107839 470.000000 2.43937e-07 +480.000000 0.0009334 480.000000 0.00106865 480.000000 0.00105906 480.000000 0.00105717 480.000000 0.00106841 480.000000 2.39207e-07 +490.000000 0.000924893 490.000000 0.00105908 490.000000 0.00104955 490.000000 0.00104768 490.000000 0.00105885 490.000000 2.34663e-07 +500.000000 0.000916731 500.000000 0.00104991 500.000000 0.00104045 500.000000 0.0010386 500.000000 0.00104968 500.000000 2.30295e-07 +520.000000 0.000901364 520.000000 0.00103267 520.000000 0.00102343 520.000000 0.00102153 520.000000 0.00103245 520.000000 2.22043e-07 +540.000000 0.000887162 540.000000 0.00101677 540.000000 0.0010077 540.000000 0.0010058 540.000000 0.00101656 540.000000 2.1438e-07 +560.000000 0.000874005 560.000000 0.00100207 560.000000 0.000993122 560.000000 0.00099126 560.000000 0.00100187 560.000000 2.07245e-07 +580.000000 0.000861792 580.000000 0.000988452 580.000000 0.00097963 580.000000 0.000977797 580.000000 0.000988252 580.000000 2.00585e-07 +600.000000 0.000850433 600.000000 0.000975804 600.000000 0.000967095 600.000000 0.0009653 600.000000 0.000975609 600.000000 1.94352e-07 +620.000000 0.000839849 620.000000 0.000964036 620.000000 0.000955451 620.000000 0.000953677 620.000000 0.000963848 620.000000 1.88508e-07 +640.000000 0.000829971 640.000000 0.00095307 640.000000 0.00094465 640.000000 0.000942846 640.000000 0.000952887 640.000000 1.83015e-07 +660.000000 0.000820738 660.000000 0.000942834 660.000000 0.000934564 660.000000 0.000932736 660.000000 0.000942656 660.000000 1.77844e-07 +680.000000 0.000812098 680.000000 0.000933265 680.000000 0.000925092 680.000000 0.000923284 680.000000 0.000933092 680.000000 1.72965e-07 +700.000000 0.000804 700.000000 0.000924308 700.000000 0.00091621 700.000000 0.000914432 700.000000 0.00092414 700.000000 1.68356e-07 +720.000000 0.000796403 720.000000 0.000915913 720.000000 0.00090789 720.000000 0.000906132 720.000000 0.000915749 720.000000 1.63994e-07 +740.000000 0.000789268 740.000000 0.000908035 740.000000 0.000900076 740.000000 0.000898337 740.000000 0.000907875 740.000000 1.59859e-07 +760.000000 0.000782561 760.000000 0.000900634 760.000000 0.000892722 760.000000 0.000891009 760.000000 0.000900478 760.000000 1.55934e-07 +780.000000 0.00077625 780.000000 0.000893675 780.000000 0.000885809 780.000000 0.00088411 780.000000 0.000893523 780.000000 1.52203e-07 +800.000000 0.000770308 800.000000 0.000887126 800.000000 0.00087932 800.000000 0.000877609 800.000000 0.000886977 800.000000 1.48652e-07 +820.000000 0.000764708 820.000000 0.000880957 820.000000 0.000873211 820.000000 0.000871476 820.000000 0.000880811 820.000000 1.45268e-07 +840.000000 0.000759429 840.000000 0.000875141 840.000000 0.000867432 840.000000 0.000865684 840.000000 0.000874999 840.000000 1.4204e-07 +860.000000 0.000754448 860.000000 0.000869655 860.000000 0.000861949 860.000000 0.00086021 860.000000 0.000869516 860.000000 1.38956e-07 +880.000000 0.000749746 880.000000 0.000864476 880.000000 0.000856751 880.000000 0.00085503 880.000000 0.00086434 880.000000 1.36008e-07 +900.000000 0.000745307 900.000000 0.000859585 900.000000 0.000851827 900.000000 0.000850126 900.000000 0.000859452 900.000000 1.33186e-07 +920.000000 0.000741113 920.000000 0.000854964 920.000000 0.000847166 920.000000 0.000845479 920.000000 0.000854833 920.000000 1.30482e-07 +940.000000 0.00073715 940.000000 0.000850594 940.000000 0.000842747 940.000000 0.000841071 940.000000 0.000850467 940.000000 1.2789e-07 +960.000000 0.000733405 960.000000 0.000846462 960.000000 0.000838555 960.000000 0.000836889 960.000000 0.000846337 960.000000 1.25402e-07 +980.000000 0.000729865 980.000000 0.000842553 980.000000 0.000834574 980.000000 0.000832916 980.000000 0.000842429 980.000000 1.23011e-07 +1000.000000 0.000726518 1000.000000 0.000838853 1000.000000 0.000830789 1000.000000 0.000829142 1000.000000 0.000838732 1000.000000 1.20713e-07 +1020.000000 0.000723354 1020.000000 0.00083535 1020.000000 0.000827189 1020.000000 0.000825552 1020.000000 0.000835232 1020.000000 1.18502e-07 +1040.000000 0.000720362 1040.000000 0.000832035 1040.000000 0.00082376 1040.000000 0.000822138 1040.000000 0.000831918 1040.000000 1.16373e-07 +1060.000000 0.000717534 1060.000000 0.000828895 1060.000000 0.000820496 1060.000000 0.000818887 1060.000000 0.000828781 1060.000000 1.14322e-07 +1080.000000 0.000714861 1080.000000 0.000825922 1080.000000 0.000817389 1080.000000 0.000815791 1080.000000 0.00082581 1080.000000 1.12344e-07 +1100.000000 0.000712336 1100.000000 0.000823107 1100.000000 0.000814434 1100.000000 0.000812841 1100.000000 0.000822996 1100.000000 1.10435e-07 +1120.000000 0.000709949 1120.000000 0.000820441 1120.000000 0.000811624 1120.000000 0.000810029 1120.000000 0.000820332 1120.000000 1.08592e-07 +1140.000000 0.000707696 1140.000000 0.000817916 1140.000000 0.000808952 1140.000000 0.000807346 1140.000000 0.00081781 1140.000000 1.06812e-07 +1160.000000 0.000705569 1160.000000 0.000815526 1160.000000 0.000806405 1160.000000 0.000804787 1160.000000 0.000815421 1160.000000 1.05091e-07 +1180.000000 0.000703563 1180.000000 0.000813264 1180.000000 0.000803973 1180.000000 0.000802345 1180.000000 0.000813161 1180.000000 1.03426e-07 +1200.000000 0.000701671 1200.000000 0.000811124 1200.000000 0.000801648 1200.000000 0.000800012 1200.000000 0.000811022 1200.000000 1.01815e-07 +1220.000000 0.000699889 1220.000000 0.000809099 1220.000000 0.000799421 1220.000000 0.000797785 1220.000000 0.000808998 1220.000000 1.00254e-07 +1240.000000 0.000698212 1240.000000 0.000807184 1240.000000 0.000797288 1240.000000 0.000795656 1240.000000 0.000807085 1240.000000 9.87426e-08 +1260.000000 0.000696634 1260.000000 0.000805374 1260.000000 0.000795247 1260.000000 0.000793622 1260.000000 0.000805277 1260.000000 9.72773e-08 +1280.000000 0.000695152 1280.000000 0.000803664 1280.000000 0.000793293 1280.000000 0.000791677 1280.000000 0.000803568 1280.000000 9.58561e-08 +1300.000000 0.000693761 1300.000000 0.00080205 1300.000000 0.000791424 1300.000000 0.000789818 1300.000000 0.000801956 1300.000000 9.44772e-08 +1320.000000 0.000692458 1320.000000 0.000800527 1320.000000 0.000789638 1320.000000 0.000788039 1320.000000 0.000800434 1320.000000 9.31386e-08 +1340.000000 0.000691239 1340.000000 0.000799092 1340.000000 0.00078793 1340.000000 0.000786337 1340.000000 0.000799 1340.000000 9.18386e-08 +1360.000000 0.0006901 1360.000000 0.00079774 1360.000000 0.000786296 1360.000000 0.000784709 1360.000000 0.000797649 1360.000000 9.05755e-08 +1380.000000 0.000689038 1380.000000 0.000796468 1380.000000 0.000784733 1380.000000 0.000783151 1380.000000 0.000796378 1380.000000 8.93478e-08 +1400.000000 0.000688051 1400.000000 0.000795272 1400.000000 0.000783237 1400.000000 0.000781659 1400.000000 0.000795184 1400.000000 8.81539e-08 +1420.000000 0.000687135 1420.000000 0.00079415 1420.000000 0.000781804 1420.000000 0.000780231 1420.000000 0.000794063 1420.000000 8.69925e-08 +1440.000000 0.000686287 1440.000000 0.000793099 1440.000000 0.000780432 1440.000000 0.000778864 1440.000000 0.000793013 1440.000000 8.58623e-08 +1460.000000 0.000685506 1460.000000 0.000792114 1460.000000 0.000779116 1460.000000 0.000777555 1460.000000 0.00079203 1460.000000 8.47619e-08 +1480.000000 0.000684788 1480.000000 0.000791195 1480.000000 0.000777856 1480.000000 0.000776301 1480.000000 0.000791111 1480.000000 8.36903e-08 +1500.000000 0.00068413 1500.000000 0.000790338 1500.000000 0.000776649 1500.000000 0.000775101 1500.000000 0.000790255 1500.000000 8.26463e-08 +1520.000000 0.000683532 1520.000000 0.000789541 1520.000000 0.000775493 1520.000000 0.000773951 1520.000000 0.000789459 1520.000000 8.16288e-08 +1540.000000 0.000682991 1540.000000 0.000788801 1540.000000 0.000774387 1540.000000 0.00077285 1540.000000 0.00078872 1540.000000 8.06369e-08 +1560.000000 0.000682504 1560.000000 0.000788117 1560.000000 0.000773329 1560.000000 0.000771795 1560.000000 0.000788037 1560.000000 7.96695e-08 +1580.000000 0.00068207 1580.000000 0.000787486 1580.000000 0.000772317 1580.000000 0.000770785 1580.000000 0.000787407 1580.000000 7.87258e-08 +1600.000000 0.000681687 1600.000000 0.000786906 1600.000000 0.000771349 1600.000000 0.000769817 1600.000000 0.000786828 1600.000000 7.78048e-08 +1620.000000 0.000681354 1620.000000 0.000786376 1620.000000 0.000770425 1620.000000 0.00076889 1620.000000 0.000786299 1620.000000 7.69059e-08 +1640.000000 0.000681068 1640.000000 0.000785893 1640.000000 0.000769541 1640.000000 0.000768003 1640.000000 0.000785817 1640.000000 7.60281e-08 +1660.000000 0.000680828 1660.000000 0.000785456 1660.000000 0.000768696 1660.000000 0.000767153 1660.000000 0.000785381 1660.000000 7.51707e-08 +1680.000000 0.000680633 1680.000000 0.000785064 1680.000000 0.000767887 1680.000000 0.000766339 1680.000000 0.000784989 1680.000000 7.43331e-08 +1700.000000 0.000680481 1700.000000 0.000784714 1700.000000 0.000767114 1700.000000 0.00076556 1700.000000 0.000784641 1700.000000 7.35145e-08 +1750.000000 0.00068028 1750.000000 0.000784017 1750.000000 0.000765321 1750.000000 0.000763756 1750.000000 0.000783946 1750.000000 7.15471e-08 +1800.000000 0.000680321 1800.000000 0.000783558 1800.000000 0.000763712 1800.000000 0.00076214 1800.000000 0.000783488 1800.000000 6.96853e-08 +1850.000000 0.000680586 1850.000000 0.000783316 1850.000000 0.000762266 1850.000000 0.000760696 1850.000000 0.000783248 1850.000000 6.79209e-08 +1900.000000 0.000681058 1900.000000 0.000783275 1900.000000 0.000760971 1900.000000 0.000759407 1900.000000 0.000783208 1900.000000 6.62462e-08 +1950.000000 0.000681723 1950.000000 0.000783419 1950.000000 0.000759816 1950.000000 0.00075826 1950.000000 0.000783354 1950.000000 6.46545e-08 +2000.000000 0.000682568 2000.000000 0.000783735 2000.000000 0.00075879 2000.000000 0.000757243 2000.000000 0.000783671 2000.000000 6.31398e-08 +2100.000000 0.000684754 2100.000000 0.000784832 2100.000000 0.000757085 2100.000000 0.000755553 2100.000000 0.000784772 2100.000000 6.03197e-08 +2200.000000 0.000687533 2200.000000 0.00078648 2200.000000 0.000755784 2200.000000 0.000754261 2200.000000 0.000786422 2200.000000 5.77477e-08 +2300.000000 0.000690836 2300.000000 0.000788607 2300.000000 0.000754819 2300.000000 0.000753304 2300.000000 0.000788551 2300.000000 5.53922e-08 +2400.000000 0.000694606 2400.000000 0.000791152 2400.000000 0.000754137 2400.000000 0.000752631 2400.000000 0.000791099 2400.000000 5.32266e-08 +2500.000000 0.000698795 2500.000000 0.000794066 2500.000000 0.000753695 2500.000000 0.000752199 2500.000000 0.000794015 2500.000000 5.12286e-08 +2600.000000 0.000703361 2600.000000 0.000797306 2600.000000 0.00075346 2600.000000 0.000751974 2600.000000 0.000797256 2600.000000 4.93794e-08 +2700.000000 0.000708269 2700.000000 0.000800834 2700.000000 0.000753404 2700.000000 0.000751925 2700.000000 0.000800786 2700.000000 4.76628e-08 +2800.000000 0.000713489 2800.000000 0.00080462 2800.000000 0.000753503 2800.000000 0.000752027 2800.000000 0.000804574 2800.000000 4.60649e-08 +2900.000000 0.000718994 2900.000000 0.000808636 2900.000000 0.000753736 2900.000000 0.00075226 2900.000000 0.000808592 2900.000000 4.45736e-08 +3000.000000 0.000724761 3000.000000 0.00081286 3000.000000 0.000754084 3000.000000 0.000752605 3000.000000 0.000812817 3000.000000 4.31786e-08 diff --git a/Inputs/EnergyLoss/proton_Al.txt b/Inputs/EnergyLoss/proton_Al.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ee3550a609935e4e865000f972f51a68060d160 --- /dev/null +++ b/Inputs/EnergyLoss/proton_Al.txt @@ -0,0 +1,218 @@ +Energy (MeV/u)1 0 - [He-base] F.Hubert et al, AD&ND Tables 46(1990)1 Energy (MeV/u)2 1 - [H -base] J.F.Ziegler et al, Pergamon Press, NY (low energy) Energy (MeV/u)3 2 - ATIMA 1.2 LS-theory (recommended for high energy) Energy (MeV/u)4 3 - ATIMA 1.2 without LS-correction Energy (MeV/u)5 4 - electrical component of [1] - J.F.Ziegler et al Energy (MeV/u)6 5 - nuclear component of [1] - J.F.Ziegler et al +0.001000 0.0537268 0.001000 0.0298658 0.001000 0.0288917 0.001000 0.0288917 0.001000 0.0271127 0.001000 0.00275311 +0.002000 0.065309 0.002000 0.0393502 0.002000 0.0380195 0.002000 0.0380195 0.002000 0.0370371 0.002000 0.00231317 +0.005000 0.0867797 0.005000 0.0575316 0.005000 0.0555217 0.005000 0.0555217 0.005000 0.0559384 0.005000 0.0015932 +0.008000 0.101251 0.008000 0.0703595 0.008000 0.0678762 0.008000 0.0678762 0.008000 0.0691136 0.008000 0.00124587 +0.010000 0.10908 0.010000 0.0775106 0.010000 0.074765 0.010000 0.074765 0.010000 0.076414 0.010000 0.00109656 +0.015000 0.131696 0.015000 0.091814 0.015000 0.0892703 0.015000 0.0892703 0.015000 0.0909579 0.015000 0.00085603 +0.020000 0.1502 0.020000 0.102587 0.020000 0.101344 0.020000 0.101344 0.020000 0.101876 0.020000 0.000710362 +0.025000 0.165495 0.025000 0.110818 0.025000 0.111875 0.025000 0.111875 0.025000 0.110206 0.025000 0.000611324 +0.030000 0.178056 0.030000 0.117071 0.030000 0.117276 0.030000 0.117276 0.030000 0.116532 0.030000 0.000539009 +0.035000 0.188198 0.035000 0.121729 0.035000 0.121364 0.035000 0.121364 0.035000 0.12125 0.035000 0.000479017 +0.040000 0.196164 0.040000 0.1251 0.040000 0.124398 0.040000 0.124398 0.040000 0.124664 0.040000 0.00043554 +0.045000 0.202174 0.045000 0.127421 0.045000 0.126565 0.045000 0.126565 0.045000 0.127021 0.045000 0.000400006 +0.050000 0.20644 0.050000 0.128894 0.050000 0.128018 0.050000 0.128018 0.050000 0.128524 0.050000 0.000370357 +0.055000 0.209169 0.055000 0.129689 0.055000 0.128886 0.055000 0.128886 0.055000 0.129344 0.055000 0.000345202 +0.060000 0.210565 0.060000 0.129948 0.060000 0.129275 0.060000 0.129275 0.060000 0.129624 0.060000 0.000323559 +0.070000 0.210137 0.070000 0.129306 0.070000 0.128961 0.070000 0.128961 0.070000 0.129017 0.070000 0.000288155 +0.080000 0.20659 0.080000 0.127672 0.080000 0.12764 0.080000 0.12764 0.080000 0.127411 0.080000 0.000260336 +0.090000 0.201102 0.090000 0.125501 0.090000 0.125702 0.090000 0.125702 0.090000 0.125263 0.090000 0.000237839 +0.100000 0.194567 0.100000 0.123075 0.100000 0.123418 0.100000 0.123418 0.100000 0.122856 0.100000 0.000219231 +0.120000 0.180657 0.120000 0.118063 0.120000 0.118459 0.120000 0.118459 0.120000 0.117873 0.120000 0.000190157 +0.140000 0.167611 0.140000 0.113277 0.140000 0.113548 0.140000 0.113548 0.140000 0.113108 0.140000 0.000168401 +0.160000 0.156285 0.160000 0.108882 0.160000 0.108968 0.160000 0.108968 0.160000 0.10873 0.160000 0.000151451 +0.180000 0.146715 0.180000 0.104883 0.180000 0.104787 0.180000 0.104787 0.180000 0.104745 0.180000 0.000137837 +0.200000 0.138663 0.200000 0.101239 0.200000 0.100992 0.200000 0.100992 0.200000 0.101113 0.200000 0.000126642 +0.250000 0.123371 0.250000 0.0933856 0.250000 0.0929141 0.250000 0.0929141 0.250000 0.0932799 0.250000 0.000105698 +0.300000 0.112468 0.300000 0.0868857 0.300000 0.0863542 0.300000 0.0863542 0.300000 0.0867946 0.300000 9.10677e-05 +0.350000 0.104095 0.350000 0.0813729 0.350000 0.0808667 0.350000 0.0808667 0.350000 0.0812927 0.350000 8.02217e-05 +0.400000 0.0973057 0.400000 0.0766152 0.400000 0.0761708 0.400000 0.0761708 0.400000 0.0765434 0.400000 7.1834e-05 +0.450000 0.0915916 0.450000 0.0724554 0.450000 0.0720842 0.450000 0.0720842 0.450000 0.0723903 0.450000 6.51383e-05 +0.500000 0.0866596 0.500000 0.0687808 0.500000 0.0684823 0.500000 0.0684823 0.500000 0.0687211 0.500000 5.96597e-05 +0.600000 0.0784723 0.600000 0.0625694 0.600000 0.0623968 0.600000 0.0623968 0.600000 0.0625182 0.600000 5.12092e-05 +0.700000 0.0718731 0.700000 0.0575075 0.700000 0.0574299 0.700000 0.0574299 0.700000 0.0574626 0.700000 4.49755e-05 +0.800000 0.0663996 0.800000 0.0532937 0.800000 0.0532841 0.800000 0.0532841 0.800000 0.0532535 0.800000 4.01736e-05 +0.900000 0.0617682 0.900000 0.0497251 0.900000 0.049763 0.900000 0.049763 0.900000 0.0496888 0.900000 3.63528e-05 +1.000000 0.0577896 1.000000 0.0466597 1.000000 0.04673 1.000000 0.04673 1.000000 0.0466264 1.000000 3.32351e-05 +1.250000 0.0499035 1.250000 0.0405867 1.250000 0.0406967 1.250000 0.0406967 1.250000 0.0405593 1.250000 2.74651e-05 +1.500000 0.0440283 1.500000 0.0360625 1.500000 0.0361804 1.500000 0.0361804 1.500000 0.036039 1.500000 2.34847e-05 +1.750000 0.0394677 1.750000 0.0325467 1.750000 0.0326583 1.750000 0.0326583 1.750000 0.0325262 1.750000 2.05625e-05 +2.000000 0.0358166 2.000000 0.0297268 2.000000 0.029826 2.000000 0.029826 2.000000 0.0297085 2.000000 1.83202e-05 +2.250000 0.0328226 2.250000 0.0274087 2.250000 0.0274933 2.250000 0.0274933 2.250000 0.0273922 2.250000 1.65418e-05 +2.500000 0.0301896 2.500000 0.0254654 2.500000 0.025535 2.500000 0.025535 2.500000 0.0254503 2.500000 1.50946e-05 +3.000000 0.0263609 3.000000 0.0223805 3.000000 0.022422 3.000000 0.022422 3.000000 0.0223676 3.000000 1.28774e-05 +3.500000 0.0234551 3.500000 0.020032 3.500000 0.0200493 3.500000 0.0200493 3.500000 0.0200208 3.500000 1.12542e-05 +4.000000 0.0211681 4.000000 0.0181774 4.000000 0.0181745 4.000000 0.0181745 4.000000 0.0181674 4.000000 1.00114e-05 +4.500000 0.0193175 4.500000 0.0166714 4.500000 0.0166516 4.500000 0.0166516 4.500000 0.0166623 4.500000 9.02761e-06 +5.000000 0.0177868 5.000000 0.0154211 5.000000 0.0153875 5.000000 0.0153875 5.000000 0.0154129 5.000000 8.22837e-06 +5.500000 0.016498 5.500000 0.0143647 5.500000 0.0143195 5.500000 0.0143195 5.500000 0.0143572 5.500000 7.56547e-06 +6.000000 0.0153968 6.000000 0.0134589 6.000000 0.0134039 6.000000 0.0134039 6.000000 0.0134519 6.000000 7.00626e-06 +6.500000 0.0144443 6.500000 0.0126725 6.500000 0.0126095 6.500000 0.0126095 6.500000 0.012666 6.500000 6.52781e-06 +7.000000 0.0136117 7.000000 0.0119828 7.000000 0.0119128 7.000000 0.0119128 7.000000 0.0119767 7.000000 6.11355e-06 +7.500000 0.0128772 7.500000 0.0113723 7.500000 0.0112965 7.500000 0.0112965 7.500000 0.0113665 7.500000 5.75117e-06 +8.000000 0.0122241 8.000000 0.0108276 8.000000 0.0107469 8.000000 0.0107469 8.000000 0.0108222 8.000000 5.43136e-06 +8.500000 0.0116393 8.500000 0.0103384 8.500000 0.0102534 8.500000 0.0102534 8.500000 0.0103332 8.500000 5.1469e-06 +9.000000 0.0111125 9.000000 0.00989621 9.000000 0.00980764 9.000000 0.00980764 9.000000 0.00989132 9.000000 4.89217e-06 +9.500000 0.0106352 9.500000 0.00949441 9.500000 0.00940275 9.500000 0.00940275 9.500000 0.00948975 9.500000 4.66264e-06 +10.000000 0.0102006 10.000000 0.00917117 10.000000 0.00903319 10.000000 0.00903319 10.000000 0.00916671 10.000000 4.45471e-06 +11.000000 0.00943831 11.000000 0.0085459 11.000000 0.00838473 11.000000 0.00838481 11.000000 0.00854181 11.000000 4.0923e-06 +12.000000 0.00879089 12.000000 0.00800538 12.000000 0.00783245 12.000000 0.00783262 12.000000 0.0080016 12.000000 3.7869e-06 +13.000000 0.0082338 13.000000 0.00753351 13.000000 0.0073562 13.000000 0.0073563 13.000000 0.00752998 13.000000 3.52585e-06 +14.000000 0.00774904 14.000000 0.00711796 14.000000 0.00694095 14.000000 0.00694094 14.000000 0.00711466 14.000000 3.30001e-06 +15.000000 0.00732315 15.000000 0.00674918 15.000000 0.00657532 15.000000 0.00657533 15.000000 0.00674608 15.000000 3.1026e-06 +16.000000 0.00694583 16.000000 0.00641965 16.000000 0.00625097 16.000000 0.00625089 16.000000 0.00641672 16.000000 2.92851e-06 +17.000000 0.00660908 17.000000 0.00612337 17.000000 0.00596127 17.000000 0.00596092 17.000000 0.0061206 17.000000 2.77376e-06 +18.000000 0.00630657 18.000000 0.00585551 18.000000 0.00570062 18.000000 0.00570015 18.000000 0.00585288 18.000000 2.63526e-06 +19.000000 0.00603325 19.000000 0.00561213 19.000000 0.00546478 19.000000 0.00546431 19.000000 0.00560962 19.000000 2.51054e-06 +20.000000 0.005785 20.000000 0.00538998 20.000000 0.00525045 20.000000 0.00524998 20.000000 0.00538758 20.000000 2.39762e-06 +21.000000 0.00555847 21.000000 0.00518637 21.000000 0.00505482 21.000000 0.00505431 21.000000 0.00518408 21.000000 2.29486e-06 +22.000000 0.00535087 22.000000 0.00499905 22.000000 0.00487545 22.000000 0.00487496 22.000000 0.00499685 22.000000 2.20094e-06 +23.000000 0.00515989 23.000000 0.00482612 23.000000 0.00471048 23.000000 0.00470998 23.000000 0.004824 23.000000 2.11474e-06 +24.000000 0.00498357 24.000000 0.00466595 24.000000 0.00455841 24.000000 0.00455771 24.000000 0.00466392 24.000000 2.03534e-06 +25.000000 0.00482024 25.000000 0.00451717 25.000000 0.00441776 25.000000 0.00441675 25.000000 0.00451521 25.000000 1.96194e-06 +27.000000 0.00452715 27.000000 0.00424919 27.000000 0.00416541 27.000000 0.00416412 27.000000 0.00424736 27.000000 1.83062e-06 +29.000000 0.00427149 29.000000 0.00401443 29.000000 0.00394561 29.000000 0.00394435 29.000000 0.00401271 29.000000 1.71647e-06 +31.000000 0.00404641 31.000000 0.00380701 31.000000 0.00374826 31.000000 0.00374699 31.000000 0.00380539 31.000000 1.6163e-06 +33.000000 0.00384663 33.000000 0.00362235 33.000000 0.00356846 33.000000 0.00356726 33.000000 0.00362083 33.000000 1.52765e-06 +35.000000 0.00366804 35.000000 0.00345687 35.000000 0.00340719 35.000000 0.00340613 35.000000 0.00345542 35.000000 1.44862e-06 +38.000000 0.00343292 38.000000 0.00323845 38.000000 0.00319476 38.000000 0.00319332 38.000000 0.0032371 38.000000 1.34488e-06 +41.000000 0.00322984 41.000000 0.0030493 41.000000 0.00301036 41.000000 0.00300888 41.000000 0.00304805 41.000000 1.25558e-06 +44.000000 0.00305254 44.000000 0.00288386 44.000000 0.00284875 44.000000 0.00284739 44.000000 0.00288268 44.000000 1.17786e-06 +47.000000 0.00289632 47.000000 0.00273786 47.000000 0.00270603 47.000000 0.00270475 47.000000 0.00273675 47.000000 1.10957e-06 +50.000000 0.00275757 50.000000 0.00260803 50.000000 0.00257898 50.000000 0.00257778 50.000000 0.00260698 50.000000 1.04908e-06 +55.000000 0.0025577 55.000000 0.00242083 55.000000 0.00239556 55.000000 0.00239445 55.000000 0.00241987 55.000000 9.6222e-07 +60.000000 0.00238896 60.000000 0.00226265 60.000000 0.00224038 60.000000 0.00223928 60.000000 0.00226176 60.000000 8.89159e-07 +65.000000 0.00224445 65.000000 0.00212716 65.000000 0.00210746 65.000000 0.00210617 65.000000 0.00212633 65.000000 8.26812e-07 +70.000000 0.00211922 70.000000 0.00200974 70.000000 0.00199182 70.000000 0.00199064 70.000000 0.00200897 70.000000 7.72955e-07 +75.000000 0.00200957 75.000000 0.00190698 75.000000 0.00189051 75.000000 0.0018894 75.000000 0.00190626 75.000000 7.25944e-07 +80.000000 0.00191272 80.000000 0.00181626 80.000000 0.00180095 80.000000 0.0017999 80.000000 0.00181558 80.000000 6.84536e-07 +85.000000 0.00182649 85.000000 0.00173556 85.000000 0.00172119 85.000000 0.0017202 85.000000 0.00173491 85.000000 6.47773e-07 +90.000000 0.00174919 90.000000 0.00166329 90.000000 0.0016497 90.000000 0.00164874 90.000000 0.00166268 90.000000 6.14905e-07 +95.000000 0.00167947 95.000000 0.00159819 95.000000 0.00158544 95.000000 0.00158431 95.000000 0.0015976 95.000000 5.85338e-07 +100.000000 0.00161625 100.000000 0.00153922 100.000000 0.00152698 100.000000 0.00152589 100.000000 0.00153866 100.000000 5.58591e-07 +105.000000 0.00155864 105.000000 0.00148555 105.000000 0.00147372 105.000000 0.00147268 105.000000 0.00148502 105.000000 5.34274e-07 +110.000000 0.0015059 110.000000 0.0014365 110.000000 0.00142501 110.000000 0.00142401 110.000000 0.00143598 110.000000 5.12067e-07 +115.000000 0.00145744 115.000000 0.00139148 115.000000 0.00138027 115.000000 0.00137931 115.000000 0.00139099 115.000000 4.91702e-07 +120.000000 0.00141272 120.000000 0.00135001 120.000000 0.00133904 120.000000 0.00133811 120.000000 0.00134954 120.000000 4.72957e-07 +125.000000 0.00137134 125.000000 0.00131169 125.000000 0.00130092 125.000000 0.00130002 125.000000 0.00131124 125.000000 4.55643e-07 +130.000000 0.00133291 130.000000 0.00127617 130.000000 0.00126556 130.000000 0.00126468 130.000000 0.00127573 130.000000 4.396e-07 +135.000000 0.00129712 135.000000 0.00124315 135.000000 0.00123265 135.000000 0.00123182 135.000000 0.00124272 135.000000 4.24692e-07 +140.000000 0.00126371 140.000000 0.00121237 140.000000 0.00120207 140.000000 0.00120118 140.000000 0.00121196 140.000000 4.10801e-07 +145.000000 0.00123244 145.000000 0.00118361 145.000000 0.00117351 145.000000 0.00117254 145.000000 0.00118321 145.000000 3.97824e-07 +150.000000 0.00120311 150.000000 0.00115668 150.000000 0.00114665 150.000000 0.00114571 150.000000 0.0011563 150.000000 3.85674e-07 +155.000000 0.0011618 155.000000 0.00113141 155.000000 0.00112143 155.000000 0.00112053 155.000000 0.00113103 155.000000 3.74272e-07 +160.000000 0.00113759 160.000000 0.00110764 160.000000 0.00109772 160.000000 0.00109684 160.000000 0.00110728 160.000000 3.63551e-07 +165.000000 0.00111476 165.000000 0.00108526 165.000000 0.00107538 165.000000 0.00107452 165.000000 0.0010849 165.000000 3.5345e-07 +170.000000 0.00109319 170.000000 0.00106413 170.000000 0.00105429 170.000000 0.00105345 170.000000 0.00106379 170.000000 3.43917e-07 +175.000000 0.00107279 175.000000 0.00104416 175.000000 0.00103436 175.000000 0.00103353 175.000000 0.00104382 175.000000 3.34905e-07 +180.000000 0.00105345 180.000000 0.00102525 180.000000 0.00101548 180.000000 0.00101467 180.000000 0.00102492 180.000000 3.26371e-07 +185.000000 0.00103509 185.000000 0.00100732 185.000000 0.00099758 185.000000 0.00099679 185.000000 0.00100701 185.000000 3.18277e-07 +190.000000 0.00101765 190.000000 0.000990304 190.000000 0.000980587 190.000000 0.00097981 190.000000 0.000989993 190.000000 3.10591e-07 +195.000000 0.00100105 195.000000 0.000974122 195.000000 0.000964418 195.000000 0.000963666 195.000000 0.000973819 195.000000 3.03282e-07 +200.000000 0.000985233 200.000000 0.00095872 200.000000 0.000949031 200.000000 0.000948299 200.000000 0.000958423 200.000000 2.96322e-07 +210.000000 0.000955735 210.000000 0.000930036 210.000000 0.000920499 210.000000 0.000919681 210.000000 0.000929752 210.000000 2.83353e-07 +220.000000 0.000928775 220.000000 0.000903871 220.000000 0.000894395 220.000000 0.00089358 220.000000 0.000903599 220.000000 2.71512e-07 +230.000000 0.000904037 230.000000 0.000879908 230.000000 0.000870462 230.000000 0.00086968 230.000000 0.000879647 230.000000 2.60656e-07 +240.000000 0.000881255 240.000000 0.000857881 240.000000 0.000848478 240.000000 0.000847716 240.000000 0.000857631 240.000000 2.50667e-07 +250.000000 0.000860204 250.000000 0.000837567 250.000000 0.000828206 250.000000 0.000827466 250.000000 0.000837326 250.000000 2.41442e-07 +260.000000 0.000840695 260.000000 0.000818774 260.000000 0.000809459 260.000000 0.00080874 260.000000 0.000818541 260.000000 2.32897e-07 +270.000000 0.000822562 270.000000 0.00080134 270.000000 0.000792076 270.000000 0.000791374 270.000000 0.000801115 270.000000 2.24958e-07 +280.000000 0.000805666 280.000000 0.000785123 280.000000 0.000775914 280.000000 0.000775228 280.000000 0.000784906 280.000000 2.17562e-07 +290.000000 0.000789885 290.000000 0.000770002 290.000000 0.00076084 290.000000 0.000760181 290.000000 0.000769792 290.000000 2.10654e-07 +300.000000 0.000775111 300.000000 0.000755871 300.000000 0.000746818 300.000000 0.000746127 300.000000 0.000755667 300.000000 2.04188e-07 +310.000000 0.000761253 310.000000 0.000742638 310.000000 0.00073371 310.000000 0.000732973 310.000000 0.00074244 310.000000 1.98121e-07 +320.000000 0.000748227 320.000000 0.00073022 320.000000 0.000721359 320.000000 0.000720637 320.000000 0.000730028 320.000000 1.92417e-07 +330.000000 0.000735962 330.000000 0.000718547 330.000000 0.000709749 330.000000 0.000709048 330.000000 0.00071836 330.000000 1.87044e-07 +340.000000 0.000724395 340.000000 0.000707555 340.000000 0.000698833 340.000000 0.000698142 340.000000 0.000707373 340.000000 1.81974e-07 +350.000000 0.000713467 350.000000 0.000697187 350.000000 0.000688541 350.000000 0.000687862 350.000000 0.000697009 350.000000 1.77182e-07 +360.000000 0.000703128 360.000000 0.000687392 360.000000 0.000678824 360.000000 0.000678158 360.000000 0.00068722 360.000000 1.72644e-07 +370.000000 0.000693333 370.000000 0.000678127 370.000000 0.00066964 370.000000 0.000668984 370.000000 0.000677959 370.000000 1.68342e-07 +380.000000 0.000684041 380.000000 0.00066935 380.000000 0.000660946 380.000000 0.0006603 380.000000 0.000669186 380.000000 1.64257e-07 +390.000000 0.000675215 390.000000 0.000661025 390.000000 0.000652705 390.000000 0.000652069 390.000000 0.000660865 390.000000 1.60372e-07 +400.000000 0.000666822 400.000000 0.00065312 400.000000 0.000644884 400.000000 0.000644258 400.000000 0.000652963 400.000000 1.56674e-07 +410.000000 0.000658831 410.000000 0.000645603 410.000000 0.000637455 410.000000 0.000636838 410.000000 0.00064545 410.000000 1.53149e-07 +420.000000 0.000651215 420.000000 0.00063845 420.000000 0.000630391 420.000000 0.00062978 420.000000 0.0006383 420.000000 1.49784e-07 +430.000000 0.00064395 430.000000 0.000631634 430.000000 0.000623663 430.000000 0.000623061 430.000000 0.000631488 430.000000 1.46569e-07 +440.000000 0.000637012 440.000000 0.000625134 440.000000 0.000617245 440.000000 0.000616658 440.000000 0.000624991 440.000000 1.43495e-07 +450.000000 0.000630381 450.000000 0.00061893 450.000000 0.000611131 450.000000 0.00061055 450.000000 0.000618789 450.000000 1.40552e-07 +460.000000 0.000624038 460.000000 0.000613002 460.000000 0.000605316 460.000000 0.000604718 460.000000 0.000612864 460.000000 1.37731e-07 +470.000000 0.000617965 470.000000 0.000607333 470.000000 0.000599772 470.000000 0.000599146 470.000000 0.000607198 470.000000 1.35025e-07 +480.000000 0.000612147 480.000000 0.000601908 480.000000 0.000594459 480.000000 0.000593817 480.000000 0.000601776 480.000000 1.32428e-07 +490.000000 0.000606568 490.000000 0.000596713 490.000000 0.000589354 490.000000 0.000588716 490.000000 0.000596583 490.000000 1.29932e-07 +500.000000 0.000601215 500.000000 0.000591733 500.000000 0.000584456 500.000000 0.000583831 500.000000 0.000591605 500.000000 1.27532e-07 +520.000000 0.000591137 520.000000 0.000582373 520.000000 0.000575269 520.000000 0.000574658 520.000000 0.00058225 520.000000 1.22997e-07 +540.000000 0.000581823 540.000000 0.00057374 540.000000 0.00056681 540.000000 0.000566209 540.000000 0.000573622 540.000000 1.18785e-07 +560.000000 0.000573195 560.000000 0.000565759 560.000000 0.000558996 560.000000 0.000558407 560.000000 0.000565644 560.000000 1.14862e-07 +580.000000 0.000565185 580.000000 0.000558364 580.000000 0.000551765 580.000000 0.000551185 580.000000 0.000558253 580.000000 1.11198e-07 +600.000000 0.000557735 600.000000 0.000551498 600.000000 0.000545058 600.000000 0.000544487 600.000000 0.00055139 600.000000 1.07769e-07 +620.000000 0.000550794 620.000000 0.000545111 620.000000 0.000538824 620.000000 0.000538262 620.000000 0.000545006 620.000000 1.04553e-07 +640.000000 0.000544316 640.000000 0.00053916 640.000000 0.000533022 640.000000 0.000532466 640.000000 0.000539058 640.000000 1.01529e-07 +660.000000 0.000538261 660.000000 0.000533605 660.000000 0.000527607 660.000000 0.00052706 660.000000 0.000533506 660.000000 9.86815e-08 +680.000000 0.000532594 680.000000 0.000528414 680.000000 0.000522544 680.000000 0.00052201 680.000000 0.000528318 680.000000 9.59947e-08 +700.000000 0.000527283 700.000000 0.000523555 700.000000 0.000517824 700.000000 0.000517285 700.000000 0.000523461 700.000000 9.34555e-08 +720.000000 0.000522301 720.000000 0.000519001 720.000000 0.000513421 720.000000 0.000512859 720.000000 0.00051891 720.000000 9.10517e-08 +740.000000 0.000517622 740.000000 0.000514729 740.000000 0.00050932 740.000000 0.000508739 740.000000 0.00051464 740.000000 8.87727e-08 +760.000000 0.000513223 760.000000 0.000510717 760.000000 0.000505526 760.000000 0.000504946 760.000000 0.000510631 760.000000 8.6609e-08 +780.000000 0.000509084 780.000000 0.000506945 780.000000 0.000501948 780.000000 0.000501379 780.000000 0.000506861 780.000000 8.45519e-08 +800.000000 0.000505187 800.000000 0.000503396 800.000000 0.000498581 800.000000 0.00049802 800.000000 0.000503314 800.000000 8.25935e-08 +820.000000 0.000501515 820.000000 0.000500054 820.000000 0.00049541 820.000000 0.000494854 820.000000 0.000499973 820.000000 8.0727e-08 +840.000000 0.000498052 840.000000 0.000496904 840.000000 0.00049242 840.000000 0.000491868 840.000000 0.000496825 840.000000 7.89459e-08 +860.000000 0.000494786 860.000000 0.000493934 860.000000 0.000489596 860.000000 0.000489048 860.000000 0.000493857 860.000000 7.72443e-08 +880.000000 0.000491702 880.000000 0.000491131 880.000000 0.000486927 880.000000 0.000486383 880.000000 0.000491055 880.000000 7.56171e-08 +900.000000 0.000488791 900.000000 0.000488484 900.000000 0.000484402 900.000000 0.000483863 900.000000 0.00048841 900.000000 7.40594e-08 +920.000000 0.000486041 920.000000 0.000485984 920.000000 0.000482013 920.000000 0.000481478 920.000000 0.000485912 920.000000 7.25668e-08 +940.000000 0.000483442 940.000000 0.000483621 940.000000 0.000479751 940.000000 0.00047922 940.000000 0.00048355 940.000000 7.11352e-08 +960.000000 0.000480986 960.000000 0.000481388 960.000000 0.000477607 960.000000 0.000477079 960.000000 0.000481318 960.000000 6.9761e-08 +980.000000 0.000478664 980.000000 0.000479275 980.000000 0.000475574 980.000000 0.00047505 980.000000 0.000479207 980.000000 6.84406e-08 +1000.000000 0.000476469 1000.000000 0.000477277 1000.000000 0.000473645 1000.000000 0.000473124 1000.000000 0.00047721 1000.000000 6.71711e-08 +1020.000000 0.000474394 1020.000000 0.000475386 1020.000000 0.000471814 1020.000000 0.000471296 1020.000000 0.000475321 1020.000000 6.59494e-08 +1040.000000 0.000472432 1040.000000 0.000473597 1040.000000 0.000470074 1040.000000 0.00046956 1040.000000 0.000473533 1040.000000 6.47729e-08 +1060.000000 0.000470577 1060.000000 0.000471904 1060.000000 0.000468422 1060.000000 0.00046791 1060.000000 0.00047184 1060.000000 6.3639e-08 +1080.000000 0.000468824 1080.000000 0.000470302 1080.000000 0.00046685 1080.000000 0.000466342 1080.000000 0.000470239 1080.000000 6.25455e-08 +1100.000000 0.000467168 1100.000000 0.000468785 1100.000000 0.000465356 1100.000000 0.00046485 1100.000000 0.000468723 1100.000000 6.14903e-08 +1120.000000 0.000465603 1120.000000 0.000467349 1120.000000 0.000463935 1120.000000 0.000463431 1120.000000 0.000467289 1120.000000 6.04713e-08 +1140.000000 0.000464125 1140.000000 0.000465991 1140.000000 0.000462583 1140.000000 0.000462081 1140.000000 0.000465932 1140.000000 5.94867e-08 +1160.000000 0.00046273 1160.000000 0.000464706 1160.000000 0.000461295 1160.000000 0.000460795 1160.000000 0.000464648 1160.000000 5.85347e-08 +1180.000000 0.000461414 1180.000000 0.000463491 1180.000000 0.000460069 1180.000000 0.000459571 1180.000000 0.000463433 1180.000000 5.76137e-08 +1200.000000 0.000460174 1200.000000 0.000462341 1200.000000 0.000458899 1200.000000 0.000458404 1200.000000 0.000462285 1200.000000 5.67223e-08 +1220.000000 0.000459005 1220.000000 0.000461255 1220.000000 0.000457784 1220.000000 0.000457293 1220.000000 0.000461199 1220.000000 5.5859e-08 +1240.000000 0.000457905 1240.000000 0.000460229 1240.000000 0.00045672 1240.000000 0.000456234 1240.000000 0.000460174 1240.000000 5.50225e-08 +1260.000000 0.00045687 1260.000000 0.000459259 1260.000000 0.000455707 1260.000000 0.000455224 1260.000000 0.000459205 1260.000000 5.42115e-08 +1280.000000 0.000455898 1280.000000 0.000458345 1280.000000 0.000454743 1280.000000 0.000454262 1280.000000 0.000458291 1280.000000 5.34249e-08 +1300.000000 0.000454986 1300.000000 0.000457482 1300.000000 0.000453825 1300.000000 0.000453344 1300.000000 0.000457429 1300.000000 5.26615e-08 +1320.000000 0.000454131 1320.000000 0.000456669 1320.000000 0.000452953 1320.000000 0.000452469 1320.000000 0.000456617 1320.000000 5.19205e-08 +1340.000000 0.000453332 1340.000000 0.000455904 1340.000000 0.000452123 1340.000000 0.000451634 1340.000000 0.000455853 1340.000000 5.12007e-08 +1360.000000 0.000452585 1360.000000 0.000455184 1360.000000 0.000451333 1360.000000 0.000450838 1360.000000 0.000455134 1360.000000 5.05012e-08 +1380.000000 0.000451889 1380.000000 0.000454508 1380.000000 0.000450581 1380.000000 0.000450078 1380.000000 0.000454458 1380.000000 4.98213e-08 +1400.000000 0.000451241 1400.000000 0.000453873 1400.000000 0.000449863 1400.000000 0.000449354 1400.000000 0.000453824 1400.000000 4.91601e-08 +1420.000000 0.00045064 1420.000000 0.000453279 1420.000000 0.000449177 1420.000000 0.000448663 1420.000000 0.00045323 1420.000000 4.85167e-08 +1440.000000 0.000450085 1440.000000 0.000452722 1440.000000 0.000448522 1440.000000 0.000448003 1440.000000 0.000452675 1440.000000 4.78906e-08 +1460.000000 0.000449572 1460.000000 0.000452203 1460.000000 0.000447895 1460.000000 0.000447375 1460.000000 0.000452156 1460.000000 4.7281e-08 +1480.000000 0.000449101 1480.000000 0.000451719 1480.000000 0.000447296 1480.000000 0.000446775 1480.000000 0.000451672 1480.000000 4.66872e-08 +1500.000000 0.00044867 1500.000000 0.000451268 1500.000000 0.000446723 1500.000000 0.000446203 1500.000000 0.000451222 1500.000000 4.61087e-08 +1520.000000 0.000448278 1520.000000 0.000450851 1520.000000 0.000446176 1520.000000 0.000445657 1520.000000 0.000450805 1520.000000 4.55448e-08 +1540.000000 0.000447923 1540.000000 0.000450464 1540.000000 0.000445653 1540.000000 0.000445137 1540.000000 0.000450419 1540.000000 4.4995e-08 +1560.000000 0.000447603 1560.000000 0.000450108 1560.000000 0.000445155 1560.000000 0.000444641 1560.000000 0.000450064 1560.000000 4.44588e-08 +1580.000000 0.000447319 1580.000000 0.000449781 1580.000000 0.00044468 1580.000000 0.000444169 1580.000000 0.000449737 1580.000000 4.39356e-08 +1600.000000 0.000447068 1600.000000 0.000449482 1600.000000 0.000444227 1600.000000 0.000443718 1600.000000 0.000449438 1600.000000 4.34251e-08 +1620.000000 0.000446849 1620.000000 0.00044921 1620.000000 0.000443796 1620.000000 0.000443289 1620.000000 0.000449167 1620.000000 4.29266e-08 +1640.000000 0.000446662 1640.000000 0.000448963 1640.000000 0.000443386 1640.000000 0.000442881 1640.000000 0.000448921 1640.000000 4.24399e-08 +1660.000000 0.000446504 1660.000000 0.000448742 1660.000000 0.000442996 1660.000000 0.000442492 1660.000000 0.0004487 1660.000000 4.19644e-08 +1680.000000 0.000446376 1680.000000 0.000448545 1680.000000 0.000442624 1680.000000 0.000442122 1680.000000 0.000448503 1680.000000 4.14999e-08 +1700.000000 0.000446276 1700.000000 0.000448371 1700.000000 0.000442272 1700.000000 0.00044177 1700.000000 0.00044833 1700.000000 4.10458e-08 +1750.000000 0.000446145 1750.000000 0.000448033 1750.000000 0.000441464 1750.000000 0.000440964 1750.000000 0.000447993 1750.000000 3.99545e-08 +1800.000000 0.000446172 1800.000000 0.000447824 1800.000000 0.000440754 1800.000000 0.000440257 1800.000000 0.000447785 1800.000000 3.89215e-08 +1850.000000 0.000446345 1850.000000 0.000447733 1850.000000 0.000440133 1850.000000 0.000439638 1850.000000 0.000447695 1850.000000 3.79423e-08 +1900.000000 0.000446655 1900.000000 0.000447752 1900.000000 0.000439593 1900.000000 0.000439099 1900.000000 0.000447715 1900.000000 3.70128e-08 +1950.000000 0.000447091 1950.000000 0.000447872 1950.000000 0.000439125 1950.000000 0.000438634 1950.000000 0.000447836 1950.000000 3.61292e-08 +2000.000000 0.000447646 2000.000000 0.000448086 2000.000000 0.000438724 2000.000000 0.000438235 2000.000000 0.000448051 2000.000000 3.52882e-08 +2100.000000 0.000449079 2100.000000 0.000448766 2100.000000 0.0004381 2100.000000 0.000437614 2100.000000 0.000448733 2100.000000 3.37219e-08 +2200.000000 0.000450901 2200.000000 0.000449747 2200.000000 0.000437679 2200.000000 0.000437197 2200.000000 0.000449715 2200.000000 3.2293e-08 +2300.000000 0.000453067 2300.000000 0.000450988 2300.000000 0.000437429 2300.000000 0.000436949 2300.000000 0.000450957 2300.000000 3.09839e-08 +2400.000000 0.00045554 2400.000000 0.000452458 2400.000000 0.000437322 2400.000000 0.000436845 2400.000000 0.000452428 2400.000000 2.978e-08 +2500.000000 0.000458287 2500.000000 0.000454128 2500.000000 0.000437336 2500.000000 0.000436861 2500.000000 0.000454099 2500.000000 2.8669e-08 +2600.000000 0.000461282 2600.000000 0.000455975 2600.000000 0.000437453 2600.000000 0.00043698 2600.000000 0.000455948 2600.000000 2.76405e-08 +2700.000000 0.000464501 2700.000000 0.00045798 2700.000000 0.000437656 2700.000000 0.000437186 2700.000000 0.000457953 2700.000000 2.66854e-08 +2800.000000 0.000467924 2800.000000 0.000460125 2800.000000 0.000437934 2800.000000 0.000437465 2800.000000 0.000460099 2800.000000 2.57962e-08 +2900.000000 0.000471534 2900.000000 0.000462396 2900.000000 0.000438275 2900.000000 0.000437807 2900.000000 0.000462371 2900.000000 2.49661e-08 +3000.000000 0.000475317 3000.000000 0.000464779 3000.000000 0.000438669 3000.000000 0.000438203 3000.000000 0.000464755 3000.000000 2.41894e-08 diff --git a/Inputs/EnergyLoss/proton_D2gaz_1b_26K.txt b/Inputs/EnergyLoss/proton_D2gaz_1b_26K.txt new file mode 100644 index 0000000000000000000000000000000000000000..4c9857bf38f019a527c54697f8b3c393fb31b9eb --- /dev/null +++ b/Inputs/EnergyLoss/proton_D2gaz_1b_26K.txt @@ -0,0 +1,218 @@ +Energy (MeV/u)1 0 - [He-base] F.Hubert et al, AD&ND Tables 46(1990)1 Energy (MeV/u)2 1 - [H -base] J.F.Ziegler et al, Pergamon Press, NY (low energy) Energy (MeV/u)3 2 - ATIMA 1.2 LS-theory (recommended for high energy) Energy (MeV/u)4 3 - ATIMA 1.2 without LS-correction Energy (MeV/u)5 4 - electrical component of [1] - J.F.Ziegler et al Energy (MeV/u)6 5 - nuclear component of [1] - J.F.Ziegler et al +0.001000 3.70441e-06 0.001000 8.27996e-06 0.001000 8.81526e-06 0.001000 8.81526e-06 0.001000 7.39851e-06 0.001000 8.81446e-07 +0.002000 4.50298e-06 0.002000 9.99137e-06 0.002000 9.99646e-06 0.002000 9.99646e-06 0.002000 9.42985e-06 0.002000 5.61516e-07 +0.005000 5.98337e-06 0.005000 1.32833e-05 0.005000 1.21519e-05 0.005000 1.21519e-05 0.005000 1.29952e-05 0.005000 2.88106e-07 +0.008000 6.98117e-06 0.008000 1.55201e-05 0.008000 1.35442e-05 0.008000 1.35442e-05 0.008000 1.53188e-05 0.008000 2.01222e-07 +0.010000 7.52092e-06 0.010000 1.67322e-05 0.010000 1.42775e-05 0.010000 1.42775e-05 0.010000 1.65632e-05 0.010000 1.69013e-07 +0.015000 9.0803e-06 0.015000 2.12236e-05 0.015000 1.5736e-05 0.015000 1.5736e-05 0.015000 2.11012e-05 0.015000 1.22409e-07 +0.020000 1.03561e-05 0.020000 2.48676e-05 0.020000 1.68749e-05 0.020000 1.68749e-05 0.020000 2.47706e-05 0.020000 9.69869e-08 +0.025000 1.14107e-05 0.025000 2.78219e-05 0.025000 1.78213e-05 0.025000 1.78213e-05 0.025000 2.77411e-05 0.025000 8.08037e-08 +0.030000 1.22768e-05 0.030000 3.01821e-05 0.030000 1.91438e-05 0.030000 1.91438e-05 0.030000 3.01126e-05 0.030000 6.95249e-08 +0.035000 1.2976e-05 0.035000 3.20215e-05 0.035000 2.02596e-05 0.035000 2.02596e-05 0.035000 3.19603e-05 0.035000 6.11787e-08 +0.040000 1.35253e-05 0.040000 3.34046e-05 0.040000 2.12007e-05 0.040000 2.12007e-05 0.040000 3.33499e-05 0.040000 5.47335e-08 +0.045000 1.39397e-05 0.045000 3.43916e-05 0.045000 2.19909e-05 0.045000 2.19909e-05 0.045000 3.4342e-05 0.045000 4.95945e-08 +0.050000 1.42338e-05 0.050000 3.50388e-05 0.050000 2.26492e-05 0.050000 2.26492e-05 0.050000 3.49934e-05 0.050000 4.53939e-08 +0.055000 1.4422e-05 0.055000 3.53989e-05 0.055000 2.31911e-05 0.055000 2.31911e-05 0.055000 3.5357e-05 0.055000 4.18912e-08 +0.060000 1.45182e-05 0.060000 3.55202e-05 0.060000 2.36297e-05 0.060000 2.36297e-05 0.060000 3.54812e-05 0.060000 3.89225e-08 +0.070000 1.44887e-05 0.070000 3.52141e-05 0.070000 2.42421e-05 0.070000 2.42421e-05 0.070000 3.518e-05 0.070000 3.41551e-08 +0.080000 1.42441e-05 0.080000 3.44061e-05 0.080000 2.45637e-05 0.080000 2.45637e-05 0.080000 3.43756e-05 0.080000 3.04868e-08 +0.090000 1.38658e-05 0.090000 3.33052e-05 0.090000 2.46565e-05 0.090000 2.46565e-05 0.090000 3.32776e-05 0.090000 2.75706e-08 +0.100000 1.34152e-05 0.100000 3.20559e-05 0.100000 2.45712e-05 0.100000 2.45712e-05 0.100000 3.20307e-05 0.100000 2.5193e-08 +0.120000 1.24561e-05 0.120000 2.9459e-05 0.120000 2.40236e-05 0.120000 2.40236e-05 0.120000 2.94375e-05 0.120000 2.15413e-08 +0.140000 1.15566e-05 0.140000 2.7018e-05 0.140000 2.31668e-05 0.140000 2.31668e-05 0.140000 2.69992e-05 0.140000 1.88604e-08 +0.160000 1.07757e-05 0.160000 2.48576e-05 0.160000 2.21592e-05 0.160000 2.21592e-05 0.160000 2.48408e-05 0.160000 1.68034e-08 +0.180000 1.01159e-05 0.180000 2.29882e-05 0.180000 2.10995e-05 0.180000 2.10995e-05 0.180000 2.2973e-05 0.180000 1.5172e-08 +0.200000 9.56067e-06 0.200000 2.138e-05 0.200000 2.00471e-05 0.200000 2.00471e-05 0.200000 2.13661e-05 0.200000 1.38445e-08 +0.250000 8.50632e-06 0.250000 1.82497e-05 0.250000 1.76285e-05 0.250000 1.76285e-05 0.250000 1.82383e-05 0.250000 1.1397e-08 +0.300000 7.75453e-06 0.300000 1.59993e-05 0.300000 1.56136e-05 0.300000 1.56136e-05 0.300000 1.59895e-05 0.300000 9.71637e-09 +0.350000 7.17725e-06 0.350000 1.43047e-05 0.350000 1.39784e-05 0.350000 1.39784e-05 0.350000 1.42962e-05 0.350000 8.48691e-09 +0.400000 6.70913e-06 0.400000 1.29775e-05 0.400000 1.2652e-05 0.400000 1.2652e-05 0.400000 1.29699e-05 0.400000 7.54626e-09 +0.450000 6.31514e-06 0.450000 1.19049e-05 0.450000 1.15662e-05 0.450000 1.15662e-05 0.450000 1.18981e-05 0.450000 6.80204e-09 +0.500000 5.97509e-06 0.500000 1.10166e-05 0.500000 1.06658e-05 0.500000 1.06658e-05 0.500000 1.10104e-05 0.500000 6.19772e-09 +0.600000 5.41058e-06 0.600000 9.62252e-06 0.600000 9.26447e-06 0.600000 9.26447e-06 0.600000 9.61725e-06 0.600000 5.27419e-09 +0.700000 4.95557e-06 0.700000 8.57125e-06 0.700000 8.22483e-06 0.700000 8.22483e-06 0.700000 8.56665e-06 0.700000 4.60003e-09 +0.800000 4.57818e-06 0.800000 7.74546e-06 0.800000 7.42072e-06 0.800000 7.42072e-06 0.800000 7.74138e-06 0.800000 4.08514e-09 +0.900000 4.25885e-06 0.900000 7.07708e-06 0.900000 6.77783e-06 0.900000 6.77783e-06 0.900000 7.0734e-06 0.900000 3.67836e-09 +1.000000 3.98453e-06 1.000000 6.52351e-06 1.000000 6.2502e-06 1.000000 6.2502e-06 1.000000 6.52017e-06 1.000000 3.34846e-09 +1.250000 3.44079e-06 1.250000 5.47765e-06 1.250000 5.2625e-06 1.250000 5.2625e-06 1.250000 5.47491e-06 1.250000 2.74305e-09 +1.500000 3.03571e-06 1.500000 4.73847e-06 1.500000 4.56872e-06 1.500000 4.56872e-06 1.500000 4.73614e-06 1.500000 2.32965e-09 +1.750000 2.72125e-06 1.750000 4.18577e-06 1.750000 4.05048e-06 1.750000 4.05048e-06 1.750000 4.18374e-06 1.750000 2.02856e-09 +2.000000 2.46952e-06 2.000000 3.75556e-06 2.000000 3.64656e-06 2.000000 3.64656e-06 2.000000 3.75376e-06 2.000000 1.79903e-09 +2.250000 2.26308e-06 2.250000 3.4104e-06 2.250000 3.32173e-06 2.250000 3.32173e-06 2.250000 3.40878e-06 2.250000 1.61799e-09 +2.500000 2.08154e-06 2.500000 3.12686e-06 2.500000 3.05417e-06 2.500000 3.05417e-06 2.500000 3.12539e-06 2.500000 1.47137e-09 +3.000000 1.81755e-06 3.000000 2.68758e-06 3.000000 2.63797e-06 3.000000 2.63797e-06 3.000000 2.68634e-06 3.000000 1.24802e-09 +3.500000 1.6172e-06 3.500000 2.36211e-06 3.500000 2.32798e-06 3.500000 2.32798e-06 3.500000 2.36103e-06 3.500000 1.0856e-09 +4.000000 1.45952e-06 4.000000 2.11062e-06 4.000000 2.08732e-06 4.000000 2.08732e-06 4.000000 2.10966e-06 4.000000 9.61917e-10 +4.500000 1.33192e-06 4.500000 1.91007e-06 4.500000 1.89462e-06 4.500000 1.89462e-06 4.500000 1.9092e-06 4.500000 8.64463e-10 +5.000000 1.22638e-06 5.000000 1.74615e-06 5.000000 1.73656e-06 5.000000 1.73656e-06 5.000000 1.74536e-06 5.000000 7.85605e-10 +5.500000 1.13752e-06 5.500000 1.6095e-06 5.500000 1.60437e-06 5.500000 1.60437e-06 5.500000 1.60878e-06 5.500000 7.20426e-10 +6.000000 1.06159e-06 6.000000 1.49373e-06 6.000000 1.49206e-06 6.000000 1.49206e-06 6.000000 1.49307e-06 6.000000 6.65613e-10 +6.500000 9.95919e-07 6.500000 1.39431e-06 6.500000 1.39537e-06 6.500000 1.39537e-06 6.500000 1.39369e-06 6.500000 6.18846e-10 +7.000000 9.3851e-07 7.000000 1.30795e-06 7.000000 1.31118e-06 7.000000 1.31118e-06 7.000000 1.30737e-06 7.000000 5.78455e-10 +7.500000 8.87867e-07 7.500000 1.23219e-06 7.500000 1.23717e-06 7.500000 1.23717e-06 7.500000 1.23164e-06 7.500000 5.43204e-10 +8.000000 8.42836e-07 8.000000 1.16515e-06 8.000000 1.17156e-06 8.000000 1.17156e-06 8.000000 1.16464e-06 8.000000 5.12159e-10 +8.500000 8.02517e-07 8.500000 1.10539e-06 8.500000 1.11297e-06 8.500000 1.11297e-06 8.500000 1.1049e-06 8.500000 4.846e-10 +9.000000 7.66192e-07 9.000000 1.05176e-06 9.000000 1.0603e-06 9.000000 1.0603e-06 9.000000 1.0513e-06 9.000000 4.59965e-10 +9.500000 7.33284e-07 9.500000 1.00334e-06 9.500000 1.01269e-06 9.500000 1.01269e-06 9.500000 1.0029e-06 9.500000 4.37806e-10 +10.000000 7.03323e-07 10.000000 8.72924e-07 10.000000 9.69413e-07 10.000000 9.69413e-07 10.000000 8.72506e-07 10.000000 4.17763e-10 +11.000000 6.50761e-07 11.000000 8.13318e-07 11.000000 8.92521e-07 11.000000 8.92527e-07 11.000000 8.12935e-07 11.000000 3.82904e-10 +12.000000 6.06123e-07 12.000000 7.61757e-07 12.000000 8.27477e-07 12.000000 8.27488e-07 12.000000 7.61404e-07 12.000000 3.53607e-10 +13.000000 5.67712e-07 13.000000 7.16721e-07 13.000000 7.71727e-07 13.000000 7.71734e-07 13.000000 7.16392e-07 13.000000 3.28623e-10 +14.000000 5.34288e-07 14.000000 6.77044e-07 14.000000 7.23399e-07 14.000000 7.23398e-07 14.000000 6.76737e-07 14.000000 3.07057e-10 +15.000000 5.04923e-07 15.000000 6.4182e-07 15.000000 6.81085e-07 15.000000 6.81086e-07 15.000000 6.41531e-07 15.000000 2.88242e-10 +16.000000 4.78907e-07 16.000000 6.10335e-07 16.000000 6.43742e-07 16.000000 6.43736e-07 16.000000 6.10063e-07 16.000000 2.7168e-10 +17.000000 4.55689e-07 17.000000 5.82019e-07 17.000000 6.10549e-07 17.000000 6.10524e-07 17.000000 5.81762e-07 17.000000 2.56983e-10 +18.000000 4.34831e-07 18.000000 5.56414e-07 18.000000 5.80836e-07 18.000000 5.80802e-07 18.000000 5.5617e-07 18.000000 2.43849e-10 +19.000000 4.15986e-07 19.000000 5.33143e-07 19.000000 5.54084e-07 19.000000 5.54051e-07 19.000000 5.32911e-07 19.000000 2.3204e-10 +20.000000 3.9887e-07 20.000000 5.119e-07 20.000000 5.29884e-07 20.000000 5.2985e-07 20.000000 5.11678e-07 20.000000 2.21362e-10 +21.000000 3.83251e-07 21.000000 4.92426e-07 21.000000 5.07892e-07 21.000000 5.07856e-07 21.000000 4.92214e-07 21.000000 2.11657e-10 +22.000000 3.68937e-07 22.000000 4.74507e-07 22.000000 4.87821e-07 22.000000 4.87786e-07 22.000000 4.74304e-07 22.000000 2.02798e-10 +23.000000 3.55769e-07 23.000000 4.57962e-07 23.000000 4.69438e-07 23.000000 4.69402e-07 23.000000 4.57768e-07 23.000000 1.94676e-10 +24.000000 3.43612e-07 24.000000 4.42637e-07 24.000000 4.52557e-07 24.000000 4.52507e-07 24.000000 4.4245e-07 24.000000 1.87204e-10 +25.000000 3.32351e-07 25.000000 4.28401e-07 25.000000 4.37003e-07 25.000000 4.36931e-07 25.000000 4.2822e-07 25.000000 1.80303e-10 +27.000000 3.12142e-07 27.000000 4.02753e-07 27.000000 4.09275e-07 27.000000 4.09184e-07 27.000000 4.02585e-07 27.000000 1.67974e-10 +29.000000 2.94515e-07 29.000000 3.80282e-07 29.000000 3.85324e-07 29.000000 3.85234e-07 29.000000 3.80124e-07 29.000000 1.57277e-10 +31.000000 2.78995e-07 31.000000 3.60424e-07 31.000000 3.64447e-07 31.000000 3.64357e-07 31.000000 3.60276e-07 31.000000 1.47905e-10 +33.000000 2.65221e-07 33.000000 3.42744e-07 33.000000 3.45956e-07 33.000000 3.45871e-07 33.000000 3.42604e-07 33.000000 1.39623e-10 +35.000000 2.52907e-07 35.000000 3.26897e-07 35.000000 3.29441e-07 35.000000 3.29365e-07 35.000000 3.26765e-07 35.000000 1.3225e-10 +38.000000 2.36696e-07 38.000000 3.0598e-07 38.000000 3.07768e-07 38.000000 3.07666e-07 38.000000 3.05857e-07 38.000000 1.22589e-10 +41.000000 2.22694e-07 41.000000 2.87863e-07 41.000000 2.89058e-07 41.000000 2.88953e-07 41.000000 2.87749e-07 41.000000 1.14286e-10 +44.000000 2.10469e-07 44.000000 2.72015e-07 44.000000 2.72738e-07 44.000000 2.72642e-07 44.000000 2.71908e-07 44.000000 1.07072e-10 +47.000000 1.99698e-07 47.000000 2.58029e-07 47.000000 2.58383e-07 47.000000 2.58291e-07 47.000000 2.57928e-07 47.000000 1.00743e-10 +50.000000 1.90131e-07 50.000000 2.45591e-07 50.000000 2.4565e-07 50.000000 2.45564e-07 50.000000 2.45496e-07 50.000000 9.51438e-11 +55.000000 1.76351e-07 55.000000 2.27655e-07 55.000000 2.27345e-07 55.000000 2.27267e-07 55.000000 2.27568e-07 55.000000 8.71184e-11 +60.000000 1.64716e-07 60.000000 2.12498e-07 60.000000 2.11933e-07 60.000000 2.11855e-07 60.000000 2.12417e-07 60.000000 8.03807e-11 +65.000000 1.54753e-07 65.000000 1.99513e-07 65.000000 1.9878e-07 65.000000 1.98688e-07 65.000000 1.99439e-07 65.000000 7.4641e-11 +70.000000 1.46118e-07 70.000000 1.88261e-07 70.000000 1.87389e-07 70.000000 1.87305e-07 70.000000 1.88191e-07 70.000000 6.96907e-11 +75.000000 1.38558e-07 75.000000 1.78412e-07 75.000000 1.77441e-07 75.000000 1.77362e-07 75.000000 1.78347e-07 75.000000 6.5376e-11 +80.000000 1.3188e-07 80.000000 1.69717e-07 80.000000 1.68675e-07 80.000000 1.686e-07 80.000000 1.69656e-07 80.000000 6.15805e-11 +85.000000 1.25934e-07 85.000000 1.61983e-07 85.000000 1.60889e-07 85.000000 1.60818e-07 85.000000 1.61924e-07 85.000000 5.82149e-11 +90.000000 1.20605e-07 90.000000 1.55056e-07 90.000000 1.53927e-07 90.000000 1.53859e-07 90.000000 1.55001e-07 90.000000 5.52095e-11 +95.000000 1.15798e-07 95.000000 1.48816e-07 95.000000 1.47678e-07 95.000000 1.47598e-07 95.000000 1.48763e-07 95.000000 5.25086e-11 +100.000000 1.11439e-07 100.000000 1.43163e-07 100.000000 1.42011e-07 100.000000 1.41934e-07 100.000000 1.43113e-07 100.000000 5.00679e-11 +105.000000 1.07467e-07 105.000000 1.38019e-07 105.000000 1.36859e-07 105.000000 1.36785e-07 105.000000 1.37972e-07 105.000000 4.78511e-11 +110.000000 1.03831e-07 110.000000 1.33317e-07 110.000000 1.32154e-07 110.000000 1.32083e-07 110.000000 1.33271e-07 110.000000 4.58283e-11 +115.000000 1.00489e-07 115.000000 1.29002e-07 115.000000 1.27841e-07 115.000000 1.27773e-07 115.000000 1.28958e-07 115.000000 4.3975e-11 +120.000000 9.74057e-08 120.000000 1.25027e-07 120.000000 1.23873e-07 120.000000 1.23807e-07 120.000000 1.24985e-07 120.000000 4.22704e-11 +125.000000 9.45521e-08 125.000000 1.21354e-07 125.000000 1.20208e-07 125.000000 1.20144e-07 125.000000 1.21314e-07 125.000000 4.06972e-11 +130.000000 9.19025e-08 130.000000 1.17949e-07 130.000000 1.16815e-07 130.000000 1.16753e-07 130.000000 1.1791e-07 130.000000 3.92405e-11 +135.000000 8.94353e-08 135.000000 1.14784e-07 135.000000 1.13661e-07 135.000000 1.13602e-07 135.000000 1.14746e-07 135.000000 3.78879e-11 +140.000000 8.71318e-08 140.000000 1.11834e-07 140.000000 1.10731e-07 140.000000 1.10668e-07 140.000000 1.11797e-07 140.000000 3.66283e-11 +145.000000 8.49757e-08 145.000000 1.09077e-07 145.000000 1.07998e-07 145.000000 1.07929e-07 145.000000 1.09042e-07 145.000000 3.54524e-11 +150.000000 8.2953e-08 150.000000 1.06496e-07 150.000000 1.05432e-07 150.000000 1.05366e-07 150.000000 1.06462e-07 150.000000 3.4352e-11 +155.000000 8.0105e-08 155.000000 1.04074e-07 155.000000 1.03026e-07 155.000000 1.02962e-07 155.000000 1.04041e-07 155.000000 3.33201e-11 +160.000000 7.84358e-08 160.000000 1.01796e-07 160.000000 1.00767e-07 160.000000 1.00704e-07 160.000000 1.01764e-07 160.000000 3.23503e-11 +165.000000 7.68616e-08 165.000000 9.96503e-08 165.000000 9.8639e-08 165.000000 9.85777e-08 165.000000 9.96189e-08 165.000000 3.14371e-11 +170.000000 7.53746e-08 170.000000 9.76254e-08 170.000000 9.66325e-08 170.000000 9.65726e-08 170.000000 9.75948e-08 170.000000 3.05757e-11 +175.000000 7.39676e-08 175.000000 9.57113e-08 175.000000 9.47372e-08 175.000000 9.46786e-08 175.000000 9.56815e-08 175.000000 2.97618e-11 +180.000000 7.26341e-08 180.000000 9.38991e-08 180.000000 9.29439e-08 180.000000 9.28867e-08 180.000000 9.38702e-08 180.000000 2.89914e-11 +185.000000 7.13686e-08 185.000000 9.2181e-08 185.000000 9.12451e-08 185.000000 9.11889e-08 185.000000 9.21528e-08 185.000000 2.82612e-11 +190.000000 7.01659e-08 190.000000 9.05498e-08 190.000000 8.96332e-08 190.000000 8.9578e-08 190.000000 9.05223e-08 190.000000 2.7568e-11 +195.000000 6.90213e-08 195.000000 8.89991e-08 195.000000 8.8101e-08 195.000000 8.80475e-08 195.000000 8.89722e-08 195.000000 2.69091e-11 +200.000000 6.79308e-08 200.000000 8.7523e-08 200.000000 8.66437e-08 200.000000 8.65916e-08 200.000000 8.74967e-08 200.000000 2.6282e-11 +210.000000 6.58969e-08 210.000000 8.47742e-08 210.000000 8.39411e-08 210.000000 8.3883e-08 210.000000 8.47491e-08 210.000000 2.51141e-11 +220.000000 6.40381e-08 220.000000 8.2267e-08 220.000000 8.14732e-08 220.000000 8.14153e-08 220.000000 8.22429e-08 220.000000 2.40487e-11 +230.000000 6.23324e-08 230.000000 7.99709e-08 230.000000 7.92138e-08 230.000000 7.91581e-08 230.000000 7.99478e-08 230.000000 2.30727e-11 +240.000000 6.07616e-08 240.000000 7.78604e-08 240.000000 7.714e-08 240.000000 7.70859e-08 240.000000 7.78383e-08 240.000000 2.21752e-11 +250.000000 5.93102e-08 250.000000 7.59142e-08 250.000000 7.52296e-08 250.000000 7.51771e-08 250.000000 7.58929e-08 250.000000 2.1347e-11 +260.000000 5.7965e-08 260.000000 7.41139e-08 260.000000 7.34644e-08 260.000000 7.34133e-08 260.000000 7.40933e-08 260.000000 2.05803e-11 +270.000000 5.67148e-08 270.000000 7.24438e-08 270.000000 7.18289e-08 270.000000 7.17789e-08 270.000000 7.24239e-08 270.000000 1.98684e-11 +280.000000 5.55498e-08 280.000000 7.08904e-08 280.000000 7.03092e-08 280.000000 7.02605e-08 280.000000 7.08712e-08 280.000000 1.92056e-11 +290.000000 5.44617e-08 290.000000 6.94422e-08 290.000000 6.88931e-08 290.000000 6.88463e-08 290.000000 6.94236e-08 290.000000 1.85869e-11 +300.000000 5.34431e-08 300.000000 6.80889e-08 300.000000 6.75753e-08 300.000000 6.75262e-08 300.000000 6.80709e-08 300.000000 1.8008e-11 +310.000000 5.24875e-08 310.000000 6.68216e-08 310.000000 6.63436e-08 310.000000 6.62913e-08 310.000000 6.68042e-08 310.000000 1.74652e-11 +320.000000 5.15894e-08 320.000000 6.56326e-08 320.000000 6.5185e-08 320.000000 6.51338e-08 320.000000 6.56157e-08 320.000000 1.69551e-11 +330.000000 5.07438e-08 330.000000 6.4515e-08 330.000000 6.40967e-08 330.000000 6.40469e-08 330.000000 6.44985e-08 330.000000 1.64749e-11 +340.000000 4.99462e-08 340.000000 6.34627e-08 340.000000 6.30735e-08 340.000000 6.30244e-08 340.000000 6.34466e-08 340.000000 1.6022e-11 +350.000000 4.91928e-08 350.000000 6.24702e-08 350.000000 6.21093e-08 350.000000 6.20611e-08 350.000000 6.24546e-08 350.000000 1.5594e-11 +360.000000 4.84799e-08 360.000000 6.15327e-08 360.000000 6.11994e-08 360.000000 6.1152e-08 360.000000 6.15175e-08 360.000000 1.5189e-11 +370.000000 4.78046e-08 370.000000 6.0646e-08 370.000000 6.03395e-08 370.000000 6.02929e-08 370.000000 6.06312e-08 370.000000 1.48052e-11 +380.000000 4.71639e-08 380.000000 5.98061e-08 380.000000 5.95258e-08 380.000000 5.94799e-08 380.000000 5.97917e-08 380.000000 1.44409e-11 +390.000000 4.65554e-08 390.000000 5.90096e-08 390.000000 5.87548e-08 390.000000 5.87096e-08 390.000000 5.89955e-08 390.000000 1.40946e-11 +400.000000 4.59766e-08 400.000000 5.82533e-08 400.000000 5.80232e-08 400.000000 5.79787e-08 400.000000 5.82395e-08 400.000000 1.3765e-11 +410.000000 4.54257e-08 410.000000 5.75343e-08 410.000000 5.73285e-08 410.000000 5.72846e-08 410.000000 5.75208e-08 410.000000 1.3451e-11 +420.000000 4.49006e-08 420.000000 5.68501e-08 420.000000 5.66679e-08 420.000000 5.66245e-08 420.000000 5.68369e-08 420.000000 1.31514e-11 +430.000000 4.43996e-08 430.000000 5.61983e-08 430.000000 5.6039e-08 430.000000 5.59962e-08 430.000000 5.61854e-08 430.000000 1.28652e-11 +440.000000 4.39213e-08 440.000000 5.55767e-08 440.000000 5.54393e-08 440.000000 5.53975e-08 440.000000 5.55641e-08 440.000000 1.25916e-11 +450.000000 4.34641e-08 450.000000 5.49835e-08 450.000000 5.48679e-08 450.000000 5.48265e-08 450.000000 5.49712e-08 450.000000 1.23298e-11 +460.000000 4.30268e-08 460.000000 5.44168e-08 460.000000 5.4324e-08 460.000000 5.42815e-08 460.000000 5.44048e-08 460.000000 1.2079e-11 +470.000000 4.26081e-08 470.000000 5.3875e-08 470.000000 5.38052e-08 470.000000 5.37607e-08 470.000000 5.38632e-08 470.000000 1.18384e-11 +480.000000 4.22069e-08 480.000000 5.33566e-08 480.000000 5.33084e-08 480.000000 5.32627e-08 480.000000 5.3345e-08 480.000000 1.16076e-11 +490.000000 4.18222e-08 490.000000 5.28602e-08 490.000000 5.28315e-08 490.000000 5.27862e-08 490.000000 5.28488e-08 490.000000 1.13859e-11 +500.000000 4.14531e-08 500.000000 5.23844e-08 500.000000 5.23742e-08 500.000000 5.23298e-08 500.000000 5.23732e-08 500.000000 1.11727e-11 +520.000000 4.07583e-08 520.000000 5.14904e-08 520.000000 5.15162e-08 520.000000 5.14728e-08 520.000000 5.14797e-08 520.000000 1.07701e-11 +540.000000 4.01161e-08 540.000000 5.06662e-08 540.000000 5.07262e-08 540.000000 5.06835e-08 540.000000 5.06558e-08 540.000000 1.03964e-11 +560.000000 3.95212e-08 560.000000 4.99044e-08 560.000000 4.99966e-08 560.000000 4.99547e-08 560.000000 4.98943e-08 560.000000 1.00485e-11 +580.000000 3.89689e-08 580.000000 4.91988e-08 580.000000 4.93214e-08 580.000000 4.92801e-08 580.000000 4.91891e-08 580.000000 9.72379e-12 +600.000000 3.84553e-08 600.000000 4.8544e-08 600.000000 4.8695e-08 600.000000 4.86544e-08 600.000000 4.85345e-08 600.000000 9.42001e-12 +620.000000 3.79767e-08 620.000000 4.79351e-08 620.000000 4.81129e-08 620.000000 4.80729e-08 620.000000 4.79259e-08 620.000000 9.13519e-12 +640.000000 3.753e-08 640.000000 4.73679e-08 640.000000 4.7571e-08 640.000000 4.75314e-08 640.000000 4.73591e-08 640.000000 8.86757e-12 +660.000000 3.71125e-08 660.000000 4.68389e-08 660.000000 4.70652e-08 660.000000 4.70264e-08 660.000000 4.68303e-08 660.000000 8.61565e-12 +680.000000 3.67218e-08 680.000000 4.63446e-08 680.000000 4.65925e-08 680.000000 4.65545e-08 680.000000 4.63362e-08 680.000000 8.37806e-12 +700.000000 3.63556e-08 700.000000 4.58823e-08 700.000000 4.61513e-08 700.000000 4.6113e-08 700.000000 4.58741e-08 700.000000 8.1536e-12 +720.000000 3.60121e-08 720.000000 4.54492e-08 720.000000 4.57392e-08 720.000000 4.56993e-08 720.000000 4.54413e-08 720.000000 7.9412e-12 +740.000000 3.56895e-08 740.000000 4.50431e-08 740.000000 4.53524e-08 740.000000 4.53111e-08 740.000000 4.50354e-08 740.000000 7.7399e-12 +760.000000 3.53862e-08 760.000000 4.4662e-08 760.000000 4.49876e-08 760.000000 4.49464e-08 760.000000 4.46544e-08 760.000000 7.54886e-12 +780.000000 3.51008e-08 780.000000 4.43038e-08 780.000000 4.46439e-08 780.000000 4.46034e-08 780.000000 4.42965e-08 780.000000 7.36729e-12 +800.000000 3.48321e-08 800.000000 4.39671e-08 800.000000 4.43204e-08 800.000000 4.42805e-08 800.000000 4.39599e-08 800.000000 7.1945e-12 +820.000000 3.45789e-08 820.000000 4.36501e-08 820.000000 4.40156e-08 820.000000 4.39761e-08 820.000000 4.36431e-08 820.000000 7.02987e-12 +840.000000 3.43402e-08 840.000000 4.33517e-08 840.000000 4.37282e-08 840.000000 4.36889e-08 840.000000 4.33448e-08 840.000000 6.87282e-12 +860.000000 3.41149e-08 860.000000 4.30704e-08 860.000000 4.34567e-08 860.000000 4.34177e-08 860.000000 4.30637e-08 860.000000 6.72284e-12 +880.000000 3.39024e-08 880.000000 4.28052e-08 880.000000 4.32e-08 880.000000 4.31613e-08 880.000000 4.27986e-08 880.000000 6.57946e-12 +900.000000 3.37016e-08 900.000000 4.25549e-08 900.000000 4.29572e-08 900.000000 4.29189e-08 900.000000 4.25485e-08 900.000000 6.44224e-12 +920.000000 3.3512e-08 920.000000 4.23188e-08 920.000000 4.27273e-08 920.000000 4.26893e-08 920.000000 4.23124e-08 920.000000 6.31079e-12 +940.000000 3.33328e-08 940.000000 4.20958e-08 940.000000 4.25096e-08 940.000000 4.24718e-08 940.000000 4.20896e-08 940.000000 6.18476e-12 +960.000000 3.31634e-08 960.000000 4.18851e-08 960.000000 4.23032e-08 960.000000 4.22657e-08 960.000000 4.18791e-08 960.000000 6.06381e-12 +980.000000 3.30034e-08 980.000000 4.16861e-08 980.000000 4.21074e-08 980.000000 4.20701e-08 980.000000 4.16802e-08 980.000000 5.94763e-12 +1000.000000 3.2852e-08 1000.000000 4.14981e-08 1000.000000 4.19216e-08 1000.000000 4.18845e-08 1000.000000 4.14922e-08 1000.000000 5.83596e-12 +1020.000000 3.27089e-08 1020.000000 4.13203e-08 1020.000000 4.1745e-08 1020.000000 4.17082e-08 1020.000000 4.13146e-08 1020.000000 5.72852e-12 +1040.000000 3.25737e-08 1040.000000 4.11523e-08 1040.000000 4.15773e-08 1040.000000 4.15407e-08 1040.000000 4.11467e-08 1040.000000 5.62508e-12 +1060.000000 3.24458e-08 1060.000000 4.09935e-08 1060.000000 4.14178e-08 1060.000000 4.13815e-08 1060.000000 4.09879e-08 1060.000000 5.52541e-12 +1080.000000 3.23249e-08 1080.000000 4.08433e-08 1080.000000 4.12662e-08 1080.000000 4.123e-08 1080.000000 4.08379e-08 1080.000000 5.42932e-12 +1100.000000 3.22107e-08 1100.000000 4.07014e-08 1100.000000 4.11218e-08 1100.000000 4.10859e-08 1100.000000 4.06961e-08 1100.000000 5.33662e-12 +1120.000000 3.21028e-08 1120.000000 4.05673e-08 1120.000000 4.09845e-08 1120.000000 4.09487e-08 1120.000000 4.05621e-08 1120.000000 5.24711e-12 +1140.000000 3.20009e-08 1140.000000 4.04406e-08 1140.000000 4.08537e-08 1140.000000 4.0818e-08 1140.000000 4.04355e-08 1140.000000 5.16065e-12 +1160.000000 3.19048e-08 1160.000000 4.03209e-08 1160.000000 4.07291e-08 1160.000000 4.06935e-08 1160.000000 4.03159e-08 1160.000000 5.07707e-12 +1180.000000 3.1814e-08 1180.000000 4.02079e-08 1180.000000 4.06103e-08 1180.000000 4.05749e-08 1180.000000 4.02029e-08 1180.000000 4.99624e-12 +1200.000000 3.17285e-08 1200.000000 4.01013e-08 1200.000000 4.0497e-08 1200.000000 4.04618e-08 1200.000000 4.00963e-08 1200.000000 4.91801e-12 +1220.000000 3.16479e-08 1220.000000 4.00006e-08 1220.000000 4.03889e-08 1220.000000 4.0354e-08 1220.000000 3.99958e-08 1220.000000 4.84226e-12 +1240.000000 3.1572e-08 1240.000000 3.99057e-08 1240.000000 4.02857e-08 1240.000000 4.02512e-08 1240.000000 3.9901e-08 1240.000000 4.76889e-12 +1260.000000 3.15007e-08 1260.000000 3.98163e-08 1260.000000 4.01874e-08 1260.000000 4.0153e-08 1260.000000 3.98116e-08 1260.000000 4.69776e-12 +1280.000000 3.14337e-08 1280.000000 3.97321e-08 1280.000000 4.00936e-08 1280.000000 4.00594e-08 1280.000000 3.97275e-08 1280.000000 4.62879e-12 +1300.000000 3.13708e-08 1300.000000 3.96529e-08 1300.000000 4.00043e-08 1300.000000 3.99701e-08 1300.000000 3.96484e-08 1300.000000 4.56187e-12 +1320.000000 3.13119e-08 1320.000000 3.95785e-08 1320.000000 3.99192e-08 1320.000000 3.98848e-08 1320.000000 3.9574e-08 1320.000000 4.49692e-12 +1340.000000 3.12567e-08 1340.000000 3.95086e-08 1340.000000 3.98382e-08 1340.000000 3.98034e-08 1340.000000 3.95042e-08 1340.000000 4.43384e-12 +1360.000000 3.12052e-08 1360.000000 3.94431e-08 1360.000000 3.97609e-08 1360.000000 3.97257e-08 1360.000000 3.94388e-08 1360.000000 4.37256e-12 +1380.000000 3.11572e-08 1380.000000 3.93818e-08 1380.000000 3.96872e-08 1380.000000 3.96515e-08 1380.000000 3.93775e-08 1380.000000 4.313e-12 +1400.000000 3.11126e-08 1400.000000 3.93245e-08 1400.000000 3.96168e-08 1400.000000 3.95806e-08 1400.000000 3.93202e-08 1400.000000 4.25509e-12 +1420.000000 3.10712e-08 1420.000000 3.9271e-08 1420.000000 3.95495e-08 1420.000000 3.95129e-08 1420.000000 3.92668e-08 1420.000000 4.19875e-12 +1440.000000 3.10329e-08 1440.000000 3.92211e-08 1440.000000 3.94852e-08 1440.000000 3.94483e-08 1440.000000 3.9217e-08 1440.000000 4.14393e-12 +1460.000000 3.09975e-08 1460.000000 3.91748e-08 1460.000000 3.94236e-08 1460.000000 3.93866e-08 1460.000000 3.91707e-08 1460.000000 4.09057e-12 +1480.000000 3.0965e-08 1480.000000 3.91319e-08 1480.000000 3.93647e-08 1480.000000 3.93277e-08 1480.000000 3.91278e-08 1480.000000 4.0386e-12 +1500.000000 3.09353e-08 1500.000000 3.90922e-08 1500.000000 3.93084e-08 1500.000000 3.92714e-08 1500.000000 3.90882e-08 1500.000000 3.98798e-12 +1520.000000 3.09083e-08 1520.000000 3.90557e-08 1520.000000 3.92545e-08 1520.000000 3.92177e-08 1520.000000 3.90517e-08 1520.000000 3.93864e-12 +1540.000000 3.08838e-08 1540.000000 3.90221e-08 1540.000000 3.92031e-08 1540.000000 3.91664e-08 1540.000000 3.90182e-08 1540.000000 3.89055e-12 +1560.000000 3.08618e-08 1560.000000 3.89914e-08 1560.000000 3.91539e-08 1560.000000 3.91174e-08 1560.000000 3.89876e-08 1560.000000 3.84365e-12 +1580.000000 3.08422e-08 1580.000000 3.89636e-08 1580.000000 3.9107e-08 1580.000000 3.90706e-08 1580.000000 3.89598e-08 1580.000000 3.7979e-12 +1600.000000 3.08248e-08 1600.000000 3.89384e-08 1600.000000 3.90622e-08 1600.000000 3.9026e-08 1600.000000 3.89346e-08 1600.000000 3.75325e-12 +1620.000000 3.08098e-08 1620.000000 3.89157e-08 1620.000000 3.90195e-08 1620.000000 3.89835e-08 1620.000000 3.8912e-08 1620.000000 3.70968e-12 +1640.000000 3.07968e-08 1640.000000 3.88956e-08 1640.000000 3.89788e-08 1640.000000 3.89429e-08 1640.000000 3.88919e-08 1640.000000 3.66713e-12 +1660.000000 3.0786e-08 1660.000000 3.88779e-08 1660.000000 3.894e-08 1660.000000 3.89042e-08 1660.000000 3.88743e-08 1660.000000 3.62558e-12 +1680.000000 3.07772e-08 1680.000000 3.88625e-08 1680.000000 3.8903e-08 1680.000000 3.88673e-08 1680.000000 3.88589e-08 1680.000000 3.58498e-12 +1700.000000 3.07703e-08 1700.000000 3.88493e-08 1700.000000 3.88678e-08 1700.000000 3.88322e-08 1700.000000 3.88457e-08 1700.000000 3.54532e-12 +1750.000000 3.07612e-08 1750.000000 3.88255e-08 1750.000000 3.87869e-08 1750.000000 3.87514e-08 1750.000000 3.88221e-08 1750.000000 3.44999e-12 +1800.000000 3.07631e-08 1800.000000 3.88142e-08 1800.000000 3.87155e-08 1800.000000 3.86801e-08 1800.000000 3.88108e-08 1800.000000 3.35979e-12 +1850.000000 3.0775e-08 1850.000000 3.88142e-08 1850.000000 3.86526e-08 1850.000000 3.86174e-08 1850.000000 3.88109e-08 1850.000000 3.27432e-12 +1900.000000 3.07964e-08 1900.000000 3.88247e-08 1900.000000 3.85975e-08 1900.000000 3.85624e-08 1900.000000 3.88215e-08 1900.000000 3.1932e-12 +1950.000000 3.08265e-08 1950.000000 3.88448e-08 1950.000000 3.85494e-08 1950.000000 3.85145e-08 1950.000000 3.88417e-08 1950.000000 3.11612e-12 +2000.000000 3.08647e-08 2000.000000 3.8874e-08 2000.000000 3.85079e-08 2000.000000 3.84731e-08 2000.000000 3.88709e-08 2000.000000 3.04278e-12 +2100.000000 3.09635e-08 2100.000000 3.89565e-08 2100.000000 3.84419e-08 2100.000000 3.84074e-08 2100.000000 3.89536e-08 2100.000000 2.90625e-12 +2200.000000 3.10892e-08 2200.000000 3.90677e-08 2200.000000 3.83958e-08 2200.000000 3.83615e-08 2200.000000 3.90649e-08 2200.000000 2.78176e-12 +2300.000000 3.12385e-08 2300.000000 3.92039e-08 2300.000000 3.83664e-08 2300.000000 3.83323e-08 2300.000000 3.92013e-08 2300.000000 2.66778e-12 +2400.000000 3.1409e-08 2400.000000 3.9362e-08 2400.000000 3.8351e-08 2400.000000 3.83171e-08 2400.000000 3.93594e-08 2400.000000 2.56301e-12 +2500.000000 3.15984e-08 2500.000000 3.95392e-08 2500.000000 3.83477e-08 2500.000000 3.83139e-08 2500.000000 3.95367e-08 2500.000000 2.46637e-12 +2600.000000 3.18049e-08 2600.000000 3.97334e-08 2600.000000 3.83545e-08 2600.000000 3.83209e-08 2600.000000 3.9731e-08 2600.000000 2.37694e-12 +2700.000000 3.20268e-08 2700.000000 3.99426e-08 2700.000000 3.837e-08 2700.000000 3.83365e-08 2700.000000 3.99404e-08 2700.000000 2.29394e-12 +2800.000000 3.22629e-08 2800.000000 4.01653e-08 2800.000000 3.83929e-08 2800.000000 3.83596e-08 2800.000000 4.01631e-08 2800.000000 2.21669e-12 +2900.000000 3.25118e-08 2900.000000 4.04e-08 2900.000000 3.84222e-08 2900.000000 3.8389e-08 2900.000000 4.03978e-08 2900.000000 2.14461e-12 +3000.000000 3.27726e-08 3000.000000 4.06454e-08 3000.000000 3.8457e-08 3000.000000 3.84239e-08 3000.000000 4.06434e-08 3000.000000 2.07719e-12 diff --git a/Inputs/EnergyLoss/proton_Mylar.txt b/Inputs/EnergyLoss/proton_Mylar.txt new file mode 100644 index 0000000000000000000000000000000000000000..b30bb39a5eea88d952ce7af5ba68b74b0519a9e2 --- /dev/null +++ b/Inputs/EnergyLoss/proton_Mylar.txt @@ -0,0 +1,218 @@ +Energy (MeV/u)1 0 - [He-base] F.Hubert et al, AD&ND Tables 46(1990)1 Energy (MeV/u)2 1 - [H -base] J.F.Ziegler et al, Pergamon Press, NY (low energy) Energy (MeV/u)3 2 - ATIMA 1.2 LS-theory (recommended for high energy) Energy (MeV/u)4 3 - ATIMA 1.2 without LS-correction Energy (MeV/u)5 4 - electrical component of [1] - J.F.Ziegler et al Energy (MeV/u)6 5 - nuclear component of [1] - J.F.Ziegler et al +0.001000 0.0277781 0.001000 0.0278096 0.001000 0.0360372 0.001000 0.0360372 0.001000 0.0242856 0.001000 0.00352399 +0.002000 0.0337663 0.002000 0.0338494 0.002000 0.042053 0.002000 0.042053 0.002000 0.0312794 0.002000 0.00256992 +0.005000 0.0448672 0.005000 0.0452735 0.005000 0.0527697 0.005000 0.0527697 0.005000 0.0437497 0.005000 0.00152385 +0.008000 0.0523494 0.008000 0.0531139 0.008000 0.059818 0.008000 0.059818 0.008000 0.0519894 0.008000 0.00112449 +0.010000 0.0563968 0.010000 0.0574005 0.010000 0.0635965 0.010000 0.0635965 0.010000 0.0564341 0.010000 0.000966385 +0.015000 0.0680901 0.015000 0.0658123 0.015000 0.0712533 0.015000 0.0712533 0.015000 0.0650897 0.015000 0.0007226 +0.020000 0.0776572 0.020000 0.0726043 0.020000 0.0773722 0.020000 0.0773722 0.020000 0.0720183 0.020000 0.000586014 +0.025000 0.0855648 0.025000 0.0782735 0.025000 0.0825462 0.025000 0.0825462 0.025000 0.0777784 0.025000 0.000495026 +0.030000 0.0920595 0.030000 0.0830855 0.030000 0.0862244 0.030000 0.0862244 0.030000 0.0826544 0.030000 0.000431177 +0.035000 0.0973029 0.035000 0.0871986 0.035000 0.0892953 0.035000 0.0892953 0.035000 0.0868155 0.035000 0.000383099 +0.040000 0.101422 0.040000 0.0907195 0.040000 0.091869 0.040000 0.091869 0.040000 0.090374 0.040000 0.000345459 +0.045000 0.104529 0.045000 0.0937258 0.045000 0.0940242 0.045000 0.0940242 0.045000 0.0934107 0.045000 0.000315109 +0.050000 0.106735 0.050000 0.0962772 0.050000 0.09582 0.050000 0.09582 0.050000 0.0959871 0.050000 0.000290066 +0.055000 0.108146 0.055000 0.0984221 0.055000 0.0973029 0.055000 0.0973029 0.055000 0.0981531 0.055000 0.000269016 +0.060000 0.108867 0.060000 0.100202 0.060000 0.0985109 0.060000 0.0985109 0.060000 0.0999505 0.060000 0.00025105 +0.070000 0.108646 0.070000 0.102802 0.070000 0.100224 0.070000 0.100224 0.070000 0.10258 0.070000 0.000221945 +0.080000 0.106812 0.080000 0.104323 0.080000 0.101162 0.080000 0.101162 0.080000 0.104124 0.080000 0.000199325 +0.090000 0.103975 0.090000 0.104968 0.090000 0.101482 0.090000 0.101482 0.090000 0.104787 0.090000 0.000181195 +0.100000 0.100596 0.100000 0.10491 0.100000 0.101308 0.100000 0.101308 0.100000 0.104744 0.100000 0.00016631 +0.120000 0.0934043 0.120000 0.103258 0.120000 0.0998644 0.120000 0.0998644 0.120000 0.103115 0.120000 0.000143255 +0.140000 0.086659 0.140000 0.100296 0.140000 0.0974413 0.140000 0.0974413 0.140000 0.10017 0.140000 0.00012617 +0.160000 0.0808031 0.160000 0.0966571 0.160000 0.0944548 0.160000 0.0944548 0.160000 0.0965442 0.160000 0.000112961 +0.180000 0.0758553 0.180000 0.092748 0.180000 0.0911858 0.180000 0.0911858 0.180000 0.0926456 0.180000 0.000102418 +0.200000 0.0716922 0.200000 0.0888178 0.200000 0.0878205 0.200000 0.0878205 0.200000 0.088724 0.200000 9.37934e-05 +0.250000 0.063786 0.250000 0.0796805 0.250000 0.0796671 0.250000 0.0796671 0.250000 0.0796027 0.250000 7.77745e-05 +0.300000 0.0581486 0.300000 0.0719841 0.300000 0.0724419 0.300000 0.0724419 0.300000 0.0719174 0.300000 6.66776e-05 +0.350000 0.0538198 0.350000 0.0656751 0.350000 0.0662944 0.350000 0.0662944 0.350000 0.0656166 0.350000 5.85042e-05 +0.400000 0.0503094 0.400000 0.060499 0.400000 0.061123 0.400000 0.061123 0.400000 0.0604468 0.400000 5.22159e-05 +0.450000 0.0473551 0.450000 0.0562049 0.450000 0.0567663 0.450000 0.0567663 0.450000 0.0561577 0.450000 4.72175e-05 +0.500000 0.0448052 0.500000 0.0525915 0.500000 0.0530695 0.500000 0.0530695 0.500000 0.0525484 0.500000 4.31426e-05 +0.600000 0.0405721 0.600000 0.0468377 0.600000 0.047162 0.600000 0.047162 0.600000 0.0468008 0.600000 3.68849e-05 +0.700000 0.0371602 0.700000 0.0424318 0.700000 0.0426525 0.700000 0.0426525 0.700000 0.0423995 0.700000 3.22916e-05 +0.800000 0.0343302 0.800000 0.0389209 0.800000 0.0390837 0.800000 0.0390837 0.800000 0.0388921 0.800000 2.87675e-05 +0.900000 0.0319357 0.900000 0.0360373 0.900000 0.0361737 0.900000 0.0361737 0.900000 0.0360113 0.900000 2.59729e-05 +1.000000 0.0298786 1.000000 0.0336136 1.000000 0.0337433 1.000000 0.0337433 1.000000 0.0335899 1.000000 2.3699e-05 +1.250000 0.0258013 1.250000 0.0289237 1.250000 0.0290755 1.250000 0.0290755 1.250000 0.0289042 1.250000 1.95072e-05 +1.500000 0.0227637 1.500000 0.0255007 1.500000 0.0256887 1.500000 0.0256887 1.500000 0.0254841 1.500000 1.66291e-05 +1.750000 0.0204057 1.750000 0.0228707 1.750000 0.0230908 1.750000 0.0230908 1.750000 0.0228561 1.750000 1.45239e-05 +2.000000 0.0185181 2.000000 0.0207763 2.000000 0.021021 2.000000 0.021021 2.000000 0.0207634 2.000000 1.29133e-05 +2.250000 0.0169701 2.250000 0.0190635 2.250000 0.0193256 2.250000 0.0193256 2.250000 0.0190518 2.250000 1.16392e-05 +2.500000 0.0156087 2.500000 0.0176333 2.500000 0.0179071 2.500000 0.0179071 2.500000 0.0176227 2.500000 1.06046e-05 +3.000000 0.0136292 3.000000 0.015374 3.000000 0.015659 3.000000 0.015659 3.000000 0.015365 3.000000 9.02376e-06 +3.500000 0.0121269 3.500000 0.0136636 3.500000 0.0139498 3.500000 0.0139498 3.500000 0.0136558 3.500000 7.86984e-06 +4.000000 0.0109444 4.000000 0.0123196 4.000000 0.0126015 4.000000 0.0126015 4.000000 0.0123126 4.000000 6.98858e-06 +4.500000 0.00998762 4.500000 0.011233 4.500000 0.0115079 4.500000 0.0115079 4.500000 0.0112268 4.500000 6.29242e-06 +5.000000 0.00919619 5.000000 0.0103349 5.000000 0.0106013 5.000000 0.0106013 5.000000 0.0103292 5.000000 5.72786e-06 +5.500000 0.00852985 5.500000 0.00957899 5.500000 0.00983646 5.500000 0.00983646 5.500000 0.00957373 5.500000 5.26034e-06 +6.000000 0.00796053 6.000000 0.00893329 6.000000 0.00918168 6.000000 0.00918168 6.000000 0.00892843 6.000000 4.86649e-06 +6.500000 0.00746806 6.500000 0.00837481 6.500000 0.00861426 6.500000 0.00861426 6.500000 0.00837028 6.500000 4.52995e-06 +7.000000 0.00703756 7.000000 0.0078866 7.000000 0.00811743 7.000000 0.00811743 7.000000 0.00788236 7.000000 4.23888e-06 +7.500000 0.00665781 7.500000 0.00745589 7.500000 0.00767846 7.500000 0.00767846 7.500000 0.0074519 7.500000 3.98452e-06 +8.000000 0.00632014 8.000000 0.00707286 8.000000 0.00728758 8.000000 0.00728758 8.000000 0.0070691 8.000000 3.76025e-06 +8.500000 0.0060178 8.500000 0.00672984 8.500000 0.00693711 8.500000 0.00693711 8.500000 0.00672628 8.500000 3.56095e-06 +9.000000 0.00574541 9.000000 0.00642073 9.000000 0.00662096 9.000000 0.00662096 9.000000 0.00641734 9.000000 3.38262e-06 +9.500000 0.00549864 9.500000 0.00614062 9.500000 0.0063342 9.500000 0.0063342 9.500000 0.0061374 9.500000 3.22206e-06 +10.000000 0.00527398 10.000000 0.00606562 10.000000 0.00607282 10.000000 0.00607282 10.000000 0.00606255 10.000000 3.0767e-06 +11.000000 0.00487984 11.000000 0.00561676 11.000000 0.00560873 11.000000 0.00560878 11.000000 0.00561394 11.000000 2.82359e-06 +12.000000 0.00454511 12.000000 0.00523417 12.000000 0.00521474 12.000000 0.00521484 12.000000 0.00523156 12.000000 2.61055e-06 +13.000000 0.00425708 13.000000 0.00490401 13.000000 0.00487612 13.000000 0.00487618 13.000000 0.00490158 13.000000 2.42864e-06 +14.000000 0.00400644 14.000000 0.00461604 14.000000 0.00458191 14.000000 0.00458191 14.000000 0.00461377 14.000000 2.27141e-06 +15.000000 0.00378625 15.000000 0.00436258 15.000000 0.00432383 15.000000 0.00432384 15.000000 0.00436044 15.000000 2.13411e-06 +16.000000 0.00359116 16.000000 0.00413767 16.000000 0.00409575 16.000000 0.0040957 16.000000 0.00413566 16.000000 2.01311e-06 +17.000000 0.00341705 17.000000 0.0039367 17.000000 0.0038928 17.000000 0.0038926 17.000000 0.00393479 17.000000 1.90563e-06 +18.000000 0.00326065 18.000000 0.00375597 18.000000 0.00371094 18.000000 0.00371068 18.000000 0.00375416 18.000000 1.80951e-06 +19.000000 0.00311934 19.000000 0.00359254 19.000000 0.00354708 19.000000 0.00354682 19.000000 0.00359081 19.000000 1.72301e-06 +20.000000 0.00299099 20.000000 0.00344399 20.000000 0.00339877 20.000000 0.0033985 20.000000 0.00344234 20.000000 1.64473e-06 +21.000000 0.00287386 21.000000 0.00330836 21.000000 0.00326395 21.000000 0.00326366 21.000000 0.00330678 21.000000 1.57354e-06 +22.000000 0.00276653 22.000000 0.003184 22.000000 0.00314087 22.000000 0.00314059 22.000000 0.00318249 22.000000 1.50851e-06 +23.000000 0.00266779 23.000000 0.00306955 23.000000 0.00302814 23.000000 0.00302786 23.000000 0.0030681 23.000000 1.44885e-06 +24.000000 0.00257663 24.000000 0.00296385 24.000000 0.00292464 24.000000 0.00292425 24.000000 0.00296246 24.000000 1.39393e-06 +25.000000 0.00249218 25.000000 0.00286592 25.000000 0.00282931 25.000000 0.00282874 25.000000 0.00286458 25.000000 1.34318e-06 +27.000000 0.00234065 27.000000 0.00269013 27.000000 0.00265939 27.000000 0.00265868 27.000000 0.00268888 27.000000 1.25244e-06 +29.000000 0.00220846 29.000000 0.00253677 29.000000 0.00251271 29.000000 0.00251201 29.000000 0.00253559 29.000000 1.17363e-06 +31.000000 0.00209209 31.000000 0.00240174 31.000000 0.00238273 31.000000 0.00238202 31.000000 0.00240063 31.000000 1.10451e-06 +33.000000 0.0019888 33.000000 0.0022819 33.000000 0.00226527 33.000000 0.0022646 33.000000 0.00228085 33.000000 1.04339e-06 +35.000000 0.00189646 35.000000 0.00217479 35.000000 0.00216014 35.000000 0.00215955 35.000000 0.0021738 35.000000 9.88927e-07 +38.000000 0.00177491 38.000000 0.00203382 38.000000 0.00202192 38.000000 0.00202112 38.000000 0.00203291 38.000000 9.17497e-07 +41.000000 0.00166991 41.000000 0.00191213 41.000000 0.00190226 41.000000 0.00190144 41.000000 0.00191128 41.000000 8.56052e-07 +44.000000 0.00157824 44.000000 0.00180596 44.000000 0.00179763 44.000000 0.00179688 44.000000 0.00180516 44.000000 8.02611e-07 +47.000000 0.00149747 47.000000 0.00171249 47.000000 0.00170541 47.000000 0.0017047 47.000000 0.00171173 47.000000 7.55688e-07 +50.000000 0.00142573 50.000000 0.00162953 50.000000 0.00162346 50.000000 0.00162279 50.000000 0.00162882 50.000000 7.14146e-07 +55.000000 0.0013224 55.000000 0.00151019 55.000000 0.0015054 55.000000 0.00150478 55.000000 0.00150953 55.000000 6.54543e-07 +60.000000 0.00123515 60.000000 0.00140959 60.000000 0.00140574 60.000000 0.00140513 60.000000 0.00140898 60.000000 6.04449e-07 +65.000000 0.00116044 65.000000 0.00132359 65.000000 0.00132053 65.000000 0.00131981 65.000000 0.00132303 65.000000 5.61733e-07 +70.000000 0.00109569 70.000000 0.0012492 70.000000 0.00124656 70.000000 0.0012459 70.000000 0.00124867 70.000000 5.24859e-07 +75.000000 0.001039 75.000000 0.00118419 75.000000 0.00118185 75.000000 0.00118123 75.000000 0.0011837 75.000000 4.92692e-07 +80.000000 0.000988921 80.000000 0.00112687 80.000000 0.00112474 80.000000 0.00112415 80.000000 0.00112641 80.000000 4.64375e-07 +85.000000 0.000944337 85.000000 0.00107594 85.000000 0.00107393 85.000000 0.00107338 85.000000 0.0010755 85.000000 4.39248e-07 +90.000000 0.000904373 90.000000 0.00103038 90.000000 0.00102845 90.000000 0.00102791 90.000000 0.00102997 90.000000 4.16795e-07 +95.000000 0.000868329 95.000000 0.000989376 95.000000 0.000987595 95.000000 0.000986961 95.000000 0.000988979 95.000000 3.96605e-07 +100.000000 0.000835643 100.000000 0.000952265 100.000000 0.000950478 100.000000 0.000949872 100.000000 0.000951886 100.000000 3.7835e-07 +105.000000 0.000805856 105.000000 0.000918515 105.000000 0.000916699 105.000000 0.000916119 105.000000 0.000918153 105.000000 3.61759e-07 +110.000000 0.00077859 110.000000 0.000887685 110.000000 0.000885827 110.000000 0.000885269 110.000000 0.000887339 110.000000 3.46614e-07 +115.000000 0.00075353 115.000000 0.00085941 115.000000 0.000857496 115.000000 0.000856959 115.000000 0.000859077 115.000000 3.3273e-07 +120.000000 0.000730412 120.000000 0.00083338 120.000000 0.000831404 120.000000 0.000830886 120.000000 0.00083306 120.000000 3.19955e-07 +125.000000 0.000709014 125.000000 0.000809338 125.000000 0.000807295 125.000000 0.000806793 125.000000 0.00080903 125.000000 3.08159e-07 +130.000000 0.000689146 130.000000 0.000787061 130.000000 0.000784948 130.000000 0.000784462 130.000000 0.000786764 130.000000 2.97233e-07 +135.000000 0.000670645 135.000000 0.000766361 135.000000 0.000764166 135.000000 0.000763705 135.000000 0.000766074 135.000000 2.87083e-07 +140.000000 0.000653371 140.000000 0.000747076 140.000000 0.000744855 140.000000 0.00074436 140.000000 0.000746798 140.000000 2.77627e-07 +145.000000 0.000637204 145.000000 0.000729063 145.000000 0.000726828 145.000000 0.000726289 145.000000 0.000728794 145.000000 2.68797e-07 +150.000000 0.000622036 150.000000 0.000712201 150.000000 0.000709891 150.000000 0.000709368 150.000000 0.00071194 150.000000 2.6053e-07 +155.000000 0.00060068 155.000000 0.000696381 155.000000 0.000693995 155.000000 0.000693492 155.000000 0.000696128 155.000000 2.52776e-07 +160.000000 0.000588163 160.000000 0.00068151 160.000000 0.000679059 160.000000 0.000678565 160.000000 0.000681265 160.000000 2.45485e-07 +165.000000 0.000576359 165.000000 0.000667505 165.000000 0.000664988 165.000000 0.000664506 165.000000 0.000667266 165.000000 2.38619e-07 +170.000000 0.000565208 170.000000 0.000654291 170.000000 0.000651711 170.000000 0.000651241 170.000000 0.000654059 170.000000 2.3214e-07 +175.000000 0.000554657 175.000000 0.000641804 175.000000 0.000639164 175.000000 0.000638705 175.000000 0.000641578 175.000000 2.26016e-07 +180.000000 0.000544659 180.000000 0.000629984 180.000000 0.000627288 180.000000 0.000626838 180.000000 0.000629764 180.000000 2.20218e-07 +185.000000 0.000535169 185.000000 0.00061878 185.000000 0.000616031 185.000000 0.00061559 185.000000 0.000618565 185.000000 2.14721e-07 +190.000000 0.00052615 190.000000 0.000608144 190.000000 0.000605347 190.000000 0.000604913 190.000000 0.000607934 190.000000 2.09501e-07 +195.000000 0.000517567 195.000000 0.000598034 195.000000 0.000595185 195.000000 0.000594765 195.000000 0.00059783 195.000000 2.04538e-07 +200.000000 0.00050939 200.000000 0.000588413 200.000000 0.000585517 200.000000 0.000585108 200.000000 0.000588213 200.000000 1.99813e-07 +210.000000 0.000494138 210.000000 0.0005705 210.000000 0.000567587 210.000000 0.00056713 210.000000 0.000570309 210.000000 1.91011e-07 +220.000000 0.0004802 220.000000 0.000554165 220.000000 0.000551196 220.000000 0.000550741 220.000000 0.000553982 220.000000 1.82978e-07 +230.000000 0.000467409 230.000000 0.000539209 230.000000 0.000536177 230.000000 0.00053574 230.000000 0.000539034 230.000000 1.75616e-07 +240.000000 0.00045563 240.000000 0.000525465 240.000000 0.000522384 240.000000 0.000521959 240.000000 0.000525296 240.000000 1.68843e-07 +250.000000 0.000444747 250.000000 0.000512792 250.000000 0.000509671 250.000000 0.000509258 250.000000 0.000512629 250.000000 1.6259e-07 +260.000000 0.00043466 260.000000 0.00050107 260.000000 0.000497917 260.000000 0.000497515 260.000000 0.000500913 260.000000 1.568e-07 +270.000000 0.000425285 270.000000 0.000490197 270.000000 0.000487021 270.000000 0.000486629 270.000000 0.000490046 270.000000 1.51422e-07 +280.000000 0.000416549 280.000000 0.000480085 280.000000 0.000476892 280.000000 0.00047651 280.000000 0.000479939 280.000000 1.46412e-07 +290.000000 0.00040839 290.000000 0.000470658 290.000000 0.000467448 290.000000 0.000467081 290.000000 0.000470516 290.000000 1.41735e-07 +300.000000 0.000400751 300.000000 0.000461849 300.000000 0.000458661 300.000000 0.000458275 300.000000 0.000461712 300.000000 1.37357e-07 +310.000000 0.000393586 310.000000 0.000453601 310.000000 0.000450446 310.000000 0.000450034 310.000000 0.000453467 310.000000 1.33251e-07 +320.000000 0.000386852 320.000000 0.000445861 320.000000 0.00044271 320.000000 0.000442307 320.000000 0.000445732 320.000000 1.29392e-07 +330.000000 0.000380511 330.000000 0.000438586 330.000000 0.00043544 330.000000 0.000435049 330.000000 0.00043846 330.000000 1.25757e-07 +340.000000 0.00037453 340.000000 0.000431736 340.000000 0.000428604 340.000000 0.000428218 340.000000 0.000431614 340.000000 1.22328e-07 +350.000000 0.00036888 350.000000 0.000425275 350.000000 0.000422159 350.000000 0.00042178 350.000000 0.000425156 350.000000 1.19087e-07 +360.000000 0.000363534 360.000000 0.000419172 360.000000 0.000416075 360.000000 0.000415703 360.000000 0.000419056 360.000000 1.16019e-07 +370.000000 0.00035847 370.000000 0.000413399 370.000000 0.000410293 370.000000 0.000409927 370.000000 0.000413286 370.000000 1.13111e-07 +380.000000 0.000353666 380.000000 0.00040793 380.000000 0.00040482 380.000000 0.000404459 380.000000 0.00040782 380.000000 1.1035e-07 +390.000000 0.000349103 390.000000 0.000402743 390.000000 0.000399631 390.000000 0.000399276 390.000000 0.000402636 390.000000 1.07725e-07 +400.000000 0.000344763 400.000000 0.000397818 400.000000 0.000394707 400.000000 0.000394358 400.000000 0.000397712 400.000000 1.05226e-07 +410.000000 0.000340632 410.000000 0.000393135 410.000000 0.000390029 410.000000 0.000389684 410.000000 0.000393032 410.000000 1.02844e-07 +420.000000 0.000336694 420.000000 0.000388678 420.000000 0.00038558 420.000000 0.000385239 420.000000 0.000388577 420.000000 1.00572e-07 +430.000000 0.000332938 430.000000 0.000384431 430.000000 0.000381343 430.000000 0.000381007 430.000000 0.000384333 430.000000 9.84007e-08 +440.000000 0.000329351 440.000000 0.000380381 440.000000 0.000377301 440.000000 0.000376973 440.000000 0.000380285 440.000000 9.63247e-08 +450.000000 0.000325922 450.000000 0.000376515 450.000000 0.000373449 450.000000 0.000373124 450.000000 0.000376421 450.000000 9.43375e-08 +460.000000 0.000322643 460.000000 0.000372821 460.000000 0.000369783 460.000000 0.000369449 460.000000 0.000372729 460.000000 9.24333e-08 +470.000000 0.000319503 470.000000 0.000369289 470.000000 0.000366287 470.000000 0.000365938 470.000000 0.000369198 470.000000 9.06071e-08 +480.000000 0.000316495 480.000000 0.000365908 480.000000 0.000362937 480.000000 0.000362579 480.000000 0.000365819 480.000000 8.88541e-08 +490.000000 0.000313611 490.000000 0.00036267 490.000000 0.000359719 490.000000 0.000359363 490.000000 0.000362583 490.000000 8.71699e-08 +500.000000 0.000310843 500.000000 0.000359567 500.000000 0.000356632 500.000000 0.000356283 500.000000 0.000359481 500.000000 8.55505e-08 +520.000000 0.000305632 520.000000 0.000353733 520.000000 0.000350839 520.000000 0.000350498 520.000000 0.00035365 520.000000 8.24917e-08 +540.000000 0.000300817 540.000000 0.000348351 540.000000 0.000345503 540.000000 0.000345167 540.000000 0.000348272 540.000000 7.96509e-08 +560.000000 0.000296356 560.000000 0.000343375 560.000000 0.000340572 560.000000 0.000340243 560.000000 0.000343298 560.000000 7.70056e-08 +580.000000 0.000292215 580.000000 0.000338764 580.000000 0.000336007 580.000000 0.000335683 580.000000 0.000338689 580.000000 7.4536e-08 +600.000000 0.000288363 600.000000 0.000334481 600.000000 0.000331771 600.000000 0.000331452 600.000000 0.000334409 600.000000 7.22249e-08 +620.000000 0.000284774 620.000000 0.000330496 620.000000 0.000327833 620.000000 0.000327518 620.000000 0.000330426 620.000000 7.00574e-08 +640.000000 0.000281425 640.000000 0.000326783 640.000000 0.000324165 640.000000 0.000323854 640.000000 0.000326715 640.000000 6.80204e-08 +660.000000 0.000278294 660.000000 0.000323316 660.000000 0.00032074 660.000000 0.000320435 660.000000 0.00032325 660.000000 6.61023e-08 +680.000000 0.000275364 680.000000 0.000320074 680.000000 0.000317538 680.000000 0.00031724 680.000000 0.00032001 680.000000 6.42928e-08 +700.000000 0.000272618 700.000000 0.00031704 700.000000 0.00031455 700.000000 0.000314249 700.000000 0.000316977 700.000000 6.2583e-08 +720.000000 0.000270042 720.000000 0.000314195 720.000000 0.000311759 720.000000 0.000311446 720.000000 0.000314134 720.000000 6.09647e-08 +740.000000 0.000267623 740.000000 0.000311525 740.000000 0.000309139 740.000000 0.000308814 740.000000 0.000311465 740.000000 5.94307e-08 +760.000000 0.000265349 760.000000 0.000309016 760.000000 0.000306665 760.000000 0.000306341 760.000000 0.000308958 760.000000 5.79744e-08 +780.000000 0.000263209 780.000000 0.000306657 780.000000 0.000304333 780.000000 0.000304015 780.000000 0.000306601 780.000000 5.65901e-08 +800.000000 0.000261194 800.000000 0.000304437 800.000000 0.000302136 800.000000 0.000301823 800.000000 0.000304381 800.000000 5.52725e-08 +820.000000 0.000259295 820.000000 0.000302344 820.000000 0.000300068 820.000000 0.000299757 820.000000 0.00030229 820.000000 5.40168e-08 +840.000000 0.000257505 840.000000 0.000300372 840.000000 0.000298115 840.000000 0.000297807 840.000000 0.000300319 840.000000 5.28188e-08 +860.000000 0.000255816 860.000000 0.00029851 860.000000 0.000296271 860.000000 0.000295964 860.000000 0.000298459 860.000000 5.16744e-08 +880.000000 0.000254222 880.000000 0.000296753 880.000000 0.000294526 880.000000 0.000294223 880.000000 0.000296703 880.000000 5.05802e-08 +900.000000 0.000252717 900.000000 0.000295093 900.000000 0.000292875 900.000000 0.000292574 900.000000 0.000295044 900.000000 4.95328e-08 +920.000000 0.000251295 920.000000 0.000293524 920.000000 0.000291312 920.000000 0.000291013 920.000000 0.000293475 920.000000 4.85294e-08 +940.000000 0.000249951 940.000000 0.00029204 940.000000 0.000289831 940.000000 0.000289534 940.000000 0.000291993 940.000000 4.7567e-08 +960.000000 0.000248681 960.000000 0.000290637 960.000000 0.000288426 960.000000 0.000288131 960.000000 0.00029059 960.000000 4.66434e-08 +980.000000 0.000247481 980.000000 0.000289308 980.000000 0.000287093 980.000000 0.0002868 980.000000 0.000289262 980.000000 4.57561e-08 +1000.000000 0.000246346 1000.000000 0.000288051 1000.000000 0.000285827 1000.000000 0.000285536 1000.000000 0.000288006 1000.000000 4.49029e-08 +1020.000000 0.000245273 1020.000000 0.00028686 1020.000000 0.000284624 1020.000000 0.000284335 1020.000000 0.000286816 1020.000000 4.40821e-08 +1040.000000 0.000244259 1040.000000 0.000285732 1040.000000 0.00028348 1040.000000 0.000283193 1040.000000 0.000285689 1040.000000 4.32917e-08 +1060.000000 0.0002433 1060.000000 0.000284664 1060.000000 0.000282392 1060.000000 0.000282107 1060.000000 0.000284622 1060.000000 4.253e-08 +1080.000000 0.000242394 1080.000000 0.000283653 1080.000000 0.000281357 1080.000000 0.000281073 1080.000000 0.000283611 1080.000000 4.17955e-08 +1100.000000 0.000241537 1100.000000 0.000282694 1100.000000 0.000280372 1100.000000 0.00028009 1100.000000 0.000282653 1100.000000 4.10868e-08 +1120.000000 0.000240728 1120.000000 0.000281786 1120.000000 0.000279434 1120.000000 0.000279153 1120.000000 0.000281746 1120.000000 4.04025e-08 +1140.000000 0.000239964 1140.000000 0.000280926 1140.000000 0.00027854 1140.000000 0.00027826 1140.000000 0.000280886 1140.000000 3.97414e-08 +1160.000000 0.000239243 1160.000000 0.000280111 1160.000000 0.000277688 1160.000000 0.000277409 1160.000000 0.000280072 1160.000000 3.91022e-08 +1180.000000 0.000238563 1180.000000 0.00027934 1180.000000 0.000276875 1180.000000 0.000276598 1180.000000 0.000279301 1180.000000 3.84839e-08 +1200.000000 0.000237921 1200.000000 0.000278609 1200.000000 0.0002761 1200.000000 0.000275824 1200.000000 0.000278571 1200.000000 3.78855e-08 +1220.000000 0.000237317 1220.000000 0.000277918 1220.000000 0.000275359 1220.000000 0.000275085 1220.000000 0.000277881 1220.000000 3.7306e-08 +1240.000000 0.000236748 1240.000000 0.000277264 1240.000000 0.000274652 1240.000000 0.000274381 1240.000000 0.000277227 1240.000000 3.67446e-08 +1260.000000 0.000236213 1260.000000 0.000276645 1260.000000 0.000273978 1260.000000 0.000273708 1260.000000 0.000276609 1260.000000 3.62003e-08 +1280.000000 0.00023571 1280.000000 0.00027606 1280.000000 0.000273334 1280.000000 0.000273066 1280.000000 0.000276025 1280.000000 3.56724e-08 +1300.000000 0.000235239 1300.000000 0.000275508 1300.000000 0.000272721 1300.000000 0.000272453 1300.000000 0.000275473 1300.000000 3.51602e-08 +1320.000000 0.000234797 1320.000000 0.000274986 1320.000000 0.000272137 1320.000000 0.000271867 1320.000000 0.000274952 1320.000000 3.4663e-08 +1340.000000 0.000234384 1340.000000 0.000274494 1340.000000 0.00027158 1340.000000 0.000271307 1340.000000 0.00027446 1340.000000 3.41801e-08 +1360.000000 0.000233997 1360.000000 0.00027403 1360.000000 0.000271049 1360.000000 0.000270772 1360.000000 0.000273997 1360.000000 3.37109e-08 +1380.000000 0.000233638 1380.000000 0.000273594 1380.000000 0.000270542 1380.000000 0.000270261 1380.000000 0.00027356 1380.000000 3.32548e-08 +1400.000000 0.000233303 1400.000000 0.000273183 1400.000000 0.000270057 1400.000000 0.000269773 1400.000000 0.00027315 1400.000000 3.28113e-08 +1420.000000 0.000232992 1420.000000 0.000272797 1420.000000 0.000269594 1420.000000 0.000269306 1420.000000 0.000272764 1420.000000 3.23798e-08 +1440.000000 0.000232705 1440.000000 0.000272434 1440.000000 0.00026915 1440.000000 0.00026886 1440.000000 0.000272402 1440.000000 3.19599e-08 +1460.000000 0.00023244 1460.000000 0.000272095 1460.000000 0.000268725 1460.000000 0.000268434 1460.000000 0.000272063 1460.000000 3.15511e-08 +1480.000000 0.000232196 1480.000000 0.000271777 1480.000000 0.000268317 1480.000000 0.000268026 1480.000000 0.000271746 1480.000000 3.11529e-08 +1500.000000 0.000231973 1500.000000 0.000271481 1500.000000 0.000267927 1500.000000 0.000267636 1500.000000 0.00027145 1500.000000 3.0765e-08 +1520.000000 0.000231771 1520.000000 0.000271204 1520.000000 0.000267554 1520.000000 0.000267264 1520.000000 0.000271174 1520.000000 3.0387e-08 +1540.000000 0.000231587 1540.000000 0.000270947 1540.000000 0.000267196 1540.000000 0.000266908 1540.000000 0.000270917 1540.000000 3.00184e-08 +1560.000000 0.000231422 1560.000000 0.000270709 1560.000000 0.000266855 1560.000000 0.000266568 1560.000000 0.00027068 1560.000000 2.96589e-08 +1580.000000 0.000231275 1580.000000 0.000270489 1580.000000 0.000266528 1580.000000 0.000266243 1580.000000 0.00027046 1580.000000 2.93083e-08 +1600.000000 0.000231145 1600.000000 0.000270286 1600.000000 0.000266216 1600.000000 0.000265932 1600.000000 0.000270257 1600.000000 2.8966e-08 +1620.000000 0.000231032 1620.000000 0.0002701 1620.000000 0.000265918 1620.000000 0.000265635 1620.000000 0.000270072 1620.000000 2.8632e-08 +1640.000000 0.000230935 1640.000000 0.00026993 1640.000000 0.000265633 1640.000000 0.000265351 1640.000000 0.000269902 1640.000000 2.83058e-08 +1660.000000 0.000230854 1660.000000 0.000269776 1660.000000 0.000265362 1660.000000 0.000265081 1660.000000 0.000269748 1660.000000 2.79872e-08 +1680.000000 0.000230787 1680.000000 0.000269636 1680.000000 0.000265103 1680.000000 0.000264822 1680.000000 0.000269609 1680.000000 2.76759e-08 +1700.000000 0.000230736 1700.000000 0.000269511 1700.000000 0.000264855 1700.000000 0.000264575 1700.000000 0.000269484 1700.000000 2.73716e-08 +1750.000000 0.000230668 1750.000000 0.000269259 1750.000000 0.000264285 1750.000000 0.000264007 1750.000000 0.000269232 1750.000000 2.66404e-08 +1800.000000 0.000230682 1800.000000 0.000269086 1800.000000 0.00026378 1800.000000 0.000263502 1800.000000 0.00026906 1800.000000 2.59485e-08 +1850.000000 0.000230771 1850.000000 0.000268988 1850.000000 0.000263332 1850.000000 0.000263055 1850.000000 0.000268962 1850.000000 2.52926e-08 +1900.000000 0.000230931 1900.000000 0.000268957 1900.000000 0.000262936 1900.000000 0.00026266 1900.000000 0.000268932 1900.000000 2.46701e-08 +1950.000000 0.000231157 1950.000000 0.000268988 1950.000000 0.000262588 1950.000000 0.000262314 1950.000000 0.000268964 1950.000000 2.40784e-08 +2000.000000 0.000231444 2000.000000 0.000269078 2000.000000 0.000262284 2000.000000 0.000262011 2000.000000 0.000269055 2000.000000 2.35153e-08 +2100.000000 0.000232185 2100.000000 0.000269415 2100.000000 0.000261793 2100.000000 0.000261522 2100.000000 0.000269393 2100.000000 2.24669e-08 +2200.000000 0.000233127 2200.000000 0.000269938 2200.000000 0.000261435 2200.000000 0.000261166 2200.000000 0.000269917 2200.000000 2.15105e-08 +2300.000000 0.000234247 2300.000000 0.000270623 2300.000000 0.000261191 2300.000000 0.000260923 2300.000000 0.000270603 2300.000000 2.06346e-08 +2400.000000 0.000235525 2400.000000 0.00027145 2400.000000 0.000261042 2400.000000 0.000260775 2400.000000 0.00027143 2400.000000 1.98293e-08 +2500.000000 0.000236946 2500.000000 0.000272401 2500.000000 0.000260973 2500.000000 0.000260708 2500.000000 0.000272382 2500.000000 1.90862e-08 +2600.000000 0.000238494 2600.000000 0.000273462 2600.000000 0.000260974 2600.000000 0.00026071 2600.000000 0.000273444 2600.000000 1.83985e-08 +2700.000000 0.000240158 2700.000000 0.000274621 2700.000000 0.000261033 2700.000000 0.00026077 2700.000000 0.000274603 2700.000000 1.77599e-08 +2800.000000 0.000241928 2800.000000 0.000275867 2800.000000 0.000261143 2800.000000 0.000260881 2800.000000 0.00027585 2800.000000 1.71655e-08 +2900.000000 0.000243795 2900.000000 0.000277191 2900.000000 0.000261295 2900.000000 0.000261034 2900.000000 0.000277175 2900.000000 1.66107e-08 +3000.000000 0.00024575 3000.000000 0.000278585 3000.000000 0.000261485 3000.000000 0.000261225 3000.000000 0.000278569 3000.000000 1.60917e-08 diff --git a/Inputs/EnergyLoss/proton_cd2.txt b/Inputs/EnergyLoss/proton_cd2.txt new file mode 100644 index 0000000000000000000000000000000000000000..a90a17b47e6c6f019efaafef9afb50e1b538ac4b --- /dev/null +++ b/Inputs/EnergyLoss/proton_cd2.txt @@ -0,0 +1,218 @@ +Energy (MeV/u)1 0 - [He-base] F.Hubert et al, AD&ND Tables 46(1990)1 Energy (MeV/u)2 1 - [H -base] J.F.Ziegler et al, Pergamon Press, NY (low energy) Energy (MeV/u)3 2 - ATIMA 1.2 LS-theory (recommended for high energy) Energy (MeV/u)4 3 - ATIMA 1.2 without LS-correction Energy (MeV/u)5 4 - electrical component of [1] - J.F.Ziegler et al Energy (MeV/u)6 5 - nuclear component of [1] - J.F.Ziegler et al +0.001000 0.0204806 0.001000 0.0256984 0.001000 0.0340331 0.001000 0.0340331 0.001000 0.0229095 0.001000 0.00278888 +0.002000 0.0248957 0.002000 0.031154 0.002000 0.0391101 0.002000 0.0391101 0.002000 0.0291996 0.002000 0.00195434 +0.005000 0.0330803 0.005000 0.041354 0.005000 0.0478351 0.005000 0.0478351 0.005000 0.0402398 0.005000 0.00111416 +0.008000 0.0385969 0.008000 0.0482452 0.008000 0.0533565 0.008000 0.0533565 0.008000 0.0474349 0.008000 0.000810337 +0.010000 0.0415811 0.010000 0.0519804 0.010000 0.0562531 0.010000 0.0562531 0.010000 0.0512881 0.010000 0.000692311 +0.015000 0.0502024 0.015000 0.0600709 0.015000 0.0620004 0.015000 0.0620004 0.015000 0.0595587 0.015000 0.000512204 +0.020000 0.0572562 0.020000 0.0665994 0.020000 0.0664864 0.020000 0.0664864 0.020000 0.0661864 0.020000 0.00041303 +0.025000 0.0630864 0.025000 0.072043 0.025000 0.0702124 0.025000 0.0702124 0.025000 0.0716946 0.025000 0.000348343 +0.030000 0.067875 0.030000 0.0766497 0.030000 0.0737965 0.030000 0.0737965 0.030000 0.0763472 0.030000 0.000302487 +0.035000 0.0717408 0.035000 0.0805682 0.035000 0.0767902 0.035000 0.0767902 0.035000 0.0803001 0.035000 0.000268116 +0.040000 0.0747775 0.040000 0.0838974 0.040000 0.0792938 0.040000 0.0792938 0.040000 0.0836561 0.040000 0.000241304 +0.045000 0.0770687 0.045000 0.0867086 0.045000 0.0813801 0.045000 0.0813801 0.045000 0.0864889 0.045000 0.000219747 +0.050000 0.0786948 0.050000 0.0890574 0.050000 0.0831051 0.050000 0.0831051 0.050000 0.0888554 0.050000 0.000202003 +0.055000 0.0797351 0.055000 0.0909894 0.055000 0.0845138 0.055000 0.0845138 0.055000 0.0908022 0.055000 0.000187118 +0.060000 0.0802672 0.060000 0.0925438 0.060000 0.0856435 0.060000 0.0856435 0.060000 0.0923694 0.060000 0.000174436 +0.070000 0.0801041 0.070000 0.094658 0.070000 0.0871882 0.070000 0.0871882 0.070000 0.0945041 0.070000 0.000153938 +0.080000 0.0787519 0.080000 0.0956499 0.080000 0.0879478 0.080000 0.0879478 0.080000 0.0955119 0.080000 0.000138046 +0.090000 0.0766599 0.090000 0.0957381 0.090000 0.0880857 0.090000 0.0880857 0.090000 0.0956128 0.090000 0.000125335 +0.100000 0.0741689 0.100000 0.0951156 0.100000 0.0877338 0.100000 0.0877338 0.100000 0.0950007 0.100000 0.000114917 +0.120000 0.0688664 0.120000 0.092384 0.120000 0.0859718 0.120000 0.0859718 0.120000 0.0922852 0.120000 9.88142e-05 +0.140000 0.0638932 0.140000 0.0885006 0.140000 0.0833095 0.140000 0.0833095 0.140000 0.0884137 0.140000 8.69084e-05 +0.160000 0.0595756 0.160000 0.084154 0.160000 0.0801772 0.160000 0.0801772 0.160000 0.0840763 0.160000 7.77203e-05 +0.180000 0.0559277 0.180000 0.0797567 0.180000 0.0768552 0.180000 0.0768552 0.180000 0.0796863 0.180000 7.03984e-05 +0.200000 0.0528583 0.200000 0.0755332 0.200000 0.0735201 0.200000 0.0735201 0.200000 0.0754688 0.200000 6.44161e-05 +0.250000 0.0470291 0.250000 0.0662793 0.250000 0.0657164 0.250000 0.0657164 0.250000 0.066226 0.250000 5.33248e-05 +0.300000 0.0428726 0.300000 0.0589586 0.300000 0.0590698 0.300000 0.0590698 0.300000 0.0589129 0.300000 4.56574e-05 +0.350000 0.039681 0.350000 0.0532117 0.350000 0.053584 0.350000 0.053584 0.350000 0.0531717 0.350000 4.00192e-05 +0.400000 0.0370929 0.400000 0.0486379 0.400000 0.0490756 0.400000 0.0490756 0.400000 0.0486022 0.400000 3.56869e-05 +0.450000 0.0349146 0.450000 0.0449251 0.450000 0.0453446 0.450000 0.0453446 0.450000 0.0448929 0.450000 3.22472e-05 +0.500000 0.0330346 0.500000 0.04185 0.500000 0.0422211 0.500000 0.0422211 0.500000 0.0418205 0.500000 2.94455e-05 +0.600000 0.0299136 0.600000 0.0370303 0.600000 0.0372974 0.600000 0.0372974 0.600000 0.0370051 0.600000 2.5148e-05 +0.700000 0.027398 0.700000 0.0333915 0.700000 0.0335836 0.700000 0.0335836 0.700000 0.0333695 0.700000 2.19975e-05 +0.800000 0.0253115 0.800000 0.0305174 0.800000 0.0306657 0.800000 0.0306657 0.800000 0.0304978 0.800000 1.95829e-05 +0.900000 0.023546 0.900000 0.0281709 0.900000 0.0282977 0.900000 0.0282977 0.900000 0.0281532 0.900000 1.76698e-05 +1.000000 0.0220293 1.000000 0.0262071 1.000000 0.026327 1.000000 0.026327 1.000000 0.026191 1.000000 1.61143e-05 +1.250000 0.0190232 1.250000 0.0224267 1.250000 0.0225599 1.250000 0.0225599 1.250000 0.0224135 1.250000 1.32498e-05 +1.500000 0.0167836 1.500000 0.0196827 1.500000 0.0198433 1.500000 0.0198433 1.500000 0.0196714 1.500000 1.12855e-05 +1.750000 0.015045 1.750000 0.0175832 1.750000 0.017771 1.750000 0.017771 1.750000 0.0175733 1.750000 9.85016e-06 +2.000000 0.0136533 2.000000 0.015917 2.000000 0.016128 2.000000 0.016128 2.000000 0.0159083 2.000000 8.75293e-06 +2.250000 0.0125119 2.250000 0.0145586 2.250000 0.0147883 2.250000 0.0147883 2.250000 0.0145507 2.250000 7.88547e-06 +2.500000 0.0115082 2.500000 0.0134275 2.500000 0.0136717 2.500000 0.0136717 2.500000 0.0134204 2.500000 7.18153e-06 +3.000000 0.0100487 3.000000 0.0116471 3.000000 0.011911 3.000000 0.011911 3.000000 0.011641 3.000000 6.10662e-06 +3.500000 0.00894107 3.500000 0.0103051 3.500000 0.0105799 3.500000 0.0105799 3.500000 0.0102998 3.500000 5.32267e-06 +4.000000 0.00806927 4.000000 0.00925469 4.000000 0.00953471 4.000000 0.00953471 4.000000 0.00924996 4.000000 4.72435e-06 +4.500000 0.00736381 4.500000 0.00840845 4.500000 0.0086902 4.500000 0.0086902 4.500000 0.0084042 4.500000 4.25197e-06 +5.000000 0.0067803 5.000000 0.00771115 5.000000 0.00799233 5.000000 0.00799233 5.000000 0.00770728 5.000000 3.86908e-06 +5.500000 0.00628901 5.500000 0.00712599 5.500000 0.00740513 5.500000 0.00740513 5.500000 0.00712244 5.500000 3.55213e-06 +6.000000 0.00586925 6.000000 0.00662748 6.000000 0.00690362 6.000000 0.00690362 6.000000 0.00662419 6.000000 3.28524e-06 +6.500000 0.00550616 6.500000 0.00619738 6.500000 0.00646991 6.500000 0.00646991 6.500000 0.00619432 6.500000 3.05725e-06 +7.000000 0.00518876 7.000000 0.00582227 7.000000 0.00609083 7.000000 0.00609083 7.000000 0.00581941 7.000000 2.86013e-06 +7.500000 0.00490876 7.500000 0.00549206 7.500000 0.00575644 7.500000 0.00575644 7.500000 0.00548938 7.500000 2.68792e-06 +8.000000 0.0046598 8.000000 0.00519902 8.000000 0.0054591 8.000000 0.0054591 8.000000 0.00519649 8.000000 2.53612e-06 +8.500000 0.00443689 8.500000 0.0049371 8.500000 0.00519285 8.500000 0.00519285 8.500000 0.0049347 8.500000 2.40125e-06 +9.000000 0.00423606 9.000000 0.00470151 9.000000 0.00495295 9.000000 0.00495295 9.000000 0.00469923 9.000000 2.2806e-06 +9.500000 0.00405412 9.500000 0.0044884 9.500000 0.00473558 9.500000 0.00473558 9.500000 0.00448622 9.500000 2.172e-06 +10.000000 0.00388847 10.000000 0.00444622 10.000000 0.00453765 10.000000 0.00453765 10.000000 0.00444415 10.000000 2.07369e-06 +11.000000 0.00359787 11.000000 0.00412009 11.000000 0.00418615 11.000000 0.00418618 11.000000 0.00411819 11.000000 1.90257e-06 +12.000000 0.00335108 12.000000 0.00384165 12.000000 0.00388822 12.000000 0.00388828 12.000000 0.00383989 12.000000 1.75858e-06 +13.000000 0.00313872 13.000000 0.00360104 13.000000 0.00363249 13.000000 0.00363253 13.000000 0.00359941 13.000000 1.63567e-06 +14.000000 0.00295393 14.000000 0.00339095 14.000000 0.00341056 14.000000 0.00341055 14.000000 0.00338942 14.000000 1.52946e-06 +15.000000 0.00279158 15.000000 0.00320584 15.000000 0.00321608 15.000000 0.00321608 15.000000 0.0032044 15.000000 1.43673e-06 +16.000000 0.00264774 16.000000 0.00304146 16.000000 0.00304436 16.000000 0.00304432 16.000000 0.0030401 16.000000 1.35503e-06 +17.000000 0.00251937 17.000000 0.00289445 17.000000 0.00289167 17.000000 0.00289153 17.000000 0.00289317 17.000000 1.28248e-06 +18.000000 0.00240406 18.000000 0.00276217 18.000000 0.00275495 18.000000 0.00275476 18.000000 0.00276095 18.000000 1.21761e-06 +19.000000 0.00229987 19.000000 0.00264247 19.000000 0.00263184 19.000000 0.00263166 19.000000 0.00264131 19.000000 1.15924e-06 +20.000000 0.00220524 20.000000 0.00253363 20.000000 0.00252048 20.000000 0.00252029 20.000000 0.00253252 20.000000 1.10642e-06 +21.000000 0.00211888 21.000000 0.0024342 21.000000 0.0024193 21.000000 0.0024191 21.000000 0.00243314 21.000000 1.0584e-06 +22.000000 0.00203975 22.000000 0.002343 22.000000 0.00232697 22.000000 0.00232678 22.000000 0.00234198 22.000000 1.01454e-06 +23.000000 0.00196695 23.000000 0.00225903 23.000000 0.00224244 23.000000 0.00224224 23.000000 0.00225805 23.000000 9.74307e-07 +24.000000 0.00189973 24.000000 0.00218145 24.000000 0.00216486 24.000000 0.00216458 24.000000 0.00218052 24.000000 9.37271e-07 +25.000000 0.00183747 25.000000 0.00210956 25.000000 0.00209343 25.000000 0.00209303 25.000000 0.00210865 25.000000 9.03058e-07 +27.000000 0.00172574 27.000000 0.00198044 27.000000 0.00196616 27.000000 0.00196566 27.000000 0.0019796 27.000000 8.41888e-07 +29.000000 0.00162829 29.000000 0.00186774 29.000000 0.00185637 29.000000 0.00185587 29.000000 0.00186695 29.000000 7.88773e-07 +31.000000 0.00154249 31.000000 0.00176847 31.000000 0.00175935 31.000000 0.00175885 31.000000 0.00176772 31.000000 7.42204e-07 +33.000000 0.00146633 33.000000 0.00168033 33.000000 0.00167196 33.000000 0.00167148 33.000000 0.00167963 33.000000 7.01025e-07 +35.000000 0.00139825 35.000000 0.00160152 35.000000 0.00159378 35.000000 0.00159336 35.000000 0.00160086 35.000000 6.64342e-07 +38.000000 0.00130863 38.000000 0.00149778 38.000000 0.00149104 38.000000 0.00149047 38.000000 0.00149716 38.000000 6.16238e-07 +41.000000 0.00123121 41.000000 0.00140818 41.000000 0.00140217 41.000000 0.00140158 41.000000 0.00140761 41.000000 5.74868e-07 +44.000000 0.00116363 44.000000 0.00132998 44.000000 0.0013245 44.000000 0.00132397 44.000000 0.00132945 44.000000 5.38895e-07 +47.000000 0.00110407 47.000000 0.00126112 47.000000 0.00125609 47.000000 0.00125558 47.000000 0.00126061 47.000000 5.07315e-07 +50.000000 0.00105118 50.000000 0.00119999 50.000000 0.00119532 50.000000 0.00119484 50.000000 0.00119951 50.000000 4.7936e-07 +55.000000 0.000974995 55.000000 0.00111202 55.000000 0.00110782 55.000000 0.00110738 55.000000 0.00111158 55.000000 4.39261e-07 +60.000000 0.000910668 60.000000 0.00103784 60.000000 0.00103401 60.000000 0.00103357 60.000000 0.00103743 60.000000 4.05567e-07 +65.000000 0.000855583 65.000000 0.000974411 65.000000 0.00097093 65.000000 0.000970418 65.000000 0.000974034 65.000000 3.76842e-07 +70.000000 0.000807845 70.000000 0.000919532 70.000000 0.000916201 70.000000 0.000915735 70.000000 0.00091918 70.000000 3.5205e-07 +75.000000 0.000766048 75.000000 0.000871563 75.000000 0.000868349 75.000000 0.000867909 75.000000 0.000871233 75.000000 3.30427e-07 +80.000000 0.000729126 80.000000 0.000829265 80.000000 0.000826126 80.000000 0.00082571 80.000000 0.000828953 80.000000 3.11395e-07 +85.000000 0.000696255 85.000000 0.000791676 85.000000 0.000788585 85.000000 0.000788192 85.000000 0.000791381 85.000000 2.94509e-07 +90.000000 0.000666789 90.000000 0.000758044 90.000000 0.000754985 90.000000 0.000754607 90.000000 0.000757765 90.000000 2.79423e-07 +95.000000 0.000640214 95.000000 0.00072777 95.000000 0.000724811 95.000000 0.000724363 95.000000 0.000727504 95.000000 2.65859e-07 +100.000000 0.000616115 100.000000 0.00070037 100.000000 0.000697409 100.000000 0.00069698 100.000000 0.000700116 100.000000 2.53596e-07 +105.000000 0.000594153 105.000000 0.000675449 105.000000 0.000672477 105.000000 0.000672067 105.000000 0.000675207 105.000000 2.42452e-07 +110.000000 0.00057405 110.000000 0.000652683 110.000000 0.000649696 110.000000 0.000649302 110.000000 0.00065245 110.000000 2.32281e-07 +115.000000 0.000555573 115.000000 0.0006318 115.000000 0.000628795 115.000000 0.000628416 115.000000 0.000631578 115.000000 2.22958e-07 +120.000000 0.000538529 120.000000 0.000612576 120.000000 0.00060955 120.000000 0.000609184 120.000000 0.000612362 120.000000 2.1438e-07 +125.000000 0.000522752 125.000000 0.000594818 125.000000 0.000591771 125.000000 0.000591416 125.000000 0.000594611 125.000000 2.0646e-07 +130.000000 0.000508103 130.000000 0.000578363 130.000000 0.000575294 130.000000 0.00057495 130.000000 0.000578164 130.000000 1.99125e-07 +135.000000 0.000494463 135.000000 0.000563072 135.000000 0.000559973 135.000000 0.000559647 135.000000 0.00056288 135.000000 1.92311e-07 +140.000000 0.000481727 140.000000 0.000548825 140.000000 0.000545738 140.000000 0.000545389 140.000000 0.000548639 140.000000 1.85965e-07 +145.000000 0.000469806 145.000000 0.000535518 145.000000 0.000532451 145.000000 0.00053207 145.000000 0.000535338 145.000000 1.80038e-07 +150.000000 0.000458624 150.000000 0.00052306 150.000000 0.00051997 150.000000 0.000519601 150.000000 0.000522886 150.000000 1.7449e-07 +155.000000 0.000442878 155.000000 0.000511373 155.000000 0.000508259 155.000000 0.000507903 155.000000 0.000511204 155.000000 1.69286e-07 +160.000000 0.000433649 160.000000 0.000500386 160.000000 0.000497256 160.000000 0.000496907 160.000000 0.000500221 160.000000 1.64395e-07 +165.000000 0.000424946 165.000000 0.000490037 165.000000 0.000486891 165.000000 0.000486551 165.000000 0.000489878 165.000000 1.59787e-07 +170.000000 0.000416725 170.000000 0.000480274 170.000000 0.000477112 170.000000 0.00047678 170.000000 0.000480119 170.000000 1.5544e-07 +175.000000 0.000408946 175.000000 0.000471047 175.000000 0.000467872 175.000000 0.000467547 175.000000 0.000470896 175.000000 1.51332e-07 +180.000000 0.000401574 180.000000 0.000462313 180.000000 0.000459126 180.000000 0.000458809 180.000000 0.000462166 180.000000 1.47442e-07 +185.000000 0.000394577 185.000000 0.000454034 185.000000 0.000450838 185.000000 0.000450526 185.000000 0.00045389 185.000000 1.43755e-07 +190.000000 0.000387927 190.000000 0.000446174 190.000000 0.000442972 190.000000 0.000442665 190.000000 0.000446034 190.000000 1.40253e-07 +195.000000 0.000381599 195.000000 0.000438704 195.000000 0.00043549 195.000000 0.000435194 195.000000 0.000438567 195.000000 1.36925e-07 +200.000000 0.00037557 200.000000 0.000431594 200.000000 0.000428373 200.000000 0.000428084 200.000000 0.00043146 200.000000 1.33756e-07 +210.000000 0.000364325 210.000000 0.000418356 210.000000 0.000415174 210.000000 0.000414851 210.000000 0.000418229 210.000000 1.27853e-07 +220.000000 0.000354048 220.000000 0.000406285 220.000000 0.00040311 220.000000 0.000402788 220.000000 0.000406162 220.000000 1.22466e-07 +230.000000 0.000344618 230.000000 0.000395232 230.000000 0.000392057 230.000000 0.000391748 230.000000 0.000395114 230.000000 1.17529e-07 +240.000000 0.000335934 240.000000 0.000385074 240.000000 0.000381908 240.000000 0.000381607 240.000000 0.000384961 240.000000 1.12988e-07 +250.000000 0.000327909 250.000000 0.000375708 250.000000 0.000372553 250.000000 0.000372261 250.000000 0.000375599 250.000000 1.08796e-07 +260.000000 0.000320472 260.000000 0.000367045 260.000000 0.000363905 260.000000 0.000363621 260.000000 0.00036694 260.000000 1.04915e-07 +270.000000 0.00031356 270.000000 0.000359009 270.000000 0.000355889 270.000000 0.000355612 270.000000 0.000358908 270.000000 1.0131e-07 +280.000000 0.000307119 280.000000 0.000351536 280.000000 0.000348437 280.000000 0.000348167 280.000000 0.000351438 280.000000 9.79522e-08 +290.000000 0.000301103 290.000000 0.000344569 290.000000 0.00034149 290.000000 0.00034123 290.000000 0.000344474 290.000000 9.48174e-08 +300.000000 0.000295472 300.000000 0.000338058 300.000000 0.000335024 300.000000 0.000334752 300.000000 0.000337966 300.000000 9.18837e-08 +310.000000 0.000290189 310.000000 0.000331962 310.000000 0.00032898 310.000000 0.000328689 310.000000 0.000331873 310.000000 8.91321e-08 +320.000000 0.000285223 320.000000 0.000326242 320.000000 0.000323289 320.000000 0.000323005 320.000000 0.000326156 320.000000 8.65459e-08 +330.000000 0.000280548 330.000000 0.000320866 330.000000 0.000317941 330.000000 0.000317665 330.000000 0.000320782 330.000000 8.41105e-08 +340.000000 0.000276139 340.000000 0.000315803 340.000000 0.000312912 340.000000 0.000312639 340.000000 0.000315722 340.000000 8.18129e-08 +350.000000 0.000271973 350.000000 0.000311029 350.000000 0.00030817 350.000000 0.000307903 350.000000 0.000310949 350.000000 7.96417e-08 +360.000000 0.000268032 360.000000 0.000306519 360.000000 0.000303695 360.000000 0.000303432 360.000000 0.000306441 360.000000 7.75865e-08 +370.000000 0.000264298 370.000000 0.000302252 370.000000 0.000299436 370.000000 0.000299178 370.000000 0.000302177 370.000000 7.56382e-08 +380.000000 0.000260756 380.000000 0.000298211 380.000000 0.000295405 380.000000 0.00029515 380.000000 0.000298137 380.000000 7.37886e-08 +390.000000 0.000257391 390.000000 0.000294378 390.000000 0.000291583 390.000000 0.000291332 390.000000 0.000294306 390.000000 7.20303e-08 +400.000000 0.000254192 400.000000 0.000290738 400.000000 0.000287955 400.000000 0.000287708 400.000000 0.000290668 400.000000 7.03567e-08 +410.000000 0.000251146 410.000000 0.000287278 410.000000 0.000284509 410.000000 0.000284265 410.000000 0.000287209 410.000000 6.87615e-08 +420.000000 0.000248243 420.000000 0.000283984 420.000000 0.000281231 420.000000 0.00028099 420.000000 0.000283917 420.000000 6.72395e-08 +430.000000 0.000245473 430.000000 0.000280847 430.000000 0.000278109 430.000000 0.000277871 430.000000 0.000280781 430.000000 6.57857e-08 +440.000000 0.000242828 440.000000 0.000277854 440.000000 0.00027513 440.000000 0.000274899 440.000000 0.00027779 440.000000 6.43955e-08 +450.000000 0.000240301 450.000000 0.000274998 450.000000 0.000272292 450.000000 0.000272062 450.000000 0.000274935 450.000000 6.30647e-08 +460.000000 0.000237883 460.000000 0.000272269 460.000000 0.00026959 460.000000 0.000269354 460.000000 0.000272207 460.000000 6.17897e-08 +470.000000 0.000235568 470.000000 0.000269659 470.000000 0.000267012 470.000000 0.000266765 470.000000 0.000269599 470.000000 6.05668e-08 +480.000000 0.00023335 480.000000 0.000267162 480.000000 0.000264542 480.000000 0.000264289 480.000000 0.000267102 480.000000 5.93931e-08 +490.000000 0.000231223 490.000000 0.00026477 490.000000 0.000262169 490.000000 0.000261918 490.000000 0.000264711 490.000000 5.82655e-08 +500.000000 0.000229183 500.000000 0.000262477 500.000000 0.000259893 500.000000 0.000259647 500.000000 0.00026242 500.000000 5.71813e-08 +520.000000 0.000225341 520.000000 0.000258168 520.000000 0.000255621 520.000000 0.00025538 520.000000 0.000258113 520.000000 5.51334e-08 +540.000000 0.00022179 540.000000 0.000254193 540.000000 0.000251684 540.000000 0.000251447 540.000000 0.00025414 540.000000 5.32317e-08 +560.000000 0.000218501 560.000000 0.000250518 560.000000 0.000248046 560.000000 0.000247813 560.000000 0.000250467 560.000000 5.1461e-08 +580.000000 0.000215448 580.000000 0.000247113 580.000000 0.000244676 580.000000 0.000244447 580.000000 0.000247063 580.000000 4.98079e-08 +600.000000 0.000212608 600.000000 0.000243951 600.000000 0.000241548 600.000000 0.000241323 600.000000 0.000243902 600.000000 4.82611e-08 +620.000000 0.000209962 620.000000 0.000241009 620.000000 0.000238639 620.000000 0.000238417 620.000000 0.000240962 620.000000 4.68105e-08 +640.000000 0.000207493 640.000000 0.000238267 640.000000 0.000235929 640.000000 0.00023571 640.000000 0.000238222 640.000000 4.54472e-08 +660.000000 0.000205185 660.000000 0.000235708 660.000000 0.000233398 660.000000 0.000233182 660.000000 0.000235664 660.000000 4.41636e-08 +680.000000 0.000203024 680.000000 0.000233316 680.000000 0.00023103 680.000000 0.000230819 680.000000 0.000233273 680.000000 4.29529e-08 +700.000000 0.000201 700.000000 0.000231077 700.000000 0.000228819 700.000000 0.000228607 700.000000 0.000231035 700.000000 4.18088e-08 +720.000000 0.000199101 720.000000 0.000228978 720.000000 0.000226753 720.000000 0.000226532 720.000000 0.000228937 720.000000 4.0726e-08 +740.000000 0.000197317 740.000000 0.000227008 740.000000 0.000224812 740.000000 0.000224583 740.000000 0.000226969 740.000000 3.96996e-08 +760.000000 0.00019564 760.000000 0.000225158 760.000000 0.00022298 760.000000 0.000222751 760.000000 0.00022512 760.000000 3.87253e-08 +780.000000 0.000194063 780.000000 0.000223419 780.000000 0.000221251 780.000000 0.000221026 780.000000 0.000223381 780.000000 3.77992e-08 +800.000000 0.000192577 800.000000 0.000221781 800.000000 0.000219623 800.000000 0.000219401 800.000000 0.000221744 800.000000 3.69178e-08 +820.000000 0.000191177 820.000000 0.000220239 820.000000 0.000218087 820.000000 0.000217868 820.000000 0.000220203 820.000000 3.60778e-08 +840.000000 0.000189857 840.000000 0.000218785 840.000000 0.000216638 840.000000 0.00021642 840.000000 0.00021875 840.000000 3.52764e-08 +860.000000 0.000188612 860.000000 0.000217413 860.000000 0.000215268 860.000000 0.000215051 860.000000 0.000217379 860.000000 3.45109e-08 +880.000000 0.000187437 880.000000 0.000216119 880.000000 0.000213971 880.000000 0.000213757 880.000000 0.000216085 880.000000 3.3779e-08 +900.000000 0.000186327 900.000000 0.000214896 900.000000 0.000212743 900.000000 0.000212531 900.000000 0.000214863 900.000000 3.30785e-08 +920.000000 0.000185278 920.000000 0.000213741 920.000000 0.00021158 920.000000 0.000211369 920.000000 0.000213708 920.000000 3.24074e-08 +940.000000 0.000184288 940.000000 0.000212648 940.000000 0.000210477 940.000000 0.000210267 940.000000 0.000212617 940.000000 3.17638e-08 +960.000000 0.000183351 960.000000 0.000211615 960.000000 0.00020943 960.000000 0.000209221 960.000000 0.000211584 960.000000 3.11461e-08 +980.000000 0.000182466 980.000000 0.000210638 980.000000 0.000208435 980.000000 0.000208228 980.000000 0.000210607 980.000000 3.05527e-08 +1000.000000 0.000181629 1000.000000 0.000209713 1000.000000 0.00020749 1000.000000 0.000207285 1000.000000 0.000209683 1000.000000 2.99822e-08 +1020.000000 0.000180838 1020.000000 0.000208837 1020.000000 0.000206592 1020.000000 0.000206387 1020.000000 0.000208808 1020.000000 2.94333e-08 +1040.000000 0.000180091 1040.000000 0.000208008 1040.000000 0.000205737 1040.000000 0.000205534 1040.000000 0.00020798 1040.000000 2.89047e-08 +1060.000000 0.000179384 1060.000000 0.000207224 1060.000000 0.000204923 1060.000000 0.000204721 1060.000000 0.000207195 1060.000000 2.83954e-08 +1080.000000 0.000178715 1080.000000 0.00020648 1080.000000 0.000204148 1080.000000 0.000203947 1080.000000 0.000206452 1080.000000 2.79043e-08 +1100.000000 0.000178084 1100.000000 0.000205776 1100.000000 0.000203409 1100.000000 0.00020321 1100.000000 0.000205749 1100.000000 2.74305e-08 +1120.000000 0.000177487 1120.000000 0.00020511 1120.000000 0.000202705 1120.000000 0.000202507 1120.000000 0.000205083 1120.000000 2.6973e-08 +1140.000000 0.000176924 1140.000000 0.000204479 1140.000000 0.000202034 1140.000000 0.000201836 1140.000000 0.000204452 1140.000000 2.65309e-08 +1160.000000 0.000176392 1160.000000 0.000203881 1160.000000 0.000201394 1160.000000 0.000201196 1160.000000 0.000203855 1160.000000 2.61036e-08 +1180.000000 0.000175891 1180.000000 0.000203316 1180.000000 0.000200782 1180.000000 0.000200586 1180.000000 0.00020329 1180.000000 2.56902e-08 +1200.000000 0.000175418 1200.000000 0.000202781 1200.000000 0.000200198 1200.000000 0.000200003 1200.000000 0.000202755 1200.000000 2.52902e-08 +1220.000000 0.000174972 1220.000000 0.000202275 1220.000000 0.000199639 1220.000000 0.000199446 1220.000000 0.00020225 1220.000000 2.49028e-08 +1240.000000 0.000174553 1240.000000 0.000201796 1240.000000 0.000199105 1240.000000 0.000198914 1240.000000 0.000201771 1240.000000 2.45275e-08 +1260.000000 0.000174158 1260.000000 0.000201343 1260.000000 0.000198596 1260.000000 0.000198405 1260.000000 0.000201319 1260.000000 2.41636e-08 +1280.000000 0.000173788 1280.000000 0.000200916 1280.000000 0.000198109 1280.000000 0.000197919 1280.000000 0.000200892 1280.000000 2.38108e-08 +1300.000000 0.00017344 1300.000000 0.000200512 1300.000000 0.000197644 1300.000000 0.000197454 1300.000000 0.000200489 1300.000000 2.34684e-08 +1320.000000 0.000173114 1320.000000 0.000200132 1320.000000 0.0001972 1320.000000 0.000197009 1320.000000 0.000200109 1320.000000 2.3136e-08 +1340.000000 0.00017281 1340.000000 0.000199773 1340.000000 0.000196777 1340.000000 0.000196584 1340.000000 0.00019975 1340.000000 2.28132e-08 +1360.000000 0.000172525 1360.000000 0.000199435 1360.000000 0.000196372 1360.000000 0.000196177 1360.000000 0.000199412 1360.000000 2.24996e-08 +1380.000000 0.00017226 1380.000000 0.000199117 1380.000000 0.000195985 1380.000000 0.000195787 1380.000000 0.000199095 1380.000000 2.21948e-08 +1400.000000 0.000172013 1400.000000 0.000198818 1400.000000 0.000195615 1400.000000 0.000195414 1400.000000 0.000198796 1400.000000 2.18983e-08 +1420.000000 0.000171784 1420.000000 0.000198537 1420.000000 0.000195261 1420.000000 0.000195057 1420.000000 0.000198516 1420.000000 2.161e-08 +1440.000000 0.000171572 1440.000000 0.000198275 1440.000000 0.00019492 1440.000000 0.000194716 1440.000000 0.000198253 1440.000000 2.13293e-08 +1460.000000 0.000171376 1460.000000 0.000198028 1460.000000 0.000194594 1460.000000 0.000194388 1460.000000 0.000198007 1460.000000 2.10561e-08 +1480.000000 0.000171197 1480.000000 0.000197799 1480.000000 0.000194281 1480.000000 0.000194075 1480.000000 0.000197778 1480.000000 2.079e-08 +1500.000000 0.000171033 1500.000000 0.000197584 1500.000000 0.00019398 1500.000000 0.000193775 1500.000000 0.000197564 1500.000000 2.05308e-08 +1520.000000 0.000170883 1520.000000 0.000197385 1520.000000 0.000193692 1520.000000 0.000193487 1520.000000 0.000197365 1520.000000 2.02781e-08 +1540.000000 0.000170748 1540.000000 0.0001972 1540.000000 0.000193416 1540.000000 0.000193212 1540.000000 0.00019718 1540.000000 2.00318e-08 +1560.000000 0.000170626 1560.000000 0.000197029 1560.000000 0.000193151 1560.000000 0.000192948 1560.000000 0.000197009 1560.000000 1.97916e-08 +1580.000000 0.000170518 1580.000000 0.000196871 1580.000000 0.000192898 1580.000000 0.000192696 1580.000000 0.000196852 1580.000000 1.95573e-08 +1600.000000 0.000170422 1600.000000 0.000196726 1600.000000 0.000192655 1600.000000 0.000192454 1600.000000 0.000196707 1600.000000 1.93286e-08 +1620.000000 0.000170338 1620.000000 0.000196594 1620.000000 0.000192422 1620.000000 0.000192222 1620.000000 0.000196575 1620.000000 1.91054e-08 +1640.000000 0.000170267 1640.000000 0.000196473 1640.000000 0.0001922 1640.000000 0.000192 1640.000000 0.000196454 1640.000000 1.88874e-08 +1660.000000 0.000170207 1660.000000 0.000196364 1660.000000 0.000191987 1660.000000 0.000191788 1660.000000 0.000196345 1660.000000 1.86745e-08 +1680.000000 0.000170158 1680.000000 0.000196266 1680.000000 0.000191783 1680.000000 0.000191585 1680.000000 0.000196247 1680.000000 1.84665e-08 +1700.000000 0.00017012 1700.000000 0.000196178 1700.000000 0.000191588 1700.000000 0.00019139 1700.000000 0.00019616 1700.000000 1.82632e-08 +1750.000000 0.00017007 1750.000000 0.000196004 1750.000000 0.000191136 1750.000000 0.000190939 1750.000000 0.000195986 1750.000000 1.77747e-08 +1800.000000 0.00017008 1800.000000 0.000195889 1800.000000 0.000190731 1800.000000 0.000190535 1800.000000 0.000195872 1800.000000 1.73123e-08 +1850.000000 0.000170146 1850.000000 0.000195829 1850.000000 0.000190369 1850.000000 0.000190174 1850.000000 0.000195812 1850.000000 1.68742e-08 +1900.000000 0.000170264 1900.000000 0.000195819 1900.000000 0.000190046 1900.000000 0.000189852 1900.000000 0.000195802 1900.000000 1.64583e-08 +1950.000000 0.000170431 1950.000000 0.000195855 1950.000000 0.000189759 1950.000000 0.000189565 1950.000000 0.000195839 1950.000000 1.6063e-08 +2000.000000 0.000170642 2000.000000 0.000195934 2000.000000 0.000189504 2000.000000 0.00018931 2000.000000 0.000195918 2000.000000 1.56869e-08 +2100.000000 0.000171189 2100.000000 0.000196208 2100.000000 0.00018908 2100.000000 0.000188888 2100.000000 0.000196193 2100.000000 1.49865e-08 +2200.000000 0.000171883 2200.000000 0.00019662 2200.000000 0.000188755 2200.000000 0.000188565 2200.000000 0.000196606 2200.000000 1.43478e-08 +2300.000000 0.000172709 2300.000000 0.000197152 2300.000000 0.000188515 2300.000000 0.000188326 2300.000000 0.000197138 2300.000000 1.37627e-08 +2400.000000 0.000173651 2400.000000 0.000197788 2400.000000 0.000188346 2400.000000 0.000188157 2400.000000 0.000197775 2400.000000 1.32249e-08 +2500.000000 0.000174699 2500.000000 0.000198516 2500.000000 0.000188237 2500.000000 0.00018805 2500.000000 0.000198504 2500.000000 1.27287e-08 +2600.000000 0.00017584 2600.000000 0.000199326 2600.000000 0.00018818 2600.000000 0.000187993 2600.000000 0.000199314 2600.000000 1.22694e-08 +2700.000000 0.000177067 2700.000000 0.000200208 2700.000000 0.000188167 2700.000000 0.000187981 2700.000000 0.000200197 2700.000000 1.1843e-08 +2800.000000 0.000178372 2800.000000 0.000201155 2800.000000 0.000188192 2800.000000 0.000188007 2800.000000 0.000201143 2800.000000 1.14462e-08 +2900.000000 0.000179749 2900.000000 0.000202159 2900.000000 0.000188249 2900.000000 0.000188065 2900.000000 0.000202148 2900.000000 1.10758e-08 +3000.000000 0.00018119 3000.000000 0.000203215 3000.000000 0.000188335 3000.000000 0.000188151 3000.000000 0.000203204 3000.000000 1.07292e-08 diff --git a/Inputs/EnergyLoss/triton_cd2.txt b/Inputs/EnergyLoss/triton_cd2.txt new file mode 100644 index 0000000000000000000000000000000000000000..126b9a08dcca418ab52b146809fe3d05b63e63f7 --- /dev/null +++ b/Inputs/EnergyLoss/triton_cd2.txt @@ -0,0 +1,218 @@ +Energy (MeV/u)1 0 - [He-base] F.Hubert et al, AD&ND Tables 46(1990)1 Energy (MeV/u)2 1 - [H -base] J.F.Ziegler et al, Pergamon Press, NY (low energy) Energy (MeV/u)3 2 - ATIMA 1.2 LS-theory (recommended for high energy) Energy (MeV/u)4 3 - ATIMA 1.2 without LS-correction Energy (MeV/u)5 4 - electrical component of [1] - J.F.Ziegler et al Energy (MeV/u)6 5 - nuclear component of [1] - J.F.Ziegler et al +0.001000 0.0217109 0.001000 0.0270944 0.001000 0.0354291 0.001000 0.0354291 0.001000 0.0229095 0.001000 0.00418484 +0.002000 0.0255722 0.002000 0.0319283 0.002000 0.0398845 0.002000 0.0398845 0.002000 0.0291996 0.002000 0.00272872 +0.005000 0.0333574 0.005000 0.0416912 0.005000 0.0481723 0.005000 0.0481723 0.005000 0.0402398 0.005000 0.00145135 +0.008000 0.0387718 0.008000 0.0484537 0.008000 0.053565 0.008000 0.053565 0.008000 0.0474349 0.008000 0.00101883 +0.010000 0.0417262 0.010000 0.052148 0.010000 0.0564207 0.010000 0.0564207 0.010000 0.0512881 0.010000 0.000859862 +0.015000 0.0502992 0.015000 0.0601862 0.015000 0.0621157 0.015000 0.0621157 0.015000 0.0595587 0.015000 0.000627508 +0.020000 0.0573288 0.020000 0.0666859 0.020000 0.0665728 0.020000 0.0665728 0.020000 0.0661864 0.020000 0.000499508 +0.025000 0.0631445 0.025000 0.0721121 0.025000 0.0702816 0.025000 0.0702816 0.025000 0.0716946 0.025000 0.000417526 +0.030000 0.0679234 0.030000 0.0767073 0.030000 0.0738542 0.030000 0.0738542 0.030000 0.0763472 0.030000 0.000360139 +0.035000 0.0717823 0.035000 0.0806176 0.035000 0.0768396 0.035000 0.0768396 0.035000 0.0803001 0.035000 0.000317533 +0.040000 0.0748138 0.040000 0.0839406 0.040000 0.079337 0.040000 0.079337 0.040000 0.0836561 0.040000 0.000284543 +0.045000 0.077101 0.045000 0.086747 0.045000 0.0814185 0.045000 0.0814185 0.045000 0.0864889 0.045000 0.000258182 +0.050000 0.0787239 0.050000 0.089092 0.050000 0.0831397 0.050000 0.0831397 0.050000 0.0888554 0.050000 0.000236594 +0.055000 0.0797615 0.055000 0.0910208 0.055000 0.0845453 0.055000 0.0845453 0.055000 0.0908022 0.055000 0.000218564 +0.060000 0.0802914 0.060000 0.0925726 0.060000 0.0856723 0.060000 0.0856723 0.060000 0.0923694 0.060000 0.000203262 +0.070000 0.0801249 0.070000 0.0946827 0.070000 0.0872129 0.070000 0.0872129 0.070000 0.0945041 0.070000 0.000178646 +0.080000 0.07877 0.080000 0.0956715 0.080000 0.0879694 0.080000 0.0879694 0.080000 0.0955119 0.080000 0.000159666 +0.090000 0.076676 0.090000 0.0957574 0.090000 0.0881049 0.090000 0.0881049 0.090000 0.0956128 0.090000 0.000144553 +0.100000 0.0741834 0.100000 0.0951329 0.100000 0.0877511 0.100000 0.0877511 0.100000 0.0950007 0.100000 0.000132212 +0.120000 0.0688785 0.120000 0.0923984 0.120000 0.0859862 0.120000 0.0859862 0.120000 0.0922852 0.120000 0.000113227 +0.140000 0.0639036 0.140000 0.088513 0.140000 0.0833218 0.140000 0.0833218 0.140000 0.0884137 0.140000 9.92624e-05 +0.160000 0.0595847 0.160000 0.0841648 0.160000 0.080188 0.160000 0.080188 0.160000 0.0840763 0.160000 8.85301e-05 +0.180000 0.0559358 0.180000 0.0797663 0.180000 0.0768648 0.180000 0.0768648 0.180000 0.0796863 0.180000 8.00071e-05 +0.200000 0.0528655 0.200000 0.0755419 0.200000 0.0735288 0.200000 0.0735288 0.200000 0.0754688 0.200000 7.3064e-05 +0.250000 0.0470349 0.250000 0.0662862 0.250000 0.0657233 0.250000 0.0657233 0.250000 0.066226 0.250000 6.02431e-05 +0.300000 0.0428774 0.300000 0.0589644 0.300000 0.0590755 0.300000 0.0590755 0.300000 0.0589129 0.300000 5.14227e-05 +0.350000 0.0396851 0.350000 0.0532167 0.350000 0.0535889 0.350000 0.0535889 0.350000 0.0531717 0.350000 4.49608e-05 +0.400000 0.0370965 0.400000 0.0486422 0.400000 0.04908 0.400000 0.04908 0.400000 0.0486022 0.400000 4.00109e-05 +0.450000 0.0349179 0.450000 0.044929 0.450000 0.0453485 0.450000 0.0453485 0.450000 0.0448929 0.450000 3.60907e-05 +0.500000 0.0330375 0.500000 0.0418535 0.500000 0.0422245 0.500000 0.0422245 0.500000 0.0418205 0.500000 3.29046e-05 +0.600000 0.029916 0.600000 0.0370331 0.600000 0.0373002 0.600000 0.0373002 0.600000 0.0370051 0.600000 2.80306e-05 +0.700000 0.0274 0.700000 0.033394 0.700000 0.0335861 0.700000 0.0335861 0.700000 0.0333695 0.700000 2.44683e-05 +0.800000 0.0253133 0.800000 0.0305196 0.800000 0.0306678 0.800000 0.0306678 0.800000 0.0304978 0.800000 2.17449e-05 +0.900000 0.0235476 0.900000 0.0281728 0.900000 0.0282996 0.900000 0.0282996 0.900000 0.0281532 0.900000 1.95915e-05 +1.000000 0.0220308 1.000000 0.0262089 1.000000 0.0263287 1.000000 0.0263287 1.000000 0.026191 1.000000 1.78439e-05 +1.250000 0.0190243 1.250000 0.0224281 1.250000 0.0225613 1.250000 0.0225613 1.250000 0.0224135 1.250000 1.46335e-05 +1.500000 0.0167845 1.500000 0.0196839 1.500000 0.0198445 1.500000 0.0198445 1.500000 0.0196714 1.500000 1.24386e-05 +1.750000 0.0150459 1.750000 0.0175841 1.750000 0.017772 1.750000 0.017772 1.750000 0.0175733 1.750000 1.08385e-05 +2.000000 0.013654 2.000000 0.0159179 2.000000 0.0161289 2.000000 0.0161289 2.000000 0.0159083 2.000000 9.61771e-06 +2.250000 0.0125126 2.250000 0.0145594 2.250000 0.014789 2.250000 0.014789 2.250000 0.0145507 2.250000 8.65417e-06 +2.500000 0.0115082 2.500000 0.0134282 2.500000 0.0136724 2.500000 0.0136724 2.500000 0.0134204 2.500000 7.87336e-06 +3.000000 0.0100487 3.000000 0.0116477 3.000000 0.0119115 3.000000 0.0119115 3.000000 0.011641 3.000000 6.68314e-06 +3.500000 0.00894107 3.500000 0.0103056 3.500000 0.0105804 3.500000 0.0105804 3.500000 0.0102998 3.500000 5.81683e-06 +4.000000 0.00806927 4.000000 0.00925512 4.000000 0.00953515 4.000000 0.00953515 4.000000 0.00924996 4.000000 5.15674e-06 +4.500000 0.00736381 4.500000 0.00840883 4.500000 0.00869058 4.500000 0.00869058 4.500000 0.0084042 4.500000 4.63632e-06 +5.000000 0.0067803 5.000000 0.0077115 5.000000 0.00799268 5.000000 0.00799268 5.000000 0.00770728 5.000000 4.21499e-06 +5.500000 0.00628901 5.500000 0.0071263 5.500000 0.00740544 5.500000 0.00740544 5.500000 0.00712244 5.500000 3.8666e-06 +6.000000 0.00586925 6.000000 0.00662777 6.000000 0.00690391 6.000000 0.00690391 6.000000 0.00662419 6.000000 3.5735e-06 +6.500000 0.00550616 6.500000 0.00619764 6.500000 0.00647018 6.500000 0.00647018 6.500000 0.00619432 6.500000 3.32333e-06 +7.000000 0.00518876 7.000000 0.00582251 7.000000 0.00609108 7.000000 0.00609108 7.000000 0.00581941 7.000000 3.10721e-06 +7.500000 0.00490876 7.500000 0.0054923 7.500000 0.00575667 7.500000 0.00575667 7.500000 0.00548938 7.500000 2.91853e-06 +8.000000 0.0046598 8.000000 0.00519924 8.000000 0.00545932 8.000000 0.00545932 8.000000 0.00519649 8.000000 2.75232e-06 +8.500000 0.00443689 8.500000 0.0049373 8.500000 0.00519306 8.500000 0.00519306 8.500000 0.0049347 8.500000 2.60473e-06 +9.000000 0.00423606 9.000000 0.0047017 9.000000 0.00495314 9.000000 0.00495314 9.000000 0.00469923 9.000000 2.47278e-06 +9.500000 0.00405412 9.500000 0.00448858 9.500000 0.00473576 9.500000 0.00473576 9.500000 0.00448622 9.500000 2.35406e-06 +10.000000 0.00388847 10.000000 0.00444639 10.000000 0.00453782 10.000000 0.00453782 10.000000 0.00444415 10.000000 2.24665e-06 +11.000000 0.00359787 11.000000 0.00412025 11.000000 0.00418631 11.000000 0.00418634 11.000000 0.00411819 11.000000 2.0598e-06 +12.000000 0.00335108 12.000000 0.0038418 12.000000 0.00388836 12.000000 0.00388842 12.000000 0.00383989 12.000000 1.90271e-06 +13.000000 0.00313872 13.000000 0.00360118 13.000000 0.00363262 13.000000 0.00363266 13.000000 0.00359941 13.000000 1.76871e-06 +14.000000 0.00295393 14.000000 0.00339107 14.000000 0.00341068 14.000000 0.00341068 14.000000 0.00338942 14.000000 1.653e-06 +15.000000 0.00279158 15.000000 0.00320596 15.000000 0.00321619 15.000000 0.0032162 15.000000 0.0032044 15.000000 1.55203e-06 +16.000000 0.00264774 16.000000 0.00304156 16.000000 0.00304446 16.000000 0.00304443 16.000000 0.0030401 16.000000 1.46313e-06 +17.000000 0.00251937 17.000000 0.00289455 17.000000 0.00289177 17.000000 0.00289163 17.000000 0.00289317 17.000000 1.38422e-06 +18.000000 0.00240406 18.000000 0.00276226 18.000000 0.00275505 18.000000 0.00275486 18.000000 0.00276095 18.000000 1.3137e-06 +19.000000 0.00229987 19.000000 0.00264256 19.000000 0.00263193 19.000000 0.00263175 19.000000 0.00264131 19.000000 1.25027e-06 +20.000000 0.00220524 20.000000 0.00253371 20.000000 0.00252056 20.000000 0.00252038 20.000000 0.00253252 20.000000 1.1929e-06 +21.000000 0.00211888 21.000000 0.00243428 21.000000 0.00241938 21.000000 0.00241918 21.000000 0.00243314 21.000000 1.14076e-06 +22.000000 0.00203975 22.000000 0.00234308 22.000000 0.00232705 22.000000 0.00232685 22.000000 0.00234198 22.000000 1.09315e-06 +23.000000 0.00196695 23.000000 0.0022591 23.000000 0.00224252 23.000000 0.00224232 23.000000 0.00225805 23.000000 1.04951e-06 +24.000000 0.00189973 24.000000 0.00218152 24.000000 0.00216493 24.000000 0.00216466 24.000000 0.00218052 24.000000 1.00934e-06 +25.000000 0.00183747 25.000000 0.00210962 25.000000 0.0020935 25.000000 0.0020931 25.000000 0.00210865 25.000000 9.72241e-07 +27.000000 0.00172574 27.000000 0.00198051 27.000000 0.00196623 27.000000 0.00196572 27.000000 0.0019796 27.000000 9.05946e-07 +29.000000 0.00162829 29.000000 0.0018678 29.000000 0.00185643 29.000000 0.00185593 29.000000 0.00186695 29.000000 8.48414e-07 +31.000000 0.00154249 31.000000 0.00176852 31.000000 0.00175941 31.000000 0.00175891 31.000000 0.00176772 31.000000 7.97996e-07 +33.000000 0.00146633 33.000000 0.00168038 33.000000 0.00167201 33.000000 0.00167154 33.000000 0.00167963 33.000000 7.53436e-07 +35.000000 0.00139825 35.000000 0.00160157 35.000000 0.00159383 35.000000 0.00159341 35.000000 0.00160086 35.000000 7.13758e-07 +38.000000 0.00130863 38.000000 0.00149782 38.000000 0.00149109 38.000000 0.00149052 38.000000 0.00149716 38.000000 6.61753e-07 +41.000000 0.00123121 41.000000 0.00140822 41.000000 0.00140221 41.000000 0.00140162 41.000000 0.00140761 41.000000 6.17053e-07 +44.000000 0.00116363 44.000000 0.00133002 44.000000 0.00132454 44.000000 0.00132401 44.000000 0.00132945 44.000000 5.78203e-07 +47.000000 0.00110407 47.000000 0.00126116 47.000000 0.00125612 47.000000 0.00125562 47.000000 0.00126061 47.000000 5.44114e-07 +50.000000 0.00105118 50.000000 0.00120002 50.000000 0.00119535 50.000000 0.00119488 50.000000 0.00119951 50.000000 5.13952e-07 +55.000000 0.000974995 55.000000 0.00111205 55.000000 0.00110785 55.000000 0.00110741 55.000000 0.00111158 55.000000 4.70708e-07 +60.000000 0.000910668 60.000000 0.00103787 60.000000 0.00103404 60.000000 0.0010336 60.000000 0.00103743 60.000000 4.34393e-07 +65.000000 0.000855583 65.000000 0.000974437 65.000000 0.000970957 65.000000 0.000970444 65.000000 0.000974034 65.000000 4.03451e-07 +70.000000 0.000807845 70.000000 0.000919556 70.000000 0.000916226 70.000000 0.00091576 70.000000 0.00091918 70.000000 3.76758e-07 +75.000000 0.000766048 75.000000 0.000871586 75.000000 0.000868372 75.000000 0.000867932 75.000000 0.000871233 75.000000 3.53488e-07 +80.000000 0.000729126 80.000000 0.000829286 80.000000 0.000826147 80.000000 0.000825732 80.000000 0.000828953 80.000000 3.33014e-07 +85.000000 0.000696255 85.000000 0.000791696 85.000000 0.000788605 85.000000 0.000788212 85.000000 0.000791381 85.000000 3.14857e-07 +90.000000 0.000666789 90.000000 0.000758064 90.000000 0.000755004 90.000000 0.000754627 90.000000 0.000757765 90.000000 2.9864e-07 +95.000000 0.000640214 95.000000 0.000727789 95.000000 0.000724829 95.000000 0.000724382 95.000000 0.000727504 95.000000 2.84065e-07 +100.000000 0.000616115 100.000000 0.000700387 100.000000 0.000697426 100.000000 0.000696998 100.000000 0.000700116 100.000000 2.70891e-07 +105.000000 0.000594153 105.000000 0.000675466 105.000000 0.000672493 105.000000 0.000672084 105.000000 0.000675207 105.000000 2.58925e-07 +110.000000 0.00057405 110.000000 0.000652698 110.000000 0.000649712 110.000000 0.000649318 110.000000 0.00065245 110.000000 2.48004e-07 +115.000000 0.000555573 115.000000 0.000631816 115.000000 0.00062881 115.000000 0.000628431 115.000000 0.000631578 115.000000 2.37997e-07 +120.000000 0.000538529 120.000000 0.00061259 120.000000 0.000609564 120.000000 0.000609198 120.000000 0.000612362 120.000000 2.28793e-07 +125.000000 0.000522752 125.000000 0.000594832 125.000000 0.000591785 125.000000 0.00059143 125.000000 0.000594611 125.000000 2.20297e-07 +130.000000 0.000508103 130.000000 0.000578376 130.000000 0.000575307 130.000000 0.000574963 130.000000 0.000578164 130.000000 2.1243e-07 +135.000000 0.000494463 135.000000 0.000563085 135.000000 0.000559986 135.000000 0.00055966 135.000000 0.00056288 135.000000 2.05123e-07 +140.000000 0.000481727 140.000000 0.000548838 140.000000 0.00054575 140.000000 0.000545401 140.000000 0.000548639 140.000000 1.98319e-07 +145.000000 0.000469806 145.000000 0.00053553 145.000000 0.000532463 145.000000 0.000532082 145.000000 0.000535338 145.000000 1.91966e-07 +150.000000 0.000458624 150.000000 0.000523072 150.000000 0.000519982 150.000000 0.000519613 150.000000 0.000522886 150.000000 1.86021e-07 +155.000000 0.000442878 155.000000 0.000511384 155.000000 0.00050827 155.000000 0.000507915 155.000000 0.000511204 155.000000 1.80445e-07 +160.000000 0.000433649 160.000000 0.000500396 160.000000 0.000497266 160.000000 0.000496918 160.000000 0.000500221 160.000000 1.75204e-07 +165.000000 0.000424946 165.000000 0.000490048 165.000000 0.000486901 165.000000 0.000486561 165.000000 0.000489878 165.000000 1.7027e-07 +170.000000 0.000416725 170.000000 0.000480284 170.000000 0.000477123 170.000000 0.00047679 170.000000 0.000480119 170.000000 1.65614e-07 +175.000000 0.000408946 175.000000 0.000471057 175.000000 0.000467882 175.000000 0.000467557 175.000000 0.000470896 175.000000 1.61215e-07 +180.000000 0.000401574 180.000000 0.000462323 180.000000 0.000459136 180.000000 0.000458818 180.000000 0.000462166 180.000000 1.57051e-07 +185.000000 0.000394577 185.000000 0.000454043 185.000000 0.000450847 185.000000 0.000450536 185.000000 0.00045389 185.000000 1.53104e-07 +190.000000 0.000387927 190.000000 0.000446184 190.000000 0.000442981 190.000000 0.000442674 190.000000 0.000446034 190.000000 1.49356e-07 +195.000000 0.000381599 195.000000 0.000438713 195.000000 0.000435499 195.000000 0.000435202 195.000000 0.000438567 195.000000 1.45794e-07 +200.000000 0.00037557 200.000000 0.000431603 200.000000 0.000428382 200.000000 0.000428093 200.000000 0.00043146 200.000000 1.42403e-07 +210.000000 0.000364325 210.000000 0.000418365 210.000000 0.000415182 210.000000 0.000414859 210.000000 0.000418229 210.000000 1.36089e-07 +220.000000 0.000354048 220.000000 0.000406293 220.000000 0.000403117 220.000000 0.000402796 220.000000 0.000406162 220.000000 1.30327e-07 +230.000000 0.000344618 230.000000 0.000395239 230.000000 0.000392064 230.000000 0.000391755 230.000000 0.000395114 230.000000 1.25049e-07 +240.000000 0.000335934 240.000000 0.000385081 240.000000 0.000381915 240.000000 0.000381614 240.000000 0.000384961 240.000000 1.20195e-07 +250.000000 0.000327909 250.000000 0.000375715 250.000000 0.00037256 250.000000 0.000372268 250.000000 0.000375599 250.000000 1.15715e-07 +260.000000 0.000320472 260.000000 0.000367052 260.000000 0.000363912 260.000000 0.000363628 260.000000 0.00036694 260.000000 1.11567e-07 +270.000000 0.00031356 270.000000 0.000359016 270.000000 0.000355895 270.000000 0.000355618 270.000000 0.000358908 270.000000 1.07715e-07 +280.000000 0.000307119 280.000000 0.000351542 280.000000 0.000348443 280.000000 0.000348173 280.000000 0.000351438 280.000000 1.04129e-07 +290.000000 0.000301103 290.000000 0.000344575 290.000000 0.000341496 290.000000 0.000341236 290.000000 0.000344474 290.000000 1.00781e-07 +300.000000 0.000295472 300.000000 0.000338064 300.000000 0.00033503 300.000000 0.000334758 300.000000 0.000337966 300.000000 9.76489e-08 +310.000000 0.000290189 310.000000 0.000331968 310.000000 0.000328986 310.000000 0.000328695 310.000000 0.000331873 310.000000 9.47113e-08 +320.000000 0.000285223 320.000000 0.000326248 320.000000 0.000323295 320.000000 0.00032301 320.000000 0.000326156 320.000000 9.19508e-08 +330.000000 0.000280548 330.000000 0.000320871 330.000000 0.000317946 330.000000 0.00031767 330.000000 0.000320782 330.000000 8.93516e-08 +340.000000 0.000276139 340.000000 0.000315808 340.000000 0.000312917 340.000000 0.000312644 340.000000 0.000315722 340.000000 8.68999e-08 +350.000000 0.000271973 350.000000 0.000311034 350.000000 0.000308175 350.000000 0.000307908 350.000000 0.000310949 350.000000 8.45833e-08 +360.000000 0.000268032 360.000000 0.000306523 360.000000 0.0003037 360.000000 0.000303437 360.000000 0.000306441 360.000000 8.23909e-08 +370.000000 0.000264298 370.000000 0.000302257 370.000000 0.000299441 370.000000 0.000299182 370.000000 0.000302177 370.000000 8.03127e-08 +380.000000 0.000260756 380.000000 0.000298215 380.000000 0.000295409 380.000000 0.000295154 380.000000 0.000298137 380.000000 7.83401e-08 +390.000000 0.000257391 390.000000 0.000294382 390.000000 0.000291587 390.000000 0.000291336 390.000000 0.000294306 390.000000 7.64651e-08 +400.000000 0.000254192 400.000000 0.000290742 400.000000 0.00028796 400.000000 0.000287713 400.000000 0.000290668 400.000000 7.46806e-08 +410.000000 0.000251146 410.000000 0.000287282 410.000000 0.000284513 410.000000 0.00028427 410.000000 0.000287209 410.000000 7.298e-08 +420.000000 0.000248243 420.000000 0.000283988 420.000000 0.000281235 420.000000 0.000280994 420.000000 0.000283917 420.000000 7.13576e-08 +430.000000 0.000245473 430.000000 0.000280851 430.000000 0.000278113 430.000000 0.000277875 430.000000 0.000280781 430.000000 6.98079e-08 +440.000000 0.000242828 440.000000 0.000277858 440.000000 0.000275134 440.000000 0.000274902 440.000000 0.00027779 440.000000 6.83263e-08 +450.000000 0.000240301 450.000000 0.000275002 450.000000 0.000272295 450.000000 0.000272066 450.000000 0.000274935 450.000000 6.69082e-08 +460.000000 0.000237883 460.000000 0.000272272 460.000000 0.000269594 460.000000 0.000269357 460.000000 0.000272207 460.000000 6.55496e-08 +470.000000 0.000235568 470.000000 0.000269663 470.000000 0.000267016 470.000000 0.000266769 470.000000 0.000269599 470.000000 6.42468e-08 +480.000000 0.00023335 480.000000 0.000267165 480.000000 0.000264546 480.000000 0.000264292 480.000000 0.000267102 480.000000 6.29964e-08 +490.000000 0.000231223 490.000000 0.000264773 490.000000 0.000262173 490.000000 0.000261921 490.000000 0.000264711 490.000000 6.17952e-08 +500.000000 0.000229183 500.000000 0.000262481 500.000000 0.000259897 500.000000 0.00025965 500.000000 0.00026242 500.000000 6.06404e-08 +520.000000 0.000225341 520.000000 0.000258171 520.000000 0.000255624 520.000000 0.000255383 520.000000 0.000258113 520.000000 5.84595e-08 +540.000000 0.00022179 540.000000 0.000254196 540.000000 0.000251687 540.000000 0.00025145 540.000000 0.00025414 540.000000 5.64347e-08 +560.000000 0.000218501 560.000000 0.000250521 560.000000 0.000248049 560.000000 0.000247816 560.000000 0.000250467 560.000000 5.45495e-08 +580.000000 0.000215448 580.000000 0.000247116 580.000000 0.000244679 580.000000 0.00024445 580.000000 0.000247063 580.000000 5.279e-08 +600.000000 0.000212608 600.000000 0.000243953 600.000000 0.000241551 600.000000 0.000241326 600.000000 0.000243902 600.000000 5.11437e-08 +620.000000 0.000209962 620.000000 0.000241012 620.000000 0.000238642 620.000000 0.00023842 620.000000 0.000240962 620.000000 4.96001e-08 +640.000000 0.000207493 640.000000 0.00023827 640.000000 0.000235932 640.000000 0.000235712 640.000000 0.000238222 640.000000 4.81497e-08 +660.000000 0.000205185 660.000000 0.000235711 660.000000 0.000233401 660.000000 0.000233185 660.000000 0.000235664 660.000000 4.67842e-08 +680.000000 0.000203024 680.000000 0.000233319 680.000000 0.000231033 680.000000 0.000230822 680.000000 0.000233273 680.000000 4.54963e-08 +700.000000 0.000201 700.000000 0.000231079 700.000000 0.000228821 700.000000 0.000228609 700.000000 0.000231035 700.000000 4.42796e-08 +720.000000 0.000199101 720.000000 0.00022898 720.000000 0.000226756 720.000000 0.000226534 720.000000 0.000228937 720.000000 4.31281e-08 +740.000000 0.000197317 740.000000 0.000227011 740.000000 0.000224815 740.000000 0.000224585 740.000000 0.000226969 740.000000 4.20368e-08 +760.000000 0.00019564 760.000000 0.000225161 760.000000 0.000222982 760.000000 0.000222753 760.000000 0.00022512 760.000000 4.10011e-08 +780.000000 0.000194063 780.000000 0.000223421 780.000000 0.000221253 780.000000 0.000221029 780.000000 0.000223381 780.000000 4.00166e-08 +800.000000 0.000192577 800.000000 0.000221783 800.000000 0.000219625 800.000000 0.000219403 800.000000 0.000221744 800.000000 3.90797e-08 +820.000000 0.000191177 820.000000 0.000220241 820.000000 0.00021809 820.000000 0.00021787 820.000000 0.000220203 820.000000 3.8187e-08 +840.000000 0.000189857 840.000000 0.000218787 840.000000 0.00021664 840.000000 0.000216422 840.000000 0.00021875 840.000000 3.73354e-08 +860.000000 0.000188612 860.000000 0.000217416 860.000000 0.00021527 860.000000 0.000215053 860.000000 0.000217379 860.000000 3.65221e-08 +880.000000 0.000187437 880.000000 0.000216121 880.000000 0.000213973 880.000000 0.000213759 880.000000 0.000216085 880.000000 3.57445e-08 +900.000000 0.000186327 900.000000 0.000214898 900.000000 0.000212745 900.000000 0.000212532 900.000000 0.000214863 900.000000 3.50003e-08 +920.000000 0.000185278 920.000000 0.000213743 920.000000 0.000211582 920.000000 0.000211371 920.000000 0.000213708 920.000000 3.42873e-08 +940.000000 0.000184288 940.000000 0.00021265 940.000000 0.000210478 940.000000 0.000210269 940.000000 0.000212617 940.000000 3.36038e-08 +960.000000 0.000183351 960.000000 0.000211617 960.000000 0.000209431 960.000000 0.000209223 960.000000 0.000211584 960.000000 3.29477e-08 +980.000000 0.000182466 980.000000 0.00021064 980.000000 0.000208437 980.000000 0.00020823 980.000000 0.000210607 980.000000 3.23175e-08 +1000.000000 0.000181629 1000.000000 0.000209715 1000.000000 0.000207492 1000.000000 0.000207286 1000.000000 0.000209683 1000.000000 3.17118e-08 +1020.000000 0.000180838 1020.000000 0.000208839 1020.000000 0.000206593 1020.000000 0.000206389 1020.000000 0.000208808 1020.000000 3.11289e-08 +1040.000000 0.000180091 1040.000000 0.00020801 1040.000000 0.000205738 1040.000000 0.000205535 1040.000000 0.00020798 1040.000000 3.05678e-08 +1060.000000 0.000179384 1060.000000 0.000207225 1060.000000 0.000204925 1060.000000 0.000204723 1060.000000 0.000207195 1060.000000 3.00271e-08 +1080.000000 0.000178715 1080.000000 0.000206482 1080.000000 0.000204149 1080.000000 0.000203949 1080.000000 0.000206452 1080.000000 2.95058e-08 +1100.000000 0.000178084 1100.000000 0.000205778 1100.000000 0.000203411 1100.000000 0.000203211 1100.000000 0.000205749 1100.000000 2.90028e-08 +1120.000000 0.000177487 1120.000000 0.000205112 1120.000000 0.000202707 1120.000000 0.000202508 1120.000000 0.000205083 1120.000000 2.85172e-08 +1140.000000 0.000176924 1140.000000 0.00020448 1140.000000 0.000202036 1140.000000 0.000201837 1140.000000 0.000204452 1140.000000 2.80481e-08 +1160.000000 0.000176392 1160.000000 0.000203883 1160.000000 0.000201395 1160.000000 0.000201198 1160.000000 0.000203855 1160.000000 2.75946e-08 +1180.000000 0.000175891 1180.000000 0.000203317 1180.000000 0.000200783 1180.000000 0.000200587 1180.000000 0.00020329 1180.000000 2.7156e-08 +1200.000000 0.000175418 1200.000000 0.000202782 1200.000000 0.000200199 1200.000000 0.000200004 1200.000000 0.000202755 1200.000000 2.67315e-08 +1220.000000 0.000174972 1220.000000 0.000202276 1220.000000 0.000199641 1220.000000 0.000199447 1220.000000 0.00020225 1220.000000 2.63205e-08 +1240.000000 0.000174553 1240.000000 0.000201797 1240.000000 0.000199107 1240.000000 0.000198915 1240.000000 0.000201771 1240.000000 2.59223e-08 +1260.000000 0.000174158 1260.000000 0.000201345 1260.000000 0.000198597 1260.000000 0.000198406 1260.000000 0.000201319 1260.000000 2.55363e-08 +1280.000000 0.000173788 1280.000000 0.000200917 1280.000000 0.00019811 1280.000000 0.00019792 1280.000000 0.000200892 1280.000000 2.5162e-08 +1300.000000 0.00017344 1300.000000 0.000200514 1300.000000 0.000197645 1300.000000 0.000197455 1300.000000 0.000200489 1300.000000 2.47988e-08 +1320.000000 0.000173114 1320.000000 0.000200133 1320.000000 0.000197201 1320.000000 0.000197011 1320.000000 0.000200109 1320.000000 2.44463e-08 +1340.000000 0.00017281 1340.000000 0.000199774 1340.000000 0.000196778 1340.000000 0.000196585 1340.000000 0.00019975 1340.000000 2.4104e-08 +1360.000000 0.000172525 1360.000000 0.000199436 1360.000000 0.000196374 1360.000000 0.000196178 1360.000000 0.000199412 1360.000000 2.37714e-08 +1380.000000 0.00017226 1380.000000 0.000199118 1380.000000 0.000195987 1380.000000 0.000195788 1380.000000 0.000199095 1380.000000 2.34481e-08 +1400.000000 0.000172013 1400.000000 0.000198819 1400.000000 0.000195616 1400.000000 0.000195416 1400.000000 0.000198796 1400.000000 2.31338e-08 +1420.000000 0.000171784 1420.000000 0.000198539 1420.000000 0.000195262 1420.000000 0.000195059 1420.000000 0.000198516 1420.000000 2.2828e-08 +1440.000000 0.000171572 1440.000000 0.000198276 1440.000000 0.000194922 1440.000000 0.000194717 1440.000000 0.000198253 1440.000000 2.25304e-08 +1460.000000 0.000171376 1460.000000 0.00019803 1460.000000 0.000194595 1460.000000 0.00019439 1460.000000 0.000198007 1460.000000 2.22408e-08 +1480.000000 0.000171197 1480.000000 0.0001978 1480.000000 0.000194282 1480.000000 0.000194076 1480.000000 0.000197778 1480.000000 2.19587e-08 +1500.000000 0.000171033 1500.000000 0.000197586 1500.000000 0.000193981 1500.000000 0.000193776 1500.000000 0.000197564 1500.000000 2.16838e-08 +1520.000000 0.000170883 1520.000000 0.000197386 1520.000000 0.000193693 1520.000000 0.000193489 1520.000000 0.000197365 1520.000000 2.1416e-08 +1540.000000 0.000170748 1540.000000 0.000197201 1540.000000 0.000193417 1540.000000 0.000193213 1540.000000 0.00019718 1540.000000 2.11549e-08 +1560.000000 0.000170626 1560.000000 0.00019703 1560.000000 0.000193152 1560.000000 0.000192949 1560.000000 0.000197009 1560.000000 2.09003e-08 +1580.000000 0.000170518 1580.000000 0.000196872 1580.000000 0.000192899 1580.000000 0.000192697 1580.000000 0.000196852 1580.000000 2.06519e-08 +1600.000000 0.000170422 1600.000000 0.000196727 1600.000000 0.000192656 1600.000000 0.000192455 1600.000000 0.000196707 1600.000000 2.04096e-08 +1620.000000 0.000170338 1620.000000 0.000196595 1620.000000 0.000192423 1620.000000 0.000192223 1620.000000 0.000196575 1620.000000 2.0173e-08 +1640.000000 0.000170267 1640.000000 0.000196474 1640.000000 0.000192201 1640.000000 0.000192001 1640.000000 0.000196454 1640.000000 1.9942e-08 +1660.000000 0.000170207 1660.000000 0.000196365 1660.000000 0.000191988 1660.000000 0.000191789 1660.000000 0.000196345 1660.000000 1.97164e-08 +1680.000000 0.000170158 1680.000000 0.000196267 1680.000000 0.000191784 1680.000000 0.000191586 1680.000000 0.000196247 1680.000000 1.9496e-08 +1700.000000 0.00017012 1700.000000 0.000196179 1700.000000 0.000191589 1700.000000 0.000191391 1700.000000 0.00019616 1700.000000 1.92806e-08 +1750.000000 0.00017007 1750.000000 0.000196005 1750.000000 0.000191137 1750.000000 0.00019094 1750.000000 0.000195986 1750.000000 1.8763e-08 +1800.000000 0.00017008 1800.000000 0.00019589 1800.000000 0.000190732 1800.000000 0.000190536 1800.000000 0.000195872 1800.000000 1.82732e-08 +1850.000000 0.000170146 1850.000000 0.00019583 1850.000000 0.00019037 1850.000000 0.000190175 1850.000000 0.000195812 1850.000000 1.78091e-08 +1900.000000 0.000170264 1900.000000 0.000195819 1900.000000 0.000190047 1900.000000 0.000189852 1900.000000 0.000195802 1900.000000 1.73686e-08 +1950.000000 0.000170431 1950.000000 0.000195855 1950.000000 0.00018976 1950.000000 0.000189566 1950.000000 0.000195839 1950.000000 1.695e-08 +2000.000000 0.000170642 2000.000000 0.000195934 2000.000000 0.000189504 2000.000000 0.000189311 2000.000000 0.000195918 2000.000000 1.65517e-08 +2100.000000 0.000171189 2100.000000 0.000196209 2100.000000 0.00018908 2100.000000 0.000188889 2100.000000 0.000196193 2100.000000 1.58101e-08 +2200.000000 0.000171883 2200.000000 0.000196621 2200.000000 0.000188756 2200.000000 0.000188566 2200.000000 0.000196606 2200.000000 1.51339e-08 +2300.000000 0.000172709 2300.000000 0.000197152 2300.000000 0.000188516 2300.000000 0.000188326 2300.000000 0.000197138 2300.000000 1.45147e-08 +2400.000000 0.000173651 2400.000000 0.000197789 2400.000000 0.000188346 2400.000000 0.000188158 2400.000000 0.000197775 2400.000000 1.39456e-08 +2500.000000 0.000174699 2500.000000 0.000198517 2500.000000 0.000188238 2500.000000 0.00018805 2500.000000 0.000198504 2500.000000 1.34205e-08 +2600.000000 0.00017584 2600.000000 0.000199327 2600.000000 0.00018818 2600.000000 0.000187994 2600.000000 0.000199314 2600.000000 1.29346e-08 +2700.000000 0.000177067 2700.000000 0.000200209 2700.000000 0.000188167 2700.000000 0.000187982 2700.000000 0.000200197 2700.000000 1.24836e-08 +2800.000000 0.000178372 2800.000000 0.000201156 2800.000000 0.000188192 2800.000000 0.000188007 2800.000000 0.000201143 2800.000000 1.20639e-08 +2900.000000 0.000179749 2900.000000 0.00020216 2900.000000 0.00018825 2900.000000 0.000188065 2900.000000 0.000202148 2900.000000 1.16722e-08 +3000.000000 0.00018119 3000.000000 0.000203215 3000.000000 0.000188336 3000.000000 0.000188152 3000.000000 0.000203204 3000.000000 1.13058e-08 diff --git a/Inputs/EventGenerator/10He.reaction b/Inputs/EventGenerator/10He.reaction index b305e585419bbdf367c5eb7d461e0a1e88b4cbd4..1987df73649f40bdf632faad34251b0c2a9d64b3 100644 --- a/Inputs/EventGenerator/10He.reaction +++ b/Inputs/EventGenerator/10He.reaction @@ -7,18 +7,19 @@ TransfertToResonance Target= 2H Light= 3He Heavy= 10He - ExcitationEnergy= 1.0 + ExcitationEnergy= 0.0 BeamEnergy= 550 BeamEnergySpread= 0 SigmaThetaX= 0.6921330164 SigmaPhiY= 0.963142053 SigmaX= 6.232 SigmaY= 9.069 - ResonanceWidth= 1.3 + ResonanceWidth= 0 ResonanceDecayZ= 2 ResonanceDecayA= 8 - CrossSectionPath= 11Li(d,3He)10He.txt + CrossSectionPath= 11Li(d,3He)10He.txt ShootLight= 1 ShootHeavy= 0 ShootDecayProduct= 0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + diff --git a/Inputs/EventGenerator/11Li.beam b/Inputs/EventGenerator/11Li.beam index 9bc69caa7725561a700d467b617aced1d599c3eb..5a06c27989f836364fc4ee579144f4e531185245 100644 --- a/Inputs/EventGenerator/11Li.beam +++ b/Inputs/EventGenerator/11Li.beam @@ -7,7 +7,7 @@ Beam ParticleZ= 3 ParticleA= 11 BeamEnergy= 550 - BeamEnergySpread= 0 + BeamEnergySpread= 10 SigmaX= 6.232 SigmaY= 9.069 SigmaThetaX= 0.6921330164 diff --git a/Inputs/EventGenerator/12Li.reaction b/Inputs/EventGenerator/12Li.reaction new file mode 100644 index 0000000000000000000000000000000000000000..72e2d4fa12c490e0e612ca4b323998c56f50ed02 --- /dev/null +++ b/Inputs/EventGenerator/12Li.reaction @@ -0,0 +1,21 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%% Reaction file for 11Li(d,3He)10He reaction %%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Beam energy given in MeV ; Excitation in MeV ; SigmaXY in mm +% SigmaThetaX/PhiY in deg +Transfert + Beam= 11Li + Target= 2H + Light= 1H + Heavy= 12Li + ExcitationEnergy= 1.0 + BeamEnergy= 550 + BeamEnergySpread= 0 + SigmaThetaX= 0.6921330164 + SigmaPhiY= 0.963142053 + SigmaX= 6.232 + SigmaY= 9.069 + CrossSectionPath= flat.txt + ShootLight= 1 + ShootHeavy= 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Inputs/EventGenerator/132Sndp.reaction b/Inputs/EventGenerator/132Sndp.reaction index 5bdb077e4d6f9240fe93c625687c05caedc0baf3..fd88541645b7aa52806ca9d3908786444a3768b9 100644 --- a/Inputs/EventGenerator/132Sndp.reaction +++ b/Inputs/EventGenerator/132Sndp.reaction @@ -10,8 +10,8 @@ Transfert ExcitationEnergy= 0.0 BeamEnergy= 1320 BeamEnergySpread= 0 - SigmaX= 2 - SigmaY= 2 + SigmaX= 0 + SigmaY= 0 SigmaThetaX= 0 SigmaPhiY= 0 CrossSectionPath= sn132dp_gs_10AMeV.txt diff --git a/Inputs/EventGenerator/132SndpTestMarcIsotropic.reaction b/Inputs/EventGenerator/132SndpTestMarcIsotropic.reaction new file mode 100644 index 0000000000000000000000000000000000000000..ccc4df42691cf921f4fc67a1b4b4fb64771b4932 --- /dev/null +++ b/Inputs/EventGenerator/132SndpTestMarcIsotropic.reaction @@ -0,0 +1,21 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%% Reaction file for 60Fe(d,p)61Fe reaction %%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%Beam energy given in MeV ; Excitation in MeV ; emmitance in rad +Transfert + Beam= 132Sn + Target= 2H + Light= 1H + Heavy= 133Sn + ExcitationEnergy= 0.0 + BeamEnergy= 1320 + BeamEnergySpread= 0 + SigmaX= 0.851 + SigmaY= 0.851 + SigmaThetaX= 0 + SigmaPhiY= 0 + CrossSectionPath= flat.txt + ShootLight= 1 + ShootHeavy= 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + diff --git a/Inputs/EventGenerator/3He.source b/Inputs/EventGenerator/3He.source new file mode 100644 index 0000000000000000000000000000000000000000..8fa0b8698412b53f993a685d44e12862aabcb8ff --- /dev/null +++ b/Inputs/EventGenerator/3He.source @@ -0,0 +1,16 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% An Isotropic Source to be used as EventGenerator %%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Energy are given in MeV , Position in mm % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Isotropic + EnergyLow= 0 + EnergyHigh= 21.6 + HalfOpenAngleMin= 0 + HalfOpenAngleMax= 90 + x0= 0 + y0= 0 + z0= 0 + particle= He3 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Supported particle type: proton, neutron, deuton, triton, He3 , alpha diff --git a/Inputs/EventGenerator/9He.reaction b/Inputs/EventGenerator/9He.reaction new file mode 100644 index 0000000000000000000000000000000000000000..6b34ff1e06157af39bbd0354056b666dab70d0be --- /dev/null +++ b/Inputs/EventGenerator/9He.reaction @@ -0,0 +1,21 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%% Reaction file for 11Li(d,3He)10He reaction %%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Beam energy given in MeV ; Excitation in MeV ; SigmaXY in mm +% SigmaThetaX/PhiY in deg +Transfert + Beam= 11Li + Target= 2H + Light= 4He + Heavy= 9He + ExcitationEnergy= 1.0 + BeamEnergy= 550 + BeamEnergySpread= 0 + SigmaThetaX= 0.6921330164 + SigmaPhiY= 0.963142053 + SigmaX= 6.232 + SigmaY= 9.069 + CrossSectionPath= flat.txt + ShootLight= 1 + ShootHeavy= 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Inputs/EventGenerator/alpha.source b/Inputs/EventGenerator/alpha.source new file mode 100644 index 0000000000000000000000000000000000000000..fd5f19e5259addc2b6bbccaeb2e2bcb97b08b3e1 --- /dev/null +++ b/Inputs/EventGenerator/alpha.source @@ -0,0 +1,16 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% An Isotropic Source to be used as EventGenerator %%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Energy are given in MeV , Position in mm % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Isotropic + EnergyLow= 0 + EnergyHigh= 21.6 + HalfOpenAngleMin= 0 + HalfOpenAngleMax= 90 + x0= 0 + y0= 0 + z0= 0 + particle= alpha +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Supported particle type: proton, neutron, deuton, triton, He3 , alpha diff --git a/Inputs/EventGenerator/deuton.source b/Inputs/EventGenerator/deuton.source new file mode 100644 index 0000000000000000000000000000000000000000..28ff1666efb0e60e12de84c1f17689826b2553a7 --- /dev/null +++ b/Inputs/EventGenerator/deuton.source @@ -0,0 +1,16 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% An Isotropic Source to be used as EventGenerator %%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Energy are given in MeV , Position in mm % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Isotropic + EnergyLow= 0 + EnergyHigh= 300 + HalfOpenAngleMin= 0 + HalfOpenAngleMax= 180 + x0= 0 + y0= 0 + z0= 0 + particle= deuteron +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Supported particle type: proton, neutron, deuton, triton, He3 , alpha diff --git a/Inputs/EventGenerator/proton.source b/Inputs/EventGenerator/proton.source new file mode 100644 index 0000000000000000000000000000000000000000..7d6828af14458abf06c597070fb1f298db90a9a8 --- /dev/null +++ b/Inputs/EventGenerator/proton.source @@ -0,0 +1,16 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% An Isotropic Source to be used as EventGenerator %%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Energy are given in MeV , Position in mm % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Isotropic + EnergyLow= 0 + EnergyHigh= 300 + HalfOpenAngleMin= 0 + HalfOpenAngleMax= 180 + x0= 0 + y0= 0 + z0= 0 + particle= proton +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Supported particle type: proton, neutron, deuton, triton, He3 , alpha diff --git a/Inputs/EventGenerator/triton.source b/Inputs/EventGenerator/triton.source new file mode 100644 index 0000000000000000000000000000000000000000..1caa9f45a6eab9f1e03e8057f0a92eba88819889 --- /dev/null +++ b/Inputs/EventGenerator/triton.source @@ -0,0 +1,16 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% An Isotropic Source to be used as EventGenerator %%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Energy are given in MeV , Position in mm % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Isotropic + EnergyLow= 0 + EnergyHigh= 300 + HalfOpenAngleMin= 0 + HalfOpenAngleMax= 180 + x0= 0 + y0= 0 + z0= 0 + particle= triton +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Supported particle type: proton, neutron, deuton, triton, He3 , alpha diff --git a/NPAnalysis/10He_Riken/Analysis b/NPAnalysis/10He_Riken/Analysis deleted file mode 100755 index 7a15c0ec1ee2c7c99032279403bdbfc030232674..0000000000000000000000000000000000000000 Binary files a/NPAnalysis/10He_Riken/Analysis and /dev/null differ diff --git a/NPAnalysis/10He_Riken/include/DetectorManager.hh b/NPAnalysis/10He_Riken/include/DetectorManager.hh deleted file mode 100644 index eb49f01ef92509cd0531f4f12c7eace833047e61..0000000000000000000000000000000000000000 --- a/NPAnalysis/10He_Riken/include/DetectorManager.hh +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef DetectorManager_h -#define DetectorManager_h - -// NPL -#include "VDetector.h" - -// STL -#include <string> -#include <map> - -using namespace std ; -using namespace NPA ; - -// This class manage a map of virtual detector - -class DetectorManager - { - public: - DetectorManager() ; - ~DetectorManager() ; - - public: - // Read stream at Path and pick-up Token declaration of Detector - void ReadConfigurationFile(string Path) ; - void BuildPhysicalEvent() ; - void BuildSimplePhysicalEvent() ; - void InitializeRootInput() ; - void InitializeRootOutput() ; - void AddDetector(string,VDetector*) ; - void ClearEventPhysics() ; - void ClearEventData() ; - - public: // The map containning all detectors - // Using a Map one can access to any detector using its name - map<string,VDetector*> m_Detector ; - - }; - -#endif diff --git a/NPAnalysis/10He_Riken/include/ObjectManager.hh b/NPAnalysis/10He_Riken/include/ObjectManager.hh index 8d2739151bf089ed4af970bb3bb3d7f29cc583e0..336fb8c7142848ae3f053a591911a9684948e3f2 100644 --- a/NPAnalysis/10He_Riken/include/ObjectManager.hh +++ b/NPAnalysis/10He_Riken/include/ObjectManager.hh @@ -6,8 +6,7 @@ // -------------------------------------- VARIOUS INCLUDE --------------------------------------- // NPA -#include "DetectorManager.hh" -#include "Must2Array.h" +#include "DetectorManager.h" // STL C++ #include <iostream> @@ -16,6 +15,7 @@ #include <string> #include <cmath> #include <cstdlib> +#include <time.h> // ROOT #include <TROOT.h> @@ -26,12 +26,14 @@ #include <TRandom.h> // NPL -#include "TMust2Data.h" -#include "TMust2Physics.h" +#include "TPlasticData.h" #include "NPReaction.h" #include "RootInput.h" #include "RootOutput.h" #include "TInitialConditions.h" +#include "TMust2Physics.h" +#include "TSSSDPhysics.h" +#include "TPlasticPhysics.h" // Use CLHEP System of unit and Physical Constant #include "CLHEP/Units/GlobalSystemOfUnits.h" @@ -104,41 +106,68 @@ using namespace NPL ; namespace ENERGYLOSS { - // 3He Energy Loss - EnergyLoss He3TargetWind = EnergyLoss ( "3He_Mylar.txt" , - 1000 , - 1 , - 3 ); + + // 3He Energy Loss + EnergyLoss He3TargetWind = EnergyLoss ( "He3_Mylar.G4table" , + "G4Table", + 10000 ); - EnergyLoss He3TargetGaz = EnergyLoss ( "3He_D2gaz_1b_26K.txt" , - 1000 , - 1 , - 3 ); + EnergyLoss He3TargetGaz = EnergyLoss ( "He3_D2.G4table" , + "G4Table", + 10000 ); EnergyLoss He3StripAl = EnergyLoss ( "3He_Al.txt" , - 10 , - 1 , - 3 ); + "LISE", + 10000 , + 1 , + 3 ); EnergyLoss He3StripSi = EnergyLoss ( "3He_Si.txt" , - 10 , - 1 , - 3 ); + "LISE", + 10000 , + 1 , + 3 ); + + + +// // 3He Energy Loss +// EnergyLoss He3TargetWind = EnergyLoss ( "3He_Mylar.txt" , +// 10000 , +// 1 , +// 3 ); +// +// EnergyLoss He3TargetGaz = EnergyLoss ( "3He_D2gaz_1b_26K.txt" , +// 10000 , +// 1 , +// 3 ); +// +// EnergyLoss He3StripAl = EnergyLoss ( "3He_Al.txt" , +// 10000 , +// 1 , +// 3 ); +// +// EnergyLoss He3StripSi = EnergyLoss ( "3He_Si.txt" , +// 10000 , +// 1 , +// 3 ); // proton Energy Loss EnergyLoss protonTargetWind = EnergyLoss ( "proton_Mylar.txt" , + "LISE", 1000 , - 1 , + 1 , 1 ); EnergyLoss protonTargetGaz = EnergyLoss ( "proton_D2gaz_1b_26K.txt" , + "LISE", 1000 , - 1 , + 1 , 1 ); EnergyLoss protonStripAl = EnergyLoss ( "proton_Al.txt" , - 10 , + "LISE", + 100 , 1 , 1 ); diff --git a/NPAnalysis/10He_Riken/src/Analysis.cc b/NPAnalysis/10He_Riken/src/Analysis.cc index b51e713f1c3a6e1c1131ddf4364b57db83f84a74..ed1a372c4b79fa6f9a43e552785d8beb9bd4eb98 100644 --- a/NPAnalysis/10He_Riken/src/Analysis.cc +++ b/NPAnalysis/10He_Riken/src/Analysis.cc @@ -13,196 +13,254 @@ int main(int argc,char** argv) return 0; } - string reactionfileName = argv[1] ; - string detectorfileName = argv[2] ; - string runToReadfileName = argv[3] ; + string detectorfileName = argv[1] ; + string calibrationfileName = argv[2] ; + string runToReadfileName = argv[3] ; // First of All instantiate RootInput and Output // Detector will be attached later RootInput:: getInstance(runToReadfileName) ; RootOutput::getInstance("Analysis/10HeRiken_AnalyzedData", "AnalyzedTree") ; - // Instantiate a Reaction - NPL::Reaction* myReaction = new Reaction ; - myReaction -> ReadConfigurationFile(reactionfileName) ; + // Instantiate some Reaction + NPL::Reaction* He10Reaction = new Reaction ; + He10Reaction -> ReadConfigurationFile("10He.reaction") ; - // Instantiate the detector using a file - DetectorManager* myDetector = new DetectorManager ; + NPL::Reaction* Li10Reaction = new Reaction ; + Li10Reaction -> ReadConfigurationFile("9Li-dp-10Li.reaction") ; + + // Instantiate the detector using a file + NPA::DetectorManager* myDetector = new DetectorManager ; myDetector -> ReadConfigurationFile(detectorfileName) ; + + // Instantiate the Calibration Manger using a file + CalibrationManager* myCalibration = new CalibrationManager(calibrationfileName) ; // Attach more branch to the output - double ThinSi=-1 ;double Ex = 0 ; double EE = 0 ; double TT = 0 ; double X = 0 ; double Y = 0 ; int det ; double ResolThetaCM=0; - double ThetaCM=0; - RootOutput::getInstance()->GetTree()->Branch("ExcitationEnergy",&Ex,"Ex/D") ; - RootOutput::getInstance()->GetTree()->Branch("E",&EE,"EE/D") ; - RootOutput::getInstance()->GetTree()->Branch("A",&TT,"TT/D") ; - RootOutput::getInstance()->GetTree()->Branch("X",&X,"X/D") ; - RootOutput::getInstance()->GetTree()->Branch("Y",&Y,"Y/D") ; - RootOutput::getInstance()->GetTree()->Branch("ThinSi_E",&ThinSi,"ThinSi/D") ; - RootOutput::getInstance()->GetTree()->Branch("ThetaCM",&ThetaCM,"ThetaCM/D") ; - RootOutput::getInstance()->GetTree()->Branch("ResolThetaCM",&ResolThetaCM,"ResolThetaCM/D") ; + + double ELab[2], ExcitationEnergy[2] ; + double ThetaLab[2] , ThetaCM[2] ; + double X[2] , Y[2] ; + + // Exitation Energy + RootOutput::getInstance()->GetTree()->Branch("ExcitationEnergy",ExcitationEnergy,"ExcitationEnergy[2]/D") ; + + //E lab et Theta lab + RootOutput::getInstance()->GetTree()->Branch("ThetaCM",ThetaCM,"ThetaCM[2]/D") ; + RootOutput::getInstance()->GetTree()->Branch("ELab",ELab,"ELab[2]/D") ; + RootOutput::getInstance()->GetTree()->Branch("ThetaLab",ThetaLab,"ThetaLab[2]/D") ; + RootOutput::getInstance()->GetTree()->Branch("X",X,"X/D[2]") ; + RootOutput::getInstance()->GetTree()->Branch("Y",Y,"Y/D[2]") ; + + // Get the formed Chained Tree and Treat it TChain* Chain = RootInput:: getInstance() -> GetChain() ; - + // Open the ThinSi Branch - Chain->SetBranchStatus("ThinSiEnergy",true) ; Chain->SetBranchStatus("InitialConditions",true) ; Chain->SetBranchStatus("fIC_*",true) ; - - TInitialConditions* Init = new TInitialConditions(); - Chain->SetBranchAddress("ThinSiEnergy" ,&ThinSi ); + + TInitialConditions* Init = new TInitialConditions(); Chain->SetBranchAddress("InitialConditions" ,&Init ); - - double XTarget=0 ; double YTarget=0; double BeamTheta = 0 ; double BeamPhi = 0 ; double E=-1000; + double XTarget=0 ; double YTarget=0; double BeamTheta = 0 ; double BeamPhi = 0 ; double E=-1000; - // Get Must2 Pointer: - MUST2Array* M2 = (MUST2Array*) myDetector -> m_Detector["MUST2"] ; + // Get Detector Pointer: + TMust2Physics* M2 = (TMust2Physics*) myDetector -> m_Detector["MUST2"] ; + TPlasticPhysics* Pl = (TPlasticPhysics*) myDetector -> m_Detector["Plastic"] ; + TSSSDPhysics* ThinSi = (TSSSDPhysics*) myDetector -> m_Detector["SSSD"] ; + cout << " ///////// Starting Analysis ///////// "<< endl << endl ; + + int i ,N=Chain -> GetEntries(); + + cout << " Number of Event to be treated : " << N << endl ; - int i; - for ( i = 0 ; i < Chain -> GetEntries() ; i ++ ) + clock_t begin=clock(); + clock_t end=begin; + for ( i = 0 ; i < N ; i ++ ) { - if( i%10000 == 0 && i!=0) cout << i << " Event annalysed " << endl ; + // Clear local branch + for(int hh = 0 ; hh <2 ; hh++) + { + ELab[hh] = -1 ; ExcitationEnergy[hh] = -1 ; ThetaLab[hh] = -1 ; + X[hh] = -1000 ; Y[hh] = -1000 ; ThetaCM[hh] = -1 ; + } + + // Minimum code + if( i%10000 == 0 && i!=0) { + cout.precision(5); + end=clock(); + double TimeElapsed = (end-begin)/CLOCKS_PER_SEC; + double percent = (double)i/N ; + double TimeToWait = (TimeElapsed/percent) - TimeElapsed ; + cout << "\r Progression:" << percent*100 + << " % \t | \t Remaining time : ~" + << TimeToWait <<"s"<< flush; + } + + else if (i==N-1) cout << "\r Progression:" + << " 100% " <<endl; + Chain -> GetEntry(i); + // Clear Previous Event myDetector -> ClearEventPhysics() ; + // Build the new one myDetector -> BuildPhysicalEvent() ; + //// + - E = M2 -> GetEnergyDeposit(); - XTarget = Init->GetICPositionX(0); - YTarget = Init->GetICPositionY(0); -// XTarget = RandomEngine.Gaus(Init->GetICPositionX(0),1); -// YTarget = RandomEngine.Gaus(Init->GetICPositionY(0),1); - TVector3 HitDirection = M2 -> GetPositionOfInteraction() - TVector3(XTarget,YTarget,0); -// BeamTheta = RandomEngine.Gaus( Init->GetICIncidentAngleTheta(0)*deg , 2*deg ) ; -// BeamPhi = RandomEngine.Gaus( Init->GetICIncidentAnglePhi(0)*deg , 2*deg ) ; - + // Target (from initial condition) + XTarget = Init->GetICPositionX(0); + YTarget = Init->GetICPositionY(0); + // XTarget = RandomEngine.Gaus(Init->GetICPositionX(0),1); + // YTarget = RandomEngine.Gaus(Init->GetICPositionY(0),1); BeamTheta = Init->GetICIncidentAngleTheta(0)*deg ; BeamPhi = Init->GetICIncidentAnglePhi(0)*deg ; - - TVector3 BeamDirection = TVector3(cos(BeamPhi)*sin(BeamTheta) , sin(BeamPhi)*sin(BeamTheta) , cos(BeamTheta)) ; - // Angle between beam and particle - double Theta = ThetaCalculation ( HitDirection , BeamDirection ) ; - // Angle between particule and z axis (target Normal) - double ThetaN = ThetaCalculation ( HitDirection , TVector3(0,0,1) ) ; - // ANgle between particule and Must2 Si surface - double ThetaMM2Surface = ThetaCalculation ( HitDirection , M2 -> GetTelescopeNormal() ); - if(M2 -> GetPositionOfInteraction().Z()>0) + TVector3 BeamDirection = TVector3(cos(BeamPhi)*sin(BeamTheta) , sin(BeamPhi)*sin(BeamTheta) , cos(BeamTheta)) ; + //// + + // Must 2 And ThinSi // + //for(int hit = 0; hit < M2 -> GetEventMultiplicity() ; hit ++) + for(int hit = 0; hit < M2 -> Si_E.size() ; hit ++) { - if(E>-1000 && ThinSi>0 ) - { - E= He3StripAl.EvaluateInitialEnergy( E , // Energy of the detected particle - 2*0.4*micrometer , // Target Thickness at 0 degree - ThetaMM2Surface ); - - E= He3StripSi.EvaluateInitialEnergy( E , // Energy of the detected particle - 20*micrometer , // Target Thickness at 0 degree - ThetaMM2Surface ); - -// E = E + ThinSi ; - - E= He3StripAl.EvaluateInitialEnergy( E , // Energy of the detected particle - 0.4*micrometer , // Target Thickness at 0 degree - ThetaMM2Surface ); + ELab[hit] = -1 ; ThetaLab[hit] = -1; + // Get Hit Direction + TVector3 HitDirection = M2 -> GetPositionOfInteraction(hit) - TVector3(XTarget,YTarget,0); + + // Angle between beam and particle + ThetaLab[hit] = ThetaCalculation ( HitDirection , BeamDirection ) ; + // Angle between particule and z axis (target Normal) + double ThetaN = ThetaCalculation ( HitDirection , TVector3(0,0,1) ) ; + // ANgle between particule and Must2 Si surface + double ThetaMM2Surface = ThetaCalculation ( HitDirection , M2 -> GetTelescopeNormal(hit) ); - // cout << E << " " << Eb-E << " " << ThinSi << endl ; + if(M2 -> GetPositionOfInteraction(hit).Z() > 0) + { + if( M2 -> CsI_E[hit] == 0 && M2 -> Si_E[hit] > 0) + { + ELab[hit] = M2 -> Si_E[hit] ; + + ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 2*0.4*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); - E= He3TargetWind.EvaluateInitialEnergy( E , // Energy of the detected particle - 15*micrometer , // Target Thickness at 0 degree - ThetaN ); - - E= He3TargetGaz.EvaluateInitialEnergy( E , // Energy of the detected particle - 1.5*mm , // Target Thickness at 0 degree - ThetaN ); + +// ELab[hit]= He3StripSi.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle +// 20*micrometer , // Target Thickness at 0 degree +// ThetaMM2Surface ); + + if(ThinSi -> Energy.size() > 0)ELab[hit] += ThinSi-> Energy[hit]; + + ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 0.4*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); + + ELab[hit]= He3TargetWind.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 15*micrometer , // Target Thickness at 0 degree + ThetaN ); - ThetaCM = myReaction -> EnergyLabToThetaCM( E , 1 ) /deg ; - ResolThetaCM =ThetaCM - Init->GetICEmittedAngleThetaCM(0) ; - Ex = myReaction -> ReconstructRelativistic( E , Theta ) ; - X = HitDirection . X(); - Y = HitDirection . Y(); - } - - else if(E>-1000 ) - { - if(E>18)//CsI are inside a Mylar foil, plus rear alu strip - { - // E= He3TargetWind.EvaluateInitialEnergy( E , // Energy of the detected particle - // 3*micrometer , // Target Thickness at 0 degree - // ThetaMM2Surface ); - E= He3StripAl.EvaluateInitialEnergy( E , // Energy of the detected particle - 0.4*micrometer , // Target Thickness at 0 degree - ThetaMM2Surface ); - } - - E= He3StripAl.EvaluateInitialEnergy( E , // Energy of the detected particle - 0.4*micrometer , // Target Thickness at 0 degree - ThetaMM2Surface ); - - E= He3TargetWind.EvaluateInitialEnergy( E , // Energy of the detected particle - 15*micrometer , // Target Thickness at 0 degree - ThetaN ); - - E= He3TargetGaz.EvaluateInitialEnergy( E , // Energy of the detected particle - 1.5*mm , // Target Thickness at 0 degree - ThetaN ); - ThetaCM = myReaction -> EnergyLabToThetaCM( E , 1 ) /deg ; - Ex = myReaction -> ReconstructRelativistic( E, Theta ) ; - X = HitDirection . X(); - Y = HitDirection . Y(); - - } - - else {Ex=-100 ; X = -100 ; Y = -100 ;} - - } - - if(M2 -> GetPositionOfInteraction().Z()<0) - { - - if(E>-1000 ) - { - if(E>18) - { - E= protonStripAl.EvaluateInitialEnergy( E , // Energy of the detected particle - 0.4*micrometer , // Target Thickness at 0 degree - ThetaMM2Surface ); - } - - E= protonStripAl.EvaluateInitialEnergy( E , // Energy of the detected particle - 0.4*micrometer , // Target Thickness at 0 degree - ThetaMM2Surface ); + ELab[hit]= He3TargetGaz.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 1.5*mm , // Target Thickness at 0 degree + ThetaN ); + + ThetaCM[hit] = He10Reaction -> EnergyLabToThetaCM( ELab[hit] ) /deg ; + ExcitationEnergy[hit] = He10Reaction -> ReconstructRelativistic( ELab[hit] , ThetaLab[hit] ) ; + X[hit] = HitDirection . X(); + Y[hit] = HitDirection . Y(); + ThetaLab[hit] = ThetaLab[hit] / deg ; + } + + else if(M2 ->CsI_E[hit] > 0 && M2 -> Si_E[hit] > 0) + { - E= protonTargetWind.EvaluateInitialEnergy( E , // Energy of the detected particle - 15*micrometer , // Target Thickness at 0 degree - ThetaN ); + ELab[hit]= M2 ->CsI_E[hit] ; + + ELab[hit]= He3TargetWind.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 3*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); + + ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 0.4*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); + ELab[hit]+= M2 ->Si_E[hit]; + + ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 0.4*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); + + if(ThinSi -> Energy.size() > 0)ELab[hit] += ThinSi-> Energy[hit]; + + + ELab[hit]= He3StripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 0.4*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); + + ELab[hit]= He3TargetWind.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 15*micrometer , // Target Thickness at 0 degree + ThetaN ); + + ELab[hit]= He3TargetGaz.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 1.5*mm , // Target Thickness at 0 degree + ThetaN ); + + ThetaCM[hit]= He10Reaction -> EnergyLabToThetaCM( ELab[hit] ) /deg ; + ExcitationEnergy[hit] = He10Reaction -> ReconstructRelativistic( ELab[hit], ThetaLab[hit] ) ; + X[hit] = HitDirection . X(); + Y[hit] = HitDirection . Y(); + ThetaLab[hit] = ThetaLab[hit] / deg ; + } + + else {ExcitationEnergy[hit]=-100 ; X[hit] = -100 ; Y[hit]= -100 ; ThetaLab[hit]=-100;ThetaCM[hit]=-100;} - E= protonTargetGaz.EvaluateInitialEnergy( E , // Energy of the detected particle - 1.5*mm , // Target Thickness at 0 degree - ThetaN ); - ThetaCM = myReaction -> EnergyLabToThetaCM( E , 1 ) /deg ; - Ex = myReaction -> ReconstructRelativistic( E, Theta ) ; - X = HitDirection . X(); - Y = HitDirection . Y(); - - } - - else {Ex=-100 ; X = -100 ; Y = -100 ;} - - } - + } + + /*else if(M2 -> GetPositionOfInteraction(hit).Z()<0) + { + + if(ELab[hit]>-1000 ) + { + if(ELab[hit]>18) + { + ELab[hit]= protonStripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 0.4*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); + } + + ELab[hit]= protonStripAl.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 0.4*micrometer , // Target Thickness at 0 degree + ThetaMM2Surface ); + + ELab[hit]= protonTargetWind.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 15*micrometer , // Target Thickness at 0 degree + ThetaN ); - EE = E ; TT = Theta/deg ; + ELab[hit]= protonTargetGaz.EvaluateInitialEnergy( ELab[hit] , // Energy of the detected particle + 1.5*mm , // Target Thickness at 0 degree + ThetaN ); + ThetaCM[hit] = myReaction -> EnergyLabToThetaCM( ELab[hit] , 1 ) /deg ; + ExcitationEnergy[hit] = myReaction -> ReconstructRelativistic( ELab[hit], ThetaLab[hit] ) ; + X[hit] = HitDirection . X(); + Y[hit] = HitDirection . Y(); + ThetaLab[hit] = ThetaLab[hit] / deg ; + } + + else {ExcitationEnergy[hit]=-100 ; X[hit] = -100 ; Y[hit] = -100 ;ThetaLab[hit]=-100; ThetaCM[hit]=-100 ;} + + } */ + + + } RootOutput::getInstance()->GetTree()->Fill() ; - ThinSi = -1 ; } - cout << "A total of " << i << " event has been annalysed " << endl ; - + + cout << " A total of " << i << " event has been annalysed " << endl ; + cout << endl << " ///////////////////////////////////// "<< endl<< endl ; RootOutput::getInstance()->Destroy(); return 0 ; } - double ThetaCalculation (TVector3 A , TVector3 B) { double Theta = acos( (A.Dot(B)) / (A.Mag()*B.Mag()) ) ; diff --git a/NPAnalysis/10He_Riken/src/DetectorManager.cc b/NPAnalysis/10He_Riken/src/DetectorManager.cc deleted file mode 100644 index 000d61fe3827077359d77aa4c4f2af460364fbfd..0000000000000000000000000000000000000000 --- a/NPAnalysis/10He_Riken/src/DetectorManager.cc +++ /dev/null @@ -1,228 +0,0 @@ -#include "DetectorManager.hh" - -// STL -#include <iostream> -#include <fstream> -#include <cstdlib> - -// Detector -#include "Must2Array.h" - -///////////////////////////////////////////////////////////////////////////////////////////////// -// Default Constructor and Destructor -DetectorManager::DetectorManager() - {} - -///////////////////////////////////////////////////////////////////////////////////////////////// -DetectorManager::~DetectorManager() - {} - - -///////////////////////////////////////////////////////////////////////////////////////////////// -// Read stream at ConfigFile and pick-up Token declaration of Detector -void DetectorManager::ReadConfigurationFile(string Path) - { - ////////General Reading needs//////// - string LineBuffer; - string DataBuffer; - - /////////Boolean//////////////////// - bool MUST2 = false ; - bool AddThinSi = false ; - bool GeneralTarget = false ; - bool GPDTracker = false ; // Gaspard Tracker - ////////////////////////////////////////////////////////////////////////////////////////// - // added by Nicolas [07/05/09] - string GlobalPath = getenv("NPTOOL"); - Path = GlobalPath + "/Inputs/DetectorConfiguration/" + Path; - ifstream ConfigFile; - ConfigFile.open(Path.c_str()); - - if (ConfigFile.is_open()) - { - cout << "/////////////////////////////" << endl; - cout << " Configuration file " << Path << " loading " << endl; - } - - else - { - cout << " Error, no configuration file" << Path << " found" << endl; - return; - } - - - while (!ConfigFile.eof()) { - //Pick-up next line - getline(ConfigFile, LineBuffer); - //Search for comment Symbol: % - if (LineBuffer.compare(0, 1, "%") == 0) { /*Do Nothing*/ ;} - - /* //////////////////////////////////////////// - //////////// Search for Gaspard //////////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) { - GPDTracker = true ; - cout << "//////// Gaspard Tracker ////////" << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new GaspardTracker() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector(myDetector) ; - }*/ - - //////////////////////////////////////////// - //////// Search for MUST2 Array //////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) { - MUST2 = true ; - cout << "//////// MUST2 Array ////////" << endl << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new MUST2Array() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector("MUST2" , myDetector) ; - } - - /* //////////////////////////////////////////// - ////////// Search for Add.ThinSi /////////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) { - AddThinSi = true ; - cout << "//////// Thin Si ////////" << endl << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new ThinSi() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector(myDetector) ; - } - - //////////////////////////////////////////// - //////////// Search for Target ///////////// - //////////////////////////////////////////// - - else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) { - GeneralTarget = true ; - cout << "////////// Target ///////////" << endl << endl ; - - // Instantiate the new array as a VDetector Objects - VDetector* myDetector = new Target() ; - - // Read Position and target specification - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - m_TargetThickness = ((Target*)myDetector)->GetTargetThickness() ; - m_TargetRadius = ((Target*)myDetector)->GetTargetRadius() ; - m_TargetX = ((Target*)myDetector)->GetTargetX() ; - m_TargetY = ((Target*)myDetector)->GetTargetY() ; - m_TargetZ = ((Target*)myDetector)->GetTargetZ() ; - - // Add target to the VDetector Vector - AddDetector(myDetector) ; - }*/ - - //Nothing understandable - //else ; - } - - ConfigFile.close(); - - InitializeRootInput(); - InitializeRootOutput(); - - return ; - } - -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::BuildPhysicalEvent() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->BuildPhysicalEvent() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::BuildSimplePhysicalEvent() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->BuildSimplePhysicalEvent() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::InitializeRootInput() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->InitializeRootInput() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::InitializeRootOutput() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->InitializeRootOutput() ; - } - - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::AddDetector(string DetectorName , VDetector* newDetector) - { - m_Detector["MUST2"] = newDetector ; - } -///////////////////////////////////////////////////////////////////////////////////////////////// -void DetectorManager::ClearEventPhysics() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->ClearEventPhysics() ; - } - - } -///////////////////////////////////////////////////////////////////////////////////////////////// -void DetectorManager::ClearEventData() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->ClearEventData() ; - } - - } - diff --git a/NPAnalysis/10He_Riken/src/GNUmakefile b/NPAnalysis/10He_Riken/src/GNUmakefile index 15a9a7a10e9dc1d50489b0a14210d6697621466d..28c404622cec4d40b2e93aa0009fc4fc4fa97d26 100644 --- a/NPAnalysis/10He_Riken/src/GNUmakefile +++ b/NPAnalysis/10He_Riken/src/GNUmakefile @@ -16,10 +16,7 @@ CXXFLAGS += -I$(NPAINCLUDES) CXXFLAGS += -I$(NPLIB)/include LDFLAGS = `root-config --libs` -lMathMore -LDFLAGS+= -L$(NPLIB)/lib -lVDetector -lIORoot -lReaction -lEnergyLoss \ - -lMust2Data -lMust2Physics \ - -lAnnularS1Data -lGaspardData \ - -lInitialConditions -lInteractionCoordinates +LDFLAGS+= `$(NPLIB)/liblist` LDFLAGS+= -L$(CLHEP_LIB_DIR) -l$(CLHEP_LIB) SRC= $(wildcard *.cc) diff --git a/NPAnalysis/Gaspard/RunToTreat.txt b/NPAnalysis/Gaspard/RunToTreat.txt index 008354fd1b9fa2d1c15477a463be1e2bf76a6b7e..5e6a3389381c7b3d88643f0ffc3311d201f72d07 100644 --- a/NPAnalysis/Gaspard/RunToTreat.txt +++ b/NPAnalysis/Gaspard/RunToTreat.txt @@ -2,3 +2,4 @@ TTreeName SimulatedTree RootFileName ../../Outputs/Simulation/mySimul.root +% ../../Outputs/Simulation/sn132dp_10MeVA_T1_B0_E0.root diff --git a/NPAnalysis/Gaspard/include/DetectorManager.hh b/NPAnalysis/Gaspard/include/DetectorManager.hh deleted file mode 100644 index eb49f01ef92509cd0531f4f12c7eace833047e61..0000000000000000000000000000000000000000 --- a/NPAnalysis/Gaspard/include/DetectorManager.hh +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef DetectorManager_h -#define DetectorManager_h - -// NPL -#include "VDetector.h" - -// STL -#include <string> -#include <map> - -using namespace std ; -using namespace NPA ; - -// This class manage a map of virtual detector - -class DetectorManager - { - public: - DetectorManager() ; - ~DetectorManager() ; - - public: - // Read stream at Path and pick-up Token declaration of Detector - void ReadConfigurationFile(string Path) ; - void BuildPhysicalEvent() ; - void BuildSimplePhysicalEvent() ; - void InitializeRootInput() ; - void InitializeRootOutput() ; - void AddDetector(string,VDetector*) ; - void ClearEventPhysics() ; - void ClearEventData() ; - - public: // The map containning all detectors - // Using a Map one can access to any detector using its name - map<string,VDetector*> m_Detector ; - - }; - -#endif diff --git a/NPAnalysis/Gaspard/include/ObjectManager.hh b/NPAnalysis/Gaspard/include/ObjectManager.hh index 87249677afccc0f2904ba9a871236176453ee7af..191fc0ab66fa0f75d2115fa8faa9cfe640da111a 100644 --- a/NPAnalysis/Gaspard/include/ObjectManager.hh +++ b/NPAnalysis/Gaspard/include/ObjectManager.hh @@ -6,7 +6,7 @@ // -------------------------------------- VARIOUS INCLUDE --------------------------------------- // NPA -#include "DetectorManager.hh" +#include "DetectorManager.h" #include "GaspardTracker.h" // STL C++ @@ -102,15 +102,13 @@ using namespace CUT ; #include "NPEnergyLoss.h" using namespace NPL ; namespace ENERGYLOSS - { - - // Declare your Energy loss here : - /* EnergyLoss ProtonTarget = EnergyLoss ( "CD2.txt" , - 100 , - 1 ); - */ - } - +{ + // Declare your Energy loss here +// EnergyLoss LightTargetCD2 = EnergyLoss("proton_cd2.txt", 100, 1, 1); // LISE++ + EnergyLoss LightTarget = EnergyLoss("proton_CD2.G4table", 100); // G4 +// EnergyLoss BeamTarget = EnergyLoss("proton_CD2.G4table", 100); // G4 +} + using namespace ENERGYLOSS ; // ---------------------------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/NPAnalysis/Gaspard/src/Analysis.cc b/NPAnalysis/Gaspard/src/Analysis.cc index 8e4125f0c3da2b5d3ee6dfb94cbf727d318edf8f..de68ee321311d095603b63d79429405bd6c92e7c 100644 --- a/NPAnalysis/Gaspard/src/Analysis.cc +++ b/NPAnalysis/Gaspard/src/Analysis.cc @@ -26,13 +26,20 @@ int main(int argc,char** argv) NPL::Reaction* myReaction = new Reaction(); myReaction->ReadConfigurationFile(reactionfileName); + // set energy beam at target middle + myReaction->SetBeamEnergy(1292); + // Initialize the detector - DetectorManager* myDetector = new DetectorManager; + NPA::DetectorManager* myDetector = new DetectorManager; myDetector->ReadConfigurationFile(detectorfileName); + // Print target thickness + cout << myDetector->GetTargetThickness() << endl; + // Attach more branch to the output - double Ex = 0 ; double EE = 0 ; double TT = 0 ; double X = 0 ; double Y = 0 ; int det ; + double Ex = 0 ; double ExNoStrips = 0 ; double EE = 0 ; double TT = 0 ; double X = 0 ; double Y = 0 ; int det ; RootOutput::getInstance()->GetTree()->Branch("ExcitationEnergy",&Ex,"Ex/D") ; + RootOutput::getInstance()->GetTree()->Branch("ExcitationEnergyNoStrips",&ExNoStrips,"ExNoStrips/D") ; RootOutput::getInstance()->GetTree()->Branch("E",&EE,"EE/D") ; RootOutput::getInstance()->GetTree()->Branch("A",&TT,"TT/D") ; RootOutput::getInstance()->GetTree()->Branch("X",&X,"X/D") ; @@ -54,7 +61,7 @@ int main(int argc,char** argv) cout << "Number of entries to be analysed: " << nentries << endl; for (int i = 0; i < nentries; i ++) { - if (i%10000 == 0 && i!=0) cout << i << " analysed events" << endl; + if (i%10000 == 0 && i!=0) cout << "\r" << i << " analyzed events" << flush; chain -> GetEntry(i); // Treat Gaspard event @@ -76,15 +83,22 @@ int main(int argc,char** argv) // Calculate scattering angle ThetaStrip = ThetaCalculation (A ,TVector3(0,0,1)); + // Correct for energy loss in the target + E = LightTarget.EvaluateInitialEnergy(E, 5.15*micrometer, ThetaStrip); + // Calculate excitation energy if (Theta/deg > 90) { -// Ex = myReaction->ReconstructRelativistic(E, Theta / rad); - Ex = myReaction->ReconstructRelativistic(E, ThetaStrip); + ExNoStrips = myReaction->ReconstructRelativistic(E, Theta / rad); + Ex = myReaction->ReconstructRelativistic(E, ThetaStrip); + } + else { + Ex = -200; + ExNoStrips = -200; } - else Ex = -200; } else { - Ex = -100; + Ex = -100; + ExNoStrips = -100; } EE = E ; TT = ThetaStrip/deg; diff --git a/NPAnalysis/Gaspard/src/DetectorManager.cc b/NPAnalysis/Gaspard/src/DetectorManager.cc deleted file mode 100644 index 93bbbd699e84eaacedecc00f80499a4608e9a676..0000000000000000000000000000000000000000 --- a/NPAnalysis/Gaspard/src/DetectorManager.cc +++ /dev/null @@ -1,229 +0,0 @@ -#include "DetectorManager.hh" - -// STL -#include <iostream> -#include <fstream> -#include <cstdlib> - -// Detector -#include "Must2Array.h" -#include "GaspardTracker.h" - -///////////////////////////////////////////////////////////////////////////////////////////////// -// Default Constructor and Destructor -DetectorManager::DetectorManager() - {} - -///////////////////////////////////////////////////////////////////////////////////////////////// -DetectorManager::~DetectorManager() - {} - - -///////////////////////////////////////////////////////////////////////////////////////////////// -// Read stream at ConfigFile and pick-up Token declaration of Detector -void DetectorManager::ReadConfigurationFile(string Path) - { - ////////General Reading needs//////// - string LineBuffer; - string DataBuffer; - - /////////Boolean//////////////////// - bool MUST2 = false ; - bool AddThinSi = false ; - bool GeneralTarget = false ; - bool GPDTracker = false ; // Gaspard Tracker - ////////////////////////////////////////////////////////////////////////////////////////// - // added by Nicolas [07/05/09] - string GlobalPath = getenv("NPTOOL"); - Path = GlobalPath + "/Inputs/DetectorConfiguration/" + Path; - ifstream ConfigFile; - ConfigFile.open(Path.c_str()); - - if (ConfigFile.is_open()) - { - cout << "/////////////////////////////" << endl; - cout << " Configuration file " << Path << " loading " << endl; - } - - else - { - cout << " Error, no configuration file" << Path << " found" << endl; - return; - } - - - while (!ConfigFile.eof()) { - //Pick-up next line - getline(ConfigFile, LineBuffer); - //Search for comment Symbol: % - if (LineBuffer.compare(0, 1, "%") == 0) { /*Do Nothing*/ ;} - - //////////////////////////////////////////// - //////////// Search for Gaspard //////////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) { - GPDTracker = true ; - cout << "//////// Gaspard Tracker ////////" << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new GaspardTracker() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector("GASPARD", myDetector) ; - } - - //////////////////////////////////////////// - //////// Search for MUST2 Array //////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) { - MUST2 = true ; - cout << "//////// MUST2 Array ////////" << endl << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new MUST2Array() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector("MUST2" , myDetector) ; - } - - /* //////////////////////////////////////////// - ////////// Search for Add.ThinSi /////////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) { - AddThinSi = true ; - cout << "//////// Thin Si ////////" << endl << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new ThinSi() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector(myDetector) ; - } - - //////////////////////////////////////////// - //////////// Search for Target ///////////// - //////////////////////////////////////////// - - else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) { - GeneralTarget = true ; - cout << "////////// Target ///////////" << endl << endl ; - - // Instantiate the new array as a VDetector Objects - VDetector* myDetector = new Target() ; - - // Read Position and target specification - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - m_TargetThickness = ((Target*)myDetector)->GetTargetThickness() ; - m_TargetRadius = ((Target*)myDetector)->GetTargetRadius() ; - m_TargetX = ((Target*)myDetector)->GetTargetX() ; - m_TargetY = ((Target*)myDetector)->GetTargetY() ; - m_TargetZ = ((Target*)myDetector)->GetTargetZ() ; - - // Add target to the VDetector Vector - AddDetector(myDetector) ; - }*/ - - //Nothing understandable - //else ; - } - - ConfigFile.close(); - - InitializeRootInput(); - InitializeRootOutput(); - - return ; - } - -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::BuildPhysicalEvent() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->BuildPhysicalEvent() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::BuildSimplePhysicalEvent() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->BuildSimplePhysicalEvent() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::InitializeRootInput() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->InitializeRootInput() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::InitializeRootOutput() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->InitializeRootOutput() ; - } - - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::AddDetector(string DetectorName , VDetector* newDetector) - { - m_Detector[DetectorName] = newDetector ; - } -///////////////////////////////////////////////////////////////////////////////////////////////// -void DetectorManager::ClearEventPhysics() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->ClearEventPhysics() ; - } - - } -///////////////////////////////////////////////////////////////////////////////////////////////// -void DetectorManager::ClearEventData() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->ClearEventData() ; - } - - } - diff --git a/NPAnalysis/Gaspard/src/GNUmakefile b/NPAnalysis/Gaspard/src/GNUmakefile index c18b108aaeff1d074e76e615e2f38d050e4cfedc..28c404622cec4d40b2e93aa0009fc4fc4fa97d26 100644 --- a/NPAnalysis/Gaspard/src/GNUmakefile +++ b/NPAnalysis/Gaspard/src/GNUmakefile @@ -16,20 +16,17 @@ CXXFLAGS += -I$(NPAINCLUDES) CXXFLAGS += -I$(NPLIB)/include LDFLAGS = `root-config --libs` -lMathMore -LDFLAGS+= -L$(NPLIB)/lib -lVDetector -lIORoot -lReaction -lEnergyLoss \ - -lMust2Data -lMust2Physics \ - -lGaspardData -lGaspardPhysics \ - -lAnnularS1Data \ - -lInitialConditions -lInteractionCoordinates +LDFLAGS+= `$(NPLIB)/liblist` LDFLAGS+= -L$(CLHEP_LIB_DIR) -l$(CLHEP_LIB) SRC= $(wildcard *.cc) +INC= $(wildcard $(NPAINCLUDES)/*.hh) OBJ=$(SRC:.cc=.o) #all:$(EXEC) # @$(CPP) -o $@ -c $< $(CXXFLAGS) -Analysis:$(OBJ) +Analysis:$(OBJ) $(INC) @$(CPP) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) mv Analysis ../Analysis diff --git a/NPAnalysis/Template/Makefile b/NPAnalysis/Template/Makefile index f5bfeb69ffd25b28c9ccb8a81eebb1b66664dfa2..fbc1279e119e5439eb7a7547a93815a2783fdcef 100644 --- a/NPAnalysis/Template/Makefile +++ b/NPAnalysis/Template/Makefile @@ -4,3 +4,9 @@ Analyse: clean: make clean -C ./src + +distclean: + make clean -C ./src + rm Analysis + + diff --git a/NPAnalysis/Template/include/DetectorManager.hh b/NPAnalysis/Template/include/DetectorManager.hh deleted file mode 100644 index eb49f01ef92509cd0531f4f12c7eace833047e61..0000000000000000000000000000000000000000 --- a/NPAnalysis/Template/include/DetectorManager.hh +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef DetectorManager_h -#define DetectorManager_h - -// NPL -#include "VDetector.h" - -// STL -#include <string> -#include <map> - -using namespace std ; -using namespace NPA ; - -// This class manage a map of virtual detector - -class DetectorManager - { - public: - DetectorManager() ; - ~DetectorManager() ; - - public: - // Read stream at Path and pick-up Token declaration of Detector - void ReadConfigurationFile(string Path) ; - void BuildPhysicalEvent() ; - void BuildSimplePhysicalEvent() ; - void InitializeRootInput() ; - void InitializeRootOutput() ; - void AddDetector(string,VDetector*) ; - void ClearEventPhysics() ; - void ClearEventData() ; - - public: // The map containning all detectors - // Using a Map one can access to any detector using its name - map<string,VDetector*> m_Detector ; - - }; - -#endif diff --git a/NPAnalysis/Template/include/ObjectManager.hh b/NPAnalysis/Template/include/ObjectManager.hh index e0a66004be5b8c354e8e3f7175613fbd2c625d7a..be80b3102aab19cf42f067d5cebe23d2dee120dd 100644 --- a/NPAnalysis/Template/include/ObjectManager.hh +++ b/NPAnalysis/Template/include/ObjectManager.hh @@ -6,8 +6,7 @@ // -------------------------------------- VARIOUS INCLUDE --------------------------------------- // NPA -#include "DetectorManager.hh" -#include "Must2Array.h" +#include "DetectorManager.h" // STL C++ #include <iostream> @@ -26,11 +25,16 @@ #include <TRandom.h> // NPL -#include "TMust2Data.h" -#include "TMust2Physics.h" -#include "NPReaction.h" #include "RootInput.h" #include "RootOutput.h" +#include "NPReaction.h" +#include "TInitialConditions.h" +#include "TPlasticData.h" +#include "TMust2Data.h" +#include "TMust2Physics.h" +#include "TSSSDPhysics.h" +#include "TPlasticPhysics.h" +#include "GaspardTracker.h" // Use CLHEP System of unit and Physical Constant #include "CLHEP/Units/GlobalSystemOfUnits.h" @@ -106,6 +110,7 @@ namespace ENERGYLOSS // Declare your Energy loss here : /* EnergyLoss ProtonTarget = EnergyLoss ( "CD2.txt" , 100 , + 1, 1 ); */ } diff --git a/NPAnalysis/Template/src/Analysis.cc b/NPAnalysis/Template/src/Analysis.cc index a22fa769ce0dcb2e48fa16b4b59c6a1fa7c84c6e..16f32300f37ea75d7e45962aa128f2c13448657c 100644 --- a/NPAnalysis/Template/src/Analysis.cc +++ b/NPAnalysis/Template/src/Analysis.cc @@ -27,7 +27,7 @@ int main(int argc,char** argv) myReaction -> ReadConfigurationFile(reactionfileName) ; // Instantiate the detector using a file - DetectorManager* myDetector = new DetectorManager ; + NPA::DetectorManager* myDetector = new DetectorManager ; myDetector -> ReadConfigurationFile(detectorfileName) ; // Get the formed Chained Tree and Treat it @@ -35,8 +35,8 @@ int main(int argc,char** argv) int i; for ( i = 0 ; i < Chain -> GetEntries() ; i ++ ) { - if( i%10000 == 0 && i!=0) cout << i << " Event annalysed " << endl ; - Chain -> GetEntry(i); + if( i%10000 == 0 && i!=0) cout << "\r Event Analyzed:" << i << flush; + Chain -> GetEntry(i); myDetector -> ClearEventPhysics() ; myDetector -> BuildPhysicalEvent() ; diff --git a/NPAnalysis/Template/src/DetectorManager.cc b/NPAnalysis/Template/src/DetectorManager.cc deleted file mode 100644 index 000d61fe3827077359d77aa4c4f2af460364fbfd..0000000000000000000000000000000000000000 --- a/NPAnalysis/Template/src/DetectorManager.cc +++ /dev/null @@ -1,228 +0,0 @@ -#include "DetectorManager.hh" - -// STL -#include <iostream> -#include <fstream> -#include <cstdlib> - -// Detector -#include "Must2Array.h" - -///////////////////////////////////////////////////////////////////////////////////////////////// -// Default Constructor and Destructor -DetectorManager::DetectorManager() - {} - -///////////////////////////////////////////////////////////////////////////////////////////////// -DetectorManager::~DetectorManager() - {} - - -///////////////////////////////////////////////////////////////////////////////////////////////// -// Read stream at ConfigFile and pick-up Token declaration of Detector -void DetectorManager::ReadConfigurationFile(string Path) - { - ////////General Reading needs//////// - string LineBuffer; - string DataBuffer; - - /////////Boolean//////////////////// - bool MUST2 = false ; - bool AddThinSi = false ; - bool GeneralTarget = false ; - bool GPDTracker = false ; // Gaspard Tracker - ////////////////////////////////////////////////////////////////////////////////////////// - // added by Nicolas [07/05/09] - string GlobalPath = getenv("NPTOOL"); - Path = GlobalPath + "/Inputs/DetectorConfiguration/" + Path; - ifstream ConfigFile; - ConfigFile.open(Path.c_str()); - - if (ConfigFile.is_open()) - { - cout << "/////////////////////////////" << endl; - cout << " Configuration file " << Path << " loading " << endl; - } - - else - { - cout << " Error, no configuration file" << Path << " found" << endl; - return; - } - - - while (!ConfigFile.eof()) { - //Pick-up next line - getline(ConfigFile, LineBuffer); - //Search for comment Symbol: % - if (LineBuffer.compare(0, 1, "%") == 0) { /*Do Nothing*/ ;} - - /* //////////////////////////////////////////// - //////////// Search for Gaspard //////////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) { - GPDTracker = true ; - cout << "//////// Gaspard Tracker ////////" << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new GaspardTracker() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector(myDetector) ; - }*/ - - //////////////////////////////////////////// - //////// Search for MUST2 Array //////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) { - MUST2 = true ; - cout << "//////// MUST2 Array ////////" << endl << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new MUST2Array() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector("MUST2" , myDetector) ; - } - - /* //////////////////////////////////////////// - ////////// Search for Add.ThinSi /////////// - //////////////////////////////////////////// - else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) { - AddThinSi = true ; - cout << "//////// Thin Si ////////" << endl << endl ; - - // Instantiate the new array as a VDetector Object - VDetector* myDetector = new ThinSi() ; - - // Read Position of Telescope - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - // Add array to the VDetector Vector - AddDetector(myDetector) ; - } - - //////////////////////////////////////////// - //////////// Search for Target ///////////// - //////////////////////////////////////////// - - else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) { - GeneralTarget = true ; - cout << "////////// Target ///////////" << endl << endl ; - - // Instantiate the new array as a VDetector Objects - VDetector* myDetector = new Target() ; - - // Read Position and target specification - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; - - m_TargetThickness = ((Target*)myDetector)->GetTargetThickness() ; - m_TargetRadius = ((Target*)myDetector)->GetTargetRadius() ; - m_TargetX = ((Target*)myDetector)->GetTargetX() ; - m_TargetY = ((Target*)myDetector)->GetTargetY() ; - m_TargetZ = ((Target*)myDetector)->GetTargetZ() ; - - // Add target to the VDetector Vector - AddDetector(myDetector) ; - }*/ - - //Nothing understandable - //else ; - } - - ConfigFile.close(); - - InitializeRootInput(); - InitializeRootOutput(); - - return ; - } - -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::BuildPhysicalEvent() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->BuildPhysicalEvent() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::BuildSimplePhysicalEvent() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->BuildSimplePhysicalEvent() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::InitializeRootInput() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->InitializeRootInput() ; - } - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::InitializeRootOutput() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->InitializeRootOutput() ; - } - - } -///////////////////////////////////////////////////////////////////////////////////////////////// - -void DetectorManager::AddDetector(string DetectorName , VDetector* newDetector) - { - m_Detector["MUST2"] = newDetector ; - } -///////////////////////////////////////////////////////////////////////////////////////////////// -void DetectorManager::ClearEventPhysics() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->ClearEventPhysics() ; - } - - } -///////////////////////////////////////////////////////////////////////////////////////////////// -void DetectorManager::ClearEventData() - { - map<string,VDetector*>::iterator it ; - - for( it = m_Detector.begin() ; it != m_Detector.end() ; ++it) - { - it->second->ClearEventData() ; - } - - } - diff --git a/NPAnalysis/Template/src/GNUmakefile b/NPAnalysis/Template/src/GNUmakefile index 15a9a7a10e9dc1d50489b0a14210d6697621466d..28c404622cec4d40b2e93aa0009fc4fc4fa97d26 100644 --- a/NPAnalysis/Template/src/GNUmakefile +++ b/NPAnalysis/Template/src/GNUmakefile @@ -16,10 +16,7 @@ CXXFLAGS += -I$(NPAINCLUDES) CXXFLAGS += -I$(NPLIB)/include LDFLAGS = `root-config --libs` -lMathMore -LDFLAGS+= -L$(NPLIB)/lib -lVDetector -lIORoot -lReaction -lEnergyLoss \ - -lMust2Data -lMust2Physics \ - -lAnnularS1Data -lGaspardData \ - -lInitialConditions -lInteractionCoordinates +LDFLAGS+= `$(NPLIB)/liblist` LDFLAGS+= -L$(CLHEP_LIB_DIR) -l$(CLHEP_LIB) SRC= $(wildcard *.cc) diff --git a/NPAnalysis/macros/ControlSimu.C b/NPAnalysis/macros/ControlSimu.C index bb7b8ddcbe521156b05f6c42264ec1922d0e8456..9717f67cf6c6a80bcb11cb07e53e9babbd14e3c7 100644 --- a/NPAnalysis/macros/ControlSimu.C +++ b/NPAnalysis/macros/ControlSimu.C @@ -68,6 +68,8 @@ void ControlSimu(const char * fname = "mySimul") TH2F *hEmittanceYPhi = new TH2F("hEmittanceYPhi", "Emittance (y, #phi)", 200, -10, 10, 200, -10, 10); TH1F *hIncidentTheta = new TH1F("hIncidentTheta", "Incident Theta", 100, 0, 10); TH1F *hIncidentPhi = new TH1F("hIncidentPhi", "Incident Phi", 360, 0, 360); + TH1F *hIncidentZ = new TH1F("hIncidentZ", "z-position of interaction", 200, -5, 5); + // for emitted particle TH1F *hEmittedThetaCM = new TH1F("hEmittedThetaCM", "Emitted Theta CM", 180, 0, 180); TH1F *hEmittedThetaIF = new TH1F("hEmittedThetaIF", "Emitted Theta (reaction frame)", 180, 0, 180); @@ -87,6 +89,7 @@ void ControlSimu(const char * fname = "mySimul") // Fill histos // incident beam hEmittanceXY -> Fill(initCond->GetICPositionX(0), initCond->GetICPositionY(0)); + hIncidentZ -> Fill(initCond->GetICPositionZ(0)); hEmittanceXTheta -> Fill(initCond->GetICPositionX(0), initCond->GetICIncidentEmittanceTheta(0)); hEmittanceYPhi -> Fill(initCond->GetICPositionX(0), initCond->GetICIncidentEmittancePhi(0)); hIncidentTheta -> Fill(initCond->GetICIncidentAngleTheta(0)); @@ -118,6 +121,8 @@ void ControlSimu(const char * fname = "mySimul") hIncidentPhi->Draw(); canvas1->cd(5); hEmittanceXY->Draw("colz"); + canvas1->cd(6); + hIncidentZ->Draw(); // Display histograms TCanvas *canvas2 = new TCanvas("canvas2", "Emitted particle properties"); diff --git a/NPAnalysis/macros/GeometricalEfficiency.C b/NPAnalysis/macros/GeometricalEfficiency.C index 5bbc6f5864000c292f58a2741c5f69160e0ed90f..c2e43a82ad2a6150cd92bb2f6437d6572948e1fe 100644 --- a/NPAnalysis/macros/GeometricalEfficiency.C +++ b/NPAnalysis/macros/GeometricalEfficiency.C @@ -36,10 +36,10 @@ #include "TBranch.h" #include "TH1F.h" -#include "TInitialConditions.h" -#include "TInteractionCoordinates.h" +using namespace std ; -void GeometricalEfficiency(const char * fname = "Efficiency_10000") + +void GeometricalEfficiency(const char * fname = "mySimul") { // Open output ROOT file from NPTool simulation run TString path = gSystem->Getenv("NPTOOL"); @@ -65,9 +65,9 @@ void GeometricalEfficiency(const char * fname = "Efficiency_10000") // Read the TTree Int_t nentries = tree->GetEntries(); - cout << "TTree contains " << nentries << " events" << endl; + // cout << "TTree contains " << nentries << " events" << endl; for (Int_t i = 0; i < nentries; i++) { - if (i%1000 == 0) cout << "Entry " << i << endl; + //if (i%1000 == 0) cout << "Entry " << i << endl; tree->GetEntry(i); // Fill histos hEmittTheta->Fill(initCond->GetICEmittedAngleThetaLabWorldFrame(0)); @@ -77,8 +77,8 @@ void GeometricalEfficiency(const char * fname = "Efficiency_10000") // Compute relative efficiency in % TH1F *efficiency = new TH1F("hEfficiency", "Efficiency", 180, 0, 180); -// efficiency->SetTitle("Efficiency GASPARD;#Theta [deg];#epsilon [%]"); - efficiency->SetTitle("Efficiency e530;#Theta [deg];#epsilon [%]"); + efficiency->SetTitle("Efficiency GASPARD (Spheric version);#Theta [deg];#epsilon [%]"); +// efficiency->SetTitle("Efficiency e530;#Theta [deg];#epsilon [%]"); efficiency->Divide(hDetecTheta,hEmittTheta,100); efficiency->SetMaximum(110); efficiency->Draw(); diff --git a/NPDocumentation/Gaspard.tex b/NPDocumentation/Gaspard.tex index 38974666e8e0a9650e3095cc10732ed1740ec33b..e486f4bc743e576454702cc44f370f8a31e6e8ae 100755 --- a/NPDocumentation/Gaspard.tex +++ b/NPDocumentation/Gaspard.tex @@ -1,7 +1,7 @@ \documentclass[a4paper,12pt]{article} \usepackage[T1]{fontenc} -\usepackage [isolatin]{inputenc} % fontes avec caracteres accentues -\usepackage{graphicx} % inclusion de figures +\usepackage [isolatin]{inputenc} +\usepackage{graphicx} \usepackage{listings} \begin{document} @@ -11,17 +11,243 @@ \maketitle \pagebreak -\tableofcontents % la table des matieres +\tableofcontents \pagebreak \section{Introduction} +The Gaspard project is developed within the NPTool framework. For the +moment only the tracker of charged particles is currently under study. +Coupling the tracker with a gamma-ray calorimeter such as AGATA or +PARIS will be considered in the near future. + +NPTool is a modular package allowing to perform Geant4 simulations and to +analyse the results of the simulations. It is strongly encouraged to read +the general NPTool documentation that you can find in this directory. + + \section{NPSimulation} -\subsection{} -\subsection{Storing the results of the simulation} +\subsection{Specificity of Gaspard} +The Gaspard tracker detector, even if it is made of several detectors of +different shapes (square, trapezoid, annular, ...), is considered as {\it one} +detector from the NPSimulation point of view. The Gaspard tracker detector +is described in the GaspardTracker class defined in the +GaspardTracker.\{hh,cc\} files. Since the Gaspard tracker detector is +registered in the DetectorConstructor.cc file it is available for NPSimulation. + +In order to manage the different detector shapes (square, trapezoid, annular, +...) of the Gaspard tracker, the GaspardTracker class holds a vector of +GaspardTrackerModule objects from which are, and should be, deriving all +the different shapes (GaspardTrackerSquare, GaspardTrackerAnnular, +GaspardTrackerTrapezoid and GaspardTrackerDummyShape classes). + + +\subsection{Running the simulation} +To run NPSimulation the following command line should be executed: + +\begin{verbatim} + Simulation xxx.reaction yyy.detector +\end{verbatim} + +where xxx.reaction is an input file describing the event generator and +yyy.detector is an input file describing the detector geometry. All these +input files are based on keywords and can be found in the +\$NPTool/Inputs subdirectories. + +\subsubsection{Event Generators} +All the different kind of event generator files as well as their +respective keywords are described in the general NPTool documentation. + +\subsubsection{Detector Configurations} +The keywords associated to the detector geometry file are different for +each detector. In case of the Gaspard tracker detector an example with +all the detector shapes available at the moment is given in the following: + +\begin{verbatim} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + GaspardTracker + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + GPDAnnular + Z= -156.5 + RMIN= 16 + RMAX= 52 + FIRSTSTAGE= 1 + SECONDSTAGE= 0 + THIRDSTAGE= 1 + VIS= all + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + GPDTrapezoid + X1_Y1= 45.64 34.43 -146.50 + X128_Y1= 91.09 79.82 -91.36 + X1_Y128= 120.84 8.00 -91.36 + X128_Y128= 56.59 8.00 -146.50 + FIRSTSTAGE= 1 + SECONDSTAGE= 0 + THIRDSTAGE= 1 + VIS= all + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + GPDSquare + X1_Y1= 49.1 66.08 -135.41 + X128_Y1= -48.9 66.22 -135.41 + X1_Y128= -48.8 135.51 -66.1 + X128_Y128= 49.2 135.36 -66.1 + FIRSTSTAGE= 1 + SECONDSTAGE= 0 + THIRDSTAGE= 1 + VIS= all + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + GPDDummyShape + THETA= 90 + PHI= 90 + R= 100 + BETA= 0 0 0 + FIRSTSTAGE= 1 + SECONDSTAGE= 1 + THIRDSTAGE= 1 + VIS= all +\end{verbatim} + +In order to declare a Gaspard tracker detector in NPSimulation, the key +word {\it GaspardTracker} should be specified in the geometry file. It +should then be followed by other keywords concerning the different +detectors present in the tracker. Such keywords available at the moment +are: + +\begin{itemize} + \item {GPDAnnular} + \item {GPDTrapezoid} + \item {GPDSquare} + \item {GPDDummyShape} +\end{itemize} + +Each keyword corresponds to a detector shape which have its own set of +keywords which is used to position the detector in the world volume +and to define the structure of the detector (basically the number of +layers of the detector). + +To position the detectors two possibilities exist. Either the cartesian +coordinates (x,y,z) of each detector's corner are specified with the +keywords {\it X1\_Y1}, {\it X1\_Y128}, {\it X128\_Y1} and {\it X128\_Y128} +(case of GPDTrapezoid), either the spherical coordinates of the detector's +center are specified with the keywords {\it R}, {\it THETA} and {\it PHI} +(case of GPDDummyShape). While the first solution is very helpful when +working with the mechanical engineers, the second solution is useful when +investigating new geometries. + +In case of GPDAnnular only the position on the z-axis is given through +the keyword {\it Z}. Other keywords such as {\it RMIN} and {\it RMAX} +are defined but have no effect. This should be changed in the future. + +Concerning the structure of the detector, all the detectors have the +possibility to have up to three layers of silicon. Each layer can be +activated independently using the keywords {\it FIRSTSTAGE}, +{\it SECONDSTAGE} and {\it THIRDSTAGE}. + + +\subsection{Results of the simulation} +The results of the simulation are in the ROOT format and the output file +is stored in the \$NPTool/Output/Simulation directory. The output ROOT file +contains three classes: +\begin{itemize} + \item {TInitialConditions:} + This class records all the information concerning the event generator + such as the vertex of interaction, the angles of emitted particles in + the center of mass and laboratory frames... + \item {TInteractionCoordinates:} + This class mainly records the cartesian and spherical coordinates of + interaction between a particle and a detector. + \item {TGaspardTrackerData:} + This class stores the results of the simulation for the tracker part + of the Gaspard detector. Independently of the number and shape of the + detectors involved in the geometry, only {\it one} class is created for + the whole Gaspard tracker detector. For each event the strips number + are recorded as well as the energy and time for the layers which are + involved in the telescope. +\end{itemize} + + \subsection{Adding a new detector shape to Gaspard} +A special class (GaspardTrackerDummyShape) has been created to show how +to define a new module for the Gaspard Tracker. This class describes a +simple 5x5 cm$^2$ square telescope made of three layers of silicon which +has been used for some preliminary studies of the tracker. So, when +considering adding a new module to the Gaspard Tracker, please do not use +this class but create your own instead. However, for the explanations the +GaspardTrackerDummyShape case will be considered. + +When adding a new detector you need to follow several steps: + +\subsubsection{Definition of an index for the detector} +Since the results of the simulation are stored in an unique data class +(GaspardTrackerData) dealing with different module types, it is +necessary to give an absolute number to each module. This is managed in +the GaspardTrackerModule class where there is a map (m\_index) which +associates a name (the module type identifier) with an integer (the value +of the index). + +To add a new detector it is just needed to add in the {\it InitializeIndex()} +method a line such as: + +\begin{verbatim} + m_index["DummyShape"] = 1000; +\end{verbatim} + +\subsubsection{Definition of the geometry and its readout} +This is done in the GaspardTrackerDummyShape.\{h,cxx\} files. Concerning +the geometry it is defined in the {\it VolumeMaker()} method and the +the positioning of the module is done in the {\it ConstructDetector()} +method. + +Concerning the readout of the geometry it is done in the {\it ReadSensitive()} +method and it is based on the method of the scorers available in G4. The +scorers associated to the Gaspard tracker are declared in the {\it +InitializeScorers()} method. + +\subsubsection{Definition of the scorers} +If the scorers are declared in the {\it InitializeScorers()} method they should +be defined in the GaspardScorers.\{hh,cc\} files. All basic scorers to record +energy, time of flight and detector number are already implemented so when a new +detector is added to Gaspard tracker there is nothing to add from this point +of vue. However scorers determining the strip number for the front and back +side of the silicon detector's first stage (if double-sided) should be implemented. +In case of the GaspardTrackerDummyShape class this corresponds to the two classes +GPDScorerFirstStageFrontStripDummyShape and GPDScorerFirstStageBackStripDummyShape. + +\subsubsection{Integration in GaspardTracker} +In order to make the GaspardTracker detector aware of the GaspardTrackerDummyShape +module it has to be registered in the {\it ReadConfiguration()} method of the +GaspardTracker class. Don't forget to include the GaspardTrackerDummyShape.hh +header in the GaspardTracker.cc file. Then, in the GaspardTrackerDummyShape class +the keywords used when the geometry file is read should be defined in the {\it +ReadConfiguration()} method. + \section{NPAnalysis} +\subsection{General} +A set of general ROOT macros are available in the \$NPTool/NPAnalysis/macros +directory. You can for example obtain some control plots about the shooting +conditions of the random variables. You can also calculate the geometrical +efficiency of your setup. + +The macros in this directory should be independant of the setup which is simulated. +Specific macros to Gaspard tracker should be placed in the +\$NPTool/NPAnalysis/Gaspard/macros directory. + + +\subsection{Gaspard} +The main analysis tool for the Gaspard tracker is in the \$NPTool/NPAnalysis/Gaspard +directory. For the moment the main feature is the reconstruction of the excitation +energy. + +\subsubsection{Running the analysis} +******* to be documented ********* + +\subsubsection{Results the analysis} +******* to be documented ********* + +\subsubsection{Structure of the analysis} +******* to be documented ********* + \end{document} diff --git a/NPDocumentation/General.pdf b/NPDocumentation/General.pdf deleted file mode 100644 index dd024632fefa51f7c7adb0b8031c67a64463cfe0..0000000000000000000000000000000000000000 Binary files a/NPDocumentation/General.pdf and /dev/null differ diff --git a/NPDocumentation/General.tex b/NPDocumentation/General.tex deleted file mode 100755 index ebce024bd661d8733ce2cd1b40bb99eaf2501779..0000000000000000000000000000000000000000 --- a/NPDocumentation/General.tex +++ /dev/null @@ -1,87 +0,0 @@ -\documentclass[a4paper,12pt]{article} -\usepackage[T1]{fontenc} -\usepackage [isolatin]{inputenc} % fontes avec caracteres accentues -\usepackage{graphicx} % inclusion de figures -\usepackage{listings} - -\begin{document} - -\title{\emph{NPTool Documentation}} -\author{Adrien MATTA} - -\maketitle -\pagebreak -\tableofcontents % la table des matieres -\pagebreak - - -\section {Introduction} - -NPTool, Nuclear Physics Tool, aim to be a coherent set of programm usefull for Nuclear Physicist, especially those studying structure experimentally. - -Because each experiment is differents, people get used to exchange code and modified it to their needs. What NPT do is provinding a common platform, each user can then add its own class to fit its own needs and share those class with our community. Working this way, each contribution is valorised(?). - -\section{NPSimulation} - -NPSimulation is build on top of Geant4. It's provide a coherent and modular sets of classes that can be easily modified for your purpose. - -\subsection{ The way it's work } - -Because NPS is build on top of Geant4, you need C++ knowledge and Geant4 skills to understand how NPS work. NPS is a build as a modular basis that fit Nuclear Physicist needs: -\begin{itemize} - \item Generate Nuclear Physics Event such as transfert - \item Deal with different Detectors and Configuration (Number of module, positionning...) -\end{itemize} - - -\subsection{ Adding a detector to NPS } - -What you need is to create a new classes to your detector. In the following line, you can replace myDetector by your detector name. First create a new file myDetector.hh in the include directory of NPS. - -Here is the layout of your header file : - -\lstset{language=[GNU]C++,tabsize=4} -\begin{lstlisting} - #ifndef MyDetector_H - #define MyDetector_H - #include "VDetector.hh" - - class myDetector : public VDetector - { - public: // Creator and Destructor - myDetector() ; - ~myDetector() ; - - public: // Inherit from VDetector Class - void ReadConfiguration(string) - void ConstructDetector(G4LogicalVolume*) - void AddDetectorToTree(TTree*) - void ReadSensitive(const G4Event*) - - public: // Specific methods of myDetector - void MySpecificMethod () ; - - private: // Private member of myDetector - TTree* m_Tree ; - // Optional but recommanded: - myDetectorData m_Data ; - - private: // Private member of myDetector - G4double OtherParameter ; - }; - #endif -\end{lstlisting} - - -One can not that four methods come from the VDetector class. In VDetector class, those method are declared as virtual, and not implemented. You must implement those method in your class or the compilation will failed. - - -%\begin{figure}[!htbp] -%\centering -%\includegraphics[width=0.9\textwidth]{cross_section.png}\\ -%\caption{ \emph{Sections efficaces th\'{e}oriques de la r\'{e}action calcul\'{e}s par m\'{e}thode DWBA \`{a} 30MeV/Nucl pour différents %moments cinétiques.} } -%\label{CS} -%\end{figure} - -\end{document} - diff --git a/NPDocumentation/NPTool_UserGuide.tex b/NPDocumentation/NPTool_UserGuide.tex new file mode 100755 index 0000000000000000000000000000000000000000..1d9e94b71907bf95457147a170af10c43b55b7ae --- /dev/null +++ b/NPDocumentation/NPTool_UserGuide.tex @@ -0,0 +1,361 @@ +%\documentclass[a4paper,12pt]{article} +\documentclass{book} +\usepackage[T1]{fontenc} +\usepackage [isolatin]{inputenc} +\usepackage{graphicx} +\usepackage{listings} + +%\usepackage{fancyhdr} +%\pagestyle{fancy} +% with this we ensure that the chapter and section +% headings are in lowercase. +%\renewcommand{\chaptermark}[1]{% +% \markboth{#1}{}} +%\renewcommand{\sectionmark}[1]{% +% \markright{\thesection\ #1}} +%\fancyhf{} % delete current header and footer +%\fancyhead[LE,RO]{\bfseries\thepage} +%\fancyhead[LO]{\bfseries\rightmark} +%\fancyhead[RE]{\bfseries\leftmark} +%\renewcommand{\headrulewidth}{0.5pt} +%\renewcommand{\footrulewidth}{0pt} +%\addtolength{\headheight}{0.5pt} % space for the rule +%\fancypagestyle{plain}{% +% \fancyhead{} % get rid of headers on plain pages +% \renewcommand{\headrulewidth}{0pt} % and the line +%} + +%\documentclass[a4paper,12pt]{book} +%\usepackage[T1]{fontenc} +%\usepackage [isolatin]{inputenc} % fontes avec caracteres accentues +%\usepackage{graphicx} % inclusion de figures +%\usepackage{listings} + +\begin{document} + +\title{\emph{NPTool 1.0 User Guide}} +\author{Adrien MATTA} + +\maketitle +\pagebreak +\tableofcontents % la table des matieres +\pagebreak + +\chapter[NPTool]{NPTool} +\section {Introduction} + +NPTool, Nuclear Physics Tool, aim to be a coherent set of programm usefull for Nuclear Physicist, especially those studying structure experimentally. +Because each experiment is differents, people get used to exchange code and modified it to their needs. +What NPT do is provinding an (try to be) universal framework so user can add their own functionnalities and share it with their collaborators. +Geant4 and ROOT are now popular toolkit among the community, that's why NPTool use them widely and try to give a step by step process to use them efficiently. + +In NPTool analysis and simulation are linked together. +The proposed way of working is to generate an experiment like set of data and then annalysing with the future analysis code. +Working this way help saving time by doing the biggest part of the analysis work in advance. +It also help to understand what happen during analysis. + + \begin{figure}[!htbp] + \centering + \includegraphics[width=0.5\textwidth]{./pictures/nptool_scheme_Sim.png} + \caption{ \emph{Phase 1: Preparing an experiment} } + \end{figure} + + \begin{figure}[!htbp] + \centering + \includegraphics[width=0.5\textwidth]{./pictures/nptool_scheme_Ana.png} + \caption{ \emph{Phase 2: Analysing an experiment} } + \end{figure} + + + +\section{The directory layout} + NPTool come with a specific directory layout. + The different make file and source are made to use this layout, using the environment variable. + Here is the standard layout: + \begin{itemize} + \item[-] NPLib : hold the libraries used both in NPA and NPS (NB: those librairies can be use in your own independant code if needed) + \item[-] NPSimulation : hold the NPSimulation code + \item[-] NPAnalysis: this folder contain one folder for each analysis project, feel free to make new one on the basis of the template one for instance + \item[-] Inputs: this folder contain several folder, one for each type of intput, where you can find the input file used by the programm + \item[-] Outputs: find here the outputs file of your simulation and analysis project + \item[-] NPDocumentation: hold the documentation file + \item[-] Licence: Take a look to the licence file and the list of contributor + \item[-] \_MTN: you can some time find this folder, it not exactly part of the NPTool project, and is used only if you are working on the monotone data base (ie: if you are a contributor) + \item[] + \end{itemize} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter[NPLib]{NPLib} + \section{Introduction} + + NPLib is the core package of NPTool, it contain several classes used in both analysis and simulation programm. + NPTool versatility relly on this common core, its allow both programm to speak the same language in some way and also reduce drastically the amount of file since they are shared. + NPLib is widely build on top of ROOT,GSL and CLHEP (by order of importance), but not on Geant4. + + \section{the directory layout} + NPLib is made of several folder, one for each detector basicly and some for other shared object such as reaction and nucleus class. A common makefile is present in the NPLib directory calling the individual make file of every folder. In this folder you will also find a README file and the liblist file, containing a small macro used in NPA and NPS makefile to return the list of avaible librairies. Our phylosophy is to have two class for each detector, inheritted fron the TObject ROOT class so theyr can be put in a TTree. The first one is called the Data class, named following the TDetectorNameData, where T is there to remind the TObject dependance. This Data class hold the raw parameter given by the detector during an experiment, understood before any treatment. NPSimulation will output those kind of raw data, the only difference between a simulated and an experiement data object is the one comming from NPS are already calibrated. The second class is a Physics class, named TDetectorNamePhysics. This class hold the results of the treated Data object, ie after application of threshold, selection of good event, application of calibration,... and so one, depending on your detector. Note that the Physics class also derived from the VDetector class, and therefore can be used in NPA via the DetectorManager class. This system allow your annalysis programm to be more flexible and lisible. Let's have a look to the Directory layout: + + + \begin{itemize} + \item[DummyDetector] Template base for making your own Data and Physics class + \item[AnnularS1] Containing the Data object for the Annular detector "S1" by micron + \item[GASPARD] Data and Physics object associate to the Gamma and Segmented Particule ARray Detector + \item[MUST2] Data and Physics object associate to the MUr a STrip 2 detector + \item[Plastic] Data and Physics object associate to the Plastic scintillator detector + \item[SSSD] Data and Physics object associate to the Single Sided Striped Detector + \item[InitialConditions] Used in NPS to output the initial physics condition of the generated event (Beam interaction position and energy, angle and energy of particule,...) + \item[InteractionCoordinates] Used in NPS to output the true physical point of interaction in the differents detector + \item[CalibrationManager] This class allowed to manage different file and token and associate them to detector + \item[IORoot] Hold the ROOTInput and ROOTOutput classes that allow an easier used of TTRee in NPS and NPA + \item[Tools] A few usefull classes such as Nuclear Reaction kinematics, Nucleus object and Energy Loss + \item[VDetector] Virtual Detector class from wich inherrited all Physics class + \item[include] All header are copy in this folder during compilation + \item[lib] All libraries are copy in this folder during compilation + \end{itemize} + + \section{Step by step from TDUMMYDetectorData class} + \subsection{step 1} + First, go to your consol and open the NPLib folder, there type \begin{verbatim}make distclean\end{verbatim} + This command will remove all the compilation generated file and only the source will remain. + Copy the DummyDetector folder and rename it, let's say, WonderdullDetector. + Ebter the directory and rename the TDummyDetectorData.h and .cxx with your detector name, you should have now only three file: Makefile, TWonderfullDetectorData.h and TWonderfullDetectorData.cxx + If any other file remain, just remove it. + No open the .h and .cxx file with your favorite editor (gedit or vim for instance). Replace the the DUMMYDetector by your detector name. Just have look in the .h file, the class is very basic, a couple of value are stored in stl vector (allowing smaller tree and increasing speed access). A few methods allowed to set or get those value and to know the size of the different vector. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\chapter[NPSimulation]{NPSimulation} + +\section{Introduction} + +NPSimulation is build on top of Geant4. +It's provide a coherent and modular sets of classes that can be easily modified for your purpose. + +\subsection{ The way it's work } + +Because NPS is build on top of Geant4, you need C++ knowledge and Geant4 skills to understand how NPS work. +NPS is a build as a modular basis that fit Nuclear Physicist needs: + \begin{itemize} + \item Generate Nuclear Physics Event (such as a transfert, a beam, an ion source,... ) + \item Mange Detectors geometry (Number of module, positionning...) + \end{itemize} +NPTool +NPS used two input files, one for the EventGenerator, and one for the Detectors Geometry. +Those file are regroup in the \$NPT/Input directory wher you can find the EventGenerator and the DetectorConfiguration folder. +If you want to add a new case you just have to create a new file in those directory. +Note that files in the input directory are token readable file. It mean that they are not compile with the code, just read at each programm lauch. +This way you can change the position of your detector or the energy of your beam for example without recompile the code. +You can also quickly exchange your file with collaborators. + +\section{ Running a simulation with existing detectors and event generator } + +Running a NPSimulation is quite simple, first, start a console terminal (shell) and put your self in the NPS directory. +If you have add the environment variable correctly you can use the \emph{NPS} short cut that open the NPSimulation directory. + + \begin{verbatim} + [myName@myDomain ~]$ NPS + + [myName@myDomain NPSimulation]$ Simulation myReaction myDetector + \end{verbatim} + +\emph{NB: order of arguments is essential. Both file need to be in the associated directory (see previous section).} + +\emph{Simulation} is their a shortcut (or alias) added in the environment variable. +In fact Geant4 generate the binari file in the path \$NPS/bin/YourSystem/ where "YourSystem" depend of you compilator and OS (for example \emph{Linux-g++}). +Thats why we use a convinient shortcut. + +After typing that command you will have a typical shell output of Geant4 +\begin{verbatim} +************************************************************* +Geant4 version Name: geant4-09-01-patch-03 (12-September-2008) + Copyright : Geant4 Collaboration + Reference : NIM A 506 (2003), 250-303 + WWW : http://cern.ch/geant4 +************************************************************* +\end{verbatim} + +Followed by the echo of what are in your input file. +Check their that the token are well detected and everything correctly instantiate. + +Then you have some standard Geant4 output again and the idle consol where you can tape any of the common Geant4 command, such as launching a run of 100 event: +\begin{verbatim} +Idle> run/beamOn 100 +\end{verbatim} + +If you want to display the tracking of particle in the differente volume and check the Energy loss you can type the following line. +Keep in mind that display slow down the computation. + +\begin{verbatim} +Idle> tracking/verbose 1 +\end{verbatim} + +The simulation will use the configured EventGenerator describe in your input file to generate events. +Geant4 will deal with the particle tracking, energy loss, decay,... +and the NPS framework generate an output ROOT file in the \$NPT/Output/Simulation directory. Default name for this file is mySimul.root. +Since the file is regenerated at each execution, one need to rename it in order to keep it. + +\section{ Adding a detector to NPS } + +\subsection{ the VDetector class} + +First you can have a look to the VDetector.hh file in the \$NPS/include directory. +All the detector inherited from this Virtual class (V in VDetector stand for that, following the Geant4 naming convention). +A virtual class described what should be the standard features of the inherited object. +In this case their is 5 methods: Note thats those method are virtual, wich mean they are not implemented within this virtual class but in the daughter class. +That allow to have the same method implemented differently for each detector. +The " = 0 " following the class header mean that compilation failed if the daugter class do not have its own method definition (wich can be eventually empty). +A Vector of VDetector is manage by the DetectorConstruction file (see DetectorConstruction.hh and .cc) wich call those method automatically. + + \begin{itemize} + \item[] ReadConfiguration(string): Read the file describing the Detector Configuration, ie: number of detector, position, and other option + \item[] ConstructDetector(G4LogicalVolume*): Argument is the world volume. The method construct the volume + \item[] ReadSensitive(const G4Event*): Read the scorer associate the to the sensitive method + \end{itemize} + +The two last methods are followed by a "{}" wich mean you are free to implemented or not. +If not they will remain empty. + \begin{itemize} + \item[] InitializeRootOutput(): Instantiate a new Root Data object (see NPLib) and associate it to a new branch + \item[] InitializeScorers(): Initialize the scorer (see GeneralScorer.hh and Geant4 Documentation) + \end{itemize} + +\section{ Step by Step from the DUMMYDetector class} + The DUMMYDetector is a simple example of detector class manage in NPSimulation. + We will use this class as a starting point for adding your new detector + + \subsection{Step 1 : copying} + An easy step, just copy the file DummyDetector.cc and DummyDetector.hh in the NPSimulation/src and NPSimulation/include directory. + Then rename them after your detector name, let say WonderfulDetector for the rest of the exemple. + Open them with your favorite editor and use the replace function to replace all the DUMMYDetector occurence by your detector name, WondenfulDetector. + You almost have finnish... + + \subsection{Step 2 : adding your detector to the Detector Construction} + In order to allow the detector construction ton instantiate detector of yours you have to "tell him" to search for such detector. + Open the DetectorConstruction.cc file in the NPSimulation/src directory. + Have a look at the preprocessor includes, their is a list of all the detector avaible, just add a line with your file : + \begin{verbatim} + #include "WinderfulDetector.hh" + \end{verbatim} + + Now DetectorConstruction know the WonderfulDetector class, but do not know how to find it in an input file. + Have look to the DetectorConstruction::ReadConfigurationFile method. + In this method Detector construction is reading the detector input file and looking for what kind of detector are presents. + Every time a new kind of detector is detected, a new array of this kind is instantiate and inialize via is own ReadConfiguration method. + For that, every class need an "array starting" token, wich should be different of the "module starting" token. + In our case we will choose "WonderfulArray" as an array starting token. + In order to avoid infinite loop of adding and adding the same detector again and again we need a boolean check, that simply check this kind of array is not already instantiate. + First, add one of this boolean, lets called it cWonderful, your code should look like that + + \begin{verbatim} + /////////Checking Boolean//////////////////// + bool cMUST2 = false; + bool cAddThinSi = false; + bool cGeneralTarget = false; + bool cGPDTracker = false; // Gaspard Tracker + bool cS1 = false; + bool cPlastic = false; + bool cDummy = false; + bool cWonderful = false; + \end{verbatim} + + + Then add the small searching sequence right after the Dummy Detector Sequence: + + \begin{verbatim} + //////////////////////////////////////////// + /////// Search for a Dummy Detector //////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 16, "TheDUMMYDetector") == 0 && cDummy == false) { + cDummy = true ; + G4cout << "//////// DUMMY DETECTOR ////////" << G4endl << G4endl; + + // Instantiate the new array as a VDetector Object + VDetector* myDetector = new DUMMYDetector(); + + // Read Position of detector + ConfigFile.close(); + myDetector->ReadConfiguration(Path); + ConfigFile.open(Path.c_str()); + + // Add array to the VDetector Vector + AddDetector(myDetector); + } + + //////////////////////////////////////////// + //// Search for a Wonderful Detector ////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 15, "WonderfulArray") == 0 && cWonderful == false) { + cWonderful = true ; + G4cout << "//////// wonderful ARRAY ////////" << G4endl << G4endl; + + // Instantiate the new array as a VDetector Object + VDetector* myDetector = new WonderfulDetector(); + + // Read Position of detector + ConfigFile.close(); + myDetector->ReadConfiguration(Path); + ConfigFile.open(Path.c_str()); + + // Add array to the VDetector Vector + AddDetector(myDetector); + } + \end{verbatim} + + \subsection{Step 3 : Data output} + + Lets have look to your Detector code. Open the WonderfulDetector.hh file and look at the private member, you should find the following line + + \begin{verbatim} + //////////////////////////////////////////////////// + ///////////Event class to store Data//////////////// + //////////////////////////////////////////////////// + private: + TWonderfulDetectorData* m_Event ; + + \end{verbatim} + + The TWonderfulDetectorData class probably do not exist yet. + So you will have to create one, for that, follow the tutorial in the NPLib chapter. + If this class do not exist and you do not want to create one right now, simply use the TDUMMYDetectorData class instead (do not forget to change also the preprocessort include as well). + + \subsection{Step 4 : Token definition} + NPS use input file with token detection. + For each detector there is at least two token, we already see one in the previous part, the array starting token. + You will need a second one, the module starting one, let choose "WonderfulModule". + So have a look at the WonderfulDetector::ReadCOnfiguration method. + In this method a loop over the config file is made, once the module starting bloc is fine, the ReadingStatus is set to true, wich mean we toggle to a module token search mode. + Generally speaking the "\%" simbole is used as a comment symbole and every caracter after this symbole will be skipped until the end of line. + This is the first token search. + Then come the search for another module starting search, here a security to avoid wrong token sequence. + Then come the list of all token. + You can add as many token as you need following the same model. + Just add one for exercise your self, + + \begin{description} + \item[1:] Copying the THETA token bloc + \item[2:] We want to add a Token associate to the number of stage in our detector. At the beginning of the function let create an integer name NumberOfStage and set it to 0. We also need a boolean to check the token as been found, just create a boolean named check\_NumberOfStage, and set it to false (have a look to the other variable such as Theta and check\_Theta). + \item[3:] Change THETA to your new token, for instance "HOW\_MANY\_STAGE=" (note that token can't have space and always finnish by =). This new token have 15 caracter, so change the second argument of the compare method from 6 to 15. + \item[4:] Change check\_Theta to check\_NumberOfStage and \emph{Theta = atof(DataBuffer.c\_str())} to \emph{NumberOfStage = atof(DataBuffer.c\_str())}. Remove the \emph{Theta=Theta*deg} and change the cout to display a corrected message. + \end{description} + + + \subsection{Step 5 : Material definition} + + Just have a look at the InitializeMaterial function. + You can here define as many as needed material after adding a private G4Material* object member to your classe. + Remember to delete those new object in the detector destructor. Those material can then be used in the volume definition. + This way each material are defined only one time per array, assuring a low number of material and therefor a low time running. + + \subsection{Step 6 : Scorer definition} + + Let's define a Scorer as class object allowing you to perform any kind of measurement.NPSimulation used G4VPScorer (see the G4 documentation for more detail), understand Virtual Primitive Scorer. + This virtual class allow Geant4 user to define the kind of scorer they want. + Initially scorer were design to allow user to monitor some physical value inside a logical volume without using the ReadSensitive class and ReadOutGeometry. + However, dure to their conception, those object was slow and running time quickly increased with the number of scorer... + In NPSimulation we improve this system, using a new way of indexing data in scorer and delete them when they are not needed anymore and the running time is acceptable. + Moreover, the Scorer simplify the code reading and allow user to come with their own set of scorer file dedicate to their detector. + We implement some General Purpose scorer that you can use as well. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter[NPAnalysis]{NPAnalysis} + +\end{document} + diff --git a/NPDocumentation/logo/NPTool1.0.jpg b/NPDocumentation/logo/NPTool1.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51a84c0ae6f32640d982334e10cfa33dd79963ea Binary files /dev/null and b/NPDocumentation/logo/NPTool1.0.jpg differ diff --git a/NPDocumentation/logo/NPTool1.0.png b/NPDocumentation/logo/NPTool1.0.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0828efd3a830f908ef0dec4e3704b253d6be0e Binary files /dev/null and b/NPDocumentation/logo/NPTool1.0.png differ diff --git a/NPDocumentation/logo/NPTool1.0.xcf b/NPDocumentation/logo/NPTool1.0.xcf new file mode 100644 index 0000000000000000000000000000000000000000..58666892c100d9693adba9a7cc3c557194f3a0be Binary files /dev/null and b/NPDocumentation/logo/NPTool1.0.xcf differ diff --git a/NPDocumentation/pictures/nptool_scheme_Ana.png b/NPDocumentation/pictures/nptool_scheme_Ana.png new file mode 100644 index 0000000000000000000000000000000000000000..b30c35fc9c2c367c23edc409a8cc92d38c660f46 Binary files /dev/null and b/NPDocumentation/pictures/nptool_scheme_Ana.png differ diff --git a/NPDocumentation/pictures/nptool_scheme_Sim.png b/NPDocumentation/pictures/nptool_scheme_Sim.png new file mode 100644 index 0000000000000000000000000000000000000000..56f517dfd174d3a86a0c87c90270acd904645b0b Binary files /dev/null and b/NPDocumentation/pictures/nptool_scheme_Sim.png differ diff --git a/NPEnvironment.bash b/NPEnvironment.bash index cf4896c979f7f48e16239de60a7f73b7f1c54d52..7e7d5183cfe65ec7f8b4ea15a44bf4993eb59419 100644 --- a/NPEnvironment.bash +++ b/NPEnvironment.bash @@ -16,3 +16,4 @@ alias NPT='cd $NPTOOL' alias NPL='cd $NPLIB' alias NPS='cd $NPSIM' alias NPA='cd $NPANA' + diff --git a/NPEnvironment.tchrc b/NPEnvironment.tchrc index 43f970f282a2c91c5e084885418bc38d3b21683c..61ebdb79c3e740adf51dd1aa66ae63f57e87eab6 100644 --- a/NPEnvironment.tchrc +++ b/NPEnvironment.tchrc @@ -7,6 +7,7 @@ setenv NPLIB $NPTOOL/NPLib setenv NPSIM $NPTOOL/NPSimulation setenv NPANA $NPTOOL/NPAnalysis setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:$NPLIB/lib +source $NPLIB/lib/liblist # alias alias Simulation '$NPSIM/bin/$G4SYSTEM/Simulation' diff --git a/NPLib/AnnularS1/TS1Data.cxx b/NPLib/AnnularS1/TS1Data.cxx index 96ba8d46714fba5c24abb240f4bf4b42c14c4ed0..e5224851600abf587d58a78e8cbce7909926d20d 100644 --- a/NPLib/AnnularS1/TS1Data.cxx +++ b/NPLib/AnnularS1/TS1Data.cxx @@ -71,7 +71,7 @@ void TS1Data::Clear() -void TS1Data::Dump() +void TS1Data::Dump() const { cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event XXXXXXXXXXXXXXXXX" << endl; diff --git a/NPLib/AnnularS1/TS1Data.h b/NPLib/AnnularS1/TS1Data.h index d0a910d817c84aa4e4f9d1285b80672a397e079b..225f6e714cbbb9ec411a9c56f71b76378bbf0eda 100644 --- a/NPLib/AnnularS1/TS1Data.h +++ b/NPLib/AnnularS1/TS1Data.h @@ -61,7 +61,8 @@ class TS1Data : public TObject { virtual ~TS1Data(); void Clear(); - void Dump(); + void Clear(const Option_t*) {}; + void Dump() const; @@ -105,7 +106,7 @@ class TS1Data : public TObject { void SetS1PhiTStripNbr(UShort_t Nr) {fS1_Phi_T_StripNbr.push_back(Nr);} void SetS1PhiTTime(Double_t T) {fS1_Phi_T_Time.push_back(T);} - ClassDef(TS1Data,1) // S1Data structure + ClassDef(TS1Data,2) // S1Data structure }; #endif diff --git a/NPLib/CalibrationManager/CalibrationManager.cxx b/NPLib/CalibrationManager/CalibrationManager.cxx new file mode 100644 index 0000000000000000000000000000000000000000..085c08285c60962b323ad2a89135c9683dd309bb --- /dev/null +++ b/NPLib/CalibrationManager/CalibrationManager.cxx @@ -0,0 +1,175 @@ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : october 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class manage the calibration coefficient of the detector in NPA * + * * + *---------------------------------------------------------------------------* + * Comment: * + * This class is a singleton * + * * + *****************************************************************************/ +#include "CalibrationManager.h" + +// STL +#include <cstdlib> +#include <limits> +#include <cmath> + +////////////////////////////////////////////////////////////////// +CalibrationManager* CalibrationManager::instance = 0; + +CalibrationManager* CalibrationManager::getInstance(string configFileName) + { + // A new instance of CalibrationManager is created if it does not exist: + if (instance == 0) { + instance = new CalibrationManager(configFileName); + } + + // The instance of CalibrationManager is returned: + return instance; + } + +////////////////////////////////////////////////////////////////// +CalibrationManager::CalibrationManager(string configFileName) + { + // Read configuration file Buffer + string lineBuffer, dataBuffer; + + // Open file + ifstream inputConfigFile; + inputConfigFile.open(configFileName.c_str()); + + cout << "/////////////////////////////////" << endl; + cout << "Getting list of Calibration File" << endl; + + if (!inputConfigFile) { + cout << "Calibration Path file :" << configFileName << " not found " << endl; + return; + } + + else { + while (!inputConfigFile.eof()) { + getline(inputConfigFile, lineBuffer); + + // search for token giving the list of Root files to treat + if ( lineBuffer.compare(0, 12, "CalibrationFilePath") == 0 ) { + while (!inputConfigFile.eof()) { + inputConfigFile >> dataBuffer; + + // ignore comment Line + if (dataBuffer.compare(0, 1, "%") == 0) { + inputConfigFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); + } + + else if (!inputConfigFile.eof()) { + AddFile(dataBuffer); + cout << "Adding file " << dataBuffer << " to Calibration" << endl; + } + } + } + } + } + cout << "/////////////////////////////////" << endl;} + +////////////////////////////////////////////////////////////////// +CalibrationManager::~CalibrationManager() + {} + +////////////////////////////////////////////////////////////////// +bool CalibrationManager::AddParameter(string DetectorName , string ParameterName , string Token ) + { + string ParameterPath = DetectorName + "/" + ParameterName ; + fToken[Token] = ParameterPath ; + return true; + } + +////////////////////////////////////////////////////////////////// +void CalibrationManager::LoadParameterFromFile() + { + ifstream CalibFile ; + string DataBuffer ; + + for(unsigned int i = 0 ; i < fFileList.size() ; i++) + { + CalibFile.open( fFileList[i].c_str() ); + vector<double> Coeff ; + map<string,string>::iterator it ; + + if(!CalibFile) + { + cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ; + cout << " WARNING: FILE " << fFileList[i] << " IS MISSING " << endl ; + cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ; + + } + + else while( !CalibFile.eof() ) + { + CalibFile >> DataBuffer ; + + // Search word in the token list + it=fToken.find(DataBuffer); + + // if the word is find, values are read + if( it!=fToken.end() ) + { + + Coeff.clear(); + while(DataBuffer!="\n") + { + CalibFile >> DataBuffer ; Coeff.push_back( atof(DataBuffer.c_str()) ) ; + } + + // Check this parameter is not already define + if( fCalibrationCoeff.find(it->second) != fCalibrationCoeff.end() ) cout << "WARNING: Parameter " << it->second << " Already found. It will be rewritted " << endl; + + // Add the list of Coeff to the Coeff map using Parameter Path as index + fCalibrationCoeff[ it->second ] = Coeff ; + } + + } + CalibFile.close() ; + } + + } + +////////////////////////////////////////////////////////////////// +double CalibrationManager::ApplyCalibration(string ParameterPath , double RawValue) + { + double CalibratedValue = 0 ; + map< string , vector<double> >::iterator it ; + it = fCalibrationCoeff.find(ParameterPath) ; + + if(it == fCalibrationCoeff.end() ) + { + /* cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ; + cout << " ERROR: PARAMETER " << ParameterPath << " IS NOT FOUND IN THE CALIBRATION DATA BASE " << endl ; + cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " << endl ;*/ + + return RawValue ; + } + + vector<double> Coeff = it->second ; + + for(unsigned int i = 0 ; i < Coeff.size() ; i++) + { + CalibratedValue += Coeff[i]*pow(RawValue, (double)i); + } + + return CalibratedValue ; + + } +////////////////////////////////////////////////////////////////// + + diff --git a/NPLib/CalibrationManager/CalibrationManager.h b/NPLib/CalibrationManager/CalibrationManager.h new file mode 100644 index 0000000000000000000000000000000000000000..69df3a9f7f5e1ed8ee4519c1dbeaaa488cdd128d --- /dev/null +++ b/NPLib/CalibrationManager/CalibrationManager.h @@ -0,0 +1,81 @@ +#ifndef ConfigManager_h +#define ConfigManager_h 1 +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : october 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class manage the calibration coefficient of the detector in NPA * + * * + *---------------------------------------------------------------------------* + * Comment: * + * This class is a singleton * + * * + *****************************************************************************/ +// STL +#include<fstream> +#include<iostream> +#include<string> +#include<vector> +#include<map> + +using namespace std ; + +class CalibrationManager + { + + public: // Constructor and Destructor + CalibrationManager(string configFileName); + ~CalibrationManager(); + + public: // Accessor + // return a pointer to the calibration manager instance. + // if the instance does not exist it is created. + static CalibrationManager* getInstance(string configFileName="XXX"); + + private: // the instance + // Hold a pointer on itself + static CalibrationManager* instance ; + + public: // File Management + inline void AddFile(string Path) { fFileList.push_back(Path) ;} ; + + + public: // Declaration of Calibration + + // call like : myCalibrationManager->AddParameter( "MUST2" ,"Telescope5_Si_X38_E", "T5_Si_X38_E" ) + // return false if the token is not found in the file list + bool AddParameter(string DetectorName , string ParameterName , string Token ) ; + + // call like : myCalibrationManager->ApplyCalibration( "MUST2/Telescope5_Si_X38_E" , RawEnergy ) + // return the Calibrated value + double ApplyCalibration(string ParameterPath , double RawValue); + + + public: // To be called after initialisation + // Loop over the file list and catch the file used for calibration + void LoadParameterFromFile(); + + + private: + // This map hold a vector of the calibration coefficient. Index is the Parameter path, like "MUST2/Telescope5_Si_X38_E" + map< string , vector<double> > fCalibrationCoeff ; + + // Hold the path of all the registered file of coeff + vector<string> fFileList ; + + // Hold The list of Token. Index is the Token, value the parameter path. + map< string , string > fToken ; + + }; + +#endif diff --git a/NPLib/CalibrationManager/Makefile b/NPLib/CalibrationManager/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..3b8a94b26d7f41761459dc181d3bf4f53badc91c --- /dev/null +++ b/NPLib/CalibrationManager/Makefile @@ -0,0 +1,299 @@ +# Makefile for the ROOT test programs. +# This Makefile shows nicely how to compile and link applications +# using the ROOT libraries on all supported platforms. +# +# Copyright (c) 2000 Rene Brun and Fons Rademakers +# +# Author: Fons Rademakers, 29/2/2000 + +ROOTCONFIG := root-config + +ARCH := $(shell $(ROOTCONFIG) --arch) +PLATFORM := $(shell $(ROOTCONFIG) --platform) +ALTCC := $(shell $(ROOTCONFIG) --cc) +ALTCXX := $(shell $(ROOTCONFIG) --cxx) +ALTF77 := $(shell $(ROOTCONFIG) --f77) +ALTLD := $(shell $(ROOTCONFIG) --ld) + +#CXX = +ObjSuf = o +SrcSuf = cxx +ExeSuf = +DllSuf = so +OutPutOpt = -o # keep whitespace after "-o" + +ifeq (debug,$(findstring debug,$(ROOTBUILD))) +OPT = -g +OPT2 = -g +else +ifneq ($(findstring debug, $(strip $(shell $(ROOTCONFIG) --config))),) +OPT = -g +OPT2 = -g +else +OPT = -O +OPT2 = -O2 +endif +endif + +ROOTCFLAGS := $(shell $(ROOTCONFIG) --cflags) +ROOTLDFLAGS := $(shell $(ROOTCONFIG) --ldflags) +ROOTLIBS := $(shell $(ROOTCONFIG) --libs) +ROOTGLIBS := $(shell $(ROOTCONFIG) --glibs) +HASTHREAD := $(shell $(ROOTCONFIG) --has-thread) +ROOTDICTTYPE := $(shell $(ROOTCONFIG) --dicttype) +NOSTUBS := $(shell $(ROOTCONFIG) --nostubs) +ROOTCINT := rootcint + +ifeq ($(ARCH),linux) +# Linux with egcs, gcc 2.9x, gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxkcc) +# Linux with the KAI compiler +CXX = KCC --one_instantiation_per_object +CXXFLAGS = $(OPT) -fPIC +K0 +LD = KCC +LDFLAGS = $(OPT) $(shell $(ROOTCONFIG) --cflags) +SOFLAGS = +endif + +ifeq ($(ARCH),linuxicc) +# Linux with Intel icc compiler +ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f1) +ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f2) +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxppcgcc) +# PPC Linux with gcc and glibc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64gcc) +# Itanium Linux with gcc 2.9x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64sgi) +# Itanium Linux with sgiCC +CXX = sgiCC +CXXFLAGS = $(OPT) -Wall -fPIC +LD = gsgiCC +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64ecc) +# Itanium Linux with Intel icc (was ecc) +ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f1) +ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f2) +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 -ftz +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxx8664gcc) +# AMD Opteron and Intel EM64T (64 bit mode) Linux with gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxppc64gcc) +# PPC64 Linux with gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxx8664icc) +# AMD Opteron and Intel EM64T (64 bit mode) Linux with Intel icc compiler +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 -wd1572 +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxalphagcc) +# Alpha Linux with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxmips) +# GNU/Linux on mips (BE/LE, O32/N32/N64) with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxhppa) +# GNU/Linux on hppa with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxarm) +# ARM Linux with egcs +CXX = g++ +CXXFLAGS = $(OPT) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),macosx) +# MacOS X with cc (GNU cc 2.95.2 and gcc 3.3) +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = g++ +CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual +LD = $(MACOSXTARGET) g++ +LDFLAGS = $(OPT2) -bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +UNDEFOPT = dynamic_lookup +ifneq ($(subst $(MACOSX_MINOR),,12),12) +UNDEFOPT = suppress +LD = g++ +endif +SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT) +endif + +ifeq ($(ARCH),macosxicc) +# MacOS X with Intel icc compiler +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +ifeq ($(MACOSX_MINOR),5) +MACOSX_MINOR := 4 +endif +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 +LD = $(MACOSXTARGET) icpc +LDFLAGS = $(OPT) +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup +endif + +ifeq ($(ARCH),macosx64) +# MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*) +# Only specific option (-m64) comes from root-config +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = g++ +CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual +LD = $(MACOSXTARGET) g++ -m64 +LDFLAGS = $(OPT2) -bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +SOFLAGS = -m64 -dynamiclib -single_module -undefined dynamic_lookup +endif + +ifeq ($(ARCH),macosxxlc) +# MacOS X with IBM xlC compiler +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = xlC +CXXFLAGS = $(OPT) +LD = $(MACOSXTARGET) xlC +LDFLAGS = $(OPT) -Wl,-bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +DllSuf = dylib +UNDEFOPT = dynamic_lookup +ifneq ($(subst $(MACOSX_MINOR),,12),12) +UNDEFOPT = suppress +LD = xlC +endif +SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT) +endif + +CXXFLAGS += $(ROOTCFLAGS) +LDFLAGS += $(ROOTLDFLAGS) +LIBS = $(ROOTLIBS) $(SYSLIBS) +GLIBS = $(ROOTGLIBS) $(SYSLIBS) + +INCLUDE = -I$(CLHEP_BASE_DIR)/include + +#------------------------------------------------------------------------------ +SHARELIB = libCalibrationManager.so + +all: $(SHARELIB) +#------------------------------------------------------------------------------ +############### Detector ############## + +## MUST2 ## +libCalibrationManager.so: CalibrationManager.o + $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ + +# dependances +CalibrationManager.o: CalibrationManager.cxx CalibrationManager.h +####################################### + +############# Clean and More ########## +clean: + @rm -f core *~ *.o *Dict* + +distclean: + make clean; rm -f *.so + +.SUFFIXES: .$(SrcSuf) + +### + +.$(SrcSuf).$(ObjSuf): + $(CXX) $(CXXFLAGS) $(INCLUDE) -c $< + + diff --git a/NPLib/DummyDetector/Makefile b/NPLib/DummyDetector/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..1d864a05a5312e340ec75ed81070789f66fa289f --- /dev/null +++ b/NPLib/DummyDetector/Makefile @@ -0,0 +1,302 @@ +# Makefile for the ROOT test programs. +# This Makefile shows nicely how to compile and link applications +# using the ROOT libraries on all supported platforms. +# +# Copyright (c) 2000 Rene Brun and Fons Rademakers +# +# Author: Fons Rademakers, 29/2/2000 + +ROOTCONFIG := root-config + +ARCH := $(shell $(ROOTCONFIG) --arch) +PLATFORM := $(shell $(ROOTCONFIG) --platform) +ALTCC := $(shell $(ROOTCONFIG) --cc) +ALTCXX := $(shell $(ROOTCONFIG) --cxx) +ALTF77 := $(shell $(ROOTCONFIG) --f77) +ALTLD := $(shell $(ROOTCONFIG) --ld) + +#CXX = +ObjSuf = o +SrcSuf = cxx +ExeSuf = +DllSuf = so +OutPutOpt = -o # keep whitespace after "-o" + +ifeq (debug,$(findstring debug,$(ROOTBUILD))) +OPT = -g +OPT2 = -g +else +ifneq ($(findstring debug, $(strip $(shell $(ROOTCONFIG) --config))),) +OPT = -g +OPT2 = -g +else +OPT = -O +OPT2 = -O2 +endif +endif + +ROOTCFLAGS := $(shell $(ROOTCONFIG) --cflags) +ROOTLDFLAGS := $(shell $(ROOTCONFIG) --ldflags) +ROOTLIBS := $(shell $(ROOTCONFIG) --libs) +ROOTGLIBS := $(shell $(ROOTCONFIG) --glibs) +HASTHREAD := $(shell $(ROOTCONFIG) --has-thread) +ROOTDICTTYPE := $(shell $(ROOTCONFIG) --dicttype) +NOSTUBS := $(shell $(ROOTCONFIG) --nostubs) +ROOTCINT := rootcint + +ifeq ($(ARCH),linux) +# Linux with egcs, gcc 2.9x, gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxkcc) +# Linux with the KAI compiler +CXX = KCC --one_instantiation_per_object +CXXFLAGS = $(OPT) -fPIC +K0 +LD = KCC +LDFLAGS = $(OPT) $(shell $(ROOTCONFIG) --cflags) +SOFLAGS = +endif + +ifeq ($(ARCH),linuxicc) +# Linux with Intel icc compiler +ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f1) +ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f2) +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxppcgcc) +# PPC Linux with gcc and glibc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64gcc) +# Itanium Linux with gcc 2.9x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64sgi) +# Itanium Linux with sgiCC +CXX = sgiCC +CXXFLAGS = $(OPT) -Wall -fPIC +LD = gsgiCC +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64ecc) +# Itanium Linux with Intel icc (was ecc) +ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f1) +ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f2) +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 -ftz +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxx8664gcc) +# AMD Opteron and Intel EM64T (64 bit mode) Linux with gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxppc64gcc) +# PPC64 Linux with gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxx8664icc) +# AMD Opteron and Intel EM64T (64 bit mode) Linux with Intel icc compiler +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 -wd1572 +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxalphagcc) +# Alpha Linux with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxmips) +# GNU/Linux on mips (BE/LE, O32/N32/N64) with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxhppa) +# GNU/Linux on hppa with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxarm) +# ARM Linux with egcs +CXX = g++ +CXXFLAGS = $(OPT) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),macosx) +# MacOS X with cc (GNU cc 2.95.2 and gcc 3.3) +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = g++ +CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual +LD = $(MACOSXTARGET) g++ +LDFLAGS = $(OPT2) -bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +UNDEFOPT = dynamic_lookup +ifneq ($(subst $(MACOSX_MINOR),,12),12) +UNDEFOPT = suppress +LD = g++ +endif +SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT) +endif + +ifeq ($(ARCH),macosxicc) +# MacOS X with Intel icc compiler +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +ifeq ($(MACOSX_MINOR),5) +MACOSX_MINOR := 4 +endif +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 +LD = $(MACOSXTARGET) icpc +LDFLAGS = $(OPT) +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup +endif + +ifeq ($(ARCH),macosx64) +# MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*) +# Only specific option (-m64) comes from root-config +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = g++ +CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual +LD = $(MACOSXTARGET) g++ -m64 +LDFLAGS = $(OPT2) -bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +SOFLAGS = -m64 -dynamiclib -single_module -undefined dynamic_lookup +endif + +ifeq ($(ARCH),macosxxlc) +# MacOS X with IBM xlC compiler +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = xlC +CXXFLAGS = $(OPT) +LD = $(MACOSXTARGET) xlC +LDFLAGS = $(OPT) -Wl,-bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +DllSuf = dylib +UNDEFOPT = dynamic_lookup +ifneq ($(subst $(MACOSX_MINOR),,12),12) +UNDEFOPT = suppress +LD = xlC +endif +SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT) +endif + +CXXFLAGS += $(ROOTCFLAGS) +LDFLAGS += $(ROOTLDFLAGS) +LIBS = $(ROOTLIBS) $(SYSLIBS) +GLIBS = $(ROOTGLIBS) $(SYSLIBS) + +INCLUDE = -I$(CLHEP_BASE_DIR)/include + +#------------------------------------------------------------------------------ +SHARELIB = libDUMMYDetectorData.so + +all: $(SHARELIB) +#------------------------------------------------------------------------------ +############### Detector ############## + +## DUMMYDetector ## +libDUMMYDetectorData.so: TDUMMYDetectorData.o TDUMMYDetectorDataDict.o + $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ + +TDUMMYDetectorDataDict.cxx: TDUMMYDetectorData.h + rootcint -f $@ -c $^ + +# dependances +TDUMMYDetectorData.o: TDUMMYDetectorData.cxx TDUMMYDetectorData.h +####################################### + +############# Clean and More ########## +clean: + @rm -f core *~ *.o *Dict* + +distclean: + make clean; rm -f *.so + +.SUFFIXES: .$(SrcSuf) + +### + +.$(SrcSuf).$(ObjSuf): + $(CXX) $(CXXFLAGS) $(INCLUDE) -c $< + + diff --git a/NPLib/DummyDetector/TDUMMYDetectorData.cxx b/NPLib/DummyDetector/TDUMMYDetectorData.cxx new file mode 100755 index 0000000000000000000000000000000000000000..1c15b58bdaa04b846a331cac3de2a18b26d11ee0 --- /dev/null +++ b/NPLib/DummyDetector/TDUMMYDetectorData.cxx @@ -0,0 +1,59 @@ +#include <iostream> +#include "TDUMMYDetectorData.h" +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : October 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class described the raw data of a very simple DUMMYDetector * + * Use it as a template for your own detector! * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ + +ClassImp(TDUMMYDetectorData) + +TDUMMYDetectorData::TDUMMYDetectorData() +{ +} + + + +TDUMMYDetectorData::~TDUMMYDetectorData() +{ +} + + + +void TDUMMYDetectorData::Clear() +{ + fDUMMYDetector_Energy.clear(); + fDUMMYDetector_Number.clear(); + fDUMMYDetector_Time.clear(); +} + + + +void TDUMMYDetectorData::Dump() const +{ + cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event XXXXXXXXXXXXXXXXX" << endl; + + for(unsigned short i = 0 ; i<fDUMMYDetector_Energy.size() ; i ++) + { + cout << "DUMMYDetector Number " << fDUMMYDetector_Number[i] << " Energy: " << fDUMMYDetector_Energy[i] << " Time: "<< fDUMMYDetector_Time[i] << endl; + + } + +} diff --git a/NPLib/DummyDetector/TDUMMYDetectorData.h b/NPLib/DummyDetector/TDUMMYDetectorData.h new file mode 100755 index 0000000000000000000000000000000000000000..cc5c29fa18c8300f629b2c221e06e6d60d6e5d0e --- /dev/null +++ b/NPLib/DummyDetector/TDUMMYDetectorData.h @@ -0,0 +1,72 @@ +#ifndef __DUMMYDetectorDATA__ +#define __DUMMYDetectorDATA__ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : October 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class described the raw data of a very simple DUMMY detector * + * Use it as a template for your own detector! * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ +#include <vector> + +#include "TObject.h" +using namespace std ; + + +class TDUMMYDetectorData : public TObject { + private: + // ADC + vector<double> fDUMMYDetector_Energy ; + vector<double> fDUMMYDetector_Time ; + vector<short> fDUMMYDetector_Number ; + + public: + TDUMMYDetectorData(); + virtual ~TDUMMYDetectorData(); + + void Clear(); + void Clear(const Option_t*) {}; + void Dump() const; + + ///////////////////// GETTERS //////////////////////// + // (E) + double GetEnergy(int i) {return fDUMMYDetector_Energy[i];} + // (T) + double GetTime(int i) {return fDUMMYDetector_Time[i];} + // (N) + int GetDUMMYDetectorNumber(int i) {return fDUMMYDetector_Number[i];} + + + double GetEnergySize() {return fDUMMYDetector_Energy.size();} + // (T) + double GetTimeSize() {return fDUMMYDetector_Time.size();} + // (N) + int GetDUMMYDetectorNumberSize() {return fDUMMYDetector_Number.size();} + + + ///////////////////// SETTERS //////////////////////// + // (E) + void SetEnergy(double E) {fDUMMYDetector_Energy.push_back(E);} + void SetTime(double T) {fDUMMYDetector_Time.push_back(T);} + void SetDUMMYDetectorNumber(int N) {fDUMMYDetector_Number.push_back(N);} + + // + ClassDef(TDUMMYDetectorData,1) // DUMMYDetectorData structure +}; + +#endif diff --git a/NPLib/GASPARD/GaspardTracker.cxx b/NPLib/GASPARD/GaspardTracker.cxx index c6afac495de05ac57b9fd2a2dc6e1f795bac21c0..ee430b6cd09f6f03198c8e9429eff559047ded2f 100644 --- a/NPLib/GASPARD/GaspardTracker.cxx +++ b/NPLib/GASPARD/GaspardTracker.cxx @@ -536,6 +536,9 @@ void GaspardTracker::AddModuleSquare(TVector3 C_X1_Y1, { m_NumberOfModule++; + // remove warning using C_X128_Y128 + C_X128_Y128.Unit(); + // Vector U on Module Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) TVector3 U = C_X128_Y1 - C_X1_Y1; U = U.Unit(); @@ -692,6 +695,9 @@ void GaspardTracker::AddModuleDummyShape(TVector3 C_X1_Y1, { m_NumberOfModule++; + // remove warning using C_X128_Y128 + C_X128_Y128.Unit(); + // Vector U on Module Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) TVector3 U = C_X128_Y1 - C_X1_Y1; U = U.Unit(); @@ -796,7 +802,7 @@ void GaspardTracker::AddModuleDummyShape(double theta, V.Rotate( beta_w * Pi/180. , W ) ; double Face = 50; // mm - double NumberOfStrip = 128; + double NumberOfStrip = 25; double StripPitch = Face/NumberOfStrip; // mm vector<double> lineX; diff --git a/NPLib/GASPARD/GaspardTracker.h b/NPLib/GASPARD/GaspardTracker.h index e0d25a08bab1e7316a715f67c2a9dba4fd9df4d3..5de55bd49c53f3840d85969093c612f39452aa8c 100644 --- a/NPLib/GASPARD/GaspardTracker.h +++ b/NPLib/GASPARD/GaspardTracker.h @@ -37,7 +37,7 @@ class GaspardTracker : public NPA::VDetector { public: GaspardTracker(); - ~GaspardTracker(); + virtual ~GaspardTracker(); public: ///////////////////////////////////// diff --git a/NPLib/GASPARD/TGaspardTrackerData.cxx b/NPLib/GASPARD/TGaspardTrackerData.cxx index 72199549b2244e52310ea3480bd270d7d1f460e3..97ae3e74d203491dc7d409247d6830ea36f23385 100644 --- a/NPLib/GASPARD/TGaspardTrackerData.cxx +++ b/NPLib/GASPARD/TGaspardTrackerData.cxx @@ -89,7 +89,7 @@ void TGaspardTrackerData::Clear() -void TGaspardTrackerData::Dump() +void TGaspardTrackerData::Dump() const { cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event XXXXXXXXXXXXXXXXX" << endl; diff --git a/NPLib/GASPARD/TGaspardTrackerData.h b/NPLib/GASPARD/TGaspardTrackerData.h index b88c42ff7d6aac07ca63ab644d4888f234d270ed..3be1dc39375ce6418a552254a29d82d12df23bbc 100644 --- a/NPLib/GASPARD/TGaspardTrackerData.h +++ b/NPLib/GASPARD/TGaspardTrackerData.h @@ -82,7 +82,8 @@ public: virtual ~TGaspardTrackerData(); void Clear(); - void Dump(); + void Clear(const Option_t*) {}; + void Dump() const; ///////////////////// SETTERS //////////////////////// // DSSD diff --git a/NPLib/GASPARD/TGaspardTrackerPhysics.cxx b/NPLib/GASPARD/TGaspardTrackerPhysics.cxx index ac7dd1823d5e5fc680d668a867186153ad86c00b..8487f87751da5c57a52d2567d234347d9f7714bd 100644 --- a/NPLib/GASPARD/TGaspardTrackerPhysics.cxx +++ b/NPLib/GASPARD/TGaspardTrackerPhysics.cxx @@ -25,7 +25,6 @@ #include <iostream> #include <cstdlib> -using namespace std ; ClassImp(TGaspardTrackerPhysics) @@ -66,11 +65,12 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) bool Check_FirstStage = false ;bool Check_SecondStage = false ; bool Check_ThirdStage = false ; // Thresholds +/* double FirstStage_Front_E_Threshold = 0; double FirstStage_Front_T_Threshold = 0; double FirstStage_Back_E_Threshold = 0; double FirstStage_Back_T_Threshold = 0; double SecondStage_E_Threshold = 0; double SecondStage_T_Threshold = 0; double ThirdStage_E_Threshold = 0; double ThirdStage_T_Threshold = 0; - +*/ // calculate multipicity in the first stage int multXE = Data->GetGPDTrkFirstStageFrontEMult(); int multYE = Data->GetGPDTrkFirstStageBackEMult(); @@ -125,7 +125,7 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) FirstStage_Y.push_back(stripYE); // get energy from strips and store it double EnergyStripFront = Data->GetGPDTrkFirstStageFrontEEnergy(0); - double EnergyStripBack = Data->GetGPDTrkFirstStageBackEEnergy(0); +// double EnergyStripBack = Data->GetGPDTrkFirstStageBackEEnergy(0); // double EnergyStrip = 0.5 * (EnergyStripFront + EnergyStripBack); double EnergyStrip = EnergyStripFront; // if (EnergyStripBack > EnergyStrip) EnergyStrip = EnergyStripBack; @@ -134,8 +134,8 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) // get time from strips and store it double TimeStripFront = Data->GetGPDTrkFirstStageFrontEEnergy(0); double TimeStripBack = Data->GetGPDTrkFirstStageBackEEnergy(0); - double TimeStrip = 0.5 * (EnergyStripFront + EnergyStripBack); -// double TimeStrip = EnergyStripFront; + double TimeStrip = 0.5 * (TimeStripFront + TimeStripBack); +// double TimeStrip = TimeStripFront; // if (TimeStripBack > TimeStrip) TimeStrip = TimeStripBack; FirstStage_T.push_back(TimeStrip); diff --git a/NPLib/GASPARD/TGaspardTrackerPhysics.h b/NPLib/GASPARD/TGaspardTrackerPhysics.h index e23742bee88e73dcd8102bc39b627eecb6e0ec26..425d5e601e76a95d638d894893fa6492fc23cabd 100644 --- a/NPLib/GASPARD/TGaspardTrackerPhysics.h +++ b/NPLib/GASPARD/TGaspardTrackerPhysics.h @@ -27,6 +27,7 @@ #include <vector> #include "TObject.h" #include "TGaspardTrackerData.h" +#include <cstdlib> using namespace std ; @@ -38,6 +39,7 @@ public: public: void Clear(); + void Clear(const Option_t*) {}; void BuildPhysicalEvent(TGaspardTrackerData* Data); void BuildSimplePhysicalEvent(TGaspardTrackerData* Data); diff --git a/NPLib/INSTALL b/NPLib/INSTALL index 891fc0f3528d63be94b06b78281baf005c73b247..b93077b70d97a8fa963e57928a130d76561fd0b8 100644 --- a/NPLib/INSTALL +++ b/NPLib/INSTALL @@ -19,21 +19,33 @@ * * *****************************************************************************/ +I) REQUIREMENTS +The GSL (Gnu Scientific Library) should be installed at this step as well as +a ROOT version with the MathMore module. + + To install GSL, your distribution most likely provides a package. This is + the case for Debian / Ubuntu / Fedora / Mac Os X for example. + + To install ROOT's MathMore module, you have two options: + + Install the ROOT binary which contains support for MathMore. + + Compile the ROOT source code with support for GSL (see this web page + http://root.cern.ch/drupal/content/installing-root-source at the + GSL paragraph). + +The working GSL environement is needed for the NPEnergyLoss.{h,cxx} library +in the Tools directory + + +II) BUILDING NPLIB In order to build all the libraries of the NPLib module, use the two following commands: -+ make distclean + + make distclean Once this is done you should check that both the include and lib directories are empty. It this is not the case remove the remaining files manually. -+ make + + make Once this is done the headers of each subdirectory are copied to the include directory and the shared libraries (*.so) associated to each library are copied to the lib directory. If you are using a Mac OS system a symbolic link *.dylib is done with respect to each *.so library. - - Important note: - You need a working installation of GSL when compiling the - NPEnergyLoss.{h,cxx} library in the Tools directory. diff --git a/NPLib/IORoot/RootInput.cxx b/NPLib/IORoot/RootInput.cxx index d48d101bded2fe2d7e6a6bfa73a24f3f4cbae17b..327343c5ff756da039a2ace4878c0dd9c14f4b1e 100644 --- a/NPLib/IORoot/RootInput.cxx +++ b/NPLib/IORoot/RootInput.cxx @@ -21,6 +21,7 @@ #include <iostream> #include <fstream> +#include <limits> #include "RootInput.h" @@ -89,7 +90,12 @@ RootInput::RootInput(string configFileName) while (!inputConfigFile.eof()) { inputConfigFile >> dataBuffer; - if (!inputConfigFile.eof()) { + // ignore comment Line + if (dataBuffer.compare(0, 1, "%") == 0) { + inputConfigFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); + } + + else if (!inputConfigFile.eof()) { pRootChain->Add(dataBuffer.c_str()); cout << "Adding file " << dataBuffer << " to TChain" << endl; } diff --git a/NPLib/IORoot/RootOutput.cxx b/NPLib/IORoot/RootOutput.cxx index cd61a5186db0af883b3783b3ee1a4c3bae73750e..625edb299312ab1829bc9feebe92a41f891850e2 100644 --- a/NPLib/IORoot/RootOutput.cxx +++ b/NPLib/IORoot/RootOutput.cxx @@ -68,6 +68,7 @@ RootOutput::~RootOutput() { // The data is written to the file and the tree is closed: if (pRootFile) { + cout << endl; cout << "Got histograms and Tree !" << endl; pRootFile->Write(); pRootFile->Close(); diff --git a/NPLib/InitialConditions/TInitialConditions.cxx b/NPLib/InitialConditions/TInitialConditions.cxx index e76622b63d814b5b222b18969e06f52342a0b207..be597460ded1fc13e750111c15194a477cbf6d22 100644 --- a/NPLib/InitialConditions/TInitialConditions.cxx +++ b/NPLib/InitialConditions/TInitialConditions.cxx @@ -68,7 +68,7 @@ void TInitialConditions::Clear() -void TInitialConditions::Dump() +void TInitialConditions::Dump() const { cout << "XXXXXXXXXXXXX Initial conditions XXXXXXXXXXXXXXXX" << endl; diff --git a/NPLib/InitialConditions/TInitialConditions.h b/NPLib/InitialConditions/TInitialConditions.h index ab3a94278a5406358a7e493728c3aad251668f63..468e941d2ea92152d55524ceccf0cda2e1089a47 100644 --- a/NPLib/InitialConditions/TInitialConditions.h +++ b/NPLib/InitialConditions/TInitialConditions.h @@ -28,7 +28,6 @@ #include <vector> #include "TObject.h" - using namespace std ; @@ -66,7 +65,8 @@ public: virtual ~TInitialConditions(); void Clear(); - void Dump(); + void Clear(const Option_t*) {}; + void Dump() const; ///////////////////// SETTERS //////////////////////// // Incident particle properties (before interactions in the target) diff --git a/NPLib/InteractionCoordinates/TInteractionCoordinates.cxx b/NPLib/InteractionCoordinates/TInteractionCoordinates.cxx index 25e71b4f36ec59f741a4089304621bf14fcd12b9..624060e12b144eb54f64a5aeffbd5adcbba363eb 100644 --- a/NPLib/InteractionCoordinates/TInteractionCoordinates.cxx +++ b/NPLib/InteractionCoordinates/TInteractionCoordinates.cxx @@ -52,7 +52,7 @@ void TInteractionCoordinates::Clear() -void TInteractionCoordinates::Dump() +void TInteractionCoordinates::Dump() const { cout << "XXXXXXXXXXXXX Interaction coordinates XXXXXXXXXXXXXXXX" << endl; diff --git a/NPLib/InteractionCoordinates/TInteractionCoordinates.h b/NPLib/InteractionCoordinates/TInteractionCoordinates.h index c722d5143db392458281f9b9925ce5aab901716f..ffd1fcc3c2eb4b0c10da88bdf23081d88802e64f 100644 --- a/NPLib/InteractionCoordinates/TInteractionCoordinates.h +++ b/NPLib/InteractionCoordinates/TInteractionCoordinates.h @@ -46,9 +46,13 @@ private: public: TInteractionCoordinates(); virtual ~TInteractionCoordinates(); - +/* void Clear(); void Dump(); +*/ + void Clear(); + void Clear(const Option_t*) {}; + void Dump() const; ///////////////////// SETTERS //////////////////////// // Incident particle properties (before interactions in the target) diff --git a/NPLib/MUST2/Makefile b/NPLib/MUST2/Makefile index e2438f2ea3c42877c75421393f1c85bd48911819..483202615d51fcbee2e1ed164a130262ccad451b 100644 --- a/NPLib/MUST2/Makefile +++ b/NPLib/MUST2/Makefile @@ -281,14 +281,13 @@ libMust2Data.so: TMust2Data.o TMust2DataDict.o TMust2DataDict.cxx: TMust2Data.h rootcint -f $@ -c $^ -libMust2Physics.so: Must2Array.o TMust2Physics.o TMust2PhysicsDict.o +libMust2Physics.so: TMust2Physics.o TMust2PhysicsDict.o $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ TMust2PhysicsDict.cxx: TMust2Physics.h rootcint -f $@ -c $^ # dependances -Must2Array.o: Must2Array.cxx Must2Array.h TMust2Data.o: TMust2Data.cxx TMust2Data.h TMust2Physics.o: TMust2Physics.cxx TMust2Physics.h ####################################### diff --git a/NPLib/MUST2/Must2Array.cxx b/NPLib/MUST2/Must2Array.cxx deleted file mode 100644 index 630e036dd3eb8d2d345936862fa1fd4a78a37097..0000000000000000000000000000000000000000 --- a/NPLib/MUST2/Must2Array.cxx +++ /dev/null @@ -1,626 +0,0 @@ -#include "Must2Array.h" -/***************************************************************************** - * Copyright (C) 2009 this file is part of the NPTool Project * - * * - * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * - * For the list of contributors see $NPTOOL/Licence/Contributors * - *****************************************************************************/ - -/***************************************************************************** - * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * - * * - * Creation Date : febuary 2009 * - * Last update : * - *---------------------------------------------------------------------------* - * Decription: * - * This class manage the geometry of an array of MUST2 Telescope * - * It is used in NPAnalysis Programm * - * It also meant to manage calibration file (to be done) * - * * - *---------------------------------------------------------------------------* - * Comment: * - * Calibration need to be done * - * * - *****************************************************************************/ -// STL -#include <cmath> -#include <iostream> -#include <fstream> -#include <string> -#include <stdlib.h> - -// NPL -#include "RootInput.h" -#include "RootOutput.h" - -// Root -#include "TChain.h" - -using namespace std ; - -// Default Constructor - -MUST2Array::MUST2Array() - { - NumberOfTelescope = 0 ; - EventData = new TMust2Data ; - EventPhysics = new TMust2Physics ; - } - -MUST2Array::~MUST2Array() - { - NumberOfTelescope = 0 ; - delete EventData ; - delete EventPhysics ; - } - - -//// Innherited from VDetector Class //// - -// Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token -void MUST2Array::ReadConfiguration(string Path) -{ - ifstream ConfigFile ; - ConfigFile.open(Path.c_str()) ; - string LineBuffer ; - string DataBuffer ; - - // A:X1_Y1 --> X:1 Y:1 - // B:X128_Y1 --> X:128 Y:1 - // C:X1_Y128 --> X:1 Y:128 - // D:X128_Y128 --> X:128 Y:128 - - double Ax , Bx , Cx , Dx , Ay , By , Cy , Dy , Az , Bz , Cz , Dz ; - TVector3 A , B , C , D ; - double Theta = 0 , Phi = 0 , R = 0 , beta_u = 0 , beta_v = 0 , beta_w = 0 ; - int SI = 0 , SILI = 0 , CSI = 0 ; - - bool check_A = false ; - bool check_C = false ; - bool check_B = false ; - bool check_D = false ; - - bool check_Theta = false ; - bool check_Phi = false ; - bool check_R = false ; - bool check_beta = false ; - - bool ReadingStatus = false ; - - - while (!ConfigFile.eof()) - { - - getline(ConfigFile, LineBuffer); - - // If line is a Start Up Must2 bloc, Reading toggle to true - if (LineBuffer.compare(0, 11, "M2Telescope") == 0) - { - cout << "///" << endl ; - cout << "Telescope found: " << endl ; - ReadingStatus = true ; - - } - - // Else don't toggle to Reading Block Status - else ReadingStatus = false ; - - // Reading Block - while(ReadingStatus) - { - - ConfigFile >> DataBuffer ; - // Comment Line - if(DataBuffer.compare(0, 1, "%") == 0) { - ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' ); - - } - - // Finding another telescope (safety), toggle out - else if (DataBuffer.compare(0, 11, "M2Telescope") == 0) { - cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ; - ReadingStatus = false ; - } - - // Position method - - else if (DataBuffer.compare(0, 6, "X1_Y1=") == 0) { - check_A = true; - ConfigFile >> DataBuffer ; - Ax = atof(DataBuffer.c_str()) ; - Ax = Ax ; - ConfigFile >> DataBuffer ; - Ay = atof(DataBuffer.c_str()) ; - Ay = Ay ; - ConfigFile >> DataBuffer ; - Az = atof(DataBuffer.c_str()) ; - Az = Az ; - - A = TVector3(Ax, Ay, Az); - cout << "X1 Y1 corner position : (" << A.X() << ";" << A.Y() << ";" << A.Z() << ")" << endl; - - } - - - else if (DataBuffer.compare(0, 8, "X128_Y1=") == 0) { - check_B = true; - ConfigFile >> DataBuffer ; - Bx = atof(DataBuffer.c_str()) ; - Bx = Bx ; - ConfigFile >> DataBuffer ; - By = atof(DataBuffer.c_str()) ; - By = By ; - ConfigFile >> DataBuffer ; - Bz = atof(DataBuffer.c_str()) ; - Bz = Bz ; - - B = TVector3(Bx, By, Bz); - cout << "X128 Y1 corner position : (" << B.X() << ";" << B.Y() << ";" << B.Z() << ")" << endl; - - } - - - else if (DataBuffer.compare(0, 8, "X1_Y128=") == 0) { - check_C = true; - ConfigFile >> DataBuffer ; - Cx = atof(DataBuffer.c_str()) ; - Cx = Cx ; - ConfigFile >> DataBuffer ; - Cy = atof(DataBuffer.c_str()) ; - Cy = Cy ; - ConfigFile >> DataBuffer ; - Cz = atof(DataBuffer.c_str()) ; - Cz = Cz ; - - C = TVector3(Cx, Cy, Cz); - cout << "X1 Y128 corner position : (" << C.X() << ";" << C.Y() << ";" << C.Z() << ")" << endl; - - } - - else if (DataBuffer.compare(0, 10, "X128_Y128=") == 0) { - check_D = true; - ConfigFile >> DataBuffer ; - Dx = atof(DataBuffer.c_str()) ; - Dx = Dx ; - ConfigFile >> DataBuffer ; - Dy = atof(DataBuffer.c_str()) ; - Dy = Dy ; - ConfigFile >> DataBuffer ; - Dz = atof(DataBuffer.c_str()) ; - Dz = Dz ; - - D = TVector3(Dx, Dy, Dz); - cout << "X128 Y128 corner position : (" << D.X() << ";" << D.Y() << ";" << D.Z() << ")" << endl; - - } - - // End Position Method - - // Angle method - else if (DataBuffer.compare(0, 6, "THETA=") == 0) { - check_Theta = true; - ConfigFile >> DataBuffer ; - Theta = atof(DataBuffer.c_str()) ; - Theta = Theta ; - cout << "Theta: " << Theta << endl; - - } - - //Angle method - else if (DataBuffer.compare(0, 4, "PHI=") == 0) { - check_Phi = true; - ConfigFile >> DataBuffer ; - Phi = atof(DataBuffer.c_str()) ; - Phi = Phi ; - cout << "Phi: " << Phi << endl; - - } - - //Angle method - else if (DataBuffer.compare(0, 2, "R=") == 0) { - check_R = true; - ConfigFile >> DataBuffer ; - R = atof(DataBuffer.c_str()) ; - R = R ; - cout << "R: " << R << endl; - - } - - //Angle method - else if (DataBuffer.compare(0, 5, "BETA=") == 0) { - check_beta = true; - ConfigFile >> DataBuffer ; - beta_u = atof(DataBuffer.c_str()) ; - beta_u = beta_u ; - ConfigFile >> DataBuffer ; - beta_v = atof(DataBuffer.c_str()) ; - beta_v = beta_v ; - ConfigFile >> DataBuffer ; - beta_w = atof(DataBuffer.c_str()) ; - beta_w = beta_w ; - cout << "Beta: " << beta_u << " " << beta_v << " " << beta_w << endl ; - - } - - ///////////////////////////////////////////////// - // If All necessary information there, toggle out - if ( (check_A && check_B && check_C && check_D) || (check_Theta && check_Phi && check_R && check_beta) ) - { - ReadingStatus = false; - - ///Add The previously define telescope - //With position method - if ( check_A && check_B && check_C && check_D ) - { - AddTelescope( A , - B , - C , - D ) ; - } - - //with angle method - else if ( check_Theta && check_Phi && check_R && check_beta ) - { - AddTelescope( Theta , - Phi , - R , - beta_u , - beta_v , - beta_w ); - } - - check_A = false ; - check_B = false ; - check_C = false ; - check_D = false ; - - check_Theta = false ; - check_Phi = false ; - check_R = false ; - check_beta = false ; - - } - - } - - - - - } - - cout << endl << "/////////////////////////////" << endl<<endl; - -} - - -// Read stream at Path and pick-up calibration parameter using Token -// If argument is "Simulation" no change calibration is loaded -void MUST2Array::ReadCalibrationFile(string Path) - { - - // Order of Polynom function used for calibration - int Calibration_Si_E_Order ; - int Calibration_Si_T_Order ; - int Calibration_SiLi_E_Order ; - int Calibration_CsI_E_Order ; - - // Calibration_Si_X_E[DetectorNumber][StripNumber][Order of Coeff] - vector< vector< vector< double > > > Calibration_Si_X_E ; - vector< vector< vector< double > > > Calibration_Si_X_T ; - - vector< vector< vector< double > > > Calibration_Si_Y_E ; - vector< vector< vector< double > > > Calibration_Si_Y_T ; - - // Calibration_SiLi_E[DetectorNumber][PadNumber][Order of Coeff] - vector< vector< vector< double > > > Calibration_SiLi_E ; - - // Calibration_SiLi_E[DetectorNumber][CrystalNumber][Order of Coeff] - vector< vector< vector< double > > > Calibration_CsI_E ; - - if(Path == "Simulation") // Simulation case: data already calibrated - { - Calibration_Si_E_Order = 1 ; - Calibration_Si_T_Order = 1 ; - Calibration_SiLi_E_Order = 1 ; - Calibration_CsI_E_Order = 1 ; - - vector<double> Coef; - // Order 0 Order 1 - Coef.push_back(0) ; Coef.push_back(1) ; - - vector< vector<double> > StripLine ; - StripLine.resize( 128 , Coef) ; - - Calibration_Si_X_E.resize( NumberOfTelescope , StripLine) ; - Calibration_Si_X_T.resize( NumberOfTelescope , StripLine) ; - - Calibration_Si_Y_E.resize( NumberOfTelescope , StripLine) ; - Calibration_Si_Y_T.resize( NumberOfTelescope , StripLine) ; - - Calibration_SiLi_E.resize( NumberOfTelescope , StripLine) ; - Calibration_CsI_E .resize( NumberOfTelescope , StripLine) ; - } - - else - { - - - } - } - - -// Activated associated Branches and link it to the private member DetectorData address -// In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated -void MUST2Array::InitializeRootInput() - { - TChain* inputChain = RootInput::getInstance()->GetChain() ; - inputChain->SetBranchStatus( "MUST2" , true ) ; - inputChain->SetBranchStatus( "fMM_*" , true ) ; - inputChain->SetBranchAddress( "MUST2" , &EventData ) ; - } - - -// Create associated branches and associated private member DetectorPhysics address -void MUST2Array::InitializeRootOutput() - { - TTree* outputTree = RootOutput::getInstance()->GetTree() ; - outputTree->Branch( "MUST2" , "TMust2Physics" , &EventPhysics ) ; - } - - -// This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. -void MUST2Array::BuildPhysicalEvent() - { - EventPhysics -> BuildPhysicalEvent(EventData) ; - } - - -// Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...). -// This method aimed to be used for analysis performed during experiment, when speed is requiered. -// NB: This method can eventually be the same as BuildPhysicalEvent. -void MUST2Array::BuildSimplePhysicalEvent() - { - EventPhysics -> BuildSimplePhysicalEvent(EventData) ; - } - - - -///// Specific to MUST2Array //// - -void MUST2Array::AddTelescope( TVector3 C_X1_Y1 , - TVector3 C_X128_Y1 , - TVector3 C_X1_Y128 , - TVector3 C_X128_Y128 ) - { - NumberOfTelescope++; - - // Vector U on Telescope Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) - TVector3 U = C_X1_Y1 - C_X128_Y1 ; - U = U.Unit() ; - // Vector V on Telescope Face (parallele to X Strip) - TVector3 V = C_X128_Y128 - C_X128_Y1 ; - V = V.Unit() ; - - // Position Vector of Strip Center - TVector3 StripCenter = TVector3(0,0,0) ; - // Position Vector of X=1 Y=1 Strip - TVector3 Strip_1_1 ; - - // Geometry Parameter - double Face = 98 ; //mm - double NumberOfStrip = 128 ; - double StripPitch = Face/NumberOfStrip ; //mm - - // Buffer object to fill Position Array - vector<double> lineX ; vector<double> lineY ; vector<double> lineZ ; - - vector< vector< double > > OneTelescopeStripPositionX ; - vector< vector< double > > OneTelescopeStripPositionY ; - vector< vector< double > > OneTelescopeStripPositionZ ; - - // Moving StripCenter to 1.1 corner: - Strip_1_1 = C_X128_Y1 + (U+V) * (StripPitch/2.) ; - - for( int i = 0 ; i < 128 ; i++ ) - { - lineX.clear() ; - lineY.clear() ; - lineZ.clear() ; - - for( int j = 0 ; j < 128 ; j++ ) - { - StripCenter = Strip_1_1 + StripPitch*( i*U + j*V ) ; - //StripCenter += -TargetPosition ; - - lineX.push_back( StripCenter.X() ) ; - lineY.push_back( StripCenter.Y() ) ; - lineZ.push_back( StripCenter.Z() ) ; - } - - OneTelescopeStripPositionX.push_back(lineX) ; - OneTelescopeStripPositionY.push_back(lineY) ; - OneTelescopeStripPositionZ.push_back(lineZ) ; - - } - - - StripPositionX.push_back( OneTelescopeStripPositionX ) ; - StripPositionY.push_back( OneTelescopeStripPositionY ) ; - StripPositionZ.push_back( OneTelescopeStripPositionZ ) ; - - } - - -void MUST2Array::AddTelescope( double theta , - double phi , - double distance , - double beta_u , - double beta_v , - double beta_w ) - { - - NumberOfTelescope++; - - double Pi = 3.141592654 ; - - // convert from degree to radian: - theta = theta * Pi/180. ; - phi = phi * Pi/180. ; - - //Vector U on Telescope Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) - TVector3 U ; - //Vector V on Telescope Face (parallele to X Strip) - TVector3 V ; - //Vector W normal to Telescope Face (pointing CsI) - TVector3 W ; - //Vector position of Telescope Face center - TVector3 C ; - - C = TVector3 ( distance * sin(theta) * cos(phi) , - distance * sin(theta) * sin(phi) , - distance * cos(theta) ); - - TVector3 P = TVector3( cos(theta ) * cos(phi) , - cos(theta ) * sin(phi) , - -sin(theta) ); - - W = C.Unit() ; - U = W .Cross ( P ) ; - V = W .Cross ( U ); - - U = U.Unit(); - V = V.Unit(); - - U.Rotate( beta_u * Pi/180. , U ) ; - V.Rotate( beta_u * Pi/180. , U ) ; - - U.Rotate( beta_v * Pi/180. , V ) ; - V.Rotate( beta_v * Pi/180. , V ) ; - - U.Rotate( beta_w * Pi/180. , W ) ; - V.Rotate( beta_w * Pi/180. , W ) ; - - double Face = 98 ; //mm - double NumberOfStrip = 128 ; - double StripPitch = Face/NumberOfStrip ; //mm - - vector<double> lineX ; vector<double> lineY ; vector<double> lineZ ; - - vector< vector< double > > OneTelescopeStripPositionX ; - vector< vector< double > > OneTelescopeStripPositionY ; - vector< vector< double > > OneTelescopeStripPositionZ ; - - double X , Y , Z ; - - //Moving C to the 1.1 corner: - C.SetX( C.X() - ( Face/2 - StripPitch/2 ) * ( V.X() + U.X() ) ) ; - C.SetY( C.Y() - ( Face/2 - StripPitch/2 ) * ( V.Y() + U.Y() ) ) ; - C.SetZ( C.Z() - ( Face/2 - StripPitch/2 ) * ( V.Z() + U.Z() ) ) ; - - for( int i = 0 ; i < 128 ; i++ ) - { - - lineX.clear() ; - lineY.clear() ; - lineZ.clear() ; - - for( int j = 0 ; j < 128 ; j++ ) - { - X = C.X() + StripPitch * ( U.X()*i + V.X()*j ) ; - Y = C.Y() + StripPitch * ( U.Y()*i + V.Y()*j ) ; - Z = C.Z() + StripPitch * ( U.Z()*i + V.Z()*j ) ; - - lineX.push_back(X) ; - lineY.push_back(Y) ; - lineZ.push_back(Z) ; - - } - - OneTelescopeStripPositionX.push_back(lineX) ; - OneTelescopeStripPositionY.push_back(lineY) ; - OneTelescopeStripPositionZ.push_back(lineZ) ; - - } - StripPositionX.push_back( OneTelescopeStripPositionX ) ; - StripPositionY.push_back( OneTelescopeStripPositionY ) ; - StripPositionZ.push_back( OneTelescopeStripPositionZ ) ; - } - -double MUST2Array::GetEnergyDeposit() - { - if(EventPhysics->TotalEnergy.size()>0) - return EventPhysics->TotalEnergy[0] ; - else return -1000 ; - } - - - -TVector3 MUST2Array::GetPositionOfInteraction() - { - TVector3 Position = TVector3(-1000,-1000,-1000); - - if(EventPhysics->TelescopeNumber.size()==1) - { - Position = TVector3 ( GetStripPositionX( EventPhysics->TelescopeNumber[0] , EventPhysics->Si_X[0] , EventPhysics->Si_Y[0] ) , - GetStripPositionY( EventPhysics->TelescopeNumber[0] , EventPhysics->Si_X[0] , EventPhysics->Si_Y[0] ) , - GetStripPositionZ( EventPhysics->TelescopeNumber[0] , EventPhysics->Si_X[0] , EventPhysics->Si_Y[0] ) ) ; - } - - return(Position) ; - - } - -TVector3 MUST2Array::GetTelescopeNormal() - { - TVector3 Normal = TVector3(-1000,-1000,-1000); - - if(EventPhysics->TelescopeNumber.size()==1) - { - TVector3 U = TVector3 ( GetStripPositionX( EventPhysics->TelescopeNumber[0] , 128 , 1 ) , - GetStripPositionY( EventPhysics->TelescopeNumber[0] , 128 , 1 ) , - GetStripPositionZ( EventPhysics->TelescopeNumber[0] , 128 , 1 ) ) - - - TVector3 ( GetStripPositionX( EventPhysics->TelescopeNumber[0] , 1 , 1 ) , - GetStripPositionY( EventPhysics->TelescopeNumber[0] , 1 , 1 ) , - GetStripPositionZ( EventPhysics->TelescopeNumber[0] , 1 , 1 ) ); - - TVector3 V = TVector3 ( GetStripPositionX( EventPhysics->TelescopeNumber[0] , 128 , 128 ) , - GetStripPositionY( EventPhysics->TelescopeNumber[0] , 128 , 128 ) , - GetStripPositionZ( EventPhysics->TelescopeNumber[0] , 128 , 128 ) ) - - - TVector3 ( GetStripPositionX( EventPhysics->TelescopeNumber[0] , 128 , 1 ) , - GetStripPositionY( EventPhysics->TelescopeNumber[0] , 128 , 1 ) , - GetStripPositionZ( EventPhysics->TelescopeNumber[0] , 128 , 1 ) ); - - Normal = U.Cross(V); - } - - return(Normal.Unit()) ; - - } - - -void MUST2Array::Print() - { - cout << "Number of telescope : " << NumberOfTelescope << endl ; - for( int f = 0 ; f < NumberOfTelescope ; f++) - { - cout << "Telescope " << f+1 << endl ; - - for( int i = 0 ; i < 128 ; i++ ) - { - - for( int j = 0 ; j < 128 ; j++ ) - { - cout << i+1 << " "<< j+1 << " " - << StripPositionX[f][i][j] << " " - << StripPositionY[f][i][j] << " " - << StripPositionZ[f][i][j] << " " - << endl ; - } - } - - } - } - - diff --git a/NPLib/MUST2/Must2Array.h b/NPLib/MUST2/Must2Array.h deleted file mode 100644 index 1ffa0518cc2946c86f08a30651ccd05760eb3429..0000000000000000000000000000000000000000 --- a/NPLib/MUST2/Must2Array.h +++ /dev/null @@ -1,118 +0,0 @@ -#ifndef MUST2Array_H -/***************************************************************************** - * Copyright (C) 2009 this file is part of the NPTool Project * - * * - * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * - * For the list of contributors see $NPTOOL/Licence/Contributors * - *****************************************************************************/ - -/***************************************************************************** - * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * - * * - * Creation Date : febuary 2009 * - * Last update : * - *---------------------------------------------------------------------------* - * Decription: * - * This class manage the geometry of an array of MUST2 Telescope * - * It is used in NPAnalysis Programm * - * It also meant to manage calibration file (to be done) * - * * - *---------------------------------------------------------------------------* - * Comment: * - * Calibration need to be done * - * * - *****************************************************************************/ -// NPL -#include "../include/VDetector.h" -#include "TMust2Data.h" -#include "TMust2Physics.h" - -// Root -#include "TVector3.h" - -class MUST2Array : public NPA::VDetector - { - public: // Default Constructor - MUST2Array() ; - ~MUST2Array() ; - - public: // Innherited from VDetector Class - - // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token - void ReadConfiguration(string) ; - - - // Read stream at CalibFile and pick-up calibration parameter using Token - // If argument is "Simulation" no change calibration is loaded - void ReadCalibrationFile(string) ; - - - // Activated associated Branches and link it to the private member DetectorData address - // In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated - void InitializeRootInput() ; - - - // Create associated branches and associated private member DetectorPhysics address - void InitializeRootOutput() ; - - - // This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. - void BuildPhysicalEvent() ; - - - // Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...). - // This method aimed to be used for analysis performed during experiment, when speed is requiered. - // NB: This method can eventually be the same as BuildPhysicalEvent. - void BuildSimplePhysicalEvent() ; - - // Those two method all to clear the Event Physics or Data - void ClearEventPhysics() {EventPhysics->Clear();} - void ClearEventData() {EventData->Clear();} - - - public: // Specific to MUST2Array - // Add a Telescope using Corner Coordinate information - void AddTelescope( TVector3 C_X1_Y1 , - TVector3 C_X128_Y1 , - TVector3 C_X1_Y128 , - TVector3 C_X128_Y128 ); - - // Add a Telescope using R Theta Phi of Si center information - void AddTelescope( double theta , - double phi , - double distance , - double beta_u , - double beta_v , - double beta_w ); - - double GetStripPositionX( int N , int X , int Y ) { return StripPositionX[N-1][X-1][Y-1] ; }; - double GetStripPositionY( int N , int X , int Y ) { return StripPositionY[N-1][X-1][Y-1] ; }; - double GetStripPositionZ( int N , int X , int Y ) { return StripPositionZ[N-1][X-1][Y-1] ; }; - - double GetNumberOfTelescope() { return NumberOfTelescope ; } ; - - // To be called after a build Physical Event - - double GetEnergyDeposit() ; - - TVector3 GetPositionOfInteraction(); - TVector3 GetTelescopeNormal() ; - void Print() ; - - private: // Root Input and Output tree classes - - TMust2Data* EventData ; - TMust2Physics* EventPhysics ; - - - private: // Spatial Position of Strip Calculated on bases of detector position - - int NumberOfTelescope ; - - vector< vector < vector < double > > > StripPositionX ; - vector< vector < vector < double > > > StripPositionY ; - vector< vector < vector < double > > > StripPositionZ ; - - }; - -#endif diff --git a/NPLib/MUST2/TMust2Data.cxx b/NPLib/MUST2/TMust2Data.cxx index a8b1b3701c8058612582f48fdcae12df39909120..308e52a0b8d581e4b55d819dd2cd584245e767f3 100644 --- a/NPLib/MUST2/TMust2Data.cxx +++ b/NPLib/MUST2/TMust2Data.cxx @@ -111,7 +111,7 @@ void TMust2Data::Clear() -void TMust2Data::Dump() +void TMust2Data::Dump() const { cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event XXXXXXXXXXXXXXXXX" << endl; diff --git a/NPLib/MUST2/TMust2Data.h b/NPLib/MUST2/TMust2Data.h index 804cc7f93e52c4b23611eb6ddf4c1a7420e5057b..654e999cdb441c7e62ae992f3b80cef83acd05fd 100644 --- a/NPLib/MUST2/TMust2Data.h +++ b/NPLib/MUST2/TMust2Data.h @@ -72,7 +72,8 @@ class TMust2Data : public TObject { virtual ~TMust2Data(); void Clear(); - void Dump(); + void Clear(const Option_t*) {}; + void Dump() const; ///////////////////// SETTERS //////////////////////// // DSSD @@ -138,12 +139,12 @@ class TMust2Data : public TObject { // SiLi //(E) - UShort_t GetMMSiLiEMult() {return fMM_SiLiE_DetectorNbr.size();} + UShort_t GetMMSiLiEMult() {return fMM_SiLiE_DetectorNbr.size();} UShort_t GetMMSiLiEDetectorNbr(Int_t i) {return fMM_SiLiE_DetectorNbr.at(i);} UShort_t GetMMSiLiEPadNbr(Int_t i) {return fMM_SiLiE_PadNbr.at(i);} Double_t GetMMSiLiEEnergy(Int_t i) {return fMM_SiLiE_Energy.at(i);} //(T) - UShort_t GetMMSiLiTMult() {return fMM_SiLiT_DetectorNbr.size();} + UShort_t GetMMSiLiTMult() {return fMM_SiLiT_DetectorNbr.size();} UShort_t GetMMSiLiTDetectorNbr(Int_t i) {return fMM_SiLiT_DetectorNbr.at(i);} UShort_t GetMMSiLiTPadNbr(Int_t i) {return fMM_SiLiT_PadNbr.at(i);} Double_t GetMMSiLiTTime(Int_t i) {return fMM_SiLiT_Time.at(i);} @@ -160,7 +161,7 @@ class TMust2Data : public TObject { UShort_t GetMMCsITCristalNbr(Int_t i) {return fMM_CsIT_CristalNbr.at(i);} Double_t GetMMCsITTime(Int_t i) {return fMM_CsIT_Time.at(i);} - ClassDef(TMust2Data,1) // Must2Data structure + ClassDef(TMust2Data,2) // Must2Data structure }; #endif diff --git a/NPLib/MUST2/TMust2Physics.cxx b/NPLib/MUST2/TMust2Physics.cxx index 14f2cc6b0797b1177400154494ccfa98473a5aa7..4cd918223b2ae842225aa0c02b6217b5b48634cd 100644 --- a/NPLib/MUST2/TMust2Physics.cxx +++ b/NPLib/MUST2/TMust2Physics.cxx @@ -21,238 +21,410 @@ * * *****************************************************************************/ #include "TMust2Physics.h" +using namespace LOCAL; + +// STL +#include <sstream> #include <iostream> +#include <cmath> +#include <stdlib.h> -ClassImp(TMust2Physics) - -TMust2Physics::TMust2Physics() - { EventMultiplicity = 0 ;} +// NPL +#include "RootInput.h" +#include "RootOutput.h" -TMust2Physics::~TMust2Physics() {Clear();} +// ROOT +#include "TChain.h" +/////////////////////////////////////////////////////////////////////////// -void TMust2Physics::BuildSimplePhysicalEvent(TMust2Data* Data) - { - BuildPhysicalEvent(Data); - } -void TMust2Physics::BuildPhysicalEvent(TMust2Data* Data) +ClassImp(TMust2Physics) +/////////////////////////////////////////////////////////////////////////// +TMust2Physics::TMust2Physics() { - // Check - bool Check_Si = false ;bool Check_SiLi = false ; bool Check_CsI = false ; - - // Threshold - double Si_X_E_Threshold = 0 ; double Si_X_T_Threshold = 0 ; - double Si_Y_E_Threshold = 0 ; double Si_Y_T_Threshold = 0 ; - double SiLi_E_Threshold = 0 ; double SiLi_T_Threshold = 0 ; - double CsI_E_Threshold = 0 ; double CsI_T_Threshold = 0 ; + EventMultiplicity = 0 ; + EventData = new TMust2Data ; + EventPhysics = this ; + } - // Multiplicity 1 - if( Data->GetMMStripXEMult()==1 && Data->GetMMStripYEMult()==1 && Data->GetMMStripXTMult()==1 && Data->GetMMStripXTMult()==1 ) +/////////////////////////////////////////////////////////////////////////// +void TMust2Physics::BuildSimplePhysicalEvent() + { + BuildPhysicalEvent(); + + } + +/////////////////////////////////////////////////////////////////////////// + +void TMust2Physics::BuildPhysicalEvent() + { + bool check_SILI = false ; + bool check_CSI = false ; + + + if( CheckEvent() == 1 ) { + vector< TVector2 > couple = Match_X_Y() ; - if( //Same detector - Data->GetMMStripXEDetectorNbr(0) == Data->GetMMStripXTDetectorNbr(0) - && Data->GetMMStripXTDetectorNbr(0) == Data->GetMMStripYTDetectorNbr(0) - && Data->GetMMStripYTDetectorNbr(0) == Data->GetMMStripYEDetectorNbr(0) - - // Same strip - && Data->GetMMStripXEStripNbr(0) == Data->GetMMStripXTStripNbr(0) - && Data->GetMMStripYEStripNbr(0) == Data->GetMMStripYTStripNbr(0) ) + for(unsigned int i = 0 ; i < couple.size() ; i++) { - TelescopeNumber.push_back(Data->GetMMStripXEDetectorNbr(0)) ; + check_SILI = false ; + check_CSI = false ; - // Data->Get Max Energy - if(Data->GetMMStripXEEnergy(0) > Data->GetMMStripYEEnergy(0)) Si_E.push_back( Data->GetMMStripXEEnergy(0) ) ; - else Si_E.push_back( Data->GetMMStripYEEnergy(0) ) ; + int N = EventData->GetMMStripXEDetectorNbr(couple[i].X()) ; - // Data->Get Min Time - if(Data->GetMMStripXTTime(0) < Data->GetMMStripYTTime(0)) Si_T.push_back( Data->GetMMStripXTTime(0) ) ; - else Si_T.push_back( Data->GetMMStripYTTime(0) ) ; + int X = EventData->GetMMStripXEStripNbr(couple[i].X()) ; + int Y = EventData->GetMMStripYEStripNbr(couple[i].Y()) ; - Si_X.push_back( Data->GetMMStripXEStripNbr(0) ) ; - Si_Y.push_back( Data->GetMMStripYEStripNbr(0) ) ; - - Check_Si = true ; - EventMultiplicity = 1; - - } + double Si_X_E = fSi_X_E(EventData , couple[i].X()) ; + double Si_Y_E = fSi_Y_E(EventData , couple[i].Y()) ; + + double Si_X_T = fSi_X_T(EventData , couple[i].X()) ; + double Si_Y_T = fSi_Y_T(EventData , couple[i].Y()) ; - - // FIXME we have to resolve case where SiLi/CsI mult > Si mult by looking time? and Si XY vs Pad/crystal Nbr - if (Check_Si) - { + Si_X.push_back(X) ; Si_Y.push_back(Y) ; TelescopeNumber.push_back(N) ; - // Si(Li) - for (int i = 0 ; i < Data->GetMMSiLiEMult() ; i++) + // Take maximum Energy + if(Si_X_E >= Si_Y_E) Si_E.push_back(Si_X_E) ; + else Si_E.push_back(Si_Y_E) ; + + // Take minimum Time + if(Si_X_T >= Si_Y_T) Si_T.push_back(Si_Y_T) ; + else Si_T.push_back(Si_X_T) ; + + for(unsigned int j = 0 ; j < EventData->GetMMSiLiEMult() ; j++) { - if ( Data->GetMMSiLiEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(0) - && Data->GetMMSiLiEEnergy(i) > SiLi_E_Threshold ) + if(EventData->GetMMSiLiEDetectorNbr(j)==N) { - SiLi_E.push_back(Data->GetMMSiLiEEnergy(i)) ; - SiLi_N.push_back(Data->GetMMSiLiEPadNbr(i)) ; - - if ( Data->GetMMSiLiTDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(0) ) + // if SiLi energy is above threshold check the compatibility + if( fSiLi_E(EventData , j)>SiLi_E_Threshold ) { - SiLi_T.push_back(Data->GetMMSiLiTTime(i)) ; - Check_SiLi = true ; + if( Match_Si_SiLi( X, Y , EventData->GetMMSiLiEPadNbr(j) ) ) + { + SiLi_N.push_back(EventData->GetMMSiLiEPadNbr(j)) ; + SiLi_E.push_back(fSiLi_E(EventData , j)) ; + SiLi_T.push_back(fSiLi_T(EventData , j)) ; + check_SILI = true ; + + } } - } + } } - - // CsI - for (int i = 0 ; i < Data->GetMMCsIEMult() ; i++) + + for( int j = 0 ; j < EventData->GetMMCsIEMult() ; j++) { - if ( Data->GetMMCsIEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(0) - && Data->GetMMCsIEEnergy(i) > CsI_E_Threshold ) + if(EventData->GetMMCsIEDetectorNbr(j)==N) { - CsI_E.push_back(Data->GetMMCsIEEnergy(i)) ; - CsI_N.push_back(Data->GetMMCsIECristalNbr(i)) ; - - if ( Data->GetMMCsITDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(0) ) + // ifCsI energy is above threshold check the compatibility + if( fCsI_T(EventData , j)>CsI_E_Threshold ) { - CsI_T.push_back(Data->GetMMCsITTime(i)) ; - Check_CsI = true ; + if( Match_Si_CsI( X, Y , EventData->GetMMCsIECristalNbr(j) ) ) + { + CsI_N.push_back(EventData->GetMMCsIECristalNbr(j)) ; + CsI_E.push_back(fCsI_E(EventData , j)) ; + CsI_T.push_back(fCsI_T(EventData , j)) ; + check_CSI = true ; + } } } } - - - if (!Check_SiLi && !Check_CsI ) TotalEnergy.push_back( Si_E.at(0) ); - else if (Check_SiLi && !Check_CsI ) TotalEnergy.push_back( + Si_E.at(0) + SiLi_E.at(0) ); - else if (Check_CsI && !Check_SiLi) TotalEnergy.push_back( CsI_E .at(0) + Si_E.at(0) ); - else if (Check_CsI && Check_SiLi) TotalEnergy.push_back( CsI_E .at(0) + Si_E.at(0) + SiLi_E.at(0) ); - - return; - } + + + if(!check_SILI) + { + SiLi_N.push_back(0) ; + SiLi_E.push_back(0) ; + SiLi_T.push_back(0) ; + } - //FIXME: should built a pseudo event and then Check if particle could be identified with EDE method - // Dump + if(!check_CSI) + { + CsI_N.push_back(0) ; + CsI_E.push_back(0) ; + CsI_T.push_back(0) ; + } + + } } - // Multiplicity 2 - if( Data->GetMMStripXEMult()==2 && Data->GetMMStripYEMult()==2 && Data->GetMMStripXTMult()==2 && Data->GetMMStripXTMult()==2 ) + return; + + } + +/////////////////////////////////////////////////////////////////////////// +int TMust2Physics :: CheckEvent() + { + // Check the size of the different elements + if( EventData->GetMMStripXEMult() == EventData->GetMMStripYEMult() && EventData->GetMMStripYEMult() == EventData->GetMMStripXTMult() && EventData->GetMMStripXTMult() == EventData->GetMMStripYTMult() ) + + return 1 ; // Regular Event + + else if( EventData->GetMMStripXEMult() == EventData->GetMMStripYEMult()+1 || EventData->GetMMStripXEMult() == EventData->GetMMStripYEMult()-1 ) + + return 2 ; // Pseudo Event, potentially interstrip + + else return -1 ; // Rejected Event + + } + +/////////////////////////////////////////////////////////////////////////// +bool TMust2Physics :: ResolvePseudoEvent() + { + return false; + } + +/////////////////////////////////////////////////////////////////////////// +vector < TVector2 > TMust2Physics :: Match_X_Y() + { + vector < TVector2 > ArrayOfGoodCouple ; + + for(int i = 0 ; i < EventData->GetMMStripXEMult(); i++) { - // Different telescope case - if ( Data->GetMMStripXEDetectorNbr(0) != Data->GetMMStripXEDetectorNbr(1) - && Data->GetMMStripYEDetectorNbr(0) != Data->GetMMStripYEDetectorNbr(1) ) + // if X value is above threshold, look at Y value + if( fSi_X_E(EventData , i) > Si_X_E_Threshold ) { - double EY, EX, TX, TY = 0; - // loop on both event - for (int jj = 0 ; jj < 2 ; jj++) + for(int j = 0 ; j < EventData->GetMMStripYEMult(); j++) { - Check_Si = false ;Check_SiLi = false ;Check_CsI = false ; - - - TelescopeNumber.push_back( Data->GetMMStripXEDetectorNbr(jj) ) ; - EX = Data->GetMMStripXEEnergy(jj) ; - Si_X.push_back( Data->GetMMStripXEStripNbr(jj)) ; - - // Get Corresponding time - for(int i = 0 ; i < 2 ; i++) - { - if( Data->GetMMStripXTDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) - && Data->GetMMStripXTStripNbr(i) == Data->GetMMStripXEStripNbr(jj) ) - { TX = Data->GetMMStripXTTime(jj) ; } - } - - // Get Corresponding Y strip - for(int i = 0 ; i < 2 ; i++) + // if Y value is above threshold look if detector match + if( fSi_Y_E(EventData , j) > Si_Y_E_Threshold ) { - if( Data->GetMMStripYEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) ) + // if same detector check energy + if ( EventData->GetMMStripXEDetectorNbr(i) == EventData->GetMMStripYEDetectorNbr(j) ) { - Si_Y.push_back( Data->GetMMStripYEStripNbr(i)) ; - EY = Data->GetMMStripXEEnergy(i) ; - TY = Data->GetMMStripXTTime(i) ; - - /*if (EX>EY) Si_E.push_back(EX) ; - else Si_E.push_back(EY) ;*/ - Si_E.push_back(EX); - - - if (TX>TY) Si_T.push_back(TY) ; - else Si_T.push_back(TX) ; - Check_Si = true ; + // Look if energy match + if( ( fSi_X_E(EventData , i) - fSi_Y_E(EventData , j) ) / fSi_X_E(EventData , i) < 0.1 ) + ArrayOfGoodCouple . push_back ( TVector2(i,j) ) ; } } - - if (Check_Si) - { - // Si(Li) - for (int i = 0 ; i < Data->GetMMSiLiEMult() ; i++) - { - if ( Data->GetMMSiLiEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) - && Data->GetMMSiLiEEnergy(i) > SiLi_E_Threshold ) - { - SiLi_E.push_back(Data->GetMMSiLiEEnergy(i)) ; - SiLi_N.push_back(Data->GetMMSiLiEPadNbr(i)) ; - - if ( Data->GetMMSiLiTDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) - && Data->GetMMSiLiTPadNbr(i) == Data->GetMMSiLiEPadNbr(i) ) - { - SiLi_T.push_back(Data->GetMMSiLiTTime(i)) ; - Check_SiLi = true ; - } - } - - else - { - SiLi_E.push_back(-1) ; - SiLi_T.push_back(-1) ; - SiLi_N.push_back(-1) ; - } - } - - // CsI - for (int i = 0 ; i < Data->GetMMCsIEMult() ; i++) - { - if ( Data->GetMMCsIEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) - && Data->GetMMCsIEEnergy(i) > CsI_E_Threshold ) - { - CsI_E.push_back(Data->GetMMCsIEEnergy(i)) ; - CsI_N.push_back(Data->GetMMCsIECristalNbr(i)) ; - if ( Data->GetMMCsITDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) - && Data->GetMMCsITCristalNbr(i) == Data->GetMMCsIECristalNbr(i) ) - { - CsI_T.push_back(Data->GetMMCsITTime(i)) ; - Check_CsI = true ; - } - } - - else - { - CsI_E.push_back(-1) ; - CsI_T.push_back(-1) ; - CsI_N.push_back(-1) ; - } - } - - TotalEnergy.push_back(Si_E.at(jj)) ; - if (Check_SiLi) TotalEnergy.at(jj) += SiLi_E.at(jj) ; - if (Check_CsI) TotalEnergy.at(jj) += CsI_E.at(jj) ; - } } - return; - } - - // Same detector case : - if( Data->GetMMStripXEDetectorNbr(0) == Data->GetMMStripXEDetectorNbr(1) - && Data->GetMMStripYEDetectorNbr(0) == Data->GetMMStripYEDetectorNbr(1)) - { - - - return; } } - + + if( ArrayOfGoodCouple.size() > EventData->GetMMStripXEMult() ) ArrayOfGoodCouple.clear() ; + + return ArrayOfGoodCouple; } + + +/////////////////////////////////////////////////////////////////////////// +bool TMust2Physics :: Match_Si_SiLi(int X, int Y , int PadNbr) + { + if( PadNbr == 1 + && X<=121 && X>=93 + && Y<=128 && Y>=95 ) + + return true ; + + + else if( PadNbr == 2 + && X<=121 && X>=93 + && Y<=100 && Y>=65 ) + + return true ; + + + else if( PadNbr == 3 + && X<=96 && X>=61 + && Y<=128 && Y>=95 ) + + return true ; + + else if( PadNbr == 4 + && X<=96 && X>=61 + && Y<=100 && Y>=65 ) + + return true ; + + else if( PadNbr == 5 + && X<=67 && X>=30 + && Y<=100 && Y>=65) + + return true ; + + else if( PadNbr == 6 + && X<=67 && X>=30 + && Y<=128 && Y>=95 ) + + return true ; + + else if( PadNbr == 7 + && X<=35 && X>=6 + && Y<=100 && Y>=65 ) + + return true ; + + else if( PadNbr == 8 + && X<=35 && X>=6 + && Y<=128 && Y>=95 ) + + return true ; + + else if( PadNbr == 9 + && X<=121 && X>=93 + && Y<=31 && Y>=1 ) + + return true ; + + else if( PadNbr == 10 + && X<=121 && X>=93 + && Y<=60 && Y>=26 ) + + return true ; + + else if( PadNbr == 11 + && X<=96 && X>=61 + && Y<=31 && Y>=1 ) + + return true ; + + else if( PadNbr == 12 + && X<=96 && X>=61 + && Y<=60 && Y>=26) + + return true ; + + else if( PadNbr == 13 + && X<=67 && X>=30 + && Y<=60 && Y>=26 ) + + return true ; + + else if( PadNbr == 14 + && X<=67 && X>=30 + && Y<=31 && Y>=1 ) + + return true ; + + else if( PadNbr == 15 + && X<=35 && X>=6 + && Y<=60 && Y>=26 ) + + return true ; + + else if( PadNbr == 16 + && X<=35 && X>=6 + && Y<=31 && Y>=1 ) + + return true ; + + else + return false; + } + + +/////////////////////////////////////////////////////////////////////////// +bool TMust2Physics :: Match_Si_CsI(int X, int Y , int CristalNbr) + { + if( CristalNbr == 1 + && X<=71 && X>=27 + && Y<=101 && Y>=59 ) + + return true ; + + + else if( CristalNbr == 2 + && X<=71 && X>=27 + && Y<=128 && Y>=90 ) + + return true ; + + + else if( CristalNbr == 3 + && X<=35 && X>=1 + && Y<=101 && Y>=59 ) + + return true ; + + else if( CristalNbr == 4 + && X<=35 && X>=1 + && Y<=128 && Y>=90 ) + + return true ; + + else if( CristalNbr == 5 + && X<=104 && X>=60 + && Y<=71 && Y>=30 ) + + return true ; + + else if( CristalNbr == 6 + && X<=104 && X>=60 + && Y<=41 && Y>=1 ) + + return true ; + + else if( CristalNbr == 7 + && X<=128 && X>=90 + && Y<=71 && Y>=30 ) + + return true ; + + else if( CristalNbr == 8 + && X<=128 && X>=90 + && Y<=41 && Y>=1 ) + + return true ; + + else if( CristalNbr == 9 + && X<=71 && X>=27 + && Y<=71 && Y>=40 ) + + return true ; + + else if( CristalNbr == 10 + && X<=71 && X>=27 + && Y<=41 && Y>=1 ) + + return true ; + + else if( CristalNbr == 11 + && X<=35 && X>=1 + && Y<=71 && Y>=30 ) + + return true ; + + else if( CristalNbr == 12 + && X<=35 && X>=1 + && Y<=41 && Y>=1 ) + + return true ; + + else if( CristalNbr == 13 + && X<=104 && X>=60 + && Y<=101 && Y>=59 ) + + return true ; + + else if( CristalNbr == 14 + && X<=104 && X>=60 + && Y<=128 && Y>=90 ) + + return true ; + else if( CristalNbr == 15 + && X<=128 && X>=90 + && Y<=101 && Y>=59 ) + return true ; + + else if( CristalNbr == 16 + && X<=128 && X>=90 + && Y<=128 && Y>=90 ) + + return true ; + + else + return false; + } + +/////////////////////////////////////////////////////////////////////////// void TMust2Physics::Clear() { EventMultiplicity= 0 ; + TelescopeNumber .clear() ; - EventType .clear() ; - TotalEnergy .clear() ; + EventType .clear() ; + TotalEnergy .clear() ; // Si X Si_E.clear() ; @@ -270,4 +442,563 @@ void TMust2Physics::Clear() CsI_T.clear() ; CsI_N.clear() ; } +/////////////////////////////////////////////////////////////////////////// + +//// Innherited from VDetector Class //// + +// Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token +void TMust2Physics::ReadConfiguration(string Path) +{ + ifstream ConfigFile ; + ConfigFile.open(Path.c_str()) ; + string LineBuffer ; + string DataBuffer ; + + // A:X1_Y1 --> X:1 Y:1 + // B:X128_Y1 --> X:128 Y:1 + // C:X1_Y128 --> X:1 Y:128 + // D:X128_Y128 --> X:128 Y:128 + + double Ax , Bx , Cx , Dx , Ay , By , Cy , Dy , Az , Bz , Cz , Dz ; + TVector3 A , B , C , D ; + double Theta = 0 , Phi = 0 , R = 0 , beta_u = 0 , beta_v = 0 , beta_w = 0 ; + + bool check_A = false ; + bool check_C = false ; + bool check_B = false ; + bool check_D = false ; + + bool check_Theta = false ; + bool check_Phi = false ; + bool check_R = false ; + bool check_beta = false ; + + bool ReadingStatus = false ; + + + while (!ConfigFile.eof()) + { + + getline(ConfigFile, LineBuffer); + + // If line is a Start Up Must2 bloc, Reading toggle to true + if (LineBuffer.compare(0, 11, "M2Telescope") == 0) + { + cout << "///" << endl ; + cout << "Telescope found: " << endl ; + ReadingStatus = true ; + + } + + // Else don't toggle to Reading Block Status + else ReadingStatus = false ; + + // Reading Block + while(ReadingStatus) + { + + ConfigFile >> DataBuffer ; + // Comment Line + if(DataBuffer.compare(0, 1, "%") == 0) { + ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' ); + + } + + // Finding another telescope (safety), toggle out + else if (DataBuffer.compare(0, 11, "M2Telescope") == 0) { + cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ; + ReadingStatus = false ; + } + + // Position method + + else if (DataBuffer.compare(0, 6, "X1_Y1=") == 0) { + check_A = true; + ConfigFile >> DataBuffer ; + Ax = atof(DataBuffer.c_str()) ; + Ax = Ax ; + ConfigFile >> DataBuffer ; + Ay = atof(DataBuffer.c_str()) ; + Ay = Ay ; + ConfigFile >> DataBuffer ; + Az = atof(DataBuffer.c_str()) ; + Az = Az ; + + A = TVector3(Ax, Ay, Az); + cout << "X1 Y1 corner position : (" << A.X() << ";" << A.Y() << ";" << A.Z() << ")" << endl; + + } + + + else if (DataBuffer.compare(0, 8, "X128_Y1=") == 0) { + check_B = true; + ConfigFile >> DataBuffer ; + Bx = atof(DataBuffer.c_str()) ; + Bx = Bx ; + ConfigFile >> DataBuffer ; + By = atof(DataBuffer.c_str()) ; + By = By ; + ConfigFile >> DataBuffer ; + Bz = atof(DataBuffer.c_str()) ; + Bz = Bz ; + + B = TVector3(Bx, By, Bz); + cout << "X128 Y1 corner position : (" << B.X() << ";" << B.Y() << ";" << B.Z() << ")" << endl; + + } + + + else if (DataBuffer.compare(0, 8, "X1_Y128=") == 0) { + check_C = true; + ConfigFile >> DataBuffer ; + Cx = atof(DataBuffer.c_str()) ; + Cx = Cx ; + ConfigFile >> DataBuffer ; + Cy = atof(DataBuffer.c_str()) ; + Cy = Cy ; + ConfigFile >> DataBuffer ; + Cz = atof(DataBuffer.c_str()) ; + Cz = Cz ; + + C = TVector3(Cx, Cy, Cz); + cout << "X1 Y128 corner position : (" << C.X() << ";" << C.Y() << ";" << C.Z() << ")" << endl; + + } + + else if (DataBuffer.compare(0, 10, "X128_Y128=") == 0) { + check_D = true; + ConfigFile >> DataBuffer ; + Dx = atof(DataBuffer.c_str()) ; + Dx = Dx ; + ConfigFile >> DataBuffer ; + Dy = atof(DataBuffer.c_str()) ; + Dy = Dy ; + ConfigFile >> DataBuffer ; + Dz = atof(DataBuffer.c_str()) ; + Dz = Dz ; + + D = TVector3(Dx, Dy, Dz); + cout << "X128 Y128 corner position : (" << D.X() << ";" << D.Y() << ";" << D.Z() << ")" << endl; + + } + + // End Position Method + + // Angle method + else if (DataBuffer.compare(0, 6, "THETA=") == 0) { + check_Theta = true; + ConfigFile >> DataBuffer ; + Theta = atof(DataBuffer.c_str()) ; + Theta = Theta ; + cout << "Theta: " << Theta << endl; + + } + + //Angle method + else if (DataBuffer.compare(0, 4, "PHI=") == 0) { + check_Phi = true; + ConfigFile >> DataBuffer ; + Phi = atof(DataBuffer.c_str()) ; + Phi = Phi ; + cout << "Phi: " << Phi << endl; + + } + + //Angle method + else if (DataBuffer.compare(0, 2, "R=") == 0) { + check_R = true; + ConfigFile >> DataBuffer ; + R = atof(DataBuffer.c_str()) ; + R = R ; + cout << "R: " << R << endl; + + } + + //Angle method + else if (DataBuffer.compare(0, 5, "BETA=") == 0) { + check_beta = true; + ConfigFile >> DataBuffer ; + beta_u = atof(DataBuffer.c_str()) ; + beta_u = beta_u ; + ConfigFile >> DataBuffer ; + beta_v = atof(DataBuffer.c_str()) ; + beta_v = beta_v ; + ConfigFile >> DataBuffer ; + beta_w = atof(DataBuffer.c_str()) ; + beta_w = beta_w ; + cout << "Beta: " << beta_u << " " << beta_v << " " << beta_w << endl ; + + } + + ///////////////////////////////////////////////// + // If All necessary information there, toggle out + if ( (check_A && check_B && check_C && check_D) || (check_Theta && check_Phi && check_R && check_beta) ) + { + ReadingStatus = false; + + ///Add The previously define telescope + //With position method + if ( check_A && check_B && check_C && check_D ) + { + AddTelescope( A , + B , + C , + D ) ; + } + + //with angle method + else if ( check_Theta && check_Phi && check_R && check_beta ) + { + AddTelescope( Theta , + Phi , + R , + beta_u , + beta_v , + beta_w ); + } + + check_A = false ; + check_B = false ; + check_C = false ; + check_D = false ; + + check_Theta = false ; + check_Phi = false ; + check_R = false ; + check_beta = false ; + + } + + } + + + + + } + + cout << endl << "/////////////////////////////" << endl<<endl; + +} + +// Add Parameter to the CalibrationManger +void TMust2Physics::AddParameterToCalibrationManager() + { + CalibrationManager* Cal = CalibrationManager::getInstance(); + + for(int i = 0 ; i < NumberOfTelescope ; i++) + { + + for( int j = 0 ; j < 128 ; j++) + { + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_Si_X"+itoa(j+1)+"_E","MUST2_T"+itoa(i+1)+"_Si_X"+itoa(j+1)+"_E") ; + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_Si_Y"+itoa(j+1)+"_E","MUST2_T"+itoa(i+1)+"_Si_Y"+itoa(j+1)+"_E") ; + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_Si_X"+itoa(j+1)+"_T","MUST2_T"+itoa(i+1)+"_Si_X"+itoa(j+1)+"_T") ; + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_Si_Y"+itoa(j+1)+"_T","MUST2_T"+itoa(i+1)+"_Si_Y"+itoa(j+1)+"_T") ; + } + + for( int j = 0 ; j < 16 ; j++) + { + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_SiLi"+itoa(j+1)+"_E","MUST2_T"+itoa(i+1)+"_SiLi"+itoa(j+1)+"_E") ; + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_SiLi"+itoa(j+1)+"_T","MUST2_T"+itoa(i+1)+"_SiLi"+itoa(j+1)+"_T") ; + } + + for( int j = 0 ; j < 16 ; j++) + { + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_CsI"+itoa(j+1)+"_E","MUST2_T"+itoa(i+1)+"_CsI"+itoa(j+1)+"_E") ; + Cal->AddParameter("MUST2", "T"+itoa(i+1)+"_CsI"+itoa(j+1)+"_T","MUST2_T"+itoa(i+1)+"_CsI"+itoa(j+1)+"_T") ; + } + } + + + } + +// Activated associated Branches and link it to the private member DetectorData address +// In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated +void TMust2Physics::InitializeRootInput() + { + TChain* inputChain = RootInput::getInstance()->GetChain() ; + inputChain->SetBranchStatus( "MUST2" , true ) ; + inputChain->SetBranchStatus( "fMM_*" , true ) ; + inputChain->SetBranchAddress( "MUST2" , &EventData ) ; + } + + +// Create associated branches and associated private member DetectorPhysics address +void TMust2Physics::InitializeRootOutput() + { + TTree* outputTree = RootOutput::getInstance()->GetTree() ; + outputTree->Branch( "MUST2" , "TMust2Physics" , &EventPhysics ) ; + } + + +///// Specific to MUST2Array //// + +void TMust2Physics::AddTelescope( TVector3 C_X1_Y1 , + TVector3 C_X128_Y1 , + TVector3 C_X1_Y128 , + TVector3 C_X128_Y128 ) + { + // To avoid warning + C_X1_Y128 *= 1; + + NumberOfTelescope++; + + // Vector U on Telescope Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) + TVector3 U = C_X1_Y1 - C_X128_Y1 ; + U = U.Unit() ; + // Vector V on Telescope Face (parallele to X Strip) + TVector3 V = C_X128_Y128 - C_X128_Y1 ; + V = V.Unit() ; + + // Position Vector of Strip Center + TVector3 StripCenter = TVector3(0,0,0) ; + // Position Vector of X=1 Y=1 Strip + TVector3 Strip_1_1 ; + + // Geometry Parameter + double Face = 98 ; //mm + double NumberOfStrip = 128 ; + double StripPitch = Face/NumberOfStrip ; //mm + + // Buffer object to fill Position Array + vector<double> lineX ; vector<double> lineY ; vector<double> lineZ ; + + vector< vector< double > > OneTelescopeStripPositionX ; + vector< vector< double > > OneTelescopeStripPositionY ; + vector< vector< double > > OneTelescopeStripPositionZ ; + + // Moving StripCenter to 1.1 corner: + Strip_1_1 = C_X128_Y1 + (U+V) * (StripPitch/2.) ; + + for( int i = 0 ; i < 128 ; i++ ) + { + lineX.clear() ; + lineY.clear() ; + lineZ.clear() ; + + for( int j = 0 ; j < 128 ; j++ ) + { + StripCenter = Strip_1_1 + StripPitch*( i*U + j*V ) ; + //StripCenter += -TargetPosition ; + + lineX.push_back( StripCenter.X() ) ; + lineY.push_back( StripCenter.Y() ) ; + lineZ.push_back( StripCenter.Z() ) ; + } + + OneTelescopeStripPositionX.push_back(lineX) ; + OneTelescopeStripPositionY.push_back(lineY) ; + OneTelescopeStripPositionZ.push_back(lineZ) ; + + } + + + StripPositionX.push_back( OneTelescopeStripPositionX ) ; + StripPositionY.push_back( OneTelescopeStripPositionY ) ; + StripPositionZ.push_back( OneTelescopeStripPositionZ ) ; + + } + + +void TMust2Physics::AddTelescope( double theta , + double phi , + double distance , + double beta_u , + double beta_v , + double beta_w ) + { + + NumberOfTelescope++; + + double Pi = 3.141592654 ; + + // convert from degree to radian: + theta = theta * Pi/180. ; + phi = phi * Pi/180. ; + + //Vector U on Telescope Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) + TVector3 U ; + //Vector V on Telescope Face (parallele to X Strip) + TVector3 V ; + //Vector W normal to Telescope Face (pointing CsI) + TVector3 W ; + //Vector position of Telescope Face center + TVector3 C ; + + C = TVector3 ( distance * sin(theta) * cos(phi) , + distance * sin(theta) * sin(phi) , + distance * cos(theta) ); + + TVector3 P = TVector3( cos(theta ) * cos(phi) , + cos(theta ) * sin(phi) , + -sin(theta) ); + + W = C.Unit() ; + U = W .Cross ( P ) ; + V = W .Cross ( U ); + + U = U.Unit(); + V = V.Unit(); + + U.Rotate( beta_u * Pi/180. , U ) ; + V.Rotate( beta_u * Pi/180. , U ) ; + + U.Rotate( beta_v * Pi/180. , V ) ; + V.Rotate( beta_v * Pi/180. , V ) ; + + U.Rotate( beta_w * Pi/180. , W ) ; + V.Rotate( beta_w * Pi/180. , W ) ; + + double Face = 98 ; //mm + double NumberOfStrip = 128 ; + double StripPitch = Face/NumberOfStrip ; //mm + + vector<double> lineX ; vector<double> lineY ; vector<double> lineZ ; + + vector< vector< double > > OneTelescopeStripPositionX ; + vector< vector< double > > OneTelescopeStripPositionY ; + vector< vector< double > > OneTelescopeStripPositionZ ; + + double X , Y , Z ; + + //Moving C to the 1.1 corner: + C.SetX( C.X() - ( Face/2 - StripPitch/2 ) * ( V.X() + U.X() ) ) ; + C.SetY( C.Y() - ( Face/2 - StripPitch/2 ) * ( V.Y() + U.Y() ) ) ; + C.SetZ( C.Z() - ( Face/2 - StripPitch/2 ) * ( V.Z() + U.Z() ) ) ; + + for( int i = 0 ; i < 128 ; i++ ) + { + + lineX.clear() ; + lineY.clear() ; + lineZ.clear() ; + + for( int j = 0 ; j < 128 ; j++ ) + { + X = C.X() + StripPitch * ( U.X()*i + V.X()*j ) ; + Y = C.Y() + StripPitch * ( U.Y()*i + V.Y()*j ) ; + Z = C.Z() + StripPitch * ( U.Z()*i + V.Z()*j ) ; + + lineX.push_back(X) ; + lineY.push_back(Y) ; + lineZ.push_back(Z) ; + + } + + OneTelescopeStripPositionX.push_back(lineX) ; + OneTelescopeStripPositionY.push_back(lineY) ; + OneTelescopeStripPositionZ.push_back(lineZ) ; + + } + StripPositionX.push_back( OneTelescopeStripPositionX ) ; + StripPositionY.push_back( OneTelescopeStripPositionY ) ; + StripPositionZ.push_back( OneTelescopeStripPositionZ ) ; + } + + +TVector3 TMust2Physics::GetPositionOfInteraction(int i) + { + TVector3 Position = TVector3 ( GetStripPositionX( TelescopeNumber[i] , Si_X[i] , Si_Y[i] ) , + GetStripPositionY( TelescopeNumber[i] , Si_X[i] , Si_Y[i] ) , + GetStripPositionZ( TelescopeNumber[i] , Si_X[i] , Si_Y[i] ) ) ; + + return(Position) ; + + } + +TVector3 TMust2Physics::GetTelescopeNormal( int i) + { + TVector3 U = TVector3 ( GetStripPositionX( TelescopeNumber[i] , 128 , 1 ) , + GetStripPositionY( TelescopeNumber[i] , 128 , 1 ) , + GetStripPositionZ( TelescopeNumber[i] , 128 , 1 ) ) + + - TVector3 ( GetStripPositionX( TelescopeNumber[i] , 1 , 1 ) , + GetStripPositionY( TelescopeNumber[i] , 1 , 1 ) , + GetStripPositionZ( TelescopeNumber[i] , 1 , 1 ) ); + + TVector3 V = TVector3 ( GetStripPositionX( TelescopeNumber[i] , 128 , 128 ) , + GetStripPositionY( TelescopeNumber[i] , 128 , 128 ) , + GetStripPositionZ( TelescopeNumber[i] , 128 , 128 ) ) + + - TVector3 ( GetStripPositionX( TelescopeNumber[i] , 128 , 1 ) , + GetStripPositionY( TelescopeNumber[i] , 128 , 1 ) , + GetStripPositionZ( TelescopeNumber[i] , 128 , 1 ) ); + + TVector3 Normal = U.Cross(V); + + return(Normal.Unit()) ; + + } + +/////////////////////////////////////////////////////////////////////////// +namespace LOCAL + { + + // tranform an integer to a string + string itoa(int value) + { + std::ostringstream o; + + if (!(o << value)) + return "" ; + + return o.str(); + } + + // DSSD + // X + double fSi_X_E(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/" + itoa( EventData->GetMMStripXEDetectorNbr(i) ) + "Si_X" + itoa( EventData->GetMMStripXEStripNbr(i) ) + "_E", + EventData->GetMMStripXEEnergy(i) ); + + } + + double fSi_X_T(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/T" + itoa( EventData->GetMMStripXTDetectorNbr(i) ) + "Si_X" + itoa( EventData->GetMMStripXTStripNbr(i) ) +"_T", + EventData->GetMMStripXTTime(i) ); + } + + // Y + double fSi_Y_E(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/T" + itoa( EventData->GetMMStripYEDetectorNbr(i) ) + "Si_Y" + itoa( EventData->GetMMStripYEStripNbr(i) ) +"_E", + EventData->GetMMStripYEEnergy(i) ); + } + + double fSi_Y_T(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/T" + itoa( EventData->GetMMStripYTDetectorNbr(i) ) + "Si_Y" + itoa( EventData->GetMMStripYTStripNbr(i) ) +"_T", + EventData->GetMMStripYTTime(i) ); + } + + + // SiLi + double fSiLi_E(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/T" + itoa( EventData->GetMMSiLiEDetectorNbr(i) ) + "SiLi" + itoa( EventData->GetMMSiLiEPadNbr(i) ) +"_E", + EventData->GetMMSiLiEEnergy(i) ); + } + + double fSiLi_T(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/T" + itoa( EventData->GetMMSiLiTDetectorNbr(i) ) + "SiLi" + itoa( EventData->GetMMSiLiTPadNbr(i) )+"_T", + EventData->GetMMSiLiTTime(i) ); + } + + // CsI + double fCsI_E(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/T" + itoa( EventData->GetMMCsIEDetectorNbr(i) ) + "SiLi" + itoa( EventData->GetMMCsIECristalNbr(i) ) +"_E", + EventData->GetMMCsIEEnergy(i) ); + } + + double fCsI_T(TMust2Data* EventData , int i) + { + return CalibrationManager::getInstance()->ApplyCalibration( "MUST2/T" + itoa( EventData->GetMMCsITDetectorNbr(i) ) + "SiLi" + itoa( EventData->GetMMCsITCristalNbr(i) ) +"_T", + EventData->GetMMCsITTime(i) ); + } + + } diff --git a/NPLib/MUST2/TMust2Physics.h b/NPLib/MUST2/TMust2Physics.h index 04fabcd78110e9998ec2810a00f1dba7ceb06bdf..1f649c60c2ae4298b4a44380e7fdb5bf7a9d903e 100644 --- a/NPLib/MUST2/TMust2Physics.h +++ b/NPLib/MUST2/TMust2Physics.h @@ -22,24 +22,39 @@ * Improvment needed * * * *****************************************************************************/ +// STL #include <vector> -#include "TObject.h" + +// NPL #include "TMust2Data.h" +#include "../include/CalibrationManager.h" +#include "../include/VDetector.h" +// ROOT +#include "TVector2.h" +#include "TVector3.h" +#include "TObject.h" using namespace std ; -class TMust2Physics : public TObject +class TMust2Physics : public TObject, public NPA::VDetector { public: TMust2Physics() ; - ~TMust2Physics(); + ~TMust2Physics() {}; public: void Clear() ; - void BuildPhysicalEvent(TMust2Data* Data) ; - void BuildSimplePhysicalEvent(TMust2Data* Data) ; - + void Clear(const Option_t*) {}; + + public: + vector < TVector2 > Match_X_Y() ; + bool Match_Si_CsI(int X, int Y , int CristalNbr); + bool Match_Si_SiLi(int X, int Y , int PadNbr); + bool ResolvePseudoEvent(); + int CheckEvent(); + public: + // Provide Physical Multiplicity Int_t EventMultiplicity ; @@ -52,23 +67,129 @@ class TMust2Physics : public TObject // Si X vector<double> Si_E ; vector<double> Si_T ; - vector<int> Si_X ; - vector<int> Si_Y ; + vector<int> Si_X ; + vector<int> Si_Y ; // Si(Li) vector<double> SiLi_E ; vector<double> SiLi_T ; - vector<int> SiLi_N ; + vector<int> SiLi_N ; // CsI vector<double> CsI_E ; vector<double> CsI_T ; - vector<int> CsI_N ; + vector<int> CsI_N ; // Physical Value vector<double> TotalEnergy ; - ClassDef(TMust2Physics,1) // Must2Data structure + + public: // Innherited from VDetector Class + + // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token + void ReadConfiguration(string) ; + + + // Add Parameter to the CalibrationManger + void AddParameterToCalibrationManager() ; + + + // Activated associated Branches and link it to the private member DetectorData address + // In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated + void InitializeRootInput() ; + + + // Create associated branches and associated private member DetectorPhysics address + void InitializeRootOutput() ; + + + // This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. + void BuildPhysicalEvent() ; + + + // Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...). + // This method aimed to be used for analysis performed during experiment, when speed is requiered. + // NB: This method can eventually be the same as BuildPhysicalEvent. + void BuildSimplePhysicalEvent() ; + + // Those two method all to clear the Event Physics or Data + void ClearEventPhysics() {Clear();} + void ClearEventData() {EventData->Clear();} + + public: // Specific to MUST2 Array + // Add a Telescope using Corner Coordinate information + void AddTelescope( TVector3 C_X1_Y1 , + TVector3 C_X128_Y1 , + TVector3 C_X1_Y128 , + TVector3 C_X128_Y128 ); + + // Add a Telescope using R Theta Phi of Si center information + void AddTelescope( double theta , + double phi , + double distance , + double beta_u , + double beta_v , + double beta_w ); + + double GetStripPositionX( int N , int X , int Y ) { return StripPositionX[N-1][X-1][Y-1] ; }; + double GetStripPositionY( int N , int X , int Y ) { return StripPositionY[N-1][X-1][Y-1] ; }; + double GetStripPositionZ( int N , int X , int Y ) { return StripPositionZ[N-1][X-1][Y-1] ; }; + + double GetNumberOfTelescope() { return NumberOfTelescope ; } ; + + // To be called after a build Physical Event + int GetEventMultiplicity() { return EventMultiplicity; }; + + double GetEnergyDeposit(int i) { return TotalEnergy[i] ;}; + + TVector3 GetPositionOfInteraction(int i) ; + TVector3 GetTelescopeNormal(int i) ; + + private: // Root Input and Output tree classes + + TMust2Data* EventData ;//! + TMust2Physics* EventPhysics ;//! + + + private: // Spatial Position of Strip Calculated on bases of detector position + + int NumberOfTelescope ;//! + + vector< vector < vector < double > > > StripPositionX ;//! + vector< vector < vector < double > > > StripPositionY ;//! + vector< vector < vector < double > > > StripPositionZ ;//! + + ClassDef(TMust2Physics,1) // Must2Physics structure }; +namespace LOCAL + { + // Threshold + const double Si_X_E_Threshold = 0 ; const double Si_X_T_Threshold = 0 ; + const double Si_Y_E_Threshold = 0 ; const double Si_Y_T_Threshold = 0 ; + const double SiLi_E_Threshold = 0 ; const double SiLi_T_Threshold = 0 ; + const double CsI_E_Threshold = 0 ; const double CsI_T_Threshold = 0 ; + + // tranform an integer to a string + string itoa(int value); + // DSSD + // X + double fSi_X_E(TMust2Data* Data , int i); + double fSi_X_T(TMust2Data* Data, int i); + + // Y + double fSi_Y_E(TMust2Data* Data, int i); + double fSi_Y_T(TMust2Data* Data, int i); + + // SiLi + double fSiLi_E(TMust2Data* Data, int i); + double fSiLi_T(TMust2Data* Data, int i); + + // CsI + double fCsI_E(TMust2Data* Data, int i); + double fCsI_T(TMust2Data* Data, int i); + + } + + #endif diff --git a/NPLib/Makefile b/NPLib/Makefile index bdfaaf6e1e7a68e22d56a00385b0a2753ce40bb8..b9158c7b7aac4171648a27652076a40eefd30898 100644 --- a/NPLib/Makefile +++ b/NPLib/Makefile @@ -268,19 +268,30 @@ GLIBS = $(ROOTGLIBS) $(SYSLIBS) INCLUDE = -I$(CLHEP_BASE_DIR)/include #------------------------------------------------------------------------------ -SHARELIB = Vdetec InputOutputRoot InitCond InterCoord \ - Must2All GaspardData AnnularS1Data PlasticData\ +SHARELIB = CalibManager Vdetec InputOutputRoot InitCond InterCoord \ + Must2All GaspardData AnnularS1Data PlasticData DummyDetectorData SSSDData\ Reaction EnergyLoss all: $(SHARELIB) rm -f ./include/*Dict.h #------------------------------------------------------------------------------ +############### Calibration ############## + +## CalibrationManager ## +CalibManager: + make -C ./CalibrationManager + cp ./CalibrationManager/*.so ./lib ; cp ./CalibrationManager/*.h ./include +ifeq ($(ARCH),macosx) + cd lib; ln -sf libCalibrationManager.so libCalibrationManager.dylib +endif + ############### Detector ############## ## VDetector ## Vdetec: + cp ./VDetector/*.h ./include make -C ./VDetector - cp ./VDetector/*.so ./lib ; cp ./VDetector/*.h ./include + cp ./VDetector/*.so ./lib ifeq ($(ARCH),macosx) cd lib; ln -sf libVDetector.so libVDetector.dylib endif @@ -294,6 +305,15 @@ ifeq ($(ARCH),macosx) cd lib; ln -sf libMust2Physics.so libMust2Physics.dylib endif +## SSSD ## +SSSDData: + make -C ./SSSD + cp ./SSSD/*.so ./lib ; cp ./SSSD/*.h ./include +ifeq ($(ARCH),macosx) + cd lib; ln -sf libSSSDData.so libSSSDData.dylib + cd lib; ln -sf libSSSDPhysics.so libSSSDPhysics.dylib +endif + ## AnnularS1 ## AnnularS1Data: make -C ./AnnularS1 @@ -308,19 +328,25 @@ GaspardData: cp ./GASPARD/*.so ./lib ; cp ./GASPARD/*.h ./include ifeq ($(ARCH),macosx) cd lib; ln -sf libGaspardData.so libGaspardData.dylib - cd lib; ln -sf libGaspardPyysics.so libGaspardPhysics.dylib + cd lib; ln -sf libGaspardPhysics.so libGaspardPhysics.dylib endif -## Gaspard ## +## Plastic ## PlasticData: make -C ./Plastic cp ./Plastic/*.so ./lib ; cp ./Plastic/*.h ./include ifeq ($(ARCH),macosx) cd lib; ln -sf libPlasticData.so libPlasticData.dylib - cd lib; ln -sf libPlasticPyysics.so libPlasticPhysics.dylib + cd lib; ln -sf libPlasticPhysics.so libPlasticPhysics.dylib endif - +## DUMMY Detector ## +DummyDetectorData: + make -C ./DummyDetector + cp ./DummyDetector/*.so ./lib ; cp ./DummyDetector/*.h ./include +ifeq ($(ARCH),macosx) + cd lib; ln -sf libDummyDetectorData.so libDummyDetectorData.dylib +endif ############# Simulation ############## ## InitialConditions ## @@ -373,11 +399,14 @@ clean: make clean -C ./Tools make clean -C ./IORoot make clean -C ./VDetector + make clean -C ./CalibrationManager make clean -C ./MUST2 + make clean -C ./SSSD make clean -C ./AnnularS1 make clean -C ./GASPARD make clean -C ./InteractionCoordinates make clean -C ./InitialConditions + make clean -C ./DummyDetector distclean: rm -f ./lib/*.so @@ -388,12 +417,14 @@ endif make distclean -C ./Tools make distclean -C ./IORoot make distclean -C ./VDetector + make distclean -C ./CalibrationManager make distclean -C ./MUST2 + make distclean -C ./SSSD make distclean -C ./AnnularS1 make distclean -C ./GASPARD make distclean -C ./InteractionCoordinates make distclean -C ./InitialConditions - + make distclean -C ./DummyDetector .SUFFIXES: .$(SrcSuf) ### diff --git a/NPLib/Plastic/Makefile b/NPLib/Plastic/Makefile index e5373baed1a56beac4a2ecd424d8ed5a91a45d6d..06fc2ee6055f821118bbba183e20029e06d11969 100644 --- a/NPLib/Plastic/Makefile +++ b/NPLib/Plastic/Makefile @@ -268,7 +268,7 @@ GLIBS = $(ROOTGLIBS) $(SYSLIBS) INCLUDE = -I$(CLHEP_BASE_DIR)/include #------------------------------------------------------------------------------ -SHARELIB = libPlasticData.so +SHARELIB = libPlasticData.so libPlasticPhysics.so all: $(SHARELIB) #------------------------------------------------------------------------------ @@ -281,8 +281,15 @@ libPlasticData.so: TPlasticData.o TPlasticDataDict.o TPlasticDataDict.cxx: TPlasticData.h rootcint -f $@ -c $^ +libPlasticPhysics.so: TPlasticPhysics.o TPlasticPhysicsDict.o + $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ + +TPlasticPhysicsDict.cxx: TPlasticPhysics.h + rootcint -f $@ -c $^ + # dependances TPlasticData.o: TPlasticData.cxx TPlasticData.h +TPlasticPhysics.o: TPlasticPhysics.cxx TPlasticPhysics.h ####################################### ############# Clean and More ########## diff --git a/NPLib/Plastic/TPlasticData.cxx b/NPLib/Plastic/TPlasticData.cxx index 1221a2a4f6b5abed0ceb5f94d74fe56c3e8586b5..f7d677090215f65d3d7c578849f53d9ee9b5703d 100644 --- a/NPLib/Plastic/TPlasticData.cxx +++ b/NPLib/Plastic/TPlasticData.cxx @@ -1,6 +1,4 @@ #include <iostream> -using namespace std; - #include "TPlasticData.h" @@ -22,15 +20,16 @@ void TPlasticData::Clear() { fPlastic_Energy.clear(); fPlastic_Number.clear(); + fPlastic_Time.clear(); } -void TPlasticData::Dump() +void TPlasticData::Dump() const { cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event XXXXXXXXXXXXXXXXX" << endl; - for(short i = 0 ; i<fPlastic_Energy.size() ; i ++) + for(unsigned short i = 0 ; i<fPlastic_Energy.size() ; i ++) { cout << "Plastic Number " << fPlastic_Number[i] << " Energy: " << fPlastic_Energy[i] << " Time: "<< fPlastic_Time[i] << endl; diff --git a/NPLib/Plastic/TPlasticData.h b/NPLib/Plastic/TPlasticData.h index f11a97f572312123f19724077a334d1067f985ea..ebd2eb3f79c1ca83b7710a75c8f26ac949d7bb1e 100644 --- a/NPLib/Plastic/TPlasticData.h +++ b/NPLib/Plastic/TPlasticData.h @@ -4,7 +4,7 @@ #include <vector> #include "TObject.h" - +using namespace std ; class TPlasticData : public TObject { @@ -12,27 +12,37 @@ class TPlasticData : public TObject { // ADC vector<double> fPlastic_Energy ; vector<double> fPlastic_Time ; - vector<short> fPlastic_Number ; + vector<short> fPlastic_Number ; public: TPlasticData(); virtual ~TPlasticData(); void Clear(); - void Dump(); + void Clear(const Option_t*) {}; + void Dump() const; ///////////////////// GETTERS //////////////////////// // (E) - double GetEnergy(int i) {return fPlastic_Energy[i];} + double GetEnergy(int i) { return fPlastic_Energy[i] ;} // (T) - double GetTime(int i) {return fPlastic_Time[i];} + double GetTime(int i) { return fPlastic_Time[i] ;} // (N) - int GetPlasticNumber(int i) {return fPlastic_Number[i];} + int GetPlasticNumber(int i) { return fPlastic_Number[i] ;} + + //Mult + // E + double GetEnergyMult() { return fPlastic_Energy.size() ;} + // (T) + double GetTimeMult() { return fPlastic_Time.size() ;} + // (N) + int GetPlasticNumberMult() { return fPlastic_Number.size() ;} + ///////////////////// SETTERS //////////////////////// // (E) - void SetEnergy(double E) {fPlastic_Energy.push_back(E);} - void SetTime(double T) {fPlastic_Time.push_back(T);} - void SetPlasticNumber(int N) {fPlastic_Number.push_back(N);} + void SetEnergy(double E) { fPlastic_Energy.push_back(E) ;} + void SetTime(double T) { fPlastic_Time.push_back(T) ;} + void SetPlasticNumber(int N) { fPlastic_Number.push_back(N) ;} // ClassDef(TPlasticData,1) // PlasticData structure diff --git a/NPLib/Plastic/TPlasticPhysics.cxx b/NPLib/Plastic/TPlasticPhysics.cxx new file mode 100644 index 0000000000000000000000000000000000000000..093f1ee58f6e74d8d2d0b1353c2b662821bfcbe0 --- /dev/null +++ b/NPLib/Plastic/TPlasticPhysics.cxx @@ -0,0 +1,255 @@ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : november 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class hold Plastic Physics * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ + +// NPL +#include "TPlasticPhysics.h" +#include "../include/RootOutput.h" +#include "../include/RootInput.h" + +// STL +#include <iostream> +#include <sstream> +#include <fstream> +#include <limits> +#include <stdlib.h> +using namespace std; + +// ROOT +#include "TChain.h" + +// tranform an integer to a string + string itoa(int value) + { + std::ostringstream o; + + if (!(o << value)) + return "" ; + + return o.str(); + } + +ClassImp(TPlasticPhysics) +/////////////////////////////////////////////////////////////////////////// +TPlasticPhysics::TPlasticPhysics() + { + NumberOfDetector = 0 ; + EventData = new TPlasticData ; + EventPhysics = this ; + } + +/////////////////////////////////////////////////////////////////////////// +TPlasticPhysics::~TPlasticPhysics() + {} + +/////////////////////////////////////////////////////////////////////////// +void TPlasticPhysics::Clear() + { + DetectorNumber .clear() ; + Energy .clear() ; + Time .clear() ; + } + +/////////////////////////////////////////////////////////////////////////// +void TPlasticPhysics::ReadConfiguration(string Path) + { + ifstream ConfigFile ; + ConfigFile.open(Path.c_str()) ; + string LineBuffer ; + string DataBuffer ; + + double Theta = 0 , Phi = 0 , R = 0 , Thickness = 0 , Radius = 0 , LeadThickness = 0; + string Scintillator ; + + bool check_Theta = false ; + bool check_Phi = false ; + bool check_R = false ; + bool check_Thickness = false ; + bool check_Radius = false ; + bool check_LeadThickness = false ; + bool check_Scintillator = false ; + bool ReadingStatus = false ; + + + while (!ConfigFile.eof()) + { + + getline(ConfigFile, LineBuffer); + + // If line is a Start Up Plastic bloc, Reading toggle to true + if (LineBuffer.compare(0, 7, "Plastic") == 0) + { + cout << "///" << endl ; + cout << "Platic found: " << endl ; + ReadingStatus = true ; + + } + + // Else don't toggle to Reading Block Status + else ReadingStatus = false ; + + // Reading Block + while(ReadingStatus) + { + // Pickup Next Word + ConfigFile >> DataBuffer ; + + // Comment Line + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} + + // Finding another telescope (safety), toggle out + else if (DataBuffer.compare(0, 6, "Plastic") == 0) { + cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ; + ReadingStatus = false ; + } + + //Angle method + else if (DataBuffer.compare(0, 6, "THETA=") == 0) { + check_Theta = true; + ConfigFile >> DataBuffer ; + Theta = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 4, "PHI=") == 0) { + check_Phi = true; + ConfigFile >> DataBuffer ; + Phi = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 2, "R=") == 0) { + check_R = true; + ConfigFile >> DataBuffer ; + R = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 7, "Radius=") == 0) { + check_Radius = true; + ConfigFile >> DataBuffer ; + Radius = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 10, "Thickness=") == 0) { + check_Thickness = true; + ConfigFile >> DataBuffer ; + Thickness = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 13, "Scintillator=") == 0) { + check_Scintillator = true ; + ConfigFile >> DataBuffer ; + Scintillator = DataBuffer ; + } + + else if (DataBuffer.compare(0, 14, "LeadThickness=") == 0) { + check_LeadThickness = true; + ConfigFile >> DataBuffer ; + LeadThickness = atof(DataBuffer.c_str()) ; + } + + /////////////////////////////////////////////////// + // If no Detector Token and no comment, toggle out + else + {ReadingStatus = false; cout << "Wrong Token Sequence: Getting out " << DataBuffer << endl ;} + + ///////////////////////////////////////////////// + // If All necessary information there, toggle out + + if ( check_Theta && check_Phi && check_R && check_Thickness && check_Radius && check_LeadThickness && check_Scintillator) + { + NumberOfDetector++; + + // Reinitialisation of Check Boolean + + check_Theta = false ; + check_Phi = false ; + check_R = false ; + check_Thickness = false ; + check_Radius = false ; + check_LeadThickness = false ; + check_Scintillator = false ; + ReadingStatus = false ; + cout << "///"<< endl ; + } + + } + } + } + + +/////////////////////////////////////////////////////////////////////////// +void TPlasticPhysics::AddParameterToCalibrationManager() + { + CalibrationManager* Cal = CalibrationManager::getInstance(); + + for(int i = 0 ; i < NumberOfDetector ; i++) + { + for( int j = 0 ; j < 16 ; j++) + { + Cal->AddParameter("Plastic", "Detector"+itoa(i+1)+"_E","Plastic_Detector"+itoa(i+1)+"_E") ; + Cal->AddParameter("Plastic", "Detector"+itoa(i+1)+"_T","Plastic_Detector"+itoa(i+1)+"_T") ; + } + + } + } + +/////////////////////////////////////////////////////////////////////////// +void TPlasticPhysics::InitializeRootInput() + { + TChain* inputChain = RootInput::getInstance()->GetChain() ; + inputChain->SetBranchStatus ( "Plastic" , true ) ; + inputChain->SetBranchStatus ( "fPlastic_*" , true ) ; + inputChain->SetBranchAddress( "Plastic" , &EventData ) ; + } + +/////////////////////////////////////////////////////////////////////////// +void TPlasticPhysics::InitializeRootOutput() + { + TTree* outputTree = RootOutput::getInstance()->GetTree() ; + outputTree->Branch( "Plastic" , "TPlasticPhysics" , &EventPhysics ) ; + } + +/////////////////////////////////////////////////////////////////////////// +void TPlasticPhysics::BuildPhysicalEvent() + { + BuildSimplePhysicalEvent() ; + } + +/////////////////////////////////////////////////////////////////////////// +void TPlasticPhysics::BuildSimplePhysicalEvent() + { + for(unsigned int i = 0 ; i < EventData->GetEnergyMult() ; i++) + { + + DetectorNumber .push_back( EventData->GetPlasticNumber(i) ) ; + + Energy .push_back( + CalibrationManager::getInstance()->ApplyCalibration( "Plastic/Detector" + itoa( EventData->GetPlasticNumber(i) ) +"_E", + EventData->GetEnergy(i) ) + ) ; + + Time .push_back( + CalibrationManager::getInstance()->ApplyCalibration( "Plastic/Detector" + itoa( EventData->GetPlasticNumber(i) ) +"_T", + EventData->GetTime(i) ) + ) ; + } + + } + diff --git a/NPLib/Plastic/TPlasticPhysics.h b/NPLib/Plastic/TPlasticPhysics.h new file mode 100644 index 0000000000000000000000000000000000000000..a00c34437ad3ac4caa7aee9195a241ec42fd6fdf --- /dev/null +++ b/NPLib/Plastic/TPlasticPhysics.h @@ -0,0 +1,91 @@ +#ifndef __PlasticPhysics__ +#define __PlasticPhysics__ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : November 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class hold thePlastic Detector Physics * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ + +// STL +#include <vector> +using namespace std ; + +// ROOT +#include "TObject.h" + +// NPL +#include "TPlasticData.h" +#include "../include/VDetector.h" +#include "../include/CalibrationManager.h" + +class TPlasticPhysics : public TObject, public NPA::VDetector +{ + public: // Constructor and Destructor + TPlasticPhysics(); + ~TPlasticPhysics(); + + public: // Calibrated Data + + vector<UShort_t> DetectorNumber ; + vector<Double_t> Energy ; + vector<Double_t> Time ; + + public: // inherrited from VDetector + // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token + void ReadConfiguration(string) ; + + + // Add Parameter to the CalibrationManger + void AddParameterToCalibrationManager() ; + + + // Activated associated Branches and link it to the private member DetectorData address + // In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated + void InitializeRootInput() ; + + + // Create associated branches and associated private member DetectorPhysics address + void InitializeRootOutput() ; + + + // This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. + void BuildPhysicalEvent() ; + + + // Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...). + // This method aimed to be used for analysis performed during experiment, when speed is requiered. + // NB: This method can eventually be the same as BuildPhysicalEvent. + void BuildSimplePhysicalEvent() ; + + // Those two method all to clear the Event Physics or Data + void ClearEventPhysics() {Clear();} + void ClearEventData() {EventData->Clear();} + + private: // Data not writted in the tree + int NumberOfDetector ;//! + TPlasticData* EventData ;//! + TPlasticPhysics* EventPhysics ;//! + + void Clear(); + void Clear(const Option_t*) {}; + + ClassDef(TPlasticPhysics,1) // PlasticPhysics structure +}; + +#endif diff --git a/NPLib/README b/NPLib/README index c6deacdc58f4a59e6e60fd6bea2db76edb401eb5..5723d77390845d9aa5512a46bb0bdda223619ffb 100644 --- a/NPLib/README +++ b/NPLib/README @@ -27,6 +27,8 @@ NPLib / include / Tools / InitialConditions / InteractionCoordinates + / CalibrationManager + / DummyDetector / MUST2 / AnnularS1 / GASPARD @@ -67,9 +69,32 @@ VI) InteractionCoordinates This class derives from TObject (ROOT) and its aim is to be stored in the output TTree of the G4 simulation. -VII) MUST2 +VII) CalibrationManager + This directory includes one library: + libCalibrationManager.so + This folder contain the the class object for managing calibration file. + A caliration manager singleton is instantiate in NPAnalysis project. + +VIII) DummyDetector + This directory includes one library: + libDUMMYDetector.so + This library stores the results of the G4 simulation for the example detector + DummyDetector. -VIII) AnnularS1 +IX) MUST2 + This directory includes two libraries: + libMust2Data.so + libMust2Physics.so + libMust2Data.so: + This library stores the results of the G4 simulation for the Must2 + detector. + The format mimics what was used for the GANIL experiments after conversion + of the raw data with GRU. Ask N. de Sereville for more informations. + libMust2Physics.so: + This library deals with the treatment applied to the ROOT output file + obtained from NPSimulation. This library is *only* used by NPAnalysis. + +X) AnnularS1 This directory includes one library: libAnnularS1Data.so This library stores the results of the G4 simulation for the S1 detector. @@ -79,7 +104,7 @@ VIII) AnnularS1 This class derives from TObject (ROOT) and its aim is to be stored in the output TTree of the G4 simulation. -IX) GASPARD +XI) GASPARD This directory includes two libraries: libGaspardData.so libGaspardPhysics.so @@ -92,4 +117,15 @@ IX) GASPARD This library deals with the treatment applied to the ROOT output file obtained from NPSimulation. This library is *only* used by NPAnalysis. -X) VDetector +XII) VDetector + This directory includes two libraries: + libVDetector.so + libDetectorManager.so + libVDetector.so: + VDetector is a virtual class used for analysis purpose. It comes with several + standard methods definition called in the analysis programm automatically. + Those method need to be implemented for each detector inheritted from the VDetector + class. + libDetectorManager.so: + DetectorManager is a class that manages a vector of VDetector and call their + common functions. diff --git a/NPLib/SSSD/Makefile b/NPLib/SSSD/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..f9b71f05d93a9c1fdf589d168fb97e6b1d691bc6 --- /dev/null +++ b/NPLib/SSSD/Makefile @@ -0,0 +1,309 @@ +# Makefile for the ROOT test programs. +# This Makefile shows nicely how to compile and link applications +# using the ROOT libraries on all supported platforms. +# +# Copyright (c) 2000 Rene Brun and Fons Rademakers +# +# Author: Fons Rademakers, 29/2/2000 + +ROOTCONFIG := root-config + +ARCH := $(shell $(ROOTCONFIG) --arch) +PLATFORM := $(shell $(ROOTCONFIG) --platform) +ALTCC := $(shell $(ROOTCONFIG) --cc) +ALTCXX := $(shell $(ROOTCONFIG) --cxx) +ALTF77 := $(shell $(ROOTCONFIG) --f77) +ALTLD := $(shell $(ROOTCONFIG) --ld) + +#CXX = +ObjSuf = o +SrcSuf = cxx +ExeSuf = +DllSuf = so +OutPutOpt = -o # keep whitespace after "-o" + +ifeq (debug,$(findstring debug,$(ROOTBUILD))) +OPT = -g +OPT2 = -g +else +ifneq ($(findstring debug, $(strip $(shell $(ROOTCONFIG) --config))),) +OPT = -g +OPT2 = -g +else +OPT = -O +OPT2 = -O2 +endif +endif + +ROOTCFLAGS := $(shell $(ROOTCONFIG) --cflags) +ROOTLDFLAGS := $(shell $(ROOTCONFIG) --ldflags) +ROOTLIBS := $(shell $(ROOTCONFIG) --libs) +ROOTGLIBS := $(shell $(ROOTCONFIG) --glibs) +HASTHREAD := $(shell $(ROOTCONFIG) --has-thread) +ROOTDICTTYPE := $(shell $(ROOTCONFIG) --dicttype) +NOSTUBS := $(shell $(ROOTCONFIG) --nostubs) +ROOTCINT := rootcint + +ifeq ($(ARCH),linux) +# Linux with egcs, gcc 2.9x, gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxkcc) +# Linux with the KAI compiler +CXX = KCC --one_instantiation_per_object +CXXFLAGS = $(OPT) -fPIC +K0 +LD = KCC +LDFLAGS = $(OPT) $(shell $(ROOTCONFIG) --cflags) +SOFLAGS = +endif + +ifeq ($(ARCH),linuxicc) +# Linux with Intel icc compiler +ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f1) +ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f2) +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxppcgcc) +# PPC Linux with gcc and glibc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64gcc) +# Itanium Linux with gcc 2.9x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64sgi) +# Itanium Linux with sgiCC +CXX = sgiCC +CXXFLAGS = $(OPT) -Wall -fPIC +LD = gsgiCC +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxia64ecc) +# Itanium Linux with Intel icc (was ecc) +ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f1) +ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \ + cut -d'.' -f2) +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 -ftz +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxx8664gcc) +# AMD Opteron and Intel EM64T (64 bit mode) Linux with gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxppc64gcc) +# PPC64 Linux with gcc 3.x +CXX = g++ +CXXFLAGS = $(OPT) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxx8664icc) +# AMD Opteron and Intel EM64T (64 bit mode) Linux with Intel icc compiler +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 -wd1572 +LD = icpc +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxalphagcc) +# Alpha Linux with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxmips) +# GNU/Linux on mips (BE/LE, O32/N32/N64) with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxhppa) +# GNU/Linux on hppa with gcc +CXX = g++ +CXXFLAGS = $(OPT2) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT2) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),linuxarm) +# ARM Linux with egcs +CXX = g++ +CXXFLAGS = $(OPT) -Wall -fPIC +LD = g++ +LDFLAGS = $(OPT) +SOFLAGS = -shared +endif + +ifeq ($(ARCH),macosx) +# MacOS X with cc (GNU cc 2.95.2 and gcc 3.3) +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = g++ +CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual +LD = $(MACOSXTARGET) g++ +LDFLAGS = $(OPT2) -bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +UNDEFOPT = dynamic_lookup +ifneq ($(subst $(MACOSX_MINOR),,12),12) +UNDEFOPT = suppress +LD = g++ +endif +SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT) +endif + +ifeq ($(ARCH),macosxicc) +# MacOS X with Intel icc compiler +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +ifeq ($(MACOSX_MINOR),5) +MACOSX_MINOR := 4 +endif +CXX = icc +CXXFLAGS = $(OPT) -fPIC -wd1476 +LD = $(MACOSXTARGET) icpc +LDFLAGS = $(OPT) +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup +endif + +ifeq ($(ARCH),macosx64) +# MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*) +# Only specific option (-m64) comes from root-config +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = g++ +CXXFLAGS = $(OPT2) -pipe -Wall -W -Woverloaded-virtual +LD = $(MACOSXTARGET) g++ -m64 +LDFLAGS = $(OPT2) -bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +ifeq ($(subst $(MACOSX_MINOR),,1234),1234) +DllSuf = so +else +DllSuf = dylib +endif +SOFLAGS = -m64 -dynamiclib -single_module -undefined dynamic_lookup +endif + +ifeq ($(ARCH),macosxxlc) +# MacOS X with IBM xlC compiler +MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2) +MACOSXTARGET := MACOSX_DEPLOYMENT_TARGET=10.$(MACOSX_MINOR) +CXX = xlC +CXXFLAGS = $(OPT) +LD = $(MACOSXTARGET) xlC +LDFLAGS = $(OPT) -Wl,-bind_at_load +# The SOFLAGS will be used to create the .dylib, +# the .so will be created separately +DllSuf = dylib +UNDEFOPT = dynamic_lookup +ifneq ($(subst $(MACOSX_MINOR),,12),12) +UNDEFOPT = suppress +LD = xlC +endif +SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT) +endif + +CXXFLAGS += $(ROOTCFLAGS) +LDFLAGS += $(ROOTLDFLAGS) +LIBS = $(ROOTLIBS) $(SYSLIBS) +GLIBS = $(ROOTGLIBS) $(SYSLIBS) + +INCLUDE = -I$(CLHEP_BASE_DIR)/include -I$(NPLIB)/include + +#------------------------------------------------------------------------------ +SHARELIB = libSSSDData.so libSSSDPhysics.so + +all: $(SHARELIB) +#------------------------------------------------------------------------------ +############### Detector ############## + +## SSSD ## +libSSSDData.so: TSSSDData.o TSSSDDataDict.o + $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ + +TSSSDDataDict.cxx: TSSSDData.h + rootcint -f $@ -c $^ + +libSSSDPhysics.so: TSSSDPhysics.o TSSSDPhysicsDict.o + $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ + +TSSSDPhysicsDict.cxx: TSSSDPhysics.h + rootcint -f $@ -c $^ + +# dependances +TSSSDData.o: TSSSDData.cxx TSSSDData.h +TSSSDPhysics.o: TSSSDPhysics.cxx TSSSDPhysics.h +####################################### + +############# Clean and More ########## +clean: + @rm -f core *~ *.o *Dict* + +distclean: + make clean; rm -f *.so + +.SUFFIXES: .$(SrcSuf) + +### + +.$(SrcSuf).$(ObjSuf): + $(CXX) $(CXXFLAGS) $(INCLUDE) -c $< + + diff --git a/NPLib/SSSD/TSSSDData.cxx b/NPLib/SSSD/TSSSDData.cxx new file mode 100644 index 0000000000000000000000000000000000000000..66d7b22393986cb749027650c8e7f102f822905d --- /dev/null +++ b/NPLib/SSSD/TSSSDData.cxx @@ -0,0 +1,77 @@ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : febuary 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class hold SSSD Raw data * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ +#include <iostream> +using namespace std; + +#include "TSSSDData.h" + +ClassImp(TSSSDData) + +TSSSDData::TSSSDData() +{ + // Default constructor + + // SSSD + // Energy + fSSSD_StripE_DetectorNbr.clear() ; + fSSSD_StripE_StripNbr.clear() ; + fSSSD_StripE_Energy.clear() ; + // Time + fSSSD_StripT_DetectorNbr.clear() ; + fSSSD_StripT_StripNbr.clear() ; + fSSSD_StripT_Time.clear() ; + +} + +TSSSDData::~TSSSDData() +{} + +void TSSSDData::Clear() +{ + // DSSD + // Energy + fSSSD_StripE_DetectorNbr.clear() ; + fSSSD_StripE_StripNbr.clear() ; + fSSSD_StripE_Energy.clear() ; + // Time + fSSSD_StripT_DetectorNbr.clear() ; + fSSSD_StripT_StripNbr.clear() ; + fSSSD_StripT_Time.clear() ; +} + + + +void TSSSDData::Dump() const +{ + cout << "XXXXXXXXXXXXXXXXXXXXXXXX New Event XXXXXXXXXXXXXXXXX" << endl; + + // SSSD + // Energy + cout << "SSSD_StripE_Mult = " << fSSSD_StripE_DetectorNbr.size() << endl; + for (UShort_t i = 0; i < fSSSD_StripE_DetectorNbr.size(); i++) + cout << "DetNbr: " << fSSSD_StripE_DetectorNbr[i] << " Strip: " << fSSSD_StripE_StripNbr[i] << " Energy: " << fSSSD_StripE_Energy[i] << endl; + // Time + cout << "SSSD_StripXT_Mult = " << fSSSD_StripT_DetectorNbr.size() << endl; + for (UShort_t i = 0; i < fSSSD_StripT_DetectorNbr.size(); i++) + cout << "DetNbr: " << fSSSD_StripT_DetectorNbr[i] << " Strip: " << fSSSD_StripT_StripNbr[i] << " Time: " << fSSSD_StripT_Time[i] << endl; + +} diff --git a/NPLib/SSSD/TSSSDData.h b/NPLib/SSSD/TSSSDData.h new file mode 100644 index 0000000000000000000000000000000000000000..7e90e7f0515b029ea4799ac39516cd4d5c6980c5 --- /dev/null +++ b/NPLib/SSSD/TSSSDData.h @@ -0,0 +1,76 @@ +#ifndef __SSSDDATA__ +#define __SSSDDATA__ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : febuary 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class hold the Single Side Striped Detector raw data * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ +#include <vector> +#include "TObject.h" + +using namespace std ; +class TSSSDData : public TObject { + private: + // SSSD + // Energy + vector<UShort_t> fSSSD_StripE_DetectorNbr; + vector<UShort_t> fSSSD_StripE_StripNbr; + vector<Double_t> fSSSD_StripE_Energy; + // Time + vector<UShort_t> fSSSD_StripT_DetectorNbr; + vector<UShort_t> fSSSD_StripT_StripNbr; + vector<Double_t> fSSSD_StripT_Time; + + + public: + TSSSDData(); + virtual ~TSSSDData(); + + void Clear(); + void Clear(const Option_t*) {}; + void Dump() const; + + ///////////////////// SETTERS //////////////////////// + // DSSD + // (X,E) + void SetEnergyDetectorNbr (UShort_t DetNbr) { fSSSD_StripE_DetectorNbr.push_back(DetNbr) ;} + void SetEnergyStripNbr (UShort_t StripNbr) { fSSSD_StripE_StripNbr.push_back(StripNbr) ;} + void SetEnergy (Double_t Energy) { fSSSD_StripE_Energy.push_back(Energy) ;} + // (X,T) + void SetTimeDetectorNbr (UShort_t DetNbr) { fSSSD_StripT_DetectorNbr.push_back(DetNbr) ;} + void SetTimeStripNbr (UShort_t StripNbr) { fSSSD_StripT_StripNbr.push_back(StripNbr) ;} + void SetTime (Double_t Time) { fSSSD_StripT_Time.push_back(Time) ;} + + ///////////////////// GETTERS //////////////////////// + // DSSD + // (X,E) + UShort_t GetEnergyMult () { return fSSSD_StripE_DetectorNbr.size() ;} + UShort_t GetEnergyDetectorNbr (Int_t i) { return fSSSD_StripE_DetectorNbr.at(i) ;} + UShort_t GetEnergyStripNbr (Int_t i) { return fSSSD_StripE_StripNbr.at(i) ;} + Double_t GetEnergy (Int_t i) { return fSSSD_StripE_Energy.at(i) ;} + // (X,T) + UShort_t GetTimeMult () { return fSSSD_StripT_DetectorNbr.size() ;} + UShort_t GetTimeDetectorNbr (Int_t i) { return fSSSD_StripT_DetectorNbr.at(i) ;} + UShort_t GetTimeStripNbr (Int_t i) { return fSSSD_StripT_StripNbr.at(i) ;} + Double_t GetTime (Int_t i) { return fSSSD_StripT_Time.at(i) ;} + + ClassDef(TSSSDData,1) // SSSDData structure +}; + +#endif diff --git a/NPLib/SSSD/TSSSDPhysics.cxx b/NPLib/SSSD/TSSSDPhysics.cxx new file mode 100644 index 0000000000000000000000000000000000000000..63be1855e636503767ddc451f875d8821984c922 --- /dev/null +++ b/NPLib/SSSD/TSSSDPhysics.cxx @@ -0,0 +1,304 @@ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : november 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class hold SSSD Physics * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ +// NPL +#include "TSSSDPhysics.h" +#include "RootOutput.h" +#include "RootInput.h" + +// STL +#include <iostream> +#include <sstream> +#include <fstream> +#include <limits> +#include <stdlib.h> +using namespace std; + +// ROOT +#include "TChain.h" + +// tranform an integer to a string + string itoa(int value) + { + std::ostringstream o; + + if (!(o << value)) + return "" ; + + return o.str(); + } + +ClassImp(TSSSDPhysics) +/////////////////////////////////////////////////////////////////////////// +TSSSDPhysics::TSSSDPhysics() + { + NumberOfDetector = 0 ; + EventData = new TSSSDData ; + EventPhysics = this ; + } +/////////////////////////////////////////////////////////////////////////// +TSSSDPhysics::~TSSSDPhysics() + {} +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::Clear() + { + DetectorNumber .clear() ; + StripNumber .clear() ; + Energy .clear() ; + Time .clear() ; + } +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::ReadConfiguration(string Path) + { + ifstream ConfigFile ; + ConfigFile.open(Path.c_str()) ; + string LineBuffer ; + string DataBuffer ; + + double TLX , BLX , BRX , TRX , TLY , BLY , BRY , TRY , TLZ , BLZ , BRZ , TRZ ; + double Theta = 0 , Phi = 0 , R = 0 , beta_u = 0 , beta_v = 0 , beta_w = 0 ; + bool check_A = false ; + bool check_B = false ; + bool check_C = false ; + bool check_D = false ; + + bool check_Theta = false ; + bool check_Phi = false ; + bool check_R = false ; + bool check_beta = false ; + bool ReadingStatus = false ; + + while (!ConfigFile.eof()) + { + + getline(ConfigFile, LineBuffer); + + // If line is a Start Up ThinSi bloc, Reading toggle to true + if (LineBuffer.compare(0, 6, "ThinSi") == 0) + { + cout << "Detector found: " << endl ; + ReadingStatus = true ; + } + + // Else don't toggle to Reading Block Status + else ReadingStatus = false ; + + // Reading Block + while(ReadingStatus) + { + // Pickup Next Word + ConfigFile >> DataBuffer ; + + // Comment Line + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} + + // Finding another telescope (safety), toggle out + else if (DataBuffer.compare(0, 6, "ThinSi") == 0) { + cout << "WARNING: Another Telescope is find before standard sequence of Token, Error may occured in Telecope definition" << endl ; + ReadingStatus = false ; + } + + //Position method + else if (DataBuffer.compare(0, 3, "A=") == 0) { + check_A = true; + ConfigFile >> DataBuffer ; + TLX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TLY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TLZ = atof(DataBuffer.c_str()) ; + + } + + else if (DataBuffer.compare(0, 3, "B=") == 0) { + check_B = true; + ConfigFile >> DataBuffer ; + BLX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BLY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BLZ = atof(DataBuffer.c_str()) ; + + } + + else if (DataBuffer.compare(0, 3, "C=") == 0) { + check_C = true; + ConfigFile >> DataBuffer ; + BRX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BRY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + BRZ = atof(DataBuffer.c_str()) ; + + } + + else if (DataBuffer.compare(0, 3, "D=") == 0) { + check_D = true; + ConfigFile >> DataBuffer ; + TRX = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TRY = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + TRZ = atof(DataBuffer.c_str()) ; + + } + + + //Angle method + else if (DataBuffer.compare(0, 6, "THETA=") == 0) { + check_Theta = true; + ConfigFile >> DataBuffer ; + Theta = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 4, "PHI=") == 0) { + check_Phi = true; + ConfigFile >> DataBuffer ; + Phi = atof(DataBuffer.c_str()) ; + } + + else if (DataBuffer.compare(0, 2, "R=") == 0) { + check_R = true; + ConfigFile >> DataBuffer ; + R = atof(DataBuffer.c_str()) ; + } + + + else if (DataBuffer.compare(0, 5, "BETA=") == 0) { + check_beta = true; + ConfigFile >> DataBuffer ; + beta_u = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + beta_v = atof(DataBuffer.c_str()) ; + ConfigFile >> DataBuffer ; + beta_w = atof(DataBuffer.c_str()) ; + } + + /////////////////////////////////////////////////// + // If no Detector Token and no comment, toggle out + else + {ReadingStatus = false; cout << "Wrong Token Sequence: Getting out " << DataBuffer << endl ;} + + ///////////////////////////////////////////////// + // If All necessary information there, toggle out + + if ( (check_A && check_B && check_C && check_D) || (check_Theta && check_Phi && check_R && check_beta) ) + { + ReadingStatus = false; + + ///Add The previously define telescope + //With position method + if ((check_A && check_B && check_C && check_D) || !(check_Theta && check_Phi && check_R)) { + NumberOfDetector++; + } + + //with angle method + else if ((check_Theta && check_Phi && check_R) || !(check_A && check_B && check_C && check_D)) { + NumberOfDetector++; + } + + // Reinitialisation of Check Boolean + + check_A = false ; + check_B = false ; + check_C = false ; + check_D = false ; + + check_Theta = false ; + check_Phi = false ; + check_R = false ; + check_beta = false ; + ReadingStatus = false ; + + } + + } + } + +} + + +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::AddParameterToCalibrationManager() + { + CalibrationManager* Cal = CalibrationManager::getInstance(); + + for(int i = 0 ; i < NumberOfDetector ; i++) + { + + for( int j = 0 ; j < 16 ; j++) + { + Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_E") ; + Cal->AddParameter("SSSD", "Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T","SSSD_Detector"+itoa(i+1)+"_Strip"+itoa(j+1)+"_T") ; + } + + } + } + +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::InitializeRootInput() + { + TChain* inputChain = RootInput::getInstance()->GetChain() ; + inputChain->SetBranchStatus ( "ThinSi" , true ) ; + inputChain->SetBranchStatus ( "fSSSD_*" , true ) ; + inputChain->SetBranchAddress( "ThinSi" , &EventData ) ; + } + +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::InitializeRootOutput() + { + TTree* outputTree = RootOutput::getInstance()->GetTree() ; + outputTree->Branch( "SSSD" , "TSSSDPhysics" , &EventPhysics ) ; + } + +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::BuildPhysicalEvent() + { + BuildSimplePhysicalEvent() ; + } + +/////////////////////////////////////////////////////////////////////////// +void TSSSDPhysics::BuildSimplePhysicalEvent() + { + if( EventData->GetEnergyMult() == EventData->GetTimeMult() ) + { + for(unsigned int i = 0 ; i < EventData->GetEnergyMult() ; i++) + { + + DetectorNumber .push_back( EventData->GetEnergyDetectorNbr(i) ) ; + StripNumber .push_back( EventData->GetEnergyStripNbr(i) ) ; + + Energy .push_back( + CalibrationManager::getInstance()->ApplyCalibration( "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_E", + EventData->GetEnergy(i) ) + ) ; + + Time .push_back( + CalibrationManager::getInstance()->ApplyCalibration( "SSSD/Detector" + itoa( EventData->GetEnergyDetectorNbr(i) ) + "_Strip" + itoa( EventData->GetEnergyStripNbr(i) ) +"_T", + EventData->GetTime(i) ) + ) ; + } + } + + else return ; + + } + diff --git a/NPLib/SSSD/TSSSDPhysics.h b/NPLib/SSSD/TSSSDPhysics.h new file mode 100644 index 0000000000000000000000000000000000000000..21bc790fb7067a44b6beef2e3f1da94890a10b97 --- /dev/null +++ b/NPLib/SSSD/TSSSDPhysics.h @@ -0,0 +1,92 @@ +#ifndef __SSSDPhysics__ +#define __SSSDPhysics__ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : November 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class hold the Single Side Striped Detector Physics * + * * + *---------------------------------------------------------------------------* + * Comment: * + * * + * * + *****************************************************************************/ +// STL +#include <vector> +using namespace std ; + +// ROOT +#include "TObject.h" + +// NPL +#include "TSSSDData.h" +#include "../include/VDetector.h" +#include "../include/CalibrationManager.h" + +class TSSSDPhysics : public TObject, public NPA::VDetector +{ + public: // Constructor and Destructor + TSSSDPhysics(); + ~TSSSDPhysics(); + + + public: // Calibrated Data + + vector<UShort_t> DetectorNumber ; + vector<UShort_t> StripNumber ; + vector<Double_t> Energy ; + vector<Double_t> Time ; + + public: // inherrited from VDetector + // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token + void ReadConfiguration(string) ; + + + // Add Parameter to the CalibrationManger + void AddParameterToCalibrationManager() ; + + + // Activated associated Branches and link it to the private member DetectorData address + // In this method mother Branches (Detector) AND daughter leaf (fDetector_parameter) have to be activated + void InitializeRootInput() ; + + + // Create associated branches and associated private member DetectorPhysics address + void InitializeRootOutput() ; + + + // This method is called at each event read from the Input Tree. Aime is to build treat Raw dat in order to extract physical parameter. + void BuildPhysicalEvent() ; + + + // Same as above, but only the simplest event and/or simple method are used (low multiplicity, faster algorythm but less efficient ...). + // This method aimed to be used for analysis performed during experiment, when speed is requiered. + // NB: This method can eventually be the same as BuildPhysicalEvent. + void BuildSimplePhysicalEvent() ; + + // Those two method all to clear the Event Physics or Data + void ClearEventPhysics() {Clear();} + void ClearEventData() {EventData->Clear();} + + private: // Data not writted in the tree + int NumberOfDetector ;//! + TSSSDData* EventData ;//! + TSSSDPhysics* EventPhysics ;//! + + void Clear(); + void Clear(const Option_t*) {}; + + ClassDef(TSSSDPhysics,1) // SSSDPhysics structure +}; + +#endif diff --git a/NPLib/Tools/NPEnergyLoss.cxx b/NPLib/Tools/NPEnergyLoss.cxx index cf6d582c19f912142b31558ed86d7280c232085e..f41ac75f9b09e671ac9c8875d142358d2934c5a2 100644 --- a/NPLib/Tools/NPEnergyLoss.cxx +++ b/NPLib/Tools/NPEnergyLoss.cxx @@ -56,34 +56,46 @@ EnergyLoss::~EnergyLoss() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EnergyLoss::EnergyLoss(string Path , int NumberOfSlice=100 , int LiseColumn=0 , int NumberOfMass=1) +EnergyLoss::EnergyLoss(string Path , string Source, int NumberOfSlice=100 , int LiseColumn , int NumberOfMass) { fNumberOfSlice = NumberOfSlice ; fNumberOfMass = NumberOfMass ; string globalPath = getenv("NPTOOL"); - Path = globalPath + "/Inputs/dEdX/" + Path; + Path = globalPath + "/Inputs/EnergyLoss/" + Path; cout << "///////////////////////////////// " << endl ; cout << "Initialising an EnergyLoss object " << endl ; - - //If LiseColumn is set to 0 File type is expected to be from SRIM - if (LiseColumn == 0) - { - // Opening dE/dX file - + ifstream TableFile ; TableFile.open(Path.c_str()) ; - if ( !TableFile ) - { - cout << "Failed to open file " << Path << endl; - return; - } - - else - { + // Opening dE/dX file + if(!TableFile) cout << "ERROR: TABLE FILE NOT FOUND" << endl; + + if (Source == "G4Table") + { + cout << "Reading Energy Loss File: " << Path << endl ; + // Reading Data + double energy, total; + string dummy; + //skipped first line + getline(TableFile,dummy); + while ( TableFile >> energy) + { + fEnergy.push_back ( energy*MeV ) ; + TableFile >> total; + fdEdX_Total.push_back ( total*MeV/micrometer ) ; + } + + // Close File + TableFile.close(); + + } + + else if (Source == "SRIM") + { // Reading Data double energy, nuclear, electronic; string unit, dummy; @@ -104,49 +116,37 @@ EnergyLoss::EnergyLoss(string Path , int NumberOfSlice=100 , int LiseColumn=0 , // Close File TableFile.close(); - } - - } - - //Else File is expected to be from Lise, and LiseColumn gives which model to take - else - { - // Opening dE/dX file - - ifstream TableFile ; - TableFile.open(Path.c_str()) ; + } - if ( !TableFile ) - { - cout << "Failed to open file " << Path << endl; - return; - } - - else - { cout << "Reading Energy Loss File: " << Path << endl ; - // Reading Data - double energy=0, energyloss=0; - string dummy; - // skipping comment first line - getline(TableFile,dummy); - - while ( TableFile >> energy ) - { - for (int k = 0 ; k < 11 ; k++ ) - { - TableFile >> dummy ; - if (k+1==LiseColumn) energyloss = atof(dummy.c_str()) ; - } - fEnergy.push_back (energy*MeV) ; - fdEdX_Total.push_back(energyloss*MeV/micrometer); + else if(Source == "LISE") + { + cout << "Reading Energy Loss File: " << Path << endl ; + // Reading Data + double energy=0, energyloss=0; + string dummy; + // skipping comment first line + getline(TableFile,dummy); + + while ( TableFile >> energy ) + { + for (int k = 0 ; k < 11 ; k++ ) + { + TableFile >> dummy ; + if (k+1==LiseColumn) energyloss = atof(dummy.c_str()) ; } - - // Close File - TableFile.close(); - } - + fEnergy.push_back (energy*MeV) ; + fdEdX_Total.push_back(energyloss*MeV/micrometer); + } + + // Close File + TableFile.close(); + } + else + { + cout << "ERROR : Wrong Source Type" << endl ; } + fInter = new Interpolator( fEnergy , fdEdX_Total ) ; cout << "///////////////////////////////// " << endl ; } @@ -208,10 +208,8 @@ double EnergyLoss::EvaluateTotalLoss(double Energy) const return -1000; } - Interpolator* s = new Interpolator( fEnergy , fdEdX_Total ) ; - double val = s->Eval(Energy) ; - - delete s ; + double val = fInter->Eval(Energy) ; + return val ; } @@ -249,17 +247,17 @@ double EnergyLoss::Slow( double Energy , // Energy of the detected particle } delete s ; - return slow ; + return slow ; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -double EnergyLoss::EvaluateInitialEnergy( double Energy , // Energy of the detected particle - double TargetThickness , // Target Thickness at 0 degree - double Angle ) // Particle Angle - const +double EnergyLoss::EvaluateInitialEnergy( double Energy , // Energy of the detected particle + double TargetThickness , // Target Thickness at 0 degree + double Angle ) // Particle Angle + const { // Lise file are given in MeV/u - // For SRIM file fNumberOfMass = 1 whatever is the nucleus, file are given in MeV + // For SRIM and geant4 file fNumberOfMass = 1 whatever is the nucleus, file are given in MeV Energy = Energy / (double) fNumberOfMass ; if (Angle > halfpi) Angle = pi-Angle ; @@ -270,7 +268,7 @@ double EnergyLoss::EvaluateInitialEnergy( double Energy , // Energy of the de for (int i = 0; i < fNumberOfSlice ; i++) { double de = fInter->Eval(Energy) * SliceThickness ; - Energy += de/fNumberOfMass ; + Energy += de/fNumberOfMass ; } return (Energy*fNumberOfMass) ; diff --git a/NPLib/Tools/NPEnergyLoss.h b/NPLib/Tools/NPEnergyLoss.h index 10616258d3f930beb127ad52d6e1e5d5f0543d9f..080c3298a0ccd631bff74667bd76eda58f40b028 100644 --- a/NPLib/Tools/NPEnergyLoss.h +++ b/NPLib/Tools/NPEnergyLoss.h @@ -60,10 +60,11 @@ namespace NPL public : // Constructor EnergyLoss(); - EnergyLoss( string Path , // Path of dE/dX table file - int NumberOfSlice , // Low number = Faster, High Number = more accurate / typical: 100 to 1000 - int LiseColumns , // Indicate which model to read in a lise File, set to 0 (Default value) for a SRIM file - int NumberOfMass ); // Number of mass A of the nucleus (used only for Lise file) + EnergyLoss( string Path , // Path of dE/dX table file + string Source , // Type of file : Geant4,Lise,SRIM + int NumberOfSlice , // Low number = Faster, High Number = more accurate / typical: 100 to 1000 + int LiseColumns=0 , // Indicate which model to read in a lise File, set to 0 (Default value) for a SRIM file + int NumberOfMass=1 );// Number of mass A of the nucleus (used only for Lise file) ~EnergyLoss(); private : // dE/dX, slice parameter diff --git a/NPLib/Tools/NPReaction.cxx b/NPLib/Tools/NPReaction.cxx index 30c5360df7615ae5381ec5c6fc900926aa111f96..13121b3ec5736bede26ffdb8bb3803707e436e9b 100644 --- a/NPLib/Tools/NPReaction.cxx +++ b/NPLib/Tools/NPReaction.cxx @@ -27,7 +27,7 @@ * * *---------------------------------------------------------------------------* * Comment: * - * * + * Based on previous work by N.de Sereville * * * *****************************************************************************/ @@ -62,6 +62,7 @@ Reaction::Reaction() fThetaCM = 0; fExcitation = 0; fQValue = 0; + initializePrecomputeVariable(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -113,6 +114,7 @@ void Reaction::SetEveryThing(string name1, string name2, string name3, string na CrossSectionSize = CrossSectionBuffer.size(); CrossSection = new double[CrossSectionSize] ; for(int i = 0 ; i <CrossSectionSize ; i++ ) CrossSection[i] = CrossSectionBuffer[i]; + initializePrecomputeVariable(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -136,33 +138,6 @@ void Reaction::KineRelativistic(double &ThetaLab3, double &EnergieLab3, // 2-body relativistic kinematics: direct + inverse // EnergieLab3,4 : lab energy in MeV of the 2 ejectiles // ThetaLab3,4 : angles in rad - - double m1 = fNoy1->Mass(); - double m2 = fNoy2->Mass(); - double m3 = fNoy3->Mass(); - double m4 = fNoy4->Mass() + fExcitation; - - // center-of-mass velocity - double WtotLab = (fBeamEnergy + m1) + m2; - double P1 = sqrt(pow(fBeamEnergy,2) + 2*m1*fBeamEnergy); - double B = P1 / WtotLab; - double G = 1 / sqrt(1 - pow(B,2)); - - // total energy of the ejectiles in the center-of-mass - double W3cm = (pow(WtotLab,2) + pow(G,2)*(pow(m3,2) - pow(m4,2))) - / (2 * G * WtotLab); - double W4cm = (pow(WtotLab,2) + pow(G,2)*(pow(m4,2) - pow(m3,2))) - / (2 * G * WtotLab); - - // velocity of the ejectiles in the center-of-mass - double beta3cm = sqrt(1 - pow(m3,2)/pow(W3cm,2)); - double beta4cm = sqrt(1 - pow(m4,2)/pow(W4cm,2)); -// double gamma3cm = 1 / sqrt(1 - pow(beta3cm,2)); -// double gamma4cm = 1 / sqrt(1 - pow(beta4cm,2)); - - // Constants of the kinematics - double K3 = B / beta3cm; - double K4 = B / beta4cm; // case of inverse kinematics double theta = fThetaCM; @@ -184,6 +159,7 @@ void Reaction::KineRelativistic(double &ThetaLab3, double &EnergieLab3, cout << "Problem for energy conservation" << endl; EnergieLab3 = W3lab - m3; EnergieLab4 = W4lab - m4; + } @@ -193,11 +169,6 @@ double Reaction::ReconstructRelativistic(double EnergyLab, double ThetaLab) cons // EnergyLab in MeV // ThetaLab in rad - double m1 = fNoy1->Mass() ; - double m2 = fNoy2->Mass() ; - double m3 = fNoy3->Mass() ; - double m4 = fNoy4->Mass() ; - double P1 = sqrt(2*m1*fBeamEnergy+(fBeamEnergy*fBeamEnergy)) ; double P3 = sqrt(2*m3*EnergyLab+(EnergyLab*EnergyLab)) ; double P4 = sqrt(P1*P1+P3*P3-(2*P1*P3*cos(ThetaLab))) ; @@ -230,14 +201,10 @@ double Reaction::ReconstructRelativistic(double EnergyLab, double ThetaLab) cons //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //Return ThetaCM -double Reaction::EnergyLabToThetaCM( double EnergyLab , double ExcitationEnergy = -500) const +double Reaction::EnergyLabToThetaCM( double EnergyLab , double ExcitationEnergy ) const { if(ExcitationEnergy == -500) ExcitationEnergy = fExcitation; - - double m1 = fNoy1->Mass() ; - double m2 = fNoy2->Mass() ; - double m3 = fNoy3->Mass() ; - double m4 = (fNoy4->Mass()+ExcitationEnergy) ; + double E1 = (fBeamEnergy+m1) ; double E3 = (EnergyLab+m3) ; @@ -397,7 +364,34 @@ void Reaction::ReadConfigurationFile(string Path) } +void Reaction::initializePrecomputeVariable() + { + m1 = fNoy1->Mass(); + m2 = fNoy2->Mass(); + m3 = fNoy3->Mass(); + m4 = fNoy4->Mass() + fExcitation; + + // center-of-mass velocity + WtotLab = (fBeamEnergy + m1) + m2; + P1 = sqrt(pow(fBeamEnergy,2) + 2*m1*fBeamEnergy); + B = P1 / WtotLab; + G = 1 / sqrt(1 - pow(B,2)); + + // total energy of the ejectiles in the center-of-mass + W3cm = (pow(WtotLab,2) + pow(G,2)*(pow(m3,2) - pow(m4,2))) + / (2 * G * WtotLab); + W4cm = (pow(WtotLab,2) + pow(G,2)*(pow(m4,2) - pow(m3,2))) + / (2 * G * WtotLab); + + // velocity of the ejectiles in the center-of-mass + beta3cm = sqrt(1 - pow(m3,2)/pow(W3cm,2)); + beta4cm = sqrt(1 - pow(m4,2)/pow(W4cm,2)); + + // Constants of the kinematics + K3 = B / beta3cm; + K4 = B / beta4cm; + } diff --git a/NPLib/Tools/NPReaction.h b/NPLib/Tools/NPReaction.h index 3ab556da14523e1786fd56ccfe701af5d0af30a5..bb8f8932e62016176f8bd959bb94d29374da07af 100644 --- a/NPLib/Tools/NPReaction.h +++ b/NPLib/Tools/NPReaction.h @@ -63,26 +63,54 @@ namespace NPL double fThetaCM ; // Center-of-mass angle in radian double fExcitation ; // Excitation energy in MeV double* CrossSection ; // Differential CrossSection - int CrossSectionSize ; // Size of array containing Differention CrossSection + int CrossSectionSize ; // Size of array containing Differention CrossSection public: // Getters and Setters - void SetBeamEnergy (double efais) {fBeamEnergy = efais;} + void SetBeamEnergy (double efais) {fBeamEnergy = efais;initializePrecomputeVariable();} void SetThetaCM (double angle) {fThetaCM = angle;} - void SetExcitation (double exci) {fExcitation = exci;} - double GetBeamEnergy() const {return fBeamEnergy;} - double GetThetaCM() const {return fThetaCM;} - double GetExcitation() const {return fExcitation;} - double GetQValue() const {return fQValue;} - Nucleus* GetNucleus1() const {return fNoy1;} - Nucleus* GetNucleus2() const {return fNoy2;} - Nucleus* GetNucleus3() const {return fNoy3;} - Nucleus* GetNucleus4() const {return fNoy4;} - double* GetCrossSection() const {return CrossSection;} + void SetExcitation (double exci) {fExcitation = exci;initializePrecomputeVariable();} + double GetBeamEnergy() const {return fBeamEnergy;} + double GetThetaCM() const {return fThetaCM;} + double GetExcitation() const {return fExcitation;} + double GetQValue() const {return fQValue;} + Nucleus* GetNucleus1() const {return fNoy1;} + Nucleus* GetNucleus2() const {return fNoy2;} + Nucleus* GetNucleus3() const {return fNoy3;} + Nucleus* GetNucleus4() const {return fNoy4;} + double* GetCrossSection() const {return CrossSection;} int GetCrossSectionSize() const {return CrossSectionSize;} - // Kinematics // - + + + + private: // intern precompute variable + void initializePrecomputeVariable(); + double m1 ; + double m2 ; + double m3 ; + double m4 ; + + // center-of-mass velocity + double WtotLab ; + double P1 ; + double B ; + double G ; + + // total energy of the ejectiles in the center-of-mass + double W3cm ; + double W4cm ; + + // velocity of the ejectiles in the center-of-mass + double beta3cm ; + double beta4cm ; + + // Constants of the kinematics + double K3 ; + double K4 ; + + + public: // Kinematics // Compute ThetaLab and EnergyLab for product of reaction void KineRelativistic( double &ThetaLab3 , double &EnergieLab3 , @@ -94,7 +122,7 @@ namespace NPL double ThetaLab) const; // Return ThetaCM double EnergyLabToThetaCM( double EnergyLab , // Energy Measured in lab ref - double ExcitationEnergy ) // Excitation Energy previously calculated. If no argument given, fExcitation is used + double ExcitationEnergy = -500) // Excitation Energy previously calculated. If no argument given, fExcitation is used const; // Other // diff --git a/NPLib/VDetector/DetectorManager.cxx b/NPLib/VDetector/DetectorManager.cxx new file mode 100644 index 0000000000000000000000000000000000000000..398198c956ba99c9791339f38dd3d3291b79f9b0 --- /dev/null +++ b/NPLib/VDetector/DetectorManager.cxx @@ -0,0 +1,330 @@ +#include "DetectorManager.h" + +// STL +#include <iostream> +#include <fstream> +#include <cstdlib> + +// Detector +#include "../MUST2/TMust2Physics.h" +#include "../SSSD/TSSSDPhysics.h" +#include "../Plastic/TPlasticPhysics.h" +#include "../GASPARD/GaspardTracker.h" + + +///////////////////////////////////////////////////////////////////////////////////////////////// +// Default Constructor +DetectorManager::DetectorManager() +{ +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +// Default Desstructor +DetectorManager::~DetectorManager() +{ +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +// Read stream at ConfigFile and pick-up Token declaration of Detector +void DetectorManager::ReadConfigurationFile(string Path) +{ + ////////General Reading needs//////// + string LineBuffer; + string DataBuffer; + + /////////Boolean//////////////////// + bool MUST2 = false; + bool AddThinSi = false; + bool ScintillatorPlastic = false; + bool GeneralTarget = false; + bool GPDTracker = false; + + ////////////////////////////////////////////////////////////////////////////////////////// + string GlobalPath = getenv("NPTOOL"); + Path = GlobalPath + "/Inputs/DetectorConfiguration/" + Path; + ifstream ConfigFile; + ConfigFile.open(Path.c_str()); + + if (ConfigFile.is_open()) { + cout << "/////////////////////////////" << endl; + cout << " Configuration file " << Path << " loading " << endl; + } + else { + cout << " Error, no configuration file" << Path << " found" << endl; + return; + } + + + while (!ConfigFile.eof()) { + // Pick-up next line + getline(ConfigFile, LineBuffer); + //Search for comment Symbol: % + if (LineBuffer.compare(0, 1, "%") == 0) { /*Do Nothing*/ ;} + + //////////////////////////////////////////// + //////////// Search for Gaspard //////////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) { + GPDTracker = true ; + cout << "//////// Gaspard Tracker ////////" << endl; + + // Instantiate the new array as a VDetector Object + VDetector* myDetector = new GaspardTracker(); + + // Read Position of Telescope + ConfigFile.close(); + myDetector->ReadConfiguration(Path); + ConfigFile.open(Path.c_str()); + + // Add array to the VDetector Vector + AddDetector("GASPARD", myDetector); + } + + //////////////////////////////////////////// + //////// Search for MUST2 Array //////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) { + MUST2 = true; + cout << "//////// MUST2 Array ////////" << endl << endl; + + // Instantiate the new array as a VDetector Object + VDetector* myDetector = new TMust2Physics(); + + // Read Position of Telescope + ConfigFile.close(); + myDetector->ReadConfiguration(Path); + ConfigFile.open(Path.c_str()); + + // Add array to the VDetector Vector + AddDetector("MUST2", myDetector); + } + + //////////////////////////////////////////// + ////////// Search for ThinSi (SSSD)///////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) { + AddThinSi = true ; + cout << "//////// Thin Si ////////" << endl << endl; + + // Instantiate the new array as a VDetector Object + VDetector* myDetector = new TSSSDPhysics(); + + // Read Position of Telescope + ConfigFile.close(); + myDetector->ReadConfiguration(Path); + ConfigFile.open(Path.c_str()); + + // Add array to the VDetector Vector + AddDetector("SSSD", myDetector); + } + + //////////////////////////////////////////// + ///////////// Search for Plastic /////////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 19, "ScintillatorPlastic") == 0 && ScintillatorPlastic == false) { + ScintillatorPlastic = true; + cout << "//////// Plastic ////////" << endl << endl; + + // Instantiate the new array as a VDetector Object + VDetector* myDetector = new TPlasticPhysics(); + // Read Position of Telescope + ConfigFile.close(); + myDetector->ReadConfiguration(Path); + ConfigFile.open(Path.c_str()); + + // Add array to the VDetector Vector + AddDetector("Plastic", myDetector); + } + + //////////////////////////////////////////// + //////////// Search for Target ///////////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) { + GeneralTarget = true ; + cout << "////////// Target ///////////" << endl << endl; + + // jump one line + getline(ConfigFile, LineBuffer); + getline(ConfigFile, LineBuffer); + + bool check_Thickness = false; + bool check_Angle = false; + bool check_Radius = false; + bool check_Material = false; + bool check_X = false; + bool check_Y = false; + bool check_Z = false; + + bool ReadingStatusTarget = true; + while (ReadingStatusTarget) { + ConfigFile >> DataBuffer; + + // Search for comment Symbol % + if (DataBuffer.compare(0, 1, "%") == 0) {/*Do Nothing*/;} + + else if (DataBuffer.compare(0, 10, "THICKNESS=") == 0) { + check_Thickness = true ; + ConfigFile >> DataBuffer; +// m_TargetThickness = atof(DataBuffer.c_str()) * micrometer; + m_TargetThickness = atof(DataBuffer.c_str()); + cout << "Target Thickness: " << m_TargetThickness << endl; + } + + else if (DataBuffer.compare(0, 6, "ANGLE=") == 0) { + check_Angle = true ; + ConfigFile >> DataBuffer; +// m_TargetAngle = atof(DataBuffer.c_str()) * deg; + m_TargetAngle = atof(DataBuffer.c_str()); + cout << "Target Angle: " << m_TargetAngle << endl; + } + + else if (DataBuffer.compare(0, 7, "RADIUS=") == 0) { + check_Radius = true ; + ConfigFile >> DataBuffer; +// m_TargetRadius = atof(DataBuffer.c_str()) * mm; + m_TargetRadius = atof(DataBuffer.c_str()); + cout << "Target Radius: " << m_TargetRadius << endl; + } + + else if (DataBuffer.compare(0, 9, "MATERIAL=") == 0) { + check_Material = true ; + ConfigFile >> DataBuffer; + m_TargetMaterial = DataBuffer; + cout << "Target Material: " << m_TargetMaterial << endl; + } + + else if (DataBuffer.compare(0, 2, "X=") == 0) { + check_X = true ; + ConfigFile >> DataBuffer; +// m_TargetX = atoi(DataBuffer.c_str()) * mm; + m_TargetX = atoi(DataBuffer.c_str()); + cout << "Target Coordinates (mm): ( " << m_TargetX << " ; "; + } + + else if (DataBuffer.compare(0, 2, "Y=") == 0) { + check_Y = true ; + ConfigFile >> DataBuffer; +// m_TargetY = atoi(DataBuffer.c_str()) * mm; + m_TargetY = atoi(DataBuffer.c_str()); + cout << m_TargetY << " ; "; + } + + else if (DataBuffer.compare(0, 2, "Z=") == 0) { + check_Z = true ; + ConfigFile >> DataBuffer; +// m_TargetZ = atoi(DataBuffer.c_str()) * mm; + m_TargetZ = atoi(DataBuffer.c_str()); + cout << m_TargetZ << " )" << endl; + } + + /////////////////////////////////////////////////// + // If no Target Token and no comments, toggle out + else { + ReadingStatusTarget = false; + cout << "WARNING : Wrong Token Sequence: Getting out " << endl; + } + + /////////////////////////////////////////////////// + // If all Token found toggle out + if (check_Thickness && check_Radius && check_Material && check_X && check_Y && check_Z) + ReadingStatusTarget = false; + + } + } + + //Nothing understandable + //else ; + } + + ConfigFile.close(); + + InitializeRootInput(); + InitializeRootOutput(); + + return; +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +void DetectorManager::BuildPhysicalEvent() +{ + map<string,VDetector*>::iterator it; + + for (it = m_Detector.begin(); it != m_Detector.end(); ++it) { + it->second->BuildPhysicalEvent(); + } +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +void DetectorManager::BuildSimplePhysicalEvent() +{ + map<string,VDetector*>::iterator it; + + for (it = m_Detector.begin(); it != m_Detector.end(); ++it) { + it->second->BuildSimplePhysicalEvent(); + } +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +void DetectorManager::InitializeRootInput() +{ + map<string,VDetector*>::iterator it; + + for (it = m_Detector.begin(); it != m_Detector.end(); ++it) { + it->second->InitializeRootInput(); + } +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +void DetectorManager::InitializeRootOutput() +{ + map<string,VDetector*>::iterator it; + + for (it = m_Detector.begin(); it != m_Detector.end(); ++it) { + it->second->InitializeRootOutput(); + } +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +void DetectorManager::AddDetector(string DetectorName , VDetector* newDetector) +{ + m_Detector[DetectorName] = newDetector; +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +void DetectorManager::ClearEventPhysics() +{ + map<string,VDetector*>::iterator it; + + for (it = m_Detector.begin(); it != m_Detector.end(); ++it) { + it->second->ClearEventPhysics(); + } +} + + + +///////////////////////////////////////////////////////////////////////////////////////////////// +void DetectorManager::ClearEventData() +{ + map<string,VDetector*>::iterator it; + + for (it = m_Detector.begin(); it != m_Detector.end(); ++it) { + it->second->ClearEventData(); + } +} + diff --git a/NPLib/VDetector/DetectorManager.h b/NPLib/VDetector/DetectorManager.h new file mode 100644 index 0000000000000000000000000000000000000000..8f39b6d50c689eaa20858fa5e119ece0e4c59851 --- /dev/null +++ b/NPLib/VDetector/DetectorManager.h @@ -0,0 +1,62 @@ +#ifndef DetectorManager_h +#define DetectorManager_h + +// NPL +#include "VDetector.h" + +// STL +#include <string> +#include <map> + +using namespace std ; +using namespace NPA ; + +// This class manage a map of virtual detector +namespace NPA + { + class DetectorManager + { + public: + DetectorManager(); + ~DetectorManager(); + + public: + // Read stream at Path and pick-up Token declaration of Detector + void ReadConfigurationFile(string Path); + void BuildPhysicalEvent(); + void BuildSimplePhysicalEvent(); + void InitializeRootInput(); + void InitializeRootOutput(); + void AddDetector(string,VDetector*); + void ClearEventPhysics(); + void ClearEventData(); + + public: + // The map containning all detectors + // Using a Map one can access to any detector using its name + map<string,VDetector*> m_Detector; + + // Special treatment for the target for the moment + // If necessary we should change it to treat it as + // a full "detector" + private: + double m_TargetThickness; + double m_TargetAngle; + double m_TargetRadius; + string m_TargetMaterial; + double m_TargetX; + double m_TargetY; + double m_TargetZ; + + public: + double GetTargetThickness() {return m_TargetThickness;} + string GetTargetMaterial() {return m_TargetMaterial;} + double GetTargetRadius() {return m_TargetRadius;} + double GetTargetAngle() {return m_TargetAngle;} + double GetTargetX() {return m_TargetX;} + double GetTargetY() {return m_TargetY;} + double GetTargetZ() {return m_TargetZ;} + }; + } + +#endif diff --git a/NPLib/VDetector/Makefile b/NPLib/VDetector/Makefile index 9d3b706c81399fafc17c777d6036acb310fbb3d5..b70479c536a19cbe4e6c0071e8f64331f6a90367 100644 --- a/NPLib/VDetector/Makefile +++ b/NPLib/VDetector/Makefile @@ -268,18 +268,23 @@ GLIBS = $(ROOTGLIBS) $(SYSLIBS) INCLUDE = -I$(CLHEP_BASE_DIR)/include #------------------------------------------------------------------------------ -SHARELIB = libVDetector.so +SHARELIB = libVDetector.so libDetectorManager.so all: $(SHARELIB) #------------------------------------------------------------------------------ ############### Detector ############## -## MUST2 ## +## VDetector ## libVDetector.so: VDetector.o - $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ - + $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ + +## VDetector ## +libDetectorManager.so: DetectorManager.o + $(LD) $(SOFLAGS) $^ $(OutPutOpt) $@ + # dependances VDetector.o: VDetector.cxx VDetector.h +DetectorManager.o: DetectorManager.cxx DetectorManager.h ####################################### ############# Clean and More ########## diff --git a/NPLib/VDetector/VDetector.h b/NPLib/VDetector/VDetector.h index c10a4f39c77954e97c11474a8ed2fba0adefab11..c83f3b7d454a00a1088c00594e94a7fcb44a5ced 100644 --- a/NPLib/VDetector/VDetector.h +++ b/NPLib/VDetector/VDetector.h @@ -24,9 +24,8 @@ * See MUST2 array for exemple of VDetector derived class * * * *****************************************************************************/ -// STL header +// STL header #include <string> - using namespace std; namespace NPA @@ -38,12 +37,15 @@ namespace NPA // Default Constructor and destructor VDetector() ; - ~VDetector() ; - - + virtual ~VDetector() ; + // Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token virtual void ReadConfiguration(string) {} ; + + // Add Parameter to the CalibrationManger + virtual void AddParameterToCalibrationManager() {} ; + // XXX To be DUMPED XXX // Read stream at CalibFile and pick-up calibration parameter using Token // If argument is "Simulation" no change calibration is loaded virtual void ReadCalibrationFile(string) {} ; @@ -94,6 +96,7 @@ namespace NPA nothing noCalibration ; */ + }; } diff --git a/NPLib/liblist b/NPLib/liblist new file mode 100755 index 0000000000000000000000000000000000000000..d043d2961764c6803724c932167dddfc7c1f2d87 --- /dev/null +++ b/NPLib/liblist @@ -0,0 +1,8 @@ +echo -L$NPLIB/lib -lVDetector -lDetectorManager -lCalibrationManager -lIORoot -lReaction -lEnergyLoss \ + -lMust2Data -lMust2Physics \ + -lSSSDData -lSSSDPhysics \ + -lPlasticData -lPlasticPhysics \ + -lAnnularS1Data \ + -lGaspardData -lGaspardPhysics \ + -lDUMMYDetectorData \ + -lInitialConditions -lInteractionCoordinates diff --git a/NPSimulation/GNUmakefile b/NPSimulation/GNUmakefile index ef3b50375f8063460248194e4042809ab9385514..fb24e6a62bcdcd5af07c6b674298d5e14aad3d2d 100644 --- a/NPSimulation/GNUmakefile +++ b/NPSimulation/GNUmakefile @@ -1,6 +1,6 @@ # $Id: GNUmakefile,v 1.1 1999/01/07 16:05:40 gunter Exp $ # -------------------------------------------------------------- -# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98. +# GNUmakefile based on examples module by Gabriele Cosmo, 06/04/98. # -------------------------------------------------------------- name := Simulation @@ -11,17 +11,15 @@ ifndef G4INSTALL G4INSTALL = ../../.. endif -#G4 work directory is the path where -#Result of compilation is put +# G4 work directory is the path where +# Result of compilation is put in (./$G4WORKDIR/bin/$G4SYSTEM/) # to execute your programm : ./$G4WORKDIR/bin/$G4SYSTEM/Simulation xx.reaction xx.detector G4WORKDIR = ./ CPPFLAGS += $(shell root-config --cflags) CPPFLAGS += -I$(NPLIB)/include -EXTRALIBS = $(shell root-config --glibs) -EXTRALIBS += -L$(NPLIB)/lib -lMust2Data -lAnnularS1Data -lGaspardData -lPlasticData\ - -lInitialConditions -lInteractionCoordinates \ - -lReaction -lIORoot +EXTRALIBS = $(shell root-config --glibs) -lMathMore +EXTRALIBS += `$(NPLIB)/liblist` .PHONY: all all: lib bin diff --git a/NPSimulation/include/AnnularS1.hh b/NPSimulation/include/AnnularS1.hh index 246b773084913b2e31172291911cebe54dcf82dd..2f5ffb7dd9fa31ac91cd13e32770daa10e164328 100644 --- a/NPSimulation/include/AnnularS1.hh +++ b/NPSimulation/include/AnnularS1.hh @@ -9,13 +9,14 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 21/07/09 * - * Last update : * + * Last update : 11/10/09 * *---------------------------------------------------------------------------* * Decription: Define the S1 detector from Micron * * * *---------------------------------------------------------------------------* * Comment: * - * * + * + 11/10/09: Change scorer philosophy, one scorer for the detector number * + * added (N. de Sereville) * * * *****************************************************************************/ @@ -49,15 +50,13 @@ public: //////////////////////////////////////////////////// public: // By Position Method - void AddModule(G4double PosZ, - G4double Rmin, - G4double Rmax); + void AddModule(G4double PosZ); // Effectively construct Volume // Avoid to have two time same code for Angle and Point definition - void VolumeMaker(G4int TelescopeNumber , - G4ThreeVector MMpos , - G4RotationMatrix* MMrot , + void VolumeMaker(G4int DetecNumber, + G4ThreeVector pos, + G4RotationMatrix* rot, G4LogicalVolume* world); @@ -77,6 +76,9 @@ public: // Called After DetecorConstruction::AddDetector Method void InitializeRootOutput(); + // Initialize all scorers necessary for the detector + void InitializeScorers(); + // Read sensitive part and fill the Root tree. // Called at in the EventAction::EndOfEventAvtion void ReadSensitive(const G4Event* event); @@ -88,21 +90,18 @@ public: private: TS1Data* m_Event; + +private: + // Scorer + G4MultiFunctionalDetector* m_Scorer; + + //////////////////////////////////////////////////// ///////////////Private intern Data////////////////// //////////////////////////////////////////////////// private: // Used for "By Point Definition" vector<G4double> m_PosZ; - vector<G4double> m_Rmin; - vector<G4double> m_Rmax; - - // for debugging purpose - G4ThreeVector MMpos; - G4ThreeVector MMu; - G4ThreeVector MMv; - G4ThreeVector MMw; - G4ThreeVector CT; // Set to true if you want to see Telescope Frame in your visualisation bool m_non_sensitive_part_visiualisation; diff --git a/NPSimulation/include/AnnularS1Scorers.hh b/NPSimulation/include/AnnularS1Scorers.hh index 63e1c7ee6168445048487fe0f00476f088b9480f..c38cdb2fd0ec21eb90bdc58162b3a78b8748bedf 100644 --- a/NPSimulation/include/AnnularS1Scorers.hh +++ b/NPSimulation/include/AnnularS1Scorers.hh @@ -26,59 +26,10 @@ #include "G4THitsMap.hh" -class AnnularS1ScorerEnergy : public G4VPrimitiveScorer -{ - -public: // with description - AnnularS1ScorerEnergy(G4String name, G4int depth = 0); - virtual ~AnnularS1ScorerEnergy(); - -protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - -public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - -private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; -}; - - - -class AnnularS1ScorerTime : public G4VPrimitiveScorer -{ - -public: // with description - AnnularS1ScorerTime(G4String name, G4int depth = 0); - virtual ~AnnularS1ScorerTime(); - -protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - -public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - -private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; -}; - - - class AnnularS1ScorerThetaStripNumber : public G4VPrimitiveScorer { - public: // with description - AnnularS1ScorerThetaStripNumber(G4String name, G4int depth = 0, G4double StripPlaneSize = 98, G4int NumberOfStrip = 128); + AnnularS1ScorerThetaStripNumber(G4String name, G4int depth = 0); virtual ~AnnularS1ScorerThetaStripNumber(); protected: // with description @@ -102,9 +53,8 @@ private: class AnnularS1ScorerPhiStripNumber : public G4VPrimitiveScorer { - public: // with description - AnnularS1ScorerPhiStripNumber(G4String name, G4int depth = 0, G4double StripPlaneSize = 98, G4int NumberOfStrip = 128); + AnnularS1ScorerPhiStripNumber(G4String name, G4int depth = 0); virtual ~AnnularS1ScorerPhiStripNumber(); protected: // with description diff --git a/NPSimulation/include/DetectorConstruction.hh b/NPSimulation/include/DetectorConstruction.hh index 6fb3c6ef427101a1fddf8dcefcb38dcf6817570b..8a65ee3abfe055a6a3f392dbd1ef0de6398a9219 100644 --- a/NPSimulation/include/DetectorConstruction.hh +++ b/NPSimulation/include/DetectorConstruction.hh @@ -15,9 +15,9 @@ *---------------------------------------------------------------------------* * Decription: * * This Class manage the virtual detector and call their method. * - * Every time a new detector is added to the project, a few line in the * - * ReadConfigurationFile method are needed in order to detect the associate * - * token. * + * Every time a new detector is added to the project, a few line in the * + * ReadConfigurationFile method are needed in order to detect the associate * + * token. * *---------------------------------------------------------------------------* * Comment: * * * @@ -26,63 +26,53 @@ class G4LogicalVolume; class G4VPhysicalVolume; +// C++ headers +#include <vector> +#include <cmath> + +// G4 headers #include "G4VUserDetectorConstruction.hh" +#include "G4Event.hh" + +// NPTool headers #include "VDetector.hh" +#include "Target.hh" + +// ROOT headers #include "TTree.h" -#include "G4Event.hh" -#include <vector> class DetectorConstruction : public G4VUserDetectorConstruction { public: - DetectorConstruction(); virtual ~DetectorConstruction(); G4VPhysicalVolume* Construct(); G4LogicalVolume* GetWorldLogic(); -public: +public: void ReadConfigurationFile(string); void AddDetector(VDetector*); void ReadAllSensitive(const G4Event*); -private: +private: // Logical volumes - G4LogicalVolume* world_log ; + G4LogicalVolume* world_log; // Physical volumes - G4VPhysicalVolume* world_phys ; + G4VPhysicalVolume* world_phys; // Virtual Detector Vector - vector<VDetector*> m_Detectors ; + vector<VDetector*> m_Detectors; private: // Data about the target - G4double m_TargetThickness ; - G4double m_TargetRadius ; - G4double m_TargetX ; - G4double m_TargetY ; - G4double m_TargetZ ; + Target* m_Target; public: // Getter and Setter - G4double GetTargetThickness() { - return m_TargetThickness ; - } - G4double GetTargetRadius() { - return m_TargetRadius ; - } - G4double GetTargetX() { - return m_TargetX ; - } - G4double GetTargetY() { - return m_TargetY ; - } - G4double GetTargetZ() { - return m_TargetZ ; - } + Target* GetTarget() {return m_Target;} }; #endif diff --git a/NPSimulation/include/DummyDetector.hh b/NPSimulation/include/DummyDetector.hh new file mode 100755 index 0000000000000000000000000000000000000000..700cec3a1a6302d36d641aa99178eb9d128f8f49 --- /dev/null +++ b/NPSimulation/include/DummyDetector.hh @@ -0,0 +1,128 @@ +#ifndef DUMMYDetector_h +#define DUMMYDetector_h 1 +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : October 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class describe a simple Dummy Detector : * + * a simple cylinder of predifined material. user can choose to place it * + * where he want using spherical coordinate and choose between two naterial * + * * + * * + *---------------------------------------------------------------------------* + * Comment: * + * This detector respect all the NPTool convention in naming volume, * + * reading scorers and file. Use it as a basis for your own detector * + *****************************************************************************/ +// C++ header +#include <string> +#include <vector> + +// G4 header defining G4 types +#include "globals.hh" + +// G4 headers +#include "G4ThreeVector.hh" +#include "G4RotationMatrix.hh" +#include "G4LogicalVolume.hh" +#include "G4SDManager.hh" +#include "G4MultiFunctionalDetector.hh" + +// NPTool header +#include "VDetector.hh" +#include "TDUMMYDetectorData.h" + +using namespace std; + +class DUMMYDetector : public VDetector +{ + //////////////////////////////////////////////////// + /////// Default Constructor and Destructor ///////// + //////////////////////////////////////////////////// +public: + DUMMYDetector() ; + virtual ~DUMMYDetector() ; + + //////////////////////////////////////////////////// + //////// Specific Function of this Class /////////// + //////////////////////////////////////////////////// +public: + // By Angle Method + void AddDUMMYDetector( G4double R , + G4double Theta , + G4double Phi , + G4double DUMMYDetectorThickness , + G4double DUMMYDetectorRadius , + G4String Scintillator ); + + void VolumeMaker(G4ThreeVector Det_pos, int DetNumber,G4LogicalVolume* world) ; + //////////////////////////////////////////////////// + ///////// Inherite from VDetector class /////////// + //////////////////////////////////////////////////// +public: + // Read stream at Configfile to pick-up parameters of detector (Position,...) + // Called in DetecorConstruction::ReadDetextorConfiguration Method + void ReadConfiguration(string Path) ; + + // Construct detector and inialise sensitive part. + // Called After DetecorConstruction::AddDetector Method + void ConstructDetector(G4LogicalVolume* world) ; + + // Add Detector branch to the EventTree. + // Called After DetecorConstruction::AddDetector Method + void InitializeRootOutput() ; + + // Read sensitive part and fill the Root tree. + // Called at in the EventAction::EndOfEventAvtion + void ReadSensitive(const G4Event* event) ; + +public: // Material + void InitializeMaterial() ; + // The dummy materials + G4Material* m_MaterialDUMMYDetector_material1 ; //the dummy material 2 + G4Material* m_MaterialDUMMYDetector_material2 ; //the dummy material 2 + + +public: // Scorer + // Initialize all Scorer used by the MUST2Array + void InitializeScorers() ; + + // Silicon Associate Scorer + G4MultiFunctionalDetector* m_DUMMYDetectorScorer ; + + + //////////////////////////////////////////////////// + ///////////Event class to store Data//////////////// + //////////////////////////////////////////////////// +private: + TDUMMYDetectorData* m_Event ; + + //////////////////////////////////////////////////// + ///////////////Private intern Data////////////////// + //////////////////////////////////////////////////// +private: + + vector<double> m_DUMMYDetectorThickness ; + vector<double> m_DUMMYDetectorRadius ; + + // Used for "By Angle Definition" + vector<G4double> m_R ; // | + vector<G4double> m_Theta ; // > Spherical coordinate DUMMYDetector volume center + vector<G4double> m_Phi ; // | + + // Scintillator type + vector<G4String> m_Scintillator ; + + +}; +#endif diff --git a/NPSimulation/include/EventGeneratorBeam.hh b/NPSimulation/include/EventGeneratorBeam.hh index 0576110dfa2dcecf8de5e96a686ee6afac5215ce..ed5de49b6ff184d4ec702a3442c7bda4e0d9fe09 100644 --- a/NPSimulation/include/EventGeneratorBeam.hh +++ b/NPSimulation/include/EventGeneratorBeam.hh @@ -32,50 +32,39 @@ // NPTool header #include "VEventGenerator.hh" #include "TInitialConditions.h" +#include "Target.hh" using namespace std ; - - class EventGeneratorBeam : public VEventGenerator { - public: // Constructor and destructor - EventGeneratorBeam() ; - virtual ~EventGeneratorBeam() ; +public: // Constructor and destructor + EventGeneratorBeam(); + virtual ~EventGeneratorBeam(); + + +public: // Inherit from VEventGenerator Class + void ReadConfiguration(string); + void GenerateEvent(G4Event*, G4ParticleGun*); + void InitializeRootOutput(); + + void SetTarget(Target* Target) ; + + +private: // TTree to store initial value of beam and reaction + TInitialConditions* m_InitConditions; - public: // Inherit from VEventGenerator Class - void ReadConfiguration(string) ; - void GenerateEvent(G4Event*, G4ParticleGun*) ; - void InitializeRootOutput() ; - void SetTargetThickness(double TargetThickness) { - m_TargetThickness = TargetThickness ; - } - void SetTargetRadius(double TargetRadius) { - m_TargetRadius = TargetRadius ; - } - void SetTargetCoordinate(G4double X, G4double Y, G4double Z) { - m_TargetX = X ; - m_TargetY = Y ; - m_TargetZ = Z ; - } - - private: // TTree to store initial value of beam and reaction - TInitialConditions* m_InitConditions; - private: // Source parameter - G4ParticleDefinition* m_particle ; // Kind of particle to shoot - G4double m_BeamEnergy ; - G4double m_BeamEnergySpread ; - G4double m_SigmaX ; - G4double m_SigmaY ; - G4double m_SigmaThetaX ; - G4double m_SigmaPhiY ; +private: // Source parameter + G4ParticleDefinition* m_particle; // Kind of particle to shoot + G4double m_BeamEnergy; + G4double m_BeamEnergySpread; + G4double m_SigmaX; + G4double m_SigmaY; + G4double m_SigmaThetaX; + G4double m_SigmaPhiY; - private: // Target Value - G4double m_TargetThickness ; - G4double m_TargetRadius ; - G4double m_TargetX ; - G4double m_TargetY ; - G4double m_TargetZ ; +private: // Target Value + Target* m_Target; }; #endif diff --git a/NPSimulation/include/EventGeneratorTransfert.hh b/NPSimulation/include/EventGeneratorTransfert.hh index 09c3229bcd19f77956f9380ee79a085559c3d73d..8c570880d17397018574fe2784c2d97d24adc9a5 100644 --- a/NPSimulation/include/EventGeneratorTransfert.hh +++ b/NPSimulation/include/EventGeneratorTransfert.hh @@ -28,6 +28,7 @@ // NPSimulation #include "VEventGenerator.hh" +#include "Target.hh" // NPLib #include "TInitialConditions.h" @@ -40,93 +41,81 @@ using namespace NPL ; class EventGeneratorTransfert : public VEventGenerator - { - - public: // Constructors and Destructors - // Default constructor used to allocate memory - EventGeneratorTransfert(); - - // This is the constructor to be used - EventGeneratorTransfert(string name1 , // Beam nuclei - string name2 , // Target nuclei - string name3 , // Product of reaction - string name4 , // Product of reaction - double BeamEnergy , // Beam Energy - double ExcitationEnergy , // Excitation of Heavy Nuclei - double BeamEnergySpread , - double SigmaX , - double SigmaY , - double SigmaThetaX , - double SigmaPhiY , - bool ShootLight , - bool ShootHeavy , - string Path); // Path of the differentiel Cross Section - - // Default Destructor - virtual ~EventGeneratorTransfert(); - - - public: // Inherit from VEventGenerator class - void ReadConfiguration(string) ; - void GenerateEvent(G4Event*, G4ParticleGun*) ; - - void SetTargetCoordinate(G4double X, G4double Y, G4double Z) { - m_TargetX = X; - m_TargetY = Y; - m_TargetZ = Z; - } - - void SetTargetThickness(double TargetThickness) { - m_TargetThickness = TargetThickness ; - } - - void SetTargetRadius(double TargetRadius) { - m_TargetRadius = TargetRadius ; - } - - private: // Particle Shoot Option - bool m_ShootLight ; - bool m_ShootHeavy ; - - private: // TTree to store initial value of beam and reaction - TInitialConditions* m_InitConditions; - - private: // Beam Parameter - double m_BeamEnergy ; - double m_BeamEnergySpread ; - double m_SigmaX ; - double m_SigmaY ; - double m_SigmaThetaX ; - double m_SigmaPhiY ; - - private: // Target Parameter - double m_TargetThickness ; - double m_TargetRadius ; - double m_TargetX ; - double m_TargetY ; - double m_TargetZ ; - - private: // Reaction and CrossSection Shoot - Reaction* m_Reaction ; - - //Other - void Print() const ; - void InitializeRootOutput(); - - void SetEverything(string name1 , // Beam nuclei - string name2 , // Target nuclei - string name3 , // Product of reaction - string name4 , // Product of reaction - double BeamEnergy , // Beam Energy - double ExcitationEnergy , // Excitation of Heavy Nuclei - double BeamEnergySpread , - double SigmaX , - double SigmaY , - double SigmaThetaX , - double SigmaPhiY , - bool ShootLight , - bool ShootHeavy , - string Path); // Path of the differentiel Cross Section +{ +public: // Constructors and Destructors + // Default constructor used to allocate memory + EventGeneratorTransfert(); + + // This is the constructor to be used + EventGeneratorTransfert(string name1 , // Beam nuclei + string name2 , // Target nuclei + string name3 , // Product of reaction + string name4 , // Product of reaction + double BeamEnergy , // Beam Energy + double ExcitationEnergy , // Excitation of Heavy Nuclei + double BeamEnergySpread , + double SigmaX , + double SigmaY , + double SigmaThetaX , + double SigmaPhiY , + bool ShootLight , + bool ShootHeavy , + string Path); // Path of the differentiel Cross Section + + // Default Destructor + virtual ~EventGeneratorTransfert(); + + +public: // Inherit from VEventGenerator class + void ReadConfiguration(string); + void GenerateEvent(G4Event*, G4ParticleGun*); + void SetTarget(Target* Target) ; + + +private: // Particle Shoot Option + bool m_ShootLight; + bool m_ShootHeavy; + + +private: // Target Parameter + Target* m_Target; + + +private: // Reaction and CrossSection Shoot + Reaction* m_Reaction; + + +private: // Beam Parameters + double m_BeamEnergy; + double m_BeamEnergySpread; + double m_SigmaX; + double m_SigmaY; + double m_SigmaThetaX; + double m_SigmaPhiY; + + +private: // TTree to store initial value of beam and reaction + TInitialConditions* m_InitConditions; + + + // Other methods + void Print() const; + void InitializeRootOutput(); + + void SetEverything(string name1 , // Beam nuclei + string name2 , // Target nuclei + string name3 , // Product of reaction + string name4 , // Product of reaction + double BeamEnergy , // Beam Energy + double ExcitationEnergy , // Excitation of Heavy Nuclei + double BeamEnergySpread , + double SigmaX , + double SigmaY , + double SigmaThetaX , + double SigmaPhiY , + bool ShootLight , + bool ShootHeavy , + string Path); // Path of the differentiel Cross Section }; #endif diff --git a/NPSimulation/include/EventGeneratorTransfertToResonance.hh b/NPSimulation/include/EventGeneratorTransfertToResonance.hh index 51d85928d08111b82ffe676a71627b174f210a7d..2a5f1c30f8c822ffae01140825a6fbd6c346b0fe 100644 --- a/NPSimulation/include/EventGeneratorTransfertToResonance.hh +++ b/NPSimulation/include/EventGeneratorTransfertToResonance.hh @@ -16,11 +16,11 @@ * Decription: * * This event Generator is used to simulated two body TransfertReaction. * * A Phase Space calculation is then performed to decay the Heavy product. * - * The TGenPhaseSpace from ROOT is used to calculate a phase space decay * - * with flat distribution * + * The TGenPhaseSpace from ROOT is used to calculate a phase space decay * + * with flat distribution * *---------------------------------------------------------------------------* * Comment: * - * * + * * * * *****************************************************************************/ // C++ header @@ -28,6 +28,7 @@ // NPSimulation #include "VEventGenerator.hh" +#include "Target.hh" // NPLib #include "TInitialConditions.h" @@ -73,20 +74,7 @@ class EventGeneratorTransfertToResonance : public VEventGenerator public: // Inherit from VEventGenerator class void ReadConfiguration(string) ; void GenerateEvent(G4Event*, G4ParticleGun*) ; - - void SetTargetCoordinate(G4double X, G4double Y, G4double Z) { - m_TargetX = X; - m_TargetY = Y; - m_TargetZ = Z; - } - - void SetTargetThickness(double TargetThickness) { - m_TargetThickness = TargetThickness ; - } - - void SetTargetRadius(double TargetRadius) { - m_TargetRadius = TargetRadius ; - } + void SetTarget(Target* Target); private: // Particle Shoot Option bool m_ShootLight ; @@ -105,11 +93,7 @@ class EventGeneratorTransfertToResonance : public VEventGenerator double m_SigmaPhiY ; private: // Target Parameter - double m_TargetThickness ; - double m_TargetRadius ; - double m_TargetX ; - double m_TargetY ; - double m_TargetZ ; + Target* m_Target; private: // Reaction Reaction* m_Reaction ; @@ -132,10 +116,6 @@ class EventGeneratorTransfertToResonance : public VEventGenerator G4Event* anEvent , G4ParticleGun* particleGun); - // This method return a random Vector of dimension N and magnitude R - // The return distribution populate uniformely the surface of the N-Sphere of radius R - vector<double> PhaseSpaceUniformGenerator( int N , double R); - void SetEverything(string name1 , //Beam nuclei string name2 , //Target nuclei string name3 , //Product of reaction diff --git a/NPSimulation/include/GaspardScorers.hh b/NPSimulation/include/GaspardScorers.hh index 28ddab1aca3d413237af5a58e331c06959496054..e009528060643ba63a34595355439f353ea93703 100644 --- a/NPSimulation/include/GaspardScorers.hh +++ b/NPSimulation/include/GaspardScorers.hh @@ -31,7 +31,7 @@ namespace GPDSCORERS class GPDScorerFirstStageEnergy : public G4VPrimitiveScorer { public: // with description - GPDScorerFirstStageEnergy(G4String name, G4int depth = 0); + GPDScorerFirstStageEnergy(G4String name, G4String volumeName, G4int depth = 0); virtual ~GPDScorerFirstStageEnergy(); protected: // with description @@ -45,6 +45,7 @@ public: virtual void PrintAll(); private: + G4String m_VolumeName; G4int HCID; G4THitsMap<G4double>* EvtMap; }; @@ -54,7 +55,7 @@ private: class GPDScorerSecondStageEnergy : public G4VPrimitiveScorer { public: // with description - GPDScorerSecondStageEnergy(G4String name, G4int depth = 0); + GPDScorerSecondStageEnergy(G4String name, G4String volumeName, G4int depth = 0); virtual ~GPDScorerSecondStageEnergy(); protected: // with description @@ -68,6 +69,7 @@ public: virtual void PrintAll(); private: + G4String m_VolumeName; G4int HCID; G4THitsMap<G4double>* EvtMap; }; @@ -77,7 +79,7 @@ private: class GPDScorerThirdStageEnergy : public G4VPrimitiveScorer { public: // with description - GPDScorerThirdStageEnergy(G4String name, G4int depth = 0); + GPDScorerThirdStageEnergy(G4String name, G4String volumeName, G4int depth = 0); virtual ~GPDScorerThirdStageEnergy(); protected: // with description @@ -91,35 +93,13 @@ public: virtual void PrintAll(); private: + G4String m_VolumeName; G4int HCID; G4THitsMap<G4double>* EvtMap; }; -class GPDScorerDetectorNumber : public G4VPrimitiveScorer -{ -public: // with description - GPDScorerDetectorNumber(G4String name, G4int depth = 0 , G4String VolumeName = "xxx"); - virtual ~GPDScorerDetectorNumber(); - -protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - -public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void Clear(); - virtual void DrawAll(); - virtual void PrintAll(); - -private: - G4int HCID; - G4THitsMap<G4int>* EvtMap; - G4String m_VolumeName ; -}; - - class GPDScorerFirstStageFrontStripDummyShape : public G4VPrimitiveScorer { diff --git a/NPSimulation/include/GaspardTrackerAnnular.hh b/NPSimulation/include/GaspardTrackerAnnular.hh index a43a7bf45b0ebc331931a509f5d5449b8b31a833..0437e4bad965c6ca04d1738e511046f5594fa643 100644 --- a/NPSimulation/include/GaspardTrackerAnnular.hh +++ b/NPSimulation/include/GaspardTrackerAnnular.hh @@ -31,7 +31,6 @@ using namespace std; -#define INDEX 200 class GaspardTrackerAnnular : public GaspardTrackerModule diff --git a/NPSimulation/include/GaspardTrackerDummyShape.hh b/NPSimulation/include/GaspardTrackerDummyShape.hh index d567d9c1e65e66762dacc876069b1c2de6c16f0b..79e282b2e75fa9c6a430b08a2045ea043dacf4a8 100644 --- a/NPSimulation/include/GaspardTrackerDummyShape.hh +++ b/NPSimulation/include/GaspardTrackerDummyShape.hh @@ -33,7 +33,6 @@ using namespace std; -#define INDEX 1000 class GaspardTrackerDummyShape : public GaspardTrackerModule @@ -142,30 +141,28 @@ private: namespace GPDDUMMYSHAPE { // Resolution -// const G4double ResoFirstStage = 0 ;// = 52keV of Resolution // Unit is MeV/2.35 - const G4double ResoFirstStage = 0.022 ;// = 52keV of Resolution // Unit is MeV/2.35 - const G4double ResoSecondStage = 0 ;// = 130 keV of resolution // Unit is MeV/2.35 -// const G4double ResoSecondStage = 0.055 ;// = 130 keV of resolution // Unit is MeV/2.35 - const G4double ResoThirdStage = 0 ;// = 100 keV of resolution // Unit is MeV/2.35 -// const G4double ResoThirdStage = 0.043 ;// = 100 kev of resolution // Unit is MeV/2.35 - const G4double ResoTimeGpd = 0.212765957 ;// = 500ps // Unit is ns/2.35 +// const G4double ResoFirstStage = 0; // = 50 keV of Resolution // Unit is MeV/2.35 + const G4double ResoFirstStage = 0.0213; // = 50 keV of Resolution // Unit is MeV/2.35 + const G4double ResoSecondStage = 0.0213; // = 50 keV of resolution // Unit is MeV/2.35 + const G4double ResoThirdStage = 0.0213; // = 50 keV of resolution // Unit is MeV/2.35 + const G4double ResoTimeGpd = 0.212765957;// = 500ps // Unit is ns/2.35 // Geometry for the mother volume containing the different layers of your dummy shape module const G4double FaceFront = 5.1*cm; const G4double FaceBack = 5.1*cm; -// const G4double Length = 1.5*cm; -// const G4double InterStageDistance = 5*mm; + const G4double Length = 1.5*cm; + const G4double InterStageDistance = 5*mm; // for testing the excitation energy reconstruction - const G4double Length = 4*cm; - const G4double InterStageDistance = 15*mm; +// const G4double Length = 4*cm; +// const G4double InterStageDistance = 15*mm; // First stage const G4double FirstStageFace = 5.0*cm; -// const G4double FirstStageThickness = 300*micrometer ; + const G4double FirstStageThickness = 300*micrometer; +// const G4double FirstStageThickness = 2*mm; // for testing the excitation energy reconstruction - const G4double FirstStageThickness = 1.3*cm; -// const G4int NumberOfStrips = 128; - const G4int NumberOfStrips = 20; +// const G4double FirstStageThickness = 1.3*cm; + const G4int NumberOfStrips = 25; // 2mm strip pitch // Second stage const G4double SecondStageFace = FirstStageFace; diff --git a/NPSimulation/include/GaspardTrackerModule.hh b/NPSimulation/include/GaspardTrackerModule.hh index 92ee9483fbecec4a5c07e21eab4874bb07d636c1..0281068851aaeece058d182987dbb7edebf66a97 100644 --- a/NPSimulation/include/GaspardTrackerModule.hh +++ b/NPSimulation/include/GaspardTrackerModule.hh @@ -24,6 +24,7 @@ // C++ headers #include <string> +#include <vector> // G4 headers #include "G4LogicalVolume.hh" @@ -66,6 +67,9 @@ public: virtual void SetInterCoordPointer(TInteractionCoordinates* interCoord) = 0; virtual TInteractionCoordinates* GetInterCoordPointer() = 0; + // Initialize the Index map for the different modules of Gaspard + void InitializeIndex(); + public: TGaspardTrackerData* GetEventPointer() {return ms_Event;}; @@ -90,6 +94,9 @@ protected: // Third stage Associate Scorer G4MultiFunctionalDetector* m_ThirdStageScorer; + +protected: + map<string, int> m_index; }; #endif diff --git a/NPSimulation/include/GaspardTrackerSquare.hh b/NPSimulation/include/GaspardTrackerSquare.hh index 841a605c9aeaddbe94ba5a8a49e9fcc27f7c1c28..180b0d1b125923308a2a618e0db785290f8ca763 100644 --- a/NPSimulation/include/GaspardTrackerSquare.hh +++ b/NPSimulation/include/GaspardTrackerSquare.hh @@ -31,7 +31,6 @@ using namespace std; -#define INDEX 0 class GaspardTrackerSquare : public GaspardTrackerModule diff --git a/NPSimulation/include/GaspardTrackerTrapezoid.hh b/NPSimulation/include/GaspardTrackerTrapezoid.hh index 2b86902e39d58c4166cdee2a3f0579fecd79b82d..c7224df3b91d120b7e23ea7bfbcb0c737b080bff 100644 --- a/NPSimulation/include/GaspardTrackerTrapezoid.hh +++ b/NPSimulation/include/GaspardTrackerTrapezoid.hh @@ -31,7 +31,6 @@ using namespace std; -#define INDEX 100 class GaspardTrackerTrapezoid : public GaspardTrackerModule diff --git a/NPSimulation/include/GeneralScorers.hh b/NPSimulation/include/GeneralScorers.hh index 1591fbab1b1e76036b5dc39acbb7d2b20c1ddc40..70dcc65e51c9bfd69172aa7eb0e40f22a49492f0 100644 --- a/NPSimulation/include/GeneralScorers.hh +++ b/NPSimulation/include/GeneralScorers.hh @@ -27,183 +27,217 @@ #include "G4VPrimitiveScorer.hh" #include "G4THitsMap.hh" -class PSEnergy : public G4VPrimitiveScorer +namespace GENERALSCORERS { + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + // This Threshold is used in the above scorer. Any energy deposit under this threshold will not create an entry. + const double TriggerThreshold = 100*keV ; + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + // The following function is used in many scorer. following the Detector Volume Nomenclature + // DetectorNameX_SubPart_SubPart + // where X stand for the detector number. + + int PickUpDetectorNumber(G4Step* aStep, std::string DetName); + + + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSDetectorNumber : public G4VPrimitiveScorer + { + + public: // with description + PSDetectorNumber(G4String name, G4String VolumeName = "xxx", G4int depth = 0 ); + virtual ~PSDetectorNumber(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4int>* EvtMap; + + }; + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSEnergy : public G4VPrimitiveScorer + { + + public: // with description + PSEnergy(G4String name, G4String VolumeName, G4int depth); + virtual ~PSEnergy(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSTOF : public G4VPrimitiveScorer + { + + public: // with description + PSTOF(G4String name, G4String VolumeName, G4int depth); + virtual ~PSTOF(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSInteractionCoordinatesX : public G4VPrimitiveScorer + { + public: // with description + PSInteractionCoordinatesX(G4String name, G4String VolumeName, G4int depth); + virtual ~PSInteractionCoordinatesX(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSInteractionCoordinatesY : public G4VPrimitiveScorer + { + public: // with description + PSInteractionCoordinatesY(G4String name, G4String VolumeName, G4int depth); + virtual ~PSInteractionCoordinatesY(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSInteractionCoordinatesZ : public G4VPrimitiveScorer + { + public: // with description + PSInteractionCoordinatesZ(G4String name, G4String VolumeName, G4int depth); + virtual ~PSInteractionCoordinatesZ(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSInteractionCoordinatesAngleTheta : public G4VPrimitiveScorer + { + public: // with description + PSInteractionCoordinatesAngleTheta(G4String name, G4String VolumeName, G4int depth); + virtual ~PSInteractionCoordinatesAngleTheta(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + class PSInteractionCoordinatesAnglePhi : public G4VPrimitiveScorer + { + public: // with description + PSInteractionCoordinatesAnglePhi(G4String name, G4String VolumeName, G4int depth); + virtual ~PSInteractionCoordinatesAnglePhi(); + + protected: // with description + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + + public: + virtual void Initialize(G4HCofThisEvent*); + virtual void EndOfEvent(G4HCofThisEvent*); + virtual void clear(); + virtual void DrawAll(); + virtual void PrintAll(); + + private: + G4String m_VolumeName; + G4int HCID; + G4THitsMap<G4double>* EvtMap; + }; + + + + } - public: // with description - PSEnergy(G4String name, G4int depth = 0); - virtual ~PSEnergy(); - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; - }; - -class PSTOF : public G4VPrimitiveScorer -{ - - public: // with description - PSTOF(G4String name, G4int depth = 0); - virtual ~PSTOF(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; -}; - - -class PSInteractionCoordinatesX : public G4VPrimitiveScorer - { - public: // with description - PSInteractionCoordinatesX(G4String name, G4int depth = 0); - virtual ~PSInteractionCoordinatesX(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; - }; - -class PSInteractionCoordinatesY : public G4VPrimitiveScorer - { - public: // with description - PSInteractionCoordinatesY(G4String name, G4int depth = 0); - virtual ~PSInteractionCoordinatesY(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; - }; - - - -class PSInteractionCoordinatesZ : public G4VPrimitiveScorer - { - public: // with description - PSInteractionCoordinatesZ(G4String name, G4int depth = 0); - virtual ~PSInteractionCoordinatesZ(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; - }; - - - -class PSInteractionCoordinatesAngleTheta : public G4VPrimitiveScorer -{ -public: // with description - PSInteractionCoordinatesAngleTheta(G4String name, G4int depth = 0); - virtual ~PSInteractionCoordinatesAngleTheta(); - -protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - -public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - -private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; -}; - - - -class PSInteractionCoordinatesAnglePhi : public G4VPrimitiveScorer -{ -public: // with description - PSInteractionCoordinatesAnglePhi(G4String name, G4int depth = 0); - virtual ~PSInteractionCoordinatesAnglePhi(); - -protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - -public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - -private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; -}; - - -class PSDetectorNumber : public G4VPrimitiveScorer - { - - public: // with description - PSDetectorNumber(G4String name, G4int depth = 0 , G4String VolumeName = "xxx"); - virtual ~PSDetectorNumber(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4int>* EvtMap; - G4String m_VolumeName ; - }; #endif diff --git a/NPSimulation/include/MUST2Array.hh b/NPSimulation/include/MUST2Array.hh index fd84ddb54c4668db1e9211d40c7df9c3aaafa047..71196c2f5cb5c84244ea51df37bf401b7d8fe128 100644 --- a/NPSimulation/include/MUST2Array.hh +++ b/NPSimulation/include/MUST2Array.hh @@ -55,8 +55,9 @@ namespace MUST2 const G4double MylarCsIThickness = 3*micrometer ; const G4double CsIThickness = 4.*cm + 2*MylarCsIThickness ; const G4double CsIFaceFront = 12.2*cm ; - const G4double CsIFaceBack = 16*cm ; - + const G4double CsIFaceBack = 16*cm ; + const G4double DistInterCsI = 0.2 * mm; + // Starting at the front and going to CsI const G4double AluStripFront_PosZ = Length* -0.5 + 0.5*AluStripThickness ; const G4double Silicon_PosZ = AluStripFront_PosZ + 0.5*AluStripThickness + 0.5*SiliconThickness ; diff --git a/NPSimulation/include/Must2Scorers.hh b/NPSimulation/include/Must2Scorers.hh index 2240f81dc57def10ae7bb61a090da905dc0f25df..f5867f6ad489637d7873d74f84b84cfcd55c66df 100644 --- a/NPSimulation/include/Must2Scorers.hh +++ b/NPSimulation/include/Must2Scorers.hh @@ -27,28 +27,6 @@ #include "G4VPrimitiveScorer.hh" #include "G4THitsMap.hh" namespace MUST2 { - class PSStripE : public G4VPrimitiveScorer - { - - public: // with description - PSStripE(G4String name, G4int depth = 0); - virtual ~PSStripE(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; - }; - class PSStripNumberX : public G4VPrimitiveScorer { @@ -70,8 +48,9 @@ namespace MUST2 { private: G4double m_StripPlaneSize; G4int m_NumberOfStrip ; + G4double m_StripPitch ; G4int HCID; - G4THitsMap<G4double>* EvtMap; + G4THitsMap<G4int>* EvtMap; }; @@ -96,16 +75,18 @@ namespace MUST2 { private: G4double m_StripPlaneSize; G4int m_NumberOfStrip ; + G4double m_StripPitch ; G4int HCID; - G4THitsMap<G4double>* EvtMap; + G4THitsMap<G4int>* EvtMap; }; - class PSDetectorNumber : public G4VPrimitiveScorer + + class PSPadOrCristalNumber : public G4VPrimitiveScorer { public: // with description - PSDetectorNumber(G4String name, G4int depth = 0 , G4String VolumeName = "xxx"); - virtual ~PSDetectorNumber(); + PSPadOrCristalNumber(G4String name, G4int depth = 0); + virtual ~PSPadOrCristalNumber(); protected: // with description virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); @@ -120,7 +101,6 @@ namespace MUST2 { private: G4int HCID; G4THitsMap<G4int>* EvtMap; - G4String m_VolumeName ; }; } diff --git a/NPSimulation/include/Plastic.hh b/NPSimulation/include/Plastic.hh index cf541f9aa379bc206485de4c9441e0d486c76c9e..46f3b24fa967e0deed01cfe842a230783326a32f 100644 --- a/NPSimulation/include/Plastic.hh +++ b/NPSimulation/include/Plastic.hh @@ -10,16 +10,19 @@ /***************************************************************************** * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * - * Creation Date : september 2009 * + * Creation Date : September 2009 * * Last update : * *---------------------------------------------------------------------------* * Decription: * - * This class describe a modular plastic array * + * This class describe a Modular cylindrical Plastic Scintillator * + * Few Material are instantiate and user can choose position and dimension * + * but also the adding of a lead plate on the rear side of the detector * * * *---------------------------------------------------------------------------* * Comment: * * * *****************************************************************************/ + // C++ header #include <string> #include <vector> @@ -57,6 +60,7 @@ public: G4double Phi , G4double PlasticThickness , G4double PlasticRadius , + G4String Scintillator , G4double LeadThickness ); void VolumeMaker(G4ThreeVector Det_pos, int DetNumber,G4LogicalVolume* world) ; @@ -83,7 +87,10 @@ public: public: // Material void InitializeMaterial() ; // Platic - G4Material* m_MaterialPlastic ; + G4Material* m_MaterialPlastic_BC400 ; //BC-400 type plastic + G4Material* m_MaterialPlastic_BC452_2 ; //BC452:BC-400 loaded with 2%Pb type plastic + G4Material* m_MaterialPlastic_BC452_5 ; //BC452:BC-400 loaded with 5%Pb type plastic + G4Material* m_MaterialPlastic_BC452_10 ; //BC452:BC-400 loaded with 10%Pb type plastic // Lead G4Material* m_MaterialLead ; @@ -105,7 +112,7 @@ private: private: // if true a Lead plate is added in front or back of the detector - vector<double> m_LeadThickness ; + vector<double> m_LeadThickness ; vector<double> m_PlasticThickness ; vector<double> m_PlasticRadius ; @@ -115,6 +122,9 @@ private: vector<G4double> m_Theta ; // > Spherical coordinate plastic volume center vector<G4double> m_Phi ; // | + // Scintillator type + vector<G4String> m_Scintillator ; + }; #endif diff --git a/NPSimulation/include/PrimaryGeneratorAction.hh b/NPSimulation/include/PrimaryGeneratorAction.hh index 5e2eec1d1f2fc718eabd05f490caf147a79e8011..97475ec1b592513574e707656d59d8f2c53fe100 100644 --- a/NPSimulation/include/PrimaryGeneratorAction.hh +++ b/NPSimulation/include/PrimaryGeneratorAction.hh @@ -14,8 +14,8 @@ * Last update : * *---------------------------------------------------------------------------* * Decription: * - * This class manage the event Generator used in simulation * - * Every time you had a new kind of event generator, you need to add a few * + * This class manages the Event Generators used in NPSimulation * + * Every time you add a new kind of event generator, you need to add a few * * line in the ReadConfiguration method to detect the associate Token * * * *---------------------------------------------------------------------------* @@ -46,20 +46,15 @@ public: public: void GeneratePrimaries(G4Event*); - G4ParticleGun* GetParticleGun() { - return m_particleGun; - } + G4ParticleGun* GetParticleGun() {return m_particleGun;} public: void ReadEventGeneratorFile(string Path); private: - G4ParticleGun* m_particleGun ; - DetectorConstruction* m_detector ; - VEventGenerator* m_EventGenerator ; - + G4ParticleGun* m_particleGun; + DetectorConstruction* m_detector; + VEventGenerator* m_EventGenerator; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/NPSimulation/include/Target.hh b/NPSimulation/include/Target.hh index 3e88dde62c0f8ea4bd2ad1ebb6e36e846ba9e414..170f7394cb4769e9fc416af1668266d5d88841ba 100644 --- a/NPSimulation/include/Target.hh +++ b/NPSimulation/include/Target.hh @@ -11,7 +11,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : 06/11/2009 * *---------------------------------------------------------------------------* * Decription: * * This class describe Cryogenic and standard Target. Derived from VDetector* @@ -19,9 +19,16 @@ *---------------------------------------------------------------------------* * Comment: * * Some improvment need to be done in material dealing * + * * + * + 16/09/2009: Add support for positioning the target with an angle with * + * respect to the beam (N. de Sereville) * + * + 06/11/2009: Add new Token NBLAYERS defining the number of steps used * + * to slow down the beam in the target (N. de Sereville) * + * * *****************************************************************************/ // C++ headers #include <string> +#include <cmath> // G4 header defining G4 types #include "globals.hh" @@ -36,71 +43,89 @@ using namespace std; - - class Target : public VDetector { -public: - Target() ; - -public: - // Read stream at Configfile to pick-up parameters of detector (Position,...) - // Called in DetecorConstruction::ReadDetextorConfiguration Method - void ReadConfiguration(string Path) ; - - // Construct detector and inialise sensitive part. - // Called After DetecorConstruction::AddDetector Method - void ConstructDetector(G4LogicalVolume* world) ; - - // Add Detector branch to the EventTree. - // Called After DetecorConstruction::AddDetector Method - void InitializeRootOutput() ; - - // Read sensitive part and fill the Root tree. - // Called at in the EventAction::EndOfEventAvtion - void ReadSensitive(const G4Event* event) ; - - -public: - G4Material* GetMaterialFromLibrary(G4String MaterialName, G4double Temperature = 0, G4double Pressure = 0); - -private: - // Target type : true = normal ; false = cryo - bool m_TargetType ; - - // Standard parameter - G4double m_TargetThickness ; - G4double m_TargetRadius ; - G4Material* m_TargetMaterial ; - - // For Cryo Target - G4double m_WindowsThickness ; - G4Material* m_WindowsMaterial ; - G4double m_TargetTemperature ; - G4double m_TargetPressure ; - - // Positioning - G4double m_TargetX ; - G4double m_TargetY ; - G4double m_TargetZ ; - -public: - G4double GetTargetThickness() { - return m_TargetThickness ; - } - G4double GetTargetRadius() { - return m_TargetRadius ; - } - G4double GetTargetX() { - return m_TargetX ; - } - G4double GetTargetY() { - return m_TargetY ; - } - G4double GetTargetZ() { - return m_TargetZ ; - } - + public: + Target(); + ~Target(){}; + + + public: + // Read stream at Configfile to pick-up parameters of detector (Position,...) + // Called in DetecorConstruction::ReadDetextorConfiguration Method + void ReadConfiguration(string Path); + + // Construct detector and inialise sensitive part. + // Called After DetecorConstruction::AddDetector Method + void ConstructDetector(G4LogicalVolume* world); + + // Add Detector branch to the EventTree. + // Called After DetecorConstruction::AddDetector Method + void InitializeRootOutput(); + + // Read sensitive part and fill the Root tree. + // Called at in the EventAction::EndOfEventAvtion + void ReadSensitive(const G4Event* event); + + public: + // method for debug purpose (still to be implemented) + // This method should check if the results of the beam interaction within the target + // (interaction coordinates) are well located inside the target volume + bool IsInsideTarget() {return false;}; + + // Used to calculate the incident beam direction (taking into account + // the emittance) and the vertex of interaction in target + // Also compute the energy lost by the beam in the target before interacting + void CalculateBeamInteraction(double MeanPosX, double SigmaPosX, double MeanPosTheta, double SigmaPosTheta, + double MeanPosY, double SigmaPosY, double MeanPosPhi, double SigmaPosPhi, + double IncidentBeamEnergy, + G4ParticleDefinition* BeamName, + G4ThreeVector &InterCoord, double &AngleEmittanceTheta, double &AngleEmittancePhi, + double &AngleIncidentTheta, double &AngleIncidentPhi, + double &FinalBeamEnergy); + + // Used to simulate beam emmitance effect + void RandomGaussian2D(double MeanX, double MeanY, double SigmaX, double SigmaY, double &X, double &Y, double NumberOfSigma = 10000); + + public: + // Return Material from the Target Material Library + G4Material* GetMaterialFromLibrary(G4String MaterialName, G4double Temperature = 0, G4double Pressure = 0); + + // Generate a DEDX file table using the material used in the target + void WriteDEDXTable(G4ParticleDefinition* Particle,G4double Emin,G4double Emax); + + public: + G4double GetTargetThickness() {return m_TargetThickness;} + G4Material* GetTargetMaterial() {return m_TargetMaterial;} + G4double GetTargetRadius() {return m_TargetRadius;} + G4double GetTargetAngle() {return m_TargetAngle;} + G4double GetTargetX() {return m_TargetX;} + G4double GetTargetY() {return m_TargetY;} + G4double GetTargetZ() {return m_TargetZ;} + G4int GetTargetNbLayers() {return m_TargetNbLayers;} + + + private: + // Target type : true = normal ; false = cryo + bool m_TargetType; + + // Standard parameter + G4double m_TargetThickness; + G4double m_TargetRadius; + G4double m_TargetAngle; + G4Material* m_TargetMaterial; + G4int m_TargetNbLayers; + + // For Cryo Target + G4double m_TargetTemperature; + G4double m_TargetPressure; + G4double m_WindowsThickness; + G4Material* m_WindowsMaterial; + + // Positioning + G4double m_TargetX; + G4double m_TargetY; + G4double m_TargetZ; }; #endif diff --git a/NPSimulation/include/ThinSi.hh b/NPSimulation/include/ThinSi.hh index 86d5f7fbbfcbc0796ca208ba75619ee9719d5787..48febf6c21ae00357bf7ab0ddbe10d0ca78a48f3 100644 --- a/NPSimulation/include/ThinSi.hh +++ b/NPSimulation/include/ThinSi.hh @@ -32,9 +32,11 @@ #include "G4RotationMatrix.hh" #include "G4LogicalVolume.hh" -// NPTool header +// NPSimulation header #include "VDetector.hh" +// NPLib +#include "TSSSDData.h" using namespace std; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -42,7 +44,7 @@ namespace THINSI { // Energy and time Resolution const G4double ResoTime = 0 ; - const G4double ResoEnergy = 0.042 ;// = 100keV of Resolution // Unit is MeV/2.35 + const G4double ResoEnergy = 0.064 ;// = 150keV of Resolution // Unit is MeV/2.35 // Geometry const G4double DetectorSize = 68*mm ; @@ -50,7 +52,7 @@ namespace THINSI const G4double FrameThickness = 3*mm ; const G4double SiliconSize = 50*mm ; const G4double AluThickness = 0.4*micrometer ; - const G4int NumberOfStrip = 32 ; + const G4int NumberOfStrip = 16 ; const G4double AluStripFront_PosZ = -0.5*SiliconThickness - 0.5*AluThickness ; const G4double Si_PosZ = 0 ; @@ -119,7 +121,29 @@ public: ///////////Event class to store Data//////////////// //////////////////////////////////////////////////// private: - G4double m_Energy ; + TSSSDData* m_Event ; + + //////////////////////////////////////////////////// + ///////////////// Scorer Related /////////////////// + //////////////////////////////////////////////////// + +private: + // Initialize all Scorer used by the MUST2Array + void InitializeScorers() ; + + // Scorer Associate to the 20um Silicon stage + G4MultiFunctionalDetector* m_StripScorer ; + + + +private: + // Initialize mmaterial used in detector definition + void InitializeMaterial(); + + // List of material + G4Material* m_MaterialSilicon ; + G4Material* m_MaterialAl ; + G4Material* m_MaterialVacuum ; //////////////////////////////////////////////////// ///////////////Private intern Data////////////////// diff --git a/NPSimulation/include/PlasticScorers.hh b/NPSimulation/include/ThinSiScorers.hh similarity index 55% rename from NPSimulation/include/PlasticScorers.hh rename to NPSimulation/include/ThinSiScorers.hh index 7490280c3720dd6720ce4d6fd3b9ebce74adf293..9449cffa80c1396dc988e3899c951de766a70bba 100644 --- a/NPSimulation/include/PlasticScorers.hh +++ b/NPSimulation/include/ThinSiScorers.hh @@ -1,5 +1,5 @@ -#ifndef GeneralScorers_h -#define GeneralScorers_h 1 +#ifndef ThinSiScorers_h +#define ThinSiScorers_h 1 /***************************************************************************** * Copyright (C) 2009 this file is part of the NPTool Project * * * @@ -10,68 +10,31 @@ /***************************************************************************** * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * - * Creation Date : September 2009 * + * Creation Date : October 2009 * * Last update : * *---------------------------------------------------------------------------* * Decription: * - * This class old some of the Platic Scorer, shared by different detector. * + * File old the scorer specific to the ThinSi Detector * + * * *---------------------------------------------------------------------------* * Comment: * + * Those Scorer use TrackID as map index. This way ones can rebuild energy * + * deposit, time of flight or position,... particle by particle for each * + * event.Because standard scorer provide by G4 don't work this way but using* + * a global ID for each event you should not use those scorer with some G4 * + * provided ones or being very carefull doing so. * *****************************************************************************/ #include "G4VPrimitiveScorer.hh" #include "G4THitsMap.hh" -namespace PLASTIC { -class PSEnergy : public G4VPrimitiveScorer - { - - public: // with description - PSEnergy(G4String name, G4int depth = 0); - virtual ~PSEnergy(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; - }; -class PSTOF : public G4VPrimitiveScorer -{ - - public: // with description - PSTOF(G4String name, G4int depth = 0); - virtual ~PSTOF(); - - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); - - private: - G4int HCID; - G4THitsMap<G4double>* EvtMap; -}; - - -class PSDetectorNumber : public G4VPrimitiveScorer +namespace THINSI { + + class PSStripNumber : public G4VPrimitiveScorer { public: // with description - PSDetectorNumber(G4String name, G4int depth = 0 ); - virtual ~PSDetectorNumber(); + PSStripNumber(G4String name, G4int depth = 0, G4double StripPlaneSize = 50*mm, G4int NumberOfStrip = 16); + virtual ~PSStripNumber(); protected: // with description virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); @@ -84,11 +47,13 @@ class PSDetectorNumber : public G4VPrimitiveScorer virtual void PrintAll(); private: + G4double m_StripPlaneSize; + G4int m_NumberOfStrip ; + G4double m_StripPitch ; G4int HCID; G4THitsMap<G4int>* EvtMap; }; - } #endif diff --git a/NPSimulation/include/VDetector.hh b/NPSimulation/include/VDetector.hh index cd34e65017e0fa4d09dec1e3da354bacaa099a9d..dd98b31e4954b4c0f6a82c41319822d163db637d 100644 --- a/NPSimulation/include/VDetector.hh +++ b/NPSimulation/include/VDetector.hh @@ -22,6 +22,18 @@ * * *---------------------------------------------------------------------------* * Comment: * + * Detector inheriting from VDetector should follow this Naming convention * + * for logical volume: * + * DetectorNameX_SubPart * + * * + * -DetectorName is the name of the detector, like "MUST2Array", * + * note that use of _ within the name is prohibitted. * + * * + * -X is the detector Number, for example if you have two plastic then you* + * will have Plastic1 and Plastic2 * + * * + * -SubPart is the optionnal sub part, like for examples Si and CsI in * + * MUST2. Note that you can add as many as _SubPart you need * * * *****************************************************************************/ // C++ header @@ -48,7 +60,7 @@ public: virtual ~VDetector() ; // Read stream at Configfile to pick-up parameters of detector (Position,...) - // Called in DetecorConstruction::ReadDetextorConfiguration Method + // Called in DetectorConstruction::ReadDetectorConfiguration Method virtual void ReadConfiguration(string) = 0; // Construct detector and inialise sensitive part. @@ -61,7 +73,7 @@ public: // Add Detector branch to the EventTree. // Called After DetecorConstruction::AddDetector Method - virtual void InitializeRootOutput(); + virtual void InitializeRootOutput() ; // Add Detector branch to the EventTree. // Called After DetecorConstruction::AddDetector Method diff --git a/NPSimulation/include/VEventGenerator.hh b/NPSimulation/include/VEventGenerator.hh index 1904d054c81f320d37e4f5000cd815e46ce8e939..59bbd3bca32a6e67823c58929591f519637b554c 100644 --- a/NPSimulation/include/VEventGenerator.hh +++ b/NPSimulation/include/VEventGenerator.hh @@ -11,7 +11,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : 03/11/2009 * *---------------------------------------------------------------------------* * Decription: * * All event generator added in the project should derive from this virtual * @@ -23,17 +23,23 @@ * * *---------------------------------------------------------------------------* * Comment: * + * + 03/11/09: Adding EffectiveThiknessBeforeInteraction in the * + * CalculateBeamInteraction() method (N. de Sereville) * * * *****************************************************************************/ // C++ header #include <string> -// G4 header defining G$ types +// G4 header defining G4 types #include "globals.hh" // G4 headers #include "G4ParticleGun.hh" #include "G4Event.hh" +#include "G4ThreeVector.hh" + +// NPTool headers +#include "Target.hh" using namespace CLHEP; using namespace std; @@ -52,13 +58,10 @@ public: virtual void InitializeRootOutput() {}; // Used in some case to generate event inside the target - virtual void SetTargetThickness(G4double) {}; - virtual void SetTargetRadius(G4double) {}; - virtual void SetTargetCoordinate(G4double, G4double, G4double) {}; + virtual void SetTarget(Target*) {}; - // Used to simulate beam emmitance effect - void RandomGaussian2D(double MeanX,double MeanY,double SigmaX,double SigmaY,double &X,double &Y, double NumberOfSigma=10000); - + // Used to simulate beam emmitance effect + void RandomGaussian2D(double MeanX, double MeanY, double SigmaX, double SigmaY, double &X, double &Y, double NumberOfSigma = 10000); }; diff --git a/NPSimulation/src/AnnularS1.cc b/NPSimulation/src/AnnularS1.cc index e24141ea2755ec3161cbf7037e05a32f604737ee..c5fb036b41be93b6215c973a1288b2b59773d4c7 100644 --- a/NPSimulation/src/AnnularS1.cc +++ b/NPSimulation/src/AnnularS1.cc @@ -9,13 +9,14 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 21/07/09 * - * Last update : * + * Last update : 16/10/09 * *---------------------------------------------------------------------------* * Decription: Define the S1 detector from Micron * * * *---------------------------------------------------------------------------* * Comment: * - * * + * + 11/10/09: Change scorer philosophy, one scorer for the detector number * + * added (N. de Sereville) * * * *****************************************************************************/ @@ -44,8 +45,8 @@ #include "G4MultiFunctionalDetector.hh" // NPTool headers -#include "AnnularS1.hh" #include "GeneralScorers.hh" +#include "AnnularS1.hh" #include "AnnularS1Scorers.hh" #include "TS1Data.h" #include "RootOutput.h" @@ -62,7 +63,7 @@ using namespace ANNULARS1; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... AnnularS1::AnnularS1() { - m_Event = new TS1Data(); + m_Event = new TS1Data(); } @@ -76,28 +77,24 @@ AnnularS1::~AnnularS1() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void AnnularS1::AddModule(G4double PosZ, - G4double Rmin, - G4double Rmax) +void AnnularS1::AddModule(G4double PosZ) { m_PosZ.push_back(PosZ); - m_Rmin.push_back(Rmin); - m_Rmax.push_back(Rmax); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void AnnularS1::VolumeMaker(G4int TelescopeNumber , - G4ThreeVector MMpos , - G4RotationMatrix* MMrot , - G4LogicalVolume* world) +void AnnularS1::VolumeMaker(G4int DetecNumber, + G4ThreeVector position, + G4RotationMatrix* rotation, + G4LogicalVolume* world) { - G4double NbrTelescopes = TelescopeNumber ; - G4String DetectorNumber ; - ostringstream Number ; - Number << NbrTelescopes ; - DetectorNumber = Number.str() ; + G4double NbrTelescopes = DetecNumber; + G4String DetectorNumber; + ostringstream Number; + Number << NbrTelescopes; + DetectorNumber = Number.str(); //////////////////////////////////////////////////////////////// /////////////////Element Definition /////////////////////////// @@ -128,14 +125,14 @@ void AnnularS1::VolumeMaker(G4int TelescopeNumber , G4Material* Silicon = new G4Material("Si", z = 14., a, density); // Al - density = 2.702 * g / cm3; - a = 26.98 * g / mole; - G4Material* Aluminium = new G4Material("Aluminium", z = 13., a, density); +// density = 2.702 * g / cm3; +// a = 26.98 * g / mole; +// G4Material* Aluminium = new G4Material("Aluminium", z = 13., a, density); // Iron - density = 7.874 * g / cm3; - a = 55.847 * g / mole; - G4Material* Iron = new G4Material("Iron", z = 26., a, density); +// density = 7.874 * g / cm3; +// a = 55.847 * g / mole; +// G4Material* Iron = new G4Material("Iron", z = 26., a, density); // CsI density = 4.51 * g / cm3; @@ -172,28 +169,28 @@ void AnnularS1::VolumeMaker(G4int TelescopeNumber , G4PVPlacement* PVPBuffer ; // Name of the module - G4String Name = "AnnularS1" + DetectorNumber; + G4String Name = "S1Annular" + DetectorNumber; // Definition of the volume containing the sensitive detector - G4Tubs* solidMM = new G4Tubs(Name, + G4Tubs* solidAnnularS1 = new G4Tubs(Name, Rmin, Rmax, Length/2, 0*deg, 360*deg); -// G4LogicalVolume* logicMM = new G4LogicalVolume(solidMM, Iron, Name, 0, 0, 0); - G4LogicalVolume* logicMM = new G4LogicalVolume(solidMM, Vacuum, Name, 0, 0, 0); +// G4LogicalVolume* logicAnnularS1 = new G4LogicalVolume(solidAnnularS1, Iron, Name, 0, 0, 0); + G4LogicalVolume* logicAnnularS1 = new G4LogicalVolume(solidAnnularS1, Vacuum, Name, 0, 0, 0); - PVPBuffer = new G4PVPlacement(G4Transform3D(*MMrot, MMpos) , - logicMM , - Name , - world , - false , + PVPBuffer = new G4PVPlacement(G4Transform3D(*rotation, position), + logicAnnularS1, + Name, + world, + false, 0); - logicMM->SetVisAttributes(G4VisAttributes::Invisible); - if (m_non_sensitive_part_visiualisation) logicMM->SetVisAttributes(G4VisAttributes(G4Colour(0.90, 0.90, 0.90))); + logicAnnularS1->SetVisAttributes(G4VisAttributes::Invisible); + if (m_non_sensitive_part_visiualisation) logicAnnularS1->SetVisAttributes(G4VisAttributes(G4Colour(0.90, 0.90, 0.90))); // Aluminium dead layers @@ -210,8 +207,8 @@ void AnnularS1::VolumeMaker(G4int TelescopeNumber , // G4LogicalVolume* logicAluStrip = new G4LogicalVolume(solidAluStrip, Aluminium, "logicAluStrip", 0, 0, 0); G4LogicalVolume* logicAluStrip = new G4LogicalVolume(solidAluStrip, Vacuum, "logicAluStrip", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionAluStripFront, logicAluStrip, "G" + DetectorNumber + "AluStripFront", logicMM, false, 0); - PVPBuffer = new G4PVPlacement(0, positionAluStripBack, logicAluStrip, "G" + DetectorNumber + "AluStripBack", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionAluStripFront, logicAluStrip, Name + "_AluStripFront", logicAnnularS1, false, 0); + PVPBuffer = new G4PVPlacement(0, positionAluStripBack, logicAluStrip, Name + "_AluStripBack", logicAnnularS1, false, 0); logicAluStrip->SetVisAttributes(G4VisAttributes::Invisible); @@ -227,53 +224,15 @@ void AnnularS1::VolumeMaker(G4int TelescopeNumber , G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon, Silicon, "logicSilicon", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, "G" + DetectorNumber + "Silicon", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, Name + "_Silicon", logicAnnularS1, false, 0); // Set Silicon strip sensible - // instantiate a new scorer - G4MultiFunctionalDetector* StripScorer = new G4MultiFunctionalDetector("ScorerAnnularS1_" + DetectorNumber); - // attach it to the Silicon plate - logicSilicon->SetSensitiveDetector(StripScorer); - // and declare it to the SDManager - G4SDManager::GetSDMpointer()->AddNewDetector(StripScorer); - - // instantiate primitive scorer - G4VPrimitiveScorer* energy ; - G4VPrimitiveScorer* TOF ; - G4VPrimitiveScorer* ThetaStripPosition ; - G4VPrimitiveScorer* PhiStripPosition ; - G4VPrimitiveScorer* InteractionCoordinatesX ; - G4VPrimitiveScorer* InteractionCoordinatesY ; - G4VPrimitiveScorer* InteractionCoordinatesZ ; - G4VPrimitiveScorer* InteractionCoordinatesAngleTheta ; - G4VPrimitiveScorer* InteractionCoordinatesAnglePhi ; - - // create primitive scorer - energy = new AnnularS1ScorerEnergy("StripEnergy", 0) ; - TOF = new AnnularS1ScorerTime("StripTime", 0) ; - ThetaStripPosition = new AnnularS1ScorerThetaStripNumber("ThetaStripNumber", 0, FirstStageRmax, 128) ; - PhiStripPosition = new AnnularS1ScorerPhiStripNumber("PhiStripNumber", 0, FirstStageRmax, 128) ; - InteractionCoordinatesX = new PSInteractionCoordinatesX("InterCoordX", 0) ; - InteractionCoordinatesY = new PSInteractionCoordinatesY("InterCoordY", 0) ; - InteractionCoordinatesZ = new PSInteractionCoordinatesZ("InterCoordZ", 0) ; - InteractionCoordinatesAngleTheta = new PSInteractionCoordinatesAngleTheta("InterCoordAngTheta", 0) ; - InteractionCoordinatesAnglePhi = new PSInteractionCoordinatesAnglePhi("InterCoordAngPhi", 0) ; - - // and register it to the multifunctionnal detector - StripScorer->RegisterPrimitive(energy) ; - StripScorer->RegisterPrimitive(TOF) ; - StripScorer->RegisterPrimitive(ThetaStripPosition) ; - StripScorer->RegisterPrimitive(PhiStripPosition) ; - StripScorer->RegisterPrimitive(InteractionCoordinatesX) ; - StripScorer->RegisterPrimitive(InteractionCoordinatesY) ; - StripScorer->RegisterPrimitive(InteractionCoordinatesZ) ; - StripScorer->RegisterPrimitive(InteractionCoordinatesAngleTheta) ; - StripScorer->RegisterPrimitive(InteractionCoordinatesAnglePhi) ; + logicSilicon->SetSensitiveDetector(m_Scorer); ///Visualisation of Silicon Strip -// G4VisAttributes* SiliconVisAtt = new G4VisAttributes(G4Colour(0.5, 0.5, 0.5)) ; - G4VisAttributes* SiliconVisAtt = new G4VisAttributes(G4Colour(0.0, 0.0, 0.9)) ; - logicSilicon->SetVisAttributes(SiliconVisAtt) ; +// G4VisAttributes* SiliconVisAtt = new G4VisAttributes(G4Colour(0.5, 0.5, 0.5)); + G4VisAttributes* SiliconVisAtt = new G4VisAttributes(G4Colour(0.0, 0.0, 0.9)); + logicSilicon->SetVisAttributes(SiliconVisAtt); } @@ -287,97 +246,96 @@ void AnnularS1::VolumeMaker(G4int TelescopeNumber , // Called in DetecorConstruction::ReadDetextorConfiguration Method void AnnularS1::ReadConfiguration(string Path) { - ifstream ConfigFile ; - ConfigFile.open(Path.c_str()) ; - string LineBuffer ; - string DataBuffer ; + ifstream ConfigFile; + ConfigFile.open(Path.c_str()); + string LineBuffer, DataBuffer; - G4double Z = 0, Rmin = 0, Rmax = 0; - - bool check_Z = false ; - bool check_Rmin = false ; - bool check_Rmax = false ; + G4double Z = 0; + bool check_Z = false , check_VIS=false,ReadingStatus = false ; while (!ConfigFile.eof()) { getline(ConfigFile, LineBuffer); - if (LineBuffer.compare(0, 9, "AnnularS1") == 0) { - G4cout << "///" << G4endl ; - G4cout << "Annular element found: " << G4endl ; - - ConfigFile >> DataBuffer; - //Position method - if (DataBuffer.compare(0, 2, "Z=") == 0) { - check_Z = true; - ConfigFile >> DataBuffer ; - Z = atof(DataBuffer.c_str()) ; - Z = Z * mm; - cout << "Z: " << Z / mm << endl; - } - - ConfigFile >> DataBuffer; - //Position method - if (DataBuffer.compare(0, 5, "RMIN=") == 0) { - check_Rmin = true; - ConfigFile >> DataBuffer ; - Rmin = atof(DataBuffer.c_str()) ; - Rmin = Rmin * mm; - cout << "Rmin: " << Rmin / mm << endl; - } - ConfigFile >> DataBuffer; - //Position method - if (DataBuffer.compare(0, 5, "RMAX=") == 0) { - check_Rmax = true; - ConfigFile >> DataBuffer ; - Rmax = atof(DataBuffer.c_str()) ; - Rmax = Rmax * mm; - cout << "Rmax: " << Rmax / mm << endl; - } - - ConfigFile >> DataBuffer; - if (DataBuffer.compare(0, 4, "VIS=") == 0) { - ConfigFile >> DataBuffer; - if (DataBuffer.compare(0, 3, "all") == 0) m_non_sensitive_part_visiualisation = true; - } - //Add The previously define telescope - //With position method - if (check_Z && check_Rmin && check_Rmax) { - AddModule(Z, - Rmin, - Rmax); - } - else { - G4cout << "Wrong Token, AnnularS1 Annular Element not added" << G4endl; - } - } + if (LineBuffer.compare(0, 9, "AnnularS1") == 0) { + G4cout << "///" << G4endl ; + G4cout << "Annular element found: " << G4endl ; + ReadingStatus = true ; + } + + else ReadingStatus = false ; + + while(ReadingStatus) + { + ConfigFile >> DataBuffer; + + //Search for comment Symbol % + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} + + //Position method + else if (DataBuffer.compare(0, 2, "Z=") == 0) { + check_Z = true; + ConfigFile >> DataBuffer ; + Z = atof(DataBuffer.c_str()) ; + Z = Z * mm; + cout << "Z: " << Z / mm << endl; + } + + else if (DataBuffer.compare(0, 4, "VIS=") == 0) { + check_VIS = true ; + ConfigFile >> DataBuffer; + if (DataBuffer.compare(0, 3, "all") == 0) m_non_sensitive_part_visiualisation = true; + } + + + /////////////////////////////////////////////////// + // If no Detector Token and no comment, toggle out + else + {ReadingStatus = false; G4cout << "Wrong Token Sequence: Getting out " << DataBuffer << G4endl ;} + + + //Add The previously define telescope + //With position method + if (check_Z&&check_VIS) { + AddModule(Z); + check_Z = false ; + check_VIS=false ; + ReadingStatus = false ; + cout << "///"<< endl ; + } + + } + + + } } + + // Construct detector and inialise sensitive part. // Called After DetecorConstruction::AddDetector Method void AnnularS1::ConstructDetector(G4LogicalVolume* world) { - G4RotationMatrix* MMrot = NULL ; -// G4ThreeVector MMpos = G4ThreeVector(0, 0, 0) ; - MMpos = G4ThreeVector(0, 0, 0) ; + G4RotationMatrix* rotation = NULL; + G4ThreeVector position = G4ThreeVector(0, 0, 0); G4int NumberOfModule = m_PosZ.size() ; for (G4int i = 0; i < NumberOfModule; i++) { // translation to position the module - MMpos = G4ThreeVector(0, 0, m_PosZ[i]); + position = G4ThreeVector(0, 0, m_PosZ[i]); // Passage Matrix from Lab Referential to Module Referential // Identity matrix by default - MMrot = new G4RotationMatrix(); - if (MMpos.z() < 0) MMrot->rotateX(180*deg); + rotation = new G4RotationMatrix(); + if (position.z() < 0) rotation->rotateX(180*deg); // Build geometry and declare scorers - VolumeMaker(i + 1, MMpos, MMrot, world); + VolumeMaker(i + 1, position, rotation, world); } - delete MMrot ; + delete rotation ; } @@ -397,236 +355,265 @@ void AnnularS1::InitializeRootOutput() // Called at in the EventAction::EndOfEventAvtion void AnnularS1::ReadSensitive(const G4Event* event) { - bool checkSi = false ; - G4String DetectorNumber ; - // Clear ROOT objects m_Event->Clear(); -////////////////////////////////////////////////////////////////////////////////////// -//////////////////////// Used to Read Event Map of detector ////////////////////////// -////////////////////////////////////////////////////////////////////////////////////// - + ////////////////////////////////////////////////////////////////////////////////// + /////////////// Variables Used to Read Event Map of detector //////////////////// + ////////////////////////////////////////////////////////////////////////////////// // First Stage - std::map<G4int, G4double*>::iterator Energy_itr ; - std::map<G4int, G4double*>::iterator Time_itr ; - std::map<G4int, G4double*>::iterator X_itr ; - std::map<G4int, G4double*>::iterator Y_itr ; - std::map<G4int, G4double*>::iterator Pos_X_itr ; - std::map<G4int, G4double*>::iterator Pos_Y_itr ; - std::map<G4int, G4double*>::iterator Pos_Z_itr ; - std::map<G4int, G4double*>::iterator Ang_Theta_itr ; - std::map<G4int, G4double*>::iterator Ang_Phi_itr ; - - G4THitsMap<G4double>* EnergyHitMap ; - G4THitsMap<G4double>* TimeHitMap ; - G4THitsMap<G4double>* XHitMap ; - G4THitsMap<G4double>* YHitMap ; - G4THitsMap<G4double>* PosXHitMap ; - G4THitsMap<G4double>* PosYHitMap ; - G4THitsMap<G4double>* PosZHitMap ; - G4THitsMap<G4double>* AngThetaHitMap ; - G4THitsMap<G4double>* AngPhiHitMap ; - - // NULL pointer are given to avoid warning at compilation - - -////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////// - G4int HitNumber = 0; - G4int NumberOfModule = m_PosZ.size() ; + std::map<G4int, G4int*>::iterator DetectorNumber_itr; + std::map<G4int, G4double*>::iterator Energy_itr; + std::map<G4int, G4double*>::iterator Time_itr; + std::map<G4int, G4double*>::iterator X_itr; + std::map<G4int, G4double*>::iterator Y_itr; + std::map<G4int, G4double*>::iterator Pos_X_itr; + std::map<G4int, G4double*>::iterator Pos_Y_itr; + std::map<G4int, G4double*>::iterator Pos_Z_itr; + std::map<G4int, G4double*>::iterator Ang_Theta_itr; + std::map<G4int, G4double*>::iterator Ang_Phi_itr; + + G4THitsMap<G4int>* DetectorNumberHitMap; + G4THitsMap<G4double>* EnergyHitMap; + G4THitsMap<G4double>* TimeHitMap; + G4THitsMap<G4double>* XHitMap; + G4THitsMap<G4double>* YHitMap; + G4THitsMap<G4double>* PosXHitMap; + G4THitsMap<G4double>* PosYHitMap; + G4THitsMap<G4double>* PosZHitMap; + G4THitsMap<G4double>* AngThetaHitMap; + G4THitsMap<G4double>* AngPhiHitMap; + + ///////////////////////////////////////////////////////////////////////////////// + ////////////////// Read scorers //////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////// + // Read the Scorer associated to the first Stage + //Detector Number + G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/DetectorNumber"); + DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)); + DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin(); + + //Energy + G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/StripEnergy") ; + EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; + Energy_itr = EnergyHitMap->GetMap()->begin() ; + + //Time of Flight + G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/StripTime") ; + TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; + Time_itr = TimeHitMap->GetMap()->begin() ; + + //Strip Number X + G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/ThetaStripNumber") ; + XHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; + X_itr = XHitMap->GetMap()->begin() ; + + //Strip Number Y + G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/PhiStripNumber") ; + YHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; + Y_itr = YHitMap->GetMap()->begin() ; + + //Interaction Coordinate X + G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/InterCoordX") ; + PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; + Pos_X_itr = PosXHitMap->GetMap()->begin() ; + + //Interaction Coordinate Y + G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/InterCoordY") ; + PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; + Pos_Y_itr = PosYHitMap->GetMap()->begin() ; + + //Interaction Coordinate Z + G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/InterCoordZ") ; + PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; + Pos_Z_itr = PosXHitMap->GetMap()->begin() ; + + //Interaction Coordinate Angle Theta + G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/InterCoordAngTheta") ; + AngThetaHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngThetaCollectionID)) ; + Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; + + //Interaction Coordinate Angle Phi + G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1/InterCoordAngPhi"); + AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)); + Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); + + // Check the size of different map + G4int sizeN = DetectorNumberHitMap->entries(); + G4int sizeE = EnergyHitMap->entries(); + G4int sizeT = TimeHitMap->entries(); + G4int sizeX = XHitMap->entries(); + G4int sizeY = YHitMap->entries(); + + if (sizeE != sizeT || sizeT != sizeX || sizeX != sizeY) { + G4cout << "No match size Si Event Map: sE:" + << sizeE << " sT:" << sizeT << " sX:" << sizeX << " sY:" << sizeY << endl ; + return; + } - for (G4int i = 0 ; i < NumberOfModule ; i++) { - checkSi = false; - - G4int k = i + 1; - ostringstream buffer; - buffer << k; - DetectorNumber = buffer.str(); - - // Read the Scorer associated to the first Stage - //Energy - G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/StripEnergy") ; - EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; - Energy_itr = EnergyHitMap->GetMap()->begin() ; - - //Time of Flight - G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/StripTime") ; - TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; - Time_itr = TimeHitMap->GetMap()->begin() ; - - //Strip Number X - G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/ThetaStripNumber") ; - XHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; - X_itr = XHitMap->GetMap()->begin() ; - - //Strip Number Y - G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/PhiStripNumber") ; - YHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; - Y_itr = YHitMap->GetMap()->begin() ; - - //Interaction Coordinate X - G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/InterCoordX") ; - PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; - Pos_X_itr = PosXHitMap->GetMap()->begin() ; - - //Interaction Coordinate Y - G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/InterCoordY") ; - PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; - Pos_Y_itr = PosYHitMap->GetMap()->begin() ; - - //Interaction Coordinate Z - G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/InterCoordZ") ; - PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; - Pos_Z_itr = PosXHitMap->GetMap()->begin() ; - - //Interaction Coordinate Angle Theta - G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/InterCoordAngTheta") ; - AngThetaHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngThetaCollectionID)) ; - Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; - - //Interaction Coordinate Angle Phi - G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ScorerAnnularS1_" + DetectorNumber + "/InterCoordAngPhi") ; - AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; - Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; - - // Check the size of different map - G4int sizeE = EnergyHitMap->entries(); - G4int sizeT = TimeHitMap->entries(); - G4int sizeX = XHitMap->entries(); - G4int sizeY = YHitMap->entries(); - - if (sizeE != sizeT || sizeT != sizeX || sizeX != sizeY) { - G4cout << "No match size Si Event Map: sE:" - << sizeE << " sT:" << sizeT << " sX:" << sizeX << " sY:" << sizeY << endl ; - return; - } - - // Loop on Strip energy - for (G4int l = 0 ; l < sizeE ; l++) { - G4int ETrackID = Energy_itr->first ; - G4double E = *(Energy_itr->second) ; - - if (E > 0) { - checkSi = true ; - m_Event->SetS1ThetaEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - m_Event->SetS1PhiEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - - // Time - Time_itr = TimeHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeT ; h++) { - G4int TTrackID = Time_itr->first ; - G4double T = *(Time_itr->second) ; - - if (TTrackID == ETrackID) { - T = RandGauss::shoot(T, ResoTimePPAC) ; - m_Event->SetS1ThetaTTime(RandGauss::shoot(T, ResoTimeGpd)) ; - m_Event->SetS1PhiTTime(RandGauss::shoot(T, ResoTimeGpd)) ; - } - Time_itr++; + // Loop on AnnularS1 number + for (G4int l = 0; l < sizeN; l++) { + G4double N = *(DetectorNumber_itr->second); + G4int NTrackID = DetectorNumber_itr->first - N; + + if (N > 0) { + // Fill detector number + m_Event->SetS1ThetaEDetectorNbr(N); + m_Event->SetS1ThetaTDetectorNbr(N); + m_Event->SetS1PhiEDetectorNbr(N); + m_Event->SetS1PhiTDetectorNbr(N); + + // Energy + Energy_itr = EnergyHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeE ; h++) { + G4int ETrackID = Energy_itr->first - N; + G4double E = *(Energy_itr->second); + if (ETrackID == NTrackID) { + m_Event->SetS1ThetaEEnergy(RandGauss::shoot(E, ResoFirstStage)); + m_Event->SetS1PhiEEnergy(RandGauss::shoot(E, ResoFirstStage)); } + Energy_itr++; + } - // Theta - X_itr = XHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeX ; h++) { - G4int XTrackID = X_itr->first ; - G4double X = *(X_itr->second) ; - if (XTrackID == ETrackID) { - m_Event->SetS1ThetaEDetectorNbr(k) ; - m_Event->SetS1ThetaTDetectorNbr(k) ; - m_Event->SetS1ThetaEStripNbr(X) ; - m_Event->SetS1ThetaTStripNbr(X) ; - } - - X_itr++; + // Time + Time_itr = TimeHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeT ; h++) { + G4int TTrackID = Time_itr->first - N; + G4double T = *(Time_itr->second); + if (TTrackID == NTrackID) { + T = RandGauss::shoot(T, ResoTimePPAC) ; + m_Event->SetS1ThetaTTime(RandGauss::shoot(T, ResoTimeGpd)) ; + m_Event->SetS1PhiTTime(RandGauss::shoot(T, ResoTimeGpd)) ; } + Time_itr++; + } - // Phi - Y_itr = YHitMap->GetMap()->begin() ; - for (G4int h = 0 ; h < sizeY ; h++) { - G4int YTrackID = Y_itr->first ; - G4double Y = *(Y_itr->second) ; - if (YTrackID == ETrackID) { - m_Event->SetS1PhiEDetectorNbr(k) ; - m_Event->SetS1PhiTDetectorNbr(k) ; - m_Event->SetS1PhiEStripNbr(Y) ; - m_Event->SetS1PhiTStripNbr(Y) ; - } - - Y_itr++; + // Theta + X_itr = XHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeX ; h++) { + G4int XTrackID = X_itr->first - N; + G4double X = *(X_itr->second); + if (XTrackID == NTrackID) { + m_Event->SetS1ThetaEStripNbr(X) ; + m_Event->SetS1ThetaTStripNbr(X) ; } + X_itr++; + } - // Pos X - Pos_X_itr = PosXHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosXTrackID = Pos_X_itr->first ; - G4double PosX = *(Pos_X_itr->second) ; - if (PosXTrackID == ETrackID) { - ms_InterCoord->SetDetectedPositionX(PosX) ; - } - Pos_X_itr++; + // Phi + Y_itr = YHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeY ; h++) { + G4int YTrackID = Y_itr->first - N; + G4double Y = *(Y_itr->second); + if (YTrackID == NTrackID) { + m_Event->SetS1PhiEStripNbr(Y); + m_Event->SetS1PhiTStripNbr(Y); } + Y_itr++; + } - // Pos Y - Pos_Y_itr = PosYHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosYTrackID = Pos_Y_itr->first ; - G4double PosY = *(Pos_Y_itr->second) ; - if (PosYTrackID == ETrackID) { - ms_InterCoord->SetDetectedPositionY(PosY) ; - } - Pos_Y_itr++; + // Pos X + Pos_X_itr = PosXHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeX ; h++) { + G4int PosXTrackID = Pos_X_itr->first - N; + G4double PosX = *(Pos_X_itr->second); + if (PosXTrackID == NTrackID) { + ms_InterCoord->SetDetectedPositionX(PosX); } + Pos_X_itr++; + } - // Pos Z - Pos_Z_itr = PosZHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosZTrackID = Pos_Z_itr->first ; - G4double PosZ = *(Pos_Z_itr->second) ; - if (PosZTrackID == ETrackID) { - ms_InterCoord->SetDetectedPositionZ(PosZ) ; - } - Pos_Z_itr++; + // Pos Y + Pos_Y_itr = PosYHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeX ; h++) { + G4int PosYTrackID = Pos_Y_itr->first - N; + G4double PosY = *(Pos_Y_itr->second); + if (PosYTrackID == NTrackID) { + ms_InterCoord->SetDetectedPositionY(PosY); } + Pos_Y_itr++; + } - // Angle Theta - Ang_Theta_itr = AngThetaHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngThetaTrackID = Ang_Theta_itr->first ; - G4double AngTheta = *(Ang_Theta_itr->second) ; - if (AngThetaTrackID == ETrackID) { - ms_InterCoord->SetDetectedAngleTheta(AngTheta) ; - } - Ang_Theta_itr++; + // Pos Z + Pos_Z_itr = PosZHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeX ; h++) { + G4int PosZTrackID = Pos_Z_itr->first - N; + G4double PosZ = *(Pos_Z_itr->second); + if (PosZTrackID == NTrackID) { + ms_InterCoord->SetDetectedPositionZ(PosZ); } + Pos_Z_itr++; + } - // Angle Phi - Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngPhiTrackID = Ang_Phi_itr->first ; - G4double AngPhi = *(Ang_Phi_itr->second) ; - if (AngPhiTrackID == ETrackID) { - ms_InterCoord->SetDetectedAnglePhi(AngPhi) ; - } - Ang_Phi_itr++; + // Angle Theta + Ang_Theta_itr = AngThetaHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeX ; h++) { + G4int AngThetaTrackID = Ang_Theta_itr->first - N; + G4double AngTheta = *(Ang_Theta_itr->second); + if (AngThetaTrackID == NTrackID) { + ms_InterCoord->SetDetectedAngleTheta(AngTheta); } + Ang_Theta_itr++; + } - + // Angle Phi + Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeX ; h++) { + G4int AngPhiTrackID = Ang_Phi_itr->first - N; + G4double AngPhi = *(Ang_Phi_itr->second); + if (AngPhiTrackID == NTrackID) { + ms_InterCoord->SetDetectedAnglePhi(AngPhi); + } + Ang_Phi_itr++; } - Energy_itr++; - if (checkSi) HitNumber++ ; - } - - // clear map for next event - EnergyHitMap ->clear(); - TimeHitMap ->clear(); - XHitMap ->clear(); - YHitMap ->clear(); - PosXHitMap ->clear(); - PosYHitMap ->clear(); - PosZHitMap ->clear(); - AngThetaHitMap ->clear(); - AngPhiHitMap ->clear(); - } + } // end if number of detector > 0 + + DetectorNumber_itr++; + } // end loop on detector multiplicity + + // clear map for next event + DetectorNumberHitMap -> clear(); + EnergyHitMap -> clear(); + TimeHitMap -> clear(); + XHitMap -> clear(); + YHitMap -> clear(); + PosXHitMap -> clear(); + PosYHitMap -> clear(); + PosZHitMap -> clear(); + AngThetaHitMap -> clear(); + AngPhiHitMap -> clear(); +} + + + +void AnnularS1::InitializeScorers() +{ + // Associate Scorer + m_Scorer = new G4MultiFunctionalDetector("ScorerAnnularS1"); + G4VPrimitiveScorer* DetNbr = new GENERALSCORERS::PSDetectorNumber("DetectorNumber", "S1Annular", 0); + G4VPrimitiveScorer* Energy = new GENERALSCORERS::PSEnergy("StripEnergy", "S1Annular", 0); + G4VPrimitiveScorer* TOF = new GENERALSCORERS::PSTOF("StripTime", "S1Annular", 0); + G4VPrimitiveScorer* InteractionCoordinatesX = new GENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","S1Annular", 0); + G4VPrimitiveScorer* InteractionCoordinatesY = new GENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","S1Annular", 0); + G4VPrimitiveScorer* InteractionCoordinatesZ = new GENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","S1Annular", 0); + G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new GENERALSCORERS::PSInteractionCoordinatesAngleTheta("InterCoordAngTheta","S1Annular", 0); + G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new GENERALSCORERS::PSInteractionCoordinatesAnglePhi("InterCoordAngPhi","S1Annular", 0); + G4VPrimitiveScorer* ThetaStripPosition = new AnnularS1ScorerThetaStripNumber("ThetaStripNumber", 0); + G4VPrimitiveScorer* PhiStripPosition = new AnnularS1ScorerPhiStripNumber("PhiStripNumber", 0); + + //and register it to the multifunctionnal detector + m_Scorer->RegisterPrimitive(DetNbr); + m_Scorer->RegisterPrimitive(Energy); + m_Scorer->RegisterPrimitive(TOF); + m_Scorer->RegisterPrimitive(ThetaStripPosition); + m_Scorer->RegisterPrimitive(PhiStripPosition); + m_Scorer->RegisterPrimitive(InteractionCoordinatesX); + m_Scorer->RegisterPrimitive(InteractionCoordinatesY); + m_Scorer->RegisterPrimitive(InteractionCoordinatesZ); + m_Scorer->RegisterPrimitive(InteractionCoordinatesAngleTheta); + m_Scorer->RegisterPrimitive(InteractionCoordinatesAnglePhi); + + // Add All Scorer to the Global Scorer Manager + G4SDManager::GetSDMpointer()->AddNewDetector(m_Scorer); } diff --git a/NPSimulation/src/AnnularS1Scorers.cc b/NPSimulation/src/AnnularS1Scorers.cc index 83abf5ec33286114a11ccd8312a3113e864052ed..3e566c8c91a741be8b51fc267d66aafadcc51edd 100644 --- a/NPSimulation/src/AnnularS1Scorers.cc +++ b/NPSimulation/src/AnnularS1Scorers.cc @@ -19,6 +19,7 @@ * * *****************************************************************************/ +#include "GeneralScorers.hh" #include "AnnularS1Scorers.hh" #include "G4UnitsTable.hh" #include "AnnularS1.hh" @@ -33,127 +34,12 @@ using namespace ANNULARS1; // scorer provide by G4 don't work this way but using a global ID for each event you should // not use those scorer with some G4 provided ones or being very carefull doing so. -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// Energy Scorer (deal with multiple particle hit) -AnnularS1ScorerEnergy::AnnularS1ScorerEnergy(G4String name, G4int depth) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ -} - -AnnularS1ScorerEnergy::~AnnularS1ScorerEnergy() -{ -} - -G4bool AnnularS1ScorerEnergy::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); - POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); - - G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; - G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->add(index, edep); - return TRUE; -} - -void AnnularS1ScorerEnergy::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void AnnularS1ScorerEnergy::EndOfEvent(G4HCofThisEvent*) -{ -} - -void AnnularS1ScorerEnergy::clear() -{ - EvtMap->clear(); -} - -void AnnularS1ScorerEnergy::DrawAll() -{ -} - -void AnnularS1ScorerEnergy::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; - G4cout << " PrimitiveScorer " << GetName() << G4endl; - G4cout << " Number of entries " << EvtMap->entries() << G4endl; - std::map<G4int, G4double*>::iterator itr = EvtMap->GetMap()->begin(); - for (; itr != EvtMap->GetMap()->end(); itr++) { - G4cout << " copy no.: " << itr->first - << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") - << G4endl; - } -} - - - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// Time Scorer -AnnularS1ScorerTime::AnnularS1ScorerTime(G4String name, G4int depth) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ -} - -AnnularS1ScorerTime::~AnnularS1ScorerTime() -{ -} - -G4bool AnnularS1ScorerTime::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - G4double TOF = aStep->GetPreStepPoint()->GetGlobalTime(); - G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; - G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, TOF); - return TRUE; -} - -void AnnularS1ScorerTime::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), - GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void AnnularS1ScorerTime::EndOfEvent(G4HCofThisEvent*) -{ -} - -void AnnularS1ScorerTime::clear() -{ - EvtMap->clear(); -} - -void AnnularS1ScorerTime::DrawAll() -{ -} - -void AnnularS1ScorerTime::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl ; - G4cout << " PrimitiveScorer " << GetName() << G4endl ; - G4cout << " Number of entries " << EvtMap->entries() << G4endl ; -} - - - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Strip position Scorer // Theta -AnnularS1ScorerThetaStripNumber::AnnularS1ScorerThetaStripNumber(G4String name, G4int depth, G4double StripPlaneSize, G4int NumberOfStrip) +AnnularS1ScorerThetaStripNumber::AnnularS1ScorerThetaStripNumber(G4String name, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { - m_StripPlaneSize = StripPlaneSize ; - m_NumberOfStrip = NumberOfStrip ; } AnnularS1ScorerThetaStripNumber::~AnnularS1ScorerThetaStripNumber() @@ -162,6 +48,9 @@ AnnularS1ScorerThetaStripNumber::~AnnularS1ScorerThetaStripNumber() G4bool AnnularS1ScorerThetaStripNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "S1Annular"); + // Hit position in the world frame G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); @@ -197,7 +86,7 @@ G4bool AnnularS1ScorerThetaStripNumber::ProcessHits(G4Step* aStep, G4TouchableHi G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, ThetaStripNumber); + EvtMap->set(DetNbr + index, ThetaStripNumber); return TRUE; } @@ -234,11 +123,9 @@ void AnnularS1ScorerThetaStripNumber::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Phi -AnnularS1ScorerPhiStripNumber::AnnularS1ScorerPhiStripNumber(G4String name, G4int depth, G4double StripPlaneSize, G4int NumberOfStrip) +AnnularS1ScorerPhiStripNumber::AnnularS1ScorerPhiStripNumber(G4String name, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { - m_StripPlaneSize = StripPlaneSize ; - m_NumberOfStrip = NumberOfStrip ; } AnnularS1ScorerPhiStripNumber::~AnnularS1ScorerPhiStripNumber() @@ -247,6 +134,9 @@ AnnularS1ScorerPhiStripNumber::~AnnularS1ScorerPhiStripNumber() G4bool AnnularS1ScorerPhiStripNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "S1Annular"); + // Hit position in the world frame G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); @@ -268,7 +158,7 @@ G4bool AnnularS1ScorerPhiStripNumber::ProcessHits(G4Step* aStep, G4TouchableHist G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, PhiStripNumber); + EvtMap->set(DetNbr + index, PhiStripNumber); return TRUE; } diff --git a/NPSimulation/src/DetectorConstruction.cc b/NPSimulation/src/DetectorConstruction.cc index 40f19eadb7511b1c660fe7e035f46dc7bad007da..391bf2f7e364e189107955159c93a9c5b73312d9 100644 --- a/NPSimulation/src/DetectorConstruction.cc +++ b/NPSimulation/src/DetectorConstruction.cc @@ -13,9 +13,9 @@ *---------------------------------------------------------------------------* * Decription: * * This Class manage the virtual detector and call their method. * - * Every time a new detector is added to the project, a few line in the * - * ReadConfigurationFile method are needed in order to detect the associate * - * token. * + * Every time a new detector is added to the project, a few line in the * + * ReadConfigurationFile method are needed in order to detect the associate * + * token. * *---------------------------------------------------------------------------* * Comment: * * * @@ -37,12 +37,14 @@ #include "G4RotationMatrix.hh" // Detector class +#include "DummyDetector.hh" #include "MUST2Array.hh" #include "GaspardTracker.hh" #include "AnnularS1.hh" #include "Target.hh" #include "ThinSi.hh" #include "Plastic.hh" + //Not G4 #include <cstdlib> #include<fstream> @@ -51,13 +53,14 @@ DetectorConstruction::DetectorConstruction() : world_log(0), world_phys(0) { - m_TargetRadius = 0 ; - m_TargetThickness = 0 ; + m_Target = 0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::~DetectorConstruction() -{} +{ + delete m_Target; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4VPhysicalVolume* DetectorConstruction::Construct() @@ -103,13 +106,13 @@ G4VPhysicalVolume* DetectorConstruction::Construct() void DetectorConstruction::AddDetector(VDetector* NewDetector) { // Add new detector to vector - m_Detectors.push_back(NewDetector) ; + m_Detectors.push_back(NewDetector); // Initialize Scorer NewDetector->InitializeScorers(); // Construct new detector - NewDetector->ConstructDetector(world_log) ; + NewDetector->ConstructDetector(world_log); // Add Detector to TTree - NewDetector->InitializeRootOutput() ; + NewDetector->InitializeRootOutput(); } @@ -120,13 +123,14 @@ void DetectorConstruction::ReadConfigurationFile(string Path) string LineBuffer; string DataBuffer; - /////////Boolean//////////////////// - bool MUST2 = false; - bool AddThinSi = false; - bool GeneralTarget = false; - bool GPDTracker = false; // Gaspard Tracker - bool S1 = false; + /////////Checking Boolean//////////////////// + bool cMUST2 = false; + bool cAddThinSi = false; + bool cGeneralTarget = false; + bool cGPDTracker = false; // Gaspard Tracker + bool cS1 = false; bool cPlastic = false; + bool cDummy = false; ////////////////////////////////////////////////////////////////////////////////////////// // added by Nicolas [07/05/09] string GlobalPath = getenv("NPTOOL"); @@ -148,11 +152,31 @@ void DetectorConstruction::ReadConfigurationFile(string Path) //Search for comment Symbol: % if (LineBuffer.compare(0, 1, "%") == 0) { /*Do Nothing*/;} + //////////////////////////////////////////// + /////// Search for a Dummy Detector //////// + //////////////////////////////////////////// + else if (LineBuffer.compare(0, 16, "TheDUMMYDetector") == 0 && cDummy == false) { + cDummy = true ; + G4cout << "//////// DUMMY DETECTOR ////////" << G4endl << G4endl ; + + // Instantiate the new array as a VDetector Object + VDetector* myDetector = new DUMMYDetector() ; + + // Read Position of detector + ConfigFile.close() ; + myDetector->ReadConfiguration(Path) ; + ConfigFile.open(Path.c_str()) ; + + // Add array to the VDetector Vector + AddDetector(myDetector) ; + } + + //////////////////////////////////////////// //////////// Search for Gaspard //////////// //////////////////////////////////////////// - else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && GPDTracker == false) { - GPDTracker = true ; + else if (LineBuffer.compare(0, 14, "GaspardTracker") == 0 && cGPDTracker == false) { + cGPDTracker = true ; G4cout << "//////// Gaspard Tracker ////////" << G4endl ; // Instantiate the new array as a VDetector Object @@ -170,8 +194,8 @@ void DetectorConstruction::ReadConfigurationFile(string Path) //////////////////////////////////////////// ///// Search for S1 Annular detector ////// //////////////////////////////////////////// - else if (LineBuffer.compare(0, 9, "AnnularS1") == 0 && S1 == false) { - S1 = true ; + else if (LineBuffer.compare(0, 9, "AnnularS1") == 0 && cS1 == false) { + cS1 = true ; G4cout << "//////// S1 Annular detector ////////" << G4endl << G4endl ; // Instantiate the new array as a VDetector Object @@ -189,8 +213,8 @@ void DetectorConstruction::ReadConfigurationFile(string Path) //////////////////////////////////////////// //////// Search for MUST2 Array //////// //////////////////////////////////////////// - else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && MUST2 == false) { - MUST2 = true ; + else if (LineBuffer.compare(0, 10, "MUST2Array") == 0 && cMUST2 == false) { + cMUST2 = true ; G4cout << "//////// MUST2 Array ////////" << G4endl << G4endl ; // Instantiate the new array as a VDetector Object @@ -208,8 +232,8 @@ void DetectorConstruction::ReadConfigurationFile(string Path) //////////////////////////////////////////// ////////// Search for ThinSi /////////// //////////////////////////////////////////// - else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && AddThinSi == false) { - AddThinSi = true ; + else if (LineBuffer.compare(0, 9, "AddThinSi") == 0 && cAddThinSi == false) { + cAddThinSi = true ; G4cout << "//////// Thin Si ////////" << G4endl << G4endl ; // Instantiate the new array as a VDetector Object @@ -247,26 +271,23 @@ void DetectorConstruction::ReadConfigurationFile(string Path) //////////// Search for Target ///////////// //////////////////////////////////////////// - else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && GeneralTarget == false) { - GeneralTarget = true ; + else if (LineBuffer.compare(0, 13, "GeneralTarget") == 0 && cGeneralTarget == false) { + cGeneralTarget = true ; G4cout << "////////// Target ///////////" << G4endl << G4endl ; // Instantiate the new array as a VDetector Objects - VDetector* myDetector = new Target() ; + VDetector* myDetector = new Target(); // Read Position and target specification - ConfigFile.close() ; - myDetector->ReadConfiguration(Path) ; - ConfigFile.open(Path.c_str()) ; + ConfigFile.close(); + myDetector->ReadConfiguration(Path); + ConfigFile.open(Path.c_str()); - m_TargetThickness = ((Target*)myDetector)->GetTargetThickness() ; - m_TargetRadius = ((Target*)myDetector)->GetTargetRadius() ; - m_TargetX = ((Target*)myDetector)->GetTargetX() ; - m_TargetY = ((Target*)myDetector)->GetTargetY() ; - m_TargetZ = ((Target*)myDetector)->GetTargetZ() ; + // Add Target to DetectorConstruction + m_Target = (Target*) myDetector; // Add target to the VDetector Vector - AddDetector(myDetector) ; + AddDetector(myDetector); } //Nothing understandable diff --git a/NPSimulation/src/DummyDetector.cc b/NPSimulation/src/DummyDetector.cc new file mode 100644 index 0000000000000000000000000000000000000000..0e4e17d8586e596d56a245c48bd8055fb29c3140 --- /dev/null +++ b/NPSimulation/src/DummyDetector.cc @@ -0,0 +1,473 @@ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : October 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * This class describe a simple Dummy Detector : * + * a simple cylinder of predifined material. user can choose to place it * + * where he want using spherical coordinate and choose between two naterial * + * * + * * + *---------------------------------------------------------------------------* + * Comment: * + * This detector respect all the NPTool convention in naming volume, * + * reading scorers and file. Use it as a basis for your own detector * + *****************************************************************************/ + +// C++ headers +#include <sstream> +#include <cmath> +#include <limits> +//G4 Geometry object +#include "G4Tubs.hh" + +//G4 sensitive +#include "G4SDManager.hh" +#include "G4MultiFunctionalDetector.hh" + +//G4 various object +#include "G4MaterialTable.hh" +#include "G4Element.hh" +#include "G4ElementTable.hh" +#include "G4Transform3D.hh" +#include "G4PVPlacement.hh" +#include "G4VisAttributes.hh" +#include "G4Colour.hh" + +// NPTool header +#include "DummyDetector.hh" +#include "GeneralScorers.hh" +#include "RootOutput.h" +using namespace GENERALSCORERS ; +// CLHEP header +#include "CLHEP/Random/RandGauss.h" + +using namespace std; +using namespace CLHEP; + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +namespace DUMMYDETECTOR +{ + // Energy and time Resolution + const G4double ResoTime = 4.2 ;// = 10ns of Resolution // Unit is MeV/2.35 + const G4double ResoEnergy = 5.0 ;// Resolution in % + +} + +using namespace DUMMYDETECTOR ; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +// DUMMYDetector Specific Method +DUMMYDetector::DUMMYDetector() +{ + InitializeMaterial(); + m_Event = new TDUMMYDetectorData() ; +} + +DUMMYDetector::~DUMMYDetector() +{ + delete m_MaterialDUMMYDetector_material1 ; + delete m_MaterialDUMMYDetector_material2 ; + delete m_DUMMYDetectorScorer ; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void DUMMYDetector::AddDUMMYDetector( G4double R , + G4double Theta , + G4double Phi , + G4double DUMMYDetectorThickness , + G4double DUMMYDetectorRadius , + G4String Scintillator ) +{ + + m_R.push_back(R) ; + m_Theta.push_back(Theta) ; + m_Phi.push_back(Phi) ; + m_DUMMYDetectorThickness.push_back(DUMMYDetectorThickness) ; + m_DUMMYDetectorRadius.push_back(DUMMYDetectorRadius) ; + m_Scintillator.push_back(Scintillator) ; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +// Virtual Method of VDetector class + + +// Read stream at Configfile to pick-up parameters of detector (Position,...) +// Called in DetecorConstruction::ReadDetextorConfiguration Method +void DUMMYDetector::ReadConfiguration(string Path) +{ + ifstream ConfigFile ; + ConfigFile.open(Path.c_str()) ; + string LineBuffer ; + string DataBuffer ; + + G4double Theta = 0 , Phi = 0 , R = 0 , Thickness = 0 , Radius = 0 ; + G4String Scintillator ; + + bool check_Theta = false ; + bool check_Phi = false ; + bool check_R = false ; + bool check_Thickness = false ; + bool check_Radius = false ;\ + bool check_Scintillator = false ; + bool ReadingStatus = false ; + + + while (!ConfigFile.eof()) + { + + getline(ConfigFile, LineBuffer); + + // If line is a Start Up DUMMYDetector bloc, Reading toggle to true + if (LineBuffer.compare(0, 13, "DUMMYDetector") == 0) + { + G4cout << "///" << G4endl ; + G4cout << "Dummy Module found: " << G4endl ; + ReadingStatus = true ; + + } + + // Else don't toggle to Reading Block Status + else ReadingStatus = false ; + + // Reading Block + while(ReadingStatus) + { + // Pickup Next Word + ConfigFile >> DataBuffer ; + + // Comment Line + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} + + // Finding another telescope (safety), toggle out + else if (DataBuffer.compare(0, 13, "DUMMYDetector") == 0) { + cout << "WARNING: Another Detector is find before standard sequence of Token, Error may occured in Telecope definition" << endl ; + ReadingStatus = false ; + } + + //Angle method + else if (DataBuffer.compare(0, 6, "THETA=") == 0) { + check_Theta = true; + ConfigFile >> DataBuffer ; + Theta = atof(DataBuffer.c_str()) ; + Theta = Theta * deg; + cout << "Theta: " << Theta / deg << endl; + } + + else if (DataBuffer.compare(0, 4, "PHI=") == 0) { + check_Phi = true; + ConfigFile >> DataBuffer ; + Phi = atof(DataBuffer.c_str()) ; + Phi = Phi * deg; + cout << "Phi: " << Phi / deg << endl; + } + + else if (DataBuffer.compare(0, 2, "R=") == 0) { + check_R = true; + ConfigFile >> DataBuffer ; + R = atof(DataBuffer.c_str()) ; + R = R * mm; + cout << "R: " << R/mm << endl; + } + + else if (DataBuffer.compare(0, 7, "Radius=") == 0) { + check_Radius = true; + ConfigFile >> DataBuffer ; + Radius = atof(DataBuffer.c_str()) ; + Radius = Radius * mm; + cout << "DUMMYDetector Radius: " << Radius/mm << endl; + } + + else if (DataBuffer.compare(0, 10, "Thickness=") == 0) { + check_Thickness = true; + ConfigFile >> DataBuffer ; + Thickness = atof(DataBuffer.c_str()) ; + Thickness = Thickness * mm; + cout << "DUMMYDetector Thickness: " << Thickness/mm << endl; + } + + else if (DataBuffer.compare(0, 13, "Material=") == 0) { + check_Scintillator = true ; + ConfigFile >> DataBuffer ; + Scintillator = DataBuffer ; + cout << "DUMMYDetector material type: " << Scintillator << endl; + } + + /////////////////////////////////////////////////// + // If no Detector Token and no comment, toggle out + else + {ReadingStatus = false; G4cout << "Wrong Token Sequence: Getting out " << DataBuffer << G4endl ;} + + ///////////////////////////////////////////////// + // If All necessary information there, toggle out + + if ( check_Theta && check_Phi && check_R && check_Thickness && check_Radius && check_Scintillator) + { + AddDUMMYDetector( R , + Theta , + Phi , + Thickness , + Radius , + Scintillator ); + + // Reinitialisation of Check Boolean + + check_Theta = false ; + check_Phi = false ; + check_R = false ; + check_Thickness = false ; + check_Radius = false ; + check_Scintillator = false ; + ReadingStatus = false ; + cout << "///"<< endl ; + } + + } + } + +} + +// Construct detector and inialise sensitive part. +// Called After DetecorConstruction::AddDetector Method +void DUMMYDetector::ConstructDetector(G4LogicalVolume* world) +{ + G4ThreeVector Det_pos = G4ThreeVector(0, 0, 0) ; + + for (unsigned short i = 0 ; i < m_R.size() ; i++) + { + G4double wX = m_R[i] * sin(m_Theta[i] ) * cos(m_Phi[i] ) ; + G4double wY = m_R[i] * sin(m_Theta[i] ) * sin(m_Phi[i] ) ; + G4double wZ = m_R[i] * cos(m_Theta[i] ) ; + + Det_pos = G4ThreeVector(wX, wY, wZ) ; +// G4LogicalVolume* logicDUMMYDetector = NULL ; + + VolumeMaker(Det_pos , i+1, world) ; + } + +} + +void DUMMYDetector::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* world) + { + //////////////////////////////////////////////////////////////// + ////////////// Starting Volume Definition ////////////////////// + //////////////////////////////////////////////////////////////// + G4PVPlacement* PVPBuffer ; + + // Name of the module + std::ostringstream DetectorNumber ; + DetectorNumber << DetNumber ; + G4String Name = "DUMMYDetector" + DetectorNumber.str() ; + + int i = DetNumber-1; + + G4Material* DUMMYDetectorMaterial ; + + if(m_Scintillator[i] == "material1" ) DUMMYDetectorMaterial = m_MaterialDUMMYDetector_material1 ; + else if(m_Scintillator[i] == "material2" ) DUMMYDetectorMaterial = m_MaterialDUMMYDetector_material2 ; + else { + G4cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl ; + G4cout << "WARNING: Material Not found, default material set : material1" << endl ; + G4cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl ; + DUMMYDetectorMaterial = m_MaterialDUMMYDetector_material1; + } + + + // Definition of the volume containing the sensitive detector + if(m_DUMMYDetectorThickness[i]>0 && m_DUMMYDetectorRadius[i]>0) + { + G4Tubs* solidDUMMYDetector = new G4Tubs( Name , + 0 , + m_DUMMYDetectorRadius[i] , + m_DUMMYDetectorThickness[i]/2 , + 0*deg , + 360*deg ); + + G4LogicalVolume* logicDUMMYDetector = new G4LogicalVolume(solidDUMMYDetector, DUMMYDetectorMaterial, Name+ "_Scintillator", 0, 0, 0); + logicDUMMYDetector->SetSensitiveDetector(m_DUMMYDetectorScorer); + + G4VisAttributes* PlastVisAtt = new G4VisAttributes(G4Colour(0.0, 0.0, 0.9)) ; + logicDUMMYDetector->SetVisAttributes(PlastVisAtt) ; + + + + PVPBuffer = new G4PVPlacement( 0 , + Det_pos , + logicDUMMYDetector , + Name + "_Scintillator" , + world , + false , + 0 ); + + + + } + } + +// Add Detector branch to the EventTree. +// Called After DetecorConstruction::AddDetector Method +void DUMMYDetector::InitializeRootOutput() +{ + RootOutput *pAnalysis = RootOutput::getInstance(); + TTree *pTree = pAnalysis->GetTree(); + pTree->Branch("DUMMYDetector", "TDUMMYDetectorData", &m_Event) ; +} + +// Read sensitive part and fill the Root tree. +// Called at in the EventAction::EndOfEventAvtion +void DUMMYDetector::ReadSensitive(const G4Event* event) +{ + G4String DetectorNumber ; + m_Event->Clear() ; + +////////////////////////////////////////////////////////////////////////////////////// +//////////////////////// Used to Read Event Map of detector ////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + + std::map<G4int, G4int*>::iterator DetectorNumber_itr ; + std::map<G4int, G4double*>::iterator Energy_itr ; + std::map<G4int, G4double*>::iterator Time_itr ; + + G4THitsMap<G4int>* DetectorNumberHitMap ; + G4THitsMap<G4double>* EnergyHitMap ; + G4THitsMap<G4double>* TimeHitMap ; + +////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////// + + // Read the Scorer associate to the Silicon Strip + + //Detector Number + G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("DUMMYDetectorScorer/DUMMYDetectorNumber") ; + DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; + DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ; + + //Energy + G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("DUMMYDetectorScorer/Energy") ; + EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; + Energy_itr = EnergyHitMap->GetMap()->begin() ; + + //Time of Flight + G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("DUMMYDetectorScorer/Time") ; + TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; + Time_itr = TimeHitMap->GetMap()->begin() ; + + G4int sizeN = DetectorNumberHitMap->entries() ; + G4int sizeE = EnergyHitMap->entries() ; + G4int sizeT = TimeHitMap->entries() ; + + // Loop on DUMMYDetector Number + for (G4int l = 0 ; l < sizeN ; l++) { + G4int N = *(DetectorNumber_itr->second) ; + G4int NTrackID = DetectorNumber_itr->first - N ; + + + if (N > 0) { + + m_Event->SetDUMMYDetectorNumber(N) ; + + // Energy + Energy_itr = EnergyHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeE ; h++) { + G4int ETrackID = Energy_itr->first - N ; + G4double E = *(Energy_itr->second) ; + + if (ETrackID == NTrackID) { + m_Event->SetEnergy(RandGauss::shoot(E, E*ResoEnergy/100./2.35)) ; + } + + Energy_itr++; + } + + + // Time + Time_itr = TimeHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeT ; h++) { + G4int TTrackID = Time_itr->first - N ; + G4double T = *(Time_itr->second) ; + + if (TTrackID == NTrackID) { + m_Event->SetTime(RandGauss::shoot(T, ResoTime)) ; + } + + Time_itr++; + } + + } + + DetectorNumber_itr++; + } + + // clear map for next event + TimeHitMap ->clear() ; + DetectorNumberHitMap ->clear() ; + EnergyHitMap ->clear() ; + +} + +//////////////////////////////////////////////////////////////// +void DUMMYDetector::InitializeMaterial() + { + + //////////////////////////////////////////////////////////////// + /////////////////Element Definition /////////////////////////// + //////////////////////////////////////////////////////////////// + G4String symbol ; + G4double density = 0. , a = 0, z = 0 ; + G4int ncomponents = 0, natoms = 0, fractionmass = 0 ; + + // for DUMMYDetector + G4Element* H = new G4Element("Hydrogen" , symbol = "H" , z = 1 , a = 1.01 * g / mole); + G4Element* C = new G4Element("Carbon" , symbol = "C" , z = 6 , a = 12.011 * g / mole); + G4Element* Pb = new G4Element("Lead" , symbol = "Pb" , z = 82 , a = 207.2 * g / mole); + //////////////////////////////////////////////////////////////// + /////////////////Material Definition /////////////////////////// + //////////////////////////////////////////////////////////////// + + + // DUMMYDetector BC-400 + density = 1.032 * g / cm3; + m_MaterialDUMMYDetector_material1 = new G4Material("DUMMYDetector_material1", density, ncomponents = 2); + m_MaterialDUMMYDetector_material1->AddElement(H , natoms = 10); + m_MaterialDUMMYDetector_material1->AddElement(C , natoms = 9); + + // DUMMYDetector BC-452 Pb 2% + density = 1.05 * g / cm3; + m_MaterialDUMMYDetector_material2 = new G4Material("DUMMYDetector_material2", density, ncomponents = 3); + m_MaterialDUMMYDetector_material2->AddElement(H , natoms = 10); + m_MaterialDUMMYDetector_material2->AddElement(C , natoms = 9); + m_MaterialDUMMYDetector_material2->AddElement(Pb , fractionmass=2*perCent); + + } + +//////////////////////////////////////////////////////////////// +void DUMMYDetector::InitializeScorers() + { + m_DUMMYDetectorScorer = new G4MultiFunctionalDetector("DUMMYDetectorScorer") ; + G4SDManager::GetSDMpointer()->AddNewDetector(m_DUMMYDetectorScorer); + + G4VPrimitiveScorer* DetNbr = new PSDetectorNumber("DUMMYDetectorNumber","DUMMYDetector", 0) ; + G4VPrimitiveScorer* Energy = new PSEnergy("Energy","DUMMYDetector", 0) ; + G4VPrimitiveScorer* Time = new PSTOF("Time","DUMMYDetector", 0) ; + + //and register it to the multifunctionnal detector + m_DUMMYDetectorScorer->RegisterPrimitive(DetNbr) ; + m_DUMMYDetectorScorer->RegisterPrimitive(Energy) ; + m_DUMMYDetectorScorer->RegisterPrimitive(Time) ; + + + } +//////////////////////////////////////////////////////////////// diff --git a/NPSimulation/src/EventAction.cc b/NPSimulation/src/EventAction.cc index bba98dd22f7fbad02af7d612dc0336bb2c7f0e87..c370fd39479cd49197bf418c082be2bff02cb6c3 100644 --- a/NPSimulation/src/EventAction.cc +++ b/NPSimulation/src/EventAction.cc @@ -53,7 +53,8 @@ EventAction::~EventAction() void EventAction::BeginOfEventAction(const G4Event* event) { if ((event->GetEventID() + 1) % m_printModulo == 0) - G4cout << "Event: " << event->GetEventID() + 1 << G4endl ; +// G4cout << "Event: " << event->GetEventID() + 1 << G4endl; + G4cout << "\rEvent: " << event->GetEventID() + 1 << flush; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/NPSimulation/src/EventGeneratorBeam.cc b/NPSimulation/src/EventGeneratorBeam.cc index 80550358d291f08d73c13878c1eba3d97df55779..a8c8db2784d1220bd6c98a6e5744e76339d8e86f 100644 --- a/NPSimulation/src/EventGeneratorBeam.cc +++ b/NPSimulation/src/EventGeneratorBeam.cc @@ -19,6 +19,10 @@ * * * * *****************************************************************************/ + +// C++ +#include <limits> + // G4 header #include "G4ParticleTable.hh" @@ -37,11 +41,26 @@ using namespace CLHEP; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventGeneratorBeam::EventGeneratorBeam() { -m_InitConditions = new TInitialConditions() ; + m_InitConditions = new TInitialConditions(); + m_Target = 0; } + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventGeneratorBeam::~EventGeneratorBeam() -{} +{ + delete m_InitConditions; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void EventGeneratorBeam::SetTarget(Target* Target) + { + if(Target!=0) + { + m_Target = Target; + m_Target->WriteDEDXTable(m_particle ,0, m_BeamEnergy); + } + + } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void EventGeneratorBeam::ReadConfiguration(string Path) { @@ -86,7 +105,7 @@ void EventGeneratorBeam::ReadConfiguration(string Path) ReactionFile >> DataBuffer; //Search for comment Symbol % - if (DataBuffer.compare(0, 1, "%") == 0) {/*Do Nothing*/;} + if (DataBuffer.compare(0, 1, "%") == 0) { ReactionFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} else if (DataBuffer.compare(0, 10, "ParticleZ=") == 0) { check_Z = true ; @@ -166,56 +185,49 @@ void EventGeneratorBeam::ReadConfiguration(string Path) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void EventGeneratorBeam::GenerateEvent(G4Event* anEvent, G4ParticleGun* particleGun) { + //--------------write the DeDx Table ------------------- + if(m_Target!=0) + m_Target->WriteDEDXTable(m_particle ,0, m_BeamEnergy+4*m_BeamEnergySpread); + + m_InitConditions->Clear(); - // Vertex position and beam angle - G4double x0 = 1000 * cm ; - G4double y0 = 1000 * cm ; - G4double Beam_thetaX = 0 ; - G4double Beam_phiY = 0 ; - //shoot inside the target with correlated angle - if (m_TargetRadius != 0) - { - while (sqrt(x0*x0 + y0*y0) > m_TargetRadius) - { - RandomGaussian2D(0 , 0 , m_SigmaX , m_SigmaThetaX , x0 , Beam_thetaX ); - RandomGaussian2D(0 , 0 , m_SigmaY , m_SigmaPhiY , y0 , Beam_phiY ); - } - } - - else - { - RandomGaussian2D( 0 , 0 , 0 , m_SigmaThetaX , x0 , Beam_thetaX ); - RandomGaussian2D( 0 , 0 , 0 , m_SigmaPhiY , y0 , Beam_phiY ); - } - - m_InitConditions->SetICIncidentEmittanceTheta(Beam_thetaX / deg); - m_InitConditions->SetICIncidentEmittancePhi(Beam_phiY / deg); - - - // Calculate Angle in spherical coordinate, passing by the direction vector dir - G4double Xdir = cos( pi/2. - Beam_thetaX ) ; - G4double Ydir = cos( pi/2. - Beam_phiY ) ; - G4double Zdir = sin( pi/2. - Beam_thetaX ) + sin( pi/2. - Beam_phiY) ; - - G4double Beam_theta = acos ( Zdir / sqrt( Xdir*Xdir + Ydir*Ydir + Zdir*Zdir ) ); - G4double Beam_phi = atan2( Ydir , Xdir ); - - //must shoot inside the target. - G4double z0 = (-m_TargetThickness / 2 + CLHEP::RandFlat::shoot() * m_TargetThickness); + /////////////////////////////////////////////////////////////////////// + ///// Calculate the incident beam direction as well as the vertex ///// + ///// of interaction in target and Energy Loss of the beam within ///// + ///// the target. ///// + /////////////////////////////////////////////////////////////////////// + G4ThreeVector InterCoord; + + G4double Beam_thetaX = 0, Beam_phiY = 0; + G4double Beam_theta = 0, Beam_phi = 0; + G4double FinalBeamEnergy = 0 ; + G4double InitialBeamEnergy = RandGauss::shoot(m_BeamEnergy, m_BeamEnergySpread); + + m_Target->CalculateBeamInteraction( 0, m_SigmaX, 0, m_SigmaThetaX, + 0, m_SigmaY, 0, m_SigmaPhiY, + InitialBeamEnergy, + m_particle, + InterCoord, Beam_thetaX, Beam_phiY, + Beam_theta, Beam_phi, + FinalBeamEnergy); + + // write vertex position to ROOT file + G4double x0 = InterCoord.x(); + G4double y0 = InterCoord.y(); + G4double z0 = InterCoord.z(); + m_InitConditions->SetICPositionX(x0); + m_InitConditions->SetICPositionY(y0); + m_InitConditions->SetICPositionZ(z0); + // write emittance angles to ROOT file + m_InitConditions->SetICIncidentEmittanceTheta(Beam_thetaX / deg); + m_InitConditions->SetICIncidentEmittancePhi(Beam_phiY / deg); - // Move to the target - x0 += m_TargetX ; - y0 += m_TargetY ; - z0 += m_TargetZ ; - // Store initial value m_InitConditions->SetICIncidentAngleTheta(Beam_theta / deg); m_InitConditions->SetICIncidentAnglePhi(Beam_phi / deg); - m_InitConditions->SetICPositionX(x0); - m_InitConditions->SetICPositionY(y0); - m_InitConditions->SetICPositionZ(z0); + ////////////////////////////////////////////////// /////Now define everything for light particle///// ////////////////////////////////////////////////// diff --git a/NPSimulation/src/EventGeneratorIsotropic.cc b/NPSimulation/src/EventGeneratorIsotropic.cc index c60482c0471de284466993cd5090327195323136..b2814747a18ab3633cd2e20d5b7071001c05f624 100644 --- a/NPSimulation/src/EventGeneratorIsotropic.cc +++ b/NPSimulation/src/EventGeneratorIsotropic.cc @@ -19,6 +19,9 @@ * * * * *****************************************************************************/ +// C++ +#include<limits> + // G4 headers #include "G4ParticleTable.hh" @@ -99,7 +102,7 @@ void EventGeneratorIsotropic::ReadConfiguration(string Path) ReactionFile >> DataBuffer; //Search for comment Symbol % - if (DataBuffer.compare(0, 1, "%") == 0) {/*Do Nothing*/;} + if (DataBuffer.compare(0, 1, "%") == 0) { ReactionFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} else if (DataBuffer.compare(0, 10, "EnergyLow=") == 0) { check_EnergyLow = true ; diff --git a/NPSimulation/src/EventGeneratorTransfert.cc b/NPSimulation/src/EventGeneratorTransfert.cc index ac23197ec7b61b62d0c3cb0cb81c66e63c10242f..e30585f7f0bace34e7f3eeea56fda8ba6e05d8da 100644 --- a/NPSimulation/src/EventGeneratorTransfert.cc +++ b/NPSimulation/src/EventGeneratorTransfert.cc @@ -24,6 +24,7 @@ // C++ headers #include <iostream> #include <fstream> +#include <limits> // G4 header defining G4 types #include "globals.hh" @@ -48,19 +49,33 @@ using namespace CLHEP; EventGeneratorTransfert::EventGeneratorTransfert() { //------------- Default Constructor ------------- - m_InitConditions = new TInitialConditions() ; - m_Reaction = new Reaction() ; - - m_BeamEnergy = 0; - m_BeamEnergySpread = 0; - m_SigmaX = 0; - m_SigmaY = 0; - m_SigmaThetaX = 0; - m_SigmaPhiY=0 ; - m_ShootLight = 0; - m_ShootHeavy = 0; + m_InitConditions = new TInitialConditions(); + m_Reaction = new Reaction(); + m_Target = 0; + + m_BeamEnergy = 0; + m_BeamEnergySpread = 0; + m_SigmaX = 0; + m_SigmaY = 0; + m_SigmaThetaX = 0; + m_SigmaPhiY = 0; + m_ShootLight = 0; + m_ShootHeavy = 0; } + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void EventGeneratorTransfert::SetTarget(Target* Target) +{ + if (Target != 0) { + m_Target = Target; + G4int LightZ = m_Reaction->GetNucleus3()->GetZ(); + G4int LightA = m_Reaction->GetNucleus3()->GetA(); + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZ,LightA, 0.) ,0, m_BeamEnergy); + } +} + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventGeneratorTransfert::~EventGeneratorTransfert() { @@ -173,7 +188,7 @@ while(ReadingStatus){ ReactionFile >> DataBuffer; //Search for comment Symbol % - if (DataBuffer.compare(0, 1, "%") == 0) {/* Do Nothing */;} + if (DataBuffer.compare(0, 1, "%") == 0) { ReactionFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} else if (DataBuffer.compare(0, 5, "Beam=") == 0) { check_Beam = true ; @@ -313,56 +328,87 @@ while(ReadingStatus){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* particleGun) { + // If first time, write the DeDx table + if(anEvent->GetEventID()==0) + { + //-------------- Before living, wrtie the DeDx Table ------------------- + + G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ; + G4int LightAx = m_Reaction->GetNucleus3()->GetA() ; + + G4int BeamZx = m_Reaction->GetNucleus1()->GetZ() ; + G4int BeamAx = m_Reaction->GetNucleus1()->GetA() ; + + if(m_Target!=0) + { + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(BeamZx,BeamAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + } + + } + + + // Clear contents of Precedent event (now stored in ROOTOutput) m_InitConditions->Clear(); ////////////////////////////////////////////////// //////Define the kind of particle to shoot//////// ////////////////////////////////////////////////// + // Light G4int LightZ = m_Reaction->GetNucleus3()->GetZ() ; G4int LightA = m_Reaction->GetNucleus3()->GetA() ; G4ParticleDefinition* LightName = G4ParticleTable::GetParticleTable()->GetIon(LightZ, LightA, 0.); + // Recoil G4int HeavyZ = m_Reaction->GetNucleus4()->GetZ() ; G4int HeavyA = m_Reaction->GetNucleus4()->GetA() ; G4ParticleDefinition* HeavyName = G4ParticleTable::GetParticleTable()->GetIon(HeavyZ, HeavyA, m_Reaction->GetExcitation()*MeV); - // Vertex position and beam angle inte world frame - G4double x0 = 1000 * cm ; - G4double y0 = 1000 * cm ; - G4double Beam_thetaX = 0 ; - G4double Beam_phiY = 0 ; + // Beam + G4int BeamZ = m_Reaction->GetNucleus1()->GetZ(); + G4int BeamA = m_Reaction->GetNucleus1()->GetA(); + G4ParticleDefinition* BeamName = G4ParticleTable::GetParticleTable()->GetIon(BeamZ, BeamA, 0); + + /////////////////////////////////////////////////////////////////////// + ///// Calculate the incident beam direction as well as the vertex ///// + ///// of interaction in target and Energy Loss of the beam within ///// + ///// the target. ///// + /////////////////////////////////////////////////////////////////////// + G4ThreeVector InterCoord; - //shoot inside the target with correlated angle - if (m_TargetRadius != 0) { - while (sqrt(x0*x0 + y0*y0) > m_TargetRadius) { - RandomGaussian2D(0, 0, m_SigmaX, m_SigmaThetaX, x0, Beam_thetaX); - RandomGaussian2D(0, 0, m_SigmaY, m_SigmaPhiY , y0, Beam_phiY ); - } - } - else { - RandomGaussian2D(0,0,0,m_SigmaThetaX,x0,Beam_thetaX); - RandomGaussian2D(0,0,0,m_SigmaPhiY ,y0,Beam_phiY ); - } + G4double Beam_thetaX = 0, Beam_phiY = 0; + G4double Beam_theta = 0, Beam_phi = 0; + G4double FinalBeamEnergy = 0 ; + G4double InitialBeamEnergy = RandGauss::shoot(m_BeamEnergy, m_BeamEnergySpread); + + m_Target->CalculateBeamInteraction(0, m_SigmaX, 0, m_SigmaThetaX, + 0, m_SigmaY, 0, m_SigmaPhiY, + InitialBeamEnergy, + BeamName, + InterCoord, Beam_thetaX, Beam_phiY, + Beam_theta, Beam_phi, + FinalBeamEnergy); + + m_Reaction->SetBeamEnergy(FinalBeamEnergy); + m_InitConditions->SetICIncidentEnergy(FinalBeamEnergy / MeV); + + // write vertex position to ROOT file + G4double x0 = InterCoord.x(); + G4double y0 = InterCoord.y(); + G4double z0 = InterCoord.z(); + m_InitConditions->SetICPositionX(x0);// + m_InitConditions->SetICPositionY(y0);// + m_InitConditions->SetICPositionZ(z0);// // write emittance angles to ROOT file m_InitConditions->SetICIncidentEmittanceTheta(Beam_thetaX / deg); m_InitConditions->SetICIncidentEmittancePhi(Beam_phiY / deg); - // Calculate Angle in spherical coordinate, passing by the direction vector dir - G4double Xdir = cos(pi/2. - Beam_thetaX); - G4double Ydir = cos(pi/2. - Beam_phiY ); - G4double Zdir = sin(pi/2. - Beam_thetaX) + sin(pi/2. - Beam_phiY); - - G4double Beam_theta = acos(Zdir / sqrt(Xdir*Xdir + Ydir*Ydir + Zdir*Zdir)) * rad; - G4double Beam_phi = atan2(Ydir, Xdir) * rad; - if (Beam_phi < 0) Beam_phi += 2*pi; - if (Beam_theta < 1e-6) Beam_phi = 0; - // write angles to ROOT file m_InitConditions->SetICIncidentAngleTheta(Beam_theta / deg); m_InitConditions->SetICIncidentAnglePhi(Beam_phi / deg); @@ -386,11 +432,7 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa ///// Angles for emitted particles following Cross Section ////// ///// Angles are in the beam frame ////// ///////////////////////////////////////////////////////////////// - // Beam incident energy - G4double NominalBeamEnergy = m_BeamEnergy; - G4double IncidentBeamEnergy = RandGauss::shoot(NominalBeamEnergy, m_BeamEnergySpread / 2.35); - m_Reaction->SetBeamEnergy(IncidentBeamEnergy); - m_InitConditions->SetICIncidentEnergy(IncidentBeamEnergy / MeV); + // Angles RandGeneral CrossSectionShoot(m_Reaction->GetCrossSection(), m_Reaction->GetCrossSectionSize()); G4double ThetaCM = CrossSectionShoot.shoot() * (180*deg); @@ -421,18 +463,6 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa // write angles/energy to ROOT file m_InitConditions->SetICEmittedAngleThetaLabIncidentFrame(ThetaLight / deg); m_InitConditions->SetICEmittedEnergy(EnergyLight/MeV); - //must shoot inside the target. - G4double z0 = (-m_TargetThickness / 2 + RandFlat::shoot() * m_TargetThickness); - - // Move to the target - x0 += m_TargetX ; - y0 += m_TargetY ; - z0 += m_TargetZ ; - - // write vertex position to ROOT file - m_InitConditions->SetICPositionX(x0); - m_InitConditions->SetICPositionY(y0); - m_InitConditions->SetICPositionZ(z0); ////////////////////////////////////////////////// ///////// Set up everything for shooting ///////// @@ -455,16 +485,13 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa // write angles in ROOT file m_InitConditions->SetICEmittedAngleThetaLabWorldFrame(theta_world / deg); m_InitConditions->SetICEmittedAnglePhiWorldFrame(phi_world / deg); - // tests -// G4cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" << G4endl; -// G4cout << "cinematique dans ref world : " << G4endl; -// G4cout << "\t" << momentum_kine_world << G4endl; + //Set the gun to shoot particleGun->SetParticleMomentumDirection(momentum_kine_world); //Shoot the light particle particleGun->GeneratePrimaryVertex(anEvent); } - if (m_ShootHeavy) { // Case of recoil particle + if (m_ShootHeavy) { // Case of heavy particle // Particle type particleGun->SetParticleDefinition(HeavyName); // Particle energy @@ -491,36 +518,30 @@ void EventGeneratorTransfert::GenerateEvent(G4Event* anEvent , G4ParticleGun* pa //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void EventGeneratorTransfert::SetEverything(string name1 , // Beam nuclei - string name2 , // Target nuclei - string name3 , // Product of reaction - string name4 , // Product of reaction - double BeamEnergy , // Beam Energy - double ExcitationEnergy , // Excitation of Heavy Nuclei - double BeamEnergySpread , - double SigmaX , - double SigmaY , - double SigmaThetaX , - double SigmaPhiY , - bool ShootLight , - bool ShootHeavy , - string Path) +void EventGeneratorTransfert::SetEverything(string name1, // Beam nuclei + string name2, // Target nuclei + string name3, // Product of reaction + string name4, // Product of reaction + double BeamEnergy, // Beam Energy + double ExcitationEnergy, // Excitation of Heavy Nuclei + double BeamEnergySpread, + double SigmaX, + double SigmaY, + double SigmaThetaX, + double SigmaPhiY, + bool ShootLight, + bool ShootHeavy, + string Path) { - m_Reaction = new Reaction( name1 , - name2 , - name3 , - name4 , - BeamEnergy , - ExcitationEnergy , - Path ); + m_Reaction = new Reaction(name1, name2, name3, name4, BeamEnergy, ExcitationEnergy, Path); - m_BeamEnergy = BeamEnergy ; - m_BeamEnergySpread = BeamEnergySpread ; - m_SigmaX = SigmaX ; - m_SigmaY = SigmaY ; - m_SigmaThetaX = SigmaThetaX ; - m_SigmaPhiY = SigmaPhiY ; - m_ShootLight = ShootLight ; - m_ShootHeavy = ShootHeavy ; + m_BeamEnergy = BeamEnergy; + m_BeamEnergySpread = BeamEnergySpread; + m_SigmaX = SigmaX; + m_SigmaY = SigmaY; + m_SigmaThetaX = SigmaThetaX; + m_SigmaPhiY = SigmaPhiY; + m_ShootLight = ShootLight; + m_ShootHeavy = ShootHeavy; } - + diff --git a/NPSimulation/src/EventGeneratorTransfertToResonance.cc b/NPSimulation/src/EventGeneratorTransfertToResonance.cc index 500f81a12976323bb12185a0ef53c0798dd98ea4..270f2eadae742b4d751c5211cbee822406692ce2 100644 --- a/NPSimulation/src/EventGeneratorTransfertToResonance.cc +++ b/NPSimulation/src/EventGeneratorTransfertToResonance.cc @@ -14,17 +14,18 @@ * Decription: * * This event Generator is used to simulated two body TransfertReaction. * * A Phase Space calculation is then performed to decay the Heavy product. * - * The TGenPhaseSpace from ROOT is used to calculate a phase space decay * - * with flat distribution * + * The TGenPhaseSpace from ROOT is used to calculate a phase space decay * + * with flat distribution * *---------------------------------------------------------------------------* * Comment: * - * * + * * * * *****************************************************************************/ // C++ headers #include <iostream> #include <fstream> +#include <limits> // G4 header defining G4 types #include "globals.hh" @@ -56,6 +57,7 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance() //------------- Default Constructor ------------- m_InitConditions = new TInitialConditions() ; m_Reaction = new Reaction() ; + m_Target = new Target(); m_SigmaX = 0 ; m_SigmaY = 0 ; m_SigmaThetaX = 0 ; @@ -67,11 +69,16 @@ EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventGeneratorTransfertToResonance::~EventGeneratorTransfertToResonance() { - //------------- Default Destructor ------------ + //------------- Default Destructor ------------ delete m_InitConditions; delete m_Reaction ; } - +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void EventGeneratorTransfertToResonance::SetTarget(Target* Target) + { + if(Target!=0) + m_Target = Target; + } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventGeneratorTransfertToResonance::EventGeneratorTransfertToResonance( string name1 , string name2 , @@ -189,7 +196,7 @@ while(ReadingStatus){ ReactionFile >> DataBuffer; //Search for comment Symbol % - if (DataBuffer.compare(0, 1, "%") == 0) {/* Do Nothing */;} + if (DataBuffer.compare(0, 1, "%") == 0) { ReactionFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} else if (DataBuffer.compare(0, 5, "Beam=") == 0) { check_Beam = true ; @@ -257,14 +264,14 @@ while(ReadingStatus){ else if (DataBuffer.compare(0, 19, "SigmaThetaX=") == 0) { check_EmmitanceTheta = true ; ReactionFile >> DataBuffer; - SigmaThetaX = atof(DataBuffer.c_str()) * rad; + SigmaThetaX = atof(DataBuffer.c_str()) * deg; G4cout << "Beam Emmitance Theta " << SigmaThetaX / deg << " deg" << G4endl; } else if (DataBuffer.compare(0, 17, "SigmaPhiY=") == 0) { check_EmmitancePhi = true ; ReactionFile >> DataBuffer; - SigmaPhiY = atof(DataBuffer.c_str()) * rad; + SigmaPhiY = atof(DataBuffer.c_str()) * deg; G4cout << "Beam Emmitance Phi " << SigmaPhiY / deg << " deg" << G4endl; } @@ -363,24 +370,51 @@ while(ReadingStatus){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4ParticleGun* particleGun) { + + // If first time, write the DeDx table + if(anEvent->GetEventID()==0) + { + //-------------- Before living, wrtie the DeDx Table ------------------- + + G4int LightZx = m_Reaction->GetNucleus3()->GetZ() ; + G4int LightAx = m_Reaction->GetNucleus3()->GetA() ; + + G4int BeamZx = m_Reaction->GetNucleus1()->GetZ() ; + G4int BeamAx = m_Reaction->GetNucleus1()->GetA() ; + + if(m_Target!=0) + { + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(LightZx,LightAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + m_Target->WriteDEDXTable(G4ParticleTable::GetParticleTable()->GetIon(BeamZx,BeamAx, 0.) ,0, m_BeamEnergy+4*m_BeamEnergySpread); + } + + } + // Clear contents of Precedent event (now stored in ROOTOutput) m_InitConditions->Clear(); ////////////////////////////////////////////////// //////Define the kind of particle to shoot//////// ////////////////////////////////////////////////// + // Light G4int LightZ = m_Reaction->GetNucleus3()->GetZ() ; G4int LightA = m_Reaction->GetNucleus3()->GetA() ; G4ParticleDefinition* LightName = G4ParticleTable::GetParticleTable()->GetIon(LightZ, LightA, 0.); + // Recoil G4int HeavyZ = m_Reaction->GetNucleus4()->GetZ() ; G4int HeavyA = m_Reaction->GetNucleus4()->GetA() ; G4ParticleDefinition* HeavyName = G4ParticleTable::GetParticleTable()->GetIon(HeavyZ, HeavyA, m_Reaction->GetExcitation()*MeV); + // Beam + G4int BeamZ = m_Reaction->GetNucleus1()->GetZ(); + G4int BeamA = m_Reaction->GetNucleus1()->GetA(); + G4ParticleDefinition* BeamName = G4ParticleTable::GetParticleTable()->GetIon(BeamZ, BeamA, 0); + // Shoot the Resonance energy following the mean and width value double EXX = -10 ; @@ -389,37 +423,42 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part m_Reaction->SetExcitation( EXX ); - // Vertex position and beam angle inte world frame - G4double x0 = 1000 * cm ; - G4double y0 = 1000 * cm ; - G4double Beam_thetaX = 0 ; - G4double Beam_phiY = 0 ; + /////////////////////////////////////////////////////////////////////// + ///// Calculate the incident beam direction as well as the vertex ///// + ///// of interaction in target and Energy Loss of the beam within ///// + ///// the target. ///// + /////////////////////////////////////////////////////////////////////// + G4ThreeVector InterCoord; - //shoot inside the target with correlated angle - if (m_TargetRadius != 0) { - while (sqrt(x0*x0 + y0*y0) > m_TargetRadius) { - RandomGaussian2D(0, 0, m_SigmaX, m_SigmaThetaX, x0, Beam_thetaX); - RandomGaussian2D(0, 0, m_SigmaY, m_SigmaPhiY , y0, Beam_phiY ); - } - } - else { - RandomGaussian2D(0,0,0,m_SigmaThetaX,x0,Beam_thetaX); - RandomGaussian2D(0,0,0,m_SigmaPhiY ,y0,Beam_phiY ); - } + G4double Beam_thetaX = 0, Beam_phiY = 0; + G4double Beam_theta = 0, Beam_phi = 0; + G4double FinalBeamEnergy = 0 ; + G4double InitialBeamEnergy = RandGauss::shoot(m_BeamEnergy, m_BeamEnergySpread); + + m_Target->CalculateBeamInteraction( 0, m_SigmaX, 0, m_SigmaThetaX, + 0, m_SigmaY, 0, m_SigmaPhiY, + InitialBeamEnergy, + BeamName, + InterCoord, Beam_thetaX, Beam_phiY, + Beam_theta, Beam_phi, + FinalBeamEnergy); + + m_Reaction->SetBeamEnergy(FinalBeamEnergy); + m_InitConditions->SetICIncidentEnergy(FinalBeamEnergy / MeV); + + + // write vertex position to ROOT file + G4double x0 = InterCoord.x(); + G4double y0 = InterCoord.y(); + G4double z0 = InterCoord.z(); + m_InitConditions->SetICPositionX(x0); + m_InitConditions->SetICPositionY(y0); + m_InitConditions->SetICPositionZ(z0); // write emittance angles to ROOT file m_InitConditions->SetICIncidentEmittanceTheta(Beam_thetaX / deg); m_InitConditions->SetICIncidentEmittancePhi(Beam_phiY / deg); - // Calculate Angle in spherical coordinate, passing by the direction vector dir - G4double Xdir = cos(pi/2. - Beam_thetaX); - G4double Ydir = cos(pi/2. - Beam_phiY ); - G4double Zdir = sin(pi/2. - Beam_thetaX) + sin(pi/2. - Beam_phiY); - - G4double Beam_theta = acos(Zdir / sqrt(Xdir*Xdir + Ydir*Ydir + Zdir*Zdir)) * rad; - G4double Beam_phi = atan2(Ydir, Xdir) * rad; - if (Beam_phi < 0) Beam_phi += 2*pi; - // write angles to ROOT file m_InitConditions->SetICIncidentAngleTheta(Beam_theta / deg); m_InitConditions->SetICIncidentAnglePhi(Beam_phi / deg); @@ -475,22 +514,6 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part sin(ThetaHeavy) * sin(phi), cos(ThetaHeavy)); - // write angles/energy to ROOT file - m_InitConditions->SetICEmittedAngleThetaLabIncidentFrame(ThetaLight / deg); - m_InitConditions->SetICEmittedEnergy(EnergyLight/MeV); - //must shoot inside the target. - G4double z0 = (-m_TargetThickness / 2 + RandFlat::shoot() * m_TargetThickness); - - // Move to the target - x0 += m_TargetX ; - y0 += m_TargetY ; - z0 += m_TargetZ ; - - // write vertex position to ROOT file - m_InitConditions->SetICPositionX(x0); - m_InitConditions->SetICPositionY(y0); - m_InitConditions->SetICPositionZ(z0); - ////////////////////////////////////////////////// ///////// Set up everything for shooting ///////// ////////////////////////////////////////////////// @@ -512,14 +535,17 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part // write angles in ROOT file m_InitConditions->SetICEmittedAngleThetaLabWorldFrame(theta_world / deg); m_InitConditions->SetICEmittedAnglePhiWorldFrame(phi_world / deg); + // write angles/energy to ROOT file + m_InitConditions->SetICEmittedAngleThetaLabIncidentFrame(ThetaLight / deg); + m_InitConditions->SetICEmittedEnergy(EnergyLight/MeV); //Set the gun to shoot particleGun->SetParticleMomentumDirection(momentum_kine_world); //Shoot the light particle particleGun->GeneratePrimaryVertex(anEvent); } - if (m_ShootHeavy) { // Case of recoil particle - // Particle type + // Case of recoil particle + /* // Particle type particleGun->SetParticleDefinition(HeavyName); // Particle energy particleGun->SetParticleEnergy(EnergyHeavy); @@ -527,7 +553,7 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part particleGun->SetParticlePosition(G4ThreeVector(x0, y0, z0)); // Particle direction // Kinematical angles in the beam frame are transformed - // to the "world" frame + // to the "world" frame*/ G4ThreeVector momentum_kine_world = BeamToWorld * momentum_kineHeavy_beam; // get theta and phi in the world frame G4double theta_world = momentum_kine_world.theta(); @@ -543,7 +569,7 @@ void EventGeneratorTransfertToResonance::GenerateEvent(G4Event* anEvent , G4Part anEvent , particleGun ); - } + } @@ -587,89 +613,114 @@ void EventGeneratorTransfertToResonance::ResonanceDecay( G4double EnergyHeavy G4double md = daughter -> GetPDGMass() ; G4double mn = neutron -> GetPDGMass() ; G4double mp = proton -> GetPDGMass() ; - - G4double Q = M - md - mn * NumberOfNeutrons - mp * NumberOfProtons ; - - vector<G4double> DecayProductsMomentumCM ; - vector<G4double> DecayProductsMomentumXCM ; - vector<G4double> DecayProductsMomentumYCM ; - vector<G4double> DecayProductsMomentumZCM ; - vector<G4double> DecayProductsThetaCM ; - vector<G4double> DecayProductsPhiCM ; - - // Initial Lab Momentum - G4double InitialE = sqrt(EnergyHeavy * EnergyHeavy + M * M) ; - G4double InitialMomentumX = EnergyHeavy * sin(ThetaHeavy) * cos(PhiHeavy) ; - G4double InitialMomentumY = EnergyHeavy * sin(ThetaHeavy) * sin(PhiHeavy) ; - G4double InitialMomentumZ = EnergyHeavy * cos(ThetaHeavy) ; + + G4double InitialE = EnergyHeavy + M ; + G4double InitialMomentumX = sqrt( InitialE*InitialE - M*M) * sin(ThetaHeavy) * cos(PhiHeavy) ; + G4double InitialMomentumY = sqrt( InitialE*InitialE - M*M) * sin(ThetaHeavy) * sin(PhiHeavy) ; + G4double InitialMomentumZ = sqrt( InitialE*InitialE - M*M) * cos(ThetaHeavy) ; TLorentzVector Initial = TLorentzVector(InitialMomentumX/GeV, InitialMomentumY/GeV, InitialMomentumZ/GeV,InitialE/GeV); // Array of masses express in GeV/c2 double* masses = new double[NumberOfDecayProducts+1]; - // Filling Array + // Filling Array masses[0] = md/GeV ; - + int ll = 1 ; for(int i = 0 ; i < NumberOfNeutrons ; i++) {masses[ll] = mn/GeV ; ll++;} for(int i = 0 ; i < NumberOfProtons ; i++) {masses[ll] = mp/GeV ; ll++;} - + // Instentiate a Phase Space Generator, with flat distrution - - TGenPhaseSpace TPhaseSpace ; - if( !TPhaseSpace.SetDecay(Initial, NumberOfDecayProducts+1, masses,"Fermi") ) cout << "Warning: Phase Space Decay forbiden by kinematic"; - TPhaseSpace.Generate() ; - - TLorentzVector* daugterLV = TPhaseSpace.GetDecay(0); - G4ThreeVector Momentum = G4ThreeVector( daugterLV->X()*GeV , - daugterLV->Y()*GeV , - daugterLV->Z()*GeV ); - double Energy = Momentum.mag() ; - Momentum.unit() ; - //Set the gun to shoot - particleGun->SetParticleDefinition(daughter) ; - particleGun->SetParticleMomentumDirection(Momentum) ; - particleGun->SetParticleEnergy(Energy) ; - particleGun->SetParticlePosition(G4ThreeVector(x0, y0, z0)) ; - // Shoot the Daugter - particleGun->GeneratePrimaryVertex(anEvent) ; + if( !TPhaseSpace.SetDecay(Initial, NumberOfDecayProducts+1, masses) ) cout << "Warning: Phase Space Decay forbiden by kinematic, or more than 18 particles "<<endl; + double MaxWt=TPhaseSpace.GetWtMax() ; + double Weight = 0 ; + double Rand = 1 ; + while( Rand > Weight ) + { + Weight = TPhaseSpace.Generate() ; + Rand = CLHEP::RandFlat::shoot()*MaxWt ; + } + + + TLorentzVector* daugterLV ; + double Energy; + G4ThreeVector Momentum; + if (m_ShootHeavy) + { + daugterLV = TPhaseSpace.GetDecay(0); + + Momentum = G4ThreeVector( daugterLV->X()*GeV , + daugterLV->Y()*GeV , + daugterLV->Z()*GeV ); + + Energy = daugterLV->E()*GeV-md ; + Momentum.unit() ; + + //Set the gun to shoot + particleGun->SetParticleDefinition(daughter) ; + particleGun->SetParticleMomentumDirection(Momentum) ; + particleGun->SetParticleEnergy(Energy) ; + particleGun->SetParticlePosition(G4ThreeVector(x0, y0, z0)) ; + // Shoot the Daugter + particleGun->GeneratePrimaryVertex(anEvent) ; + + // get theta and phi in the world frame + G4double theta_world = Momentum.theta(); + G4double phi_world = Momentum.phi(); + if (phi_world < 1e-6) phi_world += 2*pi; + // write angles in ROOT file + m_InitConditions->SetICEmittedAngleThetaLabWorldFrame(theta_world / deg); + m_InitConditions->SetICEmittedAnglePhiWorldFrame(phi_world / deg); + m_InitConditions->SetICEmittedEnergy(Energy); + } + if (m_ShootDecayProduct) { G4int jj = 1 ; for ( int u = 0; u < NumberOfNeutrons ; u++) { - TLorentzVector* neutronLV = TPhaseSpace.GetDecay(jj); + daugterLV = TPhaseSpace.GetDecay(jj); Momentum = G4ThreeVector( daugterLV->X()*GeV , daugterLV->Y()*GeV , daugterLV->Z()*GeV ); - Energy = Momentum.mag() ; + Energy = daugterLV->E()*GeV-mn ; Momentum.unit() ; //Set the gun to shoot - particleGun->SetParticleDefinition(neutron) ; + particleGun->SetParticleDefinition(neutron) ; particleGun->SetParticleMomentumDirection(Momentum) ; particleGun->SetParticleEnergy(Energy) ; particleGun->SetParticlePosition(G4ThreeVector(x0, y0, z0)) ; // Shoot the Daugter particleGun->GeneratePrimaryVertex(anEvent) ; + + // get theta and phi in the world frame + G4double theta_world = Momentum.theta(); + G4double phi_world = Momentum.phi(); + if (phi_world < 1e-6) phi_world += 2*pi; + // write angles in ROOT file + m_InitConditions->SetICEmittedAngleThetaLabWorldFrame(theta_world / deg); + m_InitConditions->SetICEmittedAnglePhiWorldFrame(phi_world / deg); + m_InitConditions->SetICEmittedEnergy(Energy); + jj++; } for ( int u = 0; u < NumberOfProtons ; u++) { - TLorentzVector* protonLV = TPhaseSpace.GetDecay(jj); + daugterLV = TPhaseSpace.GetDecay(jj); Momentum = G4ThreeVector( daugterLV->X()*GeV , daugterLV->Y()*GeV , daugterLV->Z()*GeV ); - Energy = Momentum.mag() ; + Energy = daugterLV->E()*GeV-mp ; Momentum.unit() ; //Set the gun to shoot particleGun->SetParticleDefinition(proton) ; @@ -678,35 +729,24 @@ void EventGeneratorTransfertToResonance::ResonanceDecay( G4double EnergyHeavy particleGun->SetParticlePosition(G4ThreeVector(x0, y0, z0)) ; // Shoot the Daugter particleGun->GeneratePrimaryVertex(anEvent) ; + + // get theta and phi in the world frame + G4double theta_world = Momentum.theta(); + G4double phi_world = Momentum.phi(); + if (phi_world < 1e-6) phi_world += 2*pi; + // write angles in ROOT file + m_InitConditions->SetICEmittedAngleThetaLabWorldFrame(theta_world / deg); + m_InitConditions->SetICEmittedAnglePhiWorldFrame(phi_world / deg); + m_InitConditions->SetICEmittedEnergy(Energy); jj++; } - delete masses ; - } - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -vector<double> EventGeneratorTransfertToResonance::PhaseSpaceUniformGenerator( int N , double R) - { - vector<double> V ; - V.reserve(N) ; - double Norme ; - double Buffer ; - - for(int i = 0 ; i< N ; i++) - { - V.push_back( Buffer = CLHEP::RandFlat::shoot() ); - Norme += Buffer*Buffer ; - } - - Norme = sqrt(Norme) ; - for(int i = 0 ; i< N ; i++) - V[i] = V[i] / Norme ; + } - return V; + delete masses ; } +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void EventGeneratorTransfertToResonance::SetEverything( string name1 , @@ -753,5 +793,3 @@ void EventGeneratorTransfertToResonance::SetEverything( string name1 } - - diff --git a/NPSimulation/src/GaspardScorers.cc b/NPSimulation/src/GaspardScorers.cc index 8ece0f60b46b3bdf2bfcaacb0b145528e1fdce63..266edcfdfdb814c35fe5536c4f7e4d29639634b0 100644 --- a/NPSimulation/src/GaspardScorers.cc +++ b/NPSimulation/src/GaspardScorers.cc @@ -19,9 +19,13 @@ * * *****************************************************************************/ -#include "GaspardScorers.hh" +// G4 headers #include "G4UnitsTable.hh" +// NPTool headers +#include "GeneralScorers.hh" +#include "GaspardScorers.hh" + #include "GaspardTrackerDummyShape.hh" #include "GaspardTrackerSquare.hh" #include "GaspardTrackerTrapezoid.hh" @@ -39,12 +43,12 @@ using namespace GPDDUMMYSHAPE; // scorer provide by G4 don't work this way but using a global ID for each event you should // not use those scorer with some G4 provided ones or being very carefull doing so. - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // FirstStage Energy Scorer (deal with multiple particle hit) -GPDScorerFirstStageEnergy::GPDScorerFirstStageEnergy(G4String name, G4int depth) +GPDScorerFirstStageEnergy::GPDScorerFirstStageEnergy(G4String name, G4String volumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = volumeName; } GPDScorerFirstStageEnergy::~GPDScorerFirstStageEnergy() @@ -53,13 +57,17 @@ GPDScorerFirstStageEnergy::~GPDScorerFirstStageEnergy() G4bool GPDScorerFirstStageEnergy::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, m_VolumeName); + + // get energy G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->add(index, edep); + EvtMap->add(DetNbr + index, edep); return TRUE; } @@ -102,9 +110,10 @@ void GPDScorerFirstStageEnergy::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // SecondStage Energy Scorer (deal with multiple particle hit) -GPDScorerSecondStageEnergy::GPDScorerSecondStageEnergy(G4String name, G4int depth) +GPDScorerSecondStageEnergy::GPDScorerSecondStageEnergy(G4String name, G4String volumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = volumeName; } GPDScorerSecondStageEnergy::~GPDScorerSecondStageEnergy() @@ -113,13 +122,17 @@ GPDScorerSecondStageEnergy::~GPDScorerSecondStageEnergy() G4bool GPDScorerSecondStageEnergy::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, m_VolumeName); + + // get energy G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->add(index, edep); + EvtMap->add(DetNbr + index, edep); return TRUE; } @@ -162,9 +175,10 @@ void GPDScorerSecondStageEnergy::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // ThirdStage Energy Scorer (deal with multiple particle hit) -GPDScorerThirdStageEnergy::GPDScorerThirdStageEnergy(G4String name, G4int depth) +GPDScorerThirdStageEnergy::GPDScorerThirdStageEnergy(G4String name, G4String volumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = volumeName; } GPDScorerThirdStageEnergy::~GPDScorerThirdStageEnergy() @@ -173,13 +187,17 @@ GPDScorerThirdStageEnergy::~GPDScorerThirdStageEnergy() G4bool GPDScorerThirdStageEnergy::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, m_VolumeName); + + // get energy G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->add(index, edep); + EvtMap->add(DetNbr + index, edep); return TRUE; } @@ -220,71 +238,6 @@ void GPDScorerThirdStageEnergy::PrintAll() -GPDScorerDetectorNumber::GPDScorerDetectorNumber(G4String name, G4int depth, G4String VolumeName ) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ - m_VolumeName = VolumeName; -} - -GPDScorerDetectorNumber::~GPDScorerDetectorNumber() -{ -} - -G4bool GPDScorerDetectorNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - std::string name = aStep->GetTrack()->GetVolume()->GetName(); - std::string nbr; - size_t found = name.find(m_VolumeName); - - int numberOfCharacterInTelescopeNumberSquare = (int)found - 1; - - for (int i = 0; i < numberOfCharacterInTelescopeNumberSquare; i++) nbr += name[i+1]; - - G4int DetNbr = atof(nbr.c_str()); - - G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; - G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, DetNbr); - return TRUE; -} - -void GPDScorerDetectorNumber::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void GPDScorerDetectorNumber::EndOfEvent(G4HCofThisEvent*) -{ -} - -void GPDScorerDetectorNumber::Clear() -{ - EvtMap->clear(); -} - -void GPDScorerDetectorNumber::DrawAll() -{ -} - -void GPDScorerDetectorNumber::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; - G4cout << " PrimitiveScorer " << GetName() << G4endl; - G4cout << " Number of entries " << EvtMap->entries() << G4endl; - std::map<G4int, G4int*>::iterator itr = EvtMap->GetMap()->begin(); - for (; itr != EvtMap->GetMap()->end(); itr++) { - G4cout << " copy no.: " << itr->first - << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") - << G4endl; - } -} - - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // FirstStage Front Strip position Scorer for DummyShape geometry @@ -300,6 +253,10 @@ GPDScorerFirstStageFrontStripDummyShape::~GPDScorerFirstStageFrontStripDummyShap G4bool GPDScorerFirstStageFrontStripDummyShape::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDDummyShape"); + + // get front strip number G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -313,7 +270,7 @@ G4bool GPDScorerFirstStageFrontStripDummyShape::ProcessHits(G4Step* aStep, G4Tou G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, X); + EvtMap->set(DetNbr + index, X); return TRUE; } @@ -362,6 +319,10 @@ GPDScorerFirstStageBackStripDummyShape::~GPDScorerFirstStageBackStripDummyShape( G4bool GPDScorerFirstStageBackStripDummyShape::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDDummyShape"); + + // get back strip number G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -374,7 +335,7 @@ G4bool GPDScorerFirstStageBackStripDummyShape::ProcessHits(G4Step* aStep, G4Touc G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, X); + EvtMap->set(DetNbr + index, X); return TRUE; } @@ -423,6 +384,10 @@ GPDScorerFirstStageFrontStripSquare::~GPDScorerFirstStageFrontStripSquare() G4bool GPDScorerFirstStageFrontStripSquare::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDSquare"); + + // get front strip G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -435,7 +400,7 @@ G4bool GPDScorerFirstStageFrontStripSquare::ProcessHits(G4Step* aStep, G4Touchab G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, X); + EvtMap->set(DetNbr + index, X); return TRUE; } @@ -483,6 +448,10 @@ GPDScorerFirstStageBackStripSquare::~GPDScorerFirstStageBackStripSquare() G4bool GPDScorerFirstStageBackStripSquare::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDSquare"); + + // get back strip G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -497,7 +466,7 @@ G4bool GPDScorerFirstStageBackStripSquare::ProcessHits(G4Step* aStep, G4Touchabl G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, Y); + EvtMap->set(DetNbr + index, Y); return TRUE; } @@ -545,6 +514,10 @@ GPDScorerFirstStageFrontStripTrapezoid::~GPDScorerFirstStageFrontStripTrapezoid( G4bool GPDScorerFirstStageFrontStripTrapezoid::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDTrapezoid"); + + // get front strip G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -557,7 +530,7 @@ G4bool GPDScorerFirstStageFrontStripTrapezoid::ProcessHits(G4Step* aStep, G4Touc G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, X); + EvtMap->set(DetNbr + index, X); return TRUE; } @@ -605,6 +578,10 @@ GPDScorerFirstStageBackStripTrapezoid::~GPDScorerFirstStageBackStripTrapezoid() G4bool GPDScorerFirstStageBackStripTrapezoid::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDTrapezoid"); + + // get back strip G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -619,7 +596,7 @@ G4bool GPDScorerFirstStageBackStripTrapezoid::ProcessHits(G4Step* aStep, G4Touch G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, Y); + EvtMap->set(DetNbr + index, Y); return TRUE; } @@ -668,6 +645,10 @@ GPDScorerFirstStageFrontStripAnnular::~GPDScorerFirstStageFrontStripAnnular() G4bool GPDScorerFirstStageFrontStripAnnular::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDAnnular"); + + // get front strip G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -680,7 +661,7 @@ G4bool GPDScorerFirstStageFrontStripAnnular::ProcessHits(G4Step* aStep, G4Toucha G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, X); + EvtMap->set(DetNbr + index, X); return TRUE; } @@ -729,6 +710,10 @@ GPDScorerFirstStageBackStripAnnular::~GPDScorerFirstStageBackStripAnnular() G4bool GPDScorerFirstStageBackStripAnnular::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + // get detector number + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "GPDAnnular"); + + // get back strip G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); @@ -743,7 +728,7 @@ G4bool GPDScorerFirstStageBackStripAnnular::ProcessHits(G4Step* aStep, G4Touchab G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, Y); + EvtMap->set(DetNbr + index, Y); return TRUE; } diff --git a/NPSimulation/src/GaspardTrackerAnnular.cc b/NPSimulation/src/GaspardTrackerAnnular.cc index 9432cb7dc048a06679f6cb2f9c6fdf1b79095589..64693c36fb2e6979df99edd208bea0064fa2219d 100644 --- a/NPSimulation/src/GaspardTrackerAnnular.cc +++ b/NPSimulation/src/GaspardTrackerAnnular.cc @@ -9,12 +9,13 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 15/07/09 * - * Last update : * + * Last update : 12/10/09 * *---------------------------------------------------------------------------* * Decription: Define a module of annular shape for the Gaspard tracker * * * *---------------------------------------------------------------------------* * Comment: * + * + 12/10/09: Change scorer scheme (N. de Sereville) * * * * * *****************************************************************************/ @@ -135,14 +136,14 @@ void GaspardTrackerAnnular::VolumeMaker(G4int TelescopeNumber , G4Material* Silicon = new G4Material("Si", z = 14., a, density); // Al - density = 2.702 * g / cm3; - a = 26.98 * g / mole; - G4Material* Aluminium = new G4Material("Aluminium", z = 13., a, density); +// density = 2.702 * g / cm3; +// a = 26.98 * g / mole; +// G4Material* Aluminium = new G4Material("Aluminium", z = 13., a, density); // Iron - density = 7.874 * g / cm3; - a = 55.847 * g / mole; - G4Material* Iron = new G4Material("Iron", z = 26., a, density); +// density = 7.874 * g / cm3; +// a = 55.847 * g / mole; +// G4Material* Iron = new G4Material("Iron", z = 26., a, density); // CsI density = 4.51 * g / cm3; @@ -282,7 +283,7 @@ void GaspardTrackerAnnular::VolumeMaker(G4int TelescopeNumber , 360*deg); G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon, Silicon, "logicSilicon", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, "G" + DetectorNumber + "Silicon", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, Name + "_Silicon", logicMM, false, 0); // Set First Stage sensible logicSilicon->SetSensitiveDetector(m_FirstStageScorer); @@ -315,7 +316,7 @@ void GaspardTrackerAnnular::VolumeMaker(G4int TelescopeNumber , G4LogicalVolume* logicThirdStage = new G4LogicalVolume(solidThirdStage, Silicon, "logicThirdStage", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionThirdStage, logicThirdStage, "G" + DetectorNumber + "ThirdStage", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionThirdStage, logicThirdStage, Name + "_ThirdStage", logicMM, false, 0); ///Visualisation of Third Stage G4VisAttributes* ThirdStageVisAtt = new G4VisAttributes(G4Colour(0.0, 0.9, 0.)) ; @@ -502,13 +503,9 @@ void GaspardTrackerAnnular::SetInterCoordPointer(TInteractionCoordinates* interC // Called at in the EventAction::EndOfEventAvtion void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) { - bool checkSi = false ; - G4String DetectorNumber ; - ////////////////////////////////////////////////////////////////////////////////////// //////////////////////// Used to Read Event Map of detector ////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// - // First Stage std::map<G4int, G4int*>::iterator DetectorNumber_itr; std::map<G4int, G4double*>::iterator Energy_itr; @@ -537,10 +534,6 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) std::map<G4int, G4double*>::iterator ThirdStageEnergy_itr; G4THitsMap<G4double>* ThirdStageEnergyHitMap = NULL; -////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////// - G4int HitNumber = 0; - checkSi = false; // Read the Scorer associated to the first Stage //Detector Number @@ -612,40 +605,35 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) return; } - // Loop on Strip energy - for (G4int l = 0 ; l < sizeE ; l++) { - G4int ETrackID = Energy_itr->first ; - G4double E = *(Energy_itr->second) ; - G4int N = 0; - - if (E > 0) { - checkSi = true ; - ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - - // Detector Number - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeN ; h++) { - G4int NTrackID = DetectorNumber_itr->first ; - G4double Nl = *(DetectorNumber_itr->second) ; - - if (NTrackID == ETrackID) { - N = Nl ; - ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(INDEX + N); - } - DetectorNumber_itr++; + // Loop on FirstStage number + for (G4int l = 0; l < sizeN; l++) { + G4double N = *(DetectorNumber_itr->second); + G4int NTrackID = DetectorNumber_itr->first - N; + + if (N > 0) { + // Fill detector number + ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(m_index["Annular"] + N); + ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(m_index["Annular"] + N); + ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(m_index["Annular"] + N); + ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(m_index["Annular"] + N); + + // Energy + for (G4int l = 0 ; l < sizeE ; l++) { + G4int ETrackID = Energy_itr->first - N; + G4double E = *(Energy_itr->second); + if (ETrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)); + ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)); } + Energy_itr++; + } // Time Time_itr = TimeHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeT ; h++) { - G4int TTrackID = Time_itr->first ; + G4int TTrackID = Time_itr->first - N; G4double T = *(Time_itr->second) ; - - if (TTrackID == ETrackID) { + if (TTrackID == NTrackID) { T = RandGauss::shoot(T, ResoTimePPAC) ; ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(T, ResoTimeGpd)) ; ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(T, ResoTimeGpd)) ; @@ -656,9 +644,9 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // X X_itr = XHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int XTrackID = X_itr->first ; - G4double X = *(X_itr->second) ; - if (XTrackID == ETrackID) { + G4int XTrackID = X_itr->first - N; + G4double X = *(X_itr->second); + if (XTrackID == NTrackID) { ms_Event->SetGPDTrkFirstStageFrontEStripNbr(X) ; ms_Event->SetGPDTrkFirstStageFrontTStripNbr(X) ; } @@ -669,9 +657,9 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // Y Y_itr = YHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < sizeY ; h++) { - G4int YTrackID = Y_itr->first ; + G4int YTrackID = Y_itr->first - N ; G4double Y = *(Y_itr->second) ; - if (YTrackID == ETrackID) { + if (YTrackID == NTrackID) { ms_Event->SetGPDTrkFirstStageBackEStripNbr(Y) ; ms_Event->SetGPDTrkFirstStageBackTStripNbr(Y) ; } @@ -682,9 +670,9 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // Pos X Pos_X_itr = PosXHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosXTrackID = Pos_X_itr->first ; + G4int PosXTrackID = Pos_X_itr->first - N ; G4double PosX = *(Pos_X_itr->second) ; - if (PosXTrackID == ETrackID) { + if (PosXTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionX(PosX) ; } Pos_X_itr++; @@ -693,9 +681,9 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // Pos Y Pos_Y_itr = PosYHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosYTrackID = Pos_Y_itr->first ; + G4int PosYTrackID = Pos_Y_itr->first - N ; G4double PosY = *(Pos_Y_itr->second) ; - if (PosYTrackID == ETrackID) { + if (PosYTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionY(PosY) ; } Pos_Y_itr++; @@ -704,9 +692,9 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // Pos Z Pos_Z_itr = PosZHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosZTrackID = Pos_Z_itr->first ; + G4int PosZTrackID = Pos_Z_itr->first - N ; G4double PosZ = *(Pos_Z_itr->second) ; - if (PosZTrackID == ETrackID) { + if (PosZTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionZ(PosZ) ; } Pos_Z_itr++; @@ -715,9 +703,9 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // Angle Theta Ang_Theta_itr = AngThetaHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngThetaTrackID = Ang_Theta_itr->first ; + G4int AngThetaTrackID = Ang_Theta_itr->first - N ; G4double AngTheta = *(Ang_Theta_itr->second) ; - if (AngThetaTrackID == ETrackID) { + if (AngThetaTrackID == NTrackID) { ms_InterCoord->SetDetectedAngleTheta(AngTheta) ; } Ang_Theta_itr++; @@ -726,10 +714,10 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // Angle Phi Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngPhiTrackID = Ang_Phi_itr->first ; - G4double AngPhi = *(Ang_Phi_itr->second) ; - if (AngPhiTrackID == ETrackID) { - ms_InterCoord->SetDetectedAnglePhi(AngPhi) ; + G4int AngPhiTrackID = Ang_Phi_itr->first - N; + G4double AngPhi = *(Ang_Phi_itr->second); + if (AngPhiTrackID == NTrackID) { + ms_InterCoord->SetDetectedAnglePhi(AngPhi); } Ang_Phi_itr++; } @@ -739,23 +727,22 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event) // Third Stage ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) { - G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first ; - G4double ThirdStageEnergy = *(ThirdStageEnergy_itr->second) ; + G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first - N; + G4double ThirdStageEnergy = *(ThirdStageEnergy_itr->second); - if (ThirdStageEnergyTrackID == ETrackID) { + if (ThirdStageEnergyTrackID == NTrackID) { ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage)); ms_Event->SetGPDTrkThirdStageEPadNbr(1); ms_Event->SetGPDTrkThirdStageTPadNbr(1); ms_Event->SetGPDTrkThirdStageTTime(1); - ms_Event->SetGPDTrkThirdStageTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkThirdStageEDetectorNbr(INDEX + N); + ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Annular"] + N); + ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Annular"] + N); } ThirdStageEnergy_itr++; } - Energy_itr++; - if (checkSi) HitNumber++ ; + DetectorNumber_itr++; } // clear map for next event @@ -779,16 +766,16 @@ void GaspardTrackerAnnular::InitializeScorers() { // First stage Associate Scorer m_FirstStageScorer = new G4MultiFunctionalDetector("FirstStageScorerGPDAnnular"); - G4VPrimitiveScorer* DetNbr = new GPDScorerDetectorNumber("DetectorNumber", 0, "Silicon"); - G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", 0); - G4VPrimitiveScorer* TOF = new PSTOF("StripTime", 0); + G4VPrimitiveScorer* DetNbr = new GENERALSCORERS::PSDetectorNumber("DetectorNumber", "GPDAnnular", 0); + G4VPrimitiveScorer* TOF = new GENERALSCORERS::PSTOF("StripTime","GPDAnnular", 0); + G4VPrimitiveScorer* InteractionCoordinatesX = new GENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","GPDAnnular", 0); + G4VPrimitiveScorer* InteractionCoordinatesY = new GENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","GPDAnnular", 0); + G4VPrimitiveScorer* InteractionCoordinatesZ = new GENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","GPDAnnular", 0); + G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new GENERALSCORERS::PSInteractionCoordinatesAngleTheta("InterCoordAngTheta","GPDAnnular", 0); + G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new GENERALSCORERS::PSInteractionCoordinatesAnglePhi("InterCoordAngPhi","GPDAnnular", 0); + G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", "GPDAnnular", 0); G4VPrimitiveScorer* StripPositionX = new GPDScorerFirstStageFrontStripAnnular("StripNumberX", 0, FirstStageRmax, 128); G4VPrimitiveScorer* StripPositionY = new GPDScorerFirstStageBackStripAnnular("StripNumberY", 0, FirstStageRmax, 128); - G4VPrimitiveScorer* InteractionCoordinatesX = new PSInteractionCoordinatesX("InterCoordX", 0); - G4VPrimitiveScorer* InteractionCoordinatesY = new PSInteractionCoordinatesY("InterCoordY", 0); - G4VPrimitiveScorer* InteractionCoordinatesZ = new PSInteractionCoordinatesZ("InterCoordZ", 0); - G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new PSInteractionCoordinatesAngleTheta("InterCoordAngTheta", 0); - G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new PSInteractionCoordinatesAnglePhi("InterCoordAngPhi", 0); //and register it to the multifunctionnal detector m_FirstStageScorer->RegisterPrimitive(DetNbr); @@ -804,12 +791,12 @@ void GaspardTrackerAnnular::InitializeScorers() // Second stage Associate Scorer m_SecondStageScorer = new G4MultiFunctionalDetector("SecondStageScorerGPDAnnular"); - G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", 0); + G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", "GPDAnnular", 0); m_SecondStageScorer->RegisterPrimitive(SecondStageEnergy); // Third stage Associate Scorer m_ThirdStageScorer = new G4MultiFunctionalDetector("ThirdStageScorerGPDAnnular"); - G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", 0); + G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", "GPDAnnular", 0); m_ThirdStageScorer->RegisterPrimitive(ThirdStageEnergy); // Add All Scorer to the Global Scorer Manager diff --git a/NPSimulation/src/GaspardTrackerDummyShape.cc b/NPSimulation/src/GaspardTrackerDummyShape.cc index f8ab37d186e71ba1b3abf02d1239541b962a80a0..20b87009b32667c511016f36c0a1ea139a89c5cc 100644 --- a/NPSimulation/src/GaspardTrackerDummyShape.cc +++ b/NPSimulation/src/GaspardTrackerDummyShape.cc @@ -9,7 +9,7 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 03/09/09 * - * Last update : 07/09/09 * + * Last update : 12/10/09 * *---------------------------------------------------------------------------* * Decription: Define a dummy module for the Gaspard tracker * * The goal of this class is to be a starting point to create a * @@ -19,6 +19,7 @@ * Comment: * * + 07/09/09: Fix bug for placing module with (r,theta,phi) method. * * (N. de Sereville) * + * + 12/10/09: Change scorer scheme (N. de Sereville) * * * * * *****************************************************************************/ @@ -53,7 +54,6 @@ #include "GeneralScorers.hh" #include "GaspardScorers.hh" #include "RootOutput.h" -#include "MUST2Array.hh" // CLHEP #include "CLHEP/Random/RandGauss.h" @@ -241,7 +241,8 @@ void GaspardTrackerDummyShape::VolumeMaker(G4int TelescopeNumber, PVPBuffer = new G4PVPlacement(0, positionFirstStage, logicFirstStage, - "G" + DetectorNumber + "FirstStage", +// "G" + DetectorNumber + "FirstStage", + Name + "_FirstStage", logicGPDDummyShape, false, 0); @@ -267,7 +268,8 @@ void GaspardTrackerDummyShape::VolumeMaker(G4int TelescopeNumber, PVPBuffer = new G4PVPlacement(0, positionSecondStage, logicSecondStage, - "G" + DetectorNumber + "SecondStage", +// "G" + DetectorNumber + "SecondStage", + Name + "_SecondStage", logicGPDDummyShape, false, 0); @@ -293,7 +295,8 @@ void GaspardTrackerDummyShape::VolumeMaker(G4int TelescopeNumber, PVPBuffer = new G4PVPlacement(0, positionThirdStage, logicThirdStage, - "G" + DetectorNumber + "ThirdStage", +// "G" + DetectorNumber + "ThirdStage", + Name + "_ThirdStage", logicGPDDummyShape, false, 0); @@ -758,66 +761,62 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) return; } - // Loop on FirstStage energy - for (G4int l = 0 ; l < sizeE ; l++) { - G4int ETrackID = Energy_itr->first ; - G4double E = *(Energy_itr->second) ; - G4int N = 0; - - if (E > 0) { - ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - - // Detector Number - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeN ; h++) { - G4int NTrackID = DetectorNumber_itr->first ; - G4double Nl = *(DetectorNumber_itr->second) ; - - if (NTrackID == ETrackID) { - N = Nl ; - ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(INDEX + N); - } - DetectorNumber_itr++; + // Loop on FirstStage number + for (G4int l = 0; l < sizeN; l++) { + G4double N = *(DetectorNumber_itr->second); + G4int NTrackID = DetectorNumber_itr->first - N; + + if (N > 0) { + // Fill detector number + ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(m_index["DummyShape"] + N); + ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(m_index["DummyShape"] + N); + ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(m_index["DummyShape"] + N); + ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(m_index["DummyShape"] + N); + + // Energy + for (G4int l = 0 ; l < sizeE ; l++) { + G4int ETrackID = Energy_itr->first - N; + G4double E = *(Energy_itr->second); + if (ETrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)); + ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)); + } + Energy_itr++; } // Time Time_itr = TimeHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeT ; h++) { - G4int TTrackID = Time_itr->first ; - G4double T = *(Time_itr->second) ; - - if (TTrackID == ETrackID) { - T = RandGauss::shoot(T, ResoTimeGpd) ; - ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(T, ResoTimeGpd)) ; - ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(T, ResoTimeGpd)) ; + G4int TTrackID = Time_itr->first - N; + G4double T = *(Time_itr->second); + if (TTrackID == NTrackID) { + T = RandGauss::shoot(T, ResoTimeGpd); + ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(T, ResoTimeGpd)); + ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(T, ResoTimeGpd)); } Time_itr++; } - // X + // Strip X X_itr = XHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int XTrackID = X_itr->first ; - G4double X = *(X_itr->second) ; - if (XTrackID == ETrackID) { - ms_Event->SetGPDTrkFirstStageFrontEStripNbr(X) ; - ms_Event->SetGPDTrkFirstStageFrontTStripNbr(X) ; + G4int XTrackID = X_itr->first - N; + G4double X = *(X_itr->second); + if (XTrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageFrontEStripNbr(X); + ms_Event->SetGPDTrkFirstStageFrontTStripNbr(X); } X_itr++; } - // Y + // Strip Y Y_itr = YHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < sizeY ; h++) { - G4int YTrackID = Y_itr->first ; - G4double Y = *(Y_itr->second) ; - if (YTrackID == ETrackID) { - ms_Event->SetGPDTrkFirstStageBackEStripNbr(Y) ; - ms_Event->SetGPDTrkFirstStageBackTStripNbr(Y) ; + G4int YTrackID = Y_itr->first - N; + G4double Y = *(Y_itr->second); + if (YTrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageBackEStripNbr(Y); + ms_Event->SetGPDTrkFirstStageBackTStripNbr(Y); } Y_itr++; } @@ -825,9 +824,9 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) // Pos X Pos_X_itr = PosXHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosXTrackID = Pos_X_itr->first ; + G4int PosXTrackID = Pos_X_itr->first - N ; G4double PosX = *(Pos_X_itr->second) ; - if (PosXTrackID == ETrackID) { + if (PosXTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionX(PosX) ; } Pos_X_itr++; @@ -836,9 +835,9 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) // Pos Y Pos_Y_itr = PosYHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosYTrackID = Pos_Y_itr->first ; + G4int PosYTrackID = Pos_Y_itr->first - N ; G4double PosY = *(Pos_Y_itr->second) ; - if (PosYTrackID == ETrackID) { + if (PosYTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionY(PosY) ; } Pos_Y_itr++; @@ -847,9 +846,9 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) // Pos Z Pos_Z_itr = PosZHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosZTrackID = Pos_Z_itr->first ; + G4int PosZTrackID = Pos_Z_itr->first - N ; G4double PosZ = *(Pos_Z_itr->second) ; - if (PosZTrackID == ETrackID) { + if (PosZTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionZ(PosZ) ; } Pos_Z_itr++; @@ -858,9 +857,9 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) // Angle Theta Ang_Theta_itr = AngThetaHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngThetaTrackID = Ang_Theta_itr->first ; + G4int AngThetaTrackID = Ang_Theta_itr->first - N ; G4double AngTheta = *(Ang_Theta_itr->second) ; - if (AngThetaTrackID == ETrackID) { + if (AngThetaTrackID == NTrackID) { ms_InterCoord->SetDetectedAngleTheta(AngTheta) ; } Ang_Theta_itr++; @@ -869,9 +868,9 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) // Angle Phi Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngPhiTrackID = Ang_Phi_itr->first ; + G4int AngPhiTrackID = Ang_Phi_itr->first - N ; G4double AngPhi = *(Ang_Phi_itr->second) ; - if (AngPhiTrackID == ETrackID) { + if (AngPhiTrackID == NTrackID) { ms_InterCoord->SetDetectedAnglePhi(AngPhi) ; } Ang_Phi_itr++; @@ -880,16 +879,16 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) // Second Stage SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < SecondStageEnergyHitMap->entries() ; h++) { - G4int SecondStageEnergyTrackID = SecondStageEnergy_itr->first ; - G4double SecondStageEnergy = *(SecondStageEnergy_itr->second) ; + G4int SecondStageEnergyTrackID = SecondStageEnergy_itr->first - N; + G4double SecondStageEnergy = *(SecondStageEnergy_itr->second); - if (SecondStageEnergyTrackID == ETrackID) { + if (SecondStageEnergyTrackID == NTrackID) { ms_Event->SetGPDTrkSecondStageEEnergy(RandGauss::shoot(SecondStageEnergy, ResoSecondStage)) ; ms_Event->SetGPDTrkSecondStageEPadNbr(1); ms_Event->SetGPDTrkSecondStageTPadNbr(1); ms_Event->SetGPDTrkSecondStageTTime(1); - ms_Event->SetGPDTrkSecondStageTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkSecondStageEDetectorNbr(INDEX + N); + ms_Event->SetGPDTrkSecondStageTDetectorNbr(m_index["DummyShape"] + N); + ms_Event->SetGPDTrkSecondStageEDetectorNbr(m_index["DummyShape"] + N); } SecondStageEnergy_itr++; } @@ -897,21 +896,21 @@ void GaspardTrackerDummyShape::ReadSensitive(const G4Event* event) // Third Stage ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) { - G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first ; - G4double ThirdStageEnergy = *(ThirdStageEnergy_itr->second) ; + G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first - N; + G4double ThirdStageEnergy = *(ThirdStageEnergy_itr->second); - if (ThirdStageEnergyTrackID == ETrackID) { + if (ThirdStageEnergyTrackID == NTrackID) { ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage)); ms_Event->SetGPDTrkThirdStageEPadNbr(1); ms_Event->SetGPDTrkThirdStageTPadNbr(1); ms_Event->SetGPDTrkThirdStageTTime(1); - ms_Event->SetGPDTrkThirdStageTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkThirdStageEDetectorNbr(INDEX + N); + ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["DummyShape"] + N); + ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["DummyShape"] + N); } ThirdStageEnergy_itr++; } - Energy_itr++; + DetectorNumber_itr++; } // clear map for next event @@ -936,16 +935,16 @@ void GaspardTrackerDummyShape::InitializeScorers() { // First stage Associate Scorer m_FirstStageScorer = new G4MultiFunctionalDetector("FirstStageScorerGPDDummyShape"); - G4VPrimitiveScorer* DetNbr = new GPDScorerDetectorNumber("DetectorNumber", 0, "FirstStage"); - G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", 0); - G4VPrimitiveScorer* TOF = new PSTOF("StripTime", 0); + G4VPrimitiveScorer* DetNbr = new GENERALSCORERS::PSDetectorNumber("DetectorNumber", "GPDDummyShape", 0); + G4VPrimitiveScorer* TOF = new GENERALSCORERS::PSTOF("StripTime","GPDDummyShape", 0); + G4VPrimitiveScorer* InteractionCoordinatesX = new GENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","GPDDummyShape", 0); + G4VPrimitiveScorer* InteractionCoordinatesY = new GENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","GPDDummyShape", 0); + G4VPrimitiveScorer* InteractionCoordinatesZ = new GENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","GPDDummyShape", 0); + G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new GENERALSCORERS::PSInteractionCoordinatesAngleTheta("InterCoordAngTheta","GPDDummyShape", 0); + G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new GENERALSCORERS::PSInteractionCoordinatesAnglePhi("InterCoordAngPhi","GPDDummyShape", 0); + G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", "GPDDummyShape", 0); G4VPrimitiveScorer* StripPositionX = new GPDScorerFirstStageFrontStripDummyShape("StripIDFront", 0, NumberOfStrips); G4VPrimitiveScorer* StripPositionY = new GPDScorerFirstStageBackStripDummyShape("StripIDBack", 0, NumberOfStrips); - G4VPrimitiveScorer* InteractionCoordinatesX = new PSInteractionCoordinatesX("InterCoordX", 0); - G4VPrimitiveScorer* InteractionCoordinatesY = new PSInteractionCoordinatesY("InterCoordY", 0); - G4VPrimitiveScorer* InteractionCoordinatesZ = new PSInteractionCoordinatesZ("InterCoordZ", 0); - G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new PSInteractionCoordinatesAngleTheta("InterCoordAngTheta", 0); - G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new PSInteractionCoordinatesAnglePhi("InterCoordAngPhi", 0); //and register it to the multifunctionnal detector m_FirstStageScorer->RegisterPrimitive(DetNbr); @@ -962,13 +961,13 @@ void GaspardTrackerDummyShape::InitializeScorers() // Second stage Associate Scorer m_SecondStageScorer = new G4MultiFunctionalDetector("SecondStageScorerGPDDummyShape"); - G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", 0); + G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", "GPDDummyShape", 0); m_SecondStageScorer->RegisterPrimitive(SecondStageEnergy); // Third stage Associate Scorer m_ThirdStageScorer = new G4MultiFunctionalDetector("ThirdStageScorerGPDDummyShape"); - G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", 0); + G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", "GPDDummyShape", 0); m_ThirdStageScorer->RegisterPrimitive(ThirdStageEnergy); diff --git a/NPSimulation/src/GaspardTrackerModule.cc b/NPSimulation/src/GaspardTrackerModule.cc index 73637464cdced2664b80f9eb6de813c0d8abb271..890cd77702c06e4720d4ca5b54e55f513e67a61e 100644 --- a/NPSimulation/src/GaspardTrackerModule.cc +++ b/NPSimulation/src/GaspardTrackerModule.cc @@ -32,6 +32,7 @@ GaspardTrackerModule::GaspardTrackerModule() if (ms_Event == 0) ms_Event = new TGaspardTrackerData(); InitializeRootOutput(); + InitializeIndex(); } @@ -50,3 +51,13 @@ void GaspardTrackerModule::InitializeRootOutput() if (!pTree->GetBranch("GASPARD")) pTree->Branch("GASPARD", "TGaspardTrackerData", &ms_Event); } + + + +void GaspardTrackerModule::InitializeIndex() +{ + m_index["Square"] = 0; + m_index["Trapezoid"] = 100; + m_index["Annular"] = 200; + m_index["DummyShape"] = 1000; +} diff --git a/NPSimulation/src/GaspardTrackerSquare.cc b/NPSimulation/src/GaspardTrackerSquare.cc index 307c3ce244231f39c30b5e67dd1144d787da51bb..b9eee508a5fdb67749a45c38b148e716b16b066c 100644 --- a/NPSimulation/src/GaspardTrackerSquare.cc +++ b/NPSimulation/src/GaspardTrackerSquare.cc @@ -9,7 +9,7 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 10/06/09 * - * Last update : 07/09/09 * + * Last update : 12/10/09 * *---------------------------------------------------------------------------* * Decription: Define a module of square shape for the Gaspard tracker * * * @@ -17,6 +17,7 @@ * Comment: * * + 07/09/09: Fix bug for placing module with (r,theta,phi) method. * * (N. de Sereville) * + * + 12/10/09: Change scorer scheme (N. de Sereville) * * * * * *****************************************************************************/ @@ -188,9 +189,9 @@ void GaspardTrackerSquare::VolumeMaker(G4int TelescopeNumber, G4Material* Aluminium = new G4Material("Aluminium", z = 13., a, density); // Iron - density = 7.874 * g / cm3; - a = 55.847 * g / mole; - G4Material* Iron = new G4Material("Iron", z = 26., a, density); +// density = 7.874 * g / cm3; +// a = 55.847 * g / mole; +// G4Material* Iron = new G4Material("Iron", z = 26., a, density); // CsI density = 4.51 * g / cm3; @@ -303,7 +304,7 @@ void GaspardTrackerSquare::VolumeMaker(G4int TelescopeNumber, G4Box* solidSilicon = new G4Box("solidSilicon", 0.5*SiliconFace, 0.5*SiliconFace, 0.5*SiliconThickness); G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon, Silicon, "logicSilicon", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, "G" + DetectorNumber + "Silicon", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, Name + "_Silicon", logicMM, false, 0); // Set First Stage sensible @@ -408,15 +409,15 @@ void GaspardTrackerSquare::VolumeMaker(G4int TelescopeNumber, -0.5 * SiLi_HighY_Center - 0.5 * interSiLi , 0); - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LT , logicSiLi_LT , "G" + DetectorNumber + "SiLi_LT" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RT , logicSiLi_RT , "G" + DetectorNumber + "SiLi_RT" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC1 , logicSiLi_LC1 , "G" + DetectorNumber + "SiLi_LC1" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC1 , logicSiLi_RC1 , "G" + DetectorNumber + "SiLi_RC1" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LT , logicSiLi_LT , Name + "_SiLi_LT" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RT , logicSiLi_RT , Name + "_SiLi_RT" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC1 , logicSiLi_LC1 , Name + "_SiLi_LC1" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC1 , logicSiLi_RC1 , Name + "_SiLi_RC1" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LB , logicSiLi_LB , "G" + DetectorNumber + "SiLi_LB" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RB , logicSiLi_RB , "G" + DetectorNumber + "SiLi_RB" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC2 , logicSiLi_LC2 , "G" + DetectorNumber + "SiLi_LC2" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC2 , logicSiLi_RC2 , "G" + DetectorNumber + "SiLi_RC2" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LB , logicSiLi_LB , Name + "_SiLi_LB" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RB , logicSiLi_RB , Name + "_SiLi_RB" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC2 , logicSiLi_LC2 , Name + "_SiLi_LC2" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC2 , logicSiLi_RC2 , Name + "_SiLi_RC2" , logicSiLi , false , 0) ; logicSiLi->SetVisAttributes(G4VisAttributes(G4Colour(1, 1., 1.))); @@ -454,7 +455,7 @@ void GaspardTrackerSquare::VolumeMaker(G4int TelescopeNumber, G4Box* solidThirdStage = new G4Box("solidThirdStage", 0.5*FaceFront, 0.5*FaceFront, 0.5*ThirdStageThickness); G4LogicalVolume* logicThirdStage = new G4LogicalVolume(solidThirdStage, Silicon, "logicThirdStage", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionThirdStage, logicThirdStage, "G" + DetectorNumber + "ThirdStage", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionThirdStage, logicThirdStage, Name + "_ThirdStage", logicMM, false, 0); ///Visualisation of Third Stage G4VisAttributes* ThirdStageVisAtt = new G4VisAttributes(G4Colour(0.7, 0.7, 0.7)) ; @@ -829,13 +830,9 @@ void GaspardTrackerSquare::SetInterCoordPointer(TInteractionCoordinates* interCo // Called at in the EventAction::EndOfEventAvtion void GaspardTrackerSquare::ReadSensitive(const G4Event* event) { - bool checkSi = false; - G4String DetectorNumber; - ////////////////////////////////////////////////////////////////////////////////////// //////////////////////// Used to Read Event Map of detector ////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// - // First Stage std::map<G4int, G4int*>::iterator DetectorNumber_itr; std::map<G4int, G4double*>::iterator Energy_itr; @@ -867,137 +864,129 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) std::map<G4int, G4double*>::iterator ThirdStageEnergy_itr ; G4THitsMap<G4double>* ThirdStageEnergyHitMap = NULL ; -////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////// - G4int HitNumber = 0; - checkSi = false; - - // Read the Scorer associate to the Silicon Strip - //Detector Number - G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/DetectorNumber") ; - DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ; - - //Energy - G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripEnergy") ; - EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; - Energy_itr = EnergyHitMap->GetMap()->begin() ; - - //Time of Flight - G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripTime") ; - TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; - Time_itr = TimeHitMap->GetMap()->begin() ; - - //Strip Number X - G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripNumberX") ; - XHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; - X_itr = XHitMap->GetMap()->begin() ; - - //Strip Number Y - G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripNumberY") ; - YHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; - Y_itr = YHitMap->GetMap()->begin() ; - - //Interaction Coordinate X - G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordX") ; - PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; - Pos_X_itr = PosXHitMap->GetMap()->begin() ; - - //Interaction Coordinate Y - G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordY") ; - PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; - Pos_Y_itr = PosYHitMap->GetMap()->begin() ; - - //Interaction Coordinate Z - G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordZ") ; - PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; - Pos_Z_itr = PosXHitMap->GetMap()->begin() ; - - //Interaction Coordinate Angle Theta - G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordAngTheta") ; - AngThetaHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngThetaCollectionID)) ; - Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; - - //Interaction Coordinate Angle Phi - G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordAngPhi") ; - AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; - Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; - - // Read the Scorer associate to the SiLi - //Energy - G4int SiLiEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDSquare/SecondStageEnergy") ; - SiLiEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiEnergyCollectionID)) ; - SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; - - - // Read the Scorer associate to the CsI crystal - //Energy - G4int ThirdStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThirdStageScorerGPDSquare/ThirdStageEnergy"); - ThirdStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(ThirdStageEnergyCollectionID)); - ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin(); - - // Check the size of different map - G4int sizeN = DetectorNumberHitMap->entries(); - G4int sizeE = EnergyHitMap->entries(); - G4int sizeT = TimeHitMap->entries(); - G4int sizeX = XHitMap->entries(); - G4int sizeY = YHitMap->entries(); - - if (sizeE != sizeT || sizeT != sizeX || sizeX != sizeY) { - G4cout << "No match size Si Event Map: sE:" - << sizeE << " sT:" << sizeT << " sX:" << sizeX << " sY:" << sizeY << endl ; - return; - } - // Loop on Strip energy - for (G4int l = 0 ; l < sizeE ; l++) { - G4int ETrackID = Energy_itr->first ; - G4double E = *(Energy_itr->second) ; - G4int N = 0; - - if (E > 0) { - checkSi = true ; - ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - - // Detector Number - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeN ; h++) { - G4int NTrackID = DetectorNumber_itr->first ; - G4double Nl = *(DetectorNumber_itr->second) ; - - if (NTrackID == ETrackID) { - N = Nl ; - ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(INDEX + N); - } - DetectorNumber_itr++; - } + // Read the Scorer associate to the Silicon Strip + //Detector Number + G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/DetectorNumber") ; + DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; + DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ; + + //Energy + G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripEnergy") ; + EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; + Energy_itr = EnergyHitMap->GetMap()->begin() ; + + //Time of Flight + G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripTime") ; + TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; + Time_itr = TimeHitMap->GetMap()->begin() ; + + //Strip Number X + G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripNumberX") ; + XHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; + X_itr = XHitMap->GetMap()->begin() ; + + //Strip Number Y + G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripNumberY") ; + YHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; + Y_itr = YHitMap->GetMap()->begin() ; + + //Interaction Coordinate X + G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordX") ; + PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; + Pos_X_itr = PosXHitMap->GetMap()->begin() ; + + //Interaction Coordinate Y + G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordY") ; + PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; + Pos_Y_itr = PosYHitMap->GetMap()->begin() ; + + //Interaction Coordinate Z + G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordZ") ; + PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; + Pos_Z_itr = PosXHitMap->GetMap()->begin() ; + + //Interaction Coordinate Angle Theta + G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordAngTheta") ; + AngThetaHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngThetaCollectionID)) ; + Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; + + //Interaction Coordinate Angle Phi + G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordAngPhi") ; + AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; + Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; + + + // Read the Scorer associate to the SiLi + //Energy + G4int SiLiEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDSquare/SecondStageEnergy") ; + SiLiEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiEnergyCollectionID)) ; + SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; + + + // Read the Scorer associate to the CsI crystal + //Energy + G4int ThirdStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThirdStageScorerGPDSquare/ThirdStageEnergy"); + ThirdStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(ThirdStageEnergyCollectionID)); + ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin(); + + // Check the size of different map + G4int sizeN = DetectorNumberHitMap->entries(); + G4int sizeE = EnergyHitMap->entries(); + G4int sizeT = TimeHitMap->entries(); + G4int sizeX = XHitMap->entries(); + G4int sizeY = YHitMap->entries(); + + if (sizeE != sizeT || sizeT != sizeX || sizeX != sizeY) { + G4cout << "No match size Si Event Map: sE:" + << sizeE << " sT:" << sizeT << " sX:" << sizeX << " sY:" << sizeY << endl ; + return; + } - // Time - Time_itr = TimeHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeT ; h++) { - G4int TTrackID = Time_itr->first ; - G4double T = *(Time_itr->second) ; + // Loop on FirstStage number + for (G4int l = 0; l < sizeN; l++) { + G4double N = *(DetectorNumber_itr->second); + G4int NTrackID = DetectorNumber_itr->first - N; + + if (N > 0) { + // Fill detector number + ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(m_index["Square"] + N); + ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(m_index["Square"] + N); + ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(m_index["Square"] + N); + ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(m_index["Square"] + N); + + // Energy + for (G4int l = 0 ; l < sizeE ; l++) { + G4int ETrackID = Energy_itr->first - N; + G4double E = *(Energy_itr->second); + if (ETrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)); + ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)); + } + Energy_itr++; + } - if (TTrackID == ETrackID) { - T = RandGauss::shoot(T, ResoTimePPAC) ; - ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(T, ResoTimeGpd)) ; - ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(T, ResoTimeGpd)) ; - } - Time_itr++; + // Time + Time_itr = TimeHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeT ; h++) { + G4int TTrackID = Time_itr->first - N; + G4double T = *(Time_itr->second); + if (TTrackID == NTrackID) { + T = RandGauss::shoot(T, ResoTimePPAC) ; + ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(T, ResoTimeGpd)) ; + ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(T, ResoTimeGpd)) ; } + Time_itr++; + } // X X_itr = XHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int XTrackID = X_itr->first ; - G4double X = *(X_itr->second) ; - if (XTrackID == ETrackID) { - ms_Event->SetGPDTrkFirstStageFrontEStripNbr(X) ; - ms_Event->SetGPDTrkFirstStageFrontTStripNbr(X) ; + G4int XTrackID = X_itr->first - N; + G4double X = *(X_itr->second); + if (XTrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageFrontEStripNbr(X); + ms_Event->SetGPDTrkFirstStageFrontTStripNbr(X); } X_itr++; @@ -1006,11 +995,11 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Y Y_itr = YHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < sizeY ; h++) { - G4int YTrackID = Y_itr->first ; - G4double Y = *(Y_itr->second) ; - if (YTrackID == ETrackID) { - ms_Event->SetGPDTrkFirstStageBackEStripNbr(Y) ; - ms_Event->SetGPDTrkFirstStageBackTStripNbr(Y) ; + G4int YTrackID = Y_itr->first - N; + G4double Y = *(Y_itr->second); + if (YTrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageBackEStripNbr(Y); + ms_Event->SetGPDTrkFirstStageBackTStripNbr(Y); } Y_itr++; @@ -1019,9 +1008,9 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Pos X Pos_X_itr = PosXHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosXTrackID = Pos_X_itr->first ; + G4int PosXTrackID = Pos_X_itr->first - N ; G4double PosX = *(Pos_X_itr->second) ; - if (PosXTrackID == ETrackID) { + if (PosXTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionX(PosX) ; } Pos_X_itr++; @@ -1030,9 +1019,9 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Pos Y Pos_Y_itr = PosYHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosYTrackID = Pos_Y_itr->first ; + G4int PosYTrackID = Pos_Y_itr->first - N ; G4double PosY = *(Pos_Y_itr->second) ; - if (PosYTrackID == ETrackID) { + if (PosYTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionY(PosY) ; } Pos_Y_itr++; @@ -1041,9 +1030,9 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Pos Z Pos_Z_itr = PosZHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosZTrackID = Pos_Z_itr->first ; + G4int PosZTrackID = Pos_Z_itr->first - N ; G4double PosZ = *(Pos_Z_itr->second) ; - if (PosZTrackID == ETrackID) { + if (PosZTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionZ(PosZ) ; } Pos_Z_itr++; @@ -1052,9 +1041,9 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Angle Theta Ang_Theta_itr = AngThetaHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngThetaTrackID = Ang_Theta_itr->first ; + G4int AngThetaTrackID = Ang_Theta_itr->first - N ; G4double AngTheta = *(Ang_Theta_itr->second) ; - if (AngThetaTrackID == ETrackID) { + if (AngThetaTrackID == NTrackID) { ms_InterCoord->SetDetectedAngleTheta(AngTheta) ; } Ang_Theta_itr++; @@ -1063,9 +1052,9 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Angle Phi Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngPhiTrackID = Ang_Phi_itr->first ; + G4int AngPhiTrackID = Ang_Phi_itr->first - N ; G4double AngPhi = *(Ang_Phi_itr->second) ; - if (AngPhiTrackID == ETrackID) { + if (AngPhiTrackID == NTrackID) { ms_InterCoord->SetDetectedAnglePhi(AngPhi) ; } Ang_Phi_itr++; @@ -1074,16 +1063,16 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Second Stage SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < SiLiEnergyHitMap->entries() ; h++) { - G4int SiLiEnergyTrackID = SiLiEnergy_itr->first ; - G4double SiLiEnergy = *(SiLiEnergy_itr->second) ; + G4int SiLiEnergyTrackID = SiLiEnergy_itr->first - N; + G4double SiLiEnergy = *(SiLiEnergy_itr->second); - if (SiLiEnergyTrackID == ETrackID) { + if (SiLiEnergyTrackID == NTrackID) { ms_Event->SetGPDTrkSecondStageEEnergy(RandGauss::shoot(SiLiEnergy, ResoSecondStage)) ; ms_Event->SetGPDTrkSecondStageEPadNbr(1); ms_Event->SetGPDTrkSecondStageTPadNbr(1); ms_Event->SetGPDTrkSecondStageTTime(1); - ms_Event->SetGPDTrkSecondStageTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkSecondStageEDetectorNbr(INDEX + N); + ms_Event->SetGPDTrkSecondStageTDetectorNbr(m_index["Square"] + N); + ms_Event->SetGPDTrkSecondStageEDetectorNbr(m_index["Square"] + N); } SiLiEnergy_itr++; @@ -1092,24 +1081,24 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event) // Third Stage ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) { - G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first ; + G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first - N; G4double ThirdStageEnergy = *(ThirdStageEnergy_itr->second) ; - if (ThirdStageEnergyTrackID == ETrackID) { + if (ThirdStageEnergyTrackID == NTrackID) { ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage)); ms_Event->SetGPDTrkThirdStageEPadNbr(1); ms_Event->SetGPDTrkThirdStageTPadNbr(1); ms_Event->SetGPDTrkThirdStageTTime(1); - ms_Event->SetGPDTrkThirdStageTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkThirdStageEDetectorNbr(INDEX + N); + ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Square"] + N); + ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Square"] + N); } ThirdStageEnergy_itr++; } - Energy_itr++; - if (checkSi) HitNumber++ ; + DetectorNumber_itr++; } + // clear map for next event DetectorNumberHitMap ->clear(); EnergyHitMap ->clear() ; @@ -1132,16 +1121,16 @@ void GaspardTrackerSquare::InitializeScorers() { // First stage Associate Scorer m_FirstStageScorer = new G4MultiFunctionalDetector("FirstStageScorerGPDSquare"); - G4VPrimitiveScorer* DetNbr = new GPDScorerDetectorNumber("DetectorNumber", 0, "Silicon"); - G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", 0); - G4VPrimitiveScorer* TOF = new PSTOF("StripTime", 0); + G4VPrimitiveScorer* DetNbr = new GENERALSCORERS::PSDetectorNumber("DetectorNumber", "GPDSquare", 0); + G4VPrimitiveScorer* TOF = new GENERALSCORERS::PSTOF("StripTime","GPDSquare", 0); + G4VPrimitiveScorer* InteractionCoordinatesX = new GENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","GPDSquare", 0); + G4VPrimitiveScorer* InteractionCoordinatesY = new GENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","GPDSquare", 0); + G4VPrimitiveScorer* InteractionCoordinatesZ = new GENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","GPDSquare", 0); + G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new GENERALSCORERS::PSInteractionCoordinatesAngleTheta("InterCoordAngTheta","GPDSquare", 0); + G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new GENERALSCORERS::PSInteractionCoordinatesAnglePhi("InterCoordAngPhi","GPDSquare", 0); + G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", "GPDSquare", 0); G4VPrimitiveScorer* StripPositionX = new GPDScorerFirstStageFrontStripSquare("StripNumberX", 0, NumberOfStrips); G4VPrimitiveScorer* StripPositionY = new GPDScorerFirstStageBackStripSquare("StripNumberY", 0, NumberOfStrips); - G4VPrimitiveScorer* InteractionCoordinatesX = new PSInteractionCoordinatesX("InterCoordX", 0); - G4VPrimitiveScorer* InteractionCoordinatesY = new PSInteractionCoordinatesY("InterCoordY", 0); - G4VPrimitiveScorer* InteractionCoordinatesZ = new PSInteractionCoordinatesZ("InterCoordZ", 0); - G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new PSInteractionCoordinatesAngleTheta("InterCoordAngTheta", 0); - G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new PSInteractionCoordinatesAnglePhi("InterCoordAngPhi", 0); //and register it to the multifunctionnal detector m_FirstStageScorer->RegisterPrimitive(DetNbr); @@ -1157,12 +1146,12 @@ void GaspardTrackerSquare::InitializeScorers() // Second stage Associate Scorer m_SecondStageScorer = new G4MultiFunctionalDetector("SecondStageScorerGPDSquare"); - G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", 0); + G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", "GPDSquare", 0); m_SecondStageScorer->RegisterPrimitive(SecondStageEnergy); // Third stage Associate Scorer m_ThirdStageScorer = new G4MultiFunctionalDetector("ThirdStageScorerGPDSquare"); - G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", 0); + G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", "GPDSquare", 0); m_ThirdStageScorer->RegisterPrimitive(ThirdStageEnergy); // Add All Scorer to the Global Scorer Manager diff --git a/NPSimulation/src/GaspardTrackerTrapezoid.cc b/NPSimulation/src/GaspardTrackerTrapezoid.cc index 714a28c9d23a8980ab38c04e540f7b11bc0f16ea..2a38ba8c373085604a94e8fc14af6140fdc87ad3 100644 --- a/NPSimulation/src/GaspardTrackerTrapezoid.cc +++ b/NPSimulation/src/GaspardTrackerTrapezoid.cc @@ -9,12 +9,13 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 15/07/09 * - * Last update : * + * Last update : 12/10/09 * *---------------------------------------------------------------------------* * Decription: Define a module of trapezoidal shape for the Gaspard tracker * * * *---------------------------------------------------------------------------* * Comment: * + * + 12/10/09: Change scorer scheme (N. de Sereville) * * * * * *****************************************************************************/ @@ -179,14 +180,14 @@ void GaspardTrackerTrapezoid::VolumeMaker(G4int TelescopeNumber , G4Material* Silicon = new G4Material("Si", z = 14., a, density); // Al - density = 2.702 * g / cm3; - a = 26.98 * g / mole; - G4Material* Aluminium = new G4Material("Aluminium", z = 13., a, density); +// density = 2.702 * g / cm3; +// a = 26.98 * g / mole; +// G4Material* Aluminium = new G4Material("Aluminium", z = 13., a, density); // Iron - density = 7.874 * g / cm3; - a = 55.847 * g / mole; - G4Material* Iron = new G4Material("Iron", z = 26., a, density); +// density = 7.874 * g / cm3; +// a = 55.847 * g / mole; +// G4Material* Iron = new G4Material("Iron", z = 26., a, density); // CsI density = 4.51 * g / cm3; @@ -316,7 +317,7 @@ void GaspardTrackerTrapezoid::VolumeMaker(G4int TelescopeNumber , FirstStageHeight/2, FirstStageBaseSmall/2, FirstStageBaseLarge/2, 0*deg); G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon, Silicon, "logicSilicon", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, "G" + DetectorNumber + "Silicon", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, Name + "_Silicon", logicMM, false, 0); // Set First Stage sensible logicSilicon->SetSensitiveDetector(m_FirstStageScorer); @@ -346,7 +347,7 @@ void GaspardTrackerTrapezoid::VolumeMaker(G4int TelescopeNumber , G4LogicalVolume* logicThirdStage = new G4LogicalVolume(solidThirdStage, Silicon, "logicThirdStage", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionThirdStage, logicThirdStage, "G" + DetectorNumber + "ThirdStage", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionThirdStage, logicThirdStage, Name + "_ThirdStage", logicMM, false, 0); // Visualisation of Third Stage G4VisAttributes* ThirdStageVisAtt = new G4VisAttributes(G4Colour(0.7, 0.7, 0.7)) ; @@ -722,13 +723,9 @@ void GaspardTrackerTrapezoid::SetInterCoordPointer(TInteractionCoordinates* inte // Called at in the EventAction::EndOfEventAvtion void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) { - bool checkSi = false ; - G4String DetectorNumber ; - ////////////////////////////////////////////////////////////////////////////////////// //////////////////////// Used to Read Event Map of detector ////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// - // First Stage std::map<G4int, G4int*>::iterator DetectorNumber_itr; std::map<G4int, G4double*>::iterator Energy_itr; @@ -758,10 +755,6 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) std::map<G4int, G4double*>::iterator ThirdStageEnergy_itr; G4THitsMap<G4double>* ThirdStageEnergyHitMap = NULL; -////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////// - G4int HitNumber = 0; - checkSi = false; // Read the Scorer associated to the first Stage //Detector Number @@ -833,40 +826,36 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) return; } - // Loop on Strip energy - for (G4int l = 0 ; l < sizeE ; l++) { - G4int ETrackID = Energy_itr->first ; - G4double E = *(Energy_itr->second) ; - G4int N = 0; - - if (E > 0) { - checkSi = true ; - ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)) ; - - // Detector Number - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeN ; h++) { - G4int NTrackID = DetectorNumber_itr->first ; - G4double Nl = *(DetectorNumber_itr->second) ; - - if (NTrackID == ETrackID) { - N = Nl ; - ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(INDEX + N); - } - DetectorNumber_itr++; + // Loop on FirstStage number + for (G4int l = 0; l < sizeN; l++) { + G4double N = *(DetectorNumber_itr->second); + G4int NTrackID = DetectorNumber_itr->first - N; + + if (N > 0) { + // Fill detector number + ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(m_index["Trapezoid"] + N); + ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(m_index["Trapezoid"] + N); + ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(m_index["Trapezoid"] + N); + ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(m_index["Trapezoid"] + N); + + // Energy + for (G4int l = 0 ; l < sizeE ; l++) { + G4int ETrackID = Energy_itr->first - N; + G4double E = *(Energy_itr->second); + if (ETrackID == NTrackID) { + ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage)); + ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage)); } + Energy_itr++; + } // Time Time_itr = TimeHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeT ; h++) { - G4int TTrackID = Time_itr->first ; - G4double T = *(Time_itr->second) ; + G4int TTrackID = Time_itr->first - N; + G4double T = *(Time_itr->second); - if (TTrackID == ETrackID) { + if (TTrackID == NTrackID) { T = RandGauss::shoot(T, ResoTimePPAC) ; ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(T, ResoTimeGpd)) ; ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(T, ResoTimeGpd)) ; @@ -877,9 +866,9 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // X X_itr = XHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int XTrackID = X_itr->first ; - G4double X = *(X_itr->second) ; - if (XTrackID == ETrackID) { + G4int XTrackID = X_itr->first - N; + G4double X = *(X_itr->second); + if (XTrackID == NTrackID) { ms_Event->SetGPDTrkFirstStageFrontEStripNbr(X); ms_Event->SetGPDTrkFirstStageFrontTStripNbr(X); } @@ -890,9 +879,9 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // Y Y_itr = YHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < sizeY ; h++) { - G4int YTrackID = Y_itr->first ; - G4double Y = *(Y_itr->second) ; - if (YTrackID == ETrackID) { + G4int YTrackID = Y_itr->first - N; + G4double Y = *(Y_itr->second); + if (YTrackID == NTrackID) { ms_Event->SetGPDTrkFirstStageBackEStripNbr(Y); ms_Event->SetGPDTrkFirstStageBackTStripNbr(Y); } @@ -903,9 +892,9 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // Pos X Pos_X_itr = PosXHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosXTrackID = Pos_X_itr->first ; + G4int PosXTrackID = Pos_X_itr->first - N ; G4double PosX = *(Pos_X_itr->second) ; - if (PosXTrackID == ETrackID) { + if (PosXTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionX(PosX) ; } Pos_X_itr++; @@ -914,9 +903,9 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // Pos Y Pos_Y_itr = PosYHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosYTrackID = Pos_Y_itr->first ; + G4int PosYTrackID = Pos_Y_itr->first - N ; G4double PosY = *(Pos_Y_itr->second) ; - if (PosYTrackID == ETrackID) { + if (PosYTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionY(PosY) ; } Pos_Y_itr++; @@ -925,9 +914,9 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // Pos Z Pos_Z_itr = PosZHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosZTrackID = Pos_Z_itr->first ; + G4int PosZTrackID = Pos_Z_itr->first - N ; G4double PosZ = *(Pos_Z_itr->second) ; - if (PosZTrackID == ETrackID) { + if (PosZTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionZ(PosZ) ; } Pos_Z_itr++; @@ -936,9 +925,9 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // Angle Theta Ang_Theta_itr = AngThetaHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngThetaTrackID = Ang_Theta_itr->first ; + G4int AngThetaTrackID = Ang_Theta_itr->first - N ; G4double AngTheta = *(Ang_Theta_itr->second) ; - if (AngThetaTrackID == ETrackID) { + if (AngThetaTrackID == NTrackID) { ms_InterCoord->SetDetectedAngleTheta(AngTheta) ; } Ang_Theta_itr++; @@ -947,9 +936,9 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // Angle Phi Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngPhiTrackID = Ang_Phi_itr->first ; + G4int AngPhiTrackID = Ang_Phi_itr->first - N ; G4double AngPhi = *(Ang_Phi_itr->second) ; - if (AngPhiTrackID == ETrackID) { + if (AngPhiTrackID == NTrackID) { ms_InterCoord->SetDetectedAnglePhi(AngPhi) ; } Ang_Phi_itr++; @@ -960,23 +949,22 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event) // Third Stage ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) { - G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first ; - G4double ThirdStageEnergy = *(ThirdStageEnergy_itr->second) ; + G4int ThirdStageEnergyTrackID = ThirdStageEnergy_itr->first - N; + G4double ThirdStageEnergy = *(ThirdStageEnergy_itr->second); - if (ThirdStageEnergyTrackID == ETrackID) { + if (ThirdStageEnergyTrackID == NTrackID) { ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage)); ms_Event->SetGPDTrkThirdStageEPadNbr(1); ms_Event->SetGPDTrkThirdStageTPadNbr(1); ms_Event->SetGPDTrkThirdStageTTime(1); - ms_Event->SetGPDTrkThirdStageTDetectorNbr(INDEX + N); - ms_Event->SetGPDTrkThirdStageEDetectorNbr(INDEX + N); + ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Trapezoid"] + N); + ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Trapezoid"] + N); } ThirdStageEnergy_itr++; } - Energy_itr++; - if (checkSi) HitNumber++ ; + DetectorNumber_itr++; } // clear map for next event @@ -1000,16 +988,16 @@ void GaspardTrackerTrapezoid::InitializeScorers() { // First stage Associate Scorer m_FirstStageScorer = new G4MultiFunctionalDetector("FirstStageScorerGPDTrapezoid"); - G4VPrimitiveScorer* DetNbr = new GPDScorerDetectorNumber("DetectorNumber", 0, "Silicon"); - G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", 0); - G4VPrimitiveScorer* TOF = new PSTOF("StripTime", 0); + G4VPrimitiveScorer* DetNbr = new GENERALSCORERS::PSDetectorNumber("DetectorNumber", "GPDTrapezoid", 0); + G4VPrimitiveScorer* TOF = new GENERALSCORERS::PSTOF("StripTime","GPDTrapezoid", 0); + G4VPrimitiveScorer* InteractionCoordinatesX = new GENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","GPDTrapezoid", 0); + G4VPrimitiveScorer* InteractionCoordinatesY = new GENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","GPDTrapezoid", 0); + G4VPrimitiveScorer* InteractionCoordinatesZ = new GENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","GPDTrapezoid", 0); + G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new GENERALSCORERS::PSInteractionCoordinatesAngleTheta("InterCoordAngTheta","GPDTrapezoid", 0); + G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new GENERALSCORERS::PSInteractionCoordinatesAnglePhi("InterCoordAngPhi","GPDTrapezoid", 0); + G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", "GPDTrapezoid", 0); G4VPrimitiveScorer* StripPositionX = new GPDScorerFirstStageFrontStripTrapezoid("StripNumberX", 0, NumberOfStripsX); G4VPrimitiveScorer* StripPositionY = new GPDScorerFirstStageBackStripTrapezoid("StripNumberY", 0, NumberOfStripsY); - G4VPrimitiveScorer* InteractionCoordinatesX = new PSInteractionCoordinatesX("InterCoordX", 0); - G4VPrimitiveScorer* InteractionCoordinatesY = new PSInteractionCoordinatesY("InterCoordY", 0); - G4VPrimitiveScorer* InteractionCoordinatesZ = new PSInteractionCoordinatesZ("InterCoordZ", 0); - G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new PSInteractionCoordinatesAngleTheta("InterCoordAngTheta", 0); - G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new PSInteractionCoordinatesAnglePhi("InterCoordAngPhi", 0); //and register it to the multifunctionnal detector m_FirstStageScorer->RegisterPrimitive(DetNbr); @@ -1025,12 +1013,12 @@ void GaspardTrackerTrapezoid::InitializeScorers() // Second stage Associate Scorer m_SecondStageScorer = new G4MultiFunctionalDetector("SecondStageScorerGPDTrapezoid"); - G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", 0); + G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", "GPDTrapezoid", 0); m_SecondStageScorer->RegisterPrimitive(SecondStageEnergy); // Third stage Associate Scorer m_ThirdStageScorer = new G4MultiFunctionalDetector("ThirdStageScorerGPDTrapezoid"); - G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", 0); + G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", "GPDTrapezoid", 0); m_ThirdStageScorer->RegisterPrimitive(ThirdStageEnergy); // Add All Scorer to the Global Scorer Manager diff --git a/NPSimulation/src/GeneralScorers.cc b/NPSimulation/src/GeneralScorers.cc index 9fe510c3b9a76f788af8ae39d89c410e63764fff..c22470385ec78a2e41f3deaac458714dfd2bd302 100644 --- a/NPSimulation/src/GeneralScorers.cc +++ b/NPSimulation/src/GeneralScorers.cc @@ -24,15 +24,107 @@ *****************************************************************************/ #include "GeneralScorers.hh" #include "G4UnitsTable.hh" +using namespace GENERALSCORERS ; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +// The following function is used in many scorer. following the Detector Volume Nomenclature +// DetectorNameX_SubPart_SubPart +// where X stand for the detector number. + +int GENERALSCORERS::PickUpDetectorNumber(G4Step* aStep, std::string DetName) +{ + std::string name = aStep->GetTrack()->GetVolume()->GetName(); + std::string nbr; + size_t start, end; + + start = name.find(DetName) + DetName.length(); + end = name.find("_"); + + int numberOfCharacterInDetectorNumber = (int)end - (int)start; + + for (unsigned int i = start; i < start + numberOfCharacterInDetectorNumber; i++) + nbr += name[i]; + + return atoi(nbr.c_str()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + //Detector Number Scorer +PSDetectorNumber::PSDetectorNumber(G4String name, G4String VolumeName, G4int depth ) + : G4VPrimitiveScorer(name, depth), HCID(-1) +{ + m_VolumeName = VolumeName; +} + +PSDetectorNumber::~PSDetectorNumber() +{ + ; +} + +G4bool PSDetectorNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) + { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName) ; + + G4double edep = aStep->GetTotalEnergyDeposit(); + + if (edep < TriggerThreshold) return FALSE; + + G4int index = aStep->GetTrack()->GetTrackID(); + EvtMap->set(index+DetNumber, DetNumber); + return TRUE; +} + +void PSDetectorNumber::Initialize(G4HCofThisEvent* HCE) +{ + EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); + if (HCID < 0) { + HCID = GetCollectionID(0); + } + HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); +} + +void PSDetectorNumber::EndOfEvent(G4HCofThisEvent*) +{ + ; +} + +void PSDetectorNumber::clear() +{ + EvtMap->clear(); +} + +void PSDetectorNumber::DrawAll() +{ + ; +} + +void PSDetectorNumber::PrintAll() +{ + G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; + G4cout << " PrimitiveScorer " << GetName() << G4endl; + G4cout << " Number of entries " << EvtMap->entries() << G4endl; + std::map<G4int, G4int*>::iterator itr = EvtMap->GetMap()->begin(); + for (; itr != EvtMap->GetMap()->end(); itr++) { + G4cout << " copy no.: " << itr->first + << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") + << G4endl; + } +} + + + + // Energy Scorer (deal with multiple particle hit) -PSEnergy::PSEnergy(G4String name, G4int depth) +PSEnergy::PSEnergy(G4String name, G4String VolumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = VolumeName; } PSEnergy::~PSEnergy() @@ -41,12 +133,14 @@ PSEnergy::~PSEnergy() G4bool PSEnergy::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName) ; + G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; + if (edep < TriggerThreshold) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->add(index, edep); + EvtMap->add(index+DetNumber, edep); return TRUE; } @@ -89,24 +183,25 @@ void PSEnergy::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //TOF Scorer// -PSTOF::PSTOF(G4String name, G4int depth) +PSTOF::PSTOF(G4String name, G4String VolumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { - ; + m_VolumeName = VolumeName; } PSTOF::~PSTOF() { - ; } G4bool PSTOF::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName); + G4double TOF = aStep->GetPreStepPoint()->GetGlobalTime(); G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; + if (edep < TriggerThreshold) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, TOF); + EvtMap->set(index+DetNumber, TOF); return TRUE; } @@ -122,7 +217,6 @@ void PSTOF::Initialize(G4HCofThisEvent* HCE) void PSTOF::EndOfEvent(G4HCofThisEvent*) { - ; } void PSTOF::clear() @@ -144,9 +238,10 @@ void PSTOF::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Interaction coordinates X -PSInteractionCoordinatesX::PSInteractionCoordinatesX(G4String name, G4int depth) +PSInteractionCoordinatesX::PSInteractionCoordinatesX(G4String name, G4String VolumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = VolumeName; } PSInteractionCoordinatesX::~PSInteractionCoordinatesX() @@ -155,11 +250,13 @@ PSInteractionCoordinatesX::~PSInteractionCoordinatesX() G4bool PSInteractionCoordinatesX::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName) ; + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); G4double pos_x = POS.x() / mm; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, pos_x); + EvtMap->set(index+DetNumber, pos_x); return TRUE; } @@ -196,9 +293,10 @@ void PSInteractionCoordinatesX::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Interaction coordinates Y -PSInteractionCoordinatesY::PSInteractionCoordinatesY(G4String name, G4int depth) +PSInteractionCoordinatesY::PSInteractionCoordinatesY(G4String name, G4String VolumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = VolumeName; } PSInteractionCoordinatesY::~PSInteractionCoordinatesY() @@ -207,16 +305,19 @@ PSInteractionCoordinatesY::~PSInteractionCoordinatesY() G4bool PSInteractionCoordinatesY::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName) ; + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); G4double pos_y = POS.y() / mm; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, pos_y); + EvtMap->set(index+DetNumber, pos_y); return TRUE; } void PSInteractionCoordinatesY::Initialize(G4HCofThisEvent* HCE) { + EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), GetName()); if (HCID < 0) { HCID = GetCollectionID(0); @@ -248,9 +349,10 @@ void PSInteractionCoordinatesY::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Interaction coordinates Z -PSInteractionCoordinatesZ::PSInteractionCoordinatesZ(G4String name, G4int depth) +PSInteractionCoordinatesZ::PSInteractionCoordinatesZ(G4String name, G4String VolumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = VolumeName; } PSInteractionCoordinatesZ::~PSInteractionCoordinatesZ() @@ -259,11 +361,13 @@ PSInteractionCoordinatesZ::~PSInteractionCoordinatesZ() G4bool PSInteractionCoordinatesZ::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName) ; + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); G4double pos_z = POS.z() / mm; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, pos_z); + EvtMap->set(index+DetNumber, pos_z); return TRUE; } @@ -301,9 +405,10 @@ void PSInteractionCoordinatesZ::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Interaction coordinates Angle Theta -PSInteractionCoordinatesAngleTheta::PSInteractionCoordinatesAngleTheta(G4String name, G4int depth) +PSInteractionCoordinatesAngleTheta::PSInteractionCoordinatesAngleTheta(G4String name, G4String VolumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = VolumeName; } PSInteractionCoordinatesAngleTheta::~PSInteractionCoordinatesAngleTheta() @@ -312,11 +417,13 @@ PSInteractionCoordinatesAngleTheta::~PSInteractionCoordinatesAngleTheta() G4bool PSInteractionCoordinatesAngleTheta::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName) ; + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); G4double angle_theta = POS.theta() / deg; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, angle_theta); + EvtMap->set(index+DetNumber, angle_theta); return TRUE; } @@ -354,9 +461,10 @@ void PSInteractionCoordinatesAngleTheta::PrintAll() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Interaction coordinates Angle Phi -PSInteractionCoordinatesAnglePhi::PSInteractionCoordinatesAnglePhi(G4String name, G4int depth) +PSInteractionCoordinatesAnglePhi::PSInteractionCoordinatesAnglePhi(G4String name, G4String VolumeName, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) { + m_VolumeName = VolumeName; } PSInteractionCoordinatesAnglePhi::~PSInteractionCoordinatesAnglePhi() @@ -365,12 +473,14 @@ PSInteractionCoordinatesAnglePhi::~PSInteractionCoordinatesAnglePhi() G4bool PSInteractionCoordinatesAnglePhi::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNumber = PickUpDetectorNumber(aStep, m_VolumeName) ; + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); G4double angle_phi = POS.phi() / deg; if (angle_phi < 0) angle_phi += 360; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, angle_phi); + EvtMap->set(index+DetNumber, angle_phi); return TRUE; } @@ -405,77 +515,4 @@ void PSInteractionCoordinatesAnglePhi::PrintAll() G4cout << " Number of entries " << EvtMap->entries() << G4endl ; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - //Detector Number Scorer -PSDetectorNumber::PSDetectorNumber(G4String name, G4int depth, G4String VolumeName ) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ - m_VolumeName = VolumeName; -} - -PSDetectorNumber::~PSDetectorNumber() -{ - ; -} - -G4bool PSDetectorNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - std::string name = aStep->GetTrack()->GetVolume()->GetName(); - std::string nbr ; - size_t found; - found=name.find(m_VolumeName); - found = found + m_VolumeName.length(); - - int numberOfCharacterInDetectorNumber = name.length() - (int)found ; - - for( int i = found ; i < found + numberOfCharacterInDetectorNumber ; i++ ) - nbr += name[i] ; - - G4int DetNbr = atoi( nbr.c_str() ) ; - G4double edep = aStep->GetTotalEnergyDeposit(); - - if (edep < 100*keV) return FALSE; - - G4int index = aStep->GetTrack()->GetTrackID(); - - EvtMap->set(index, DetNbr); - return TRUE; -} - -void PSDetectorNumber::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void PSDetectorNumber::EndOfEvent(G4HCofThisEvent*) -{ - ; -} - -void PSDetectorNumber::clear() -{ - EvtMap->clear(); -} - -void PSDetectorNumber::DrawAll() -{ - ; -} -void PSDetectorNumber::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; - G4cout << " PrimitiveScorer " << GetName() << G4endl; - G4cout << " Number of entries " << EvtMap->entries() << G4endl; - std::map<G4int, G4int*>::iterator itr = EvtMap->GetMap()->begin(); - for (; itr != EvtMap->GetMap()->end(); itr++) { - G4cout << " copy no.: " << itr->first - << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") - << G4endl; - } -} diff --git a/NPSimulation/src/MUST2Array.cc b/NPSimulation/src/MUST2Array.cc index 3040dec99e7980a88ec584555e587fcab00a2aa1..8b18d4b053b8d28e568af766f7d27e05afb65bbd 100644 --- a/NPSimulation/src/MUST2Array.cc +++ b/NPSimulation/src/MUST2Array.cc @@ -9,7 +9,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : October 2009 * *---------------------------------------------------------------------------* * Decription: * * This file describe the MUST2 charge particle Detector * @@ -157,10 +157,10 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , G4PVPlacement* PVPBuffer ; - G4Trd* solidMM = new G4Trd("MM" + DetectorNumber, 0.5*FaceFront, 0.5*FaceBack, 0.5*FaceFront, 0.5*FaceBack, 0.5*Length); - G4LogicalVolume* logicMM = new G4LogicalVolume(solidMM, m_MaterialIron, "MM" + DetectorNumber, 0, 0, 0) ; + G4Trd* solidMM = new G4Trd("MUST2Telescope" + DetectorNumber, 0.5*FaceFront, 0.5*FaceBack, 0.5*FaceFront, 0.5*FaceBack, 0.5*Length); + G4LogicalVolume* logicMM = new G4LogicalVolume(solidMM, m_MaterialIron, "MUST2Telescope" + DetectorNumber, 0, 0, 0) ; - G4String Name = "MM" + DetectorNumber ; + G4String Name = "MUST2Telescope" + DetectorNumber ; PVPBuffer = new G4PVPlacement(G4Transform3D(*MMrot, MMpos) , @@ -180,42 +180,10 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , G4Trd* solidVacBox = new G4Trd("solidVacBox", 0.5*SiliconFace, 0.5*CsIFaceFront, 0.5*SiliconFace, 0.5*CsIFaceFront, 0.5*VacBoxThickness); G4LogicalVolume* logicVacBox = new G4LogicalVolume(solidVacBox, m_MaterialVacuum, "logicVacBox", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionVacBox, logicVacBox, "M" + DetectorNumber + "VacBox", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionVacBox, logicVacBox, Name + "_VacBox", logicMM, false, 0); logicVacBox->SetVisAttributes(G4VisAttributes::Invisible); -// Add a degrader plate between Si and CsI: - - /* - G4Box* Degrader = new G4Box("Degrader" , 50*mm , 50*mm , 0.1*mm ); - G4LogicalVolume* logicDegrader = new G4LogicalVolume( Degrader , Harvar, "logicDegrader",0,0,0) ; - PVPBuffer = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicDegrader,"Degrader",logicVacBox,false,0) ; - - - /* - //Place two marker to identify the u and v axis on silicon face: - //marker are placed a bit before the silicon itself so they don't perturbate simulation - //Uncomment to help debugging or if you want to understand the way the code work. - //I should recommand to Comment it during simulation to avoid perturbation of simulation - //Remember G4 is limitationg step on geometry constraints. - - G4ThreeVector positionMarkerU = CT*0.98 + MMu*SiliconFace/4; - G4Box* solidMarkerU = new G4Box( "solidMarkerU" , SiliconFace/4 , 1*mm , 1*mm ) ; - G4LogicalVolume* logicMarkerU = new G4LogicalVolume( solidMarkerU , Vacuum , "logicMarkerU",0,0,0) ; - PVPBuffer = new G4PVPlacement(G4Transform3D(*MMrot,positionMarkerU),logicMarkerU,"MarkerU",world,false,0) ; - - G4VisAttributes* MarkerUVisAtt= new G4VisAttributes(G4Colour(0.,0.,0.5));//blue - logicMarkerU->SetVisAttributes(MarkerUVisAtt); - - - G4ThreeVector positionMarkerV = CT*0.98 + MMv*SiliconFace/4; - G4Box* solidMarkerV = new G4Box( "solidMarkerU" , 1*mm , SiliconFace/4 , 1*mm ) ; - G4LogicalVolume* logicMarkerV = new G4LogicalVolume( solidMarkerV , Vacuum , "logicMarkerV",0,0,0) ; - PVPBuffer = new G4PVPlacement(G4Transform3D(*MMrot,positionMarkerV),logicMarkerV,"MarkerV",world,false,0) ; - - G4VisAttributes* MarkerVVisAtt= new G4VisAttributes(G4Colour(0.,0.5,0.5));//green - logicMarkerV->SetVisAttributes(MarkerVVisAtt); */ - //////////////////////////////////////////////////////////////// /////////////////Si Strip Construction////////////////////////// //////////////////////////////////////////////////////////////// @@ -227,8 +195,8 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , G4Box* solidAluStrip = new G4Box("AluBox", 0.5*SiliconFace, 0.5*SiliconFace, 0.5*AluStripThickness); G4LogicalVolume* logicAluStrip = new G4LogicalVolume(solidAluStrip, m_MaterialAluminium, "logicAluStrip", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionAluStripFront, logicAluStrip, "M" + DetectorNumber + "AluStripFront", logicMM, false, 0); - PVPBuffer = new G4PVPlacement(0, positionAluStripBack, logicAluStrip, "M" + DetectorNumber + "AluStripBack", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionAluStripFront, logicAluStrip, Name + "_AluStripFront", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionAluStripBack, logicAluStrip, Name + "_AluStripBack", logicMM, false, 0); logicAluStrip->SetVisAttributes(G4VisAttributes::Invisible); @@ -237,7 +205,7 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , G4Box* solidSilicon = new G4Box("solidSilicon", 0.5*SiliconFace, 0.5*SiliconFace, 0.5*SiliconThickness); G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon, m_MaterialSilicon, "logicSilicon", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, "M" + DetectorNumber + "Silicon", logicMM, false, 0); + PVPBuffer = new G4PVPlacement(0, positionSilicon, logicSilicon, Name + "_Silicon", logicMM, false, 0); ///Set Silicon strip sensible @@ -255,38 +223,33 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , if (wSiLi) { G4double SiLiSpace = 8 * mm; - G4RotationMatrix* rotSiLi = Rotation(0., 0., 0.); - - G4ThreeVector positionSiLi = G4ThreeVector(-0.25 * SiliconFace - 0.5 * SiLiSpace, 0, 0); - G4ThreeVector positionSiLi2 = G4ThreeVector(0.25 * SiliconFace + 0.5 * SiLiSpace, 0, 0); - - G4Box* solidSiLi = new G4Box("SiLi", 0.5*SiLiFaceX, 0.5*SiLiFaceY, 0.5*SiLiThickness); + G4RotationMatrix* rotSiLi = new G4RotationMatrix(0,0,-90*deg); //Rotation(0., 0., 0.); - G4LogicalVolume* logicSiLi = new G4LogicalVolume(solidSiLi, m_MaterialAluminium, "SiLi" + DetectorNumber, 0, 0, 0); - - // First Si(Li) 2 time 4 detectore - PVPBuffer = new G4PVPlacement(G4Transform3D(*rotSiLi, positionSiLi) , - logicSiLi , - "SiLi" + DetectorNumber , - logicVacBox , - false , - 0); + // G4Box* solidSiLi = new G4Box("SiLi", 0.5*SiLiFaceX, 0.5*SiLiFaceY, 0.5*SiLiThickness); + + G4Box* solidSiLi = new G4Box("SiLi", 0.5*SiliconFace+0.5*SiLiSpace, 0.5*SiliconFace, 0.5*SiLiThickness); + + G4LogicalVolume* logicSiLi = new G4LogicalVolume(solidSiLi, m_MaterialAluminium, Name + "_SiLi" , 0, 0, 0); - // Second Si(Li) 2 time 4 detectore - PVPBuffer = new G4PVPlacement(G4Transform3D(*rotSiLi, positionSiLi2) , - logicSiLi , - "SiLi" + DetectorNumber , - logicVacBox , - false , - 1); + PVPBuffer = new G4PVPlacement( G4Transform3D(*rotSiLi, G4ThreeVector(0,0,0) ) , + logicSiLi , + Name + "_SiLi" , + logicVacBox , + false , + 0 ); // SiLi are placed inside of the VacBox... // Left/Right define when looking to detector from Si to CsI - G4double SiLi_HighY_Upper = 19.86 * mm; - G4double SiLi_HighY_Center = 25.39 * mm ; - G4double SiLi_WidthX_Left = 22.85 * mm; - G4double SiLi_WidthX_Right = 24.9 * mm ; - G4double SiLi_ShiftX = 0.775 * mm ; + G4double SiLi_HighY_Upper = 19.86 * mm ; + G4double SiLi_HighY_Center = 25.39 * mm ; + G4double SiLi_WidthX_Left = 22.85 * mm ; + G4double SiLi_WidthX_Right = 24.9 * mm ; + G4double SiLi_ShiftX = 0.775 * mm ; + + + // SiLi are organized by two group of 8 Up(9 to 15) and Down(1 to 8). + G4ThreeVector ShiftSiLiUp = G4ThreeVector(-0.25 * SiliconFace - 0.5 * SiLiSpace, 0, 0) ; + G4ThreeVector ShiftSiLiDown = G4ThreeVector(0.25 * SiliconFace + 0.5 * SiLiSpace, 0, 0) ; // SiLi : left side of SiLi detector G4Box* solidSiLi_LT = new G4Box("SiLi_LT" , 0.5*SiLi_WidthX_Left , 0.5*SiLi_HighY_Upper , 0.5*SiLiThickness); @@ -300,58 +263,139 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , G4LogicalVolume* logicSiLi_LT = new G4LogicalVolume(solidSiLi_LT , m_MaterialSilicon , "SiLi_LT" , 0 , 0 , 0); G4LogicalVolume* logicSiLi_RT = new G4LogicalVolume(solidSiLi_RT , m_MaterialSilicon , "SiLi_RT" , 0 , 0 , 0); - G4LogicalVolume* logicSiLi_LC1 = new G4LogicalVolume(solidSiLi_LC1 , m_MaterialSilicon , "SiLi_LC1" , 0 , 0 , 0); - G4LogicalVolume* logicSiLi_RC1 = new G4LogicalVolume(solidSiLi_RC1 , m_MaterialSilicon , "SiLi_RC1" , 0 , 0 , 0); + G4LogicalVolume* logicSiLi_LC1 = new G4LogicalVolume(solidSiLi_LC1 , m_MaterialSilicon , "SiLi_LC1" , 0 , 0 , 0); + G4LogicalVolume* logicSiLi_RC1 = new G4LogicalVolume(solidSiLi_RC1 , m_MaterialSilicon , "SiLi_RC1" , 0 , 0 , 0); G4LogicalVolume* logicSiLi_LB = new G4LogicalVolume(solidSiLi_LB , m_MaterialSilicon , "SiLi_LB" , 0 , 0 , 0); G4LogicalVolume* logicSiLi_RB = new G4LogicalVolume(solidSiLi_RB , m_MaterialSilicon , "SiLi_RB" , 0 , 0 , 0); - G4LogicalVolume* logicSiLi_LC2 = new G4LogicalVolume(solidSiLi_LC2 , m_MaterialSilicon , "SiLi_LC2" , 0 , 0 , 0); - G4LogicalVolume* logicSiLi_RC2 = new G4LogicalVolume(solidSiLi_RC2 , m_MaterialSilicon , "SiLi_RC2" , 0 , 0 , 0); + G4LogicalVolume* logicSiLi_LC2 = new G4LogicalVolume(solidSiLi_LC2 , m_MaterialSilicon , "SiLi_LC2" , 0 , 0 , 0); + G4LogicalVolume* logicSiLi_RC2 = new G4LogicalVolume(solidSiLi_RC2 , m_MaterialSilicon , "SiLi_RC2" , 0 , 0 , 0); G4double interSiLi = 0.5 * mm; // Top - G4ThreeVector positionSiLi_LT = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + G4ThreeVector positionSiLi_LT_up = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , 0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi , 0); - G4ThreeVector positionSiLi_RT = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + positionSiLi_LT_up += ShiftSiLiUp ; + + G4ThreeVector positionSiLi_RT_up = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , 0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi , 0); - G4ThreeVector positionSiLi_LC1 = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + positionSiLi_RT_up += ShiftSiLiUp ; + + G4ThreeVector positionSiLi_LC1_up = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , 0.5 * SiLi_HighY_Center + 0.5 * interSiLi , 0); - G4ThreeVector positionSiLi_RC1 = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + positionSiLi_LC1_up += ShiftSiLiUp ; + + G4ThreeVector positionSiLi_RC1_up = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , 0.5 * SiLi_HighY_Center + 0.5 * interSiLi , 0); - // Bottom - G4ThreeVector positionSiLi_LB = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + positionSiLi_RC1_up += ShiftSiLiUp ; + + G4ThreeVector positionSiLi_LB_up = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , -0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi , 0); - G4ThreeVector positionSiLi_RB = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + positionSiLi_LB_up += ShiftSiLiUp ; + + G4ThreeVector positionSiLi_RB_up = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , -0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi , 0); - G4ThreeVector positionSiLi_LC2 = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + positionSiLi_RB_up += ShiftSiLiUp ; + + G4ThreeVector positionSiLi_LC2_up = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , -0.5 * SiLi_HighY_Center - 0.5 * interSiLi , 0); - G4ThreeVector positionSiLi_RC2 = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + positionSiLi_LC2_up += ShiftSiLiUp ; + + G4ThreeVector positionSiLi_RC2_up = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , -0.5 * SiLi_HighY_Center - 0.5 * interSiLi , + 0); + + positionSiLi_RC2_up += ShiftSiLiUp ; + + + // Down + G4ThreeVector positionSiLi_LT_down = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + 0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi , 0); - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LT , logicSiLi_LT , "M" + DetectorNumber + "SiLi_LT" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RT , logicSiLi_RT , "M" + DetectorNumber + "SiLi_RT" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC1 , logicSiLi_LC1 , "M" + DetectorNumber + "SiLi_LC1" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC1 , logicSiLi_RC1 , "M" + DetectorNumber + "SiLi_RC1" , logicSiLi , false , 0) ; + positionSiLi_LT_down += ShiftSiLiDown ; + + G4ThreeVector positionSiLi_RT_down = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + 0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi , + 0); + + positionSiLi_RT_down += ShiftSiLiDown ; + + G4ThreeVector positionSiLi_LC1_down = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + 0.5 * SiLi_HighY_Center + 0.5 * interSiLi , + 0); + + positionSiLi_LC1_down += ShiftSiLiDown ; + + G4ThreeVector positionSiLi_RC1_down = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + 0.5 * SiLi_HighY_Center + 0.5 * interSiLi , + 0); + + positionSiLi_RC1_down += ShiftSiLiDown ; + + G4ThreeVector positionSiLi_LB_down = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + -0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi , + 0); + + positionSiLi_LB_down += ShiftSiLiDown ; + + G4ThreeVector positionSiLi_RB_down = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + -0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi , + 0); + + positionSiLi_RB_down += ShiftSiLiDown ; + + G4ThreeVector positionSiLi_LC2_down = G4ThreeVector(-0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX , + -0.5 * SiLi_HighY_Center - 0.5 * interSiLi , + 0); + + positionSiLi_LC2_down += ShiftSiLiDown ; + + G4ThreeVector positionSiLi_RC2_down = G4ThreeVector(0.5 * SiLi_WidthX_Right - SiLi_ShiftX , + -0.5 * SiLi_HighY_Center - 0.5 * interSiLi , + 0); + + positionSiLi_RC2_down += ShiftSiLiDown ; + + + // up + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LT_up , logicSiLi_LT , Name + "_SiLi_Pad16" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RT_up , logicSiLi_RT , Name + "_SiLi_Pad15" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC1_up , logicSiLi_LC1 , Name + "_SiLi_Pad14" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC1_up , logicSiLi_RC1 , Name + "_SiLi_Pad13" , logicSiLi , false , 0) ; + + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LB_up , logicSiLi_LB , Name + "_SiLi_Pad9" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RB_up , logicSiLi_RB , Name + "_SiLi_Pad10" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC2_up , logicSiLi_LC2 , Name + "_SiLi_Pad11" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC2_up , logicSiLi_RC2 , Name + "_SiLi_Pad12" , logicSiLi , false , 0) ; + + + // down + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LT_down , logicSiLi_LT , Name + "_SiLi_Pad7" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RT_down , logicSiLi_RT , Name + "_SiLi_Pad8" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC1_down , logicSiLi_LC1 , Name + "_SiLi_Pad5" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC1_down , logicSiLi_RC1 , Name + "_SiLi_Pad6" , logicSiLi , false , 0) ; + + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LB_down , logicSiLi_LB , Name + "_SiLi_Pad2" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RB_down , logicSiLi_RB , Name + "_SiLi_Pad1" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC2_down , logicSiLi_LC2 , Name + "_SiLi_Pad4" , logicSiLi , false , 0) ; + PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC2_down , logicSiLi_RC2 , Name + "_SiLi_Pad3" , logicSiLi , false , 0) ; + - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LB , logicSiLi_LB , "M" + DetectorNumber + "SiLi_LB" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RB , logicSiLi_RB , "M" + DetectorNumber + "SiLi_RB" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_LC2 , logicSiLi_LC2 , "M" + DetectorNumber + "SiLi_LC2" , logicSiLi , false , 0) ; - PVPBuffer = new G4PVPlacement(0 , positionSiLi_RC2 , logicSiLi_RC2 , "M" + DetectorNumber + "SiLi_RC2" , logicSiLi , false , 0) ; logicSiLi->SetVisAttributes(G4VisAttributes(G4Colour(1, 1., 1.))); @@ -367,15 +411,18 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , logicSiLi_RC2->SetSensitiveDetector(m_SiLiScorer); // Mark blue a SiLi to see telescope orientation - logicSiLi_LT->SetVisAttributes(G4VisAttributes(G4Colour(0, 0., 1.))); + logicSiLi_LT->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); logicSiLi_RT->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); logicSiLi_LC1->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); logicSiLi_RC1->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); - logicSiLi_LB->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); + logicSiLi_LB->SetVisAttributes(G4VisAttributes(G4Colour(0, 0, 1.))); logicSiLi_RB->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); logicSiLi_LC2->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); logicSiLi_RC2->SetVisAttributes(G4VisAttributes(G4Colour(0, 1., 0))); + + + delete rotSiLi; } //////////////////////////////////////////////////////////////// @@ -383,21 +430,19 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , //////////////////////////////////////////////////////////////// if (wCsI) { - //G4double DistInterCsI= 1.*mm;//<-Set the distance between CsI cristal. Exact value yet unknown - G4double DistInterCsI = 0.2 * mm; - + G4ThreeVector positionCsI = G4ThreeVector(0, 0, CsI_PosZ); G4Trd* solidCsI = new G4Trd("csI", 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIThickness); - G4LogicalVolume* logicCsI = new G4LogicalVolume(solidCsI, m_MaterialAluminium, "CsI" + DetectorNumber, 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionCsI, logicCsI, "CsI" + DetectorNumber, logicMM, false, 0); + G4LogicalVolume* logicCsI = new G4LogicalVolume(solidCsI, m_MaterialAluminium, Name + "_CsI_Mylar", 0, 0, 0); + PVPBuffer = new G4PVPlacement(0, positionCsI, logicCsI, Name + "_CsI_Mylar", logicMM, false, 0); G4ThreeVector positionMylarCsI = G4ThreeVector(0, 0, MylarCsIThickness * 0.5 - CsIThickness * 0.5); G4Box* solidMylarCsI = new G4Box("MylarCsIBox", 0.5*CsIFaceFront, 0.5*CsIFaceFront, 0.5*MylarCsIThickness); - G4LogicalVolume* logicMylarCsI = new G4LogicalVolume(solidMylarCsI, m_MaterialMyl, "logicMylarCsI", 0, 0, 0); + G4LogicalVolume* logicMylarCsI = new G4LogicalVolume(solidMylarCsI, m_MaterialMyl, Name + "_CsI_Mylar", 0, 0, 0); - PVPBuffer = new G4PVPlacement(0, positionMylarCsI, logicMylarCsI, "M" + DetectorNumber + "MylarCsI", logicCsI, false, 0); + PVPBuffer = new G4PVPlacement(0, positionMylarCsI, logicMylarCsI, Name + "_CsI_Mylar", logicCsI, false, 0); logicCsI->SetVisAttributes(G4VisAttributes::Invisible); @@ -405,43 +450,43 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , // Cristal1 G4Trap* solidCristal1 = new G4Trap("Cristal1", 40.*mm / 2., 6.693896*deg, 41.97814*deg, 33.1*mm / 2., 37.39*mm / 2., 37.39*mm / 2., 0.*deg, 26.9*mm / 2., 30.41*mm / 2., 30.41*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal1 = new G4LogicalVolume(solidCristal1, m_MaterialCsI, "Cristal1", 0, 0, 0); + G4LogicalVolume* logicCristal1 = new G4LogicalVolume(solidCristal1, m_MaterialCsI, Name + "_CsI_Cristal1", 0, 0, 0); // Cristal2 G4Trap* solidCristal2 = new G4Trap("Cristal2", 40.*mm / 2., 17.8836*deg, (74.3122 + 180)*deg, 43.49*mm / 2., 37.39*mm / 2., 37.39*mm / 2., 0.*deg, 31.0377*mm / 2., 30.41*mm / 2., 30.41*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal2 = new G4LogicalVolume(solidCristal2, m_MaterialCsI, "Cristal2", 0, 0, 0); + G4LogicalVolume* logicCristal2 = new G4LogicalVolume(solidCristal2, m_MaterialCsI, Name + "_CsI_Cristal2", 0, 0, 0); // Cristal3 G4Trap* solidCristal3 = new G4Trap("Cristal3", 40.*mm / 2., 18.243*deg, 13.5988*deg, 33.11*mm / 2., 39.25*mm / 2., 39.25*mm / 2., 0.*deg, 26.91*mm / 2., 27.58*mm / 2., 27.58*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal3 = new G4LogicalVolume(solidCristal3, m_MaterialCsI, "Cristal3", 0, 0, 0); + G4LogicalVolume* logicCristal3 = new G4LogicalVolume(solidCristal3, m_MaterialCsI, Name + "_CsI_Cristal3", 0, 0, 0); // Cristal4 G4Trap* solidCristal4 = new G4Trap("Cristal4", 40.*mm / 2., 24.0482*deg, 44.1148*deg, 43.49*mm / 2., 39.19*mm / 2., 39.19*mm / 2., 0.*deg, 31.04*mm / 2., 27.52*mm / 2., 27.52*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal4 = new G4LogicalVolume(solidCristal4, m_MaterialCsI, "Cristal4", 0, 0, 0); + G4LogicalVolume* logicCristal4 = new G4LogicalVolume(solidCristal4, m_MaterialCsI, Name + "_CsI_Cristal4", 0, 0, 0); // Cristal1s G4Trap* solidCristal1s = new G4Trap("Cristal1s", 40.*mm / 2., 6.693896*deg, -41.97814*deg, 33.1*mm / 2., 37.39*mm / 2., 37.39*mm / 2., 0.*deg, 26.9*mm / 2., 30.41*mm / 2., 30.41*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal1s = new G4LogicalVolume(solidCristal1s, m_MaterialCsI, "Cristal1s", 0, 0, 0); + G4LogicalVolume* logicCristal1s = new G4LogicalVolume(solidCristal1s, m_MaterialCsI, Name + "_CsI_Cristal1s", 0, 0, 0); // Cristal2s G4Trap* solidCristal2s = new G4Trap("Cristal2s", 40.*mm / 2., 17.8836*deg, -(74.3122 + 180)*deg, 43.49*mm / 2., 37.39*mm / 2., 37.39*mm / 2., 0.*deg, 31.0377*mm / 2., 30.41*mm / 2., 30.41*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal2s = new G4LogicalVolume(solidCristal2s, m_MaterialCsI, "Cristal2s", 0, 0, 0); + G4LogicalVolume* logicCristal2s = new G4LogicalVolume(solidCristal2s, m_MaterialCsI, Name + "_CsI_Cristal2s", 0, 0, 0); // Cristal3s G4Trap* solidCristal3s = new G4Trap("Cristal3s", 40.*mm / 2., 18.243*deg, -13.5988*deg, 33.11*mm / 2., 39.25*mm / 2., 39.25*mm / 2., 0.*deg, 26.91*mm / 2., 27.58*mm / 2., 27.58*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal3s = new G4LogicalVolume(solidCristal3s, m_MaterialCsI, "Cristal3s", 0, 0, 0); + G4LogicalVolume* logicCristal3s = new G4LogicalVolume(solidCristal3s, m_MaterialCsI, Name + "_CsI_Cristal3s", 0, 0, 0); // Cristal4s G4Trap* solidCristal4s = new G4Trap("Cristal4s", 40.*mm / 2., 24.0482*deg, -44.1148*deg, 43.49*mm / 2., 39.19*mm / 2., 39.19*mm / 2., 0.*deg, 31.04*mm / 2., 27.52*mm / 2., 27.52*mm / 2., 0.*deg); - G4LogicalVolume* logicCristal4s = new G4LogicalVolume(solidCristal4s, m_MaterialCsI, "Cristal4s", 0, 0, 0); + G4LogicalVolume* logicCristal4s = new G4LogicalVolume(solidCristal4s, m_MaterialCsI, Name + "_CsI_Cristal4s", 0, 0, 0); //to see telescope orientation - G4LogicalVolume* logicCristal4sbis = new G4LogicalVolume(solidCristal4s, m_MaterialCsI, "Cristal4s", 0, 0, 0); + G4LogicalVolume* logicCristal4sbis = new G4LogicalVolume(solidCristal4s, m_MaterialCsI, Name + "_CsI_Cristal4s", 0, 0, 0); G4double XEdge1 = 16.96 * mm + DistInterCsI * 0.5; @@ -454,10 +499,10 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , G4ThreeVector positionCristal3 = G4ThreeVector(-XEdge2, YEdge1, 0); G4ThreeVector positionCristal4 = G4ThreeVector(-XEdge2, YEdge2, 0); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal1, logicCristal1, "M" + DetectorNumber + "Cristal1", logicCsI, false, 1); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal2, logicCristal2, "M" + DetectorNumber + "Cristal2", logicCsI, false, 2); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal3, logicCristal3, "M" + DetectorNumber + "Cristal3", logicCsI, false, 3); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal4, logicCristal4, "M" + DetectorNumber + "Cristal4", logicCsI, false, 4); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal1, logicCristal1, Name + "_CsI_Cristal1", logicCsI, false, 1); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal2, logicCristal2, Name + "_CsI_Cristal2", logicCsI, false, 2); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal3, logicCristal3, Name + "_CsI_Cristal3", logicCsI, false, 3); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal4, logicCristal4, Name + "_CsI_Cristal4", logicCsI, false, 4); G4ThreeVector positionCristal1b = G4ThreeVector(XEdge1, -YEdge1, 0 * mm); @@ -465,30 +510,30 @@ void MUST2Array::VolumeMaker(G4int TelescopeNumber , G4ThreeVector positionCristal3b = G4ThreeVector(XEdge2, -YEdge1, 0); G4ThreeVector positionCristal4b = G4ThreeVector(XEdge2, -YEdge2, 0); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal1b, logicCristal1, "M" + DetectorNumber + "Cristal5", logicCsI, false, 5); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal2b, logicCristal2, "M" + DetectorNumber + "Cristal6", logicCsI, false, 6); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal3b, logicCristal3, "M" + DetectorNumber + "Cristal7", logicCsI, false, 7); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal4b, logicCristal4, "M" + DetectorNumber + "Cristal8", logicCsI, false, 8); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal1b, logicCristal1, Name + "_CsI_Cristal5", logicCsI, false, 5); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal2b, logicCristal2, Name + "_CsI_Cristal6", logicCsI, false, 6); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal3b, logicCristal3, Name + "_CsI_Cristal7", logicCsI, false, 7); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal4b, logicCristal4, Name + "_CsI_Cristal8", logicCsI, false, 8); G4ThreeVector positionCristal1s = G4ThreeVector(-XEdge1, -YEdge1, 0 * mm); G4ThreeVector positionCristal2s = G4ThreeVector(-XEdge1, -YEdge2, 0); G4ThreeVector positionCristal3s = G4ThreeVector(-XEdge2, -YEdge1, 0); G4ThreeVector positionCristal4s = G4ThreeVector(-XEdge2, -YEdge2, 0); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal1s, logicCristal1s, "M" + DetectorNumber + "Cristal9", logicCsI, false, 9); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal2s, logicCristal2s, "M" + DetectorNumber + "Cristal10", logicCsI, false, 10); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal3s, logicCristal3s, "M" + DetectorNumber + "Cristal11", logicCsI, false, 11); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal4s, logicCristal4sbis, "M" + DetectorNumber + "Cristal12", logicCsI, false, 12); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal1s, logicCristal1s, Name + "_CsI_Cristal9", logicCsI, false, 9); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal2s, logicCristal2s, Name + "_CsI_Cristal10", logicCsI, false, 10); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal3s, logicCristal3s, Name + "_CsI_Cristal11", logicCsI, false, 11); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 0.), positionCristal4s, logicCristal4sbis, Name + "_CsI_Cristal12", logicCsI, false, 12); G4ThreeVector positionCristal1sb = G4ThreeVector(XEdge1, YEdge1, 0 * mm); G4ThreeVector positionCristal2sb = G4ThreeVector(XEdge1, YEdge2, 0); G4ThreeVector positionCristal3sb = G4ThreeVector(XEdge2, YEdge1, 0); G4ThreeVector positionCristal4sb = G4ThreeVector(XEdge2, YEdge2, 0); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal1sb, logicCristal1s, "M" + DetectorNumber + "Cristal13", logicCsI, false, 13); - PVPBuffer = new G4PVPlacement(Rotation(180, 0, 0), positionCristal2sb, logicCristal2s, "M" + DetectorNumber + "Cristal14", logicCsI, false, 14); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal3sb, logicCristal3s, "M" + DetectorNumber + "Cristal15", logicCsI, false, 15); - PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal4sb, logicCristal4s, "M" + DetectorNumber + "Cristal16", logicCsI, false, 16); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal1sb, logicCristal1s, Name + "_CsI_Cristal13", logicCsI, false, 13); + PVPBuffer = new G4PVPlacement(Rotation(180, 0, 0), positionCristal2sb, logicCristal2s, Name + "_CsI_Cristal14", logicCsI, false, 14); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal3sb, logicCristal3s, Name + "_CsI_Cristal15", logicCsI, false, 15); + PVPBuffer = new G4PVPlacement(Rotation(180., 0., 180.), positionCristal4sb, logicCristal4s, Name + "_CsI_Cristal16", logicCsI, false, 16); ///Set CsI sensible logicCristal1->SetSensitiveDetector(m_CsIScorer); @@ -815,15 +860,15 @@ void MUST2Array::ReadConfiguration(string Path) // Called After DetecorConstruction::AddDetector Method void MUST2Array::ConstructDetector(G4LogicalVolume* world) { - G4RotationMatrix* MMrot = NULL ; - G4ThreeVector MMpos = G4ThreeVector(0, 0, 0) ; + G4RotationMatrix* MMrot = NULL ; + G4ThreeVector MMpos = G4ThreeVector(0, 0, 0) ; G4ThreeVector MMu = G4ThreeVector(0, 0, 0) ; G4ThreeVector MMv = G4ThreeVector(0, 0, 0) ; G4ThreeVector MMw = G4ThreeVector(0, 0, 0) ; - G4ThreeVector MMCenter = G4ThreeVector(0, 0, 0) ; - bool Si = true ; - bool SiLi = true ; - bool CsI = true ; + G4ThreeVector MMCenter = G4ThreeVector(0, 0, 0) ; + bool Si = true ; + bool SiLi = true ; + bool CsI = true ; G4int NumberOfTelescope = m_DefinitionType.size() ; @@ -926,102 +971,115 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Si std::map<G4int, G4int*>::iterator DetectorNumber_itr ; - std::map<G4int, G4double*>::iterator Energy_itr ; - std::map<G4int, G4double*>::iterator Time_itr ; - std::map<G4int, G4double*>::iterator X_itr ; - std::map<G4int, G4double*>::iterator Y_itr ; - std::map<G4int, G4double*>::iterator Pos_X_itr ; - std::map<G4int, G4double*>::iterator Pos_Y_itr ; - std::map<G4int, G4double*>::iterator Pos_Z_itr ; + std::map<G4int, G4double*>::iterator Energy_itr ; + std::map<G4int, G4double*>::iterator Time_itr ; + std::map<G4int, G4int*>::iterator X_itr ; + std::map<G4int, G4int*>::iterator Y_itr ; + std::map<G4int, G4double*>::iterator Pos_X_itr ; + std::map<G4int, G4double*>::iterator Pos_Y_itr ; + std::map<G4int, G4double*>::iterator Pos_Z_itr ; std::map<G4int, G4double*>::iterator Ang_Theta_itr ; std::map<G4int, G4double*>::iterator Ang_Phi_itr ; - G4THitsMap<G4int>* DetectorNumberHitMap ; - G4THitsMap<G4double>* EnergyHitMap ; - G4THitsMap<G4double>* TimeHitMap ; - G4THitsMap<G4double>* XHitMap ; - G4THitsMap<G4double>* YHitMap ; - G4THitsMap<G4double>* PosXHitMap ; - G4THitsMap<G4double>* PosYHitMap ; - G4THitsMap<G4double>* PosZHitMap ; - G4THitsMap<G4double>* AngThetaHitMap ; - G4THitsMap<G4double>* AngPhiHitMap ; - -// NULL pointer are given to avoid warning at compilation + G4THitsMap<G4int>* DetectorNumberHitMap ; + G4THitsMap<G4double>* EnergyHitMap ; + G4THitsMap<G4double>* TimeHitMap ; + G4THitsMap<G4int>* XHitMap ; + G4THitsMap<G4int>* YHitMap ; + G4THitsMap<G4double>* PosXHitMap ; + G4THitsMap<G4double>* PosYHitMap ; + G4THitsMap<G4double>* PosZHitMap ; + G4THitsMap<G4double>* AngThetaHitMap ; + G4THitsMap<G4double>* AngPhiHitMap ; // Si(Li) std::map<G4int, G4double*>::iterator SiLiEnergy_itr ; - G4THitsMap<G4double>* SiLiEnergyHitMap ; + std::map<G4int, G4int*>::iterator SiLiPadNbr_itr ; + G4THitsMap<G4double>* SiLiEnergyHitMap ; + G4THitsMap<G4int>* SiLiPadNbrHitMap ; + // CsI std::map<G4int, G4double*>::iterator CsIEnergy_itr ; - G4THitsMap<G4double>* CsIEnergyHitMap ; + std::map<G4int, G4int*>::iterator CsICristalNbr_itr ; + G4THitsMap<G4double>* CsIEnergyHitMap ; + G4THitsMap<G4int>* CsICristalNbrHitMap ; ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// // Read the Scorer associate to the Silicon Strip //Detector Number - G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/DetectorNumber") ; - DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ; + G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/DetectorNumber") ; + DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; + DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ; //Energy - G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/StripEnergy") ; - EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; - Energy_itr = EnergyHitMap->GetMap()->begin() ; + G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripEnergy") ; + EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; + Energy_itr = EnergyHitMap->GetMap()->begin() ; //Time of Flight - G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/StripTime") ; - TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; - Time_itr = TimeHitMap->GetMap()->begin() ; + G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripTime") ; + TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; + Time_itr = TimeHitMap->GetMap()->begin() ; //Strip Number X - G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/StripNumberX") ; - XHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; - X_itr = XHitMap->GetMap()->begin() ; + G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripNumberX") ; + XHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; + X_itr = XHitMap->GetMap()->begin() ; //Strip Number Y - G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/StripNumberY") ; - YHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; - Y_itr = YHitMap->GetMap()->begin() ; + G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/StripNumberY") ; + YHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; + Y_itr = YHitMap->GetMap()->begin() ; //Interaction Coordinate X - G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/InterCoordX") ; - PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; - Pos_X_itr = PosXHitMap->GetMap()->begin() ; + G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordX") ; + PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; + Pos_X_itr = PosXHitMap->GetMap()->begin() ; //Interaction Coordinate Y - G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/InterCoordY") ; - PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; - Pos_Y_itr = PosYHitMap->GetMap()->begin() ; + G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordY") ; + PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; + Pos_Y_itr = PosYHitMap->GetMap()->begin() ; //Interaction Coordinate Z - G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/InterCoordZ") ; - PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; - Pos_Z_itr = PosXHitMap->GetMap()->begin() ; + G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordZ") ; + PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; + Pos_Z_itr = PosXHitMap->GetMap()->begin() ; //Interaction Coordinate Angle Theta - G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/InterCoordAngTheta") ; + G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordAngTheta"); AngThetaHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngThetaCollectionID)) ; - Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; + Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; //Interaction Coordinate Angle Phi - G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("StripScorer/InterCoordAngPhi") ; - AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; - Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; + G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_StripScorer/InterCoordAngPhi") ; + AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; + Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; // Read the Scorer associate to the SiLi //Energy - G4int SiLiEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SiLiScorer/SiLiEnergy") ; - SiLiEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiEnergyCollectionID)) ; - SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; - + G4int SiLiEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_SiLiScorer/SiLiEnergy") ; + SiLiEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiEnergyCollectionID)) ; + SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; + G4int SiLiPadNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_SiLiScorer/SiLiPadNbr") ; + SiLiPadNbrHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(SiLiPadNbrCollectionID)) ; + SiLiPadNbr_itr = SiLiPadNbrHitMap->GetMap()->begin() ; + // Read the Scorer associate to the CsI crystal //Energy - G4int CsIEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("CsIScorer/CsIEnergy") ; - CsIEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(CsIEnergyCollectionID)) ; - CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + G4int CsIEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_CsIScorer/CsIEnergy") ; + CsIEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(CsIEnergyCollectionID)) ; + CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + + G4int CsICristalNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("MUST2_CsIScorer/CsICristalNbr") ; + CsICristalNbrHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(CsICristalNbrCollectionID)) ; + CsICristalNbr_itr = CsICristalNbrHitMap->GetMap()->begin() ; + + +///////////////////// G4int sizeN = DetectorNumberHitMap->entries() ; G4int sizeE = EnergyHitMap->entries() ; @@ -1029,55 +1087,55 @@ void MUST2Array::ReadSensitive(const G4Event* event) G4int sizeX = XHitMap->entries() ; G4int sizeY = YHitMap->entries() ; - // Loop on Strip energy - for (G4int l = 0 ; l < sizeE ; l++) { - G4int ETrackID = Energy_itr->first ; - G4double E = *(Energy_itr->second) ; - G4int N = 0 ; + // Loop on Telescope Number entry + for (G4int l = 0 ; l < sizeN ; l++) { + G4int N = *(DetectorNumber_itr->second) ; + G4int NTrackID = DetectorNumber_itr->first - N ; - if (E > 0) { + + if (N > 0) { - m_Event->SetMMStripXEEnergy(RandGauss::shoot(E, ResoStrip)) ; - m_Event->SetMMStripYEEnergy(RandGauss::shoot(E, ResoStrip)) ; - - // Detector Number - DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin(); - for (G4int h = 0 ; h < sizeN ; h++) { - G4int NTrackID = DetectorNumber_itr->first ; - G4double Nl = *(DetectorNumber_itr->second) ; - - if (NTrackID == ETrackID) { - N = Nl ; - m_Event->SetMMStripXEDetectorNbr(N) ; - m_Event->SetMMStripYEDetectorNbr(N) ; - m_Event->SetMMStripXTDetectorNbr(N) ; - m_Event->SetMMStripYTDetectorNbr(N) ; + m_Event->SetMMStripXEDetectorNbr(N) ; + m_Event->SetMMStripYEDetectorNbr(N) ; + m_Event->SetMMStripXTDetectorNbr(N) ; + m_Event->SetMMStripYTDetectorNbr(N) ; + + // Energy + Energy_itr = EnergyHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeE ; h++) { + G4int ETrackID = Energy_itr->first - N ; + G4double E = *(Energy_itr->second) ; + + if (ETrackID == NTrackID) { + m_Event->SetMMStripXEEnergy(RandGauss::shoot(E, ResoStrip)) ; + m_Event->SetMMStripYEEnergy(RandGauss::shoot(E, ResoStrip)) ; } - else { N = 0 ;} - DetectorNumber_itr++; - } + Energy_itr++; + } // Time Time_itr = TimeHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeT ; h++) { - G4int TTrackID = Time_itr->first ; + G4int TTrackID = Time_itr->first - N ; G4double T = *(Time_itr->second) ; - if (TTrackID == ETrackID) { + if (TTrackID == NTrackID) { m_Event->SetMMStripXTTime(RandGauss::shoot(T, ResoTimeMust)) ; m_Event->SetMMStripYTTime(RandGauss::shoot(T, ResoTimeMust)) ; } + Time_itr++; } - // X + + // X X_itr = XHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int XTrackID = X_itr->first ; - G4double X = *(X_itr->second) ; - if (XTrackID == ETrackID) { + G4int XTrackID = X_itr->first - N ; + G4int X = *(X_itr->second) ; + if (XTrackID == NTrackID) { m_Event->SetMMStripXEStripNbr(X) ; m_Event->SetMMStripXTStripNbr(X) ; } @@ -1088,9 +1146,9 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Y Y_itr = YHitMap->GetMap()->begin() ; for (G4int h = 0 ; h < sizeY ; h++) { - G4int YTrackID = Y_itr->first ; - G4double Y = *(Y_itr->second) ; - if (YTrackID == ETrackID) { + G4int YTrackID = Y_itr->first - N ; + G4int Y = *(Y_itr->second) ; + if (YTrackID == NTrackID) { m_Event->SetMMStripYEStripNbr(Y) ; m_Event->SetMMStripYTStripNbr(Y) ; } @@ -1101,9 +1159,9 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Pos X Pos_X_itr = PosXHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosXTrackID = Pos_X_itr->first ; + G4int PosXTrackID = Pos_X_itr->first - N ; G4double PosX = *(Pos_X_itr->second) ; - if (PosXTrackID == ETrackID) { + if (PosXTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionX(PosX) ; } Pos_X_itr++; @@ -1112,9 +1170,9 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Pos Y Pos_Y_itr = PosYHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosYTrackID = Pos_Y_itr->first ; + G4int PosYTrackID = Pos_Y_itr->first - N ; G4double PosY = *(Pos_Y_itr->second) ; - if (PosYTrackID == ETrackID) { + if (PosYTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionY(PosY) ; } Pos_Y_itr++; @@ -1123,9 +1181,9 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Pos Z Pos_Z_itr = PosZHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int PosZTrackID = Pos_Z_itr->first ; + G4int PosZTrackID = Pos_Z_itr->first - N ; G4double PosZ = *(Pos_Z_itr->second) ; - if (PosZTrackID == ETrackID) { + if (PosZTrackID == NTrackID) { ms_InterCoord->SetDetectedPositionZ(PosZ) ; } Pos_Z_itr++; @@ -1134,9 +1192,9 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Angle Theta Ang_Theta_itr = AngThetaHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngThetaTrackID = Ang_Theta_itr->first ; + G4int AngThetaTrackID = Ang_Theta_itr->first - N ; G4double AngTheta = *(Ang_Theta_itr->second) ; - if (AngThetaTrackID == ETrackID) { + if (AngThetaTrackID == NTrackID) { ms_InterCoord->SetDetectedAngleTheta(AngTheta) ; } Ang_Theta_itr++; @@ -1145,72 +1203,83 @@ void MUST2Array::ReadSensitive(const G4Event* event) // Angle Phi Ang_Phi_itr = AngPhiHitMap->GetMap()->begin(); for (G4int h = 0 ; h < sizeX ; h++) { - G4int AngPhiTrackID = Ang_Phi_itr->first ; + G4int AngPhiTrackID = Ang_Phi_itr->first - N ; G4double AngPhi = *(Ang_Phi_itr->second) ; - if (AngPhiTrackID == ETrackID) { + if (AngPhiTrackID == NTrackID) { ms_InterCoord->SetDetectedAnglePhi(AngPhi) ; } Ang_Phi_itr++; } - // Si(Li) + // Si(Li) SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ; + SiLiPadNbr_itr = SiLiPadNbrHitMap->GetMap()->begin() ; + for (G4int h = 0 ; h < SiLiEnergyHitMap->entries() ; h++) { - G4int SiLiEnergyTrackID = SiLiEnergy_itr->first ; + G4int SiLiEnergyTrackID = SiLiEnergy_itr->first -N ; G4double SiLiEnergy = *(SiLiEnergy_itr->second) ; - if (SiLiEnergyTrackID == ETrackID) { + G4int PadNbr = *(SiLiPadNbr_itr->second) ; + + if (SiLiEnergyTrackID == NTrackID) { m_Event->SetMMSiLiEEnergy(RandGauss::shoot(SiLiEnergy, ResoSiLi)) ; - m_Event->SetMMSiLiEPadNbr(1); - m_Event->SetMMSiLiTPadNbr(1); + m_Event->SetMMSiLiEPadNbr(PadNbr); + m_Event->SetMMSiLiTPadNbr(PadNbr); m_Event->SetMMSiLiTTime(1); m_Event->SetMMSiLiTDetectorNbr(N); m_Event->SetMMSiLiEDetectorNbr(N); } - SiLiEnergy_itr++; + SiLiEnergy_itr++ ; + SiLiPadNbr_itr++ ; } - // CsI - - CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + // CsI + CsIEnergy_itr = CsIEnergyHitMap->GetMap()->begin() ; + CsICristalNbr_itr = CsICristalNbrHitMap->GetMap()->begin() ; + for (G4int h = 0 ; h < CsIEnergyHitMap->entries() ; h++) { - G4int CsIEnergyTrackID = CsIEnergy_itr->first ; - G4double CsIEnergy = *(CsIEnergy_itr->second) ; - - if (CsIEnergyTrackID == ETrackID) { + G4int CsIEnergyTrackID = CsIEnergy_itr->first-N ; + G4double CsIEnergy = *(CsIEnergy_itr->second) ; + + G4int CristalNumber = *(CsICristalNbr_itr->second) ; + if (CsIEnergyTrackID == NTrackID) { m_Event->SetMMCsIEEnergy(RandGauss::shoot(CsIEnergy, ResoCsI*sqrt(CsIEnergy))); - m_Event->SetMMCsIECristalNbr(1); - m_Event->SetMMCsITCristalNbr(1); + m_Event->SetMMCsIECristalNbr(CristalNumber); + m_Event->SetMMCsITCristalNbr(CristalNumber); m_Event->SetMMCsITTime(1); m_Event->SetMMCsITDetectorNbr(N); m_Event->SetMMCsIEDetectorNbr(N); } - CsIEnergy_itr++; + CsIEnergy_itr++ ; + CsICristalNbr_itr++ ; } - + + } - Energy_itr++; + DetectorNumber_itr++; } // clear map for next event - DetectorNumberHitMap ->clear(); - EnergyHitMap ->clear() ; - TimeHitMap ->clear() ; - XHitMap ->clear() ; - YHitMap ->clear() ; - CsIEnergyHitMap ->clear() ; - SiLiEnergyHitMap ->clear() ; - PosXHitMap ->clear() ; - PosYHitMap ->clear() ; - PosZHitMap ->clear() ; - AngThetaHitMap ->clear() ; - AngPhiHitMap ->clear() ; + DetectorNumberHitMap ->clear() ; + EnergyHitMap ->clear() ; + TimeHitMap ->clear() ; + XHitMap ->clear() ; + YHitMap ->clear() ; + SiLiEnergyHitMap ->clear() ; + SiLiPadNbrHitMap ->clear() ; + CsIEnergyHitMap ->clear() ; + CsICristalNbrHitMap ->clear() ; + PosXHitMap ->clear() ; + PosYHitMap ->clear() ; + PosZHitMap ->clear() ; + AngThetaHitMap ->clear() ; + AngPhiHitMap ->clear() ; } @@ -1219,19 +1288,21 @@ void MUST2Array::ReadSensitive(const G4Event* event) void MUST2Array::InitializeScorers() { // Silicon Associate Scorer - m_StripScorer = new G4MultiFunctionalDetector("StripScorer"); + m_StripScorer = new G4MultiFunctionalDetector("MUST2_StripScorer"); + + G4VPrimitiveScorer* DetNbr = new GENERALSCORERS::PSDetectorNumber("DetectorNumber","MUST2Telescope", 0) ; + G4VPrimitiveScorer* Energy = new GENERALSCORERS::PSEnergy("StripEnergy","MUST2Telescope", 0) ; + G4VPrimitiveScorer* TOF = new GENERALSCORERS::PSTOF("StripTime","MUST2Telescope", 0) ; + + G4VPrimitiveScorer* StripPositionX = new PSStripNumberX("StripNumberX", 0, SiliconFace, 128) ; + G4VPrimitiveScorer* StripPositionY = new PSStripNumberY("StripNumberY", 0, SiliconFace, 128) ; + + G4VPrimitiveScorer* InteractionCoordinatesX = new GENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","MUST2Telescope", 0) ; + G4VPrimitiveScorer* InteractionCoordinatesY = new GENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","MUST2Telescope", 0) ; + G4VPrimitiveScorer* InteractionCoordinatesZ = new GENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","MUST2Telescope", 0) ; + G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new GENERALSCORERS::PSInteractionCoordinatesAngleTheta("InterCoordAngTheta","MUST2Telescope", 0) ; + G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new GENERALSCORERS::PSInteractionCoordinatesAnglePhi("InterCoordAngPhi","MUST2Telescope", 0) ; - G4VPrimitiveScorer* DetNbr = new MUST2::PSDetectorNumber("DetectorNumber", 0, "Silicon") ; - G4VPrimitiveScorer* Energy = new PSStripE("StripEnergy", 0) ; - G4VPrimitiveScorer* TOF = new PSTOF("StripTime", 0) ; - G4VPrimitiveScorer* StripPositionX = new PSStripNumberX("StripNumberX", 0, SiliconFace, 128) ; - G4VPrimitiveScorer* StripPositionY = new PSStripNumberY("StripNumberY", 0, SiliconFace, 128) ; - G4VPrimitiveScorer* InteractionCoordinatesX = new PSInteractionCoordinatesX("InterCoordX", 0) ; - G4VPrimitiveScorer* InteractionCoordinatesY = new PSInteractionCoordinatesY("InterCoordY", 0) ; - G4VPrimitiveScorer* InteractionCoordinatesZ = new PSInteractionCoordinatesZ("InterCoordZ", 0) ; - G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new PSInteractionCoordinatesAngleTheta("InterCoordAngTheta", 0) ; - G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new PSInteractionCoordinatesAnglePhi("InterCoordAngPhi", 0) ; - //and register it to the multifunctionnal detector m_StripScorer->RegisterPrimitive(DetNbr) ; @@ -1246,14 +1317,18 @@ void MUST2Array::InitializeScorers() m_StripScorer->RegisterPrimitive(InteractionCoordinatesAnglePhi) ; // SiLi Associate Scorer - m_SiLiScorer = new G4MultiFunctionalDetector("SiLiScorer") ; - G4VPrimitiveScorer* SiLiEnergy = new PSStripE("SiLiEnergy", 0) ; - m_SiLiScorer->RegisterPrimitive(SiLiEnergy) ; + m_SiLiScorer = new G4MultiFunctionalDetector("MUST2_SiLiScorer") ; + G4VPrimitiveScorer* SiLiEnergy = new GENERALSCORERS::PSEnergy("SiLiEnergy","MUST2Telescope", 0) ; + G4VPrimitiveScorer* SiLiPadNbr = new PSPadOrCristalNumber("SiLiPadNbr",0) ; + m_SiLiScorer->RegisterPrimitive(SiLiEnergy) ; + m_SiLiScorer->RegisterPrimitive(SiLiPadNbr) ; // CsI Associate Scorer - m_CsIScorer = new G4MultiFunctionalDetector("CsIScorer") ; - G4VPrimitiveScorer* CsIEnergy = new PSStripE("CsIEnergy", 0) ; + m_CsIScorer = new G4MultiFunctionalDetector("MUST2_CsIScorer") ; + G4VPrimitiveScorer* CsIEnergy = new GENERALSCORERS::PSEnergy("CsIEnergy","MUST2Telescope", 0) ; + G4VPrimitiveScorer* CsICristalNbr = new PSPadOrCristalNumber("CsICristalNbr",0) ; m_CsIScorer->RegisterPrimitive(CsIEnergy) ; + m_CsIScorer->RegisterPrimitive(CsICristalNbr) ; // Add All Scorer to the Global Scorer Manager G4SDManager::GetSDMpointer()->AddNewDetector(m_StripScorer) ; diff --git a/NPSimulation/src/Must2Scorers.cc b/NPSimulation/src/Must2Scorers.cc index 685781f4d40152b13c6470a36c4ac7ba11500f0c..2b057adf11486a6508e9239bc808b555e870b688 100644 --- a/NPSimulation/src/Must2Scorers.cc +++ b/NPSimulation/src/Must2Scorers.cc @@ -24,78 +24,10 @@ *****************************************************************************/ #include "Must2Scorers.hh" #include "G4UnitsTable.hh" +#include "GeneralScorers.hh" #include <string> using namespace MUST2 ; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// Added by Adrien MATTA: -// Those Scorer use TrackID as map index. This way ones can rebuild energy deposit, -// time of flight or position,... particle by particle for each event. Because standard -// scorer provide by G4 don't work this way but using a global ID for each event you should -// not use those scorer with some G4 provided ones or being very carefull doing so. - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//Strip Energy Scorer (deal with multiple particle hit) - -PSStripE::PSStripE(G4String name, G4int depth) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ - ; -} - -PSStripE::~PSStripE() -{ - ; -} - -G4bool PSStripE::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; - G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->add(index, edep); - return TRUE; -} - -void PSStripE::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void PSStripE::EndOfEvent(G4HCofThisEvent*) -{ - ; -} - -void PSStripE::clear() -{ - EvtMap->clear(); -} - -void PSStripE::DrawAll() -{ - ; -} - -void PSStripE::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; - G4cout << " PrimitiveScorer " << GetName() << G4endl; - G4cout << " Number of entries " << EvtMap->entries() << G4endl; - std::map<G4int, G4double*>::iterator itr = EvtMap->GetMap()->begin(); - for (; itr != EvtMap->GetMap()->end(); itr++) { - G4cout << " copy no.: " << itr->first - << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") - << G4endl; - } -} - - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //Strip position Scorer @@ -103,8 +35,9 @@ void PSStripE::PrintAll() PSStripNumberX::PSStripNumberX(G4String name, G4int depth, G4double StripPlaneSize, G4int NumberOfStrip) : G4VPrimitiveScorer(name, depth), HCID(-1) { - m_StripPlaneSize = StripPlaneSize ; - m_NumberOfStrip = NumberOfStrip ; + m_StripPlaneSize = StripPlaneSize ; + m_NumberOfStrip = NumberOfStrip ; + m_StripPitch = m_StripPlaneSize / m_NumberOfStrip; } PSStripNumberX::~PSStripNumberX() @@ -114,25 +47,25 @@ PSStripNumberX::~PSStripNumberX() G4bool PSStripNumberX::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "MUST2Telescope"); + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); - G4double StripPitch = m_StripPlaneSize / m_NumberOfStrip; - - G4double temp = (POS(0) + m_StripPlaneSize / 2.) / StripPitch ; - G4double X = int(temp) + 1 ; + G4double temp = (POS(0) + m_StripPlaneSize / 2.) / m_StripPitch ; + G4int X = int(temp) + 1 ; //Rare case where particle is close to edge of silicon plan - if (X == 129) X = 128; + if (X == m_NumberOfStrip+1) X = m_NumberOfStrip; G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, X); + EvtMap->set(index+DetNbr, X); return TRUE; } void PSStripNumberX::Initialize(G4HCofThisEvent* HCE) { - EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), GetName()); + EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); if (HCID < 0) { HCID = GetCollectionID(0); } @@ -169,6 +102,7 @@ PSStripNumberY::PSStripNumberY(G4String name, G4int depth, G4double StripPlaneSi { m_StripPlaneSize = StripPlaneSize ; m_NumberOfStrip = NumberOfStrip ; + m_StripPitch = m_StripPlaneSize / m_NumberOfStrip; } PSStripNumberY::~PSStripNumberY() @@ -178,27 +112,28 @@ PSStripNumberY::~PSStripNumberY() G4bool PSStripNumberY::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "MUST2Telescope"); + + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); - G4double StripPitch = m_StripPlaneSize / m_NumberOfStrip; - - G4double temp = (POS(1) + m_StripPlaneSize / 2.) / StripPitch ; + G4double temp = (POS(1) + m_StripPlaneSize / 2.) / m_StripPitch ; G4int temp2 = temp ; - G4double Y = temp2 + 1 ; + G4int Y = temp2 + 1 ; //Rare case where particle is close to edge of silicon plan - if (Y == 129) Y = 128; + if (Y == m_NumberOfStrip+1) Y = m_NumberOfStrip; G4double edep = aStep->GetTotalEnergyDeposit(); if (edep < 100*keV) return FALSE; G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, Y); + EvtMap->set(index+DetNbr, Y); return TRUE; } void PSStripNumberY::Initialize(G4HCofThisEvent* HCE) { - EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), GetName()); + EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); if (HCID < 0) { HCID = GetCollectionID(0); } @@ -227,42 +162,51 @@ void PSStripNumberY::PrintAll() G4cout << " Number of entries " << EvtMap->entries() << G4endl ; } + + + + + + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - //Detector Number Scorer -PSDetectorNumber::PSDetectorNumber(G4String name, G4int depth, G4String VolumeName ) +//CsI Cristal / SiLi Pad Number Scorer +// +PSPadOrCristalNumber::PSPadOrCristalNumber(G4String name, G4int depth) : G4VPrimitiveScorer(name, depth), HCID(-1) -{ - m_VolumeName = VolumeName; -} +{} -PSDetectorNumber::~PSDetectorNumber() -{ - ; -} +PSPadOrCristalNumber::~PSPadOrCristalNumber() +{} -G4bool PSDetectorNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - std::string name = aStep->GetTrack()->GetVolume()->GetName(); - std::string nbr ; - size_t found; - found=name.find(m_VolumeName); - - int numberOfCharacterInTelescopeNumber = (int)found - 1 ; - - - for( int i = 0 ; i < numberOfCharacterInTelescopeNumber ; i++ ) - nbr += name[i+1] ; - - G4int DetNbr = atof( nbr.c_str() ) ; - G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; - G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(index, DetNbr); - return TRUE; +G4bool PSPadOrCristalNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) +{ + std::string name = aStep->GetTrack()->GetVolume()->GetName(); + std::string nbr ; + + G4int temp1,temp2 ; + G4int VolumeNumber; + nbr = name[name.length()-1] ; + temp1 = atoi( nbr.c_str() ) ; + + nbr = name[name.length()-2] ; + temp2 = atoi( nbr.c_str() ) ; + + nbr.clear(); + + if(temp2!=0) { nbr+= name[name.length()-2] ; nbr+= name[name.length()-1] ; VolumeNumber = atoi( nbr.c_str() ) ;} + + else { nbr= name[name.length()-1] ; VolumeNumber = atoi( nbr.c_str() ) ;} + + G4int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "MUST2Telescope"); + + G4double edep = aStep->GetTotalEnergyDeposit(); + if (edep < 100*keV) return FALSE; + G4int index = aStep->GetTrack()->GetTrackID(); + EvtMap->set(index+DetNbr, VolumeNumber); + return TRUE; } -void PSDetectorNumber::Initialize(G4HCofThisEvent* HCE) +void PSPadOrCristalNumber::Initialize(G4HCofThisEvent* HCE) { EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); if (HCID < 0) { @@ -271,30 +215,39 @@ void PSDetectorNumber::Initialize(G4HCofThisEvent* HCE) HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); } -void PSDetectorNumber::EndOfEvent(G4HCofThisEvent*) +void PSPadOrCristalNumber::EndOfEvent(G4HCofThisEvent*) { ; } -void PSDetectorNumber::clear() +void PSPadOrCristalNumber::clear() { EvtMap->clear(); } -void PSDetectorNumber::DrawAll() +void PSPadOrCristalNumber::DrawAll() { ; } -void PSDetectorNumber::PrintAll() +void PSPadOrCristalNumber::PrintAll() { - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; - G4cout << " PrimitiveScorer " << GetName() << G4endl; - G4cout << " Number of entries " << EvtMap->entries() << G4endl; - std::map<G4int, G4int*>::iterator itr = EvtMap->GetMap()->begin(); - for (; itr != EvtMap->GetMap()->end(); itr++) { - G4cout << " copy no.: " << itr->first - << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") - << G4endl; - } + G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl ; + G4cout << " PrimitiveScorer " << GetName() << G4endl ; + G4cout << " Number of entries " << EvtMap->entries() << G4endl ; } + + + + + + + + + + + + + + + diff --git a/NPSimulation/src/PhysicsList.cc b/NPSimulation/src/PhysicsList.cc index b2830204201608cb20133a7d78c9670cb21749be..104f0673950be17dba416e4ab23c08eb5a4eef35 100644 --- a/NPSimulation/src/PhysicsList.cc +++ b/NPSimulation/src/PhysicsList.cc @@ -70,8 +70,9 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::PhysicsList() -{ - defaultCutValue = 1 * cm; +{ + // ie: no secondaries + defaultCutValue = 1000 * pc; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::~PhysicsList() @@ -211,7 +212,7 @@ void PhysicsList::ConstructEM() pmanager->AddProcess(new G4MultipleScattering(), -1, 1, 1) ; G4ionIonisation* iI = new G4ionIonisation ; // mod by Nicolas [07/05/09] -// iI->ActivateNuclearStopping(true) ; + iI->ActivateNuclearStopping(true) ; iI->ActivateStoppingData(true) ; pmanager->AddProcess(iI , -1, 2, 2) ; @@ -232,9 +233,9 @@ void PhysicsList::ConstructEM() G4EmProcessOptions opt ; opt.SetSubCutoff(true) ; opt.SetMinEnergy(0.001*eV) ; - opt.SetMaxEnergy(600.*MeV) ; - opt.SetDEDXBinning(600) ; - opt.SetLambdaBinning(600) ; + opt.SetMaxEnergy(1000.*MeV) ; + opt.SetDEDXBinning(1000) ; + opt.SetLambdaBinning(1000) ; // mod by Nicolas [07/05/09] // opt.SetLinearLossLimit(1.e-3) ; diff --git a/NPSimulation/src/Plastic.cc b/NPSimulation/src/Plastic.cc index 1f95f4954904a6055597a8824e5b59dead0cba56..5e1e3fda47083a810e4cbdd617b9808a6d135c24 100644 --- a/NPSimulation/src/Plastic.cc +++ b/NPSimulation/src/Plastic.cc @@ -8,11 +8,13 @@ /***************************************************************************** * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * - * Creation Date : January 2009 * + * Creation Date : September 2009 * * Last update : * *---------------------------------------------------------------------------* * Decription: * - * This class describe a 20um Silicium detector * + * This class describe a Modular cylindrical Plastic Scintillator * + * Few Material are instantiate and user can choose position and dimension * + * but also the adding of a lead plate on the rear side of the detector * * * *---------------------------------------------------------------------------* * Comment: * @@ -22,7 +24,7 @@ // C++ headers #include <sstream> #include <cmath> - +#include <limits> //G4 Geometry object #include "G4Tubs.hh" @@ -41,9 +43,9 @@ // NPTool header #include "Plastic.hh" -#include "PlasticScorers.hh" +#include "GeneralScorers.hh" #include "RootOutput.h" - +using namespace GENERALSCORERS ; // CLHEP header #include "CLHEP/Random/RandGauss.h" @@ -56,7 +58,7 @@ namespace PLASTIC { // Energy and time Resolution const G4double ResoTime = 4.2 ;// = 10ns of Resolution // Unit is MeV/2.35 - const G4double ResoEnergy = 0.42 ;// = 1MeV of Resolution // Unit is MeV/2.35 + const G4double ResoEnergy = 5.0 ;// Resolution in % } @@ -73,25 +75,31 @@ Plastic::Plastic() Plastic::~Plastic() { - delete m_MaterialPlastic ; - delete m_MaterialLead ; - delete m_PlasticScorer ; + delete m_MaterialPlastic_BC400 ; + delete m_MaterialPlastic_BC452_2 ; + delete m_MaterialPlastic_BC452_5 ; + delete m_MaterialPlastic_BC452_10 ; + delete m_MaterialLead ; + delete m_PlasticScorer ; } + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Plastic::AddPlastic( G4double R , - G4double Theta , - G4double Phi , - G4double PlasticThickness , - G4double PlasticRadius , - G4double LeadThickness ) +void Plastic::AddPlastic( G4double R , + G4double Theta , + G4double Phi , + G4double PlasticThickness , + G4double PlasticRadius , + G4String Scintillator , + G4double LeadThickness ) { - m_R.push_back(R) ; - m_Theta.push_back(Theta) ; - m_Phi.push_back(Phi) ; - m_PlasticThickness.push_back(PlasticThickness) ; - m_PlasticRadius.push_back(PlasticRadius) ; - m_LeadThickness.push_back(LeadThickness); + m_R.push_back(R) ; + m_Theta.push_back(Theta) ; + m_Phi.push_back(Phi) ; + m_PlasticThickness.push_back(PlasticThickness) ; + m_PlasticRadius.push_back(PlasticRadius) ; + m_LeadThickness.push_back(LeadThickness) ; + m_Scintillator.push_back(Scintillator) ; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -104,12 +112,13 @@ void Plastic::AddPlastic( G4double R , // Called in DetecorConstruction::ReadDetextorConfiguration Method void Plastic::ReadConfiguration(string Path) { - ifstream ConfigFile ; - ConfigFile.open(Path.c_str()) ; - string LineBuffer ; - string DataBuffer ; + ifstream ConfigFile ; + ConfigFile.open(Path.c_str()) ; + string LineBuffer ; + string DataBuffer ; - G4double Theta = 0 , Phi = 0 , R = 0 , Thickness = 0 , Radius = 0 , LeadThickness = 0; + G4double Theta = 0 , Phi = 0 , R = 0 , Thickness = 0 , Radius = 0 , LeadThickness = 0; + G4String Scintillator ; bool check_Theta = false ; bool check_Phi = false ; @@ -117,6 +126,7 @@ void Plastic::ReadConfiguration(string Path) bool check_Thickness = false ; bool check_Radius = false ; bool check_LeadThickness = false ; + bool check_Scintillator = false ; bool ReadingStatus = false ; @@ -125,7 +135,7 @@ void Plastic::ReadConfiguration(string Path) getline(ConfigFile, LineBuffer); - // If line is a Start Up MUST2 bloc, Reading toggle to true + // If line is a Start Up Plastic bloc, Reading toggle to true if (LineBuffer.compare(0, 7, "Plastic") == 0) { G4cout << "///" << G4endl ; @@ -144,7 +154,7 @@ void Plastic::ReadConfiguration(string Path) ConfigFile >> DataBuffer ; // Comment Line - if (DataBuffer.compare(0, 1, "%") == 0) {/*do nothing */;} + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} // Finding another telescope (safety), toggle out else if (DataBuffer.compare(0, 6, "Plastic") == 0) { @@ -193,6 +203,13 @@ void Plastic::ReadConfiguration(string Path) cout << "Plastic Thickness: " << Thickness/mm << endl; } + else if (DataBuffer.compare(0, 13, "Scintillator=") == 0) { + check_Scintillator = true ; + ConfigFile >> DataBuffer ; + Scintillator = DataBuffer ; + cout << "Plastic Scintillator type: " << Scintillator << endl; + } + else if (DataBuffer.compare(0, 14, "LeadThickness=") == 0) { check_LeadThickness = true; ConfigFile >> DataBuffer ; @@ -209,14 +226,15 @@ void Plastic::ReadConfiguration(string Path) ///////////////////////////////////////////////// // If All necessary information there, toggle out - if ( check_Theta && check_Phi && check_R && check_Thickness && check_Radius && check_LeadThickness) + if ( check_Theta && check_Phi && check_R && check_Thickness && check_Radius && check_LeadThickness && check_Scintillator) { - AddPlastic( R , - Theta , - Phi , - Thickness , - Radius , - LeadThickness); + AddPlastic( R , + Theta , + Phi , + Thickness , + Radius , + Scintillator , + LeadThickness ); // Reinitialisation of Check Boolean @@ -226,6 +244,7 @@ void Plastic::ReadConfiguration(string Path) check_Thickness = false ; check_Radius = false ; check_LeadThickness = false ; + check_Scintillator = false ; ReadingStatus = false ; cout << "///"<< endl ; } @@ -241,14 +260,14 @@ void Plastic::ConstructDetector(G4LogicalVolume* world) { G4ThreeVector Det_pos = G4ThreeVector(0, 0, 0) ; - for (ushort i = 0 ; i < m_R.size() ; i++) + for (unsigned short i = 0 ; i < m_R.size() ; i++) { G4double wX = m_R[i] * sin(m_Theta[i] ) * cos(m_Phi[i] ) ; G4double wY = m_R[i] * sin(m_Theta[i] ) * sin(m_Phi[i] ) ; G4double wZ = m_R[i] * cos(m_Theta[i] ) ; Det_pos = G4ThreeVector(wX, wY, wZ) ; - G4LogicalVolume* logicPlastic = NULL ; +// G4LogicalVolume* logicPlastic = NULL ; VolumeMaker(Det_pos , i+1, world) ; } @@ -269,6 +288,20 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* int i = DetNumber-1; + G4Material* PlasticMaterial ; + + if(m_Scintillator[i] == "BC400" ) PlasticMaterial = m_MaterialPlastic_BC400 ; + else if(m_Scintillator[i] == "BC452_2" ) PlasticMaterial = m_MaterialPlastic_BC452_2 ; + else if(m_Scintillator[i] == "BC452_5" ) PlasticMaterial = m_MaterialPlastic_BC452_5 ; + else if(m_Scintillator[i] == "BC452_10" ) PlasticMaterial = m_MaterialPlastic_BC452_10 ; + else { + G4cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl ; + G4cout << "WARNING: Material Not found, default material set : BC400" << endl ; + G4cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl ; + PlasticMaterial = m_MaterialPlastic_BC400; + } + + // Definition of the volume containing the sensitive detector if(m_PlasticThickness[i]>0 && m_PlasticRadius[i]>0) { @@ -279,7 +312,7 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* 0*deg , 360*deg ); - G4LogicalVolume* logicPlastic = new G4LogicalVolume(solidPlastic, m_MaterialPlastic, Name, 0, 0, 0); + G4LogicalVolume* logicPlastic = new G4LogicalVolume(solidPlastic, PlasticMaterial, Name+ "_Scintillator", 0, 0, 0); logicPlastic->SetSensitiveDetector(m_PlasticScorer); G4VisAttributes* PlastVisAtt = new G4VisAttributes(G4Colour(0.0, 0.0, 0.9)) ; @@ -290,7 +323,7 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* PVPBuffer = new G4PVPlacement( 0 , Det_pos , logicPlastic , - Name , + Name + "_Scintillator" , world , false , 0 ); @@ -302,21 +335,21 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* if(m_LeadThickness[i]>0&& m_PlasticRadius[i]>0) { - G4Tubs* solidLead = new G4Tubs( Name , + G4Tubs* solidLead = new G4Tubs( Name+"_Lead" , 0 , m_PlasticRadius[i] , m_LeadThickness[i]/2 , 0*deg , 360*deg ); - G4LogicalVolume* logicLead = new G4LogicalVolume(solidLead, m_MaterialLead, Name, 0, 0, 0); + G4LogicalVolume* logicLead = new G4LogicalVolume(solidLead, m_MaterialLead, Name+"_Lead", 0, 0, 0); G4VisAttributes* LeadVisAtt = new G4VisAttributes(G4Colour(0.1, 0.1, 0.1)) ; logicLead->SetVisAttributes(LeadVisAtt) ; PVPBuffer = new G4PVPlacement( 0 , Det_pos+(m_PlasticThickness[i]/2+m_LeadThickness[i]/2)*Det_pos.unit() , logicLead , - Name , + Name+"_Lead" , world , false , 0 ); @@ -393,7 +426,7 @@ void Plastic::ReadSensitive(const G4Event* event) G4double E = *(Energy_itr->second) ; if (ETrackID == NTrackID) { - m_Event->SetEnergy(RandGauss::shoot(E, ResoEnergy)) ; + m_Event->SetEnergy(RandGauss::shoot(E, E*ResoEnergy/100./2.35)) ; } Energy_itr++; @@ -419,8 +452,10 @@ void Plastic::ReadSensitive(const G4Event* event) } // clear map for next event - DetectorNumberHitMap ->clear(); - EnergyHitMap ->clear() ; + TimeHitMap ->clear() ; + DetectorNumberHitMap ->clear() ; + EnergyHitMap ->clear() ; + } //////////////////////////////////////////////////////////////// @@ -430,14 +465,14 @@ void Plastic::InitializeMaterial() //////////////////////////////////////////////////////////////// /////////////////Element Definition /////////////////////////// //////////////////////////////////////////////////////////////// - G4String symbol ; - G4double density = 0. , a = 0, z = 0 ; - G4int ncomponents = 0, natoms = 0 ; + G4String symbol ; + G4double density = 0. , a = 0, z = 0 ; + G4int ncomponents = 0, natoms = 0, fractionmass = 0 ; // for Plastic - G4Element* H = new G4Element("Hydrogen" , symbol = "H" , z = 1 , a = 1.01 * g / mole); - G4Element* C = new G4Element("Carbon" , symbol = "C" , z = 6 , a = 12.011 * g / mole); - + G4Element* H = new G4Element("Hydrogen" , symbol = "H" , z = 1 , a = 1.01 * g / mole); + G4Element* C = new G4Element("Carbon" , symbol = "C" , z = 6 , a = 12.011 * g / mole); + G4Element* Pb = new G4Element("Lead" , symbol = "Pb" , z = 82 , a = 207.2 * g / mole); //////////////////////////////////////////////////////////////// /////////////////Material Definition /////////////////////////// //////////////////////////////////////////////////////////////// @@ -448,11 +483,32 @@ void Plastic::InitializeMaterial() m_MaterialLead = new G4Material("Lead", z = 82 , a, density); - // Plastic - density = 1.243 * g / cm3; - m_MaterialPlastic = new G4Material("Plastic", density, ncomponents = 2); - m_MaterialPlastic->AddElement(H , natoms = 10); - m_MaterialPlastic->AddElement(C , natoms = 14); + // Plastic BC-400 + density = 1.032 * g / cm3; + m_MaterialPlastic_BC400 = new G4Material("Plastic_BC400", density, ncomponents = 2); + m_MaterialPlastic_BC400->AddElement(H , natoms = 10); + m_MaterialPlastic_BC400->AddElement(C , natoms = 9); + + // Plastic BC-452 Pb 2% + density = 1.05 * g / cm3; + m_MaterialPlastic_BC452_2 = new G4Material("Plastic_BC452_2", density, ncomponents = 3); + m_MaterialPlastic_BC452_2->AddElement(H , natoms = 10); + m_MaterialPlastic_BC452_2->AddElement(C , natoms = 9); + m_MaterialPlastic_BC452_2->AddElement(Pb , fractionmass=2*perCent); + + // Plastic BC-452 Pb 5% + density = 1.08 * g / cm3; + m_MaterialPlastic_BC452_5 = new G4Material("Plastic_BC452_5", density, ncomponents = 3); + m_MaterialPlastic_BC452_5->AddElement(H , natoms = 10); + m_MaterialPlastic_BC452_5->AddElement(C , natoms = 9); + m_MaterialPlastic_BC452_5->AddElement(Pb , fractionmass=5*perCent); + + // Plastic BC-452 Pb 10% + density = 1.17 * g / cm3; + m_MaterialPlastic_BC452_10 = new G4Material("Plastic_BC452_10", density, ncomponents = 3); + m_MaterialPlastic_BC452_10->AddElement(H , natoms = 10); + m_MaterialPlastic_BC452_10->AddElement(C , natoms = 9); + m_MaterialPlastic_BC452_10->AddElement(Pb , fractionmass=10*perCent); } @@ -462,14 +518,14 @@ void Plastic::InitializeScorers() m_PlasticScorer = new G4MultiFunctionalDetector("PlasticScorer") ; G4SDManager::GetSDMpointer()->AddNewDetector(m_PlasticScorer); - G4VPrimitiveScorer* DetNbr = new PSDetectorNumber("PlasticNumber", 0) ; - G4VPrimitiveScorer* Energy = new PSEnergy("Energy", 0) ; - G4VPrimitiveScorer* Time = new PSTOF("Time", 0) ; + G4VPrimitiveScorer* DetNbr = new PSDetectorNumber("PlasticNumber","Plastic", 0) ; + G4VPrimitiveScorer* Energy = new PSEnergy("Energy","Plastic", 0) ; + G4VPrimitiveScorer* Time = new PSTOF("Time","Plastic", 0) ; //and register it to the multifunctionnal detector m_PlasticScorer->RegisterPrimitive(DetNbr) ; m_PlasticScorer->RegisterPrimitive(Energy) ; - m_PlasticScorer->RegisterPrimitive(Time) ; + m_PlasticScorer->RegisterPrimitive(Time) ; } diff --git a/NPSimulation/src/PlasticScorer.cc b/NPSimulation/src/PlasticScorer.cc deleted file mode 100644 index 4cf0904c27753c54b33660127cab23fffdd5f5ec..0000000000000000000000000000000000000000 --- a/NPSimulation/src/PlasticScorer.cc +++ /dev/null @@ -1,240 +0,0 @@ -/***************************************************************************** - * Copyright (C) 2009 this file is part of the NPTool Project * - * * - * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * - * For the list of contributors see $NPTOOL/Licence/Contributors * - *****************************************************************************/ - -/***************************************************************************** - * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * - * * - * Creation Date : September 2009 * - * Last update : * - *---------------------------------------------------------------------------* - * Decription: * - * This class old some of the Platic Scorer, shared by different detector. * - *---------------------------------------------------------------------------* - * Comment: * - *****************************************************************************/ -#include "PlasticScorers.hh" -#include "G4UnitsTable.hh" -using namespace PLASTIC; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// Energy Scorer (deal with multiple particle hit) - -PSEnergy::PSEnergy(G4String name, G4int depth) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ -} - -PSEnergy::~PSEnergy() -{ -} - -G4bool PSEnergy::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - std::string name = aStep->GetTrack()->GetVolume()->GetName(); - std::string nbr ; - size_t found; - found=name.find("Plastic"); - found = found + 7; - - int numberOfCharacterInDetectorNumber = name.length() - (int)found ; - - for( int i = found ; i < found + numberOfCharacterInDetectorNumber ; i++ ) - nbr += name[i] ; - - G4int DetNbr = atoi( nbr.c_str() ) ; - - G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; - - G4int index = aStep->GetTrack()->GetTrackID(); - - EvtMap->add(DetNbr+index, edep); - return TRUE; -} - -void PSEnergy::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void PSEnergy::EndOfEvent(G4HCofThisEvent*) -{ - ; -} - -void PSEnergy::clear() -{ - EvtMap->clear(); -} - -void PSEnergy::DrawAll() -{ - ; -} - -void PSEnergy::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; - G4cout << " PrimitiveScorer " << GetName() << G4endl; - G4cout << " Number of entries " << EvtMap->entries() << G4endl; - std::map<G4int, G4double*>::iterator itr = EvtMap->GetMap()->begin(); - for (; itr != EvtMap->GetMap()->end(); itr++) { - G4cout << " copy no.: " << itr->first - << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") - << G4endl; - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - //Detector Number Scorer -PSDetectorNumber::PSDetectorNumber(G4String name, G4int depth) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ -} - -PSDetectorNumber::~PSDetectorNumber() -{ - ; -} - -G4bool PSDetectorNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - std::string name = aStep->GetTrack()->GetVolume()->GetName(); - std::string nbr ; - size_t found; - found=name.find("Plastic"); - found = found + 7; - - int numberOfCharacterInDetectorNumber = name.length() - (int)found ; - - for( int i = found ; i < found + numberOfCharacterInDetectorNumber ; i++ ) - nbr += name[i] ; - - G4int DetNbr = atoi( nbr.c_str() ) ; - G4double edep = aStep->GetTotalEnergyDeposit(); - - if (edep < 100*keV) return FALSE; - - G4int index = aStep->GetTrack()->GetTrackID(); - - EvtMap->set(DetNbr + index, DetNbr); - return TRUE; -} - -void PSDetectorNumber::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void PSDetectorNumber::EndOfEvent(G4HCofThisEvent*) -{ - ; -} - -void PSDetectorNumber::clear() -{ - EvtMap->clear(); -} - -void PSDetectorNumber::DrawAll() -{ - ; -} - -void PSDetectorNumber::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; - G4cout << " PrimitiveScorer " << GetName() << G4endl; - G4cout << " Number of entries " << EvtMap->entries() << G4endl; - std::map<G4int, G4int*>::iterator itr = EvtMap->GetMap()->begin(); - for (; itr != EvtMap->GetMap()->end(); itr++) { - G4cout << " copy no.: " << itr->first - << " energy deposit: " << G4BestUnit(*(itr->second), "Energy") - << G4endl; - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//TOF Scorer// -PSTOF::PSTOF(G4String name, G4int depth) - : G4VPrimitiveScorer(name, depth), HCID(-1) -{ - ; -} - -PSTOF::~PSTOF() -{ - ; -} - -G4bool PSTOF::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - std::string name = aStep->GetTrack()->GetVolume()->GetName(); - std::string nbr ; - size_t found; - found=name.find("Plastic"); - found = found + 7; - - int numberOfCharacterInDetectorNumber = name.length() - (int)found ; - - for( int i = found ; i < found + numberOfCharacterInDetectorNumber ; i++ ) - nbr += name[i] ; - - G4int DetNbr = atoi( nbr.c_str() ) ; - - - G4double TOF = aStep->GetPreStepPoint()->GetGlobalTime(); - G4double edep = aStep->GetTotalEnergyDeposit(); - if (edep < 100*keV) return FALSE; - G4int index = aStep->GetTrack()->GetTrackID(); - EvtMap->set(DetNbr + index, TOF); - return TRUE; -} - -void PSTOF::Initialize(G4HCofThisEvent* HCE) -{ - EvtMap = new G4THitsMap<G4double>(GetMultiFunctionalDetector()->GetName(), - GetName()); - if (HCID < 0) { - HCID = GetCollectionID(0); - } - HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); -} - -void PSTOF::EndOfEvent(G4HCofThisEvent*) -{ - ; -} - -void PSTOF::clear() -{ - EvtMap->clear(); -} - -void PSTOF::DrawAll() -{ - ; -} - -void PSTOF::PrintAll() -{ - G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl ; - G4cout << " PrimitiveScorer " << GetName() << G4endl ; - G4cout << " Number of entries " << EvtMap->entries() << G4endl ; -} diff --git a/NPSimulation/src/PrimaryGeneratorAction.cc b/NPSimulation/src/PrimaryGeneratorAction.cc index d581258dcb9857d1b4770f41da282db5ac6c5375..a5d8a264e2eb54c33cb78404ac210f7ee0ab6ba4 100644 --- a/NPSimulation/src/PrimaryGeneratorAction.cc +++ b/NPSimulation/src/PrimaryGeneratorAction.cc @@ -123,29 +123,21 @@ void PrimaryGeneratorAction::ReadEventGeneratorFile(string Path) myEventGenerator->ReadConfiguration(Path) ; EventGeneratorFile.open(Path.c_str()) ; myEventGenerator->InitializeRootOutput() ; - myEventGenerator->SetTargetThickness(m_detector->GetTargetThickness()) ; - myEventGenerator->SetTargetRadius(m_detector->GetTargetRadius()) ; - myEventGenerator->SetTargetCoordinate(m_detector->GetTargetX() , - m_detector->GetTargetY() , - m_detector->GetTargetZ()) ; + myEventGenerator->SetTarget(m_detector->GetTarget()) ; m_EventGenerator = myEventGenerator ; } - //Search for Transfert To Resonance + //Search for Transfert else if (LineBuffer.compare(0, 9, "Transfert") == 0 && !check_Transfert && LineBuffer.compare(0, 11, "TransfertTo") != 0) { - check_Transfert = true ; - VEventGenerator* myEventGenerator = new EventGeneratorTransfert() ; - EventGeneratorFile.close() ; - myEventGenerator->ReadConfiguration(Path) ; - EventGeneratorFile.open(Path.c_str()) ; - myEventGenerator->InitializeRootOutput() ; - myEventGenerator->SetTargetThickness(m_detector->GetTargetThickness()) ; - myEventGenerator->SetTargetRadius(m_detector->GetTargetRadius()) ; - myEventGenerator->SetTargetCoordinate( m_detector->GetTargetX() , - m_detector->GetTargetY() , - m_detector->GetTargetZ()) ; - m_EventGenerator = myEventGenerator ; + check_Transfert = true; + VEventGenerator* myEventGenerator = new EventGeneratorTransfert(); + EventGeneratorFile.close(); + myEventGenerator->ReadConfiguration(Path); + EventGeneratorFile.open(Path.c_str()); + myEventGenerator->InitializeRootOutput(); + myEventGenerator->SetTarget(m_detector->GetTarget()); + m_EventGenerator = myEventGenerator; } //Search for Transfert To Resonance @@ -156,11 +148,7 @@ void PrimaryGeneratorAction::ReadEventGeneratorFile(string Path) myEventGenerator->ReadConfiguration(Path) ; EventGeneratorFile.open(Path.c_str()) ; myEventGenerator->InitializeRootOutput() ; - myEventGenerator->SetTargetThickness(m_detector->GetTargetThickness()) ; - myEventGenerator->SetTargetRadius(m_detector->GetTargetRadius()) ; - myEventGenerator->SetTargetCoordinate(m_detector->GetTargetX() , - m_detector->GetTargetY() , - m_detector->GetTargetZ()) ; + myEventGenerator->SetTarget(m_detector->GetTarget()); m_EventGenerator = myEventGenerator ; } } diff --git a/NPSimulation/src/Target.cc b/NPSimulation/src/Target.cc index 1d88eda135602fbe0a7030bb319ba20d8d17e830..51eba32448deaa208974316e2729fddc5e7b8902 100644 --- a/NPSimulation/src/Target.cc +++ b/NPSimulation/src/Target.cc @@ -9,7 +9,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : 06/11/2009 * *---------------------------------------------------------------------------* * Decription: * * This class describe Cryogenic and standard Target. Derived from VDetector* @@ -17,9 +17,17 @@ *---------------------------------------------------------------------------* * Comment: * * Some improvment need to be done in material dealing * + * * + * + 16/09/2009: Add support for positioning the target with an angle with * + * respect to the beam (N. de Sereville) * + * + 16/09/2009: Add CH2 material for targets (N. de Sereville) * + * + 06/11/2009: Add new Token m_TargetNbLayers defining the number of steps used * + * to slow down the beam in the target (N. de Sereville) * + * * *****************************************************************************/ // C++ header #include <fstream> +#include <limits> // G4 geometry header #include "G4Tubs.hh" @@ -34,7 +42,11 @@ #include "G4VPhysicalVolume.hh" #include "G4VisAttributes.hh" #include "G4Colour.hh" - +#include "G4EmCalculator.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" +#include "Randomize.hh" +using namespace CLHEP ; // NPTool header #include"Target.hh" @@ -45,12 +57,14 @@ using namespace std; // Specific Method of this class Target::Target() { - m_TargetType = true ; - m_TargetThickness = 0 ; - m_TargetRadius = 0 ; + m_TargetType = true; + m_TargetThickness = 0 ; + m_TargetAngle = 0 ; + m_TargetRadius = 0 ; m_WindowsThickness = 0 ; m_TargetTemperature = 0 ; - m_TargetPressure = 0 ; + m_TargetPressure = 0 ; + m_TargetNbLayers = 50; // Number of steps by default } G4Material* Target::GetMaterialFromLibrary(G4String MaterialName, G4double Temperature, G4double Pressure) @@ -157,6 +171,16 @@ G4Material* Target::GetMaterialFromLibrary(G4String MaterialName, G4double Tempe return myMaterial; } + else if (MaterialName == "CH2") { + G4Element* C = new G4Element("Carbon" , "C" , 6. , 12.011*g / mole); + G4Element* H = new G4Element("Hydrogen", "H" , 1. , 1.01 *g / mole); + + G4Material* myMaterial = new G4Material("CH2", 0.9*g / cm3, 2); + myMaterial->AddElement(C , 1); + myMaterial->AddElement(H , 2); + return myMaterial; + } + else { G4cout << "No Matching Material in the Target Library Default is Vacuum" << G4endl; G4Element* N = new G4Element("Nitrogen", "N", 7., 14.01*g / mole); @@ -178,49 +202,46 @@ G4Material* Target::GetMaterialFromLibrary(G4String MaterialName, G4double Tempe // Called in DetecorConstruction::ReadDetextorConfiguration Method void Target::ReadConfiguration(string Path) { - ifstream ConfigFile ; - ConfigFile.open(Path.c_str()) ; - string LineBuffer ; - string DataBuffer ; - + ifstream ConfigFile; + ConfigFile.open(Path.c_str()); + string LineBuffer; + string DataBuffer; - bool ReadingStatusTarget = false ; - bool ReadingStatusCryoTarget = false ; - - bool check_Thickness = false ; - bool check_Radius = false ; - bool check_Material = false ; - bool check_X = false ; - bool check_Y = false ; - bool check_Z = false ; - - bool check_Temperature = false ; - bool check_Pressure = false ; - bool check_WinThickness = false ; - bool check_WinMaterial = false ; + bool ReadingStatusTarget = false ; + bool ReadingStatusCryoTarget = false ; + + bool check_Thickness = false ; + bool check_Radius = false ; + bool check_Angle = false ; + bool check_Material = false ; + bool check_X = false ; + bool check_Y = false ; + bool check_Z = false ; + bool check_m_TargetNbLayers = false; + + bool check_Temperature = false ; + bool check_Pressure = false ; + bool check_WinThickness = false ; + bool check_WinMaterial = false ; while (!ConfigFile.eof()) { - - getline(ConfigFile, LineBuffer); if (LineBuffer.compare(0, 6, "Target") == 0) { cout << "Target Found" << endl; m_TargetType = true ; ReadingStatusTarget = true ; - } - + } else if (LineBuffer.compare(0, 10, "CryoTarget") == 0) { cout << "Cryogenic Target Found" << endl; m_TargetType = false ; ReadingStatusCryoTarget = true ; - } - - while(ReadingStatusTarget){ - - ConfigFile >> DataBuffer; + } + + while (ReadingStatusTarget) { + ConfigFile >> DataBuffer; //Search for comment Symbol % - if (DataBuffer.compare(0, 1, "%") == 0) {/*Do Nothing*/;} + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} else if (DataBuffer.compare(0, 10, "THICKNESS=") == 0) { check_Thickness = true ; @@ -229,6 +250,13 @@ void Target::ReadConfiguration(string Path) cout << "Target Thickness: " << m_TargetThickness << endl ; } + else if (DataBuffer.compare(0, 6, "ANGLE=") == 0) { + check_Angle = true ; + ConfigFile >> DataBuffer; + m_TargetAngle = atof(DataBuffer.c_str()) * deg; + cout << "Target Angle: " << m_TargetAngle << endl ; + } + else if (DataBuffer.compare(0, 7, "RADIUS=") == 0) { check_Radius = true ; ConfigFile >> DataBuffer; @@ -264,6 +292,13 @@ void Target::ReadConfiguration(string Path) cout << m_TargetZ / mm << " )" << endl ; } + else if (DataBuffer.compare(0, 9, "NbLayers=") == 0) { + check_m_TargetNbLayers = true ; + ConfigFile >> DataBuffer; + m_TargetNbLayers = atoi(DataBuffer.c_str()); + cout << "Number of steps for slowing down the beam in target: " << m_TargetNbLayers << endl; + } + /////////////////////////////////////////////////// // If no Beam Token and no comment, toggle out else @@ -351,6 +386,13 @@ void Target::ReadConfiguration(string Path) cout << m_TargetZ / mm << " )" << endl ; } + else if (DataBuffer.compare(0, 9, "m_TargetNbLayers=") == 0) { + check_m_TargetNbLayers = true ; + ConfigFile >> DataBuffer; + m_TargetNbLayers = atoi(DataBuffer.c_str()); + cout << "Number of steps for slowing down the beam in target: " << m_TargetNbLayers << endl; + } + /////////////////////////////////////////////////// // If no Beam Token and no comment, toggle out else @@ -377,20 +419,25 @@ void Target::ConstructDetector(G4LogicalVolume* world) // If don't you will have a Warning unused variable 'myPVP' G4VPhysicalVolume* PVPBuffer ; - if (m_TargetType) { + if (m_TargetType) { // case of standard target if (m_TargetThickness > 0) { G4Tubs* solidTarget = new G4Tubs("solidTarget", 0, m_TargetRadius, 0.5*m_TargetThickness, 0*deg, 360*deg); G4LogicalVolume* logicTarget = new G4LogicalVolume(solidTarget, m_TargetMaterial, "logicTarget"); + + // rotation of target + G4RotationMatrix *rotation = new G4RotationMatrix(); + rotation->rotateY(m_TargetAngle); + PVPBuffer = - new G4PVPlacement(0, G4ThreeVector(m_TargetX, m_TargetY, m_TargetZ), logicTarget, "Target", world, false, 0); + new G4PVPlacement(rotation, G4ThreeVector(m_TargetX, m_TargetY, m_TargetZ), logicTarget, "Target", world, false, 0); G4VisAttributes* TargetVisAtt = new G4VisAttributes(G4Colour(0., 0., 1.));//Blue logicTarget->SetVisAttributes(TargetVisAtt); } } - else { + else { // case of cryogenic target if (m_TargetThickness > 0) { G4Tubs* solidTarget = new G4Tubs("solidTarget", 0, m_TargetRadius, 0.5*m_TargetThickness, 0*deg, 360*deg); @@ -415,20 +462,20 @@ void Target::ConstructDetector(G4LogicalVolume* world) G4LogicalVolume* logicWindowsB = new G4LogicalVolume(solidWindowsB, m_WindowsMaterial, "logicTargetWindowsB"); PVPBuffer = - new G4PVPlacement(0 , - TargetPos + G4ThreeVector(0., 0., 0.5*(m_TargetThickness + m_WindowsThickness)) , - logicWindowsF , - "Target Window Front" , - world , - false, 0); + new G4PVPlacement( 0 , + TargetPos + G4ThreeVector(0., 0., 0.5*(m_TargetThickness + m_WindowsThickness)) , + logicWindowsF , + "Target Window Front" , + world , + false, 0 ); PVPBuffer = - new G4PVPlacement(0 , - TargetPos + G4ThreeVector(0., 0., -0.5*(m_TargetThickness + m_WindowsThickness)) , - logicWindowsB , - "Target Window Back" , - world , - false, 0); + new G4PVPlacement( 0 , + TargetPos + G4ThreeVector(0., 0., -0.5*(m_TargetThickness + m_WindowsThickness)) , + logicWindowsB , + "Target Window Back" , + world , + false, 0 ); G4VisAttributes* WindowsVisAtt = new G4VisAttributes(G4Colour(0.5, 1., 0.5)); logicWindowsF->SetVisAttributes(WindowsVisAtt); @@ -447,4 +494,168 @@ void Target::InitializeRootOutput() // Called at in the EventAction::EndOfEventAvtion void Target::ReadSensitive(const G4Event*) {} + +void Target::CalculateBeamInteraction( double MeanPosX, double SigmaPosX, double MeanPosTheta, double SigmaPosTheta, + double MeanPosY, double SigmaPosY, double MeanPosPhi, double SigmaPosPhi, + double IncidentBeamEnergy, + G4ParticleDefinition* BeamName, + G4ThreeVector &InterCoord, double &AngleEmittanceTheta, double &AngleEmittancePhi, + double &AngleIncidentTheta, double &AngleIncidentPhi, + double &FinalBeamEnergy) +{ + // target parameters + G4ThreeVector TargetNormal = G4ThreeVector( sin(m_TargetAngle) , + 0 , + cos(m_TargetAngle) ); + + // beam interaction parameters + double x0 = 1000 * cm; + double y0 = 1000 * cm; + double z0 = 0 * cm; + double dz = 0 * cm; + + // calculate emittance parameters (x,theta) and (y,phi) + if (m_TargetRadius != 0) { // case of finite target dimensions + while (sqrt(x0*x0 + y0*y0) > m_TargetRadius) { + RandomGaussian2D(MeanPosX, MeanPosTheta, SigmaPosX, SigmaPosTheta, x0, AngleEmittanceTheta); + RandomGaussian2D(MeanPosY, MeanPosPhi, SigmaPosY, SigmaPosPhi, y0, AngleEmittancePhi); + } + // in case target is tilted, correct the z-position of interaction + // x is the vertical axis + dz = x0 * tan(m_TargetAngle); + } + else { // if no target radius is given consider a point-like target + RandomGaussian2D(0, 0, 0, SigmaPosTheta, x0, AngleEmittanceTheta); + RandomGaussian2D(0, 0, 0, SigmaPosPhi, y0, AngleEmittancePhi); + } + + // Calculate incident angle in spherical coordinate, passing by the direction vector dir + double Xdir = sin(AngleEmittanceTheta); + double Ydir = sin(AngleEmittancePhi); + double Zdir = cos(AngleEmittanceTheta) + cos(AngleEmittancePhi); + G4ThreeVector BeamDir = G4ThreeVector(Xdir,Ydir,Zdir) ; + + AngleIncidentTheta = BeamDir.theta() ; + AngleIncidentPhi = BeamDir.phi() ; + if (AngleIncidentPhi < 0) AngleIncidentPhi += 2*pi ; + if (AngleIncidentTheta < 1e-6) AngleIncidentPhi = 0 ; + + // Calculation of effective target thickness and z-position of interaction + // when the target is tilted wrt the beam axis + double EffectiveThickness = m_TargetThickness / (BeamDir.unit()).dot(TargetNormal.unit()); + double uniform = RandFlat::shoot(); + z0 = dz + (-m_TargetThickness / 2 + uniform * m_TargetThickness); + + // Calculate the effective thickness before interaction in target + // This is useful to slow down the beam + double EffectiveTargetThicknessBeforeInteraction = m_TargetThickness * uniform / cos(AngleIncidentTheta); + + // Move to the target position + x0 += m_TargetX; + y0 += m_TargetY; + z0 += m_TargetZ; + InterCoord = G4ThreeVector(x0, y0, z0); + + if(m_TargetType) + { + G4EmCalculator emCalculator; + if(m_TargetThickness!=0) + { + for (G4int i = 0; i < m_TargetNbLayers; i++) + { + G4double dedx = emCalculator.ComputeTotalDEDX(IncidentBeamEnergy, BeamName, m_TargetMaterial); + G4double de = dedx * EffectiveTargetThicknessBeforeInteraction / m_TargetNbLayers; + IncidentBeamEnergy -= de; + } + } + } + + else + { G4EmCalculator emCalculator; + // Windows + if(m_WindowsThickness!=0) + for (G4int i = 0; i < m_TargetNbLayers; i++) + { + G4double dedx = emCalculator.ComputeTotalDEDX(IncidentBeamEnergy, BeamName, m_WindowsMaterial); + G4double de = dedx * m_WindowsThickness * uniform / (cos(AngleIncidentTheta)*m_TargetNbLayers); + IncidentBeamEnergy -= de; + } + + // Target + if(m_TargetThickness!=0) + for (G4int i = 0; i < m_TargetNbLayers; i++) + { + G4double dedx = emCalculator.ComputeTotalDEDX(IncidentBeamEnergy, BeamName, m_TargetMaterial); + G4double de = dedx * EffectiveTargetThicknessBeforeInteraction / m_TargetNbLayers; + IncidentBeamEnergy -= de; + } + } + +FinalBeamEnergy=IncidentBeamEnergy; +} + + + +void Target::RandomGaussian2D(double MeanX, double MeanY, double SigmaX, double SigmaY, double &X, double &Y, double NumberOfSigma) +{ + if (SigmaX != 0) { + X = 2 * NumberOfSigma*SigmaX; + while (X > NumberOfSigma*SigmaX) X = RandGauss::shoot(MeanX, SigmaX); + + double a = NumberOfSigma * SigmaX/2; + double b = NumberOfSigma * SigmaY/2; + double SigmaYPrim = b * sqrt(1 - X*X / (a*a)); + + SigmaYPrim = 2*SigmaYPrim / NumberOfSigma; + Y = RandGauss::shoot(MeanY, SigmaYPrim); + } + else { + X = MeanX; + Y = RandGauss::shoot(MeanY, SigmaY); + } +} + +// Generate a DEDX file table using the material used in the target +void Target::WriteDEDXTable(G4ParticleDefinition* Particle ,G4double Emin,G4double Emax) + { + // Opening hte output file + G4String GlobalPath = getenv("NPTOOL"); + G4String Path = GlobalPath + "/Inputs/EnergyLoss/" + Particle->GetParticleName() + "_" + m_TargetMaterial->GetName() + ".G4table"; + + ofstream File ; + File.open(Path) ; + + if(!File) return ; + + File << "Table from Geant4 generate using NPSimulation \t" + << "Particle: " << Particle->GetParticleName() << "\tMaterial: " << m_TargetMaterial->GetName() << endl ; + + G4EmCalculator emCalculator; + + for (G4double E=Emin; E < Emax; E+=(Emax-Emin)/10000.) + { + G4double dedx = emCalculator.ComputeTotalDEDX(E, Particle, m_TargetMaterial); + File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ; + } + File.close(); + + if(!m_TargetType) + { + G4String Path = GlobalPath + "/Inputs/EnergyLoss/" + Particle->GetParticleName() + "_" + m_WindowsMaterial->GetName() + ".G4table"; + File.open(Path) ; + if(!File) return ; + File << "Table from Geant4 generate using NPSimulation \t " + << "Particle: " << Particle->GetParticleName() << "\tMaterial: " << m_WindowsMaterial->GetName() << endl ; + + for (G4double E=Emin; E < Emax; E+=(Emax-Emin)/10000.) + { +// G4double dedx = emCalculator.ComputeTotalDEDX(E, Particle, m_WindowsMaterial); + G4double dedx = emCalculator.ComputeDEDX( E, Particle , + "ionIoni", m_WindowsMaterial); + File << E/MeV << "\t" << dedx/(MeV/micrometer) << endl ; + } + } + File.close(); + + } diff --git a/NPSimulation/src/ThinSi.cc b/NPSimulation/src/ThinSi.cc index 94a2313adfa6c5e4e6008f8082177da87fb309cd..3af43f06ac2bb0ff45dc5cae53c8bd7b388273dd 100644 --- a/NPSimulation/src/ThinSi.cc +++ b/NPSimulation/src/ThinSi.cc @@ -9,7 +9,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : October 2009 * *---------------------------------------------------------------------------* * Decription: * * This class describe a 20um Silicium detector * @@ -22,7 +22,7 @@ // C++ headers #include <sstream> #include <cmath> - +#include <limits> //G4 Geometry object #include "G4Trd.hh" #include "G4Box.hh" @@ -46,9 +46,9 @@ // NPTool header #include "ThinSi.hh" #include "GeneralScorers.hh" -#include "Must2Scorers.hh" -#include "MUST2Array.hh" +#include "ThinSiScorers.hh" #include "RootOutput.h" +using namespace THINSI; // CLHEP header #include "CLHEP/Random/RandGauss.h" @@ -62,11 +62,17 @@ using namespace CLHEP; // ThinSi Specific Method ThinSi::ThinSi() { - + InitializeMaterial() ; + m_Event = new TSSSDData() ; } ThinSi::~ThinSi() -{} +{ + delete m_MaterialSilicon ; + delete m_MaterialAl ; + delete m_MaterialVacuum ; + +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ThinSi::AddTelescope(G4ThreeVector TL , G4ThreeVector BL , @@ -125,28 +131,6 @@ void ThinSi::VolumeMaker( G4int DetNumber , Number << NbrTelescopes ; DetectorNumber = Number.str() ; -//////////////////////////////////////////////////////////////// -/////////////////Material Definition /////////////////////////// -//////////////////////////////////////////////////////////////// - G4Element* N = new G4Element("Nitrogen" , "N" , 7 , 14.01 * g / mole); - G4Element* O = new G4Element("Oxigen" , "O" , 8 , 16.00 * g / mole); - - G4double a, z, density; - // Si - a = 28.0855 * g / mole; - density = 2.321 * g / cm3; - G4Material* Silicon = new G4Material("Si", z = 14., a, density); - - // Al - density = 2.702 * g / cm3; - a = 26.98 * g / mole; - G4Material* Al = new G4Material("Al", z = 13., a, density); - - // Vacuum - density = 0.000000001 * mg / cm3; - G4Material* Vacuum = new G4Material("Vacuum", density, 2); - Vacuum->AddElement(N, .7); - Vacuum->AddElement(O, .3); //////////////////////////////////////////////////////////////// /////////General Geometry Parameter Definition ///////////////// @@ -162,7 +146,7 @@ void ThinSi::VolumeMaker( G4int DetNumber , G4Box* solidThinSi = new G4Box(Name, 0.5*DetectorSize, 0.5*DetectorSize, 0.5*FrameThickness*mm); G4LogicalVolume* logicThinSi = - new G4LogicalVolume(solidThinSi, Vacuum, Name, 0, 0); + new G4LogicalVolume(solidThinSi, m_MaterialVacuum, Name, 0, 0); PVPBuffer = new G4PVPlacement(G4Transform3D(*Det_rot, Det_pos) , @@ -173,14 +157,14 @@ void ThinSi::VolumeMaker( G4int DetNumber , 0); // Frame is made of 4 thick box (2 Horizontal and 2 Vertical) - G4Box* solidFrameHorizontal = new G4Box(Name + "Frame", 0.5*SiliconSize, 0.5*(DetectorSize - SiliconSize) / 2, 0.5*FrameThickness*mm) ; - G4Box* solidFrameVertical = new G4Box(Name + "Frame", 0.5*(DetectorSize - SiliconSize) / 2, 0.5*DetectorSize, 0.5*FrameThickness*mm) ; + G4Box* solidFrameHorizontal = new G4Box(Name + "_Frame", 0.5*SiliconSize, 0.5*(DetectorSize - SiliconSize) / 2, 0.5*FrameThickness*mm) ; + G4Box* solidFrameVertical = new G4Box(Name + "_Frame", 0.5*(DetectorSize - SiliconSize) / 2, 0.5*DetectorSize, 0.5*FrameThickness*mm) ; G4LogicalVolume* logicFrameHorizontal = - new G4LogicalVolume(solidFrameHorizontal, Al, Name, 0, 0); + new G4LogicalVolume(solidFrameHorizontal, m_MaterialAl, Name, 0, 0); G4LogicalVolume* logicFrameVertical = - new G4LogicalVolume(solidFrameVertical, Al, Name, 0, 0); + new G4LogicalVolume(solidFrameVertical, m_MaterialAl, Name, 0, 0); G4ThreeVector FrameTopPosition = G4ThreeVector(0 , 0.5 * SiliconSize + 0.5 * (DetectorSize - SiliconSize) / 2 , 0) ; G4ThreeVector FrameBottomPosition = G4ThreeVector(0 , -0.5 * SiliconSize - 0.5 * (DetectorSize - SiliconSize) / 2 , 0) ; @@ -192,7 +176,7 @@ void ThinSi::VolumeMaker( G4int DetNumber , new G4PVPlacement(0 , FrameTopPosition , logicFrameHorizontal , - Name + "Frame" , + Name + "_Frame" , logicThinSi , false , 0); @@ -201,7 +185,7 @@ void ThinSi::VolumeMaker( G4int DetNumber , new G4PVPlacement(0 , FrameBottomPosition , logicFrameHorizontal , - Name + "Frame" , + Name + "_Frame" , logicThinSi , false , 0); @@ -210,7 +194,7 @@ void ThinSi::VolumeMaker( G4int DetNumber , new G4PVPlacement(0 , FrameLeftPosition , logicFrameVertical , - Name + "Frame" , + Name + "_Frame" , logicThinSi , false , 0); @@ -219,7 +203,7 @@ void ThinSi::VolumeMaker( G4int DetNumber , new G4PVPlacement(0 , FrameRightPosition , logicFrameVertical , - Name + "Frame" , + Name + "_Frame" , logicThinSi , false , 0); @@ -233,39 +217,26 @@ void ThinSi::VolumeMaker( G4int DetNumber , new G4Box("ThinSiAlu", 0.5*SiliconSize, 0.5*SiliconSize, 0.5*AluThickness) ; G4LogicalVolume* logicAlu = - new G4LogicalVolume(solidAlu, Al, "logicAlu", 0, 0, 0) ; + new G4LogicalVolume(solidAlu, m_MaterialAl, "logicAlu", 0, 0, 0) ; PVPBuffer = - new G4PVPlacement(0 , posAluFront , logicAlu , Name + "AluFront" , logicThinSi , true, 0) ; + new G4PVPlacement(0 , posAluFront , logicAlu , Name + "_AluFront" , logicThinSi , true, 0) ; PVPBuffer = - new G4PVPlacement(0 , posAluBack , logicAlu , Name + "AluBack" , logicThinSi , true, 0) ; + new G4PVPlacement(0 , posAluBack , logicAlu , Name + "_AluBack" , logicThinSi , true, 0) ; G4Box* solidSi = new G4Box("ThinSi", 0.5*SiliconSize, 0.5*SiliconSize, 0.5*SiliconThickness) ; G4LogicalVolume* logicSi = - new G4LogicalVolume(solidSi, Silicon, "logicSi", 0, 0, 0) ; + new G4LogicalVolume(solidSi, m_MaterialSilicon, "logicSi", 0, 0, 0) ; PVPBuffer = - new G4PVPlacement(0, posSi, logicSi, Name + "Si", logicThinSi, true, 0) ; + new G4PVPlacement(0, posSi, logicSi, Name + "_Si", logicThinSi, true, 0) ; - //Set Add. Silicon strip sensible - //instantiate a new scorer - G4MultiFunctionalDetector* ThinSiScorer = new G4MultiFunctionalDetector("ThinSi" + DetectorNumber); //attach it to the Silicon plate - logicSi ->SetSensitiveDetector(ThinSiScorer); - //and declare it to the SDManager - G4SDManager::GetSDMpointer()->AddNewDetector(ThinSiScorer); - - //instantiate primitive scorer - G4VPrimitiveScorer* ThinSiEnergy ; - - //create primitive scorer - ThinSiEnergy = new MUST2::PSStripE("StripEnergy", 0) ; - //and register it to the multifunctionnal detector - ThinSiScorer->RegisterPrimitive(ThinSiEnergy) ; + logicSi ->SetSensitiveDetector(m_StripScorer); } @@ -303,7 +274,7 @@ void ThinSi::ReadConfiguration(string Path) getline(ConfigFile, LineBuffer); - // If line is a Start Up MUST2 bloc, Reading toggle to true + // If line is a Start Up ThinSi bloc, Reading toggle to true if (LineBuffer.compare(0, 6, "ThinSi") == 0) { G4cout << "///" << G4endl ; @@ -322,7 +293,7 @@ void ThinSi::ReadConfiguration(string Path) ConfigFile >> DataBuffer ; // Comment Line - if (DataBuffer.compare(0, 1, "%") == 0) {/*do nothing */;} + if (DataBuffer.compare(0, 1, "%") == 0) { ConfigFile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );} // Finding another telescope (safety), toggle out else if (DataBuffer.compare(0, 6, "ThinSi") == 0) { @@ -583,52 +554,167 @@ void ThinSi::InitializeRootOutput() { RootOutput *pAnalysis = RootOutput::getInstance(); TTree *pTree = pAnalysis->GetTree(); - pTree->Branch("ThinSiEnergy", &m_Energy, "ThinSiEnergy/D") ; + pTree->Branch("ThinSi", "TSSSDData", &m_Event) ; } // Read sensitive part and fill the Root tree. // Called at in the EventAction::EndOfEventAvtion void ThinSi::ReadSensitive(const G4Event* event) { - G4String DetectorNumber ; - m_Energy = 0 ; + m_Event->Clear(); ////////////////////////////////////////////////////////////////////////////////////// //////////////////////// Used to Read Event Map of detector ////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// // Si - std::map<G4int, G4double*>::iterator Energy_itr ; - G4THitsMap<G4double>* EnergyHitMap ; - - - + G4THitsMap<G4int>* DetNbrHitMap ; + G4THitsMap<G4int>* StripNbrHitMap ; + G4THitsMap<G4double>* EnergyHitMap ; + G4THitsMap<G4double>* TimeHitMap ; + + std::map<G4int, G4int*>::iterator DetNbr_itr ; + std::map<G4int, G4int*>::iterator StripNbr_itr ; + std::map<G4int, G4double*>::iterator Energy_itr ; + std::map<G4int, G4double*>::iterator Time_itr ; ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// + // Read the Scorer associate to the Silicon Strip - G4int NumberOfDetector = m_DefinitionType.size() ; - for (G4int i = 0 ; i < NumberOfDetector ; i++) { - G4int k = i + 1; - ostringstream buffer; - buffer << k; - DetectorNumber = buffer.str(); + //DetectorNumber + G4int DetNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThinSi_StripScorer/DetectorNumber") ; + DetNbrHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(DetNbrCollectionID)) ; + DetNbr_itr = DetNbrHitMap->GetMap()->begin() ; + + //StripNumber + G4int StripNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThinSi_StripScorer/StripNumber") ; + StripNbrHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripNbrCollectionID)) ; - // Read the Scorer associate to the Silicon Strip //Energy - G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThinSi" + DetectorNumber + "/StripEnergy") ; - EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; - Energy_itr = EnergyHitMap->GetMap()->begin() ; + G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThinSi_StripScorer/StripEnergy") ; + EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; + + //Time + G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThinSi_StripScorer/StripTime") ; + TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; + + G4int sizeN = DetNbrHitMap ->entries() ; + G4int sizeS = StripNbrHitMap ->entries() ; + G4int sizeE = EnergyHitMap ->entries() ; + G4int sizeT = TimeHitMap ->entries() ; + + // Loop on Det Number + for (G4int l = 0 ; l < sizeN ; l++) + { + G4int N = *(DetNbr_itr->second) ; + G4int NTrackID = DetNbr_itr->first - N ; + + if (N > 0) + { + m_Event->SetEnergyDetectorNbr(N) ; + m_Event->SetTimeDetectorNbr(N) ; + + // Strip Number + StripNbr_itr = StripNbrHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeS ; h++) { + G4int STrackID = StripNbr_itr->first - N ; + G4int S = *(StripNbr_itr->second) ; + + if (STrackID == NTrackID) { + m_Event->SetEnergyStripNbr(S) ; + m_Event->SetTimeStripNbr(S) ; + } + + StripNbr_itr++; + } + + // Energy + Energy_itr = EnergyHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeE ; h++) { + G4int ETrackID = Energy_itr->first - N ; + G4double E = *(Energy_itr->second) ; + + if (ETrackID == NTrackID) { + m_Event->SetEnergy( RandGauss::shoot(E, ResoEnergy ) ) ; + } + + Energy_itr++; + } + + + // Time + Time_itr = TimeHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < sizeT ; h++) { + G4int TTrackID = Time_itr->first - N ; + G4double T = *(Time_itr->second) ; + + if (TTrackID == NTrackID) { + m_Event->SetTime( RandGauss::shoot(T, ResoTime ) ) ; + } + + Time_itr++; + } + + } + + DetNbr_itr++; + } + + // clear map for next event + + DetNbrHitMap ->clear() ; + StripNbrHitMap ->clear() ; + EnergyHitMap ->clear() ; + TimeHitMap ->clear() ; +} - // Loop on Strip energy - for (G4int l = 0 ; l < EnergyHitMap->entries() ; l++) { - //G4int ETrackID = Energy_itr->first ; - G4double E = *(Energy_itr->second) ; - if (E > 0) { - m_Energy = RandGauss::shoot(E, ResoEnergy); - } +void ThinSi::InitializeScorers() + { + + // Silicon Associate Scorer + m_StripScorer = new G4MultiFunctionalDetector("ThinSi_StripScorer"); + + G4VPrimitiveScorer* DetNbr = new GENERALSCORERS::PSDetectorNumber("DetectorNumber","ThinSi_", 0) ; + G4VPrimitiveScorer* StripNbr = new PSStripNumber("StripNumber",0,SiliconSize, NumberOfStrip) ; + G4VPrimitiveScorer* Energy = new GENERALSCORERS::PSEnergy("StripEnergy","ThinSi_", 0) ; + G4VPrimitiveScorer* TOF = new GENERALSCORERS::PSTOF("StripTime","ThinSi_", 0) ; + + + //and register it to the multifunctionnal detector + m_StripScorer->RegisterPrimitive(DetNbr) ; + m_StripScorer->RegisterPrimitive(StripNbr) ; + m_StripScorer->RegisterPrimitive(Energy) ; + m_StripScorer->RegisterPrimitive(TOF) ; + + // Add All Scorer to the Global Scorer Manager + G4SDManager::GetSDMpointer()->AddNewDetector(m_StripScorer) ; + } + +//////////////////////////////////////////////////////////////// +/////////////////Material Definition /////////////////////////// +//////////////////////////////////////////////////////////////// +void ThinSi::InitializeMaterial() + { + + G4Element* N = new G4Element("Nitrogen" , "N" , 7 , 14.01 * g / mole); + G4Element* O = new G4Element("Oxigen" , "O" , 8 , 16.00 * g / mole); + + G4double a, z, density; + // Si + a = 28.0855 * g / mole; + density = 2.321 * g / cm3; + m_MaterialSilicon = new G4Material("Si", z = 14., a, density); + + // Al + density = 2.702 * g / cm3; + a = 26.98 * g / mole; + m_MaterialAl = new G4Material("Al", z = 13., a, density); + + // Vacuum + density = 0.000000001 * mg / cm3; + m_MaterialVacuum = new G4Material("Vacuum", density, 2); + m_MaterialVacuum->AddElement(N, .7); + m_MaterialVacuum->AddElement(O, .3); + } + - } - // clear map for next event - EnergyHitMap ->clear() ; - } -} diff --git a/NPSimulation/src/ThinSiScorers.cc b/NPSimulation/src/ThinSiScorers.cc new file mode 100644 index 0000000000000000000000000000000000000000..53faa61b07698e34d45c0fd94c3e67aab908c55c --- /dev/null +++ b/NPSimulation/src/ThinSiScorers.cc @@ -0,0 +1,100 @@ +/***************************************************************************** + * Copyright (C) 2009 this file is part of the NPTool Project * + * * + * For the licensing terms see $NPTOOL/Licence/NPTool_Licence * + * For the list of contributors see $NPTOOL/Licence/Contributors * + *****************************************************************************/ + +/***************************************************************************** + * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * + * * + * Creation Date : October 2009 * + * Last update : * + *---------------------------------------------------------------------------* + * Decription: * + * File holding the scorer specific to the ThinSi Detector * + * * + *---------------------------------------------------------------------------* + * Comment: * + * Those Scorer use TrackID as map index. This way ones can rebuild energy * + * deposit, time of flight or position,... particle by particle for each * + * event.Because standard scorer provide by G4 don't work this way but using* + * a global ID for each event you should not use those scorer with some G4 * + * provided ones or being very carefull doing so. * + *****************************************************************************/ +#include "ThinSiScorers.hh" +#include "G4UnitsTable.hh" +#include "GeneralScorers.hh" +#include <string> +using namespace THINSI ; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//Strip position Scorer +//X +PSStripNumber::PSStripNumber(G4String name, G4int depth, G4double StripPlaneSize, G4int NumberOfStrip) + : G4VPrimitiveScorer(name, depth), HCID(-1) +{ + m_StripPlaneSize = StripPlaneSize ; + m_NumberOfStrip = NumberOfStrip ; + m_StripPitch = m_StripPlaneSize / m_NumberOfStrip ; +} + +PSStripNumber::~PSStripNumber() +{ + ; +} + +G4bool PSStripNumber::ProcessHits(G4Step* aStep, G4TouchableHistory*) +{ + int DetNbr = GENERALSCORERS::PickUpDetectorNumber(aStep, "ThinSi"); + + G4ThreeVector POS = aStep->GetPreStepPoint()->GetPosition(); + POS = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(POS); + + G4double temp = (POS(0) + m_StripPlaneSize / 2.) / m_StripPitch ; + G4double X = int(temp) + 1 ; + //Rare case where particle is close to edge of silicon plan + if (X == m_NumberOfStrip+1) X = m_NumberOfStrip; + G4double edep = aStep->GetTotalEnergyDeposit(); + if (edep < 100*keV) return FALSE; + G4int index = aStep->GetTrack()->GetTrackID(); + G4int S = X ; + EvtMap->set(index+DetNbr, S); + return TRUE; +} + +void PSStripNumber::Initialize(G4HCofThisEvent* HCE) +{ + EvtMap = new G4THitsMap<G4int>(GetMultiFunctionalDetector()->GetName(), GetName()); + if (HCID < 0) { + HCID = GetCollectionID(0); + } + HCE->AddHitsCollection(HCID, (G4VHitsCollection*)EvtMap); +} + +void PSStripNumber::EndOfEvent(G4HCofThisEvent*) +{ + ; +} + +void PSStripNumber::clear() +{ + EvtMap->clear(); +} + +void PSStripNumber::DrawAll() +{ + ; +} + +void PSStripNumber::PrintAll() +{ + G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl ; + G4cout << " PrimitiveScorer " << GetName() << G4endl ; + G4cout << " Number of entries " << EvtMap->entries() << G4endl ; +} + + + + diff --git a/NPSimulation/src/VEventGenerator.cc b/NPSimulation/src/VEventGenerator.cc index 4c91b86967940865564f815bbfbf5063e8d73556..bf2b8e82b1f30a6be7f2e75b8f067898ca3d2347 100644 --- a/NPSimulation/src/VEventGenerator.cc +++ b/NPSimulation/src/VEventGenerator.cc @@ -9,7 +9,7 @@ * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * * * Creation Date : January 2009 * - * Last update : * + * Last update : 03/11/2009 * *---------------------------------------------------------------------------* * Decription: * * All event generator added in the project should derive from this virtual * @@ -21,45 +21,29 @@ * * *---------------------------------------------------------------------------* * Comment: * + * + 03/11/09: Adding EffectiveThiknessBeforeInteraction in the * + * CalculateBeamInteraction() method (N. de Sereville) * * * *****************************************************************************/ #include "VEventGenerator.hh" -// ROOT headers -#include"TMath.h" +// C++ headers +#include "cmath" + +// G4 headers +#include "G4UnitsTable.hh" // CLHEP headers #include "Randomize.hh" + VEventGenerator::VEventGenerator() - { - } +{ +} + + VEventGenerator::~VEventGenerator() - { - } +{ +} -void VEventGenerator::RandomGaussian2D(double MeanX,double MeanY,double SigmaX,double SigmaY,double &X,double &Y,double NumberOfSigma) - { - - if(SigmaX!=0) - { - X=2* NumberOfSigma *SigmaX; - while(X>NumberOfSigma*SigmaX) - X = RandGauss::shoot( MeanX , SigmaX); - double a = NumberOfSigma * SigmaX/2 ; - double b = NumberOfSigma * SigmaY/2 ; - - double SigmaYPrim = b * sqrt( 1 - X*X / (a*a) ) ; - SigmaYPrim = 2*SigmaYPrim / NumberOfSigma ; - - Y = RandGauss::shoot( MeanY , SigmaYPrim) ; - } - - else - { - X = MeanX ; - Y = RandGauss::shoot( MeanY , SigmaY) ; - } - - } diff --git a/README b/README index 2a19cddc07318972071e65ccfd9687464b50c508..a0cad80d2ede8ac15ab6d25d35f5e14b8aef0e64 100644 --- a/README +++ b/README @@ -62,7 +62,7 @@ IV) Inputs Inputs / CrossSection / DetectorConstruction / EventGenerator - / dEdx + / EnergyLoss V) Outputs This directory contains the ROOT ouput files of the