diff --git a/NPSimulation/Core/CalorimeterScorers.cc b/NPSimulation/Core/CalorimeterScorers.cc index 6b3a7f5d92af7343861a42fd12c584d0fdf1b0dd..513392530541b7ce941f6ec206901664b1aa2107 100644 --- a/NPSimulation/Core/CalorimeterScorers.cc +++ b/NPSimulation/Core/CalorimeterScorers.cc @@ -42,10 +42,8 @@ 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 760d770e4c11681c0450c625436907e5d511957f..9a1a16c80bb75459d2bec03526d9239d438eb8f3 100644 --- a/NPSimulation/Hira/Hira.cc +++ b/NPSimulation/Hira/Hira.cc @@ -26,6 +26,7 @@ //G4 Geometry object #include "G4Box.hh" #include "G4Trd.hh" +#include "G4Trap.hh" #include "G4Tubs.hh" #include "G4Cons.hh" #include "G4UnionSolid.hh" @@ -382,8 +383,8 @@ void Hira::ReadSensitive(const G4Event* event){ double E_CsI = RandGauss::shoot(Info[0],ResoCsI); if(E_CsI>EnergyThreshold){ m_EventHira->SetHiraCsIEEnergy(E_CsI); - m_EventHira->SetHiraCsIEDetectorNbr((int)Info[2]); - m_EventHira->SetHiraCsIECristalNbr((int)Info[3]); + m_EventHira->SetHiraCsIEDetectorNbr((int)Info[3]); + m_EventHira->SetHiraCsIECristalNbr((int)Info[2]); } } // Clear Map for next event @@ -396,8 +397,8 @@ void Hira::InitializeScorers(){ //Look for previous definition of the scorer (geometry reload) bool already_exist = false; vector<G4int> NestingLevel; + NestingLevel.push_back(0); NestingLevel.push_back(2); - NestingLevel.push_back(3); m_ThinSiStripScorer = CheckScorer("Hira_ThinSiScorer",already_exist); m_ThickSiStripScorer = CheckScorer("Hira_ThickSiScorer",already_exist); @@ -520,8 +521,23 @@ void Hira::VolumeMaker(G4int DetectorNumber, /////////////////////////////////////////////////// /////////////////////// CsI /////////////////////// /////////////////////////////////////////////////// - G4String NameCsI = "CsI"+DetNumber; - G4Trd* solidCsIStage = new G4Trd(NameCsI, 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIFaceFront, 0.5*CsIFaceBack, 0.5*CsIThickness); + G4String NameCsI = "CsI"+DetNumber; + + double pDz = 0.5*CsIThickness; + double pTheta = -atan( (CsIXBack-CsIXFront)/(2*CsIThickness) ); + double pPhi = 0; + double pDy1 = 0.5*CsIYFront; + double pDx1 = 0.5*CsIXFront; + double pDx2 = 0.5*CsIXFront; + double pAlp1 = 0; + double pDy2 = 0.5*CsIYBack; + double pDx3 = 0.5*CsIXBack; + double pDx4 = 0.5*CsIXBack; + double pAlp2 = 0; + + G4Trap* solidCsIStage = new G4Trap(NameCsI, pDz, pTheta, pPhi, pDy1, pDx1, pDx2, pAlp1, pDy2, pDx3, pDx4, pAlp2); + + m_LogicCsICrystal = new G4LogicalVolume(solidCsIStage, m_MaterialCsI, "logicCsICrystal", 0, 0, 0); // Set CsI sensible @@ -537,34 +553,39 @@ void Hira::VolumeMaker(G4int DetectorNumber, m_LogicCluster = new G4LogicalVolume(solidCluster, m_MaterialVacuum, "LogicSolidCluster", 0, 0, 0); m_LogicCluster->SetVisAttributes(G4VisAttributes::Invisible); - G4ThreeVector FramePos(0,0,CsI_PosZ); + G4ThreeVector FramePos(0,0,CsI_PosZ); - new G4PVPlacement(new G4RotationMatrix(0,0,0), + new G4PVPlacement(new G4RotationMatrix(0,0,0), FramePos, m_LogicCluster,"Cluster", m_logicMotherVolume,false,0); - - //G4ThreeVector Origin(-CsIFaceFront,-CsIFaceFront,0); - G4ThreeVector Origin(-0.5*CsIFaceFront,-0.5*CsIFaceFront,0); - - // 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++){ + const G4double CsIXMiddle = CsIXFront + CsIThickness*tan(-pTheta); + const G4double DistInterCsIX = CsIXMiddle+DistInterCsI; + const G4double DistInterCsIY = CsIYFront+DistInterCsI; + + G4ThreeVector Origin(-0.5*DistInterCsIX,-0.5*DistInterCsIY,0); + G4RotationMatrix* rotM = new G4RotationMatrix; + const G4double dangle = 180.*deg; + // 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++){ unsigned int CrystalNbr = CsINbr++; - G4ThreeVector Pos = Origin + G4ThreeVector(i*DistInterCsIX,j*DistInterCsIY,0); - new G4PVPlacement(0, - Pos, - m_LogicCsICrystal, - "CsI_Cristal", - m_LogicCluster, - false, - CrystalNbr); - } + if(i==0)rotM->rotateZ((i)*dangle); + if(i==1)rotM->rotateZ((i+j)*dangle); + G4ThreeVector Pos = Origin + G4ThreeVector(i*DistInterCsIX,j*DistInterCsIY,0); + + new G4PVPlacement(G4Transform3D(*rotM,Pos), + m_LogicCsICrystal, + "CsI_Cristal", + m_LogicCluster, + false, + CrystalNbr); + } } } -} + } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/NPSimulation/Hira/Hira.hh b/NPSimulation/Hira/Hira.hh index 101605434be55777786f8fd781026ecbeb3be381..155c9338b62d1c80fb2d95b65d2b0a6b10ec85b9 100644 --- a/NPSimulation/Hira/Hira.hh +++ b/NPSimulation/Hira/Hira.hh @@ -66,27 +66,28 @@ namespace HIRA const G4double DistBetweenSi = 1*cm; const G4double VacBoxThickness = 1*cm ; const G4double MylarCsIThickness = 3*micrometer; - const G4double CsIThickness = 4.*cm + 2*MylarCsIThickness ; - const G4double CsIFaceFront = 30.*mm;//3.2*cm; - const G4double CsIFaceBack = 30.*mm;//3.7*cm; + const G4double CsIThickness = 4.*cm;// + 2*MylarCsIThickness ; + + const G4double CsIXFront = 32.*mm; + const G4double CsIXBack = 37.*mm; + const G4double CsIYFront = 32.*mm; + const G4double CsIYBack = 32.*mm; 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; - // Starting at the front and going to CsI const G4double AluStripFrontThinSi_PosZ = Length* -0.5 + 0.5*AluStripThickness; - const G4double ThinSi_PosZ = AluStripFrontThinSi_PosZ + 0.5*AluStripThickness + 0.5*ThinSiThickness; + const G4double ThinSi_PosZ = AluStripFrontThinSi_PosZ + 0.5*AluStripThickness + 0.5*ThinSiThickness; const G4double AluStripBackThinSi_PosZ = ThinSi_PosZ + 0.5*ThinSiThickness + 0.5*AluStripThickness; const G4double AluStripFrontThickSi_PosZ = AluStripBackThinSi_PosZ + DistBetweenSi + 0.5*AluStripThickness + 0.5*AluStripThickness; - const G4double ThickSi_PosZ = AluStripFrontThickSi_PosZ + 0.5*AluStripThickness + 0.5*ThickSiThickness; + const G4double ThickSi_PosZ = AluStripFrontThickSi_PosZ + 0.5*AluStripThickness + 0.5*ThickSiThickness; const G4double AluStripBackThickSi_PosZ = ThickSi_PosZ + 0.5*ThickSiThickness + 0.5*AluStripThickness; - const G4double VacBox_PosZ = AluStripBackThickSi_PosZ + 0.5*AluStripThickness + 0.5* VacBoxThickness; - const G4double CsI_PosZ = VacBox_PosZ + 0.5*VacBoxThickness + 0.5*CsIThickness; + const G4double VacBox_PosZ = AluStripBackThickSi_PosZ + 0.5*AluStripThickness + 0.5* VacBoxThickness; + const G4double CsI_PosZ = VacBox_PosZ + 0.5*VacBoxThickness + 0.5*CsIThickness;