From 414f5e0799ab7948c3e6468e6bb60dcb9fcb0387 Mon Sep 17 00:00:00 2001 From: Pierre Morfouace <morfouac@ipno.in2p3.fr> Date: Tue, 9 Jun 2015 16:41:31 +0900 Subject: [PATCH] Update of Hira.cc and Hira.hh --- Inputs/EventGenerator/proton.source | 2 +- NPSimulation/Core/CalorimeterScorers.cc | 3 +- NPSimulation/Hira/Hira.cc | 164 +++--------------------- NPSimulation/Hira/Hira.hh | 16 +-- 4 files changed, 28 insertions(+), 157 deletions(-) diff --git a/Inputs/EventGenerator/proton.source b/Inputs/EventGenerator/proton.source index 57b77550c..b7d724c24 100644 --- a/Inputs/EventGenerator/proton.source +++ b/Inputs/EventGenerator/proton.source @@ -7,7 +7,7 @@ Isotropic EnergyLow= 0 EnergyHigh= 201 HalfOpenAngleMin= 0 - HalfOpenAngleMax= 1 + HalfOpenAngleMax= 90 x0= 0 y0= 0 z0= 0 diff --git a/NPSimulation/Core/CalorimeterScorers.cc b/NPSimulation/Core/CalorimeterScorers.cc index f82a086fb..6b3a7f5d9 100644 --- a/NPSimulation/Core/CalorimeterScorers.cc +++ b/NPSimulation/Core/CalorimeterScorers.cc @@ -42,9 +42,10 @@ G4bool PS_Calorimeter::ProcessHits(G4Step* aStep, G4TouchableHistory*){ G4double* Infos = new G4double[2+mysize]; Infos[0] = aStep->GetTotalEnergyDeposit(); Infos[1] = aStep->GetPreStepPoint()->GetGlobalTime(); - + cout << "my size = " << mysize << endl; for(unsigned int i = 0 ; i < mysize ; i++){ Infos[i+2] = aStep->GetPreStepPoint()->GetTouchableHandle()->GetCopyNumber(m_NestingLevel[i]); + cout << i+2 << " " << Infos[i+2] << endl; } m_Index = 0 ; diff --git a/NPSimulation/Hira/Hira.cc b/NPSimulation/Hira/Hira.cc index f80216ddf..760d770e4 100644 --- a/NPSimulation/Hira/Hira.cc +++ b/NPSimulation/Hira/Hira.cc @@ -351,7 +351,7 @@ void Hira::ReadSensitive(const G4Event* event){ double E_ThickSi = RandGauss::shoot(Info[0],ResoThickSi); if(E_ThickSi>EnergyThreshold){ m_EventHira->SetHiraThickSiStripXEEnergy(E_ThickSi); - m_EventHira->SetHiraThickSiStripXEDetectorNbr(Info[7]); + m_EventHira->SetHiraThickSiStripXEDetectorNbr(Info[7]); m_EventHira->SetHiraThickSiStripXEStripNbr(Info[8]); m_EventHira->SetHiraThickSiStripXTTime(Info[1]); @@ -359,7 +359,7 @@ void Hira::ReadSensitive(const G4Event* event){ m_EventHira->SetHiraThickSiStripXTStripNbr(Info[8]); m_EventHira->SetHiraThickSiStripYEEnergy(E_ThickSi); - m_EventHira->SetHiraThickSiStripYEDetectorNbr(Info[7]); + m_EventHira->SetHiraThickSiStripYEDetectorNbr(Info[7]); m_EventHira->SetHiraThickSiStripYEStripNbr(Info[9]); m_EventHira->SetHiraThickSiStripYTTime(Info[1]); @@ -381,9 +381,9 @@ void Hira::ReadSensitive(const G4Event* event){ G4double* Info = *(CsI_itr->second); double E_CsI = RandGauss::shoot(Info[0],ResoCsI); if(E_CsI>EnergyThreshold){ - m_EventHira->SetHiraCsIEEnergy(E_CsI); - m_EventHira->SetHiraCsIEDetectorNbr(Info[3]); - m_EventHira->SetHiraCsIECristalNbr(Info[2]); + m_EventHira->SetHiraCsIEEnergy(E_CsI); + m_EventHira->SetHiraCsIEDetectorNbr((int)Info[2]); + m_EventHira->SetHiraCsIECristalNbr((int)Info[3]); } } // Clear Map for next event @@ -463,7 +463,7 @@ void Hira::VolumeMaker(G4int DetectorNumber, // Definition of the volume containing the sensitive detector G4Box* solidMotherVolume = new G4Box(Name, 0.5*FaceFront, 0.5*FaceBack, 0.5*Length); - G4LogicalVolume* m_logicMotherVolume = new G4LogicalVolume(solidMotherVolume, m_MaterialVacuum, Name, 0, 0, 0); + m_logicMotherVolume = new G4LogicalVolume(solidMotherVolume, m_MaterialVacuum, Name, 0, 0, 0); new G4PVPlacement(G4Transform3D(*MMrot, MMpos), m_logicMotherVolume, Name, world, false, DetectorNumber); @@ -522,10 +522,10 @@ void Hira::VolumeMaker(G4int DetectorNumber, /////////////////////////////////////////////////// G4String NameCsI = "CsI"+DetNumber; G4Trd* solidCsIStage = new G4Trd(NameCsI, 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIThickness); - m_LogicCsICrystal = new G4LogicalVolume(solidCsIStage, m_MaterialCsI, "logicCsICrystal", 0, 0, 0); + m_LogicCsICrystal = new G4LogicalVolume(solidCsIStage, m_MaterialCsI, "logicCsICrystal", 0, 0, 0); // Set CsI sensible - m_LogicCsICrystal->SetSensitiveDetector(m_CsIScorer); + m_LogicCsICrystal->SetSensitiveDetector(m_CsIScorer); // Visualisation of CsI m_LogicCsICrystal->SetVisAttributes(m_CsIVisAtt); @@ -535,7 +535,7 @@ void Hira::VolumeMaker(G4int DetectorNumber, // Sub Mother Volume G4Trd* solidCluster = new G4Trd("SolidCluster", 0.5*ClusterFaceFront,0.5*ClusterFaceBack,0.5*ClusterFaceFront,0.5*ClusterFaceBack, 0.5*CsIThickness); m_LogicCluster = new G4LogicalVolume(solidCluster, m_MaterialVacuum, "LogicSolidCluster", 0, 0, 0); - m_LogicCluster->SetVisAttributes(G4VisAttributes::Invisible); + m_LogicCluster->SetVisAttributes(G4VisAttributes::Invisible); G4ThreeVector FramePos(0,0,CsI_PosZ); @@ -552,147 +552,21 @@ void Hira::VolumeMaker(G4int DetectorNumber, unsigned int CsINbr = 1; for(unsigned int i = 0 ; i < 2 ; i++){ for(unsigned int j = 0 ; j <2 ; j++){ - G4ThreeVector Pos = Origin + G4ThreeVector(i*CsIFaceFront,j*CsIFaceFront,0); + unsigned int CrystalNbr = CsINbr++; + G4ThreeVector Pos = Origin + G4ThreeVector(i*DistInterCsIX,j*DistInterCsIY,0); new G4PVPlacement(0, - Pos, - m_LogicCsICrystal, - "CsI_Cristal", - m_LogicCluster, - false, - CsINbr++); + Pos, + m_LogicCsICrystal, + "CsI_Cristal", + m_LogicCluster, + false, + CrystalNbr); } - } - /*G4LogicalVolume* LogicClusterFrame = new G4LogicalVolume(solidCluster, m_MaterialCsI, "LogicSolidClusterFrame", 0, 0, 0); - LogicClusterFrame->SetVisAttributes(m_CsIVisAtt); - - new G4PVPlacement(0, - FramePos, - LogicClusterFrame, - "ClusterFrame", - m_LogicCluster, - false, - 0);*/ - } - - //ConstructThinSi(); - //ConstructThickSi(); - //ConstructCsICrystal(); - - -} - - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Hira::ConstructCsICrystal(){ - if(!m_LogicCsICrystal){ - - G4Trd* solidCsICrystal = new G4Trd("solidCsICrystal",0.5*CsIFaceFront,0.5*CsIFaceBack,0.5*CsIFaceFront,0.5*CsIFaceBack, 0.5*CsIThickness); - m_LogicCsICrystal = new G4LogicalVolume(solidCsICrystal, m_MaterialVacuum, "logicCsI", 0, 0, 0); - m_LogicCsICrystal->SetVisAttributes(G4VisAttributes::Invisible); - - // CsI - G4Trd* solidCsIStage = new G4Trd("solidLaBr3Stage", 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIThickness); - G4LogicalVolume* logicCsIStage = new G4LogicalVolume(solidCsIStage, m_MaterialCsI, "logicCsIStage", 0, 0, 0); - - G4ThreeVector positionCsICrystal = G4ThreeVector(0, 0, CsI_PosZ); - - new G4PVPlacement(new G4RotationMatrix(0,0,0), - positionCsICrystal, - logicCsIStage,"CsICrystal", - m_LogicCsICrystal,false,0); - - // Set CsI sensible - logicCsIStage->SetSensitiveDetector(m_CsIScorer); - - // Visualisation of CsI - logicCsIStage->SetVisAttributes(m_CsIVisAtt); - } - - if(!m_LogicCluster){ - - // Mother Volume - G4Trd* solidCluster = new G4Trd("SolidCluster", 0.5*CsIFaceFront,0.5*CsIFaceBack,0.5*CsIFaceFront,0.5*CsIFaceBack, 0.5*CsIThickness); - m_LogicCluster = new G4LogicalVolume(solidCluster, m_MaterialVacuum, "LogicSolidCluster", 0, 0, 0); - m_LogicCluster->SetVisAttributes(G4VisAttributes::Invisible); - - G4ThreeVector Origin(-CsIFaceFront,-CsIFaceFront,0); - G4ThreeVector FramePos(0,0,CsI_PosZ); - // A cluster is a 2 by 2 aggregat of CsI crystal - unsigned int CsINbr = 1; - for(unsigned int i = 0 ; i < 2 ; i++){ - for(unsigned int j = 0 ; j <2 ; j++){ - G4ThreeVector Pos = Origin + G4ThreeVector(i*CsIFaceFront,j*CsIFaceFront,0); - new G4PVPlacement(0, - Pos, - m_LogicCsICrystal, - "CsI_Cristal", - m_LogicCluster, - false, - CsINbr++); - } - } - G4LogicalVolume* LogicClusterFrame = new G4LogicalVolume(solidCluster, m_MaterialCsI, "LogicSolidClusterFrame", 0, 0, 0); - LogicClusterFrame->SetVisAttributes(m_CsIVisAtt); - - new G4PVPlacement(0, - FramePos, - LogicClusterFrame, - "ClusterFrame", - m_LogicCluster, - false, - 0); - } - -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Hira::ConstructThinSi(){ -cout << "coucou1" << endl; - G4String Name = "ThinSi"; - if(!m_LogicThinSi){ -cout << "coucou2" << endl; - G4Box* solidThinSi = new G4Box(Name, 0.5*SiliconFace, 0.5*SiliconFace, 0.5*ThinSiThickness); ; - m_LogicThinSi = new G4LogicalVolume(solidThinSi, m_MaterialSilicon, "logicThinSi", 0, 0, 0); - - G4ThreeVector positionThinSi = G4ThreeVector(0, 0, ThinSi_PosZ); -cout << "coucou3" << endl; - new G4PVPlacement(new G4RotationMatrix(0,0,0), - positionThinSi, - m_LogicThinSi,"ThinSi", - m_logicMotherVolume,false,0); -cout << "coucou4" << endl; - // Set ThinSi sensible - m_LogicThinSi->SetSensitiveDetector(m_ThinSiStripScorer); - - // Visualisation of ThinSi - m_LogicThinSi->SetVisAttributes(m_SiliconVisAtt) ; - } - + } + } } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Hira::ConstructThickSi(){ - - G4String Name = "ThickSi"; - if(!m_LogicThickSi){ - G4Box* solidThickSi = new G4Box(Name, 0.5*SiliconFace, 0.5*SiliconFace, 0.5*ThickSiThickness); - m_LogicThickSi = new G4LogicalVolume(solidThickSi, m_MaterialSilicon, "logicThickSi", 0, 0, 0); - G4ThreeVector positionThickSi = G4ThreeVector(0, 0, ThickSi_PosZ); - - new G4PVPlacement(new G4RotationMatrix(0,0,0), - positionThickSi, - m_LogicThickSi,"ThickSi", - m_logicMotherVolume,false,0); - - // Set ThickSi sensible - m_LogicThickSi->SetSensitiveDetector(m_ThickSiStripScorer); - - // Visualisation of ThickSi - m_LogicThickSi->SetVisAttributes(m_SiliconVisAtt) ; - } - -} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Hira::InitializeMaterial(){ m_MaterialSilicon = MaterialManager::getInstance()->GetMaterialFromLibrary("Si"); diff --git a/NPSimulation/Hira/Hira.hh b/NPSimulation/Hira/Hira.hh index 61ed65061..101605434 100644 --- a/NPSimulation/Hira/Hira.hh +++ b/NPSimulation/Hira/Hira.hh @@ -67,9 +67,11 @@ namespace HIRA const G4double VacBoxThickness = 1*cm ; const G4double MylarCsIThickness = 3*micrometer; const G4double CsIThickness = 4.*cm + 2*MylarCsIThickness ; - const G4double CsIFaceFront = 3.2*cm; - const G4double CsIFaceBack = 3.7*cm; - const G4double DistInterCsI = 0.2*mm; + const G4double CsIFaceFront = 30.*mm;//3.2*cm; + const G4double CsIFaceBack = 30.*mm;//3.7*cm; + const G4double DistInterCsI = 0.2*mm; + const G4double DistInterCsIX = CsIFaceFront+DistInterCsI; + const G4double DistInterCsIY = CsIFaceFront+DistInterCsI; const G4double ClusterFaceFront = 7*cm; const G4double ClusterFaceBack = 9*cm; @@ -128,13 +130,7 @@ private: //////////////////////////////////////////////////// //////// Specific Function of this Class /////////// //////////////////////////////////////////////////// -public: - // To add a box detector - // Effectively construct Volume - void ConstructCsICrystal(); - void ConstructThinSi(); - void ConstructThickSi(); - + //////////////////////////////////////////////////// ///////// Inherite from VDetector class /////////// -- GitLab