Skip to content
Snippets Groups Projects
Commit c7be9bd3 authored by adrien-matta's avatar adrien-matta
Browse files

Merge branch 'NPTool.dev.prerelease' of https://github.com/adrien-matta/nptool...

Merge branch 'NPTool.dev.prerelease' of https://github.com/adrien-matta/nptool into NPTool.dev.prerelease
parents 3215ef3c 04f0c570
No related branches found
No related tags found
No related merge requests found
...@@ -28,7 +28,7 @@ Target ...@@ -28,7 +28,7 @@ Target
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GaspardTracker GaspardTracker
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Annular Back %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Annular Back
GPDAnnular %GPDAnnular
Z= -156.5 Z= -156.5
RMIN= 16 RMIN= 16
RMAX= 52 RMAX= 52
...@@ -37,7 +37,7 @@ GPDAnnular ...@@ -37,7 +37,7 @@ GPDAnnular
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Annular Front %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Annular Front
GPDAnnular %GPDAnnular
Z= 156.5 Z= 156.5
RMIN= 16 RMIN= 16
RMAX= 52 RMAX= 52
...@@ -46,7 +46,7 @@ GPDAnnular ...@@ -46,7 +46,7 @@ GPDAnnular
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 End-Cap Back %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 End-Cap Back
GPDTrapezoid %GPDTrapezoid
X128_Y128= 55.338 -14.346 -146.501 X128_Y128= 55.338 -14.346 -146.501
X1_Y128= 55.338 14.346 -146.501 X1_Y128= 55.338 14.346 -146.501
X128_Y1= 138.519 -48.717 -69.236 X128_Y1= 138.519 -48.717 -69.236
...@@ -56,7 +56,7 @@ GPDTrapezoid ...@@ -56,7 +56,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2
GPDTrapezoid %GPDTrapezoid
X128_Y128= 49.215 29.045 -146.501 X128_Y128= 49.215 29.045 -146.501
X1_Y128= 28.986 49.274 -146.501 X1_Y128= 28.986 49.274 -146.501
X128_Y1= 132.395 63.500 -69.236 X128_Y1= 132.395 63.500 -69.236
...@@ -66,7 +66,7 @@ GPDTrapezoid ...@@ -66,7 +66,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3
GPDTrapezoid %GPDTrapezoid
X128_Y128= 14.263 55.338 -146.501 X128_Y128= 14.263 55.338 -146.501
X1_Y128= -14.346 55.338 -146.501 X1_Y128= -14.346 55.338 -146.501
X128_Y1= 48.717 138.519 -69.236 X128_Y1= 48.717 138.519 -69.236
...@@ -76,7 +76,7 @@ GPDTrapezoid ...@@ -76,7 +76,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4
GPDTrapezoid %GPDTrapezoid
X128_Y128= -29.045 49.215 -146.501 X128_Y128= -29.045 49.215 -146.501
X1_Y128= -49.274 28.986 -146.501 X1_Y128= -49.274 28.986 -146.501
X128_Y1= -63.500 132.395 -69.236 X128_Y1= -63.500 132.395 -69.236
...@@ -86,7 +86,7 @@ GPDTrapezoid ...@@ -86,7 +86,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
GPDTrapezoid %GPDTrapezoid
X128_Y128= -55.338 14.346 -146.501 X128_Y128= -55.338 14.346 -146.501
X1_Y128= -55.338 -14.346 -146.501 X1_Y128= -55.338 -14.346 -146.501
X128_Y1= -138.519 48.717 -69.236 X128_Y1= -138.519 48.717 -69.236
...@@ -96,7 +96,7 @@ GPDTrapezoid ...@@ -96,7 +96,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6
GPDTrapezoid %GPDTrapezoid
X128_Y128= -49.215 -29.045 -146.501 X128_Y128= -49.215 -29.045 -146.501
X1_Y128= -28.986 -49.274 -146.501 X1_Y128= -28.986 -49.274 -146.501
X128_Y1= -132.395 -63.500 -69.236 X128_Y1= -132.395 -63.500 -69.236
...@@ -106,7 +106,7 @@ GPDTrapezoid ...@@ -106,7 +106,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7
GPDTrapezoid %GPDTrapezoid
X128_Y128= -14.263 -55.338 -146.501 X128_Y128= -14.263 -55.338 -146.501
X1_Y128= 14.346 -55.338 -146.501 X1_Y128= 14.346 -55.338 -146.501
X128_Y1= -48.717 -138.519 -69.236 X128_Y1= -48.717 -138.519 -69.236
...@@ -116,7 +116,7 @@ GPDTrapezoid ...@@ -116,7 +116,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8
GPDTrapezoid %GPDTrapezoid
X128_Y128= 29.045 -49.215 -146.501 X128_Y128= 29.045 -49.215 -146.501
X1_Y128= 49.274 -28.986 -146.501 X1_Y128= 49.274 -28.986 -146.501
X128_Y1= 63.500 -132.395 -69.236 X128_Y1= 63.500 -132.395 -69.236
...@@ -286,7 +286,7 @@ GPDSquare ...@@ -286,7 +286,7 @@ GPDSquare
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Front-Cap Back %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 Front-Cap Back
GPDTrapezoid %GPDTrapezoid
X128_Y128= 55.338 14.346 146.501 X128_Y128= 55.338 14.346 146.501
X1_Y128= 55.338 -14.346 146.501 X1_Y128= 55.338 -14.346 146.501
X128_Y1= 138.518 48.726 69.237 X128_Y1= 138.518 48.726 69.237
...@@ -296,7 +296,7 @@ GPDTrapezoid ...@@ -296,7 +296,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%2
GPDTrapezoid %GPDTrapezoid
X128_Y128= 28.986 49.274 146.501 X128_Y128= 28.986 49.274 146.501
X1_Y128= 49.215 29.045 146.501 X1_Y128= 49.215 29.045 146.501
X128_Y1= 63.492 132.401 69.237 X128_Y1= 63.492 132.401 69.237
...@@ -306,7 +306,7 @@ GPDTrapezoid ...@@ -306,7 +306,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3
GPDTrapezoid %GPDTrapezoid
X128_Y128= -14.346 55.338 146.501 X128_Y128= -14.346 55.338 146.501
X1_Y128= 14.263 55.338 146.501 X1_Y128= 14.263 55.338 146.501
X128_Y1= -48.726 138.518 69.237 X128_Y1= -48.726 138.518 69.237
...@@ -316,7 +316,7 @@ GPDTrapezoid ...@@ -316,7 +316,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4
GPDTrapezoid %GPDTrapezoid
X128_Y128= -49.274 28.986 146.501 X128_Y128= -49.274 28.986 146.501
X1_Y128= -29.045 49.215 146.501 X1_Y128= -29.045 49.215 146.501
X128_Y1= -132.401 63.492 69.237 X128_Y1= -132.401 63.492 69.237
...@@ -326,7 +326,7 @@ GPDTrapezoid ...@@ -326,7 +326,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
GPDTrapezoid %GPDTrapezoid
X128_Y128= -55.338 -14.346 146.501 X128_Y128= -55.338 -14.346 146.501
X1_Y128= -55.338 14.346 146.501 X1_Y128= -55.338 14.346 146.501
X128_Y1= -138.518 -48.726 69.237 X128_Y1= -138.518 -48.726 69.237
...@@ -336,7 +336,7 @@ GPDTrapezoid ...@@ -336,7 +336,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6
GPDTrapezoid %GPDTrapezoid
X128_Y128= -28.986 -49.274 146.501 X128_Y128= -28.986 -49.274 146.501
X1_Y128= -49.215 -29.045 146.501 X1_Y128= -49.215 -29.045 146.501
X128_Y1= -63.492 -132.401 69.237 X128_Y1= -63.492 -132.401 69.237
...@@ -346,7 +346,7 @@ GPDTrapezoid ...@@ -346,7 +346,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7
GPDTrapezoid %GPDTrapezoid
X128_Y128= 14.346 -55.338 146.501 X128_Y128= 14.346 -55.338 146.501
X1_Y128= -14.263 -55.338 146.501 X1_Y128= -14.263 -55.338 146.501
X128_Y1= 48.726 -138.518 69.237 X128_Y1= 48.726 -138.518 69.237
...@@ -356,7 +356,7 @@ GPDTrapezoid ...@@ -356,7 +356,7 @@ GPDTrapezoid
THIRDSTAGE= 1 THIRDSTAGE= 1
VIS= all VIS= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8
GPDTrapezoid %GPDTrapezoid
X128_Y128= 49.274 -28.986 146.501 X128_Y128= 49.274 -28.986 146.501
X1_Y128= 29.045 -49.215 146.501 X1_Y128= 29.045 -49.215 146.501
X128_Y1= 132.401 -63.492 69.237 X128_Y1= 132.401 -63.492 69.237
......
...@@ -53,8 +53,11 @@ ...@@ -53,8 +53,11 @@
#include "GaspardTrackerSquare.hh" #include "GaspardTrackerSquare.hh"
#include "ObsoleteGeneralScorers.hh" #include "ObsoleteGeneralScorers.hh"
#include "GaspardScorers.hh" #include "GaspardScorers.hh"
#include "SiliconScorers.hh"
#include "MaterialManager.hh"
#include "RootOutput.h" #include "RootOutput.h"
#include "VDetector.hh" #include "VDetector.hh"
// CLHEP // CLHEP
#include "CLHEP/Random/RandGauss.h" #include "CLHEP/Random/RandGauss.h"
...@@ -604,335 +607,174 @@ void GaspardTrackerSquare::SetInterCoordPointer(TInteractionCoordinates* interCo ...@@ -604,335 +607,174 @@ void GaspardTrackerSquare::SetInterCoordPointer(TInteractionCoordinates* interCo
// Called at in the EventAction::EndOfEventAvtion // Called at in the EventAction::EndOfEventAvtion
void GaspardTrackerSquare::ReadSensitive(const G4Event* event) void GaspardTrackerSquare::ReadSensitive(const G4Event* event)
{ {
////////////////////////////////////////////////////////////////////////////////////// //////////////
//////////////////////// Used to Read Event Map of detector ////////////////////////// // First stage
////////////////////////////////////////////////////////////////////////////////////// G4THitsMap<G4double*>* GPD1HitMap;
// First Stage std::map<G4int, G4double**>::iterator GPD1_itr;
std::map<G4int, G4int*>::iterator DetectorNumber_itr;
std::map<G4int, G4double*>::iterator Energy_itr; G4int GPD1CollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/GPDSquareFirstStage");
std::map<G4int, G4double*>::iterator Time_itr; GPD1HitMap = (G4THitsMap<G4double*>*)(event->GetHCofThisEvent()->GetHC(GPD1CollectionID));
std::map<G4int, G4int*>::iterator X_itr;
std::map<G4int, G4int*>::iterator Y_itr; // Loop on the GPD map
std::map<G4int, G4double*>::iterator Pos_X_itr; for (GPD1_itr = GPD1HitMap->GetMap()->begin(); GPD1_itr != GPD1HitMap->GetMap()->end(); GPD1_itr++) {
std::map<G4int, G4double*>::iterator Pos_Y_itr; G4double* Info = *(GPD1_itr->second);
std::map<G4int, G4double*>::iterator Pos_Z_itr;
std::map<G4int, G4double*>::iterator Ang_Theta_itr; double Energy = Info[0];
std::map<G4int, G4double*>::iterator Ang_Phi_itr; if (Energy > EnergyThreshold) {
double Time = Info[1];
G4THitsMap<G4int>* DetectorNumberHitMap; int DetNbr = (int) Info[7];
G4THitsMap<G4double>* EnergyHitMap; int StripFront = (int) Info[8];
G4THitsMap<G4double>* TimeHitMap; int StripBack = (int) Info[9];
G4THitsMap<G4int>* XHitMap;
G4THitsMap<G4int>* YHitMap; // detector number
G4THitsMap<G4double>* PosXHitMap; ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(m_index["Square"] + DetNbr);
G4THitsMap<G4double>* PosYHitMap; ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(m_index["Square"] + DetNbr);
G4THitsMap<G4double>* PosZHitMap; ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(m_index["Square"] + DetNbr);
G4THitsMap<G4double>* AngThetaHitMap; ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(m_index["Square"] + DetNbr);
G4THitsMap<G4double>* AngPhiHitMap;
// energy
// NULL pointer are given to avoid warning at compilation ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(Energy, ResoFirstStage));
// Si(Li) ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(Energy, ResoFirstStage));
std::map<G4int, G4double*>::iterator SecondStageEnergy_itr ;
G4THitsMap<G4double>* SecondStageEnergyHitMap = NULL ; // time
// Third Stage Time = RandGauss::shoot(Time, ResoTimePPAC);
std::map<G4int, G4double*>::iterator ThirdStageEnergy_itr ; ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(Time, ResoTimeGpd));
G4THitsMap<G4double>* ThirdStageEnergyHitMap = NULL ; ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(Time, ResoTimeGpd));
// strips X and Y
// Read the Scorer associate to the Silicon Strip ms_Event->SetGPDTrkFirstStageFrontEStripNbr(StripFront);
//Detector Number ms_Event->SetGPDTrkFirstStageFrontTStripNbr(StripFront);
G4int StripDetCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/DetectorNumber") ; ms_Event->SetGPDTrkFirstStageBackEStripNbr(StripBack);
DetectorNumberHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripDetCollectionID)) ; ms_Event->SetGPDTrkFirstStageBackTStripNbr(StripBack);
DetectorNumber_itr = DetectorNumberHitMap->GetMap()->begin() ;
// Interaction Coordinates
//Energy ms_InterCoord->SetDetectedPositionX(Info[2]);
G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripEnergy") ; ms_InterCoord->SetDetectedPositionY(Info[3]);
EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID)) ; ms_InterCoord->SetDetectedPositionZ(Info[4]);
Energy_itr = EnergyHitMap->GetMap()->begin() ; ms_InterCoord->SetDetectedAngleTheta(Info[5]/deg);
ms_InterCoord->SetDetectedAnglePhi(Info[6]/deg);
//Time of Flight
G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripTime") ; }
TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; }
Time_itr = TimeHitMap->GetMap()->begin() ; // clear map for next event
GPD1HitMap->clear();
//Strip Number X
G4int StripXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripNumberX") ;
XHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripXCollectionID)) ; //////////////
X_itr = XHitMap->GetMap()->begin() ; // Second stage
G4THitsMap<G4double*>* GPD2HitMap;
//Strip Number Y std::map<G4int, G4double**>::iterator GPD2_itr;
G4int StripYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/StripNumberY") ;
YHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripYCollectionID)) ; G4int GPD2CollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDSquare/GPDSquareSecondStage");
Y_itr = YHitMap->GetMap()->begin() ; GPD2HitMap = (G4THitsMap<G4double*>*)(event->GetHCofThisEvent()->GetHC(GPD2CollectionID));
//Interaction Coordinate X // Loop on the GPD map
G4int InterCoordXCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordX") ; for (GPD2_itr = GPD2HitMap->GetMap()->begin(); GPD2_itr != GPD2HitMap->GetMap()->end(); GPD2_itr++) {
PosXHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordXCollectionID)) ; G4double* Info = *(GPD2_itr->second);
Pos_X_itr = PosXHitMap->GetMap()->begin() ;
double Energy = Info[0];
//Interaction Coordinate Y if (Energy > EnergyThreshold) {
G4int InterCoordYCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordY") ; double Time = Info[1];
PosYHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordYCollectionID)) ; int DetNbr = (int) Info[7];
Pos_Y_itr = PosYHitMap->GetMap()->begin() ; int StripFront = (int) Info[8];
//Interaction Coordinate Z // detector number
G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordZ") ; ms_Event->SetGPDTrkSecondStageEDetectorNbr(m_index["Square"] + DetNbr);
PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)) ; ms_Event->SetGPDTrkSecondStageTDetectorNbr(m_index["Square"] + DetNbr);
Pos_Z_itr = PosXHitMap->GetMap()->begin() ;
// energy
//Interaction Coordinate Angle Theta ms_Event->SetGPDTrkSecondStageEEnergy(RandGauss::shoot(Energy, ResoSecondStage));
G4int InterCoordAngThetaCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordAngTheta") ;
AngThetaHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngThetaCollectionID)) ; // time
Ang_Theta_itr = AngThetaHitMap->GetMap()->begin() ; Time = RandGauss::shoot(Time, ResoTimePPAC);
ms_Event->SetGPDTrkSecondStageTTime(RandGauss::shoot(Time, ResoTimeGpd));
//Interaction Coordinate Angle Phi
G4int InterCoordAngPhiCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("FirstStageScorerGPDSquare/InterCoordAngPhi") ; // strips X and Y
AngPhiHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordAngPhiCollectionID)) ; ms_Event->SetGPDTrkSecondStageEPadNbr(StripFront);
Ang_Phi_itr = AngPhiHitMap->GetMap()->begin() ; ms_Event->SetGPDTrkSecondStageTPadNbr(StripFront);
}
}
// Read the Scorer associate to the SecondStage // clear map for next event
//Energy GPD2HitMap->clear();
G4int SecondStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("SecondStageScorerGPDSquare/SecondStageEnergy") ;
SecondStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(SecondStageEnergyCollectionID)) ;
SecondStageEnergy_itr = SecondStageEnergyHitMap->GetMap()->begin() ; //////////////
// Third stage
G4THitsMap<G4double*>* GPD3HitMap;
// Read the Scorer associate to the ThirdStage std::map<G4int, G4double**>::iterator GPD3_itr;
//Energy
G4int ThirdStageEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThirdStageScorerGPDSquare/ThirdStageEnergy"); G4int GPD3CollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("ThirdStageScorerGPDSquare/GPDSquareThirdStage");
ThirdStageEnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(ThirdStageEnergyCollectionID)); GPD3HitMap = (G4THitsMap<G4double*>*)(event->GetHCofThisEvent()->GetHC(GPD3CollectionID));
ThirdStageEnergy_itr = ThirdStageEnergyHitMap->GetMap()->begin();
// Loop on the GPD map
// Check the size of different map for (GPD3_itr = GPD3HitMap->GetMap()->begin(); GPD3_itr != GPD3HitMap->GetMap()->end(); GPD3_itr++) {
G4int sizeN = DetectorNumberHitMap->entries(); G4double* Info = *(GPD3_itr->second);
G4int sizeE = EnergyHitMap->entries();
G4int sizeT = TimeHitMap->entries(); double Energy = Info[0];
G4int sizeX = XHitMap->entries(); if (Energy > EnergyThreshold) {
G4int sizeY = YHitMap->entries(); double Time = Info[1];
int DetNbr = (int) Info[7];
if (sizeE != sizeT || sizeT != sizeX || sizeX != sizeY) { int StripFront = (int) Info[8];
G4cout << "No match size Si Event Map: sE:"
<< sizeE << " sT:" << sizeT << " sX:" << sizeX << " sY:" << sizeY << G4endl ; // detector number
return; ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Square"] + DetNbr);
} ms_Event->SetGPDTrkThirdStageTDetectorNbr(m_index["Square"] + DetNbr);
// Loop on FirstStage number // energy
for (G4int l = 0; l < sizeN; l++) { ms_Event->SetGPDTrkThirdStageEEnergy(RandGauss::shoot(Energy, ResoThirdStage));
G4double N = *(DetectorNumber_itr->second);
G4int NTrackID = DetectorNumber_itr->first - N; // time
Time = RandGauss::shoot(Time, ResoTimePPAC);
if (N > 0) { ms_Event->SetGPDTrkThirdStageTTime(RandGauss::shoot(Time, ResoTimeGpd));
// Fill detector number
ms_Event->SetGPDTrkFirstStageFrontEDetectorNbr(m_index["Square"] + N); // strips X and Y
ms_Event->SetGPDTrkFirstStageFrontTDetectorNbr(m_index["Square"] + N); ms_Event->SetGPDTrkThirdStageEPadNbr(StripFront);
ms_Event->SetGPDTrkFirstStageBackEDetectorNbr(m_index["Square"] + N); ms_Event->SetGPDTrkThirdStageTPadNbr(StripFront);
ms_Event->SetGPDTrkFirstStageBackTDetectorNbr(m_index["Square"] + N); }
}
// Energy // clear map for next event
Energy_itr = EnergyHitMap->GetMap()->begin(); GPD3HitMap->clear();
for (G4int l = 0 ; l < sizeE ; l++) {
G4int ETrackID = Energy_itr->first - N;
G4double E = *(Energy_itr->second);
if (ETrackID == NTrackID) {
ms_Event->SetGPDTrkFirstStageFrontEEnergy(RandGauss::shoot(E, ResoFirstStage));
ms_Event->SetGPDTrkFirstStageBackEEnergy(RandGauss::shoot(E, ResoFirstStage));
}
Energy_itr++;
}
// Time
Time_itr = TimeHitMap->GetMap()->begin();
for (G4int h = 0 ; h < sizeT ; h++) {
G4int TTrackID = Time_itr->first - N;
G4double T = *(Time_itr->second);
if (TTrackID == NTrackID) {
T = RandGauss::shoot(T, ResoTimePPAC) ;
ms_Event->SetGPDTrkFirstStageFrontTTime(RandGauss::shoot(T, ResoTimeGpd)) ;
ms_Event->SetGPDTrkFirstStageBackTTime(RandGauss::shoot(T, ResoTimeGpd)) ;
}
Time_itr++;
}
// X
X_itr = XHitMap->GetMap()->begin();
for (G4int h = 0 ; h < sizeX ; h++) {
G4int XTrackID = X_itr->first - N;
G4int X = *(X_itr->second);
if (XTrackID == NTrackID) {
ms_Event->SetGPDTrkFirstStageFrontEStripNbr(X);
ms_Event->SetGPDTrkFirstStageFrontTStripNbr(X);
}
X_itr++;
}
// Y
Y_itr = YHitMap->GetMap()->begin() ;
for (G4int h = 0 ; h < sizeY ; h++) {
G4int YTrackID = Y_itr->first - N;
G4int Y = *(Y_itr->second);
if (YTrackID == NTrackID) {
ms_Event->SetGPDTrkFirstStageBackEStripNbr(Y);
ms_Event->SetGPDTrkFirstStageBackTStripNbr(Y);
}
Y_itr++;
}
// Pos X
Pos_X_itr = PosXHitMap->GetMap()->begin();
for (G4int h = 0; h < PosXHitMap->entries(); h++) {
G4int PosXTrackID = Pos_X_itr->first - N ;
G4double PosX = *(Pos_X_itr->second) ;
if (PosXTrackID == NTrackID) {
ms_InterCoord->SetDetectedPositionX(PosX) ;
}
Pos_X_itr++;
}
// Pos Y
Pos_Y_itr = PosYHitMap->GetMap()->begin();
for (G4int h = 0; h < PosYHitMap->entries(); h++) {
G4int PosYTrackID = Pos_Y_itr->first - N ;
G4double PosY = *(Pos_Y_itr->second) ;
if (PosYTrackID == NTrackID) {
ms_InterCoord->SetDetectedPositionY(PosY) ;
}
Pos_Y_itr++;
}
// Pos Z
Pos_Z_itr = PosZHitMap->GetMap()->begin();
for (G4int h = 0; h < PosZHitMap->entries(); h++) {
G4int PosZTrackID = Pos_Z_itr->first - N ;
G4double PosZ = *(Pos_Z_itr->second) ;
if (PosZTrackID == NTrackID) {
ms_InterCoord->SetDetectedPositionZ(PosZ) ;
}
Pos_Z_itr++;
}
// Angle Theta
Ang_Theta_itr = AngThetaHitMap->GetMap()->begin();
for (G4int h = 0; h < AngThetaHitMap->entries(); h++) {
G4int AngThetaTrackID = Ang_Theta_itr->first - N ;
G4double AngTheta = *(Ang_Theta_itr->second) ;
if (AngThetaTrackID == NTrackID) {
ms_InterCoord->SetDetectedAngleTheta(AngTheta) ;
}
Ang_Theta_itr++;
}
// Angle Phi
Ang_Phi_itr = AngPhiHitMap->GetMap()->begin();
for (G4int h = 0; h < AngPhiHitMap->entries(); h++) {
G4int AngPhiTrackID = Ang_Phi_itr->first - N ;
G4double AngPhi = *(Ang_Phi_itr->second) ;
if (AngPhiTrackID == NTrackID) {
ms_InterCoord->SetDetectedAnglePhi(AngPhi) ;
}
Ang_Phi_itr++;
}
// 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["Square"] + N);
ms_Event->SetGPDTrkSecondStageEDetectorNbr(m_index["Square"] + 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["Square"] + N);
ms_Event->SetGPDTrkThirdStageEDetectorNbr(m_index["Square"] + 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();
SecondStageEnergyHitMap ->clear() ;
ThirdStageEnergyHitMap ->clear() ;
} }
void GaspardTrackerSquare::InitializeScorers() void GaspardTrackerSquare::InitializeScorers()
{ {
bool already_exist = false; // check whether scorers are already defined
m_FirstStageScorer = VDetector::CheckScorer("FirstStageScorerGPDSquare", already_exist); bool already_exist = false;
m_SecondStageScorer = VDetector::CheckScorer("SecondStageScorerGPDSquare",already_exist); m_FirstStageScorer = VDetector::CheckScorer("FirstStageScorerGPDSquare", already_exist);
m_ThirdStageScorer = VDetector::CheckScorer("ThirdStageScorerGPDSquare",already_exist); m_SecondStageScorer = VDetector::CheckScorer("SecondStageScorerGPDSquare", already_exist);
if(already_exist) return; m_ThirdStageScorer = VDetector::CheckScorer("ThirdStageScorerGPDSquare", already_exist);
if (already_exist) return;
// First stage scorer
// First stage Associate Scorer G4VPrimitiveScorer* GPDScorerFirstStage =
G4VPrimitiveScorer* DetNbr = new OBSOLETEGENERALSCORERS::PSDetectorNumber("DetectorNumber", "GPDSquare", 0); new SILICONSCORERS::PS_Silicon_Rectangle("GPDSquareFirstStage",
G4VPrimitiveScorer* TOF = new OBSOLETEGENERALSCORERS::PSTOF("StripTime","GPDSquare", 0); FirstStageFace,
G4VPrimitiveScorer* InteractionCoordinatesX = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","GPDSquare", 0); FirstStageFace,
G4VPrimitiveScorer* InteractionCoordinatesY = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","GPDSquare", 0); NumberOfStrips,
G4VPrimitiveScorer* InteractionCoordinatesZ = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","GPDSquare", 0); NumberOfStrips);
G4VPrimitiveScorer* InteractionCoordinatesAngleTheta = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesAngleTheta("InterCoordAngTheta","GPDSquare", 0);
G4VPrimitiveScorer* InteractionCoordinatesAnglePhi = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesAnglePhi("InterCoordAngPhi","GPDSquare", 0); // Second stage scorer
G4VPrimitiveScorer* Energy = new GPDScorerFirstStageEnergy("StripEnergy", "GPDSquare", 0); G4VPrimitiveScorer* GPDScorerSecondStage =
G4VPrimitiveScorer* StripPositionX = new GPDScorerFirstStageFrontStripSquare("StripNumberX", 0, NumberOfStrips); new SILICONSCORERS::PS_Silicon_Rectangle("GPDSquareSecondStage",
G4VPrimitiveScorer* StripPositionY = new GPDScorerFirstStageBackStripSquare("StripNumberY", 0, NumberOfStrips); SecondStageFace,
SecondStageFace,
//and register it to the multifunctionnal detector 1,
m_FirstStageScorer->RegisterPrimitive(DetNbr); 1);
m_FirstStageScorer->RegisterPrimitive(Energy);
m_FirstStageScorer->RegisterPrimitive(TOF); // Third stage scorer
m_FirstStageScorer->RegisterPrimitive(StripPositionX); G4VPrimitiveScorer* GPDScorerThirdStage =
m_FirstStageScorer->RegisterPrimitive(StripPositionY); new SILICONSCORERS::PS_Silicon_Rectangle("GPDSquareThirdStage",
m_FirstStageScorer->RegisterPrimitive(InteractionCoordinatesX); ThirdStageFace,
m_FirstStageScorer->RegisterPrimitive(InteractionCoordinatesY); ThirdStageFace,
m_FirstStageScorer->RegisterPrimitive(InteractionCoordinatesZ); 1,
m_FirstStageScorer->RegisterPrimitive(InteractionCoordinatesAngleTheta); 1);
m_FirstStageScorer->RegisterPrimitive(InteractionCoordinatesAnglePhi);
// register scorers to the multifunctionnal detector
// Second stage Associate Scorer m_FirstStageScorer ->RegisterPrimitive(GPDScorerFirstStage);
G4VPrimitiveScorer* SecondStageEnergy = new GPDScorerSecondStageEnergy("SecondStageEnergy", "GPDSquare", 0); m_SecondStageScorer ->RegisterPrimitive(GPDScorerSecondStage);
m_SecondStageScorer->RegisterPrimitive(SecondStageEnergy); m_ThirdStageScorer ->RegisterPrimitive(GPDScorerThirdStage);
// Third stage Associate Scorer
G4VPrimitiveScorer* ThirdStageEnergy = new GPDScorerThirdStageEnergy("ThirdStageEnergy", "GPDSquare", 0);
m_ThirdStageScorer->RegisterPrimitive(ThirdStageEnergy);
// Add All Scorer to the Global Scorer Manager // Add All Scorer to the Global Scorer Manager
G4SDManager::GetSDMpointer()->AddNewDetector(m_FirstStageScorer); G4SDManager::GetSDMpointer()->AddNewDetector(m_FirstStageScorer);
......
...@@ -145,6 +145,9 @@ namespace GPDSQUARE ...@@ -145,6 +145,9 @@ namespace GPDSQUARE
const G4double ResoTimeGpd = 0.212765957 ;// = 500ps // Unit is ns/2.35 const G4double ResoTimeGpd = 0.212765957 ;// = 500ps // Unit is ns/2.35
const G4double ResoTimePPAC = 0.106382979 ;// = 250ps // Unit is ns/2.35 const G4double ResoTimePPAC = 0.106382979 ;// = 250ps // Unit is ns/2.35
// Threshold
const G4double EnergyThreshold = 0.2*MeV;
// Geometry // Geometry
const G4double FaceFront = 11*cm; const G4double FaceFront = 11*cm;
const G4double FaceBack = 11*cm; const G4double FaceBack = 11*cm;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment