From 58c0cd6cfe2e2086beaa4f32c89699ebf81c8128 Mon Sep 17 00:00:00 2001 From: Elidiano Tronchin <elidiano.tronchin@gmail.com> Date: Fri, 30 Nov 2018 10:44:48 +0100 Subject: [PATCH] *Implemented Target of MINOS: NOW SIMULATION WORKS! --- NPSimulation/Detectors/Minos/Minos.cc | 92 +++++++++++++-------------- NPSimulation/Detectors/Minos/Minos.hh | 16 ++++- 2 files changed, 60 insertions(+), 48 deletions(-) diff --git a/NPSimulation/Detectors/Minos/Minos.cc b/NPSimulation/Detectors/Minos/Minos.cc index 8a866d213..c41b18650 100644 --- a/NPSimulation/Detectors/Minos/Minos.cc +++ b/NPSimulation/Detectors/Minos/Minos.cc @@ -42,6 +42,8 @@ #include "Minos.hh" #include "CalorimeterScorers.hh" #include "InteractionScorers.hh" +#include "TPCScorers.hh" + #include "RootOutput.h" #include "MaterialManager.hh" #include "NPSDetectorFactory.hh" @@ -76,7 +78,7 @@ Minos::Minos(){ m_MinosTPCScorer = 0; m_SquareDetector = 0; m_CylindricalDetector = 0; - + m_ReactionRegion=NULL; // RGB Color + Transparency m_VisSquare = new G4VisAttributes(G4Colour(0, 1, 0, 0.5)); @@ -667,57 +669,53 @@ void Minos::ConstructDetector(G4LogicalVolume* world){ world, //its mother volume false, //no boolean operation 0); //copy number - - if(!m_ReactionRegion){ - - G4ProductionCuts* ecut = new G4ProductionCuts(); - G4ProductionCuts* pcut = new G4ProductionCuts(); - ecut->SetProductionCut(1000,"e-"); - pcut->SetProductionCut(1,"p"); - - m_ReactionRegion= new G4Region("NPSimulationProcess"); - // logicTPC -> SetRegion(m_ReactionRegion); - m_ReactionRegion->SetProductionCuts(ecut); - m_ReactionRegion->SetProductionCuts(ecut); - // m_ReactionRegion -> AddRootLogicalVolume(logicTPC); - m_ReactionRegion -> AddRootLogicalVolume(logicTarget); - - m_ReactionRegion->SetUserLimits(new G4UserLimits(1.2*mm)); - - G4Region* Region_cut = new G4Region("RegionCut"); - logicTPC->SetRegion(Region_cut); - Region_cut->SetProductionCuts(ecut); - Region_cut->SetProductionCuts(pcut); - Region_cut->AddRootLogicalVolume(logicTPC); - } - - - //G4FastSimulationManager* mng = m_ReactionRegion->GetFastSimulationManager(); //DOESN WORK - - // unsigned int size = m_ReactionModel.size(); - - - /* - for(unsigned int o = 0 ; o < size ; o++){ - mng->RemoveFastSimulationModel(m_ReactionModel[o]); - } - */ - - - // m_ReactionModel.clear(); - // G4VFastSimulationModel* fsm; - // fsm = new NPS::BeamReaction("BeamReaction",m_ReactionRegion); - // m_ReactionModel.push_back(fsm); - //fsm = new NPS::Decay("Decay",m_ReactionRegion); - //m_ReactionModel.push_back(fsm); - + + + G4ProductionCuts* ecut = new G4ProductionCuts(); + G4ProductionCuts* pcut = new G4ProductionCuts(); + if(!m_ReactionRegion){ + + + ecut->SetProductionCut(1000,"e-"); + pcut->SetProductionCut(1,"p"); + + m_ReactionRegion= new G4Region("NPSimulationProcess"); + m_ReactionRegion -> AddRootLogicalVolume(logicTarget); + + // logicTPC -> SetRegion(m_ReactionRegion); + m_ReactionRegion->SetProductionCuts(ecut); + m_ReactionRegion->SetProductionCuts(ecut); + // m_ReactionRegion -> AddRootLogicalVolume(logicTPC); + + m_ReactionRegion->SetUserLimits(new G4UserLimits(1.2*mm)); //??? + } + + G4FastSimulationManager* mng = m_ReactionRegion->GetFastSimulationManager(); //DOESN WORK + unsigned int size = m_ReactionModel.size(); + for(unsigned int o = 0 ; o < size ; o++){ + mng->RemoveFastSimulationModel(m_ReactionModel[o]); + } + m_ReactionModel.clear(); + G4VFastSimulationModel* fsm; + fsm = new NPS::BeamReaction("BeamReaction",m_ReactionRegion); + m_ReactionModel.push_back(fsm); + fsm = new NPS::Decay("Decay",m_ReactionRegion); + m_ReactionModel.push_back(fsm); + + G4Region* Region_cut = new G4Region("RegionCut"); + logicTPC->SetRegion(Region_cut); + Region_cut->SetProductionCuts(ecut); + Region_cut->SetProductionCuts(pcut); + Region_cut->AddRootLogicalVolume(logicTPC); + + } // // Visualization attributes // world->SetVisAttributes (G4VisAttributes::Invisible); - + } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Add Detector branch to the EventTree. @@ -772,7 +770,7 @@ void Minos::InitializeScorers() { G4VPrimitiveScorer* InteractionMinosTargetScorer= new InteractionScorers::PS_Interactions("InteractionMinosTargetScore",ms_InterCoord, 0) ; //and register it to the multifunctionnal detector m_MinosTargetScorer->RegisterPrimitive(CalorimeterMinosTargetScorer); - m_MinosTargetScorer->RegisterPrimitive(InteractionMinosTargetScore); + m_MinosTargetScorer->RegisterPrimitive(InteractionMinosTargetScorer); G4VPrimitiveScorer* TPCScorer= new TPCScorers::PS_TPCCathode("MinosTPC", 0); diff --git a/NPSimulation/Detectors/Minos/Minos.hh b/NPSimulation/Detectors/Minos/Minos.hh index e77ee2f8e..acd264136 100644 --- a/NPSimulation/Detectors/Minos/Minos.hh +++ b/NPSimulation/Detectors/Minos/Minos.hh @@ -31,11 +31,16 @@ using namespace std; #include "G4RotationMatrix.hh" #include "G4LogicalVolume.hh" #include "G4MultiFunctionalDetector.hh" +#include "G4VFastSimulationModel.hh" +#include "G4UserLimits.hh" +#include "G4FastSimulationManager.hh" // NPTool header #include "NPSVDetector.hh" #include "TMinosData.h" #include "NPInputParser.h" +#include "Decay.hh" +#include "BeamReaction.hh" class Minos : public NPS::VDetector{ //////////////////////////////////////////////////// @@ -199,7 +204,9 @@ class Minos : public NPS::VDetector{ void InitializeScorers() ; // Associated Scorer - G4MultiFunctionalDetector* m_MinosScorer ; + G4MultiFunctionalDetector* m_MinosTargetScorer ; + G4MultiFunctionalDetector* m_MinosTPCScorer ; + //////////////////////////////////////////////////// ///////////Event class to store Data//////////////// //////////////////////////////////////////////////// @@ -222,6 +229,13 @@ class Minos : public NPS::VDetector{ G4VisAttributes* m_VisSquare; G4VisAttributes* m_VisCylinder; + + private: + // Region were reaction can occure: + G4Region* m_ReactionRegion; + vector<G4VFastSimulationModel*> m_ReactionModel; + + // Needed for dynamic loading of the library public: static NPS::VDetector* Construct(); -- GitLab