From adc59c439f19c35816a8be5c36f7dae215d80299 Mon Sep 17 00:00:00 2001
From: adrien matta <matta@lpccaen.in2p3.fr>
Date: Fri, 7 Sep 2018 16:19:36 +0200
Subject: [PATCH] * Adding missing InteractionScorers file

---
 NPSimulation/Scorers/InteractionScorers.cc |  79 ++++++++++++
 NPSimulation/Scorers/InteractionScorers.hh | 139 +++++++++++++++++++++
 2 files changed, 218 insertions(+)
 create mode 100644 NPSimulation/Scorers/InteractionScorers.cc
 create mode 100644 NPSimulation/Scorers/InteractionScorers.hh

diff --git a/NPSimulation/Scorers/InteractionScorers.cc b/NPSimulation/Scorers/InteractionScorers.cc
new file mode 100644
index 000000000..ee474ca50
--- /dev/null
+++ b/NPSimulation/Scorers/InteractionScorers.cc
@@ -0,0 +1,79 @@
+/*****************************************************************************
+ * Copyright (C) 2009-2016   this file is part of the NPTool Project         *
+ *                                                                           *
+ * For the licensing terms see $NPTOOL/Licence/NPTool_Licence                *
+ * For the list of contributors see $NPTOOL/Licence/Contributors             *
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Original Author: Adrien MATTA  contact address: matta@lpccaen.in2p3.fr    *
+ *                                                                           *
+ * Creation Date  : February 2013                                            *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  File old the scorer to record Hit energy,time and position               *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *
+ *****************************************************************************/
+#include "InteractionScorers.hh"
+#include "G4UnitsTable.hh"
+using namespace InteractionScorers ;
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+vector<InteractionData>::iterator InteractionDataVector::find(const unsigned int& index){
+ for(vector<InteractionData>::iterator it= m_Data.begin()  ; it !=m_Data.end() ; it++){
+    if((*it).GetIndex()==index)
+      return it;
+  }
+  return m_Data.end();
+}
+
+
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+PS_Interactions::PS_Interactions(G4String name,TInteractionCoordinates* Inter, int depth)  :G4VPrimitiveScorer(name, depth){
+    m_Level = depth;
+    m_InterractionCoordinates=Inter;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+G4bool PS_Interactions::ProcessHits(G4Step* aStep, G4TouchableHistory*){
+  static G4StepPoint* point;
+  point = aStep->GetPreStepPoint();
+  t_Energy = aStep->GetTotalEnergyDeposit();
+  t_Time = point->GetGlobalTime();
+  t_Position  = point->GetPosition();
+  t_Index = aStep->GetTrack()->GetTrackID(); 
+  vector<InteractionData>::iterator it;
+  it = m_DataVector.find(t_Index); 
+  if(it!=m_DataVector.end())
+    it->Add(t_Energy);
+  else
+    m_DataVector.Set(t_Index,t_Energy,t_Time,t_Position.x(),t_Position.y(),t_Position.z(),t_Position.theta(),t_Position.phi());
+
+
+  return TRUE;
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+void PS_Interactions::Initialize(G4HCofThisEvent*){
+  // Clear is called by EventAction
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+void PS_Interactions::EndOfEvent(G4HCofThisEvent*){
+  unsigned int size = m_DataVector.size();
+
+  for(unsigned int i = 0 ; i < size ; i++)
+     m_InterractionCoordinates->SetInteraction(m_DataVector[i]->GetEnergy(),m_DataVector[i]->GetTime(),m_DataVector[i]->GetPositionX(),m_DataVector[i]->GetPositionY(),m_DataVector[i]->GetPositionZ(),m_DataVector[i]->GetTheta()/deg,m_DataVector[i]->GetPhi()/deg);
+
+  m_DataVector.clear();
+}
+
+//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+void PS_Interactions::clear(){
+  m_DataVector.clear();
+}
diff --git a/NPSimulation/Scorers/InteractionScorers.hh b/NPSimulation/Scorers/InteractionScorers.hh
new file mode 100644
index 000000000..2a091e17b
--- /dev/null
+++ b/NPSimulation/Scorers/InteractionScorers.hh
@@ -0,0 +1,139 @@
+#ifndef InteractionScorers_h
+#define InteractionScorers_h 1
+/*****************************************************************************
+ * Copyright (C) 2009-2016   this file is part of the NPTool Project         *
+ *                                                                           *
+ * For the licensing terms see $NPTOOL/Licence/NPTool_Licence                *
+ * For the list of contributors see $NPTOOL/Licence/Contributors             *
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Original Author: Adrien MATTA  contact address: matta@lpccaen.in2p3.fr    *
+ *                                                                           *
+ * Creation Date  : February 2013                                            *
+ * Last update    :                                                          *
+ *---------------------------------------------------------------------------*
+ * Decription:                                                               *
+ *  File old the scorer to record Hit energy,time and position               *
+ *                                                                           *
+ *---------------------------------------------------------------------------*
+ * Comment:                                                                  *
+ *                                                                           *
+ *****************************************************************************/
+#include "G4VPrimitiveScorer.hh"
+#include "TInteractionCoordinates.h"
+#include "NPImage.h"
+#include <map>
+using namespace std;
+using namespace CLHEP;
+
+namespace InteractionScorers {
+
+  //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+  class InteractionData{
+    public:
+      InteractionData(){m_Index=0;};
+      InteractionData(const unsigned int& Index ,const double& Energy, const double& Time , const double& PositionX, const double& PositionY, const double& PositionZ, const double& Theta, const double& Phi){
+        m_Index = Index;
+        m_Energy = Energy;
+        m_Time = Time;
+        m_PositionX = PositionX;;
+        m_PositionY = PositionY;
+        m_PositionZ = PositionZ;
+        m_Theta = Theta;
+        m_Phi = Phi;
+      }
+
+      ~InteractionData(){};
+
+    private:
+      unsigned int m_Index;
+      double m_Energy;
+      double m_Time;
+      double m_PositionX;
+      double m_PositionY;
+      double m_PositionZ;
+      double m_Theta;
+      double m_Phi;
+
+    public:
+      unsigned int GetIndex() const{return m_Index;};
+      double GetEnergy() const{return m_Energy;};
+      double GetTime() const{return m_Time;};
+      double GetPositionX() const{return m_PositionX;};
+      double GetPositionY() const{return m_PositionY;};
+      double GetPositionZ() const{return m_PositionZ;};
+      double GetTheta() const{return m_Theta;};
+      double GetPhi() const{return m_Phi;};
+
+
+    public:
+      void Set(const unsigned int& Index, const double& Energy, const double& Time , const double& PositionX, const double& PositionY, const double& PositionZ, const double& Theta, const double& Phi){
+        m_Index = Index;
+        m_Energy = Energy;
+        m_Time = Time;
+        m_PositionX = PositionX;;
+        m_PositionY = PositionY;
+        m_PositionZ = PositionZ;
+        m_Theta = Theta;
+        m_Phi = Phi;
+      }
+      void Add(const double& Energy){m_Energy+=Energy;};
+      unsigned int GetIndex(){return m_Index;};
+  };
+
+  //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+  // Manage a vector of Interaction hit
+  class InteractionDataVector{
+    public:
+      InteractionDataVector(){};
+      ~InteractionDataVector(){};
+
+    private:
+      vector<InteractionData> m_Data;
+
+    public:
+      vector<InteractionData>::iterator find(const unsigned int& index) ;
+      void clear(){m_Data.clear();} ;
+      vector<InteractionData>::iterator end() {return m_Data.end();};
+      vector<InteractionData>::iterator begin() {return m_Data.begin();};
+      unsigned int size() {return m_Data.size();};
+      void Add(const unsigned int& index,const double& Energy) {find(index)->Add(Energy);};
+      void Set(const unsigned int& index,const double& Energy, const double& Time , const double& PositionX, const double& PositionY, const double& PositionZ, const double& Theta, const double& Phi) {m_Data.push_back(InteractionData(index,Energy,Time,PositionX,PositionY,PositionZ,Theta,Phi));};
+      InteractionData* operator[](const unsigned int& i){return &m_Data[i];};
+  };
+
+
+  //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
+  class PS_Interactions : public G4VPrimitiveScorer{
+
+    public: // with description
+      PS_Interactions(G4String name, TInteractionCoordinates* Inter,G4int depth=0);
+      ~PS_Interactions(){};
+
+    protected: // with description
+      G4bool ProcessHits(G4Step*, G4TouchableHistory*);
+
+    public:
+      void Initialize(G4HCofThisEvent*);
+      void EndOfEvent(G4HCofThisEvent*);
+      void clear();
+      void DrawAll(){};
+      void PrintAll(){m_InterractionCoordinates->Dump();};
+
+      // Level at which to find the copy number linked to the detector number
+      G4int    m_Level;
+
+    private:
+      InteractionDataVector m_DataVector;
+      TInteractionCoordinates* m_InterractionCoordinates; 
+      unsigned int t_Index;
+      double t_Energy;
+      double t_Time;
+      G4ThreeVector t_Position;
+  };
+
+}
+
+
+#endif
-- 
GitLab