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