diff --git a/Makefile b/Makefile
index d1f2e15f8df3f6b77baedd5aa000620b23de01e4..04a445385126ca18ca16e946956b4d356adbd79f 100644
--- a/Makefile
+++ b/Makefile
@@ -317,6 +317,33 @@ src/ModuleParameterisation.cc.s:
 	$(MAKE) -f CMakeFiles/xgis_M7.dir/build.make CMakeFiles/xgis_M7.dir/src/ModuleParameterisation.cc.s
 .PHONY : src/ModuleParameterisation.cc.s
 
+src/PCBParameterisation.o: src/PCBParameterisation.cc.o
+
+.PHONY : src/PCBParameterisation.o
+
+# target to build an object file
+src/PCBParameterisation.cc.o:
+	$(MAKE) -f CMakeFiles/xgis_M7.dir/build.make CMakeFiles/xgis_M7.dir/src/PCBParameterisation.cc.o
+.PHONY : src/PCBParameterisation.cc.o
+
+src/PCBParameterisation.i: src/PCBParameterisation.cc.i
+
+.PHONY : src/PCBParameterisation.i
+
+# target to preprocess a source file
+src/PCBParameterisation.cc.i:
+	$(MAKE) -f CMakeFiles/xgis_M7.dir/build.make CMakeFiles/xgis_M7.dir/src/PCBParameterisation.cc.i
+.PHONY : src/PCBParameterisation.cc.i
+
+src/PCBParameterisation.s: src/PCBParameterisation.cc.s
+
+.PHONY : src/PCBParameterisation.s
+
+# target to generate assembly for a file
+src/PCBParameterisation.cc.s:
+	$(MAKE) -f CMakeFiles/xgis_M7.dir/build.make CMakeFiles/xgis_M7.dir/src/PCBParameterisation.cc.s
+.PHONY : src/PCBParameterisation.cc.s
+
 src/PhysicsList.o: src/PhysicsList.cc.o
 
 .PHONY : src/PhysicsList.o
@@ -616,6 +643,9 @@ help:
 	@echo "... src/ModuleParameterisation.o"
 	@echo "... src/ModuleParameterisation.i"
 	@echo "... src/ModuleParameterisation.s"
+	@echo "... src/PCBParameterisation.o"
+	@echo "... src/PCBParameterisation.i"
+	@echo "... src/PCBParameterisation.s"
 	@echo "... src/PhysicsList.o"
 	@echo "... src/PhysicsList.i"
 	@echo "... src/PhysicsList.s"
diff --git a/detector_params.inp b/detector_params.inp
index f60721eca16d63c4d64b3a4e223d4f0adcf8125a..a00ee8f4d7801c302c4fbf92c79ad297f658ea3c 100644
--- a/detector_params.inp
+++ b/detector_params.inp
@@ -19,8 +19,10 @@ COLL_UPPER_1_THICK	    = 1000.0				# Upper internal collimator thickness (in um)
 COLL_UPPER_2_THICK	    = 250.0				    # Upper external collimator thickness (in um)
 COLL_UPPER_2_HEIGHT	    = 63.0				    # Upper external collimator height (in cm)
 OPTICAL_COUPLER_THICK	= 1.0				    # Optical coupler thickness (in mm)
-POLYPROPYLENE_THICK     = 15                    # Polypropylene layer thickness (in um)
-                                       
+POLYPROPYLENE_THICK     = 15.                   # Polypropylene layer thickness (in um)
+KAPTON_THICK            = 7.6                   # Kapton layer thickness (in um)
+ALUMINUM_THICK          = 0.2                  # Aluminum layer thickness (in um)
+
 # Module parameters                          
 N_SIDE					= 89				    # Number of scintillator bars per side (89x89=7921-81)
 N_SLICES_PER_BAR		= 1				    	# Number of voxels (slices) for each scintillator bar
@@ -36,4 +38,6 @@ MASK_MATERIAL			    = G4_W  		    # Material of the coded mask
 COLL_UPPER_1_MATERIAL	    = G4_Al		        # Material of the upper internal collimator
 COLL_UPPER_2_MATERIAL		= G4_W		        # Material of the upper external collimator
 OPTICAL_COUPLER_MATERIAL	= Silicone	        # Material of the optical coupler
-POLYPROPYLENE_MATERIAL      = G4_POLYPROPYLENE  # Material of the polypropylene layer
\ No newline at end of file
+POLYPROPYLENE_MATERIAL      = G4_POLYPROPYLENE  # Material of the polypropylene layer
+KAPTON_MATERIAL             = G4_KAPTON         # Material of the kapton layer
+ALUMINUM_MATERIAL           = G4_Al             # Material of the aluminum layer
\ No newline at end of file
diff --git a/fits/scorefile_grb_0_0.zip b/fits/scorefile_grb_0_0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..8194f3fd560551c5658e77807913ff4c23cec17c
Binary files /dev/null and b/fits/scorefile_grb_0_0.zip differ
diff --git a/fits_dep/S_grb_0.0_0.0.zip b/fits_dep/S_grb_0.0_0.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..b784aff94335d256e4014a0d58a04e60dcbc4905
Binary files /dev/null and b/fits_dep/S_grb_0.0_0.0.zip differ
diff --git a/fits_dep/X_grb_0.0_0.0.zip b/fits_dep/X_grb_0.0_0.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..31d8b00a27155e99c8e9d48f5d8f6c254e0e80d9
Binary files /dev/null and b/fits_dep/X_grb_0.0_0.0.zip differ
diff --git a/grb.mac b/grb00.mac
similarity index 100%
rename from grb.mac
rename to grb00.mac
diff --git a/grb40.mac b/grb40.mac
new file mode 100644
index 0000000000000000000000000000000000000000..6d68a7063e9bc4c18d80230f0f5796284378804a
--- /dev/null
+++ b/grb40.mac
@@ -0,0 +1,124 @@
+# Input spectrum
+/gps/particle gamma
+/gps/ene/type Arb
+/gps/hist/type arb
+/gps/ene/min    0.002 MeV
+/gps/ene/max    2.000 MeV
+/gps/hist/point 0.0020 4.9007e+01
+/gps/hist/point 0.0021 4.5642e+01
+/gps/hist/point 0.0023 4.2498e+01
+/gps/hist/point 0.0025 3.9570e+01
+/gps/hist/point 0.0026 3.6836e+01
+/gps/hist/point 0.0028 3.4288e+01
+/gps/hist/point 0.0030 3.1912e+01
+/gps/hist/point 0.0033 2.9696e+01
+/gps/hist/point 0.0035 2.7629e+01
+/gps/hist/point 0.0037 2.5702e+01
+/gps/hist/point 0.0040 2.3905e+01
+/gps/hist/point 0.0043 2.2229e+01
+/gps/hist/point 0.0046 2.0666e+01
+/gps/hist/point 0.0050 1.9210e+01
+/gps/hist/point 0.0053 1.7851e+01
+/gps/hist/point 0.0057 1.6584e+01
+/gps/hist/point 0.0061 1.5403e+01
+/gps/hist/point 0.0065 1.4301e+01
+/gps/hist/point 0.0070 1.3275e+01
+/gps/hist/point 0.0075 1.2317e+01
+/gps/hist/point 0.0081 1.1424e+01
+/gps/hist/point 0.0087 1.0593e+01
+/gps/hist/point 0.0093 9.8175e+00
+/gps/hist/point 0.0100 9.0939e+00
+/gps/hist/point 0.0107 8.4207e+00
+/gps/hist/point 0.0114 7.7929e+00
+/gps/hist/point 0.0123 7.2077e+00
+/gps/hist/point 0.0132 6.6626e+00
+/gps/hist/point 0.0141 6.1547e+00
+/gps/hist/point 0.0151 5.6817e+00
+/gps/hist/point 0.0162 5.2411e+00
+/gps/hist/point 0.0174 4.8309e+00
+/gps/hist/point 0.0187 4.4489e+00
+/gps/hist/point 0.0200 4.0936e+00
+/gps/hist/point 0.0214 3.7629e+00
+/gps/hist/point 0.0230 3.4554e+00
+/gps/hist/point 0.0247 3.1695e+00
+/gps/hist/point 0.0264 2.9036e+00
+/gps/hist/point 0.0283 2.6567e+00
+/gps/hist/point 0.0304 2.4273e+00
+/gps/hist/point 0.0326 2.2145e+00
+/gps/hist/point 0.0350 2.0172e+00
+/gps/hist/point 0.0375 1.8343e+00
+/gps/hist/point 0.0402 1.6650e+00
+/gps/hist/point 0.0431 1.5083e+00
+/gps/hist/point 0.0462 1.3636e+00
+/gps/hist/point 0.0495 1.2299e+00
+/gps/hist/point 0.0531 1.1067e+00
+/gps/hist/point 0.0570 9.9324e-01
+/gps/hist/point 0.0611 8.8895e-01
+/gps/hist/point 0.0655 7.9321e-01
+/gps/hist/point 0.0702 7.0557e-01
+/gps/hist/point 0.0753 6.2546e-01
+/gps/hist/point 0.0807 5.5239e-01
+/gps/hist/point 0.0866 4.8597e-01
+/gps/hist/point 0.0928 4.2574e-01
+/gps/hist/point 0.0995 3.7128e-01
+/gps/hist/point 0.1067 3.2223e-01
+/gps/hist/point 0.1144 2.7820e-01
+/gps/hist/point 0.1227 2.3885e-01
+/gps/hist/point 0.1316 2.0385e-01
+/gps/hist/point 0.1411 1.7287e-01
+/gps/hist/point 0.1513 1.4558e-01
+/gps/hist/point 0.1622 1.2172e-01
+/gps/hist/point 0.1739 1.0096e-01
+/gps/hist/point 0.1865 8.3027e-02
+/gps/hist/point 0.2000 6.7669e-02
+/gps/hist/point 0.2145 5.4886e-02
+/gps/hist/point 0.2300 4.4522e-02
+/gps/hist/point 0.2466 3.6112e-02
+/gps/hist/point 0.2644 2.9293e-02
+/gps/hist/point 0.2835 2.3760e-02
+/gps/hist/point 0.3040 1.9272e-02
+/gps/hist/point 0.3260 1.5633e-02
+/gps/hist/point 0.3495 1.2680e-02
+/gps/hist/point 0.3748 1.0285e-02
+/gps/hist/point 0.4018 8.3421e-03
+/gps/hist/point 0.4309 6.7668e-03
+/gps/hist/point 0.4620 5.4887e-03
+/gps/hist/point 0.4954 4.4521e-03
+/gps/hist/point 0.5312 3.6110e-03
+/gps/hist/point 0.5696 2.9292e-03
+/gps/hist/point 0.6108 2.3760e-03
+/gps/hist/point 0.6549 1.9272e-03
+/gps/hist/point 0.7022 1.5632e-03
+/gps/hist/point 0.7530 1.2680e-03
+/gps/hist/point 0.8074 1.0285e-03
+/gps/hist/point 0.8658 8.3423e-04
+/gps/hist/point 0.9283 6.7670e-04
+/gps/hist/point 0.9954 5.4888e-04
+/gps/hist/point 1.0673 4.4519e-04
+/gps/hist/point 1.1445 3.6112e-04
+/gps/hist/point 1.2272 2.9293e-04
+/gps/hist/point 1.3159 2.3760e-04
+/gps/hist/point 1.4110 1.9273e-04
+/gps/hist/point 1.5129 1.5632e-04
+/gps/hist/point 1.6223 1.2679e-04
+/gps/hist/point 1.7395 1.0285e-04
+/gps/hist/point 1.8652 8.3420e-05
+/gps/hist/point 2.0000 6.7669e-05
+/gps/hist/inter Lin
+
+
+/gps/pos/type Plane
+/gps/pos/shape Square
+/gps/pos/halfx 70 cm
+/gps/pos/halfy 70 cm
+
+/process/em/fluo true
+/process/em/auger true
+/process/em/pixe false
+
+/gps/pos/centre 128.558 0.000 153.209
+/gps/pos/rot1 -0.000 1.000 0.000
+/gps/pos/rot2 0.766 0.000 -0.643
+/gps/direction -0.643 -0.000 -0.766
+
+/run/beamOn 100
diff --git a/grb44.mac b/grb44.mac
new file mode 100644
index 0000000000000000000000000000000000000000..8b8398e44b446c22f4773e3c98da146d983a541e
--- /dev/null
+++ b/grb44.mac
@@ -0,0 +1,124 @@
+# Input spectrum
+/gps/particle gamma
+/gps/ene/type Arb
+/gps/hist/type arb
+/gps/ene/min    0.002 MeV
+/gps/ene/max    2.000 MeV
+/gps/hist/point 0.0020 4.9007e+01
+/gps/hist/point 0.0021 4.5642e+01
+/gps/hist/point 0.0023 4.2498e+01
+/gps/hist/point 0.0025 3.9570e+01
+/gps/hist/point 0.0026 3.6836e+01
+/gps/hist/point 0.0028 3.4288e+01
+/gps/hist/point 0.0030 3.1912e+01
+/gps/hist/point 0.0033 2.9696e+01
+/gps/hist/point 0.0035 2.7629e+01
+/gps/hist/point 0.0037 2.5702e+01
+/gps/hist/point 0.0040 2.3905e+01
+/gps/hist/point 0.0043 2.2229e+01
+/gps/hist/point 0.0046 2.0666e+01
+/gps/hist/point 0.0050 1.9210e+01
+/gps/hist/point 0.0053 1.7851e+01
+/gps/hist/point 0.0057 1.6584e+01
+/gps/hist/point 0.0061 1.5403e+01
+/gps/hist/point 0.0065 1.4301e+01
+/gps/hist/point 0.0070 1.3275e+01
+/gps/hist/point 0.0075 1.2317e+01
+/gps/hist/point 0.0081 1.1424e+01
+/gps/hist/point 0.0087 1.0593e+01
+/gps/hist/point 0.0093 9.8175e+00
+/gps/hist/point 0.0100 9.0939e+00
+/gps/hist/point 0.0107 8.4207e+00
+/gps/hist/point 0.0114 7.7929e+00
+/gps/hist/point 0.0123 7.2077e+00
+/gps/hist/point 0.0132 6.6626e+00
+/gps/hist/point 0.0141 6.1547e+00
+/gps/hist/point 0.0151 5.6817e+00
+/gps/hist/point 0.0162 5.2411e+00
+/gps/hist/point 0.0174 4.8309e+00
+/gps/hist/point 0.0187 4.4489e+00
+/gps/hist/point 0.0200 4.0936e+00
+/gps/hist/point 0.0214 3.7629e+00
+/gps/hist/point 0.0230 3.4554e+00
+/gps/hist/point 0.0247 3.1695e+00
+/gps/hist/point 0.0264 2.9036e+00
+/gps/hist/point 0.0283 2.6567e+00
+/gps/hist/point 0.0304 2.4273e+00
+/gps/hist/point 0.0326 2.2145e+00
+/gps/hist/point 0.0350 2.0172e+00
+/gps/hist/point 0.0375 1.8343e+00
+/gps/hist/point 0.0402 1.6650e+00
+/gps/hist/point 0.0431 1.5083e+00
+/gps/hist/point 0.0462 1.3636e+00
+/gps/hist/point 0.0495 1.2299e+00
+/gps/hist/point 0.0531 1.1067e+00
+/gps/hist/point 0.0570 9.9324e-01
+/gps/hist/point 0.0611 8.8895e-01
+/gps/hist/point 0.0655 7.9321e-01
+/gps/hist/point 0.0702 7.0557e-01
+/gps/hist/point 0.0753 6.2546e-01
+/gps/hist/point 0.0807 5.5239e-01
+/gps/hist/point 0.0866 4.8597e-01
+/gps/hist/point 0.0928 4.2574e-01
+/gps/hist/point 0.0995 3.7128e-01
+/gps/hist/point 0.1067 3.2223e-01
+/gps/hist/point 0.1144 2.7820e-01
+/gps/hist/point 0.1227 2.3885e-01
+/gps/hist/point 0.1316 2.0385e-01
+/gps/hist/point 0.1411 1.7287e-01
+/gps/hist/point 0.1513 1.4558e-01
+/gps/hist/point 0.1622 1.2172e-01
+/gps/hist/point 0.1739 1.0096e-01
+/gps/hist/point 0.1865 8.3027e-02
+/gps/hist/point 0.2000 6.7669e-02
+/gps/hist/point 0.2145 5.4886e-02
+/gps/hist/point 0.2300 4.4522e-02
+/gps/hist/point 0.2466 3.6112e-02
+/gps/hist/point 0.2644 2.9293e-02
+/gps/hist/point 0.2835 2.3760e-02
+/gps/hist/point 0.3040 1.9272e-02
+/gps/hist/point 0.3260 1.5633e-02
+/gps/hist/point 0.3495 1.2680e-02
+/gps/hist/point 0.3748 1.0285e-02
+/gps/hist/point 0.4018 8.3421e-03
+/gps/hist/point 0.4309 6.7668e-03
+/gps/hist/point 0.4620 5.4887e-03
+/gps/hist/point 0.4954 4.4521e-03
+/gps/hist/point 0.5312 3.6110e-03
+/gps/hist/point 0.5696 2.9292e-03
+/gps/hist/point 0.6108 2.3760e-03
+/gps/hist/point 0.6549 1.9272e-03
+/gps/hist/point 0.7022 1.5632e-03
+/gps/hist/point 0.7530 1.2680e-03
+/gps/hist/point 0.8074 1.0285e-03
+/gps/hist/point 0.8658 8.3423e-04
+/gps/hist/point 0.9283 6.7670e-04
+/gps/hist/point 0.9954 5.4888e-04
+/gps/hist/point 1.0673 4.4519e-04
+/gps/hist/point 1.1445 3.6112e-04
+/gps/hist/point 1.2272 2.9293e-04
+/gps/hist/point 1.3159 2.3760e-04
+/gps/hist/point 1.4110 1.9273e-04
+/gps/hist/point 1.5129 1.5632e-04
+/gps/hist/point 1.6223 1.2679e-04
+/gps/hist/point 1.7395 1.0285e-04
+/gps/hist/point 1.8652 8.3420e-05
+/gps/hist/point 2.0000 6.7669e-05
+/gps/hist/inter Lin
+
+
+/gps/pos/type Plane
+/gps/pos/shape Square
+/gps/pos/halfx 70 cm
+/gps/pos/halfy 70 cm
+
+/process/em/fluo true
+/process/em/auger true
+/process/em/pixe false
+
+/gps/pos/centre 98.481 82.635 153.209
+/gps/pos/rot1 -0.643 0.766 0.000
+/gps/pos/rot2 0.587 0.492 -0.643
+/gps/direction -0.492 -0.413 -0.766
+
+/run/beamOn 100
diff --git a/include/DetectorConstruction.hh b/include/DetectorConstruction.hh
index 2fe9c91ea5c7ea4bf6518a9a5f8cd21610a7d874..6eb9330417961f79540c8797257805499f00e4cd 100644
--- a/include/DetectorConstruction.hh
+++ b/include/DetectorConstruction.hh
@@ -82,6 +82,10 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         // Methods to get the polypropylene dimensions
         G4double GetPolypropThick()           {return poly_thick;};
 
+        // Methods to get the MLI dimensions
+        G4double GetKapThick()              {return kap_thick;};
+        G4double GetAlumThick()             {return al_thick;};
+
         // Methods to get the materials
         G4Material* GetScintMaterial()        	{return scintMaterial;};
         G4Material* GetCollSideMaterial()       {return collSideMaterial;};
@@ -90,6 +94,8 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         G4Material* GetMaskMaterial()        	{return maskMaterial;};
         G4Material* GetOptCouplerMaterial()     {return optCouplerMaterial;};
         G4Material* GetPolyMaterial()           {return polypropMaterial;};
+        G4Material* GetKapMaterial()            {return kapMaterial;};
+        G4Material* GetAlumMaterial()           {return alumMaterial;};
 
 		// Set methods
 		// Method to set the world dimensions
@@ -136,6 +142,10 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         // Methods to set the polypropylene dimensions
         void SetPolypropThick(G4double poly)      {poly_thick = poly;};
 
+        // Methods to set the MLI dimensions
+        void SetKapThick(G4double kap)      {kap_thick = kap;};
+        void SetAlumThick(G4double alum)      {al_thick = alum;};
+
 		// Methods to set the materials
 		void SetScintMaterial                   (G4String);
         void SetCollSideMaterial                (G4String);
@@ -146,6 +156,8 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         void SetCollUpper2Material              (G4String);
         void SetOptCouplerMaterial              (G4String);
         void SetPolyMaterial                    (G4String);
+        void SetKapMaterial                     (G4String);
+        void SetAlumMaterial                    (G4String);
 
 	    // Print a list of parameters
 		void PrintParameters();
@@ -177,10 +189,14 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         G4LogicalVolume* coll_upper2Yp_log;
         G4LogicalVolume* coll_upper2Ym_log;
         G4LogicalVolume* polyprop_log;
+        G4LogicalVolume* kapton_log;
+        G4LogicalVolume* aluminum_log;
+        G4LogicalVolume* pcb_log;
 
         // Parameterisations
 		G4VPVParameterisation* scintParam;
         G4VPVParameterisation* maskParam;
+        G4VPVParameterisation* pcbParam;
 
 		// Physical volumes
 		G4VPhysicalVolume* experimentalHall_phys;
@@ -204,6 +220,9 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         G4VPhysicalVolume* coll_upper2Yp_phys;
         G4VPhysicalVolume* coll_upper2Ym_phys;
         G4VPhysicalVolume* polyprop_phys;
+        G4VPhysicalVolume* kapton_phys;
+        G4VPhysicalVolume* aluminum_phys;
+        G4VPhysicalVolume* pcb_phys;
 
 
 		// World dimensions
@@ -250,6 +269,10 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         // Polypropylene layer dimensions
         G4double poly_thick;
 
+        // MLI layer dimensions
+        G4double kap_thick;
+        G4double al_thick;
+
         // Materials
 		G4Material* defaultMaterial;
         G4Material*	sddMaterial;
@@ -261,6 +284,9 @@ class DetectorConstruction : public G4VUserDetectorConstruction
         G4Material* collUpper2Material;
         G4Material*	optCouplerMaterial;
         G4Material* polypropMaterial;
+        G4Material* kapMaterial;
+        G4Material* alumMaterial;
+        G4Material* FR4;
 
 
 };
diff --git a/include/PCBParameterisation.hh b/include/PCBParameterisation.hh
new file mode 100644
index 0000000000000000000000000000000000000000..5fba6bbcf7c8d9858087aabed5eb56d8fb34766a
--- /dev/null
+++ b/include/PCBParameterisation.hh
@@ -0,0 +1,59 @@
+#ifndef PCBParameterisation_H
+#define PCBParameterisation_H 1
+
+#include "globals.hh"
+#include "G4VPVParameterisation.hh"
+
+class G4VPhysicalVolume;
+class G4Box;
+
+// Dummy declarations to get rid of warnings...
+class G4Trd;
+class G4Trap;
+class G4Cons;
+class G4Orb;
+class G4Sphere;
+class G4Torus;
+class G4Para;
+class G4Box;
+class G4Hype;
+class G4Tubs;
+class G4Polycone;
+class G4Polyhedra;
+class G4BREPSolidPolyhedra;
+
+class PCBParameterisation : public G4VPVParameterisation
+{
+    public:
+        PCBParameterisation(G4double fSpacing, G4double fLength, G4double fHeight, G4double fThick, G4int fSide);
+
+        virtual ~PCBParameterisation();
+
+        void ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const;
+
+
+    private:  // Dummy declarations to get rid of warnings...
+        void ComputeDimensions (G4Trd&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Trap&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Cons&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Sphere&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Orb&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Torus&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Para&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Box&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Hype&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Tubs&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Polycone&,const G4int,const G4VPhysicalVolume*) const {}
+        void ComputeDimensions (G4Polyhedra&,const G4int,const G4VPhysicalVolume*) const {}
+//        void ComputeDimensions (G4BREPSolidPolyhedra&,const G4int,const G4VPhysicalVolume*) const {}
+
+    private:
+        G4double fSpacing;
+        G4double fLength;
+        G4double fHeight;
+        G4double fThick;
+        G4int fSide;
+};
+
+
+#endif
\ No newline at end of file
diff --git a/python/__pycache__/convertRoot2Fits.cpython-312.pyc b/python/__pycache__/convertRoot2Fits.cpython-312.pyc
index 3b4e64cafa2fcf42cd19ac6ee2f2441a270d1f8f..543c3e9d727e44404f702de3d652f79572d5d9bf 100644
Binary files a/python/__pycache__/convertRoot2Fits.cpython-312.pyc and b/python/__pycache__/convertRoot2Fits.cpython-312.pyc differ
diff --git a/python/__pycache__/convertRoot2Fits.cpython-38.pyc b/python/__pycache__/convertRoot2Fits.cpython-38.pyc
index f5a944a5abe16fceea8d616c9f72a74aac424ce6..92122c29b865e2c5413025cad8e5c413a55ea906 100644
Binary files a/python/__pycache__/convertRoot2Fits.cpython-38.pyc and b/python/__pycache__/convertRoot2Fits.cpython-38.pyc differ
diff --git a/python/__pycache__/data.cpython-312.pyc b/python/__pycache__/data.cpython-312.pyc
index e2be926d18e03674de011d500a71930904e487ce..02396291acae1954161a00ee91799777b763231f 100644
Binary files a/python/__pycache__/data.cpython-312.pyc and b/python/__pycache__/data.cpython-312.pyc differ
diff --git a/python/__pycache__/macro.cpython-312.pyc b/python/__pycache__/macro.cpython-312.pyc
index d53c88685e929b59ca57df3e93bb9633eb647b60..e6cb38914f7877cf21d707ab0d6b7db02f916909 100644
Binary files a/python/__pycache__/macro.cpython-312.pyc and b/python/__pycache__/macro.cpython-312.pyc differ
diff --git a/python/__pycache__/macro.cpython-38.pyc b/python/__pycache__/macro.cpython-38.pyc
index 31ca05152ccbec3956f9ba566334efa820ab1b60..b9c92f65d413ded729dd7a2f3738c05c9dc830fe 100644
Binary files a/python/__pycache__/macro.cpython-38.pyc and b/python/__pycache__/macro.cpython-38.pyc differ
diff --git a/python/aeFF.py b/python/aeFF.py
index 75c218ffb33fdea102dd6efdfc35ee0fb3cec446..1816602c41183cd40badc343edea33b99f5202c2 100644
--- a/python/aeFF.py
+++ b/python/aeFF.py
@@ -16,37 +16,37 @@ def main():
     data_estraction(file_dat)
     
     #2 Filter data
-    data = np.loadtxt(file_dat, dtype=str)
+    # data = np.loadtxt(file_dat, dtype=str)
     
-    energy = data[:, 0].astype(float)
-    ratio_X = data[:, 1].astype(float)
-    ratio_S = data[:, 2].astype(float)
-    theta = data[:, 3].astype(float)
-    phi = data[:, 4].astype(float)
-    X_en_dep_file = data[:, 5]
-    S_en_dep_file = data[:, 6]
+    # energy = data[:, 0].astype(float)
+    # ratio_X = data[:, 1].astype(float)
+    # ratio_S = data[:, 2].astype(float)
+    # theta = data[:, 3].astype(float)
+    # phi = data[:, 4].astype(float)
+    # X_en_dep_file = data[:, 5]
+    # S_en_dep_file = data[:, 6]
 
     # Ottieni tutte le combinazioni uniche di theta e phi
-    angle_combinations = np.unique(np.column_stack((theta, phi)), axis=0)
+    #angle_combinations = np.unique(np.column_stack((theta, phi)), axis=0)
     
     # Inizializza due liste per tracciare i dati per conti X e conti S
-    plot_data_X = []
-    plot_data_S = []
+    # plot_data_X = []
+    # plot_data_S = []
     
     # Cicla attraverso tutte le combinazioni uniche di theta e phi
-    for combination in angle_combinations:  # estrae dall'array due valori e gli da il nome
-        theta_val = combination[0]
-        phi_val = combination[1]
+    #for combination in angle_combinations:  # estrae dall'array due valori e gli da il nome
+        # theta_val = combination[0]
+        # phi_val = combination[1]
 
-        # Maschera booleana per filtrare i dati per la combinazione corrente di theta e phi
-        # confronta i dati del file con i dati dell'array creato
-        mask = (theta == theta_val) & (phi == phi_val)
+        # # Maschera booleana per filtrare i dati per la combinazione corrente di theta e phi
+        # # confronta i dati del file con i dati dell'array creato
+        # mask = (theta == theta_val) & (phi == phi_val)
 
-        energy_filtered = energy[mask]
-        ratio_X_filtered = ratio_X[mask]
-        ratio_S_filtered = ratio_S[mask]
-        X_en_dep_file_filtered = X_en_dep_file[mask]
-        S_en_dep_file_filtered = S_en_dep_file[mask]
+        # energy_filtered = energy[mask]
+        # ratio_X_filtered = ratio_X[mask]
+        # ratio_S_filtered = ratio_S[mask]
+        # X_en_dep_file_filtered = X_en_dep_file[mask]
+        # S_en_dep_file_filtered = S_en_dep_file[mask]
         
         # Salva i dati per il plot
         #plot_data_X.append((energy_filtered, ratio_X_filtered, theta_val, phi_val))
diff --git a/python/data.py b/python/data.py
index af7f0a61d383207ae9887290e277a0fa2fcb6cab..23148c0496e900e1ab2a3509065dfab5028e9035 100644
--- a/python/data.py
+++ b/python/data.py
@@ -8,7 +8,10 @@ from noisy import add_noise_X, add_noise_S
 
 def write_fits_dep(energy, en_primary, theta, phi, type, en_dep_noisy, en_dep, name_id, pos_id, x_pixel, y_pixel):  # ! รจ qui che decido quali informazioni sulla simulazione voglio nei file fits_dep
     
+    x1_pixel = (pos_id // 89) +1
+    y1_pixel = (pos_id % 89) +1
     
+    X_Y = np.vstack([x1_pixel, y1_pixel]).T
     
     # Write FITS file
     # "Null" primary array
@@ -18,14 +21,17 @@ def write_fits_dep(energy, en_primary, theta, phi, type, en_dep_noisy, en_dep, n
     tbhdu = pyfits.BinTableHDU.from_columns([
         #pyfits.Column(name='En_dep_Noise', format='1D', unit='keV', array = en_dep_noisy),
         pyfits.Column(name='En_Primary', format='1D', unit='keV', array = en_primary),
-        #pyfits.Column(name='(X,Y)', format='2I', array = (x_pixel,y_pixel))       
+        #pyfits.Column(name=name_id, format='1I', array = pos_id),
+        pyfits.Column(name='X_Y', format='2J', array = X_Y), 
+        pyfits.Column(name='X_Pixel_cm', format='1D', unit='cm', array = x_pixel),
+        pyfits.Column(name='Y_Pixel_cm', format='1D', unit='cm', array = y_pixel)    
         #pyfits.Column(name='En_dep', format='1D', unit='keV', array = en_dep)
         ])
     
     tbhdu.header['EXTNAME'] = 'EVENTS'
     tbhdu.header['TELESCOP'] = 'THESEUS'
     tbhdu.header['INSTRUME'] = 'XGIS'
-    tbhdu.header['COMMENT'] = "Simulated GRB spectrum, Band funcition alpha1 = -1, alpha2 = -3, Ebreak = 100 "
+    tbhdu.header['COMMENT'] = "Simulated GRB spectrum, Band function alpha1 = -1, alpha2 = -3, Ebreak = 100 keV"
     tbhdu.header['TUNIT1'] = "keV" 
     tbhdu.header['TYPE'] = type
     #tbhdu.header['ENERGY'] = energy
@@ -85,12 +91,12 @@ def get_data(files):
 def write_results(file_dat, results):
 
     with open(file_dat, "w") as f:
-        for energy, en_primary, ratio_X, ratio_S, theta, phi, X_en_dep_noisy, S_en_dep_noisy, X_en_dep, S_en_dep, pixel_id, scint_id in results:
+        for energy, en_primary, ratio_X, ratio_S, theta, phi, X_en_dep_noisy, S_en_dep_noisy, X_en_dep, S_en_dep, pixel_id, scint_id, x_pixel, y_pixel in results:
             
-            X_fits = write_fits_dep(energy, en_primary, theta, phi, 'X', X_en_dep_noisy, X_en_dep, 'Pixel_ID', pixel_id)
-            S_fits = write_fits_dep(energy, en_primary, theta, phi, 'S', S_en_dep_noisy, S_en_dep, 'Scint_ID', scint_id)
+            X_fits = write_fits_dep(energy, en_primary, theta, phi, 'X', X_en_dep_noisy, X_en_dep, 'Pixel_ID', pixel_id, x_pixel, y_pixel)
+            S_fits = write_fits_dep(energy, en_primary, theta, phi, 'S', S_en_dep_noisy, S_en_dep, 'Scint_ID', scint_id, x_pixel, y_pixel)
             
-            f.write(f"{energy:.1f}\t{ratio_X:.3f}\t{ratio_S:.3f}\t{theta}\t{phi}\t{X_fits}\t{S_fits}\n")
+            #f.write(f"{energy:.1f}\t{ratio_X:.3f}\t{ratio_S:.3f}\t{theta}\t{phi}\t{X_fits}\t{S_fits}\n")
 
 
 
diff --git a/python/main.py b/python/main.py
index 1267b68ec1062e57d7e27e9ac8d132bc29e2d171..64daed59639b0543e0f4b0e577c4e2b81c7dbf77 100644
--- a/python/main.py
+++ b/python/main.py
@@ -22,17 +22,17 @@ def main():
     (rot1_x, rot1_y, rot1_z), (rot2_x, rot2_y, rot2_z) = tangent_plane(theta_rad, phi_rad)
     dir_x, dir_y, dir_z = beam_direction(theta_rad, phi_rad)
 
-    macro_name = "primo.mac"
+    macro_name = "grb44.mac"
     create_macro(macro_name,  
                     energy, x, y, z,
                         rot1_x, rot1_y, rot1_z,
                             rot2_x, rot2_y, rot2_z,
                                 dir_x, dir_y, dir_z)
     
+    
+    #run_macro(macro_name)
 
-    run_macro(macro_name)
-
-    generate_fits(energy, theta_deg, phi_deg)
+    #generate_fits(energy, theta_deg, phi_deg)
 
 if __name__ == "__main__":
     main()
diff --git a/src/DetectorConstruction.cc b/src/DetectorConstruction.cc
index 52208e36c890e5a9a8f9958c3cba6e28750eb695..25e7ff7964b51bfb67444b013607a12da9631af6 100644
--- a/src/DetectorConstruction.cc
+++ b/src/DetectorConstruction.cc
@@ -1,6 +1,7 @@
 #include "DetectorConstruction.hh"
 #include "ModuleParameterisation.hh"
 #include "MaskParameterisation.hh"
+#include "PCBParameterisation.hh"
 #include "SDDSensitiveDetector.hh"
 #include "SensitiveDetector.hh"
 
@@ -53,13 +54,16 @@ DetectorConstruction::DetectorConstruction()
     sddUpper_log(0),
     sddLower_log(0),
     optCoupler_log(0),
+    polyprop_log(0),
     coll_sideXp_log(0),
     coll_sideXm_log(0),
     coll_sideYp_log(0),
     coll_sideYm_log(0),
     bus1_log(0),
-bus2_log(0),
+    bus2_log(0),
     mask_log(0),
+    kapton_log(0),
+    aluminum_log(0),
     coll_upper1Xp_log(0),
     coll_upper1Xm_log(0),
     coll_upper1Yp_log(0),
@@ -75,13 +79,16 @@ bus2_log(0),
     sddUpper_phys(0),
     sddLower_phys(0),
     optCoupler_phys(0),
+    polyprop_phys(0),
     coll_sideXp_phys(0),
     coll_sideXm_phys(0),
     coll_sideYp_phys(0),
     coll_sideYm_phys(0),
     bus1_phys(0),
-bus2_phys(0),
+    bus2_phys(0),
     mask_phys(0),
+    kapton_phys(0),
+    aluminum_phys(0),
     coll_upper1Xp_phys(0),
     coll_upper1Xm_phys(0),
     coll_upper1Yp_phys(0),
@@ -171,6 +178,11 @@ void DetectorConstruction::DefineParameters()
     G4double opt_t = read *mm;
     config.readInto(read, "POLYPROPYLENE_THICK", 15.);
     G4double p_t = read *um;
+    config.readInto(read, "KAPTON_THICK", 7.6);
+    G4double k_t = read *um;
+    config.readInto(read, "ALUMINUM_THICK", 0.2);
+    G4double a_t = read *um;
+
 
 
 	SetScintX(s_x) ;
@@ -195,6 +207,8 @@ void DetectorConstruction::DefineParameters()
     SetCollUpper2Height(cu2_h) ;
     SetOptCouplerThick(opt_t) ;
     SetPolypropThick(p_t) ;
+    SetKapThick(k_t) ;
+    SetAlumThick(a_t) ;
 
 
 	// Materials
@@ -217,6 +231,10 @@ void DetectorConstruction::DefineParameters()
     SetOptCouplerMaterial(readm);
     config.readInto<G4String>(readm, "POLYPROPYLENE_MATERIAL", "G4_POLYPROPYLENE");
     SetPolyMaterial(readm);
+    config.readInto<G4String>(readm, "KAPTON_MATERIAL", "G4_KAPTON");
+    SetKapMaterial(readm);
+    config.readInto<G4String>(readm, "ALUMINUM_MATERIAL", "G4_Al");
+    SetAlumMaterial(readm);
 
 }
 
@@ -229,13 +247,13 @@ void DetectorConstruction::DefineMaterials()
 	G4double density;	// Density
 	G4int nel;			// Number of elements in a compound
     G4int natoms;
-//	G4int ncomponents;	// Number of components in a mixture
-//	G4double fractionmass;
+	G4int ncomponents;	// Number of components in a mixture
+	G4double fractionmass;
 	
 	// Elements
 	G4Element*  H  = new G4Element("Hydrogen"  , "H" , z = 1. , a =  1.008*g/mole);
 	G4Element*  He = new G4Element("Helium"    , "He", z = 2. , a =  4.003*g/mole);
-    // G4Element*  C  = new G4Element("Carbon"    , "C" , z = 6. , a =  12.01*g/mole);
+    G4Element*  C  = new G4Element("Carbon"    , "C" , z = 6. , a =  12.01*g/mole);
     G4Element*  N  = new G4Element("Nitrogen"  , "N" , z = 7. , a =  14.01*g/mole);
     G4Element*  O  = new G4Element("Oxygen"    , "O" , z = 8. , a =  16.00*g/mole);
     // G4Element*  Na = new G4Element("Sodium"    , "Na", z = 11., a =  22.99*g/mole);
@@ -289,6 +307,8 @@ void DetectorConstruction::DefineMaterials()
     G4Material* G4_Al = man->FindOrBuildMaterial("G4_Al");
     G4Material* G4_Fe = man->FindOrBuildMaterial("G4_Fe");
     G4Material* G4_POLYPROPYLENE = man->FindOrBuildMaterial("G4_POLYPROPYLENE");
+    G4Material* G4_KAPTON = man->FindOrBuildMaterial("G4_KAPTON");
+    G4Material* G4_SILICON_DIOXIDE = man->FindOrBuildMaterial("G4_SILICON_DIOXIDE");
 
     // LaBr3O
     G4Material* LaBr3 = new G4Material("LaBr3", density = 5.06 *g/cm3, nel = 2);
@@ -299,6 +319,36 @@ void DetectorConstruction::DefineMaterials()
     G4Material* Silicone = new G4Material("Silicone", density = 1.08 *g/cm3, nel = 2);
     Silicone -> AddElement(Si, natoms=1);
     Silicone -> AddElement(O,  natoms=2);
+
+    // Diglycidyl Ether of Bisphenol A (First compound of epoxy resin Epotek 301-1)
+    G4Material* Epoxy_1 = new G4Material("Epoxy_1", density = 1.16*g/cm3, nel = 3);
+    Epoxy_1 -> AddElement(C, natoms=19);
+    Epoxy_1 -> AddElement(H, natoms=20);
+    Epoxy_1 -> AddElement(O, natoms=4);
+    
+    // 1,4-Butanediol Diglycidyl Ether (Second compound of epoxy resin Epotek 301-1)
+    G4Material* Epoxy_2 = new G4Material("Epoxy_2", density = 1.10*g/cm3, nel = 3);
+    Epoxy_2 -> AddElement(C, natoms=10);
+    Epoxy_2 -> AddElement(H, natoms=18);
+    Epoxy_2 -> AddElement(O, natoms=4);
+    
+    // 1,6-Hexanediamine 2,2,4-trimetyl (Third compound of epoxy resin Epotek 301-1)
+    G4Material* Epoxy_3 = new G4Material("Epoxy_3", density = 1.16*g/cm3, nel = 3);
+    Epoxy_3 -> AddElement(C, natoms=9);
+    Epoxy_3 -> AddElement(H, natoms=22);
+    Epoxy_3 -> AddElement(N, natoms=2);
+    
+    // Epoxy resin Epotek 301-1
+    G4Material* Epoxy_Resin = new G4Material("Epoxy_Resin", density = 1.19*g/cm3, ncomponents=3);
+    Epoxy_Resin -> AddMaterial(Epoxy_1, fractionmass=56*perCent);
+    Epoxy_Resin -> AddMaterial(Epoxy_2, fractionmass=24*perCent);
+    Epoxy_Resin -> AddMaterial(Epoxy_3, fractionmass=20*perCent);
+    
+    // FR4 PCB material
+    G4Material* FR4 = new G4Material("FR4", density = 1.8*g/cm3, ncomponents=2);
+    FR4 -> AddMaterial(G4_SILICON_DIOXIDE, fractionmass=60*perCent);
+    FR4 -> AddMaterial(Epoxy_Resin,  fractionmass=40*perCent);
+
 	// Default materials of the World: vacuum
 	defaultMaterial  = Vacuum;
 }
@@ -331,7 +381,6 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
 											0,
 											false,
 											0);
-
     
     
     // ! Scintillator
@@ -346,8 +395,10 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
     G4double scint_container_side_z = scint_z;
     G4Box* scint_container_box = new G4Box("scint_container_box",
                                             scint_container_side_x/2., scint_container_side_y/2., scint_container_side_z/2.);
+
     G4LogicalVolume* scint_container_log = new G4LogicalVolume(scint_container_box,
                                                                 defaultMaterial, "scint_container_log", 0, 0, 0);
+
     G4VPhysicalVolume* scint_container_phys = new G4PVPlacement(0,
                                                                 G4ThreeVector(0.,0.,-scint_z/2.),
                                                                 scint_container_log,
@@ -370,9 +421,7 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
 									 numberOfBars,      // Number of replicas
 									 scintParam);   		// The parametrisation
 
-    
-									
-									
+
     // ! Side Collimator
     
     G4double coll_side_x = scint_container_side_x;
@@ -534,7 +583,51 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
                                         false,
                                         0);
 
+
+    // ! PCB
+
+    // Solid
+    G4double pcb_side_x = coll_side_x *cm;
+    G4double pcb_side_y = coll_side_y *cm;
+    G4double pcb_thick  = 1.6 *mm;       // ! si potrebbe mettere come parametro
+    G4double pcb_height = optCoupler_thick+sdd_thick+pcb_thick/2. *cm;
+
+    G4Box* pcb_container_box = new G4Box("pcb_container_box", pcb_side_x/2., pcb_side_y/2., pcb_thick/2.);
     
+    // Logical
+    G4LogicalVolume* pcb_container_log = new G4LogicalVolume(pcb_container_box, defaultMaterial, "pcb_container_log", 0, 0, 0);
+
+    // Physical
+    G4VPhysicalVolume* pcb_container_phys = new G4PVPlacement(0,
+                                                            G4ThreeVector(0,0,pcb_height),
+                                                            pcb_container_log,
+                                                            "pcb_container_phys",
+                                                            experimentalHall_log,
+                                                            false,
+                                                            0);
+
+	// Solid
+    G4double pcb_elem_side_x = 3.*mm;
+    G4double pcb_elem_side_y = pcb_side_y;
+
+	G4Box* pcb_box = new G4Box("pcb_box", pcb_elem_side_x/2., pcb_elem_side_y/2., pcb_thick/2.);
+	
+    // Logical
+	pcb_log = new G4LogicalVolume(pcb_box, FR4, "pcb_log", 0, 0, 0);
+    
+	// Physical
+    G4int n_rep = (n_side-1)/2; // repliche di PCB usando  il numero di scintillatori per side
+
+	pcbParam = new PCBParameterisation(pcb_elem_side_x, pcb_elem_side_y, pcb_height, pcb_thick, n_rep);
+	
+	pcb_phys = new G4PVParameterised("pcb_phys",       	// their name
+									 pcb_log,    	        // their logical volume
+									 pcb_container_log,  // Mother logical volume
+									 kXAxis,          		// Are placed along this axis 
+									 n_rep,            // Number of replicas
+									 pcbParam);   		// The parametrisation
+
+
     // ! Mask
 
     // Solid
@@ -596,7 +689,6 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
     } else {
         G4cerr << "Errore durante il caricamento del file mask.dat." << G4endl;
     }
-
     
     // mask_phys = new G4PVParameterised("mask_phys",           // their name
     //                                    mask_log,                // their logical volume
@@ -605,6 +697,38 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
     //                                    n_mask_elem_replicas,      // Number of replicas
     //                                    maskParam);           // The parametrisation
 
+
+    // ! MLI Kapton + Aluminum
+
+    // Solid
+    G4Box* kapton_box = new G4Box("kapton_box", mask_side_x/2., mask_side_y/2., kap_thick/2.);
+    G4Box* aluminum_box = new G4Box("aluminum_box", mask_side_x/2., mask_side_y/2., al_thick/2.);
+
+    // Logical
+    kapton_log = new G4LogicalVolume(kapton_box, kapMaterial, "kapton_log", 0, 0, 0);
+    aluminum_log = new G4LogicalVolume(aluminum_box, alumMaterial, "aluminum_log", 0, 0, 0);
+
+    // Physical
+    G4double kapton_x = 0;
+    G4double kapton_y = 0;
+    G4double kapton_z = optCoupler_thick + sdd_thick + mask_focalDistance + mask_thick + kap_thick/2.;
+    kapton_phys = new G4PVPlacement(0,
+                                    G4ThreeVector(kapton_x,kapton_y,kapton_z),
+                                    kapton_log,
+                                    "kapton_phys",
+                                    experimentalHall_log,
+                                    false,
+                                    0);
+    G4double aluminum_x = 0;
+    G4double aluminum_y = 0;
+    G4double aluminum_z = optCoupler_thick + sdd_thick + mask_focalDistance + mask_thick + kap_thick + al_thick/2.;
+    aluminum_phys = new G4PVPlacement(0,
+                                    G4ThreeVector(aluminum_x,aluminum_y,aluminum_z),
+                                    aluminum_log,
+                                    "aluminum_phys",
+                                    experimentalHall_log,
+                                    false,
+                                    0);
     
     
     // ! Upper Collimator, internal
@@ -637,8 +761,8 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
     double xrotTheta = atan((mask_side_x + coll_upper1_thick/2 - base_side_x)/(2*mask_focalDistance));
     double yrotTheta = atan((mask_side_y + coll_upper1_thick/2 - base_side_y)/(2*mask_focalDistance));
 
-    //G4cout << "xrotTheta, yrotTheta (rad) " << xrotTheta << " " << yrotTheta << G4endl;
-    //G4cout << "xrotTheta, yrotTheta (deg) " << 180/3.141592*(xrotTheta) << " " << 180/3.141592*(yrotTheta) << G4endl;
+    // G4cout << "xrotTheta, yrotTheta (rad) " << xrotTheta << " " << yrotTheta << G4endl;
+    // G4cout << "xrotTheta, yrotTheta (deg) " << 180/3.141592*(xrotTheta) << " " << 180/3.141592*(yrotTheta) << G4endl;
 
     // Solid (for yPlus, yMinus)
     G4double   pDzY   = mask_focalDistance/cos(yrotTheta)/2. ;              // half-height
@@ -820,13 +944,14 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
                                             experimentalHall_log,
                                             false,
                                             0);
-    
-    
+
+
     // ! Polypropylene
 
     // Solid
-    G4double poly_side_x = coll_side_x + 2*coll_side_thick + 2*10.* tan(xrotTheta) *cm;
-    G4double poly_side_y = coll_side_y + 2*coll_side_thick + 2*10.* tan(yrotTheta) *cm;
+    G4double poly_height = 10.*cm;
+    G4double poly_side_x = coll_side_x + (2*coll_side_thick) + (2*poly_height) * tan(xrotTheta);
+    G4double poly_side_y = coll_side_y + (2*coll_side_thick) + (2*poly_height) * tan(yrotTheta);
 
     G4Box* polyprop_box = new G4Box("polyprop_box", poly_side_x/2., poly_side_y/2., poly_thick/2.);
 
@@ -836,7 +961,7 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
     // Physical
     G4double polyprop_x = 0;
     G4double polyprop_y = 0;
-    G4double polyprop_z = 10.*cm;
+    G4double polyprop_z = poly_height;
     polyprop_phys = new G4PVPlacement(0,
                                     G4ThreeVector(polyprop_x,polyprop_y,polyprop_z),
                                     polyprop_log,
@@ -851,11 +976,14 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
 	G4Colour white   (1.0, 1.0, 1.0);
 	G4Colour red     (1.0, 0.0, 0.0);
 	G4Colour green   (0.0, 1.0, 0.0);
+    G4Colour dgreen  (0.0, 0.8, 0.0);
 	G4Colour blue    (0.0, 0.0, 1.0);
 	G4Colour yellow  (1.0, 1.0, 0.0);
 	G4Colour magenta (1.0, 0.0, 1.0);
 	G4Colour cyan    (0.0, 1.0, 1.0);
-    G4Colour grey    (0.5, 0.5, 0.5);
+    G4Colour brown   (0.65, 0.16, 0.16);
+    G4Colour gold    (1.0, 0.84, 0.0);
+    G4Colour silver  (0.75, 0.75, 0.75);
 
 	experimentalHall_log -> SetVisAttributes(G4VisAttributes::GetInvisible());  
 
@@ -877,12 +1005,27 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
     G4VisAttributes* OptCouplerVisAtt= new G4VisAttributes(cyan);
     optCoupler_log -> SetVisAttributes(OptCouplerVisAtt);
 
+//    G4VisAttributes* PCBContainerVisAtt= new G4VisAttributes(white);
+    pcb_container_log -> SetVisAttributes(G4VisAttributes::GetInvisible());
+
+    G4VisAttributes* PCBVisAtt= new G4VisAttributes(dgreen);
+    pcb_log -> SetVisAttributes(PCBVisAtt);
+
+    G4VisAttributes* PolyVisAtt= new G4VisAttributes(brown);
+    polyprop_log -> SetVisAttributes(PolyVisAtt);
+
 //    G4VisAttributes* MaskContainerVisAtt= new G4VisAttributes(white);
     mask_container_log -> SetVisAttributes(G4VisAttributes::GetInvisible());
     
     G4VisAttributes* MaskVisAtt= new G4VisAttributes(magenta);
     mask_log -> SetVisAttributes(MaskVisAtt);
 
+    G4VisAttributes* KapVisAtt= new G4VisAttributes(gold);
+    kapton_log -> SetVisAttributes(KapVisAtt);
+
+    G4VisAttributes* AlumVisAtt= new G4VisAttributes(silver);
+    aluminum_log -> SetVisAttributes(AlumVisAtt);
+
     G4VisAttributes* Coll1VisAtt= new G4VisAttributes(blue);
     coll_upper1Xp_log -> SetVisAttributes(Coll1VisAtt);
     coll_upper1Xm_log -> SetVisAttributes(Coll1VisAtt);
@@ -895,9 +1038,6 @@ G4VPhysicalVolume* DetectorConstruction::Construct()
     coll_upper2Yp_log -> SetVisAttributes(Coll2VisAtt);
     coll_upper2Ym_log -> SetVisAttributes(Coll2VisAtt);
 
-    G4VisAttributes* PolyVisAtt= new G4VisAttributes(grey);
-    polyprop_log -> SetVisAttributes(PolyVisAtt);
-
 
 
 	// Dump the geometry in a GDML file, solo se non esiste
@@ -1004,6 +1144,17 @@ void DetectorConstruction::SetPolyMaterial(G4String materialChoice)
     if (pttoMaterial) polypropMaterial = pttoMaterial;
 }
 
+void DetectorConstruction::SetKapMaterial(G4String materialChoice)
+{
+    G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
+    if (pttoMaterial) kapMaterial = pttoMaterial;
+}
+
+void DetectorConstruction::SetAlumMaterial(G4String materialChoice)
+{
+    G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
+    if (pttoMaterial) alumMaterial = pttoMaterial;
+}
 
 
 void DetectorConstruction::PrintParameters()
diff --git a/src/PCBParameterisation.cc b/src/PCBParameterisation.cc
index b1cbb93c5f8cc87b7ddf87990bd2747f5b376af5..b5393b5b0ffd3b2453368a4d282799df779dce32 100644
--- a/src/PCBParameterisation.cc
+++ b/src/PCBParameterisation.cc
@@ -8,10 +8,12 @@
 #include "G4Box.hh"
 
 
-PCBParameterisation::PCBParameterisation(G4double barSide, G4double barLength, G4int nSide)
+PCBParameterisation::PCBParameterisation(G4double barSide, G4double barLength, G4double barHeight, G4double barThick, G4int nSide)
 {
     fSpacing =  barSide;
     fLength  =  barLength;
+    fHeight  =  barHeight;
+    fThick   =  barThick;
     fSide    =  nSide;
 }
 
@@ -19,17 +21,22 @@ PCBParameterisation::PCBParameterisation(G4double barSide, G4double barLength, G
 PCBParameterisation::~PCBParameterisation() 
 {;}
 
-// void PCBParameterisation::ComputeDimensions (G4Box &, const G4int, G4VPhysicalVolume* physVol) const
-// {
-
-// }
 
 void PCBParameterisation::ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const
 {
+    G4double xPos = 0.*cm;
+    G4double yPos = 0.*cm;
+    G4double zPos = fHeight;
+
+    xPos = (-fLength)/2. +1.*cm  + copyNo* 1.*cm; //sono al centro della barra capisci se indietreggiare di mezza barra
+
 
-    physVol->SetTranslation(G4ThreeVector(xCell, yCell, zCell));
+   G4cout << "*** DEBUG ***: Replica number " << copyNo << G4endl;
+   G4cout << "*** DEBUG ***:  " << xPos << " " << yPos << " " << zPos << G4endl;
+
+
+    physVol->SetTranslation(G4ThreeVector(xPos, yPos, zPos));
     
 }
 
 
-
diff --git a/xgis_M7 b/xgis_M7
index dbcfc0f2d644f884c645d654097d1a4823119b39..7ab6988c222767c89e652f98ebfc0c19afc0e3bb 100755
Binary files a/xgis_M7 and b/xgis_M7 differ