diff --git a/NPAnalysis/Gaspard/Result/myResult.root b/NPAnalysis/Gaspard/Result/myResult.root index bcb1fdc8205ae855312ab0620ac94bad8e67c3aa..040f6ae05a7b10050c1f4674773a35c8f4b62b8a 100644 Binary files a/NPAnalysis/Gaspard/Result/myResult.root and b/NPAnalysis/Gaspard/Result/myResult.root differ diff --git a/NPAnalysis/Gaspard/root.ps b/NPAnalysis/Gaspard/root.ps index 13a22e9a7abbce9236bcb14865078afa68bab8b5..79ba81bb0b06619d95cb69f587fb3b0ff93f94a4 100644 --- a/NPAnalysis/Gaspard/root.ps +++ b/NPAnalysis/Gaspard/root.ps @@ -1,7 +1,7 @@ %!PS-Adobe-2.0 %%Title: root.ps: figure d'article %%Creator: ROOT Version 5.22/00 -%%CreationDate: Mon Aug 24 16:38:26 2009 +%%CreationDate: Thu Sep 10 19:14:45 2009 %%Orientation: Landscape %%EndComments %%BeginProlog @@ -49,65 +49,46 @@ newpath gsave 90 r 0 -594 t 28 20 t .25 .25 scale gsave %%Page: 1 1 gsave gsave 1 1 Zone - gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2948 1992 0 0 bf black 0.999 0.999 0.999 c 2329 1574 324 219 bf black 2329 1574 324 219 bl 0.999 0.999 0.999 c 2329 1574 324 219 bf black 2329 1574 324 219 bl 1 1 1 c black 324 219 m 3 X 27 Y 7 X - -27 Y 3 X 27 Y 2 X -27 Y 3 X 27 Y 2 X -27 Y 3 X 54 Y 2 X -27 Y 5 X -27 Y 2 X 54 Y 3 X -54 Y 2 X 80 Y 5 X -80 Y 3 X 27 Y 2 X -27 Y 3 X 80 Y 2 X -80 Y 3 X 27 Y 5 X -27 Y 7 X 80 Y 2 X -80 Y 10 X 54 Y 3 X -27 Y 2 X -27 Y 3 X 54 Y 2 X -54 Y 5 X 27 Y 8 X - -27 Y 2 X 27 Y 2 X -27 Y 3 X 27 Y 5 X -27 Y 2 X 54 Y 3 X -54 Y 2 X 27 Y 5 X -27 Y 3 X 27 Y 2 X 27 Y 3 X -54 Y 2 X 27 Y 5 X -27 Y 5 X 27 Y 2 X -27 Y 3 X 27 Y 5 X 27 Y 2 X -54 Y 5 X 27 Y 5 X -27 Y 5 X 27 Y 5 X 27 Y 3 X -54 Y 2 X 54 Y 3 X -27 Y 4 X - -27 Y 3 X 80 Y 2 X -26 Y 3 X 26 Y 2 X -80 Y 5 X 27 Y 3 X -27 Y 7 X 54 Y 3 X -27 Y 2 X -27 Y 3 X 54 Y 2 X -54 Y 2 X 27 Y 3 X -27 Y 2 X 27 Y 5 X -27 Y 13 X 27 Y 7 X 27 Y 3 X -54 Y 2 X 27 Y 3 X 27 Y 2 X -27 Y 2 X -27 Y 8 X 80 Y 2 X -26 Y 3 X 26 Y 5 X - -26 Y 5 X -27 Y 5 X -27 Y 2 X 27 Y 3 X 27 Y 2 X -54 Y 7 X 27 Y 3 X -27 Y 2 X 54 Y 3 X -54 Y 2 X 27 Y 3 X 27 Y 7 X -27 Y 5 X 27 Y 3 X -27 Y 7 X -27 Y 5 X 27 Y 2 X -27 Y 3 X 54 Y 2 X -27 Y 3 X 27 Y 5 X -27 Y 2 X -27 Y 3 X 27 Y 5 X -27 Y 2 X 27 Y 5 X - -27 Y 3 X 27 Y 4 X -27 Y 3 X 27 Y 5 X 27 Y 2 X -27 Y 3 X 27 Y 5 X -54 Y 2 X 54 Y 3 X -27 Y 2 X -27 Y 3 X 27 Y 5 X -27 Y 5 X 54 Y 2 X -54 Y 5 X 27 Y 15 X 27 Y 5 X -27 Y 5 X 27 Y 2 X -27 Y 3 X -27 Y 5 X 27 Y 4 X -27 Y 3 X 80 Y 2 X -80 Y 3 X 27 Y 7 X - -27 Y 3 X 27 Y 2 X -27 Y 5 X 80 Y 3 X -26 Y 5 X -54 Y 7 X 27 Y 10 X 27 Y 2 X -27 Y 3 X 27 Y 5 X -27 Y 2 X 27 Y 3 X -54 Y 2 X 134 Y 3 X -107 Y 2 X 27 Y 3 X -54 Y 2 X 54 Y 3 X -27 Y 4 X -27 Y 5 X 27 Y 3 X 27 Y 2 X 26 Y 5 X -26 Y 3 X -54 Y 2 X 27 Y 3 - X 107 Y 2 X -107 Y 3 X -27 Y 5 X 134 Y 2 X -54 Y 2 X -26 Y 3 X -27 Y 2 X 53 Y 3 X 27 Y 2 X -53 Y 3 X 80 Y 2 X -80 Y 8 X -27 Y 2 X 53 Y 3 X -26 Y 2 X 53 Y 3 X -107 Y 2 X 54 Y 3 X -27 Y 2 X 27 Y 2 X -27 Y 3 X 27 Y 2 X 26 Y 3 X 54 Y 2 X -134 Y 3 X 80 - Y 2 X 27 Y 3 X -80 Y 2 X 80 Y 3 X -27 Y 2 X -80 Y 3 X 107 Y 2 X -27 Y 3 X -53 Y 5 X 53 Y 2 X -53 Y 2 X 107 Y 3 X -107 Y 2 X 27 Y 3 X 26 Y 2 X -53 Y 3 X 27 Y 2 X -27 Y 3 X 27 Y 2 X -54 Y 3 X 27 Y 2 X 27 Y 5 X 53 Y 3 X -53 Y 2 X 53 Y 3 X -27 Y 2 X - -26 Y 2 X -27 Y 3 X 107 Y 2 X -54 Y 3 X -26 Y 5 X -54 Y 2 X 107 Y 3 X -27 Y 2 X -26 Y 3 X 80 Y 2 X -54 Y 3 X 107 Y 2 X -53 Y 3 X 27 Y 2 X -134 Y 2 X 160 Y 3 X -80 Y 2 X -27 Y 3 X 54 Y 2 X -80 Y 8 X 133 Y 2 X -53 Y 3 X -54 Y 2 X 81 Y 3 X -27 Y 5 X - -80 Y 7 X 80 Y 2 X -27 Y 3 X -27 Y 2 X 107 Y 3 X -107 Y 2 X 27 Y 3 X -27 Y 2 X 81 Y 3 X 80 Y 2 X -187 Y 3 X 26 Y 2 X 81 Y 3 X -27 Y 2 X -27 Y 3 X 134 Y 2 X -187 Y 3 X 187 Y 2 X -80 Y 5 X -54 Y 2 X 27 Y 3 X -27 Y 2 X 107 Y 5 X -107 Y 3 X 107 Y 2 X - -27 Y 3 X -26 Y 2 X 53 Y 3 X -134 Y 2 X 134 Y 3 X -80 Y 2 X 80 Y 3 X -27 Y 2 X 27 Y 2 X -53 Y 3 X -107 Y 2 X 26 Y 3 X 161 Y 5 X -107 Y 2 X 27 Y 3 X 80 Y 2 X -54 Y 3 X 54 Y 2 X 27 Y 3 X -54 Y 2 X 161 Y 3 X -81 Y 4 X 27 Y 3 X -294 Y 2 X 134 Y 3 X 26 - Y 2 X 107 Y 3 X 81 Y 2 X -134 Y 3 X 53 Y 5 X -26 Y 2 X 26 Y 3 X -80 Y 2 X -27 Y 3 X 54 Y 2 X -54 Y 3 X 27 Y 2 X 187 Y 2 X -26 Y 3 X -54 Y 2 X -187 Y 3 X 134 Y 5 X 107 Y 2 X -214 Y 3 X 160 Y 2 X -134 Y 3 X 161 Y 2 X -54 Y 3 X 81 Y 5 X -81 Y 2 X 268 - Y 3 X -321 Y 2 X 187 Y 2 X -27 Y 5 X 27 Y 3 X -267 Y 2 X 214 Y 10 X 160 Y 3 X -53 Y 2 X -27 Y 3 X 80 Y 2 X -134 Y 5 X 161 Y 5 X -214 Y 2 X 107 Y 3 X 80 Y 2 X -53 Y 3 X 107 Y 2 X -161 Y 3 X 107 Y 2 X 107 Y 3 X 81 Y 2 X -134 Y 3 X 267 Y 2 X -53 Y 3 X - -107 Y 2 X -80 Y 3 X 80 Y 2 X -321 Y 2 X 374 Y 3 X 188 Y 2 X -27 Y 3 X -241 Y 2 X 401 Y 3 X -294 Y 2 X 375 Y 3 X -161 Y 2 X 295 Y 3 X -188 Y 2 X 27 Y 3 X 27 Y 2 X -54 Y 3 X -187 Y 5 X 401 Y 2 X 188 Y 2 X -295 Y 3 X 295 Y 2 X -429 Y 3 X -80 Y 2 X - 241 Y 3 X -80 Y 2 X -241 Y 3 X 589 Y 2 X -348 Y 3 X -161 Y 2 X 161 Y 3 X -107 Y 2 X -54 Y 3 X -160 Y 5 X 107 Y 4 X -214 Y 3 X 26 Y 2 X 321 Y 3 X -160 Y 2 X -375 Y 3 X 188 Y 2 X -134 Y 3 X -188 Y 2 X 108 Y 3 X 107 Y 2 X -161 Y 3 X 107 Y 2 X 107 Y 3 - X -214 Y 2 X 161 Y 5 X 53 Y 2 X -53 Y 3 X -161 Y 2 X 27 Y 3 X -54 Y 2 X -187 Y 3 X 187 Y 2 X -27 Y 3 X -133 Y 2 X 133 Y 3 X 54 Y 2 X -80 Y 3 X -107 Y 2 X -54 Y 3 X 80 Y 2 X 134 Y 2 X -187 Y 3 X 107 Y 2 X 27 Y 3 X -161 Y 2 X 268 Y 3 X -295 Y 2 X 107 - Y 5 X -107 Y 3 X 54 Y 2 X 80 Y 3 X -134 Y 2 X 107 Y 3 X -53 Y 2 X -107 Y 3 X 80 Y 2 X -134 Y 2 X 161 Y 3 X -80 Y 2 X 53 Y 3 X -27 Y 2 X -53 Y 3 X -80 Y 2 X 160 Y 3 X -53 Y 2 X -27 Y 3 X 187 Y 2 X -134 Y 3 X -26 Y 5 X 26 Y 2 X -53 Y 3 X -27 Y 2 X - 161 Y 2 X -107 Y 3 X 53 Y 2 X -53 Y 5 X 133 Y 5 X -133 Y 3 X 26 Y 5 X 27 Y 2 X -80 Y 8 X -54 Y 2 X 107 Y 3 X 134 Y 2 X -80 Y 2 X -27 Y 5 X -53 Y 3 X -54 Y 5 X 134 Y 2 X -134 Y 5 X 54 Y 3 X -81 Y 2 X 27 Y 3 X 27 Y 2 X 27 Y 3 X -54 Y 2 X -27 Y 2 X - -80 Y 3 X 107 Y 2 X -27 Y 3 X 81 Y 2 X -54 Y 3 X -27 Y 2 X 27 Y 3 X -53 Y 5 X 80 Y 2 X -54 Y 3 X -53 Y 2 X 187 Y 3 X -107 Y 7 X -53 Y 2 X 26 Y 3 X 27 Y 2 X -107 Y 5 X 54 Y 3 X 133 Y 2 X -80 Y 3 X -53 Y 7 X 80 Y 3 X 27 Y 2 X -107 Y 3 X -27 Y 7 X 53 - Y 2 X 27 Y 3 X -80 Y 2 X 80 Y 3 X -80 Y 2 X 80 Y 8 X 80 Y 2 X -160 Y 3 X 27 Y 2 X 80 Y 3 X -27 Y 2 X -53 Y 3 X 53 Y 5 X -53 Y 7 X 53 Y 2 X -53 Y 3 X 107 Y 2 X -134 Y 3 X 53 Y 2 X -26 Y 3 X 26 Y 2 X 81 Y 3 X -107 Y 2 X -27 Y 3 X 80 Y 2 X -27 Y 3 X - 27 Y 2 X -53 Y 2 X -27 Y 3 X 27 Y 2 X -27 Y 3 X 53 Y 2 X -53 Y 3 X 27 Y 2 X -27 Y 3 X -27 Y 2 X 54 Y 3 X 53 Y 12 X -80 Y 3 X 27 Y 2 X 26 Y 2 X 27 Y 3 X -53 Y 2 X 80 Y 3 X -107 Y 2 X -27 Y 3 X 54 Y 10 X 80 Y 2 X -107 Y 5 X -27 Y 3 X 80 Y 2 X -26 Y 5 - X -27 Y 2 X 53 Y 3 X -53 Y 2 X 27 Y 3 X 53 Y 2 X -27 Y 5 X 27 Y 3 X -107 Y 2 X 27 Y 5 X 53 Y 3 X -26 Y 5 X -54 Y 2 X 54 Y 3 X -27 Y 2 X 107 Y 2 X -54 Y 3 X -53 Y 5 X 27 Y 7 X 80 Y 3 X -54 Y 2 X 54 Y 3 X -107 Y 5 X 53 Y 5 X -26 Y 2 X -54 Y 2 X 54 Y - 3 X 53 Y 2 X -80 Y 3 X 27 Y 2 X -54 Y 3 X 54 Y 2 X -27 Y 3 X 107 Y 2 X -107 Y 5 X 134 Y 3 X -134 Y 5 X 27 Y 2 X -54 Y 3 X 214 Y 2 X -160 Y 2 X 133 Y 3 X -160 Y 2 X 80 Y 3 X -80 Y 2 X 27 Y 3 X 26 Y 5 X -53 Y 7 X 53 Y 3 X -53 Y 2 X 27 Y 3 X -27 Y 2 X - -27 Y 3 X 107 Y 2 X -53 Y 2 X 26 Y 3 X -53 Y 2 X 27 Y 5 X 26 Y 3 X -80 Y 2 X 80 Y 3 X -53 Y 2 X -27 Y 8 X 27 Y 2 X 53 Y 3 X -26 Y 2 X 26 Y 3 X -80 Y 2 X 80 Y 2 X -26 Y 3 X -54 Y 2 X 27 Y 3 X 107 Y 2 X -107 Y 3 X 27 Y 2 X 26 Y 3 X -53 Y 2 X 80 Y 3 X - -53 Y 2 X -54 Y 8 X 27 Y 4 X 27 Y 5 X 26 Y 3 X -53 Y 5 X -27 Y 2 X 54 Y 3 X -54 Y 2 X 27 Y 3 X 80 Y 2 X -27 Y 3 X -53 Y 2 X 53 Y 3 X -26 Y 5 X -27 Y 4 X -27 Y 5 X 80 Y 3 X -26 Y 2 X -27 Y 5 X 107 Y 3 X -107 Y 5 X 53 Y 5 X -53 Y 2 X 53 Y 3 X -26 Y 5 - X -54 Y 2 X 27 Y 5 X 53 Y 5 X 54 Y 2 X -134 Y 3 X 27 Y 2 X 80 Y 3 X -80 Y 5 X -27 Y 2 X 80 Y 3 X -80 Y 5 X 27 Y 2 X 27 Y 3 X -27 Y 2 X 27 Y 2 X 26 Y 3 X -26 Y 2 X -54 Y 3 X 54 Y 2 X -54 Y 3 X 54 Y 5 X -27 Y 5 X 134 Y 2 X -134 Y 3 X 27 Y 2 X -54 Y 3 - X 27 Y 2 X 27 Y 2 X 26 Y 3 X -80 Y 5 X 54 Y 7 X -54 Y 3 X 27 Y 2 X 27 Y 5 X 26 Y 3 X 27 Y 2 X -80 Y 3 X -27 Y 2 X 27 Y 3 X 27 Y 2 X -54 Y 2 X 54 Y 3 X 26 Y 2 X -53 Y 3 X -27 Y 2 X 54 Y 3 X -27 Y 2 X 27 Y 3 X -54 Y 2 X 54 Y 10 X -27 Y 3 X 53 Y 2 X - -26 Y 3 X -27 Y 4 X 27 Y 3 X 26 Y 2 X -26 Y 3 X -27 Y 2 X 27 Y 3 X -54 Y 2 X 54 Y 3 X -54 Y 5 X 107 Y 2 X -107 Y 8 X 27 Y 2 X -27 Y 3 X 80 Y 2 X -26 Y 2 X -27 Y 3 X 27 Y 2 X -27 Y 3 X 53 Y 2 X -53 Y 3 X 53 Y 2 X -53 Y 5 X -27 Y 3 X 80 Y 2 X -80 Y 3 - X 27 Y 10 X 27 Y 2 X -54 Y 2 X 107 Y 3 X -27 Y 2 X -26 Y 3 X -27 Y 5 X 53 Y 2 X -80 Y 3 X 54 Y 2 X -54 Y 3 X 54 Y 2 X -54 Y 5 X 27 Y 3 X -27 Y 4 X 54 Y 3 X -27 Y 2 X -27 Y 3 X 54 Y 2 X -54 Y 3 X 27 Y 2 X 27 Y 3 X -27 Y 2 X -27 Y 3 X 107 Y 2 X -80 Y - 3 X -27 Y 7 X 27 Y 5 X 27 Y 2 X -54 Y 5 X 54 Y 3 X -27 Y 2 X -27 Y 3 X 27 Y 5 X -27 Y 2 X s 324 219 m 2329 X s 470 266 m -47 Y s 519 243 m -24 Y s 569 243 m -24 Y s 618 243 m -24 Y s 668 243 m -24 Y s 717 266 m -47 Y s 766 243 m -24 Y s 816 243 m - -24 Y s 865 243 m -24 Y s 915 243 m -24 Y s 964 266 m -47 Y s 1013 243 m -24 Y s 1063 243 m -24 Y s 1112 243 m -24 Y s 1162 243 m -24 Y s 1211 266 m -47 Y s 1260 243 m -24 Y s 1310 243 m -24 Y s 1359 243 m -24 Y s 1408 243 m -24 Y s 1458 266 m -47 - Y s 1507 243 m -24 Y s 1557 243 m -24 Y s 1606 243 m -24 Y s 1655 243 m -24 Y s 1705 266 m -47 Y s 1754 243 m -24 Y s 1804 243 m -24 Y s 1853 243 m -24 Y s 1902 243 m -24 Y s 1952 266 m -47 Y s 2001 243 m -24 Y s 2051 243 m -24 Y s 2100 243 m -24 Y - s 2149 243 m -24 Y s 2199 266 m -47 Y s 2248 243 m -24 Y s 2298 243 m -24 Y s 2347 243 m -24 Y s 2396 243 m -24 Y s 2446 266 m -47 Y s 470 266 m -47 Y s 421 243 m -24 Y s 371 243 m -24 Y s 2446 266 m -47 Y s 2495 243 m -24 Y s 2545 243 m -24 Y s - 2594 243 m -24 Y s 2643 243 m -24 Y s - gsave 2948 1992 0 0 C 447 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (0) show NC gr - gsave 2948 1992 0 0 C 662 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (0.5) show NC gr - gsave 2948 1992 0 0 C 943 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (1) show NC gr - gsave 2948 1992 0 0 C 1158 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (1.5) show NC gr - gsave 2948 1992 0 0 C 1435 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (2) show NC gr - gsave 2948 1992 0 0 C 1649 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (2.5) show NC gr - gsave 2948 1992 0 0 C 1926 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (3) show NC gr - gsave 2948 1992 0 0 C 2145 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (3.5) show NC gr - gsave 2948 1992 0 0 C 2422 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (4) show NC gr 324 1793 m 2329 X s 470 1745 m 48 Y s 519 1769 m 24 Y s 569 1769 m 24 Y s 618 1769 m 24 Y s 668 1769 m 24 Y s 717 1745 m 48 Y s 766 1769 m 24 Y s 816 - 1769 m 24 Y s 865 1769 m 24 Y s 915 1769 m 24 Y s 964 1745 m 48 Y s 1013 1769 m 24 Y s 1063 1769 m 24 Y s 1112 1769 m 24 Y s 1162 1769 m 24 Y s 1211 1745 m 48 Y s 1260 1769 m 24 Y s 1310 1769 m 24 Y s 1359 1769 m 24 Y s 1408 1769 m 24 Y s 1458 1745 - m 48 Y s 1507 1769 m 24 Y s 1557 1769 m 24 Y s 1606 1769 m 24 Y s 1655 1769 m 24 Y s 1705 1745 m 48 Y s 1754 1769 m 24 Y s 1804 1769 m 24 Y s 1853 1769 m 24 Y s 1902 1769 m 24 Y s 1952 1745 m 48 Y s 2001 1769 m 24 Y s 2051 1769 m 24 Y s 2100 1769 m - 24 Y s 2149 1769 m 24 Y s 2199 1745 m 48 Y s 2248 1769 m 24 Y s 2298 1769 m 24 Y s 2347 1769 m 24 Y s 2396 1769 m 24 Y s 2446 1745 m 48 Y s 470 1745 m 48 Y s 421 1769 m 24 Y s 371 1769 m 24 Y s 2446 1745 m 48 Y s 2495 1769 m 24 Y s 2545 1769 m 24 Y - s 2594 1769 m 24 Y s 2643 1769 m 24 Y s 324 219 m 1574 Y s 394 219 m -70 X s 359 273 m -35 X s 359 326 m -35 X s 359 380 m -35 X s 359 433 m -35 X s 394 487 m -70 X s 359 540 m -35 X s 359 594 m -35 X s 359 647 m -35 X s 359 701 m -35 X s 394 754 m - -70 X s 359 808 m -35 X s 359 861 m -35 X s 359 915 m -35 X s 359 968 m -35 X s 394 1022 m -70 X s 359 1075 m -35 X s 359 1129 m -35 X s 359 1182 m -35 X s 359 1236 m -35 X s 394 1289 m -70 X s 359 1343 m -35 X s 359 1396 m -35 X s 359 1450 m -35 X - s 359 1504 m -35 X s 394 1557 m -70 X s 394 1557 m -70 X s 359 1611 m -35 X s 359 1664 m -35 X s 359 1718 m -35 X s 359 1771 m -35 X s + gsave 0 0 t black[ ] 0 sd 3 lw 0.999 0.999 0.999 c 2948 1992 0 0 bf black 0.999 0.999 0.999 c 2329 1574 324 219 bf black 2329 1574 324 219 bl 0.999 0.999 0.999 c 2329 1574 324 219 bf black 2329 1574 324 219 bl 1 1 1 c black 324 255 m 6 X 18 Y 5 X + -18 Y 6 X -18 Y 17 X -18 Y 5 X 36 Y 6 X -36 Y 6 X 36 Y 11 X -18 Y 11 X -18 Y 11 X 18 Y 17 X 36 Y 5 X -36 Y 23 X -18 Y 5 X 18 Y 6 X 36 Y 5 X -54 Y 6 X 36 Y 6 X -18 Y 5 X 18 Y 6 X -18 Y 17 X 18 Y 11 X -18 Y 11 X 53 Y 6 X -53 Y 5 X 18 Y 6 X -18 Y 11 X + 18 Y 11 X 18 Y 6 X 35 Y 5 X -18 Y 6 X -53 Y 5 X 18 Y 12 X 35 Y 5 X -53 Y 6 X -18 Y 5 X 107 Y 6 X -18 Y 5 X -53 Y 12 X 89 Y 5 X -89 Y 17 X -36 Y 6 X 89 Y 5 X -89 Y 6 X 71 Y 5 X -17 Y 6 X 17 Y 5 X 36 Y 6 X -18 Y 6 X 18 Y 5 X -53 Y 6 X 53 Y 5 X -36 Y + 6 X -53 Y 6 X 107 Y 5 X -89 Y 6 X -18 Y 5 X 36 Y 6 X -36 Y 5 X 71 Y 6 X -35 Y 6 X 71 Y 5 X 53 Y 6 X -53 Y 5 X -71 Y 6 X 53 Y 6 X -36 Y 5 X -17 Y 6 X -18 Y 5 X 125 Y 6 X -90 Y 6 X -17 Y 5 X 71 Y 6 X -89 Y 5 X 18 Y 6 X 17 Y 5 X 36 Y 6 X 36 Y 6 X -36 + Y 11 X 36 Y 5 X -125 Y 6 X 53 Y 6 X -35 Y 5 X 160 Y 6 X -160 Y 5 X 125 Y 6 X -72 Y 5 X -53 Y 6 X 35 Y 6 X 54 Y 5 X -54 Y 6 X 107 Y 5 X -124 Y 6 X 35 Y 6 X 54 Y 5 X -36 Y 6 X 18 Y 5 X 36 Y 6 X -90 Y 5 X -35 Y 6 X 53 Y 6 X -35 Y 5 X 35 Y 6 X 72 Y 5 X + -90 Y 6 X 54 Y 6 X -18 Y 5 X 18 Y 6 X -54 Y 5 X 36 Y 6 X 54 Y 6 X -107 Y 5 X 124 Y 6 X 18 Y 5 X -107 Y 6 X 54 Y 5 X -18 Y 6 X 36 Y 6 X 17 Y 11 X 72 Y 5 X -72 Y 6 X -107 Y 6 X 72 Y 5 X 53 Y 6 X 54 Y 5 X -89 Y 6 X -54 Y 5 X 71 Y 6 X -35 Y 6 X -54 Y 5 + X 18 Y 6 X 36 Y 5 X 143 Y 6 X 35 Y 6 X -89 Y 5 X -89 Y 6 X 53 Y 5 X 36 Y 6 X -54 Y 5 X 18 Y 6 X 143 Y 6 X -125 Y 5 X 18 Y 6 X 54 Y 5 X 53 Y 6 X 18 Y 6 X -89 Y 11 X 107 Y 5 X -36 Y 6 X -36 Y 5 X 72 Y 12 X 18 Y 5 X 71 Y 6 X -107 Y 5 X 214 Y 6 X -54 Y + 6 X -17 Y 5 X -36 Y 6 X -107 Y 5 X 232 Y 6 X -54 Y 6 X 107 Y 5 X -89 Y 6 X 214 Y 5 X -160 Y 6 X -72 Y 5 X 18 Y 6 X 232 Y 6 X 161 Y 5 X -179 Y 6 X 250 Y 5 X -71 Y 6 X -179 Y 6 X 143 Y 5 X 285 Y 6 X 36 Y 5 X -125 Y 6 X 357 Y 5 X -286 Y 6 X 215 Y 6 X + -286 Y 11 X 179 Y 5 X -143 Y 6 X -72 Y 6 X 250 Y 5 X -35 Y 6 X -72 Y 5 X 286 Y 6 X -90 Y 5 X -142 Y 12 X -304 Y 5 X 125 Y 6 X 107 Y 11 X -285 Y 6 X 196 Y 5 X -125 Y 6 X -53 Y 5 X -72 Y 6 X -160 Y 5 X 285 Y 6 X -410 Y 6 X 53 Y 5 X -124 Y 6 X 214 Y 5 + X -18 Y 6 X -36 Y 6 X -125 Y 5 X -160 Y 6 X 71 Y 5 X -18 Y 6 X 143 Y 6 X -143 Y 5 X -18 Y 6 X 36 Y 5 X -125 Y 6 X -18 Y 5 X 107 Y 6 X -71 Y 6 X 18 Y 5 X -18 Y 11 X 54 Y 6 X -107 Y 11 X -72 Y 6 X -36 Y 5 X 108 Y 6 X -36 Y 5 X 18 Y 6 X -18 Y 6 X 53 Y + 5 X -125 Y 11 X 54 Y 6 X 18 Y 6 X 18 Y 5 X -125 Y 6 X -18 Y 11 X -36 Y 5 X -18 Y 6 X 90 Y 11 X -18 Y 6 X 35 Y 5 X -17 Y 6 X -72 Y 6 X 54 Y 5 X 71 Y 6 X -53 Y 5 X -18 Y 6 X -18 Y 11 X -54 Y 6 X 54 Y 5 X -18 Y 6 X -36 Y 5 X -17 Y 12 X -18 Y 5 X 71 Y + 6 X -36 Y 5 X 18 Y 6 X 89 Y 6 X -107 Y 16 X 18 Y 6 X -53 Y 5 X 35 Y 12 X -53 Y 5 X 71 Y 6 X 18 Y 5 X -18 Y 6 X -18 Y 6 X 72 Y 5 X 18 Y 6 X -143 Y 5 X 89 Y 6 X -18 Y 5 X -53 Y 6 X 35 Y 6 X -17 Y 5 X -18 Y 6 X 35 Y 5 X -17 Y 6 X 53 Y 6 X -36 Y 5 X + -17 Y 6 X -54 Y 5 X 71 Y 6 X -17 Y 17 X -18 Y 5 X 35 Y 6 X 90 Y 5 X -125 Y 6 X 35 Y 6 X -35 Y 5 X 35 Y 6 X -17 Y 5 X -18 Y 6 X 53 Y 6 X -18 Y 5 X -35 Y 11 X 35 Y 6 X -53 Y 11 X 18 Y 6 X 35 Y 5 X -17 Y 6 X 17 Y 5 X 36 Y 17 X -53 Y 6 X -36 Y 5 X 53 Y + 6 X -17 Y 22 X 35 Y 6 X 54 Y 5 X -89 Y 12 X -18 Y 5 X 18 Y 6 X 53 Y 5 X -36 Y 6 X -17 Y 5 X 53 Y 17 X -89 Y 11 X 18 Y 12 X 89 Y 5 X -89 Y 6 X 18 Y 5 X -18 Y 6 X -18 Y 5 X 53 Y 6 X -53 Y 6 X 36 Y 5 X -36 Y 6 X 18 Y 5 X 18 Y 6 X -18 Y 6 X 53 Y 5 X + -18 Y 6 X -35 Y 11 X 35 Y 6 X -53 Y 5 X 53 Y 6 X -35 Y 11 X -18 Y 11 X -18 Y 6 X 54 Y 11 X -36 Y 5 X 36 Y 12 X -36 Y 11 X 36 Y 5 X -54 Y 6 X 71 Y 5 X -35 Y 6 X 18 Y 6 X 17 Y 5 X -53 Y 6 X 71 Y 5 X -71 Y 12 X 18 Y 5 X 18 Y 6 X -36 Y 5 X 89 Y 6 X -89 + Y 5 X 18 Y 6 X 18 Y 11 X s 324 219 m 2329 X s 369 266 m -47 Y s 481 243 m -24 Y s 592 243 m -24 Y s 704 243 m -24 Y s 816 243 m -24 Y s 927 266 m -47 Y s 1039 243 m -24 Y s 1151 243 m -24 Y s 1263 243 m -24 Y s 1374 243 m -24 Y s 1486 266 m -47 Y s + 1598 243 m -24 Y s 1709 243 m -24 Y s 1821 243 m -24 Y s 1933 243 m -24 Y s 2044 266 m -47 Y s 2156 243 m -24 Y s 2268 243 m -24 Y s 2380 243 m -24 Y s 2491 243 m -24 Y s 2603 266 m -47 Y s 369 266 m -47 Y s 2603 266 m -47 Y s + gsave 2948 1992 0 0 C 351 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (1) show NC gr + gsave 2948 1992 0 0 C 873 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (1.5) show NC gr + gsave 2948 1992 0 0 C 1461 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (2) show NC gr + gsave 2948 1992 0 0 C 1992 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (2.5) show NC gr + gsave 2948 1992 0 0 C 2580 149 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (3) show NC gr 324 1793 m 2329 X s 369 1745 m 48 Y s 481 1769 m 24 Y s 592 1769 m 24 Y s 704 1769 m 24 Y s 816 1769 m 24 Y s 927 1745 m 48 Y s 1039 1769 m 24 Y s 1151 + 1769 m 24 Y s 1263 1769 m 24 Y s 1374 1769 m 24 Y s 1486 1745 m 48 Y s 1598 1769 m 24 Y s 1709 1769 m 24 Y s 1821 1769 m 24 Y s 1933 1769 m 24 Y s 2044 1745 m 48 Y s 2156 1769 m 24 Y s 2268 1769 m 24 Y s 2380 1769 m 24 Y s 2491 1769 m 24 Y s 2603 + 1745 m 48 Y s 369 1745 m 48 Y s 2603 1745 m 48 Y s 324 219 m 1574 Y s 394 219 m -70 X s 359 255 m -35 X s 359 290 m -35 X s 359 326 m -35 X s 359 362 m -35 X s 394 397 m -70 X s 359 433 m -35 X s 359 469 m -35 X s 359 505 m -35 X s 359 540 m -35 X + s 394 576 m -70 X s 359 612 m -35 X s 359 647 m -35 X s 359 683 m -35 X s 359 719 m -35 X s 394 754 m -70 X s 359 790 m -35 X s 359 826 m -35 X s 359 861 m -35 X s 359 897 m -35 X s 394 933 m -70 X s 359 968 m -35 X s 359 1004 m -35 X s 359 1040 m + -35 X s 359 1075 m -35 X s 394 1111 m -70 X s 359 1147 m -35 X s 359 1182 m -35 X s 359 1218 m -35 X s 359 1254 m -35 X s 394 1289 m -70 X s 359 1325 m -35 X s 359 1361 m -35 X s 359 1396 m -35 X s 359 1432 m -35 X s 394 1468 m -70 X s 359 1504 m + -35 X s 359 1539 m -35 X s 359 1575 m -35 X s 359 1611 m -35 X s 394 1646 m -70 X s 394 1646 m -70 X s 359 1682 m -35 X s 359 1718 m -35 X s 359 1753 m -35 X s 359 1789 m -35 X s gsave 2948 1992 0 0 C 268 189 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (0) show NC gr - gsave 2948 1992 0 0 C 224 456 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (10) show NC gr - gsave 2948 1992 0 0 C 224 724 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (20) show NC gr - gsave 2948 1992 0 0 C 224 991 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (30) show NC gr - gsave 2948 1992 0 0 C 224 1259 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (40) show NC gr - gsave 2948 1992 0 0 C 224 1527 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (50) show NC gr 2653 219 m 1574 Y s 2583 219 m 70 X s 2618 273 m 35 X s 2618 326 m 35 X s 2618 380 m 35 X s 2618 433 m 35 X s 2583 487 m 70 X s 2618 540 m 35 X s 2618 - 594 m 35 X s 2618 647 m 35 X s 2618 701 m 35 X s 2583 754 m 70 X s 2618 808 m 35 X s 2618 861 m 35 X s 2618 915 m 35 X s 2618 968 m 35 X s 2583 1022 m 70 X s 2618 1075 m 35 X s 2618 1129 m 35 X s 2618 1182 m 35 X s 2618 1236 m 35 X s 2583 1289 m 70 - X s 2618 1343 m 35 X s 2618 1396 m 35 X s 2618 1450 m 35 X s 2618 1504 m 35 X s 2583 1557 m 70 X s 2583 1557 m 70 X s 2618 1611 m 35 X s 2618 1664 m 35 X s 2618 1718 m 35 X s 2618 1771 m 35 X s 0.999 0.999 0.999 c 432 111 29 1871 bf black 43 1871 m - -9 Y 427 X 107 Y -9 X -98 Y f 29 1871 m 111 Y 432 X -111 Y -432 X cl s 1 1 1 c black + gsave 2948 1992 0 0 C 224 369 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (10) show NC gr + gsave 2948 1992 0 0 C 224 548 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (20) show NC gr + gsave 2948 1992 0 0 C 224 724 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (30) show NC gr + gsave 2948 1992 0 0 C 224 904 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (40) show NC gr + gsave 2948 1992 0 0 C 224 1084 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (50) show NC gr + gsave 2948 1992 0 0 C 224 1259 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (60) show NC gr + gsave 2948 1992 0 0 C 224 1439 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (70) show NC gr + gsave 2948 1992 0 0 C 224 1619 t 0 r /Helvetica-Bold findfont 74.5782 sf 0 0 m (80) show NC gr 2653 219 m 1574 Y s 2583 219 m 70 X s 2618 255 m 35 X s 2618 290 m 35 X s 2618 326 m 35 X s 2618 362 m 35 X s 2583 397 m 70 X s 2618 433 m 35 X s 2618 + 469 m 35 X s 2618 505 m 35 X s 2618 540 m 35 X s 2583 576 m 70 X s 2618 612 m 35 X s 2618 647 m 35 X s 2618 683 m 35 X s 2618 719 m 35 X s 2583 754 m 70 X s 2618 790 m 35 X s 2618 826 m 35 X s 2618 861 m 35 X s 2618 897 m 35 X s 2583 933 m 70 X s + 2618 968 m 35 X s 2618 1004 m 35 X s 2618 1040 m 35 X s 2618 1075 m 35 X s 2583 1111 m 70 X s 2618 1147 m 35 X s 2618 1182 m 35 X s 2618 1218 m 35 X s 2618 1254 m 35 X s 2583 1289 m 70 X s 2618 1325 m 35 X s 2618 1361 m 35 X s 2618 1396 m 35 X s + 2618 1432 m 35 X s 2583 1468 m 70 X s 2618 1504 m 35 X s 2618 1539 m 35 X s 2618 1575 m 35 X s 2618 1611 m 35 X s 2583 1646 m 70 X s 2583 1646 m 70 X s 2618 1682 m 35 X s 2618 1718 m 35 X s 2618 1753 m 35 X s 2618 1789 m 35 X s 0.999 0.999 0.999 c + 432 111 29 1871 bf black 43 1871 m -9 Y 427 X 107 Y -9 X -98 Y f 29 1871 m 111 Y 432 X -111 Y -432 X cl s 1 1 1 c black gsave 2948 1992 0 0 C 61 1904 t 0 r /Helvetica-Bold findfont 87.739 sf 0 0 m (E* \(MeV\)) show NC gr gr showpage gr diff --git a/NPAnalysis/Gaspard/src/Analysis.cc b/NPAnalysis/Gaspard/src/Analysis.cc index a630f64eee8b20b78548630fe9872c9d445c5c57..a1ad0575239021cad3339f443675fc41da450421 100644 --- a/NPAnalysis/Gaspard/src/Analysis.cc +++ b/NPAnalysis/Gaspard/src/Analysis.cc @@ -40,11 +40,7 @@ int main(int argc,char** argv) { // A Usefull Random Generator TRandom rand; -/* - gROOT->Reset(); - gStyle->SetOptStat(1); - gStyle->SetPalette(1); -*/ + // Get arguments from command line if (argc != 4) { cout << @@ -75,20 +71,19 @@ int main(int argc,char** argv) /////////////////////// Load ROOT file /////////////////////////////// ////////////////////////////////////////////////////////////////////// // Open output ROOT file from NPTool simulation run -/* string path = getenv("NPTOOL"); - path += "/Outputs/"; - if (!rootfileName.Contains("root")) inFileName += ".root"; - TFile *inFile = new TFile(path + inFileName); - TTree *tree = (TTree*) inFile->Get("EventTree"); -*/ - TChain* t1 = new TChain("SimulatedTree"); - t1->Add("../../Outputs/Simulation/mySimul.root"); + string path = getenv("NPTOOL"); + path += "/Outputs/Simulation/" + rootfileName; + TFile *inFile = new TFile(path.c_str()); + TTree *tree = (TTree*) inFile->Get("SimulatedTree"); + +// TChain* t1 = new TChain("SimulatedTree"); +// t1->Add("../../Outputs/Simulation/mySimul.root"); TGaspardTrackerData* EventGPD = new TGaspardTrackerData(); - t1->SetBranchAddress("GASPARD",&EventGPD); + tree->SetBranchAddress("GASPARD",&EventGPD); TInteractionCoordinates* InterCoord = new TInteractionCoordinates(); - t1->SetBranchAddress("InteractionCoordinates",&InterCoord); + tree->SetBranchAddress("InteractionCoordinates",&InterCoord); TInitialConditions* InitCond = new TInitialConditions(); - t1->SetBranchAddress("InitialConditions",&InitCond); + tree->SetBranchAddress("InitialConditions",&InitCond); ////////////////////////////////////////////////////////////////////// /////////////////////// Load ROOT file /////////////////////////////// @@ -100,12 +95,12 @@ int main(int argc,char** argv) } //////////////// Analyse Part //////////////////////////////////////// - Int_t nentries = (Int_t) t1->GetEntries(); + Int_t nentries = (Int_t) tree->GetEntries(); cout << "There are " << nentries << " entries to process" << endl; for (Int_t e = 0; e < nentries; e++) { check_light =false ; - if ((e+1)%10000==0) cout << "Entries number " << e+1 << " on " << t1->GetEntries() << endl ; - t1->GetEntry(e); + if ((e+1)%10000==0) cout << "Entries number " << e+1 << " on " << tree->GetEntries() << endl ; + tree->GetEntry(e); // first check that there is an event detected if (EventGPD->GetGPDTrkFirstStageFrontEMult() > 0) { @@ -122,7 +117,7 @@ int main(int argc,char** argv) Int_t detecXT = EventGPD->GetGPDTrkFirstStageFrontTDetectorNbr(0) / det_ref; Int_t detecYE = EventGPD->GetGPDTrkFirstStageBackEDetectorNbr(0) / det_ref; Int_t detecYT = EventGPD->GetGPDTrkFirstStageBackTDetectorNbr(0) / det_ref; - det_ref -= 1000; // for TGaspardTrackerDummyShape +// det_ref -= 1000; // for TGaspardTrackerDummyShape // case of same detector if (detecXE*detecXT*detecYE*detecYT == 1) { // calculate strip number diff --git a/NPLib/GASPARD/GaspardTracker.cxx b/NPLib/GASPARD/GaspardTracker.cxx index 22ab84927702703e8bac27d13090125adaae13f6..86af36f63a08a8dea5102732dfedc14d3cd018f1 100644 --- a/NPLib/GASPARD/GaspardTracker.cxx +++ b/NPLib/GASPARD/GaspardTracker.cxx @@ -9,7 +9,7 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 31/08/09 * - * Last update : * + * Last update : 10/09/09 * *---------------------------------------------------------------------------* * Decription: This class is mainly an interface to the * * TGaspardTrackerPhysics class and it deals with the geometrical* @@ -17,24 +17,26 @@ * (X, Y, Z) of interaction. * *---------------------------------------------------------------------------* * Comment: * + * + 10/09/09: Add support for Square and DummyShape shapes * + * (N. de Sereville) * * * * * *****************************************************************************/ #include "GaspardTracker.h" -// STL -#include <cmath> +// C++ headers #include <iostream> #include <fstream> #include <string> +#include <cmath> #include <stdlib.h> -// NPL +// NPL headers #include "RootInput.h" #include "RootOutput.h" -// Root +// ROOT headers #include "TChain.h" using namespace std ; @@ -43,24 +45,23 @@ using namespace std ; GaspardTracker::GaspardTracker() { - NumberOfTelescope = 0; - EventData = new TGaspardTrackerData(); - EventPhysics = new TGaspardTrackerPhysics(); + m_NumberOfModule = 0; + m_EventData = new TGaspardTrackerData(); + m_EventPhysics = new TGaspardTrackerPhysics(); } GaspardTracker::~GaspardTracker() { - NumberOfTelescope = 0; - delete EventData; - delete EventPhysics; + m_NumberOfModule = 0; + delete m_EventData; + delete m_EventPhysics; } - - -//// Innherited from VDetector Class //// - -// Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token + + + +// Read stream at ConfigFile to pick-up parameters of detector (Position,...) using Token void GaspardTracker::ReadConfiguration(string Path) { ifstream ConfigFile ; @@ -73,502 +74,813 @@ void GaspardTracker::ReadConfiguration(string Path) // 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 ; + 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_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 check_Theta = false; + bool check_Phi = false; + bool check_R = false; + bool check_beta = false; - bool ReadingStatus = false ; - + bool ReadingStatus = false; + + bool isSquare = false; + bool isDummyShape = false; + bool isTrapezoid = false; + bool isAnnular = false; while (!ConfigFile.eof()) { getline(ConfigFile, LineBuffer); - // If line is a Start Up GaspardTracker bloc, Reading toggle to true - if (LineBuffer.compare(0, 9, "GPDSquare") == 0) { - cout << "///" << endl; - cout << "Telescope found: " << endl; + // If line is a GaspardXXX bloc, reading toggle to true + // and toggle to true flags indicating which shape is treated. + if (LineBuffer.compare(0, 9, "GPDSquare") == 0 || + LineBuffer.compare(0, 12, "GPDTrapezoid") == 0 || + LineBuffer.compare(0, 10, "GPDAnnular") == 0 || + LineBuffer.compare(0, 13, "GPDDummyShape") == 0) { + cout << "///////////////////////" << endl; + cout << "Module found:" << endl; + + if (LineBuffer.compare(0, 9, "GPDSquare") == 0) isSquare = true; + if (LineBuffer.compare(0, 13, "GPDDummyShape") == 0) isDummyShape = true; + if (LineBuffer.compare(0, 12, "GPDTrapezoid") == 0) isTrapezoid = true; + if (LineBuffer.compare(0, 10, "GPDAnnular") == 0) isAnnular = true; 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, 9, "GPDSquare") == 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; + if (isSquare) { // square shape 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 ; + // 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, 9, "GPDSquare") == 0) { + cout << "WARNING: Another Module is find before standard sequence of Token, Error may occured in Telecope definition" << endl; + ReadingStatus = false; + } - D = TVector3(Dx, Dy, Dz); - cout << "X128 Y128 corner position : (" << D.X() << ";" << D.Y() << ";" << D.Z() << ")" << endl; - } // End Position Method + // 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; + } + else if (DataBuffer.compare(0, 4, "PHI=") == 0) { + check_Phi = true; + ConfigFile >> DataBuffer ; + Phi = atof(DataBuffer.c_str()) ; + Phi = Phi ; + cout << "Phi: " << Phi << endl; + } + else if (DataBuffer.compare(0, 2, "R=") == 0) { + check_R = true; + ConfigFile >> DataBuffer ; + R = atof(DataBuffer.c_str()) ; + R = R ; + cout << "R: " << R << endl; + } + 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 ; + } - // 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; - } - else if (DataBuffer.compare(0, 4, "PHI=") == 0) { - check_Phi = true; - ConfigFile >> DataBuffer ; - Phi = atof(DataBuffer.c_str()) ; - Phi = Phi ; - cout << "Phi: " << Phi << endl; - } - else if (DataBuffer.compare(0, 2, "R=") == 0) { - check_R = true; - ConfigFile >> DataBuffer ; - R = atof(DataBuffer.c_str()) ; - R = R ; - cout << "R: " << R << endl; - } - else if (DataBuffer.compare(0, 5, "BETA=") == 0) { - check_beta = true; - ConfigFile >> DataBuffer ; - beta_u = atof(DataBuffer.c_str()) ; - beta_u = beta_u ; + ///////////////////////////////////////////////// + // 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 ) { + AddModuleSquare(A , + B , + C , + D ) ; + } + + // with angle method + else if ( check_Theta && check_Phi && check_R && check_beta ) { + AddModuleSquare(R , + Theta , + Phi , + beta_u , + beta_v , + beta_w ); + } + + // reset boolean flag for point positioning + check_A = false; + check_B = false; + check_C = false; + check_D = false; + + // reset boolean flag for angle positioning + check_Theta = false; + check_Phi = false; + check_R = false; + check_beta = false; + + // reset boolean flag for shape determination + isSquare = false; + isDummyShape = false; + isTrapezoid = false; + isAnnular = false; + } // end test for adding a module + } // end test for Square shape + + else if (isDummyShape) { // dummyshape shape 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 ) ; + // 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, 9, "GPDSquare") == 0) { + cout << "WARNING: Another Module is find before standard sequence of Token, Error may occured in Telecope definition" << endl; + ReadingStatus = false; } - // with angle method - else if ( check_Theta && check_Phi && check_R && check_beta ) { - AddTelescope( R , - Theta , - Phi , - beta_u , - beta_v , - beta_w ); + // 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; + } + else if (DataBuffer.compare(0, 4, "PHI=") == 0) { + check_Phi = true; + ConfigFile >> DataBuffer ; + Phi = atof(DataBuffer.c_str()) ; + Phi = Phi ; + cout << "Phi: " << Phi << endl; + } + else if (DataBuffer.compare(0, 2, "R=") == 0) { + check_R = true; + ConfigFile >> DataBuffer ; + R = atof(DataBuffer.c_str()) ; + R = R ; + cout << "R: " << R << endl; + } + 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 ; } - check_A = false ; - check_B = false ; - check_C = false ; - check_D = false ; - - check_Theta = false ; - check_Phi = false ; - check_R = false ; - check_beta = false ; - } - } - } + ///////////////////////////////////////////////// + // 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 ) { + AddModuleDummyShape(A , + B , + C , + D ) ; + } + + // with angle method + else if ( check_Theta && check_Phi && check_R && check_beta ) { + AddModuleDummyShape(R , + Theta , + Phi , + beta_u , + beta_v , + beta_w ); + } + + // reset boolean flag for point positioning + check_A = false; + check_B = false; + check_C = false; + check_D = false; + + // reset boolean flag for angle positioning + check_Theta = false; + check_Phi = false; + check_R = false; + check_beta = false; + + // reset boolean flag for shape determination + isSquare = false; + isDummyShape = false; + isTrapezoid = false; + isAnnular = false; + } // end test for adding a module + } // end test for DummyShape shape + + else if (isTrapezoid) { // trapezoid shape + cout << "Trapezoid treatment not implemented yet!" << endl; + } // end test for Trapezoid shape + + else if (isAnnular) { // annular shape + cout << "Annular treatment not implemented yet!" << endl; + } // end test for Annular shape + + } // end while for reading block + } // end while for reading file cout << endl << "/////////////////////////////" << endl<<endl; } -// Read stream at Path and pick-up calibration parameter using Token -// If argument is "Simulation" no change calibration is loaded +// Read stream at Path and pick-up calibration parameter using Token +// If argument is "Simulation" no change calibration is loaded void GaspardTracker::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 - { +{ + // 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( m_NumberOfModule , StripLine) ; + Calibration_Si_X_T.resize( m_NumberOfModule , StripLine) ; + Calibration_Si_Y_E.resize( m_NumberOfModule , StripLine) ; + Calibration_Si_Y_T.resize( m_NumberOfModule , StripLine) ; - - } - } + Calibration_SiLi_E.resize( m_NumberOfModule , StripLine) ; + Calibration_CsI_E .resize( m_NumberOfModule , 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 +// 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 GaspardTracker::InitializeRootInput() - { - TChain* inputChain = RootInput::getInstance()->GetChain() ; - inputChain->SetBranchStatus( "GASPARD" , true ) ; - inputChain->SetBranchStatus( "fGPD*" , true ) ; - inputChain->SetBranchAddress( "GASPARD" , &EventData ) ; - } +{ + TChain* inputChain = RootInput::getInstance()->GetChain(); + inputChain->SetBranchStatus("GASPARD", true); + inputChain->SetBranchStatus("fGPD*", true); + inputChain->SetBranchAddress("GASPARD", &m_EventData); +} + -// Create associated branches and associated private member DetectorPhysics address +// Create associated branches and associated private member DetectorPhysics address void GaspardTracker::InitializeRootOutput() - { - TTree* outputTree = RootOutput::getInstance()->GetTree() ; - outputTree->Branch( "GASPARD" , "TGaspardTrackerPhysics" , &EventPhysics ) ; - } +{ + TTree* outputTree = RootOutput::getInstance()->GetTree(); + outputTree->Branch("GASPARD", "TGaspardTrackerPhysics", &m_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. +// 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 GaspardTracker::BuildPhysicalEvent() - { - EventPhysics -> BuildPhysicalEvent(EventData) ; - } +{ + m_EventPhysics -> BuildPhysicalEvent(m_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. +// 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 GaspardTracker::BuildSimplePhysicalEvent() - { - EventPhysics -> BuildSimplePhysicalEvent(EventData) ; - } +{ + m_EventPhysics -> BuildSimplePhysicalEvent(m_EventData); +} -///// Specific to GaspardTracker //// +void GaspardTracker::AddModuleSquare(TVector3 C_X1_Y1, + TVector3 C_X128_Y1, + TVector3 C_X1_Y128, + TVector3 C_X128_Y128) +{ + m_NumberOfModule++; + + // 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(); + + // Vector V on Module Face (parallele to X Strip) + TVector3 V = C_X1_Y128 - C_X1_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 > > OneModuleStripPositionX; + vector< vector< double > > OneModuleStripPositionY; + vector< vector< double > > OneModuleStripPositionZ; + + // Moving StripCenter to 1.1 corner: + Strip_1_1 = C_X1_Y1 + (U+V) * (StripPitch/2.); + + for (int i = 0; i < NumberOfStrip; i++) { + lineX.clear(); + lineY.clear(); + lineZ.clear(); + + for (int j = 0; j < NumberOfStrip; 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() ); + } -void GaspardTracker::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_X128_Y1 - C_X1_Y1 ; - U = -U.Unit() ; - // Vector V on Telescope Face (parallele to X Strip) - TVector3 V = C_X1_Y128 - C_X1_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 ) ; + OneModuleStripPositionX.push_back(lineX); + OneModuleStripPositionY.push_back(lineY); + OneModuleStripPositionZ.push_back(lineZ); + } - } - - -void GaspardTracker::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 ; - - /*if(theta==180 && phi==90) - { - C = TVector3 (0,0,distance) ; - U = TVector3 (1,0,0) ; - V = TVector3 (0,1,0) ; - W = TVector3 (0,0,1) ; - }*/ - - if(theta==0 && phi==0) - { - C = TVector3 (0,0,distance) ; - U = TVector3 (1,0,0) ; - V = TVector3 (0,1,0) ; - W = TVector3 (0,0,1) ; - } - - else - { - C = TVector3 ( distance * sin(theta) * cos(phi) , - distance * sin(theta) * sin(phi) , - distance * cos(theta) ); - - W = C.Unit() ; - U = W .Cross ( TVector3(0,1,0) ) ; - 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 ) ; - } + m_StripPositionX.push_back( OneModuleStripPositionX ); + m_StripPositionY.push_back( OneModuleStripPositionY ); + m_StripPositionZ.push_back( OneModuleStripPositionZ ); +} + + + +void GaspardTracker::AddModuleSquare(double theta, + double phi, + double distance, + double beta_u, + double beta_v, + double beta_w) +{ + m_NumberOfModule++; + + // convert from degree to radian: + double Pi = 3.141592654; + theta = theta * Pi/180. ; + phi = phi * Pi/180. ; + + // Vector U on Module Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) + TVector3 U ; + // Vector V on Module Face (parallele to X Strip) + TVector3 V ; + // Vector W normal to Module Face (pointing CsI) + TVector3 W ; + // Vector position of Module Face center + TVector3 C ; + + C = TVector3(distance * sin(theta) * cos(phi), + distance * sin(theta) * sin(phi), + distance * cos(theta)); + + TVector3 YperpC = TVector3( cos(theta) * cos(phi), + cos(theta) * sin(phi), + -sin(theta)); + + W = C.Unit(); + U = W.Cross(YperpC); + 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 ) ; - double Face = 98 ; //mm - double NumberOfStrip = 128 ; - double StripPitch = Face/NumberOfStrip ; //mm + U.Rotate( beta_w * Pi/180. , W ) ; + V.Rotate( beta_w * Pi/180. , W ) ; - vector<double> lineX ; vector<double> lineY ; vector<double> lineZ ; + double Face = 98; // mm + double NumberOfStrip = 128; + double StripPitch = Face/NumberOfStrip; // mm + + vector<double> lineX; + vector<double> lineY; + vector<double> lineZ; + + vector< vector< double > > OneModuleStripPositionX; + vector< vector< double > > OneModuleStripPositionY; + vector< vector< double > > OneModuleStripPositionZ; - 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 < NumberOfStrip; i++) { + lineX.clear(); + lineY.clear(); + lineZ.clear(); + + for (int j = 0; j < NumberOfStrip; 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); + } + + OneModuleStripPositionX.push_back(lineX); + OneModuleStripPositionY.push_back(lineY); + OneModuleStripPositionZ.push_back(lineZ); + } + + m_StripPositionX.push_back( OneModuleStripPositionX ); + m_StripPositionY.push_back( OneModuleStripPositionY ); + m_StripPositionZ.push_back( OneModuleStripPositionZ ); +} + + + +void GaspardTracker::AddModuleDummyShape(TVector3 C_X1_Y1, + TVector3 C_X128_Y1, + TVector3 C_X1_Y128, + TVector3 C_X128_Y128) +{ + m_NumberOfModule++; + + // 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(); + + // Vector V on Module Face (parallele to X Strip) + TVector3 V = C_X1_Y128 - C_X1_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 = 50; // 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 > > OneModuleStripPositionX; + vector< vector< double > > OneModuleStripPositionY; + vector< vector< double > > OneModuleStripPositionZ; + + // Moving StripCenter to 1.1 corner: + Strip_1_1 = C_X1_Y1 + (U+V) * (StripPitch/2.); + + for (int i = 0; i < NumberOfStrip; i++) { + lineX.clear(); + lineY.clear(); + lineZ.clear(); + + for (int j = 0; j < NumberOfStrip; 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() ); + } + + OneModuleStripPositionX.push_back(lineX); + OneModuleStripPositionY.push_back(lineY); + OneModuleStripPositionZ.push_back(lineZ); + } + + m_StripPositionX.push_back( OneModuleStripPositionX ); + m_StripPositionY.push_back( OneModuleStripPositionY ); + m_StripPositionZ.push_back( OneModuleStripPositionZ ); +} + + + +void GaspardTracker::AddModuleDummyShape(double theta, + double phi, + double distance, + double beta_u, + double beta_v, + double beta_w) +{ + m_NumberOfModule++; + + // convert from degree to radian: + double Pi = 3.141592654; + theta = theta * Pi/180. ; + phi = phi * Pi/180. ; + + // Vector U on Module Face (paralelle to Y Strip) (NB: remember that Y strip are allong X axis) + TVector3 U ; + // Vector V on Module Face (parallele to X Strip) + TVector3 V ; + // Vector W normal to Module Face (pointing CsI) + TVector3 W ; + // Vector position of Module Face center + TVector3 C ; + + C = TVector3(distance * sin(theta) * cos(phi), + distance * sin(theta) * sin(phi), + distance * cos(theta)); + + TVector3 YperpW = TVector3( cos(theta) * cos(phi), + cos(theta) * sin(phi), + -sin(theta)); + + W = C.Unit(); + U = W.Cross(YperpW); + 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 = 50; // mm + double NumberOfStrip = 128; + double StripPitch = Face/NumberOfStrip; // mm + + vector<double> lineX; + vector<double> lineY; + vector<double> lineZ; + + vector< vector< double > > OneModuleStripPositionX; + vector< vector< double > > OneModuleStripPositionY; + vector< vector< double > > OneModuleStripPositionZ; - double X , Y , Z ; + 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 < NumberOfStrip; i++) { + lineX.clear(); + lineY.clear(); + lineZ.clear(); + + for (int j = 0; j < NumberOfStrip; 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); + } + + OneModuleStripPositionX.push_back(lineX); + OneModuleStripPositionY.push_back(lineY); + OneModuleStripPositionZ.push_back(lineZ); + } + + m_StripPositionX.push_back( OneModuleStripPositionX ); + m_StripPositionY.push_back( OneModuleStripPositionY ); + m_StripPositionZ.push_back( OneModuleStripPositionZ ); +} + + - //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 GaspardTracker::GetEnergyDeposit() - { - if(EventPhysics->TotalEnergy.size()>0) - return EventPhysics->TotalEnergy[0] ; - else return -1000 ; - } - - - +{ + if (m_EventPhysics->TotalEnergy.size() > 0) + return m_EventPhysics->TotalEnergy[0]; + else + return -1000; +} + + + TVector3 GaspardTracker::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) ; - - } - -void GaspardTracker::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 ; - } - } - - } - } - +{ + TVector3 Position = TVector3(-1000,-1000,-1000); + if (m_EventPhysics->ModuleNumber.size() == 1) { + Position = TVector3(GetStripPositionX(m_EventPhysics->ModuleNumber[0], m_EventPhysics->FirstStage_X[0], m_EventPhysics->FirstStage_Y[0]), + GetStripPositionY(m_EventPhysics->ModuleNumber[0], m_EventPhysics->FirstStage_X[0], m_EventPhysics->FirstStage_Y[0]), + GetStripPositionZ(m_EventPhysics->ModuleNumber[0], m_EventPhysics->FirstStage_X[0], m_EventPhysics->FirstStage_Y[0])); + } + + return(Position); +} + + + +void GaspardTracker::Print() +{ + cout << "Number of Modules: " << m_NumberOfModule << endl; + + for (int f = 0; f < m_NumberOfModule; f++) { + cout << "Module " << f+1 << endl; + + for (int i = 0; i < 128; i++) { + for (int j = 0; j < 128; j++) { + cout << i+1 << " "<< j+1 << " " + << m_StripPositionX[f][i][j] << " " + << m_StripPositionY[f][i][j] << " " + << m_StripPositionZ[f][i][j] << " " + << endl ; + } + } + } +} diff --git a/NPLib/GASPARD/GaspardTracker.h b/NPLib/GASPARD/GaspardTracker.h index 7598ebb7179b0c955be2b78360808bf0abd6c757..7ffc4f8db5a6098750ffcfe13f7b7d63f9821382 100644 --- a/NPLib/GASPARD/GaspardTracker.h +++ b/NPLib/GASPARD/GaspardTracker.h @@ -9,7 +9,7 @@ * Original Author: N. de Sereville contact address: deserevi@ipno.in2p3.fr * * * * Creation Date : 31/08/09 * - * Last update : * + * Last update : 10/09/09 * *---------------------------------------------------------------------------* * Decription: This class is mainly an interface to the * * TGaspardTrackerPhysics class and it deals with the geometrical* @@ -17,6 +17,8 @@ * (X, Y, Z) of interaction. * *---------------------------------------------------------------------------* * Comment: * + * + 10/09/09: Add support for Square and DummyShape shapes * + * (N. de Sereville) * * * * * *****************************************************************************/ @@ -32,88 +34,108 @@ #include "TVector3.h" class GaspardTracker : public NPA::VDetector - { - public: // Default Constructor - GaspardTracker() ; - ~GaspardTracker() ; +{ +public: + GaspardTracker(); + ~GaspardTracker(); + +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. + // The aim is to build treat Raw dat in order to extract physical parameter. + void BuildPhysicalEvent(); - 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 GaspardTracker - // 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(); - - void Print() ; - - private: // Root Input and Output tree classes - - TGaspardTrackerData* EventData ; - TGaspardTrackerPhysics* 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 ; - - }; + // 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() {m_EventPhysics->Clear();} + void ClearEventData() {m_EventData->Clear();} + + +public: + //////////////////////////////// + // Specific to GaspardTracker // + //////////////////////////////// + // Case of a Square module + // Add a Module using Corner Coordinate information + void AddModuleSquare(TVector3 C_X1_Y1, + TVector3 C_X128_Y1, + TVector3 C_X1_Y128, + TVector3 C_X128_Y128); + + // Add a Module using R Theta Phi of Si center information + void AddModuleSquare(double theta, + double phi, + double distance, + double beta_u, + double beta_v, + double beta_w); + + // Case of a DummyShape module + // Add a Module using Corner Coordinate information + void AddModuleDummyShape(TVector3 C_X1_Y1, + TVector3 C_X128_Y1, + TVector3 C_X1_Y128, + TVector3 C_X128_Y128); + + // Add a Module using R Theta Phi of Si center information + void AddModuleDummyShape(double theta, + double phi, + double distance, + double beta_u, + double beta_v, + double beta_w); + + // Getters to retrieve the (X,Y,Z) coordinates of a pixel defined by strips (X,Y) + double GetStripPositionX(int N ,int X ,int Y) { return m_StripPositionX[N-1][X-1][Y-1]; }; + double GetStripPositionY(int N ,int X ,int Y) { return m_StripPositionY[N-1][X-1][Y-1]; }; + double GetStripPositionZ(int N ,int X ,int Y) { return m_StripPositionZ[N-1][X-1][Y-1]; }; + double GetNumberOfModule() { return m_NumberOfModule; }; + + // Get Root input and output objects + TGaspardTrackerData* GetEventData() {return m_EventData;}; + TGaspardTrackerPhysics* GetEventPhysics() {return m_EventPhysics;}; + + // To be called after a build Physical Event + double GetEnergyDeposit(); + TVector3 GetPositionOfInteraction(); + + void Print(); + + +private: + //////////////////////////////////////// + // Root Input and Output tree classes // + //////////////////////////////////////// + TGaspardTrackerData* m_EventData; + TGaspardTrackerPhysics* m_EventPhysics; + + +private: + // Spatial Position of Strip Calculated on basis of detector position + int m_NumberOfModule; + vector< vector < vector < double > > > m_StripPositionX; + vector< vector < vector < double > > > m_StripPositionY; + vector< vector < vector < double > > > m_StripPositionZ; +}; #endif diff --git a/NPLib/GASPARD/TGaspardTrackerPhysics.cxx b/NPLib/GASPARD/TGaspardTrackerPhysics.cxx index 640a4e292215c919979d669c68af65441fb79beb..5abd42f89bab02139d82512f8094d5fac1e2a478 100644 --- a/NPLib/GASPARD/TGaspardTrackerPhysics.cxx +++ b/NPLib/GASPARD/TGaspardTrackerPhysics.cxx @@ -24,111 +24,137 @@ #include "TGaspardTrackerPhysics.h" #include <iostream> + ClassImp(TGaspardTrackerPhysics) + TGaspardTrackerPhysics::TGaspardTrackerPhysics() - { EventMultiplicity = 0 ;} +{ + EventMultiplicity = 0; +} + + + +TGaspardTrackerPhysics::~TGaspardTrackerPhysics() +{ + Clear(); +} + -TGaspardTrackerPhysics::~TGaspardTrackerPhysics() {Clear();} void TGaspardTrackerPhysics::BuildSimplePhysicalEvent(TGaspardTrackerData* Data) - { - BuildPhysicalEvent(Data); - } +{ + BuildPhysicalEvent(Data); +} + + + void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) - { -/* // 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 ; - - // Multiplicity 1 - if( Data->GetMMStripXEMult()==1 && Data->GetMMStripYEMult()==1 && Data->GetMMStripXTMult()==1 && Data->GetMMStripXTMult()==1 ) - { - - 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) ) - { - TelescopeNumber.push_back(Data->GetMMStripXEDetectorNbr(0)) ; - - // 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) ) ; - - // 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) ) ; - - Si_X.push_back( Data->GetMMStripXEStripNbr(0) ) ; - Si_Y.push_back( Data->GetMMStripYEStripNbr(0) ) ; - - Check_Si = true ; - EventMultiplicity = 1; - - } - - - // 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(Li) - for (int i = 0 ; i < Data->GetMMSiLiEMult() ; i++) - { - if ( Data->GetMMSiLiEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(0) - && 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(0) ) - { - SiLi_T.push_back(Data->GetMMSiLiTTime(i)) ; - Check_SiLi = true ; - } - } - } - - // CsI - for (int i = 0 ; i < Data->GetMMCsIEMult() ; i++) - { - if ( Data->GetMMCsIEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(0) - && 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(0) ) - { - CsI_T.push_back(Data->GetMMCsITTime(i)) ; - 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; - } +{ + // Check + bool Check_FirstStage = false ;bool Check_SecondStage = false ; bool Check_ThirdStage = false ; - //FIXME: should built a pseudo event and then Check if particle could be identified with EDE method - // Dump - } - + // 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(); + int multXT = Data->GetGPDTrkFirstStageFrontTMult(); + int multYT = Data->GetGPDTrkFirstStageBackTMult(); + // calculate multiplicity of 2nd and third stages + int mult2E = Data->GetGPDTrkSecondStageEMult(); + int mult2T = Data->GetGPDTrkSecondStageTMult(); + int mult3E = Data->GetGPDTrkThirdStageEMult(); + int mult3T = Data->GetGPDTrkThirdStageTMult(); + + // Deal with multiplicity 1 for the first layer + if (multXE==1 && multYE==1 && multXT==1 && multYT==1) { + // calculate detector number + int det_ref = Data->GetGPDTrkFirstStageFrontEDetectorNbr(0); + int detecXE = Data->GetGPDTrkFirstStageFrontEDetectorNbr(0) / det_ref; + int detecXT = Data->GetGPDTrkFirstStageFrontTDetectorNbr(0) / det_ref; + int detecYE = Data->GetGPDTrkFirstStageBackEDetectorNbr(0) / det_ref; + int detecYT = Data->GetGPDTrkFirstStageBackTDetectorNbr(0) / det_ref; + + // case of same detector + if (detecXE*detecXT*detecYE*detecYT == 1) { + // store module number + ModuleNumber.push_back(det_ref); + // calculate strip number + int stripXE = Data->GetGPDTrkFirstStageFrontEStripNbr(0); + int stripXT = Data->GetGPDTrkFirstStageFrontTStripNbr(0); + int stripYE = Data->GetGPDTrkFirstStageBackEStripNbr(0); + int stripYT = Data->GetGPDTrkFirstStageBackTStripNbr(0); + + // case of same strips on X and Y + if (stripXE == stripXT && stripYE == stripYT) { // here we have a good strip event + // various + Check_FirstStage = true; + EventMultiplicity = 1; + // store strip ID + FirstStage_X.push_back(stripXE); + FirstStage_Y.push_back(stripYE); + // get energy from strips and store it + double EnergyStripFront = Data->GetGPDTrkFirstStageFrontEEnergy(0); + double EnergyStripBack = Data->GetGPDTrkFirstStageBackEEnergy(0); + double EnergyStrip = 0.5 * (EnergyStripFront + EnergyStripBack); +// double EnergyStrip = EnergyStripFront; +// if (EnergyStripBack > EnergyStrip) EnergyStrip = EnergyStripBack; + FirstStage_E.push_back(EnergyStrip); + double EnergyTot = EnergyStrip; + // 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; +// if (TimeStripBack > TimeStrip) TimeStrip = TimeStripBack; + FirstStage_T.push_back(TimeStrip); + + // check if we have a 2nd stage event + if (mult2E==1 && mult2T==1) { + Check_SecondStage = true; + double EnergySecond = Data->GetGPDTrkSecondStageEEnergy(0); + SecondStage_E.push_back(EnergySecond); + EnergyTot += EnergySecond; + } + else if (mult2E>1 || mult2T>1) { + cout << "Warning: multiplicity in second stage greater than in firststage" << endl; + } + // check if we have a third stage event + if (mult3E==1 && mult3T==1) { + Check_ThirdStage = true; + double EnergyThird = Data->GetGPDTrkThirdStageEEnergy(0); + ThirdStage_E.push_back(EnergyThird); + EnergyTot += EnergyThird; + } + else if (mult3E>1 || mult3T>1) { + cout << "Warning: multiplicity in third stage greater than in firststage" << endl; + } + + // Analysis code here. + TotalEnergy.push_back(EnergyTot); + } + else { + cout << "Not same strips" << endl; + } + } + else { + cout << "Not same detector" << endl; + } + } + else { +/* cout << "Multiplicity is not one, it is: " << endl; + cout << "\tmultXE: " << multXE << endl; + cout << "\tmultXT: " << multXT << endl; + cout << "\tmultYE: " << multYE << endl; + cout << "\tmultYT: " << multYT << endl;*/ + } + +/* // Multiplicity 2 if( Data->GetMMStripXEMult()==2 && Data->GetMMStripYEMult()==2 && Data->GetMMStripXTMult()==2 && Data->GetMMStripXTMult()==2 ) { @@ -141,12 +167,12 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) // loop on both event for (int jj = 0 ; jj < 2 ; jj++) { - Check_Si = false ;Check_SiLi = false ;Check_CsI = false ; + Check_FirstStage = false ;Check_SecondStage = false ;Check_ThirdStage = false ; - TelescopeNumber.push_back( Data->GetMMStripXEDetectorNbr(jj) ) ; + ModuleNumber.push_back( Data->GetMMStripXEDetectorNbr(jj) ) ; EX = Data->GetMMStripXEEnergy(jj) ; - Si_X.push_back( Data->GetMMStripXEStripNbr(jj)) ; + FirstStage_X.push_back( Data->GetMMStripXEStripNbr(jj)) ; // Get Corresponding time for(int i = 0 ; i < 2 ; i++) @@ -161,45 +187,45 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) { if( Data->GetMMStripYEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) ) { - Si_Y.push_back( Data->GetMMStripYEStripNbr(i)) ; + FirstStage_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 (EX>EY) FirstStage_E.push_back(EX) ; + // else FirstStage_E.push_back(EY) ; + FirstStage_E.push_back(EX); - if (TX>TY) Si_T.push_back(TY) ; - else Si_T.push_back(TX) ; - Check_Si = true ; + if (TX>TY) FirstStage_T.push_back(TY) ; + else FirstStage_T.push_back(TX) ; + Check_FirstStage = true ; } } - if (Check_Si) + if (Check_FirstStage) { // Si(Li) for (int i = 0 ; i < Data->GetMMSiLiEMult() ; i++) { if ( Data->GetMMSiLiEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) - && Data->GetMMSiLiEEnergy(i) > SiLi_E_Threshold ) + && Data->GetMMSiLiEEnergy(i) > SecondStage_E_Threshold ) { - SiLi_E.push_back(Data->GetMMSiLiEEnergy(i)) ; - SiLi_N.push_back(Data->GetMMSiLiEPadNbr(i)) ; + SecondStage_E.push_back(Data->GetMMSiLiEEnergy(i)) ; + SecondStage_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 ; + SecondStage_T.push_back(Data->GetMMSiLiTTime(i)) ; + Check_SecondStage = true ; } } else { - SiLi_E.push_back(-1) ; - SiLi_T.push_back(-1) ; - SiLi_N.push_back(-1) ; + SecondStage_E.push_back(-1) ; + SecondStage_T.push_back(-1) ; + SecondStage_N.push_back(-1) ; } } @@ -207,29 +233,29 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) for (int i = 0 ; i < Data->GetMMCsIEMult() ; i++) { if ( Data->GetMMCsIEDetectorNbr(i) == Data->GetMMStripXEDetectorNbr(jj) - && Data->GetMMCsIEEnergy(i) > CsI_E_Threshold ) + && Data->GetMMCsIEEnergy(i) > ThirdStage_E_Threshold ) { - CsI_E.push_back(Data->GetMMCsIEEnergy(i)) ; - CsI_N.push_back(Data->GetMMCsIECristalNbr(i)) ; + ThirdStage_E.push_back(Data->GetMMCsIEEnergy(i)) ; + ThirdStage_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 ; + ThirdStage_T.push_back(Data->GetMMCsITTime(i)) ; + Check_ThirdStage = true ; } } else { - CsI_E.push_back(-1) ; - CsI_T.push_back(-1) ; - CsI_N.push_back(-1) ; + ThirdStage_E.push_back(-1) ; + ThirdStage_T.push_back(-1) ; + ThirdStage_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) ; + TotalEnergy.push_back(FirstStage_E.at(jj)) ; + if (Check_SecondStage) TotalEnergy.at(jj) += SecondStage_E.at(jj) ; + if (Check_ThirdStage) TotalEnergy.at(jj) += ThirdStage_E.at(jj) ; } } return; @@ -245,30 +271,29 @@ void TGaspardTrackerPhysics::BuildPhysicalEvent(TGaspardTrackerData* Data) } } */ - } +} void TGaspardTrackerPhysics::Clear() - { - EventMultiplicity= 0 ; - TelescopeNumber .clear() ; - EventType .clear() ; - TotalEnergy .clear() ; - - // Si X - Si_E.clear() ; - Si_T.clear() ; - Si_X.clear() ; - Si_Y.clear() ; - - // Si(Li) - SiLi_E.clear() ; - SiLi_T.clear() ; - SiLi_N.clear() ; - - // CsI - CsI_E.clear() ; - CsI_T.clear() ; - CsI_N.clear() ; - } +{ + EventMultiplicity= 0; + ModuleNumber.clear(); + EventType.clear(); + TotalEnergy.clear(); + + // Si X + FirstStage_E.clear(); + FirstStage_T.clear(); + FirstStage_X.clear(); + FirstStage_Y.clear(); + + // Si(Li) + SecondStage_E.clear(); + SecondStage_T.clear(); + SecondStage_N.clear(); + // CsI + ThirdStage_E.clear(); + ThirdStage_T.clear(); + ThirdStage_N.clear(); +} diff --git a/NPLib/GASPARD/TGaspardTrackerPhysics.h b/NPLib/GASPARD/TGaspardTrackerPhysics.h index 5180acca947477a0becb4c71e9c12c8e9a5095f0..e23742bee88e73dcd8102bc39b627eecb6e0ec26 100644 --- a/NPLib/GASPARD/TGaspardTrackerPhysics.h +++ b/NPLib/GASPARD/TGaspardTrackerPhysics.h @@ -32,45 +32,45 @@ using namespace std ; class TGaspardTrackerPhysics : public TObject { - public: - TGaspardTrackerPhysics() ; - ~TGaspardTrackerPhysics(); +public: + TGaspardTrackerPhysics(); + ~TGaspardTrackerPhysics(); - public: - void Clear() ; - void BuildPhysicalEvent(TGaspardTrackerData* Data) ; - void BuildSimplePhysicalEvent(TGaspardTrackerData* Data) ; - - public: - // Provide Physical Multiplicity - Int_t EventMultiplicity ; - - // Provide a Classification of Event - vector<int> EventType ; - - // Telescope - vector<int> TelescopeNumber ; - - // Si X - vector<double> Si_E ; - vector<double> Si_T ; - vector<int> Si_X ; - vector<int> Si_Y ; - - // Si(Li) - vector<double> SiLi_E ; - vector<double> SiLi_T ; - vector<int> SiLi_N ; - - // CsI - vector<double> CsI_E ; - vector<double> CsI_T ; - vector<int> CsI_N ; - - // Physical Value - vector<double> TotalEnergy ; - - ClassDef(TGaspardTrackerPhysics,1) // GaspardTrackerPHysics structure +public: + void Clear(); + void BuildPhysicalEvent(TGaspardTrackerData* Data); + void BuildSimplePhysicalEvent(TGaspardTrackerData* Data); + +public: + // Provide Physical Multiplicity + Int_t EventMultiplicity; + + // Provide a Classification of Event + vector<int> EventType; + + // Telescope + vector<int> ModuleNumber; + + // FirstStage + vector<double> FirstStage_E; + vector<double> FirstStage_T; + vector<int> FirstStage_X; + vector<int> FirstStage_Y; + + // SecondStage + vector<double> SecondStage_E; + vector<double> SecondStage_T; + vector<int> SecondStage_N; + + // ThirdStage + vector<double> ThirdStage_E; + vector<double> ThirdStage_T; + vector<int> ThirdStage_N; + + // Physical Value + vector<double> TotalEnergy; + + ClassDef(TGaspardTrackerPhysics,1) // GaspardTrackerPHysics structure }; #endif