From 40e90692116cc0588b49562b3954b4f3175ed941 Mon Sep 17 00:00:00 2001
From: deserevi <deserevi@nptool>
Date: Wed, 5 Jan 2011 23:24:29 +0000
Subject: [PATCH] * Add support for second stage in GaspardTrackerAnnular and
 GaspardTrackerTrapezoid    + It was checked that excitation energy is
 reconstructed properly

* Clean code in GaspardTrackerSquare and GaspardTrackerTrapezoid
---
 .../DetectorConfiguration/gaspHyde.detector   |   4 +-
 Inputs/EventGenerator/proton.source           |   4 +-
 NPSimulation/include/GaspardTrackerAnnular.hh |  15 +--
 NPSimulation/src/GaspardTrackerAnnular.cc     | 101 +++++++++++++-----
 NPSimulation/src/GaspardTrackerSquare.cc      |  30 +++---
 NPSimulation/src/GaspardTrackerTrapezoid.cc   |  68 +++++++-----
 6 files changed, 142 insertions(+), 80 deletions(-)

diff --git a/Inputs/DetectorConfiguration/gaspHyde.detector b/Inputs/DetectorConfiguration/gaspHyde.detector
index 8b2e78085..e1a8cced0 100644
--- a/Inputs/DetectorConfiguration/gaspHyde.detector
+++ b/Inputs/DetectorConfiguration/gaspHyde.detector
@@ -33,7 +33,7 @@ GPDAnnular
         RMIN=   16
         RMAX=	52
         FIRSTSTAGE= 1
-        SECONDSTAGE= 0
+        SECONDSTAGE= 1
         THIRDSTAGE= 1
         VIS= all
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Annular Front
@@ -42,7 +42,7 @@ GPDAnnular
         RMIN=	16
         RMAX=	52
         FIRSTSTAGE= 1
-        SECONDSTAGE= 0
+        SECONDSTAGE= 1
         THIRDSTAGE= 1
         VIS= all
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 End-Cap Back
diff --git a/Inputs/EventGenerator/proton.source b/Inputs/EventGenerator/proton.source
index 7d6828af1..1b6bb1ffc 100644
--- a/Inputs/EventGenerator/proton.source
+++ b/Inputs/EventGenerator/proton.source
@@ -4,10 +4,10 @@
 %			   Energy are given in MeV , Position in mm				  %	
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 Isotropic
-	EnergyLow=  0	
+	EnergyLow=  300	
 	EnergyHigh= 300
 	HalfOpenAngleMin= 0
-	HalfOpenAngleMax= 180
+	HalfOpenAngleMax= 30
 	x0= 0	
 	y0= 0	
 	z0= 0	
diff --git a/NPSimulation/include/GaspardTrackerAnnular.hh b/NPSimulation/include/GaspardTrackerAnnular.hh
index 7b90458ea..042e22179 100644
--- a/NPSimulation/include/GaspardTrackerAnnular.hh
+++ b/NPSimulation/include/GaspardTrackerAnnular.hh
@@ -143,8 +143,10 @@ namespace GPDANNULAR
 //   const G4double VacBoxThickness   = 3*cm           ;
    const G4double VacBoxThickness     = 0.4*cm;
 
+   // Second stage
+   const G4double SecondStageThickness = 1.5*mm;
+
    // Third stage
-   const G4double MylarCsIThickness   = 3*micrometer;
    const G4double ThirdStageThickness = 1.5*mm;
 
    // Characteristics
@@ -153,11 +155,12 @@ namespace GPDANNULAR
    const G4int NbThetaQuadrant = 4;
 
    // Starting at the front and going in direction of third stage
-   const G4double AluStripFront_PosZ = Length* -0.5 + 0.5*AluStripThickness                              ;
-   const G4double Silicon_PosZ       = AluStripFront_PosZ + 0.5*AluStripThickness + 0.5*FirstStageThickness ;
-   const G4double AluStripBack_PosZ  = Silicon_PosZ + 0.5*FirstStageThickness + 0.5*AluStripThickness       ;
-   const G4double VacBox_PosZ        = AluStripBack_PosZ + 0.5*AluStripThickness + 0.5* VacBoxThickness  ;
-   const G4double ThirdStage_PosZ    = VacBox_PosZ + 0.5*VacBoxThickness + 0.5*ThirdStageThickness       ;
+   const G4double AluStripFront_PosZ = Length* -0.5 + 0.5*AluStripThickness;
+   const G4double Silicon_PosZ       = AluStripFront_PosZ + 0.5*AluStripThickness + 0.5*FirstStageThickness;
+   const G4double AluStripBack_PosZ  = Silicon_PosZ + 0.5*FirstStageThickness + 0.5*AluStripThickness;
+   const G4double VacBox_PosZ        = AluStripBack_PosZ + 0.5*AluStripThickness + 0.5* VacBoxThickness;
+   const G4double SecondStage_PosZ   = VacBox_PosZ + 0.5*VacBoxThickness + 0.5*SecondStageThickness;
+   const G4double ThirdStage_PosZ    = SecondStage_PosZ + 0.5*SecondStageThickness + 0.5*VacBoxThickness + 0.5*ThirdStageThickness;
 }
 
 #endif
diff --git a/NPSimulation/src/GaspardTrackerAnnular.cc b/NPSimulation/src/GaspardTrackerAnnular.cc
index 1bcb62bc0..45c708fe5 100644
--- a/NPSimulation/src/GaspardTrackerAnnular.cc
+++ b/NPSimulation/src/GaspardTrackerAnnular.cc
@@ -269,6 +269,26 @@ void GaspardTrackerAnnular::VolumeMaker(G4int TelescopeNumber   ,
    //////////////// Second Stage  Construction ////////////////////
    ////////////////////////////////////////////////////////////////
    if (wSecondStage) {
+      // Second stage silicon detector
+      G4ThreeVector  positionSecondStage = G4ThreeVector(0, 0, SecondStage_PosZ);
+
+      G4Tubs* solidSecondStage = new G4Tubs("solidSecondStage", 
+                                            FirstStageRmin,
+                                            FirstStageRmax,
+                                            SecondStageThickness/2, 
+                                            0*deg, 
+                                            360*deg); 
+
+      G4LogicalVolume* logicSecondStage = new G4LogicalVolume(solidSecondStage, Silicon, "logicSecondStage", 0, 0, 0);
+
+      PVPBuffer = new G4PVPlacement(0, positionSecondStage, logicSecondStage, Name + "_SecondStage", logicMM, false, 0);
+
+      ///Visualisation of Second Stage
+      G4VisAttributes* SecondStageVisAtt = new G4VisAttributes(G4Colour(0.9, 0, 0));	// red
+      logicSecondStage->SetVisAttributes(SecondStageVisAtt);
+
+      // Set Second Stage sensible
+      logicSecondStage->SetSensitiveDetector(m_SecondStageScorer);
    }
 
    ////////////////////////////////////////////////////////////////
@@ -502,6 +522,10 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event)
    G4THitsMap<G4double>* AngPhiHitMap;
 
    // NULL pointer are given to avoid warning at compilation
+   // Second Stage
+   std::map<G4int, G4double*>::iterator SecondStageEnergy_itr;
+   G4THitsMap<G4double>* SecondStageEnergyHitMap = NULL;
+
    // Third Stage
    std::map<G4int, G4double*>::iterator ThirdStageEnergy_itr;
    G4THitsMap<G4double>* ThirdStageEnergyHitMap = NULL;
@@ -558,8 +582,12 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event)
    AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID))                              ;
    Ang_Phi_itr = AngPhiHitMap->GetMap()->begin()                                                                    ;
 
-   // Read the Scorer associated to the Third Stage 
-   //Energy
+   // Read the Scorer associated to the Second and Third Stage 
+   // Energy second
+   G4int SecondStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDAnnular/SecondStageEnergy")      ;
+   SecondStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SecondStageEnergyCollectionID))                      ;
+   SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin()                                                       ;
+   // Energy third
    G4int ThirdStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThirdStageScorerGPDAnnular/ThirdStageEnergy")      ;
    ThirdStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(ThirdStageEnergyCollectionID))                      ;
    ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin()                                                       ;
@@ -695,40 +723,57 @@ void GaspardTrackerAnnular::ReadSensitive(const G4Event* event)
             }
 
             // Second Stage
+            SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin()  ;
+            for (G4int h = 0 ; h < SecondStageEnergyHitMap->entries() ; h++) {
+               G4int SecondStageEnergyTrackID  =   SecondStageEnergy_itr->first - N;
+               G4double SecondStageEnergy      = *(SecondStageEnergy_itr->second);
+
+               if (SecondStageEnergyTrackID == NTrackID) {
+                  ms_Event->SetGPDTrkSecondStageEEnergy(RandGauss::shoot(SecondStageEnergy, ResoSecondStage));
+                  ms_Event->SetGPDTrkSecondStageEPadNbr(1);
+                  ms_Event->SetGPDTrkSecondStageTPadNbr(1);
+                  ms_Event->SetGPDTrkSecondStageTTime(1);
+                  ms_Event->SetGPDTrkSecondStageTDetectorNbr(m_index["Annular"] + N);
+                  ms_Event->SetGPDTrkSecondStageEDetectorNbr(m_index["Annular"] + N);
+               }
+
+               SecondStageEnergy_itr++;
+            }
 
             // Third Stage
-               ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin()  ;
-               for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) {
-                  G4int ThirdStageEnergyTrackID  =   ThirdStageEnergy_itr->first - N;
-                  G4double ThirdStageEnergy      = *(ThirdStageEnergy_itr->second);
-
-                  if (ThirdStageEnergyTrackID == NTrackID) {
-                     ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage));
-                     ms_Event->SetGPDTrkThirdStageEPadNbr(1);
-                     ms_Event->SetGPDTrkThirdStageTPadNbr(1);
-                     ms_Event->SetGPDTrkThirdStageTTime(1);
-                     ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Annular"] + N);
-                     ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Annular"] + N);
-                  }
-
-                  ThirdStageEnergy_itr++;
+            ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin()  ;
+            for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) {
+               G4int ThirdStageEnergyTrackID  =   ThirdStageEnergy_itr->first - N;
+               G4double ThirdStageEnergy      = *(ThirdStageEnergy_itr->second);
+
+               if (ThirdStageEnergyTrackID == NTrackID) {
+                  ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage));
+                  ms_Event->SetGPDTrkThirdStageEPadNbr(1);
+                  ms_Event->SetGPDTrkThirdStageTPadNbr(1);
+                  ms_Event->SetGPDTrkThirdStageTTime(1);
+                  ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Annular"] + N);
+                  ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Annular"] + N);
                }
 
+               ThirdStageEnergy_itr++;
+            }
+
          DetectorNumber_itr++;
       }
 
       // clear map for next event
-      DetectorNumberHitMap ->clear();
-      EnergyHitMap   ->clear();
-      TimeHitMap     ->clear();
-      XHitMap        ->clear();
-      YHitMap        ->clear();
-      PosXHitMap     ->clear();
-      PosYHitMap     ->clear();
-      PosZHitMap     ->clear();
-      AngThetaHitMap ->clear();
-      AngPhiHitMap   ->clear();
-      ThirdStageEnergyHitMap ->clear();
+      DetectorNumberHitMap    -> clear();
+      EnergyHitMap            -> clear();
+      TimeHitMap              -> clear();
+      XHitMap                 -> clear();
+      YHitMap                 -> clear();
+      PosXHitMap              -> clear();
+      PosYHitMap              -> clear();
+      PosZHitMap              -> clear();
+      AngThetaHitMap          -> clear();
+      AngPhiHitMap            -> clear();
+      SecondStageEnergyHitMap -> clear();
+      ThirdStageEnergyHitMap  -> clear();
    }
 }
 
diff --git a/NPSimulation/src/GaspardTrackerSquare.cc b/NPSimulation/src/GaspardTrackerSquare.cc
index c8ba9e5a9..99f3974a0 100644
--- a/NPSimulation/src/GaspardTrackerSquare.cc
+++ b/NPSimulation/src/GaspardTrackerSquare.cc
@@ -717,8 +717,8 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event)
 
    // NULL pointer are given to avoid warning at compilation
    // Si(Li)
-   std::map<G4int, G4double*>::iterator SiLiEnergy_itr ;
-   G4THitsMap<G4double>* SiLiEnergyHitMap = NULL      ;
+   std::map<G4int, G4double*>::iterator SecondStageEnergy_itr ;
+   G4THitsMap<G4double>* SecondStageEnergyHitMap = NULL      ;
    // Third Stage
    std::map<G4int, G4double*>::iterator ThirdStageEnergy_itr  ;
    G4THitsMap<G4double>* ThirdStageEnergyHitMap = NULL    ;
@@ -776,14 +776,14 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event)
    Ang_Phi_itr = AngPhiHitMap->GetMap()->begin()                                                                    ;
 
 
-   // Read the Scorer associate to the SiLi
+   // Read the Scorer associate to the SecondStage
    //Energy
-   G4int SiLiEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDSquare/SecondStageEnergy")   ;
-   SiLiEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SiLiEnergyCollectionID))                 ;
-   SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin()                                                     ;
+   G4int SecondStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDSquare/SecondStageEnergy")   ;
+   SecondStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SecondStageEnergyCollectionID))                 ;
+   SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin()                                                     ;
 
 
-   // Read the Scorer associate to the CsI crystal
+   // Read the Scorer associate to the ThirdStage
    //Energy
    G4int ThirdStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThirdStageScorerGPDSquare/ThirdStageEnergy");
    ThirdStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(ThirdStageEnergyCollectionID));
@@ -920,13 +920,13 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event)
             }
 
             // Second Stage
-               SiLiEnergy_itr = SiLiEnergyHitMap->GetMap()->begin() ;
-               for (G4int h = 0 ; h < SiLiEnergyHitMap->entries() ; h++) {
-                  G4int SiLiEnergyTrackID =   SiLiEnergy_itr->first - N;
-                  G4double SiLiEnergy     = *(SiLiEnergy_itr->second);
+               SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin() ;
+               for (G4int h = 0 ; h < SecondStageEnergyHitMap->entries() ; h++) {
+                  G4int SecondStageEnergyTrackID =   SecondStageEnergy_itr->first - N;
+                  G4double SecondStageEnergy     = *(SecondStageEnergy_itr->second);
 
-                  if (SiLiEnergyTrackID == NTrackID) {
-                     ms_Event->SetGPDTrkSecondStageEEnergy(RandGauss::shoot(SiLiEnergy, ResoSecondStage)) ;
+                  if (SecondStageEnergyTrackID == NTrackID) {
+                     ms_Event->SetGPDTrkSecondStageEEnergy(RandGauss::shoot(SecondStageEnergy, ResoSecondStage)) ;
                      ms_Event->SetGPDTrkSecondStageEPadNbr(1);
                      ms_Event->SetGPDTrkSecondStageTPadNbr(1);
                      ms_Event->SetGPDTrkSecondStageTTime(1);
@@ -934,7 +934,7 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event)
                      ms_Event->SetGPDTrkSecondStageEDetectorNbr(m_index["Square"] + N);
                   }
 
-                  SiLiEnergy_itr++;
+                  SecondStageEnergy_itr++;
                }
 
             // Third Stage
@@ -969,7 +969,7 @@ void GaspardTrackerSquare::ReadSensitive(const G4Event* event)
       PosZHitMap     ->clear();
       AngThetaHitMap ->clear();
       AngPhiHitMap   ->clear();
-      SiLiEnergyHitMap ->clear()  ;
+      SecondStageEnergyHitMap ->clear()  ;
       ThirdStageEnergyHitMap ->clear() ;
    }
 }
diff --git a/NPSimulation/src/GaspardTrackerTrapezoid.cc b/NPSimulation/src/GaspardTrackerTrapezoid.cc
index d24286033..259923c65 100644
--- a/NPSimulation/src/GaspardTrackerTrapezoid.cc
+++ b/NPSimulation/src/GaspardTrackerTrapezoid.cc
@@ -231,8 +231,6 @@ void GaspardTrackerTrapezoid::VolumeMaker(G4int TelescopeNumber   ,
                                           Length/2, 0*deg, 0*deg, 
                                           Height/2, BaseLarge/2, BaseSmall/2, 0*deg, 
                                           Height/2, BaseLarge/2, BaseSmall/2, 0*deg);
-//                                          Height/2, BaseSmall/2, BaseLarge/2, 0*deg, 
-//                                          Height/2, BaseSmall/2, BaseLarge/2, 0*deg);
    G4LogicalVolume* logicGPDTrapezoid = new G4LogicalVolume(solidGPDTrapezoid, Vacuum, Name, 0, 0, 0);
 
    PVPBuffer = new G4PVPlacement(G4Transform3D(*MMrot, MMpos), logicGPDTrapezoid, Name, world, false, 0);
@@ -274,8 +272,6 @@ void GaspardTrackerTrapezoid::VolumeMaker(G4int TelescopeNumber   ,
                                            FirstStageThickness/2, 0*deg, 0*deg, 
                                            FirstStageHeight/2, FirstStageBaseLarge/2, FirstStageBaseSmall/2, 0*deg, 
                                            FirstStageHeight/2, FirstStageBaseLarge/2, FirstStageBaseSmall/2, 0*deg);
-//                                           FirstStageHeight/2, FirstStageBaseSmall/2, FirstStageBaseLarge/2, 0*deg, 
-//                                           FirstStageHeight/2, FirstStageBaseSmall/2, FirstStageBaseLarge/2, 0*deg);
       G4LogicalVolume* logicFirstStage = new G4LogicalVolume(solidFirstStage, Silicon, "logicFirstStage", 0, 0, 0);
 
       PVPBuffer = new G4PVPlacement(0,
@@ -305,8 +301,6 @@ void GaspardTrackerTrapezoid::VolumeMaker(G4int TelescopeNumber   ,
                                             SecondStageThickness/2, 0*deg, 0*deg, 
                                            FirstStageHeight/2, FirstStageBaseLarge/2, FirstStageBaseSmall/2, 0*deg, 
                                            FirstStageHeight/2, FirstStageBaseLarge/2, FirstStageBaseSmall/2, 0*deg);
-//                                           FirstStageHeight/2, FirstStageBaseSmall/2, FirstStageBaseLarge/2, 0*deg, 
-//                                           FirstStageHeight/2, FirstStageBaseSmall/2, FirstStageBaseLarge/2, 0*deg);
       G4LogicalVolume* logicSecondStage = new G4LogicalVolume(solidSecondStage, Silicon, "logicSecondStage", 0, 0, 0);
 
       PVPBuffer = new G4PVPlacement(0,
@@ -336,8 +330,6 @@ void GaspardTrackerTrapezoid::VolumeMaker(G4int TelescopeNumber   ,
                                            ThirdStageThickness/2, 0*deg, 0*deg, 
                                            FirstStageHeight/2, FirstStageBaseLarge/2, FirstStageBaseSmall/2, 0*deg, 
                                            FirstStageHeight/2, FirstStageBaseLarge/2, FirstStageBaseSmall/2, 0*deg);
-//                                           FirstStageHeight/2, FirstStageBaseSmall/2, FirstStageBaseLarge/2, 0*deg, 
-//                                           FirstStageHeight/2, FirstStageBaseSmall/2, FirstStageBaseLarge/2, 0*deg);
       G4LogicalVolume* logicThirdStage = new G4LogicalVolume(solidThirdStage, Silicon, "logicThirdStage", 0, 0, 0);
 
       PVPBuffer = new G4PVPlacement(0,
@@ -756,12 +748,13 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event)
    G4THitsMap<G4double>* AngPhiHitMap;
 
    // NULL pointer are given to avoid warning at compilation
-
+   // Second Stage
+   std::map<G4int, G4double*>::iterator SecondStageEnergy_itr;
+   G4THitsMap<G4double>* SecondStageEnergyHitMap = NULL;
    // Third Stage
    std::map<G4int, G4double*>::iterator ThirdStageEnergy_itr;
    G4THitsMap<G4double>* ThirdStageEnergyHitMap = NULL;
 
-
    // Read the Scorer associated to the first Stage
    //Detector Number
    G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDTrapezoid/DetectorNumber")    ;
@@ -813,8 +806,12 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event)
    AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID))                              ;
    Ang_Phi_itr = AngPhiHitMap->GetMap()->begin()                                                                    ;
 
-   // Read the Scorer associated to the Third Stage 
-   //Energy
+   // Read the Scorer associated to the Second and Third Stage 
+   // Energy second stage
+   G4int SecondStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDTrapezoid/SecondStageEnergy")      ;
+   SecondStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SecondStageEnergyCollectionID))                      ;
+   SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin()                                                       ;
+   // Energy third stage
    G4int ThirdStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThirdStageScorerGPDTrapezoid/ThirdStageEnergy")      ;
    ThirdStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(ThirdStageEnergyCollectionID))                      ;
    ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin()                                                       ;
@@ -951,25 +948,41 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event)
             }
 
             // Second Stage
+            SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin()  ;
+            for (G4int h = 0 ; h < SecondStageEnergyHitMap->entries() ; h++) {
+               G4int SecondStageEnergyTrackID  =   SecondStageEnergy_itr->first - N;
+               G4double SecondStageEnergy      = *(SecondStageEnergy_itr->second);
+
+               if (SecondStageEnergyTrackID == NTrackID) {
+                  ms_Event->SetGPDTrkSecondStageEEnergy(RandGauss::shoot(SecondStageEnergy, ResoSecondStage));
+                  ms_Event->SetGPDTrkSecondStageEPadNbr(1);
+                  ms_Event->SetGPDTrkSecondStageTPadNbr(1);
+                  ms_Event->SetGPDTrkSecondStageTTime(1);
+                  ms_Event->SetGPDTrkSecondStageTDetectorNbr(m_index["Trapezoid"] + N);
+                  ms_Event->SetGPDTrkSecondStageEDetectorNbr(m_index["Trapezoid"] + N);
+               }
+
+               SecondStageEnergy_itr++;
+            }
 
             // Third Stage
-               ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin()  ;
-               for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) {
-                  G4int ThirdStageEnergyTrackID  =   ThirdStageEnergy_itr->first - N;
-                  G4double ThirdStageEnergy      = *(ThirdStageEnergy_itr->second);
-
-                  if (ThirdStageEnergyTrackID == NTrackID) {
-                     ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage));
-                     ms_Event->SetGPDTrkThirdStageEPadNbr(1);
-                     ms_Event->SetGPDTrkThirdStageTPadNbr(1);
-                     ms_Event->SetGPDTrkThirdStageTTime(1);
-                     ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Trapezoid"] + N);
-                     ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Trapezoid"] + N);
-                  }
-
-                  ThirdStageEnergy_itr++;
+            ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin()  ;
+            for (G4int h = 0 ; h < ThirdStageEnergyHitMap->entries() ; h++) {
+               G4int ThirdStageEnergyTrackID  =   ThirdStageEnergy_itr->first - N;
+               G4double ThirdStageEnergy      = *(ThirdStageEnergy_itr->second);
+
+               if (ThirdStageEnergyTrackID == NTrackID) {
+                  ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(ThirdStageEnergy, ResoThirdStage));
+                  ms_Event->SetGPDTrkThirdStageEPadNbr(1);
+                  ms_Event->SetGPDTrkThirdStageTPadNbr(1);
+                  ms_Event->SetGPDTrkThirdStageTTime(1);
+                  ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Trapezoid"] + N);
+                  ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Trapezoid"] + N);
                }
 
+               ThirdStageEnergy_itr++;
+            }
+
          DetectorNumber_itr++;
       }
 
@@ -984,6 +997,7 @@ void GaspardTrackerTrapezoid::ReadSensitive(const G4Event* event)
       PosZHitMap     ->clear();
       AngThetaHitMap ->clear();
       AngPhiHitMap   ->clear();
+      SecondStageEnergyHitMap ->clear();
       ThirdStageEnergyHitMap ->clear();
    }
 }
-- 
GitLab