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