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