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