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