From faa6e73397417d76406bc4fcbd66a1f95e6c7c16 Mon Sep 17 00:00:00 2001
From: adrien-matta <a.matta@surrey.ac.uk>
Date: Fri, 11 Dec 2015 17:08:59 +0000
Subject: [PATCH] * Updating work on Nana

---
 NPLib/Nana/TNanaPhysics.cxx          | 31 ++++++++++--------
 NPLib/Nana/TNanaPhysics.h            | 13 +++++---
 NPSimulation/Core/MaterialManager.cc | 48 +++++++++++++++++++++++++---
 NPSimulation/Nana/Nana.cc            | 24 +++++++++++---
 4 files changed, 89 insertions(+), 27 deletions(-)

diff --git a/NPLib/Nana/TNanaPhysics.cxx b/NPLib/Nana/TNanaPhysics.cxx
index f2d2743e9..6af212d91 100644
--- a/NPLib/Nana/TNanaPhysics.cxx
+++ b/NPLib/Nana/TNanaPhysics.cxx
@@ -73,17 +73,20 @@ void TNanaPhysics::BuildPhysicalEvent(){
     double EnergyStrip;
 
     for(int j=0;j<multLaBrE;j++){
+      DetectorNumber.push_back(m_EventData->GetNanaLaBr3DetectorNbr(j));
       EnergyStripFront= m_EventData->GetNanaLaBr3EnergyLong(j);
 
       EnergyStrip  = EnergyStripFront;
-      NanaLaBr_E.push_back(EnergyStrip);
+      LaBr_E.push_back(EnergyStrip);
+      
+
 
       EnergyTot += EnergyStrip;
       //cout << "Energytot LaBr=" << EnergyTot << endl;
     }
 
     // Fill total energy in inner shell
-    NanaInTotalEnergy.push_back(EnergyTot);
+    InTotalEnergy.push_back(EnergyTot);
   }
 }
 
@@ -91,20 +94,22 @@ void TNanaPhysics::BuildPhysicalEvent(){
 void TNanaPhysics::Clear(){
   //EventMultiplicity= 0;
   NanaEventMult= 0;
+ 
   //ModuleNumber.clear();
   //EventType.clear();
-  NanaInTotalEnergy.clear();   // inner shell
-  NanaOutTotalEnergy.clear();  // outter shell
-  NanaTotalEnergy.clear();
+  InTotalEnergy.clear();   // inner shell
+  OutTotalEnergy.clear();  // outter shell
+  TotalEnergy.clear();
 
   // LaBr
-  NanaLaBr_E.clear();
+  DetectorNumber.clear();
+  LaBr_E.clear();
   //First_T.clear();
   //First_X.clear();
   //First_Y.clear();
 
   // NaI
-  NanaNaI_E.clear();
+  NaI_E.clear();
   //Second_T.clear();
   //Second_N.clear();
 
@@ -520,24 +525,24 @@ void TNanaPhysics::AddDetector(double theta,
 
 ////////////////////////////////////////////////////////////////////////////////
 double TNanaPhysics::GetEnergyDeposit(){
-  if (m_EventPhysics->NanaTotalEnergy.size() > 0)
-    return m_EventPhysics->NanaTotalEnergy[0];
+  if (m_EventPhysics->TotalEnergy.size() > 0)
+    return m_EventPhysics->TotalEnergy[0];
   else
     return -1000;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 double TNanaPhysics::GetEnergyInDeposit(){// inner Layer
-  if (m_EventPhysics->NanaInTotalEnergy.size() > 0)
-    return m_EventPhysics->NanaInTotalEnergy[0];
+  if (m_EventPhysics->InTotalEnergy.size() > 0)
+    return m_EventPhysics->InTotalEnergy[0];
   else
     return -1000;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 double TNanaPhysics::GetEnergyOutDeposit(){// Outer Layer
-  if (m_EventPhysics->NanaOutTotalEnergy.size() > 0)
-    return m_EventPhysics->NanaOutTotalEnergy[0];
+  if (m_EventPhysics->OutTotalEnergy.size() > 0)
+    return m_EventPhysics->OutTotalEnergy[0];
   else
     return -1000;
 }
diff --git a/NPLib/Nana/TNanaPhysics.h b/NPLib/Nana/TNanaPhysics.h
index 8a3298fe9..cbeb72fdd 100644
--- a/NPLib/Nana/TNanaPhysics.h
+++ b/NPLib/Nana/TNanaPhysics.h
@@ -132,16 +132,19 @@ class TNanaPhysics : public TObject, public NPL::VDetector{
     // Provide Physical Multiplicity
     Int_t      NanaEventMult;
 
+       
+    vector<int>   DetectorNumber;
     //   FirstStage
-    vector<double>   NanaLaBr_E;
+
+    vector<double>   LaBr_E;
 
     //   SecondStage
-    vector<double>   NanaNaI_E;
+    vector<double>   NaI_E;
 
     // Physical Value  
-    vector<double>   NanaTotalEnergy;
-    vector<double>   NanaInTotalEnergy;
-    vector<double>   NanaOutTotalEnergy;
+    vector<double>   TotalEnergy;
+    vector<double>   InTotalEnergy;
+    vector<double>   OutTotalEnergy;
 
     public: // Static constructor to be passed to the Detector Factory
      static NPL::VDetector* Construct();
diff --git a/NPSimulation/Core/MaterialManager.cc b/NPSimulation/Core/MaterialManager.cc
index 431f21e81..39c54b16b 100644
--- a/NPSimulation/Core/MaterialManager.cc
+++ b/NPSimulation/Core/MaterialManager.cc
@@ -143,6 +143,18 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
       return material; 
     }
 
+    else  if(Name == "Kovar"){
+      G4Material* material = new G4Material(Name, 8*g/cm3,5);
+      material->AddElement(GetElementFromLibrary("Ni"),290);
+      material->AddElement(GetElementFromLibrary("Co"),170);
+      material->AddElement(GetElementFromLibrary("Si"),2);
+      material->AddElement(GetElementFromLibrary("Mg"),3);
+      material->AddElement(GetElementFromLibrary("Fe"),535);
+      m_Material[Name]=material;
+      return material; 
+    }
+
+
     else  if(Name == "Havar"){
       G4Material* material = new G4Material(Name, 8.3*g / cm3,5);
       material->AddElement(GetElementFromLibrary("Co"),42);
@@ -238,11 +250,6 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
       MPT -> AddProperty("ABSLENGTH",energy_r,absorption,2);
       material -> SetMaterialPropertiesTable(MPT);
       
-      
-      
-      
-      
-      
       m_Material[Name]=material;
       return material; 
     }
@@ -254,6 +261,37 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
       return material; 
     }
 
+    else  if(Name == "Boric_Oxyde"){
+      G4Material* material = new G4Material(Name,2.55*g/cm3 ,2);
+      material->AddElement(GetElementFromLibrary("B"),2);
+      material->AddElement(GetElementFromLibrary("O"),3);
+      m_Material[Name]=material;
+      return material; 
+    }
+
+    else  if(Name == "Sodium_Oxyde"){
+      G4Material* material = new G4Material(Name,2.27*g/cm3 ,2);
+      material->AddElement(GetElementFromLibrary("Na"),2);
+      material->AddElement(GetElementFromLibrary("O"),1);
+      m_Material[Name]=material;
+      return material; 
+    }
+
+
+
+    else  if(Name == "Borosillicate_Glass"){
+      G4Material* material = new G4Material(Name,2.23*g/cm3 ,4);
+      material->AddElement(GetElementFromLibrary("Si"),80*perCent);
+      G4Material* BO = GetMaterialFromLibrary("Boric_Oxyde");
+      material->AddMaterial(BO,13*perCent);
+      G4Material* NaO = GetMaterialFromLibrary("Sodium_Oxyde");
+      material->AddMaterial(NaO,4*perCent);
+      material->AddElement(GetElementFromLibrary("Al"),3*perCent);
+      m_Material[Name]=material;
+      return material; 
+    }
+
+
     else  if(Name == "BC400"){
       G4Material* material = new G4Material(Name,1.032*g/cm3 ,2);
       material->AddElement(GetElementFromLibrary("H"),10);
diff --git a/NPSimulation/Nana/Nana.cc b/NPSimulation/Nana/Nana.cc
index 4ab8ac1ce..fb74ac1a9 100644
--- a/NPSimulation/Nana/Nana.cc
+++ b/NPSimulation/Nana/Nana.cc
@@ -310,7 +310,9 @@ void Nana::ConstructDetector(G4LogicalVolume* world){
                  zsections); 
 
  G4LogicalVolume* logicLead = new G4LogicalVolume(solidLead, Lead, "logicLead", 0, 0, 0);
-  unsigned int mysize = m_Pos.size();
+  G4VisAttributes* lead_vis= new G4VisAttributes(G4Colour(0.3, 0.3, 0.3));
+logicLead->SetVisAttributes(lead_vis);
+ unsigned int mysize = m_Pos.size();
   for(unsigned int i = 0 ; i < mysize ; i++){
     new G4PVPlacement(G4Transform3D(*m_Rot[i], m_Pos[i]), ConstructDetector(),  "NanaDetector", world, false, i+2); 
   
@@ -379,8 +381,10 @@ G4LogicalVolume* Nana::ConstructDetector(){
 
     G4Material* Vacuum = MaterialManager::getInstance()->GetMaterialFromLibrary("Vacuum");
     G4Material* Alu = MaterialManager::getInstance()->GetMaterialFromLibrary("Al");
+    G4Material* Kovar= MaterialManager::getInstance()->GetMaterialFromLibrary("Kovar");
     G4Material* Lead = MaterialManager::getInstance()->GetMaterialFromLibrary("Pb");
     G4Material* LaBr3 = MaterialManager::getInstance()->GetMaterialFromLibrary("LaBr3_Ce");
+    G4Material* Glass= MaterialManager::getInstance()->GetMaterialFromLibrary("Borosillicate_Glass");
 
     // Mother Volume
     G4Tubs* solidNanaDetector = 
@@ -416,7 +420,7 @@ G4LogicalVolume* Nana::ConstructDetector(){
     G4ThreeVector  positionLaBr3Can = G4ThreeVector(0, 0, LaBr3Can_PosZ);
 
     G4Tubs* solidLaBr3Can = new G4Tubs("solidLaBr3Can", 0.5*CanInnerDiameter, 0.5*CanOuterDiameter, 0.5*CanLength, 0.*deg, 360.*deg);
-    G4LogicalVolume* logicLaBr3Can = new G4LogicalVolume(solidLaBr3Can, Alu, "logicLaBr3Can", 0, 0, 0);
+    G4LogicalVolume* logicLaBr3Can = new G4LogicalVolume(solidLaBr3Can, Glass, "logicLaBr3Can", 0, 0, 0);
 
     new G4PVPlacement(0, 
         positionLaBr3Can, 
@@ -456,8 +460,11 @@ G4LogicalVolume* Nana::ConstructDetector(){
           const G4ThreeVector &Trans= G4ThreeVector(0.,0.,1.*cm); 
           G4SubtractionSolid*           solidPMT = new G4SubtractionSolid("solidPMT", solidPMout,solidPMin, RotMat, Trans);
           */
-    G4Tubs* solidPMT= new G4Tubs("solidPMOut", 0.0*LaBr3Face, 0.5*PMTFace, 0.5*PMTThickness, 0.*deg, 360.*deg);
-    G4LogicalVolume* logicPMT = new G4LogicalVolume(solidPMT, Alu, "logicPMT", 0, 0, 0);
+    G4Tubs* solidPMT= new G4Tubs("solidPMOut", 0.5*LaBr3Face, 0.5*PMTFace, 0.5*PMTThickness, 0.*deg, 360.*deg);
+    G4LogicalVolume* logicPMT = new G4LogicalVolume(solidPMT, Kovar, "logicPMT", 0, 0, 0);
+    G4Tubs* solidPMTWin = new G4Tubs("solidPMTWin", 0, 0.5*LaBr3Face, 0.5*WinLength, 0.*deg, 360.*deg);
+    G4LogicalVolume* logicPMTWin = new G4LogicalVolume(solidPMTWin, Glass, "logicPMTWin", 0, 0, 0);
+
 
     new G4PVPlacement(0, 
         positionPMT, 
@@ -466,6 +473,15 @@ G4LogicalVolume* Nana::ConstructDetector(){
         m_LogicalDetector, 
         false, 
         0);
+  
+    new G4PVPlacement(0, 
+        positionPMT+G4ThreeVector(0,0,-0.45*PMTThickness), 
+        logicPMTWin, 
+        "Nana_PMTWind", 
+        m_LogicalDetector, 
+        false, 
+        0);
+
 
     // Visualisation of PMT Strip
     logicPMT->SetVisAttributes(m_PMTVisAtt);
-- 
GitLab