diff --git a/NPSimulation/AnnularS1/AnnularS1.cc b/NPSimulation/AnnularS1/AnnularS1.cc index 638858822cfa3d93819a2c12f9f5bac5d3e44920..47ede5eee89330e947767c6620923def831eb30b 100644 --- a/NPSimulation/AnnularS1/AnnularS1.cc +++ b/NPSimulation/AnnularS1/AnnularS1.cc @@ -65,7 +65,6 @@ AnnularS1::AnnularS1(){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... AnnularS1::~AnnularS1(){ - delete m_Event; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/NPSimulation/SSSD/ThinSi.cc b/NPSimulation/SSSD/ThinSi.cc index 33ae2498fe509cb19531c1dfe6176e7b18eed436..a068f0924528daa10d0c8a033ce21be2ca0922dd 100644 --- a/NPSimulation/SSSD/ThinSi.cc +++ b/NPSimulation/SSSD/ThinSi.cc @@ -66,10 +66,6 @@ ThinSi::ThinSi(){ } ThinSi::~ThinSi(){ - delete m_MaterialSilicon; - delete m_MaterialAl; - delete m_MaterialVacuum; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ThinSi::AddTelescope( G4ThreeVector TL, @@ -220,8 +216,7 @@ void ThinSi::VolumeMaker( G4int DetNumber , G4LogicalVolume* logicSi = new G4LogicalVolume(solidSi, m_MaterialSilicon, "logicSi", 0, 0, 0); - G4VisAttributes* VisAtt2 = new G4VisAttributes(G4Colour(0.3, 0.3, 0.3)); - logicAlu->SetVisAttributes(VisAtt2); + logicAlu->SetVisAttributes(G4VisAttributes::Invisible); new G4PVPlacement(0, posSi, logicSi, Name + "_Si", logicThinSi, true, 0); diff --git a/NPSimulation/Simulation.cc b/NPSimulation/Simulation.cc index 3007e3a62b981ba5922c95900dbf9409ec094e7f..124e87d36dc6cb9bae03916c3503e45b4749df37 100644 --- a/NPSimulation/Simulation.cc +++ b/NPSimulation/Simulation.cc @@ -43,7 +43,12 @@ int main(int argc, char** argv){ G4String DetectorFileName = OptionManager->GetDetectorFile(); // my Verbose output class G4VSteppingVerbose::SetInstance(new SteppingVerbose); - + + /////////////////////////////////////////////////////////////// + ///////////////// Initializing the Root Output //////////////// + /////////////////////////////////////////////////////////////// + RootOutput::getInstance("Simulation/" + OptionManager->GetOutputFile()); + // Construct the default run manager G4RunManager* runManager = new G4RunManager; @@ -79,16 +84,7 @@ int main(int argc, char** argv){ G4UIExecutive* ui = new G4UIExecutive(argc, argv); #endif - /////////////////////////////////////////////////////////////// - ///////////////// Initializing the Root Output //////////////// - /////////////////////////////////////////////////////////////// - RootOutput::getInstance("Simulation/" + OptionManager->GetOutputFile()); - - /////////////////////////////////////////////////////////////// - ////////////// Reading Detector Configuration ///////////////// - /////////////////////////////////////////////////////////////// - detector->ReadConfigurationFile(DetectorFileName); - + /////////////////////////////////////////////////////////////// ////////////////////// Reading Reaction /////////////////////// /////////////////////////////////////////////////////////////// diff --git a/NPSimulation/Tiara/Tiara.cc b/NPSimulation/Tiara/Tiara.cc index b42c5c97d15ff7959dd5e3ea5c7b93c5906a9387..a409b1a9662f18a4b6583de18a6b876a1e5e5998 100644 --- a/NPSimulation/Tiara/Tiara.cc +++ b/NPSimulation/Tiara/Tiara.cc @@ -329,8 +329,7 @@ void Tiara::InitializeScorers(){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Tiara::InitializeRootOutput(){ - RootOutput *pAnalysis = RootOutput::getInstance(); - TTree *pTree = pAnalysis->GetTree(); + TTree *pTree = RootOutput::getInstance()->GetTree(); pTree->Branch("TiaraBarrel", "TTiaraBarrelData", &m_EventBarrel) ; pTree->Branch("TiaraHyball", "TTiaraHyballData", &m_EventHyball) ; @@ -338,11 +337,8 @@ void Tiara::InitializeRootOutput(){ // a redifinition of the geometry in the simulation pTree->SetBranchAddress("TiaraBarrel", &m_EventBarrel) ; pTree->SetBranchAddress("TiaraHyball", &m_EventHyball) ; - - } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Tiara::ConstructInnerBarrel(G4LogicalVolume* world){ // Tiara Barrel diff --git a/NPSimulation/include/DetectorConstruction.hh b/NPSimulation/include/DetectorConstruction.hh index 480176218f25049ac50b78ae8b0b69e608406061..f0fb9c103e275dc8c6944f2384882c475912d09f 100644 --- a/NPSimulation/include/DetectorConstruction.hh +++ b/NPSimulation/include/DetectorConstruction.hh @@ -56,7 +56,7 @@ public: void RedefineGeometry(string file=""); public: - void ReadConfigurationFile(string); + G4VPhysicalVolume* ReadConfigurationFile(); void AddDetector(VDetector*); void ReadAllSensitive(const G4Event*); diff --git a/NPSimulation/include/MaterialManager.hh b/NPSimulation/include/MaterialManager.hh index a145b8559cf8181cded92ab68644bbf428d55238..b0f8017647ec5981dd827af69b09048eacf0c50b 100644 --- a/NPSimulation/include/MaterialManager.hh +++ b/NPSimulation/include/MaterialManager.hh @@ -61,6 +61,9 @@ private: map<string,G4Material*> m_Material; public: + // clear all exising material from the library + void ClearMaterialLibrary(); + // Look for a known material named Name. // If the Material is known but not instantiate it is created and return // If the Material is instantiate it return it diff --git a/NPSimulation/macro/gui.mac b/NPSimulation/macro/gui.mac index 443e2618904e9b845980c9f8adf5cee0d14d9854..5e7afec71b426157748f8d8ed7f9f318ee6b1442 100644 --- a/NPSimulation/macro/gui.mac +++ b/NPSimulation/macro/gui.mac @@ -20,16 +20,17 @@ #/gui/addButton custom "Add Hits" "/vis/scene/add/hits" # NPS tool bar -/gui/addIcon "nptool" user_icon "/gui/system {gui_nptool}" icons/NPToolLogo.png +/gui/addIcon "Follow us on GitHub" user_icon "/gui/system {gui_nptool}" icons/NPToolLogo.png /gui/addIcon "Exit" user_icon "{gui_exit}" icons/power.png +/gui/addIcon "the star gaze" user_icon "{gui_empty}" icons/empty.png /gui/addIcon "Update geometry" user_icon "{gui_update}" icons/recycle.png /gui/addIcon "Update generator" user_icon "/gen/update" icons/bolt.png /gui/addIcon "Open generator" user_icon "/gen/open" icons/folder.png -/gui/addIcon "There is nothing here" user_icon "{gui_empty}" icons/empty.png +/gui/addIcon "the moon beyond the clouds" user_icon "{gui_empty}" icons/empty.png /gui/addIcon "Run beam on" user_icon "/run/beamOn" icons/rocket.png /gui/addIcon "One event" user_icon "{gui_beamon}" icons/play.png /gui/addIcon "Activate tracking verbose" user_icon "{gui_tracking}" icons/shoeprints.png -/gui/addIcon "Only borring emptiness" user_icon "{gui_empty}" icons/empty.png +/gui/addIcon "fill the empty dark" user_icon "{gui_empty}" icons/empty.png /gui/addIcon "View Browser" user_icon "{gui_browser}" icons/browser.png /gui/addIcon "Take a screen shot" user_icon "/vis/ogl/printEPS" icons/camera.png /gui/addIcon "Home" user_icon "{gui_home}" icons/eye.png diff --git a/NPSimulation/src/DetectorConstruction.cc b/NPSimulation/src/DetectorConstruction.cc index 6bbaa5b359408d59d26352d29e7b42bc8b04e260..6c86ace87263925e4c093577fd4b4d5dadd94e24 100644 --- a/NPSimulation/src/DetectorConstruction.cc +++ b/NPSimulation/src/DetectorConstruction.cc @@ -129,6 +129,7 @@ #include<fstream> // NPL +#include "RootOutput.h" #include "NPOptionManager.h" #include "MaterialManager.hh" #include "DetectorMessenger.hh" @@ -145,27 +146,7 @@ DetectorConstruction::~DetectorConstruction(){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4VPhysicalVolume* DetectorConstruction::Construct(){ - G4Material* Vacuum = MaterialManager::getInstance()->GetMaterialFromLibrary("Vacuum"); - - //------------------------------world volume - G4double world_x = 10.0 * m; - G4double world_y = 10.0 * m; - G4double world_z = 10.0 * m; - - G4Box* world_box - = new G4Box("world_box", world_x, world_y, world_z); - - world_log = new G4LogicalVolume(world_box, Vacuum, "world_log", 0, 0, 0); - world_phys = new G4PVPlacement(0, G4ThreeVector(), world_log, "world", 0, false, 0); - - G4VisAttributes* VisAtt = new G4VisAttributes(G4VisAttributes::Invisible); - world_log->SetVisAttributes(VisAtt); - - //------------------------------------------------------------------ - - //------------------------------------------------------------------ - - return world_phys; + return ReadConfigurationFile(); } @@ -188,7 +169,30 @@ void DetectorConstruction::AddDetector(VDetector* NewDetector){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::ReadConfigurationFile(string Path){ +G4VPhysicalVolume* DetectorConstruction::ReadConfigurationFile(){ + // Construct the World volume + G4Material* Vacuum = MaterialManager::getInstance()->GetMaterialFromLibrary("Vacuum"); + + //------------------------------world volume + G4double world_x = 10.0 * m; + G4double world_y = 10.0 * m; + G4double world_z = 10.0 * m; + + G4Box* world_box + = new G4Box("world_box", world_x, world_y, world_z); + + world_log = new G4LogicalVolume(world_box, Vacuum, "world_log", 0, 0, 0); + world_phys = new G4PVPlacement(0, G4ThreeVector(), world_log, "world", 0, false, 0); + + G4VisAttributes* VisAtt = new G4VisAttributes(G4VisAttributes::Invisible); + world_log->SetVisAttributes(VisAtt); + + //------------------------------------------------------------------ + + //------------------------------------------------------------------ + + string Path = NPOptionManager::getInstance()->GetDetectorFile(); + ////////General Reading needs//////// string LineBuffer; string DataBuffer; @@ -462,7 +466,6 @@ void DetectorConstruction::ReadConfigurationFile(string Path){ ConfigFile.close() ; myDetector->ReadConfiguration(Path) ; ConfigFile.open(Path.c_str()) ; - // Add array to the VDetector Vector AddDetector(myDetector) ; #endif @@ -730,7 +733,7 @@ void DetectorConstruction::ReadConfigurationFile(string Path){ // Create the Material sample for DEDX tables MaterialManager::getInstance()->CreateSampleVolumes(world_log); - return; + return world_phys; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -743,7 +746,8 @@ void DetectorConstruction::ReadAllSensitive(const G4Event* event){ if(m_Detectors.size()>0) m_Detectors[0]->GetInterCoordPointer()->Clear(); - for (unsigned short i = 0 ; i < m_Detectors.size() ; i++) { + unsigned int mysize = m_Detectors.size(); + for (unsigned short i = 0 ; i < mysize ; i++) { m_Detectors[i]->ReadSensitive(event); } } @@ -755,13 +759,8 @@ G4LogicalVolume* DetectorConstruction::GetWorldLogic(){ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void DetectorConstruction::ClearGeometry(){ - G4GeometryManager::GetInstance()->OpenGeometry(); - G4PhysicalVolumeStore::GetInstance()->Clean(); - G4LogicalVolumeStore::GetInstance()->Clean(); - G4SolidStore::GetInstance()->Clean(); - G4RunManager::GetRunManager()->DefineWorldVolume(Construct()); - unsigned int mySize = m_Detectors.size(); + for (unsigned short i = 0 ; i < mySize ; i++) { delete m_Detectors[i]; } @@ -769,15 +768,26 @@ void DetectorConstruction::ClearGeometry(){ m_Detectors.clear(); m_Target = 0; m_Chamber = 0 ; + world_log=0; + world_phys=0; + + G4GeometryManager::GetInstance()->OpenGeometry(); + G4PhysicalVolumeStore::GetInstance()->Clean(); + G4LogicalVolumeStore::GetInstance()->Clean(); + G4SolidStore::GetInstance()->Clean(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void DetectorConstruction::RedefineGeometry(string file){ ClearGeometry() ; + RootOutput::getInstance()->GetTree()->ResetBranchAddresses(); + RootOutput::getInstance()->GetTree()->GetListOfBranches()->Clear(); + if(file!="") NPOptionManager::getInstance()->SetDetectorFile(file); - ReadConfigurationFile(NPOptionManager::getInstance()->GetDetectorFile()); - + G4RunManager::GetRunManager()->DefineWorldVolume(Construct()); + G4RunManager::GetRunManager()->GeometryHasBeenModified(); + G4RunManager::GetRunManager()->Initialize(); } diff --git a/NPSimulation/src/MaterialManager.cc b/NPSimulation/src/MaterialManager.cc index 7f6100fc0fa9be96a642488160c4d4f0036d1842..f00b124fbf9016dc9efd2dbf2ef169c462b8c0f4 100644 --- a/NPSimulation/src/MaterialManager.cc +++ b/NPSimulation/src/MaterialManager.cc @@ -57,6 +57,16 @@ MaterialManager::MaterialManager(){ void MaterialManager::Destroy(){ } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void MaterialManager::ClearMaterialLibrary(){ + map<string,G4Material*>::iterator it; + for(it = m_Material.begin() ; it != m_Material.end() ; it++){ + delete it->second; + } + + m_Material.clear(); +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Material* MaterialManager::GetMaterialFromLibrary(string Name){ diff --git a/NPSimulation/src/VDetector.cc b/NPSimulation/src/VDetector.cc index 7e613a2dd6b267ea8a9aa4ef9959beaa0e3c5ccc..a1320f9c3d8404704b586b4116664ef739df8b95 100644 --- a/NPSimulation/src/VDetector.cc +++ b/NPSimulation/src/VDetector.cc @@ -26,7 +26,7 @@ #include "RootOutput.h" #include "G4SDManager.hh" -TInteractionCoordinates *VDetector::ms_InterCoord = 0; +TInteractionCoordinates* VDetector::ms_InterCoord = 0; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Constructor @@ -44,11 +44,8 @@ VDetector::~VDetector(){ void VDetector::InitializeRootOutput(){ RootOutput *pAnalysis = RootOutput::getInstance(); TTree *pTree = pAnalysis->GetTree(); - // if the branch does not exist yet, create it - if (!pTree->GetBranch("InteractionCoordinates")) pTree->Branch("InteractionCoordinates", "TInteractionCoordinates", &ms_InterCoord); - - pTree->SetBranchAddress("InteractionCoordinates", &ms_InterCoord); + pTree->SetBranchAddress("InteractionCoordinates", &ms_InterCoord); }