New name and major changes
This commit is contained in:
		
							parent
							
								
									c076786494
								
							
						
					
					
						commit
						4dee12aa71
					
				| 
						 | 
					@ -0,0 +1,68 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeEMPhysics.hh 81557 2014-06-03 08:32:44Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/include/LXeEMPhysics.hh
 | 
				
			||||||
 | 
					/// \brief Definition of the LXeEMPhysics class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#ifndef LXeEMPhysics_h
 | 
				
			||||||
 | 
					#define LXeEMPhysics_h 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4ios.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4VPhysicsConstructor.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4PhotoElectricEffect.hh"
 | 
				
			||||||
 | 
					#include "G4ComptonScattering.hh"
 | 
				
			||||||
 | 
					#include "G4GammaConversion.hh"
 | 
				
			||||||
 | 
					#include "G4eMultipleScattering.hh"
 | 
				
			||||||
 | 
					#include "G4eIonisation.hh"
 | 
				
			||||||
 | 
					#include "G4eBremsstrahlung.hh"
 | 
				
			||||||
 | 
					#include "G4eplusAnnihilation.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LXeEMPhysics : public G4VPhysicsConstructor
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LXeEMPhysics(const G4String& name ="EM");
 | 
				
			||||||
 | 
					    virtual ~LXeEMPhysics();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // This method will be invoked in the Construct() method.
 | 
				
			||||||
 | 
					    // each particle type will be instantiated
 | 
				
			||||||
 | 
					    virtual void ConstructParticle();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    // This method will be invoked in the Construct() method.
 | 
				
			||||||
 | 
					    // each physics process will be instantiated and
 | 
				
			||||||
 | 
					    // registered to the process manager of each particle type
 | 
				
			||||||
 | 
					    virtual void ConstructProcess();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,58 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeGeneralPhysics.hh 90338 2015-05-26 08:35:43Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/include/LXeGeneralPhysics.hh
 | 
				
			||||||
 | 
					/// \brief Definition of the LXeGeneralPhysics class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#ifndef LXeGeneralPhysics_h
 | 
				
			||||||
 | 
					#define LXeGeneralPhysics_h 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4ios.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4VPhysicsConstructor.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LXeGeneralPhysics : public G4VPhysicsConstructor
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LXeGeneralPhysics(const G4String& name = "general");
 | 
				
			||||||
 | 
					    virtual ~LXeGeneralPhysics();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // This method will be invoked in the Construct() method.
 | 
				
			||||||
 | 
					    // each particle type will be instantiated
 | 
				
			||||||
 | 
					    virtual void ConstructParticle();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    // This method will be invoked in the Construct() method.
 | 
				
			||||||
 | 
					    // each physics process will be instantiated and
 | 
				
			||||||
 | 
					    // registered to the process manager of each particle type
 | 
				
			||||||
 | 
					    virtual void ConstructProcess();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,65 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeMuonPhysics.hh 85587 2014-10-31 09:12:28Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/include/LXeMuonPhysics.hh
 | 
				
			||||||
 | 
					/// \brief Definition of the LXeMuonPhysics class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#ifndef LXeMuonPhysics_h
 | 
				
			||||||
 | 
					#define LXeMuonPhysics_h 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4ios.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4VPhysicsConstructor.hh"
 | 
				
			||||||
 | 
					#include "G4MuMultipleScattering.hh"
 | 
				
			||||||
 | 
					#include "G4MuBremsstrahlung.hh"
 | 
				
			||||||
 | 
					#include "G4MuPairProduction.hh"
 | 
				
			||||||
 | 
					#include "G4MuIonisation.hh"
 | 
				
			||||||
 | 
					#include "G4hIonisation.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4MuonMinusCapture.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LXeMuonPhysics : public G4VPhysicsConstructor
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LXeMuonPhysics(const G4String& name="muon");
 | 
				
			||||||
 | 
					    virtual ~LXeMuonPhysics();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // This method will be invoked in the Construct() method.
 | 
				
			||||||
 | 
					    // each particle type will be instantiated
 | 
				
			||||||
 | 
					    virtual void ConstructParticle();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    // This method will be invoked in the Construct() method.
 | 
				
			||||||
 | 
					    // each physics process will be instantiated and
 | 
				
			||||||
 | 
					    // registered to the process manager of each particle type
 | 
				
			||||||
 | 
					    virtual void ConstructProcess();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXePhysicsList.hh 68752 2013-04-05 10:23:47Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/include/LXePhysicsList.hh
 | 
				
			||||||
 | 
					/// \brief Definition of the LXePhysicsList class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#ifndef LXePhysicsList_h
 | 
				
			||||||
 | 
					#define LXePhysicsList_h 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4VModularPhysicsList.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LXePhysicsList: public G4VModularPhysicsList
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LXePhysicsList();
 | 
				
			||||||
 | 
					    virtual ~LXePhysicsList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // SetCuts()
 | 
				
			||||||
 | 
					    virtual void SetCuts();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,87 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeTrajectory.hh 72349 2013-07-16 12:13:16Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/include/LXeTrajectory.hh
 | 
				
			||||||
 | 
					/// \brief Definition of the LXeTrajectory class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#ifndef LXeTrajectory_h
 | 
				
			||||||
 | 
					#define LXeTrajectory_h 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4Trajectory.hh"
 | 
				
			||||||
 | 
					#include "G4Allocator.hh"
 | 
				
			||||||
 | 
					#include "G4ios.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleDefinition.hh"
 | 
				
			||||||
 | 
					#include "G4TrajectoryPoint.hh"
 | 
				
			||||||
 | 
					#include "G4Track.hh"
 | 
				
			||||||
 | 
					#include "G4Step.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class G4Polyline;                   // Forward declaration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LXeTrajectory : public G4Trajectory
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LXeTrajectory();
 | 
				
			||||||
 | 
					    LXeTrajectory(const G4Track* aTrack);
 | 
				
			||||||
 | 
					    LXeTrajectory(LXeTrajectory &);
 | 
				
			||||||
 | 
					    virtual ~LXeTrajectory();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    virtual void DrawTrajectory() const;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    inline void* operator new(size_t);
 | 
				
			||||||
 | 
					    inline void  operator delete(void*);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetDrawTrajectory(G4bool b){fDrawit=b;}
 | 
				
			||||||
 | 
					    void WLS(){fWls=true;}
 | 
				
			||||||
 | 
					    void SetForceDrawTrajectory(G4bool b){fForceDraw=b;}
 | 
				
			||||||
 | 
					    void SetForceNoDrawTrajectory(G4bool b){fForceNoDraw=b;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    G4bool fWls;
 | 
				
			||||||
 | 
					    G4bool fDrawit;
 | 
				
			||||||
 | 
					    G4bool fForceNoDraw;
 | 
				
			||||||
 | 
					    G4bool fForceDraw;
 | 
				
			||||||
 | 
					    G4ParticleDefinition* fParticleDefinition;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern G4ThreadLocal G4Allocator<LXeTrajectory>* LXeTrajectoryAllocator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline void* LXeTrajectory::operator new(size_t)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if(!LXeTrajectoryAllocator)
 | 
				
			||||||
 | 
					      LXeTrajectoryAllocator = new G4Allocator<LXeTrajectory>;
 | 
				
			||||||
 | 
					  return (void*)LXeTrajectoryAllocator->MallocSingle();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline void LXeTrajectory::operator delete(void* aTrajectory)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  LXeTrajectoryAllocator->FreeSingle((LXeTrajectory*)aTrajectory);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,102 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeUserEventInformation.hh 68752 2013-04-05 10:23:47Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/include/LXeUserEventInformation.hh
 | 
				
			||||||
 | 
					/// \brief Definition of the LXeUserEventInformation class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#include "G4VUserEventInformation.hh"
 | 
				
			||||||
 | 
					#include "G4ThreeVector.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef LXeUserEventInformation_h
 | 
				
			||||||
 | 
					#define LXeUserEventInformation_h 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LXeUserEventInformation : public G4VUserEventInformation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    LXeUserEventInformation();
 | 
				
			||||||
 | 
					    virtual ~LXeUserEventInformation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    inline virtual void Print()const{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void IncPhotonCount_Scint(){fPhotonCount_Scint++;}
 | 
				
			||||||
 | 
					    void IncPhotonCount_Ceren(){fPhotonCount_Ceren++;}
 | 
				
			||||||
 | 
					    void IncEDep(G4double dep){fTotE+=dep;}
 | 
				
			||||||
 | 
					    void IncAbsorption(){fAbsorptionCount++;}
 | 
				
			||||||
 | 
					    void IncBoundaryAbsorption(){fBoundaryAbsorptionCount++;}
 | 
				
			||||||
 | 
					    void IncHitCount(G4int i=1){fHitCount+=i;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetEWeightPos(const G4ThreeVector& p){fEWeightPos=p;}
 | 
				
			||||||
 | 
					    void SetReconPos(const G4ThreeVector& p){fReconPos=p;}
 | 
				
			||||||
 | 
					    void SetConvPos(const G4ThreeVector& p){fConvPos=p;fConvPosSet=true;}
 | 
				
			||||||
 | 
					    void SetPosMax(const G4ThreeVector& p,G4double edep){fPosMax=p;fEdepMax=edep;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    G4int GetPhotonCount_Scint()const {return fPhotonCount_Scint;}
 | 
				
			||||||
 | 
					    G4int GetPhotonCount_Ceren()const {return fPhotonCount_Ceren;}
 | 
				
			||||||
 | 
					    G4int GetHitCount()const {return fHitCount;}
 | 
				
			||||||
 | 
					    G4double GetEDep()const {return fTotE;}
 | 
				
			||||||
 | 
					    G4int GetAbsorptionCount()const {return fAbsorptionCount;}
 | 
				
			||||||
 | 
					    G4int GetBoundaryAbsorptionCount() const {return fBoundaryAbsorptionCount;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    G4ThreeVector GetEWeightPos(){return fEWeightPos;}
 | 
				
			||||||
 | 
					    G4ThreeVector GetReconPos(){return fReconPos;}
 | 
				
			||||||
 | 
					    G4ThreeVector GetConvPos(){return fConvPos;}
 | 
				
			||||||
 | 
					    G4ThreeVector GetPosMax(){return fPosMax;}
 | 
				
			||||||
 | 
					    G4double GetEDepMax(){return fEdepMax;}
 | 
				
			||||||
 | 
					    G4double IsConvPosSet(){return fConvPosSet;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Gets the total photon count produced
 | 
				
			||||||
 | 
					    G4int GetPhotonCount(){return fPhotonCount_Scint+fPhotonCount_Ceren;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void IncPMTSAboveThreshold(){fPMTsAboveThreshold++;}
 | 
				
			||||||
 | 
					    G4int GetPMTSAboveThreshold(){return fPMTsAboveThreshold;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    G4int fHitCount;
 | 
				
			||||||
 | 
					    G4int fPhotonCount_Scint;
 | 
				
			||||||
 | 
					    G4int fPhotonCount_Ceren;
 | 
				
			||||||
 | 
					    G4int fAbsorptionCount;
 | 
				
			||||||
 | 
					    G4int fBoundaryAbsorptionCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    G4double fTotE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //These only have meaning if totE > 0
 | 
				
			||||||
 | 
					    //If totE = 0 then these wont be set by EndOfEventAction
 | 
				
			||||||
 | 
					    G4ThreeVector fEWeightPos;
 | 
				
			||||||
 | 
					    G4ThreeVector fReconPos; //Also relies on hitCount>0
 | 
				
			||||||
 | 
					    G4ThreeVector fConvPos;//true (initial) converstion position
 | 
				
			||||||
 | 
					    G4bool fConvPosSet;
 | 
				
			||||||
 | 
					    G4ThreeVector fPosMax;
 | 
				
			||||||
 | 
					    G4double fEdepMax;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    G4int fPMTsAboveThreshold;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMActionInitialization.hh
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMActionInitialization_hh
 | 
				
			||||||
 | 
					#define SiPMActionInitialization_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4VUserActionInitialization.hh"
 | 
				
			||||||
 | 
					#include "SiPMPrimaryGeneratorAction.hh"
 | 
				
			||||||
 | 
					#include "SiPMRunAction.hh"
 | 
				
			||||||
 | 
					#include "SiPMEventAction.hh"
 | 
				
			||||||
 | 
					#include "SiPMSteppingAction.hh"
 | 
				
			||||||
 | 
					/// Action initialization class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMActionInitialization : public G4VUserActionInitialization
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    SiPMActionInitialization();
 | 
				
			||||||
 | 
					    virtual ~SiPMActionInitialization();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void BuildForMaster() const;
 | 
				
			||||||
 | 
					    virtual void Build() const;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMActionInitialization_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,56 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMAnalysis.hh
 | 
				
			||||||
 | 
					//  SiPM
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 04. 03 for Medtech simulation..
 | 
				
			||||||
 | 
					//  Modified for SiPM Simulation on 2018. 08. 23
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMAnalysis_hh
 | 
				
			||||||
 | 
					#define SiPMAnalysis_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include "G4Threading.hh"
 | 
				
			||||||
 | 
					#include "G4AutoLock.hh"
 | 
				
			||||||
 | 
					#include "TTree.h"
 | 
				
			||||||
 | 
					#include "TFile.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <sstream>
 | 
				
			||||||
 | 
					#include "SiPMParameters.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMAnalysis
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    /* Here will be the instance stored. */
 | 
				
			||||||
 | 
					    static SiPMAnalysis* instance;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    std::vector<TTree*> ttree;
 | 
				
			||||||
 | 
					    //TTree *tree;
 | 
				
			||||||
 | 
					    //TTree *electrontree;
 | 
				
			||||||
 | 
					    TFile *file;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Mutex SiPMAnalysisMutex;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /* Private constructor to prevent instancing. */
 | 
				
			||||||
 | 
					    SiPMAnalysis();
 | 
				
			||||||
 | 
					    double x, y, e, time;
 | 
				
			||||||
 | 
					    int sipm;
 | 
				
			||||||
 | 
					    int noOfSipm = 0;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    ~SiPMAnalysis();
 | 
				
			||||||
 | 
					    SiPMAnalysis(const SiPMAnalysis&) = delete;
 | 
				
			||||||
 | 
					    SiPMAnalysis& operator=(const SiPMAnalysis&) = delete;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void Fill(int copyNo, double x1, double y1, double e1, int sipm1, double time1);
 | 
				
			||||||
 | 
					    void Close();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /* Static access method. */
 | 
				
			||||||
 | 
					    static SiPMAnalysis* getInstance();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMAnalysis_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMDetectorConstruction.hh
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// here you can create and place your experiment
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMDetectorConstruction_hh
 | 
				
			||||||
 | 
					#define SiPMDetectorConstruction_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4VUserDetectorConstruction.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4RunManager.hh"
 | 
				
			||||||
 | 
					#include "G4NistManager.hh"
 | 
				
			||||||
 | 
					#include "G4Box.hh"
 | 
				
			||||||
 | 
					#include "G4Cons.hh"
 | 
				
			||||||
 | 
					#include "G4Orb.hh"
 | 
				
			||||||
 | 
					#include "G4Sphere.hh"
 | 
				
			||||||
 | 
					#include "G4Trd.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalVolume.hh"
 | 
				
			||||||
 | 
					#include "G4PVPlacement.hh"
 | 
				
			||||||
 | 
					#include "G4SystemOfUnits.hh"
 | 
				
			||||||
 | 
					#include "G4RotationMatrix.hh"
 | 
				
			||||||
 | 
					#include "G4Tubs.hh"
 | 
				
			||||||
 | 
					#include "G4VisAttributes.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalBorderSurface.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalSkinSurface.hh"
 | 
				
			||||||
 | 
					#include "G4OpticalSurface.hh"
 | 
				
			||||||
 | 
					#include "G4PVParameterised.hh"
 | 
				
			||||||
 | 
					#include "SiPMParameterisation.hh"
 | 
				
			||||||
 | 
					#include "SiPMParameters.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Detector construction class to define materials and geometry.
 | 
				
			||||||
 | 
					class SiPMDetectorConstruction : public G4VUserDetectorConstruction
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    SiPMDetectorConstruction();
 | 
				
			||||||
 | 
					    virtual ~SiPMDetectorConstruction();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual G4VPhysicalVolume* Construct();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMDetectorConstruction_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,44 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMEventAction.hh
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// event, like one gamma from start till leaving the world
 | 
				
			||||||
 | 
					// collect event-level information, like total energy deposit of one gamma
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMEventAction_hh
 | 
				
			||||||
 | 
					#define SiPMEventAction_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4UserEventAction.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "SiPMRun.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4Event.hh"
 | 
				
			||||||
 | 
					#include "G4RunManager.hh"
 | 
				
			||||||
 | 
					#include "LXeTrajectory.hh"
 | 
				
			||||||
 | 
					#include "G4Trajectory.hh"
 | 
				
			||||||
 | 
					#include "G4VVisManager.hh"
 | 
				
			||||||
 | 
					#include "LXeUserEventInformation.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Event action class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMEventAction : public G4UserEventAction
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    SiPMEventAction();
 | 
				
			||||||
 | 
					    virtual ~SiPMEventAction();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void BeginOfEventAction(const G4Event* event);
 | 
				
			||||||
 | 
					    virtual void EndOfEventAction(const G4Event* event);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void AddEdep(G4double edep) { fEdep += edep; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    G4double  fEdep;
 | 
				
			||||||
 | 
					    bool fForcedrawphotons;
 | 
				
			||||||
 | 
					    bool fForcenophotons;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMEventAction_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,79 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMParameterisation.hpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 23..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMParameterisation_hpp
 | 
				
			||||||
 | 
					#define SiPMParameterisation_hpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4VPVParameterisation.hh"
 | 
				
			||||||
 | 
					#include "G4ThreeVector.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class G4VPhysicalVolume;
 | 
				
			||||||
 | 
					class G4Box;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Dummy declarations to get rid of warnings ...
 | 
				
			||||||
 | 
					class G4Trd;
 | 
				
			||||||
 | 
					class G4Trap;
 | 
				
			||||||
 | 
					class G4Cons;
 | 
				
			||||||
 | 
					class G4Orb;
 | 
				
			||||||
 | 
					class G4Sphere;
 | 
				
			||||||
 | 
					class G4Ellipsoid;
 | 
				
			||||||
 | 
					class G4Torus;
 | 
				
			||||||
 | 
					class G4Para;
 | 
				
			||||||
 | 
					class G4Hype;
 | 
				
			||||||
 | 
					class G4Tubs;
 | 
				
			||||||
 | 
					class G4Polycone;
 | 
				
			||||||
 | 
					class G4Polyhedra;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///  A parameterisation that describes a series of boxes along X and Y.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					///  The boxes have equal width, & their lengths are a linear equation.
 | 
				
			||||||
 | 
					///  They are spaced an equal distance apart, starting from given location.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMParameterisation : public G4VPVParameterisation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    SiPMParameterisation(G4int noChambersX,
 | 
				
			||||||
 | 
					                         G4int noChambersY,
 | 
				
			||||||
 | 
					                         G4double spacing,
 | 
				
			||||||
 | 
					                         G4double widthChamber);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual ~SiPMParameterisation();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void ComputeTransformation (const G4int copyNo,
 | 
				
			||||||
 | 
					                                G4VPhysicalVolume* physVol) const;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void ComputeDimensions (G4Tubs & trackerLayer, const G4int copyNo,
 | 
				
			||||||
 | 
					                            const G4VPhysicalVolume* physVol) const;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:  // Dummy declarations to get rid of warnings ...
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Box&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Trd&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Trap&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Cons&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Sphere&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Orb&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Ellipsoid&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Torus&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Para&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Hype&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Polycone&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    void ComputeDimensions(G4Polyhedra&,const G4int, const G4VPhysicalVolume*) const {}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4int    fNoChambersX;
 | 
				
			||||||
 | 
					    G4int    fNoChambersY;
 | 
				
			||||||
 | 
					    G4double fHalfWidth;        //  The half-width of each tracker chamber
 | 
				
			||||||
 | 
					    G4double fWidth;
 | 
				
			||||||
 | 
					    G4double fSpacing;          //  The distance between the chambers' center
 | 
				
			||||||
 | 
					    G4int copyno = 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMParameterisation_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,80 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Parameters.hh
 | 
				
			||||||
 | 
					//  Parameters
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 06. 30..
 | 
				
			||||||
 | 
					//  Modified for SiPM Simulation on 2018. 08. 23..
 | 
				
			||||||
 | 
					//  Copyright © 2018. Baranyai David. All rights reserved.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMParameters_hh
 | 
				
			||||||
 | 
					#define SiPMParameters_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <sstream>
 | 
				
			||||||
 | 
					#include "G4ThreeVector.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMParameters
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    static SiPMParameters *GetInstance();
 | 
				
			||||||
 | 
					    ~SiPMParameters();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //---Particle Gun parameters---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    void SetParticleGunPosition(G4ThreeVector pgp) { particleGun_position = pgp; }
 | 
				
			||||||
 | 
					    void SetParticleGunPosition(G4double x, G4double y, G4double z) { particleGun_position.set(x, y, z); }
 | 
				
			||||||
 | 
					    G4ThreeVector GetParticleGunPosition() { return particleGun_position; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetParticleGunMomentumDirection(G4ThreeVector pgm) { particleGun_MomentumDirection = pgm; }
 | 
				
			||||||
 | 
					    void SetParticleGunMomentumDirection(G4double x, G4double y, G4double z) { particleGun_MomentumDirection.set(x, y, z); }
 | 
				
			||||||
 | 
					    G4ThreeVector GetParticleGunMomentumDirection() { return particleGun_MomentumDirection; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetParticleGunEnergy(G4double pge) { particleGun_energy = pge; }
 | 
				
			||||||
 | 
					    G4double GetParticleGunEnergy() { return particleGun_energy; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //---SiPM parameters-----------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    void SetSiPMSize(G4ThreeVector sipm_s) { sipm_Dimension = sipm_s; }
 | 
				
			||||||
 | 
					    void SetSiPMSize(G4double x, G4double y, G4double z) { sipm_Dimension.set(x, y, z); }
 | 
				
			||||||
 | 
					    G4ThreeVector GetSiPMSize() { return sipm_Dimension; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //---Scintillator parameters---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    void SetScintillatorLength(G4double sc_l) { scintillator_length = sc_l; }
 | 
				
			||||||
 | 
					    G4double GetScintillatorLength() { return scintillator_length; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //---Division parameters-------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    void SetDivision(G4int x, G4int y) { x_division = x; y_division = y; };
 | 
				
			||||||
 | 
					    void SetXDivision(G4int x) { x_division = x; }
 | 
				
			||||||
 | 
					    void SetYDivision(G4int y) { y_division = y; }
 | 
				
			||||||
 | 
					    G4int GetXDivison() { return x_division; }
 | 
				
			||||||
 | 
					    G4int GetYDivison() { return y_division; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //---Radius parameters---------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    void SetScintillatorRadius(G4double sc_r) { scint_radius = sc_r; }
 | 
				
			||||||
 | 
					    G4double GetScintillatorRadius() { return scint_radius; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void ResetToDefaults();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    SiPMParameters();
 | 
				
			||||||
 | 
					    static SiPMParameters *instance;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4ThreeVector particleGun_position;
 | 
				
			||||||
 | 
					    G4ThreeVector particleGun_MomentumDirection;
 | 
				
			||||||
 | 
					    G4double particleGun_energy; //in GeV
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4ThreeVector sipm_Dimension; //applies to both (in cm)
 | 
				
			||||||
 | 
					    G4double scintillator_length; //the size same as sipm
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4int x_division;
 | 
				
			||||||
 | 
					    G4int y_division;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double scint_radius;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* Parameters_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMPrimaryGeneratorAction.hh
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// particle, energy, momentum, position...
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMPrimaryGeneratorAction_hh
 | 
				
			||||||
 | 
					#define SiPMPrimaryGeneratorAction_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4VUserPrimaryGeneratorAction.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleGun.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalVolumeStore.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalVolume.hh"
 | 
				
			||||||
 | 
					#include "G4Box.hh"
 | 
				
			||||||
 | 
					#include "G4RunManager.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleGun.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleTable.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleDefinition.hh"
 | 
				
			||||||
 | 
					#include "G4SystemOfUnits.hh"
 | 
				
			||||||
 | 
					#include "Randomize.hh"
 | 
				
			||||||
 | 
					#include "SiPMParameters.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    SiPMPrimaryGeneratorAction();
 | 
				
			||||||
 | 
					    virtual ~SiPMPrimaryGeneratorAction();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void GeneratePrimaries(G4Event*);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    G4ParticleGun*  fParticleGun; // pointer a to G4 gun class
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMPrimaryGeneratorAction_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMRun.hh
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// run for threads
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMRun_hh
 | 
				
			||||||
 | 
					#define SiPMRun_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4Run.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMRun : public G4Run
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    SiPMRun();
 | 
				
			||||||
 | 
					    virtual ~SiPMRun();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void Merge(const G4Run*);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void AddEdep (G4double edep);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double GetEdep()  const { return fEdep; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    G4double  fEdep;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMRun_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMRunAction.hh
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMRunAction_hh
 | 
				
			||||||
 | 
					#define SiPMRunAction_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4UserRunAction.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "SiPMPrimaryGeneratorAction.hh"
 | 
				
			||||||
 | 
					#include "SiPMDetectorConstruction.hh"
 | 
				
			||||||
 | 
					#include "SiPMRun.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4RunManager.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalVolumeStore.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalVolume.hh"
 | 
				
			||||||
 | 
					#include "G4UnitsTable.hh"
 | 
				
			||||||
 | 
					#include "G4SystemOfUnits.hh"
 | 
				
			||||||
 | 
					#include "SiPMAnalysis.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMRunAction : public G4UserRunAction
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    SiPMRunAction();
 | 
				
			||||||
 | 
					    virtual ~SiPMRunAction();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual G4Run* GenerateRun();
 | 
				
			||||||
 | 
					    virtual void BeginOfRunAction(const G4Run*);
 | 
				
			||||||
 | 
					    virtual void EndOfRunAction(const G4Run*);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMRunAction_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMSteppingAction.hh
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SiPMSteppingAction_hh
 | 
				
			||||||
 | 
					#define SiPMSteppingAction_hh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4UserSteppingAction.hh"
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "SiPMEventAction.hh"
 | 
				
			||||||
 | 
					#include "G4Step.hh"
 | 
				
			||||||
 | 
					#include "G4Event.hh"
 | 
				
			||||||
 | 
					#include "G4RunManager.hh"
 | 
				
			||||||
 | 
					#include "G4LogicalVolume.hh"
 | 
				
			||||||
 | 
					#include "G4SystemOfUnits.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleTypes.hh"
 | 
				
			||||||
 | 
					#include "SiPMAnalysis.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Stepping action class
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SiPMSteppingAction : public G4UserSteppingAction
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    SiPMSteppingAction(SiPMEventAction* eventAction);
 | 
				
			||||||
 | 
					    SiPMSteppingAction(const SiPMSteppingAction &) = default;
 | 
				
			||||||
 | 
					    void TestFunction();
 | 
				
			||||||
 | 
					    virtual ~SiPMSteppingAction();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4int Sipm0_Num() {return sipm0_num;}
 | 
				
			||||||
 | 
					    G4int Sipm1_Num() {return sipm1_num;}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // method from the base class
 | 
				
			||||||
 | 
					    virtual void UserSteppingAction(const G4Step*);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    G4int sipm0_num = 0;
 | 
				
			||||||
 | 
					    G4int sipm1_num = 0;
 | 
				
			||||||
 | 
					    SiPMEventAction*  fEventAction;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* SiPMSteppingAction_hh */
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/control/execute icons.mac
 | 
				
			||||||
 | 
					/control/execute vis.mac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/gui/addMenu run Run
 | 
				
			||||||
 | 
					/gui/addButton run "beamOn 1" "/run/beamOn 1"
 | 
				
			||||||
 | 
					/gui/addButton run "beamOn 10" "/run/beamOn 10"
 | 
				
			||||||
 | 
					/gui/addButton run "beamOn 100" "/run/beamOn 100"
 | 
				
			||||||
 | 
					/gui/addButton run "beamOn 1000" "/run/beamOn 1000"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User defined icon :
 | 
				
			||||||
 | 
					/gui/addIcon "Run beam on" user_icon "/run/beamOn 1" run.png 
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/gui/addIcon "Open macro file" open /control/execute
 | 
				
			||||||
 | 
					/gui/addIcon "Save viewer state" save /vis/viewer/save
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cursors style icons 
 | 
				
			||||||
 | 
					/gui/addIcon "Move" move 
 | 
				
			||||||
 | 
					/gui/addIcon "Rotate" rotate 
 | 
				
			||||||
 | 
					# Particle 
 | 
				
			||||||
 | 
					/gui/addMenu particle Particle
 | 
				
			||||||
 | 
					/gui/addButton particle muon-      "/gun/particle mu-"
 | 
				
			||||||
 | 
					/gui/addButton particle electron-  "/gun/particle e-"
 | 
				
			||||||
 | 
					/gui/addButton particle pion-      "/gun/particle pi-"
 | 
				
			||||||
 | 
					/gui/addButton particle gamma      "/gun/particle gamma"
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Energy
 | 
				
			||||||
 | 
					/gui/addMenu energy Energy
 | 
				
			||||||
 | 
					/gui/addButton energy  100-keV  "/gun/energy 100 keV"
 | 
				
			||||||
 | 
					/gui/addButton energy  300-keV  "/gun/energy 300 keV"
 | 
				
			||||||
 | 
					/gui/addButton energy  1-MeV  "/gun/energy 1 MeV"
 | 
				
			||||||
 | 
					/gui/addButton energy  3-MeV  "/gun/energy 3 MeV"
 | 
				
			||||||
 | 
					/gui/addButton energy  10-MeV  "/gun/energy 10 MeV"
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					# Surface Style icons
 | 
				
			||||||
 | 
					/gui/addIcon "Surfaces" solid 
 | 
				
			||||||
 | 
					/gui/addIcon "Wireframe" wireframe 
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 14 KiB  | 
| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					/run/initialize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/vis/open OGL 600x600-0+0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/vis/drawVolume
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/vis/geometry/set/visibility World 0 false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/vis/viewer/set/style surface
 | 
				
			||||||
 | 
					/vis/viewer/set/viewpointThetaPhi 120 150
 | 
				
			||||||
 | 
					/vis/viewer/set/autoRefresh true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/vis/scene/add/trajectories smooth
 | 
				
			||||||
 | 
					/vis/scene/endOfEventAction accumulate 1000
 | 
				
			||||||
 | 
					/vis/scene/add/axes    
 | 
				
			||||||
 | 
					/vis/scene/add/eventID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/vis/scene/add/text 0 6 14 cm 18 4 4 Box
 | 
				
			||||||
 | 
					/vis/ogl/set/displayListLimit 50000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/run/beamOn 10
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,79 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  sipm.cpp
 | 
				
			||||||
 | 
					//  
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMDetectorConstruction.hh"
 | 
				
			||||||
 | 
					#include "SiPMActionInitialization.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef G4MULTITHREADED
 | 
				
			||||||
 | 
					#include "G4MTRunManager.hh"
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#include "G4RunManager.hh"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include "QGSP_BIC_HP.hh"
 | 
				
			||||||
 | 
					#include "G4UImanager.hh"
 | 
				
			||||||
 | 
					#include "QBBC.hh"
 | 
				
			||||||
 | 
					#include "G4VisExecutive.hh"
 | 
				
			||||||
 | 
					#include "G4UIExecutive.hh"
 | 
				
			||||||
 | 
					#include "FTFP_BERT.hh"
 | 
				
			||||||
 | 
					#include "G4StepLimiterPhysics.hh"
 | 
				
			||||||
 | 
					#include "Randomize.hh"
 | 
				
			||||||
 | 
					#include "QGSP_BIC.hh"
 | 
				
			||||||
 | 
					#include "G4OpticalPhysics.hh"
 | 
				
			||||||
 | 
					#include "G4OpticalProcessIndex.hh"
 | 
				
			||||||
 | 
					#include "LXePhysicsList.hh"
 | 
				
			||||||
 | 
					#include "SiPMAnalysis.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc,char** argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // parameter from command line
 | 
				
			||||||
 | 
					    int NoE=0;
 | 
				
			||||||
 | 
					    if (argc==2) NoE=atoi(argv[1]);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					#ifdef G4MULTITHREADED
 | 
				
			||||||
 | 
					    G4MTRunManager* runManager = new G4MTRunManager;
 | 
				
			||||||
 | 
					    unsigned nthreads = 8;
 | 
				
			||||||
 | 
					    runManager->SetNumberOfThreads(nthreads);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    G4RunManager* runManager = new G4RunManager;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    //you will modify this part ///////////
 | 
				
			||||||
 | 
					    runManager->SetUserInitialization(new LXePhysicsList());
 | 
				
			||||||
 | 
					    runManager->SetUserInitialization(new SiPMDetectorConstruction());
 | 
				
			||||||
 | 
					    //runManager->SetUserInitialization(new QGSP_BIC);
 | 
				
			||||||
 | 
					    runManager->SetUserInitialization(new SiPMActionInitialization());
 | 
				
			||||||
 | 
					    ///////////////
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    SiPMAnalysis *analysis = SiPMAnalysis::getInstance();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4VisManager* visManager = new G4VisExecutive;
 | 
				
			||||||
 | 
					    visManager->Initialize();
 | 
				
			||||||
 | 
					    G4UImanager* UImanager = G4UImanager::GetUIpointer();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (argc==2) {
 | 
				
			||||||
 | 
					        // batch mode
 | 
				
			||||||
 | 
					        runManager->Initialize();
 | 
				
			||||||
 | 
					        runManager->BeamOn(NoE);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					        // interactive mode
 | 
				
			||||||
 | 
					        G4UIExecutive* ui = 0;
 | 
				
			||||||
 | 
					        if ( argc == 1 ) {
 | 
				
			||||||
 | 
					            ui = new G4UIExecutive(argc, argv);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        UImanager->ApplyCommand("/control/macroPath /Users/divaldo/Programming/DE-Detector"); //set for your environment
 | 
				
			||||||
 | 
					        UImanager->ApplyCommand("/control/execute gui.mac");
 | 
				
			||||||
 | 
					        ui->SessionStart();
 | 
				
			||||||
 | 
					        delete ui;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    delete visManager;
 | 
				
			||||||
 | 
					    delete runManager;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,127 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeEMPhysics.cc 81557 2014-06-03 08:32:44Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/src/LXeEMPhysics.cc
 | 
				
			||||||
 | 
					/// \brief Implementation of the LXeEMPhysics class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#include "LXeEMPhysics.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4ios.hh"
 | 
				
			||||||
 | 
					#include <iomanip>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeEMPhysics::LXeEMPhysics(const G4String& name)
 | 
				
			||||||
 | 
					               :  G4VPhysicsConstructor(name)
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeEMPhysics::~LXeEMPhysics() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4ParticleDefinition.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleTable.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4Gamma.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4Electron.hh"
 | 
				
			||||||
 | 
					#include "G4Positron.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4NeutrinoE.hh"
 | 
				
			||||||
 | 
					#include "G4AntiNeutrinoE.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXeEMPhysics::ConstructParticle()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // gamma
 | 
				
			||||||
 | 
					  G4Gamma::GammaDefinition();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  // electron
 | 
				
			||||||
 | 
					  G4Electron::ElectronDefinition();
 | 
				
			||||||
 | 
					  G4Positron::PositronDefinition();
 | 
				
			||||||
 | 
					  G4NeutrinoE::NeutrinoEDefinition();
 | 
				
			||||||
 | 
					  G4AntiNeutrinoE::AntiNeutrinoEDefinition();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4ProcessManager.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXeEMPhysics::ConstructProcess()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  G4PhotoElectricEffect* fPhotoEffect =
 | 
				
			||||||
 | 
					    new G4PhotoElectricEffect();
 | 
				
			||||||
 | 
					  G4ComptonScattering* fComptonEffect =
 | 
				
			||||||
 | 
					    new G4ComptonScattering();
 | 
				
			||||||
 | 
					  G4GammaConversion* fPairProduction =
 | 
				
			||||||
 | 
					    new G4GammaConversion();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    // Electron physics
 | 
				
			||||||
 | 
					  G4eMultipleScattering* fElectronMultipleScattering =
 | 
				
			||||||
 | 
					    new G4eMultipleScattering();
 | 
				
			||||||
 | 
					  G4eIonisation* fElectronIonisation =
 | 
				
			||||||
 | 
					    new G4eIonisation();
 | 
				
			||||||
 | 
					  G4eBremsstrahlung* fElectronBremsStrahlung =
 | 
				
			||||||
 | 
					    new G4eBremsstrahlung();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    //Positron physics
 | 
				
			||||||
 | 
					  G4eMultipleScattering* fPositronMultipleScattering =
 | 
				
			||||||
 | 
					    new G4eMultipleScattering();
 | 
				
			||||||
 | 
					  G4eIonisation* fPositronIonisation =
 | 
				
			||||||
 | 
					    new G4eIonisation();
 | 
				
			||||||
 | 
					  G4eBremsstrahlung* fPositronBremsStrahlung =
 | 
				
			||||||
 | 
					    new G4eBremsstrahlung();
 | 
				
			||||||
 | 
					  G4eplusAnnihilation* fAnnihilation =
 | 
				
			||||||
 | 
					    new G4eplusAnnihilation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  G4ProcessManager* pManager = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Gamma Physics
 | 
				
			||||||
 | 
					  pManager = G4Gamma::Gamma()->GetProcessManager();
 | 
				
			||||||
 | 
					  pManager->AddDiscreteProcess(fPhotoEffect);
 | 
				
			||||||
 | 
					  pManager->AddDiscreteProcess(fComptonEffect);
 | 
				
			||||||
 | 
					  pManager->AddDiscreteProcess(fPairProduction);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Electron Physics
 | 
				
			||||||
 | 
					  pManager = G4Electron::Electron()->GetProcessManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pManager->AddProcess(fElectronMultipleScattering, -1, 1, 1);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fElectronIonisation,         -1, 2, 2);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fElectronBremsStrahlung,     -1, 3, 3);  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //Positron Physics
 | 
				
			||||||
 | 
					  pManager = G4Positron::Positron()->GetProcessManager();
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  pManager->AddProcess(fPositronMultipleScattering, -1, 1, 1);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fPositronIonisation,         -1, 2, 2);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fPositronBremsStrahlung,     -1, 3, 3);  
 | 
				
			||||||
 | 
					  pManager->AddProcess(fAnnihilation,                0,-1, 4);  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,89 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeGeneralPhysics.cc 100259 2016-10-17 08:02:30Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/src/LXeGeneralPhysics.cc
 | 
				
			||||||
 | 
					/// \brief Implementation of the LXeGeneralPhysics class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#include "LXeGeneralPhysics.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4ios.hh"
 | 
				
			||||||
 | 
					#include <iomanip>
 | 
				
			||||||
 | 
					#include "G4Decay.hh"
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeGeneralPhysics::LXeGeneralPhysics(const G4String& name)
 | 
				
			||||||
 | 
					                     :  G4VPhysicsConstructor(name) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeGeneralPhysics::~LXeGeneralPhysics() {
 | 
				
			||||||
 | 
					  //fDecayProcess = NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4ParticleDefinition.hh"
 | 
				
			||||||
 | 
					#include "G4ProcessManager.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4Geantino.hh"
 | 
				
			||||||
 | 
					#include "G4ChargedGeantino.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4GenericIon.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4Proton.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXeGeneralPhysics::ConstructParticle()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // pseudo-particles
 | 
				
			||||||
 | 
					  G4Geantino::GeantinoDefinition();
 | 
				
			||||||
 | 
					  G4ChargedGeantino::ChargedGeantinoDefinition();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  G4GenericIon::GenericIonDefinition();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXeGeneralPhysics::ConstructProcess()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  G4Decay* fDecayProcess = new G4Decay();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Add Decay Process
 | 
				
			||||||
 | 
					  auto particleIterator=GetParticleIterator();
 | 
				
			||||||
 | 
					  particleIterator->reset();
 | 
				
			||||||
 | 
					  while( (*particleIterator)() ){
 | 
				
			||||||
 | 
					    G4ParticleDefinition* particle = particleIterator->value();
 | 
				
			||||||
 | 
					    G4ProcessManager* pmanager = particle->GetProcessManager();
 | 
				
			||||||
 | 
					    if (fDecayProcess->IsApplicable(*particle)) {
 | 
				
			||||||
 | 
					      pmanager ->AddProcess(fDecayProcess);
 | 
				
			||||||
 | 
					      // set ordering for PostStepDoIt and AtRestDoIt
 | 
				
			||||||
 | 
					      pmanager ->SetProcessOrdering(fDecayProcess, idxPostStep);
 | 
				
			||||||
 | 
					      pmanager ->SetProcessOrdering(fDecayProcess, idxAtRest);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,126 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeMuonPhysics.cc 85911 2014-11-06 08:56:31Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/src/LXeMuonPhysics.cc
 | 
				
			||||||
 | 
					/// \brief Implementation of the LXeMuonPhysics class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#include "LXeMuonPhysics.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "globals.hh"
 | 
				
			||||||
 | 
					#include "G4ios.hh"
 | 
				
			||||||
 | 
					#include "G4PhysicalConstants.hh"
 | 
				
			||||||
 | 
					#include <iomanip>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeMuonPhysics::LXeMuonPhysics(const G4String& name)
 | 
				
			||||||
 | 
					                   :  G4VPhysicsConstructor(name) {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeMuonPhysics::~LXeMuonPhysics() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4ParticleDefinition.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleTable.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4MuonPlus.hh"
 | 
				
			||||||
 | 
					#include "G4MuonMinus.hh"
 | 
				
			||||||
 | 
					#include "G4NeutrinoMu.hh"
 | 
				
			||||||
 | 
					#include "G4AntiNeutrinoMu.hh"
 | 
				
			||||||
 | 
					#include "G4Neutron.hh"
 | 
				
			||||||
 | 
					#include "G4Proton.hh"
 | 
				
			||||||
 | 
					#include "G4PionZero.hh"
 | 
				
			||||||
 | 
					#include "G4PionPlus.hh"
 | 
				
			||||||
 | 
					#include "G4PionMinus.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXeMuonPhysics::ConstructParticle()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // Mu
 | 
				
			||||||
 | 
					  G4MuonPlus::MuonPlusDefinition();
 | 
				
			||||||
 | 
					  G4MuonMinus::MuonMinusDefinition();
 | 
				
			||||||
 | 
					  G4NeutrinoMu::NeutrinoMuDefinition();
 | 
				
			||||||
 | 
					  G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
 | 
				
			||||||
 | 
					  //These are needed for the mu- capture
 | 
				
			||||||
 | 
					    G4Neutron::Neutron();
 | 
				
			||||||
 | 
					    G4Proton::Proton();
 | 
				
			||||||
 | 
					    G4PionMinus::PionMinus();
 | 
				
			||||||
 | 
					    G4PionZero::PionZero();
 | 
				
			||||||
 | 
					    G4PionPlus::PionPlus();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4ProcessManager.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXeMuonPhysics::ConstructProcess()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  G4MuIonisation* fMuPlusIonisation =
 | 
				
			||||||
 | 
					    new G4MuIonisation();
 | 
				
			||||||
 | 
					  G4MuMultipleScattering* fMuPlusMultipleScattering =
 | 
				
			||||||
 | 
					    new G4MuMultipleScattering();
 | 
				
			||||||
 | 
					  G4MuBremsstrahlung* fMuPlusBremsstrahlung=
 | 
				
			||||||
 | 
					    new G4MuBremsstrahlung();
 | 
				
			||||||
 | 
					  G4MuPairProduction* fMuPlusPairProduction=
 | 
				
			||||||
 | 
					    new G4MuPairProduction();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  G4MuIonisation* fMuMinusIonisation =
 | 
				
			||||||
 | 
					    new G4MuIonisation();
 | 
				
			||||||
 | 
					  G4MuMultipleScattering* fMuMinusMultipleScattering =
 | 
				
			||||||
 | 
					    new G4MuMultipleScattering();
 | 
				
			||||||
 | 
					  G4MuBremsstrahlung* fMuMinusBremsstrahlung =
 | 
				
			||||||
 | 
					    new G4MuBremsstrahlung();
 | 
				
			||||||
 | 
					  G4MuPairProduction* fMuMinusPairProduction =
 | 
				
			||||||
 | 
					    new G4MuPairProduction();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  G4MuonMinusCapture* fMuMinusCaptureAtRest =
 | 
				
			||||||
 | 
					    new G4MuonMinusCapture();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  G4ProcessManager * pManager = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Muon Plus Physics
 | 
				
			||||||
 | 
					  pManager = G4MuonPlus::MuonPlus()->GetProcessManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuPlusMultipleScattering,-1,  1, 1);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuPlusIonisation,        -1,  2, 2);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuPlusBremsstrahlung,    -1,  3, 3);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuPlusPairProduction,    -1,  4, 4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Muon Minus Physics
 | 
				
			||||||
 | 
					  pManager = G4MuonMinus::MuonMinus()->GetProcessManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuMinusMultipleScattering,-1,  1, 1);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuMinusIonisation,        -1,  2, 2);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuMinusBremsstrahlung,    -1,  3, 3);
 | 
				
			||||||
 | 
					  pManager->AddProcess(fMuMinusPairProduction,    -1,  4, 4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pManager->AddRestProcess(fMuMinusCaptureAtRest);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,86 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXePhysicsList.cc 68752 2013-04-05 10:23:47Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/src/LXePhysicsList.cc
 | 
				
			||||||
 | 
					/// \brief Implementation of the LXePhysicsList class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#include "LXePhysicsList.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "LXeGeneralPhysics.hh"
 | 
				
			||||||
 | 
					#include "LXeEMPhysics.hh"
 | 
				
			||||||
 | 
					#include "LXeMuonPhysics.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4OpticalPhysics.hh"
 | 
				
			||||||
 | 
					#include "G4OpticalProcessIndex.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "G4SystemOfUnits.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXePhysicsList::LXePhysicsList() : G4VModularPhysicsList()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // default cut value  (1.0mm)
 | 
				
			||||||
 | 
					  defaultCutValue = 1.0*mm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // General Physics
 | 
				
			||||||
 | 
					  RegisterPhysics( new LXeGeneralPhysics("general") );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // EM Physics
 | 
				
			||||||
 | 
					  RegisterPhysics( new LXeEMPhysics("standard EM"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Muon Physics
 | 
				
			||||||
 | 
					  RegisterPhysics( new LXeMuonPhysics("muon"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Optical Physics
 | 
				
			||||||
 | 
					  G4OpticalPhysics* opticalPhysics = new G4OpticalPhysics();
 | 
				
			||||||
 | 
					  RegisterPhysics( opticalPhysics );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  opticalPhysics->SetWLSTimeProfile("delta");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  opticalPhysics->SetScintillationYieldFactor(1.0);
 | 
				
			||||||
 | 
					  opticalPhysics->SetScintillationExcitationRatio(0.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  opticalPhysics->SetMaxNumPhotonsPerStep(100);
 | 
				
			||||||
 | 
					  opticalPhysics->SetMaxBetaChangePerStep(10.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  opticalPhysics->SetTrackSecondariesFirst(kCerenkov,true);
 | 
				
			||||||
 | 
					  opticalPhysics->SetTrackSecondariesFirst(kScintillation,true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXePhysicsList::~LXePhysicsList() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXePhysicsList::SetCuts(){
 | 
				
			||||||
 | 
					  //  " G4VUserPhysicsList::SetCutsWithDefault" method sets
 | 
				
			||||||
 | 
					  //   the default cut value for all particle types
 | 
				
			||||||
 | 
					  SetCutsWithDefault();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,163 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeTrajectory.cc 72349 2013-07-16 12:13:16Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/src/LXeTrajectory.cc
 | 
				
			||||||
 | 
					/// \brief Implementation of the LXeTrajectory class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#include "LXeTrajectory.hh"
 | 
				
			||||||
 | 
					#include "G4TrajectoryPoint.hh"
 | 
				
			||||||
 | 
					#include "G4Trajectory.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleTable.hh"
 | 
				
			||||||
 | 
					#include "G4ParticleTypes.hh"
 | 
				
			||||||
 | 
					#include "G4ThreeVector.hh"
 | 
				
			||||||
 | 
					#include "G4Polyline.hh"
 | 
				
			||||||
 | 
					#include "G4Circle.hh"
 | 
				
			||||||
 | 
					#include "G4Colour.hh"
 | 
				
			||||||
 | 
					#include "G4VisAttributes.hh"
 | 
				
			||||||
 | 
					#include "G4VVisManager.hh"
 | 
				
			||||||
 | 
					#include "G4Polymarker.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					G4ThreadLocal G4Allocator<LXeTrajectory>* LXeTrajectoryAllocator = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeTrajectory::LXeTrajectory()
 | 
				
			||||||
 | 
					  :G4Trajectory(),fWls(false),fDrawit(false),fForceNoDraw(false),fForceDraw(false)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  fParticleDefinition=0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeTrajectory::LXeTrajectory(const G4Track* aTrack)
 | 
				
			||||||
 | 
					  :G4Trajectory(aTrack),fWls(false),fDrawit(false)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  fParticleDefinition=aTrack->GetDefinition();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeTrajectory::LXeTrajectory(LXeTrajectory &right)
 | 
				
			||||||
 | 
					  :G4Trajectory(right),fWls(right.fWls),fDrawit(right.fDrawit)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  fParticleDefinition=right.fParticleDefinition;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeTrajectory::~LXeTrajectory() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LXeTrajectory::DrawTrajectory() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // i_mode is no longer available as an argument of G4VTrajectory.
 | 
				
			||||||
 | 
					  // In this exampple it was always called with an argument of 50.
 | 
				
			||||||
 | 
					  const G4int i_mode = 50;
 | 
				
			||||||
 | 
					  // Consider using commands /vis/modeling/trajectories.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  //Taken from G4VTrajectory and modified to select colours based on particle
 | 
				
			||||||
 | 
					  //type and to selectively eliminate drawing of certain trajectories.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if(!fForceDraw && (!fDrawit || fForceNoDraw))
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // If i_mode>=0, draws a trajectory as a polyline and, if i_mode!=0,
 | 
				
			||||||
 | 
					  // adds markers - yellow circles for step points and magenta squares
 | 
				
			||||||
 | 
					  // for auxiliary points, if any - whose screen size in pixels is
 | 
				
			||||||
 | 
					  // given by std::abs(i_mode)/1000.  E.g: i_mode = 5000 gives easily
 | 
				
			||||||
 | 
					  // visible markers.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
 | 
				
			||||||
 | 
					  if (!pVVisManager) return;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  const G4double markerSize = std::abs(i_mode)/1000;
 | 
				
			||||||
 | 
					  G4bool lineRequired (i_mode >= 0);
 | 
				
			||||||
 | 
					  G4bool markersRequired (markerSize > 0.);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  G4Polyline trajectoryLine;
 | 
				
			||||||
 | 
					  G4Polymarker stepPoints;
 | 
				
			||||||
 | 
					  G4Polymarker auxiliaryPoints;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  for (G4int i = 0; i < GetPointEntries() ; i++) {
 | 
				
			||||||
 | 
					    G4VTrajectoryPoint* aTrajectoryPoint = GetPoint(i);
 | 
				
			||||||
 | 
					    const std::vector<G4ThreeVector>* auxiliaries
 | 
				
			||||||
 | 
					      = aTrajectoryPoint->GetAuxiliaryPoints();
 | 
				
			||||||
 | 
					    if (auxiliaries) {
 | 
				
			||||||
 | 
					      for (size_t iAux = 0; iAux < auxiliaries->size(); ++iAux) {
 | 
				
			||||||
 | 
					        const G4ThreeVector pos((*auxiliaries)[iAux]);
 | 
				
			||||||
 | 
					        if (lineRequired) {
 | 
				
			||||||
 | 
					          trajectoryLine.push_back(pos);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (markersRequired) {
 | 
				
			||||||
 | 
					          auxiliaryPoints.push_back(pos);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const G4ThreeVector pos(aTrajectoryPoint->GetPosition());
 | 
				
			||||||
 | 
					    if (lineRequired) {
 | 
				
			||||||
 | 
					      trajectoryLine.push_back(pos);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (markersRequired) {
 | 
				
			||||||
 | 
					      stepPoints.push_back(pos);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  if (lineRequired) {
 | 
				
			||||||
 | 
					    G4Colour colour;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    if(fParticleDefinition==G4OpticalPhoton::OpticalPhotonDefinition()){
 | 
				
			||||||
 | 
					      if(fWls) //WLS photons are red
 | 
				
			||||||
 | 
					        colour = G4Colour(1.,0.,0.);
 | 
				
			||||||
 | 
					      else{ //Scintillation and Cerenkov photons are green
 | 
				
			||||||
 | 
					        colour = G4Colour(0.,1.,0.);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else //All other particles are blue
 | 
				
			||||||
 | 
					      colour = G4Colour(0.,0.,1.);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    G4VisAttributes trajectoryLineAttribs(colour);
 | 
				
			||||||
 | 
					    trajectoryLine.SetVisAttributes(&trajectoryLineAttribs);
 | 
				
			||||||
 | 
					    pVVisManager->Draw(trajectoryLine);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (markersRequired) {
 | 
				
			||||||
 | 
					    auxiliaryPoints.SetMarkerType(G4Polymarker::squares);
 | 
				
			||||||
 | 
					    auxiliaryPoints.SetScreenSize(markerSize);
 | 
				
			||||||
 | 
					    auxiliaryPoints.SetFillStyle(G4VMarker::filled);
 | 
				
			||||||
 | 
					    G4VisAttributes auxiliaryPointsAttribs(G4Colour(0.,1.,1.));  // Magenta
 | 
				
			||||||
 | 
					    auxiliaryPoints.SetVisAttributes(&auxiliaryPointsAttribs);
 | 
				
			||||||
 | 
					    pVVisManager->Draw(auxiliaryPoints);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    stepPoints.SetMarkerType(G4Polymarker::circles);
 | 
				
			||||||
 | 
					    stepPoints.SetScreenSize(markerSize);
 | 
				
			||||||
 | 
					    stepPoints.SetFillStyle(G4VMarker::filled);
 | 
				
			||||||
 | 
					    G4VisAttributes stepPointsAttribs(G4Colour(1.,1.,0.));  // Yellow
 | 
				
			||||||
 | 
					    stepPoints.SetVisAttributes(&stepPointsAttribs);
 | 
				
			||||||
 | 
					    pVVisManager->Draw(stepPoints);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					// * License and Disclaimer                                           *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * The  Geant4 software  is  copyright of the Copyright Holders  of *
 | 
				
			||||||
 | 
					// * the Geant4 Collaboration.  It is provided  under  the terms  and *
 | 
				
			||||||
 | 
					// * conditions of the Geant4 Software License,  included in the file *
 | 
				
			||||||
 | 
					// * LICENSE and available at  http://cern.ch/geant4/license .  These *
 | 
				
			||||||
 | 
					// * include a list of copyright holders.                             *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * Neither the authors of this software system, nor their employing *
 | 
				
			||||||
 | 
					// * institutes,nor the agencies providing financial support for this *
 | 
				
			||||||
 | 
					// * work  make  any representation or  warranty, express or implied, *
 | 
				
			||||||
 | 
					// * regarding  this  software system or assume any liability for its *
 | 
				
			||||||
 | 
					// * use.  Please see the license in the file  LICENSE  and URL above *
 | 
				
			||||||
 | 
					// * for the full disclaimer and the limitation of liability.         *
 | 
				
			||||||
 | 
					// *                                                                  *
 | 
				
			||||||
 | 
					// * This  code  implementation is the result of  the  scientific and *
 | 
				
			||||||
 | 
					// * technical work of the GEANT4 collaboration.                      *
 | 
				
			||||||
 | 
					// * By using,  copying,  modifying or  distributing the software (or *
 | 
				
			||||||
 | 
					// * any work based  on the software)  you  agree  to acknowledge its *
 | 
				
			||||||
 | 
					// * use  in  resulting  scientific  publications,  and indicate your *
 | 
				
			||||||
 | 
					// * acceptance of all terms of the Geant4 Software license.          *
 | 
				
			||||||
 | 
					// ********************************************************************
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// $Id: LXeUserEventInformation.cc 68752 2013-04-05 10:23:47Z gcosmo $
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					/// \file optical/LXe/src/LXeUserEventInformation.cc
 | 
				
			||||||
 | 
					/// \brief Implementation of the LXeUserEventInformation class
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					#include "LXeUserEventInformation.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeUserEventInformation::LXeUserEventInformation()
 | 
				
			||||||
 | 
					  :fHitCount(0),fPhotonCount_Scint(0),fPhotonCount_Ceren(0),fAbsorptionCount(0),
 | 
				
			||||||
 | 
					   fBoundaryAbsorptionCount(0),fTotE(0.),fEWeightPos(0.),fReconPos(0.),fConvPos(0.),
 | 
				
			||||||
 | 
					   fConvPosSet(false),fPosMax(0.),fEdepMax(0.),fPMTsAboveThreshold(0) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LXeUserEventInformation::~LXeUserEventInformation() {}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMActionInitialization.cpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// User actions like Run,Event,Stepping
 | 
				
			||||||
 | 
					//                   Stacking
 | 
				
			||||||
 | 
					//                   PrimaryGenerator
 | 
				
			||||||
 | 
					// for master and threads
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMActionInitialization.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMActionInitialization::SiPMActionInitialization()
 | 
				
			||||||
 | 
					: G4VUserActionInitialization()
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMActionInitialization::~SiPMActionInitialization()
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMActionInitialization::BuildForMaster() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SetUserAction(new SiPMRunAction);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMActionInitialization::Build() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SetUserAction(new SiPMPrimaryGeneratorAction);
 | 
				
			||||||
 | 
					    SetUserAction(new SiPMRunAction);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    SiPMEventAction* eventAction = new SiPMEventAction;
 | 
				
			||||||
 | 
					    SetUserAction(eventAction);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    SetUserAction(new SiPMSteppingAction(eventAction));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,106 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMAnalysis.cc
 | 
				
			||||||
 | 
					//  SiPM
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 04. 03..
 | 
				
			||||||
 | 
					//  Modified for SiPM Simulation on 2018. 08. 23
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMAnalysis.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMAnalysis::SiPMAnalysis()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SiPMParameters *parameters = SiPMParameters::GetInstance();
 | 
				
			||||||
 | 
					    G4int xDiv = parameters -> GetXDivison();
 | 
				
			||||||
 | 
					    G4int yDiv = parameters -> GetYDivison();
 | 
				
			||||||
 | 
					    noOfSipm = xDiv * yDiv;
 | 
				
			||||||
 | 
					    G4int counter = 0;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    char filename[20];
 | 
				
			||||||
 | 
					    char treename[20];
 | 
				
			||||||
 | 
					    snprintf(filename, 30, "data.root");
 | 
				
			||||||
 | 
					    ttree = std::vector<TTree*>(noOfSipm,0);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    for(int i = 0; i < xDiv; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        for (int j = 0; j < yDiv; j++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            snprintf(treename, 20, "%dx_%dy",i,j);
 | 
				
			||||||
 | 
					            ttree[counter] = new TTree(treename, treename);
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("x", &x, "x/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("y", &y, "y/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("e", &e, "e/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("sipm", &sipm, "sipm/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("time", &time, "x/D");
 | 
				
			||||||
 | 
					            counter++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    counter = 0;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //ttree[0] = new TTree("tree", "tree");
 | 
				
			||||||
 | 
					    file = new TFile(filename,"RECREATE");
 | 
				
			||||||
 | 
					    instance = this;
 | 
				
			||||||
 | 
					    SiPMAnalysisMutex = G4MUTEX_INITIALIZER;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    for(int i = 0; i < xDiv; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        for (int j = 0; j < yDiv; j++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("x", &x, "x/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("y", &y, "x/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("e", &e, "x/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("sipm", &sipm, "x/D");
 | 
				
			||||||
 | 
					            ttree[counter] -> Branch("time", &time, "x/D");
 | 
				
			||||||
 | 
					            counter++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    counter = 0;
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMAnalysis::~SiPMAnalysis()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMAnalysis* SiPMAnalysis::getInstance()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (instance == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::cout << "Created analysis instance" << std::endl;
 | 
				
			||||||
 | 
					        instance = new SiPMAnalysis();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return instance;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMAnalysis::Fill(int copyNo, double x1, double y1, double e1, int sipm1, double time1)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    G4AutoLock lock(&SiPMAnalysisMutex);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    x = x1;
 | 
				
			||||||
 | 
					    y = y1;
 | 
				
			||||||
 | 
					    e = e1;
 | 
				
			||||||
 | 
					    sipm = sipm1;
 | 
				
			||||||
 | 
					    time = time1;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ttree[copyNo] -> Fill();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ttree[copyNo] -> FlushBaskets();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    lock.unlock();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMAnalysis::Close()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    for(int i = 0; i < noOfSipm; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ttree[i] -> Write();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    file -> Close();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Null, because instance will be initialized on demand. */
 | 
				
			||||||
 | 
					SiPMAnalysis* SiPMAnalysis::instance = 0;
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,374 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMDetectorConstruction.cpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMDetectorConstruction.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMDetectorConstruction::SiPMDetectorConstruction()
 | 
				
			||||||
 | 
					: G4VUserDetectorConstruction()
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMDetectorConstruction::~SiPMDetectorConstruction()
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					G4VPhysicalVolume* SiPMDetectorConstruction::Construct()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Get nist material manager
 | 
				
			||||||
 | 
					    G4NistManager* nist = G4NistManager::Instance();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Get the parameters instance
 | 
				
			||||||
 | 
					    SiPMParameters *parameters = SiPMParameters::GetInstance();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // Option to switch on/off checking of volumes overlaps
 | 
				
			||||||
 | 
					    G4bool checkOverlaps = true;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // ------------- Materials -------------
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double a, z, density;
 | 
				
			||||||
 | 
					    G4int nelements;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // Air
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    G4Element* N = new G4Element("Nitrogen", "N", z=7 , a=14.01*g/mole);
 | 
				
			||||||
 | 
					    G4Element* O = new G4Element("Oxygen"  , "O", z=8 , a=16.00*g/mole);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Material* air = new G4Material("Air", density=1.29*mg/cm3, nelements=2);
 | 
				
			||||||
 | 
					    air->AddElement(N, 70.*perCent);
 | 
				
			||||||
 | 
					    air->AddElement(O, 30.*perCent);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // Water
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    G4Element* H = new G4Element("Hydrogen", "H", z=1 , a=1.01*g/mole);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Material* water = new G4Material("Water", density= 1.0*g/cm3, nelements=2);
 | 
				
			||||||
 | 
					    water->AddElement(H, 2);
 | 
				
			||||||
 | 
					    water->AddElement(O, 1);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Wolfram material
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    G4Material *wolfram = nist -> FindOrBuildMaterial("G4_W");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // World
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    G4ThreeVector sipm_size = parameters -> GetSiPMSize();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double world_sizeX = parameters -> GetXDivison() * sipm_size.getX() * cm; //2*m;
 | 
				
			||||||
 | 
					    G4double world_sizeY = parameters -> GetYDivison() * sipm_size.getY() * cm; //2*m;
 | 
				
			||||||
 | 
					    G4double world_sizeZ  = 2*sipm_size.getZ() + parameters -> GetScintillatorLength();
 | 
				
			||||||
 | 
					    G4Material* world_mat = air; //nist->FindOrBuildMaterial("G4_AIR");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Box* solidWorld =
 | 
				
			||||||
 | 
					    new G4Box("World",                       //its name
 | 
				
			||||||
 | 
					              /*0.5**/world_sizeX, /*0.5**/world_sizeY, /*0.5**/world_sizeZ);     //its size
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalVolume* logicWorld =
 | 
				
			||||||
 | 
					    new G4LogicalVolume(solidWorld,          //its solid
 | 
				
			||||||
 | 
					                        world_mat,           //its material
 | 
				
			||||||
 | 
					                        "World");            //its name
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4VPhysicalVolume* physWorld =
 | 
				
			||||||
 | 
					    new G4PVPlacement(0,                     //no rotation
 | 
				
			||||||
 | 
					                      G4ThreeVector(),       //at (0,0,0)
 | 
				
			||||||
 | 
					                      logicWorld,            //its logical volume
 | 
				
			||||||
 | 
					                      "World",               //its name
 | 
				
			||||||
 | 
					                      0,                     //its mother  volume
 | 
				
			||||||
 | 
					                      false,                 //no boolean operation
 | 
				
			||||||
 | 
					                      0,                     //copy lxenumber
 | 
				
			||||||
 | 
					                      checkOverlaps);        //overlaps checking
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Place a container which contains everything for G4Replica
 | 
				
			||||||
 | 
					    G4double container_sizeX = sipm_size.getX()*cm;
 | 
				
			||||||
 | 
					    G4double container_sizeY = sipm_size.getY()*cm;
 | 
				
			||||||
 | 
					    G4double container_sizeZ = (sipm_size.getZ()*2 + parameters -> GetScintillatorLength())*cm;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Box *solidContainer =
 | 
				
			||||||
 | 
					    new G4Box("Container", container_sizeX*0.5, container_sizeY*0.5, container_sizeZ*0.5);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalVolume *logicContainer =
 | 
				
			||||||
 | 
					    new G4LogicalVolume(solidContainer, world_mat, "Container");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     G4VPhysicalVolume *physContainer =
 | 
				
			||||||
 | 
					     new G4PVPlacement(0,
 | 
				
			||||||
 | 
					     G4ThreeVector(),
 | 
				
			||||||
 | 
					     logicContainer,
 | 
				
			||||||
 | 
					     "Container",
 | 
				
			||||||
 | 
					     logicWorld,
 | 
				
			||||||
 | 
					     false,
 | 
				
			||||||
 | 
					     0,
 | 
				
			||||||
 | 
					     checkOverlaps);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    G4Colour containerColour( 1.0, 1.0, 0.0);
 | 
				
			||||||
 | 
					    G4VisAttributes* containerVisAtt = new G4VisAttributes( containerColour );
 | 
				
			||||||
 | 
					    //logicContainer -> SetVisAttributes(containerVisAtt);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double sizeX = sipm_size.getX()*cm;
 | 
				
			||||||
 | 
					    G4double sizeY = sipm_size.getY()*cm;
 | 
				
			||||||
 | 
					    G4double sipm_width = sipm_size.getZ()*cm;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Sipm0
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    G4Material* sipm0_mat = air; //nist->FindOrBuildMaterial("G4_Si");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // sipm0 shape
 | 
				
			||||||
 | 
					    G4double sipm0_sizeX = sizeX;
 | 
				
			||||||
 | 
					    G4double sipm0_sizeY = sizeY;
 | 
				
			||||||
 | 
					    G4double sipm0_sizeZ = sipm_width;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4ThreeVector pos_sipm0 = G4ThreeVector(0, 0*cm, (sipm_width/2)-container_sizeZ*0.5);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Box* solidSipm0 =
 | 
				
			||||||
 | 
					    new G4Box("Sipm0",                      //its name
 | 
				
			||||||
 | 
					              0.5*sipm0_sizeX, 0.5*sipm0_sizeY,
 | 
				
			||||||
 | 
					              0.5*sipm0_sizeZ); //its size
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalVolume* logicSipm0 =
 | 
				
			||||||
 | 
					    new G4LogicalVolume(solidSipm0,         //its solid
 | 
				
			||||||
 | 
					                        sipm0_mat,          //its material
 | 
				
			||||||
 | 
					                        "Sipm0");           //its name
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4VPhysicalVolume *physSipm0 =
 | 
				
			||||||
 | 
					    new G4PVPlacement(0,                       //no rotation
 | 
				
			||||||
 | 
					                      pos_sipm0,                    //at position
 | 
				
			||||||
 | 
					                      logicSipm0,             //its logical volume
 | 
				
			||||||
 | 
					                      "Sipm0",                //its name
 | 
				
			||||||
 | 
					                      logicContainer,                //its mother  volume
 | 
				
			||||||
 | 
					                      false,                   //no boolean operation
 | 
				
			||||||
 | 
					                      0,                       //copy lxenumber
 | 
				
			||||||
 | 
					                      checkOverlaps);          //overlaps checking
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Colour sipmColour( 0.0, 1.0, 0.0);
 | 
				
			||||||
 | 
					    G4VisAttributes* sipmVisAtt = new G4VisAttributes( sipmColour );
 | 
				
			||||||
 | 
					    logicSipm0->SetVisAttributes(sipmVisAtt);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Box
 | 
				
			||||||
 | 
					    // Changed the scintillator construction so now the box is Wolfram whic contains the scintillator
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    G4Material* scint_mat = water; //nist->FindOrBuildMaterial("G4_Si");
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // box shape
 | 
				
			||||||
 | 
					    G4double scint_sizeX = sizeX;
 | 
				
			||||||
 | 
					    G4double scint_sizeY = sizeY;
 | 
				
			||||||
 | 
					    G4double scint_sizeZ = parameters -> GetScintillatorLength() * cm;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double z_pos = sipm_width + (scint_sizeZ*0.5);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4ThreeVector posScint = G4ThreeVector(0, 0*cm, z_pos-container_sizeZ*0.5);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Box* solidScint_W =
 | 
				
			||||||
 | 
					    new G4Box("Scintillator_W",                      //its name
 | 
				
			||||||
 | 
					              0.5*scint_sizeX, 0.5*scint_sizeY,
 | 
				
			||||||
 | 
					              0.5*scint_sizeZ); //its size
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalVolume* logicScint_W =
 | 
				
			||||||
 | 
					    new G4LogicalVolume(solidScint_W,         //its solid
 | 
				
			||||||
 | 
					                        wolfram,          //its material
 | 
				
			||||||
 | 
					                        "Scintillator_W");           //its name
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4VPhysicalVolume *physScint_W =
 | 
				
			||||||
 | 
					    new G4PVPlacement(0,                       //no rotation
 | 
				
			||||||
 | 
					                      posScint,                    //at position
 | 
				
			||||||
 | 
					                      logicScint_W,             //its logical volume
 | 
				
			||||||
 | 
					                      "Scintillator_W",                //its name
 | 
				
			||||||
 | 
					                      logicContainer,                //its mother  volume
 | 
				
			||||||
 | 
					                      false,                   //no boolean operation
 | 
				
			||||||
 | 
					                      0,                       //copy lxenumber
 | 
				
			||||||
 | 
					                      checkOverlaps);          //overlaps checking
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Scintillator
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double scint_radius = parameters -> GetScintillatorRadius()*cm;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Tubs * solidScint = new G4Tubs("tube", 0, scint_radius, 0.5*(scint_sizeZ+(0.5*mm)), 0, 2*CLHEP::pi); //name, inner R, outter R, Half length in Z, starting angle, angle of the segment in rad
 | 
				
			||||||
 | 
					    new G4Box("Scintillator",
 | 
				
			||||||
 | 
					              0.5*scint_sizeX,
 | 
				
			||||||
 | 
					              0.5*scint_sizeY,
 | 
				
			||||||
 | 
					              0.5*scint_sizeZ);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalVolume *logicScint =
 | 
				
			||||||
 | 
					    new G4LogicalVolume(solidScint,         //its solid
 | 
				
			||||||
 | 
					                        scint_mat,          //its material
 | 
				
			||||||
 | 
					                        "Scintillator");    //its name
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4VPhysicalVolume *physScint =
 | 
				
			||||||
 | 
					    new G4PVPlacement(0,                    //no rotation
 | 
				
			||||||
 | 
					                      G4ThreeVector(0,0,0), //at position (as the mother volume is not the world, maybe this will be the right place)
 | 
				
			||||||
 | 
					                      logicScint,           //its logical volume
 | 
				
			||||||
 | 
					                      "Scintillator",       //its name
 | 
				
			||||||
 | 
					                      logicScint_W,           //its mother volume
 | 
				
			||||||
 | 
					                      false,                //no boolean operation
 | 
				
			||||||
 | 
					                      0,                    //copy lxenumber
 | 
				
			||||||
 | 
					                      checkOverlaps);       //overlaps checking
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Colour scintColour( 1.0, 0, 0.0);
 | 
				
			||||||
 | 
					    G4VisAttributes* scintVisAtt = new G4VisAttributes( scintColour );
 | 
				
			||||||
 | 
					    logicScint -> SetVisAttributes(scintVisAtt);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Sipm1
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double sipm2_pos_z = (0.5*sipm_width) + scint_sizeZ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Material* sipm1_mat = air; //nist->FindOrBuildMaterial("G4_Si");
 | 
				
			||||||
 | 
					    G4ThreeVector pos_sipm1 = G4ThreeVector(0, 0*cm, sipm_width+sipm2_pos_z-container_sizeZ*0.5);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // sipm1 shape -> same as sipm0
 | 
				
			||||||
 | 
					    G4Box* solidSipm1 =
 | 
				
			||||||
 | 
					    new G4Box("Sipm1",                      //its name
 | 
				
			||||||
 | 
					              0.5*sipm0_sizeX, 0.5*sipm0_sizeY,
 | 
				
			||||||
 | 
					              0.5*sipm0_sizeZ); //its size
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalVolume* logicSipm1 =
 | 
				
			||||||
 | 
					    new G4LogicalVolume(solidSipm1,         //its solid
 | 
				
			||||||
 | 
					                        sipm1_mat,          //its material
 | 
				
			||||||
 | 
					                        "Sipm1");           //its name
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4VPhysicalVolume *physSipm1 =
 | 
				
			||||||
 | 
					    new G4PVPlacement(0,                       //no rotation
 | 
				
			||||||
 | 
					                      pos_sipm1,                    //at position
 | 
				
			||||||
 | 
					                      logicSipm1,             //its logical volume
 | 
				
			||||||
 | 
					                      "Sipm1",                //its name
 | 
				
			||||||
 | 
					                      logicContainer,                //its mother  volume
 | 
				
			||||||
 | 
					                      false,                   //no boolean operation
 | 
				
			||||||
 | 
					                      0,                       //copy lxenumber
 | 
				
			||||||
 | 
					                      checkOverlaps);          //overlaps checking
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    logicSipm1->SetVisAttributes(sipmVisAtt);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //----------------------------------General values--------------------------------------------------------
 | 
				
			||||||
 | 
					    const G4int n = 2;
 | 
				
			||||||
 | 
					    G4double pp[n] = {2.0*eV, 3.0*eV}; //distribution of optical photons produced in eV
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //---------------------------------General Material Settings----------------------------------------------
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //material of scintillator
 | 
				
			||||||
 | 
					    G4double rind_scintillator[n] = {1.59, 1.57}; //refraction index
 | 
				
			||||||
 | 
					    G4double absl[n] = {35.*cm, 35.*cm}; //absorption length
 | 
				
			||||||
 | 
					    G4double slow[n] = {0.1, 1};
 | 
				
			||||||
 | 
					    G4double fast[n] = {0.1, 1};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4MaterialPropertiesTable *scint_material_mpt = new G4MaterialPropertiesTable();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddProperty("RINDEX", pp, rind_scintillator, n);
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddProperty("ABSLENGTH", pp, absl, n);
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddProperty("SLOWCOMPONENT", pp, slow, n);
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddProperty("FASTCOMPONENT", pp, fast, n);
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddConstProperty("SCINTILLATIONYIELD", 50./MeV); //50 volt
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddConstProperty("RESOLUTIONSCALE", 1.0);
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddConstProperty("FASTTIMECONSTANT", 20.*ns);
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddConstProperty("SLOWTIMECONSTANT", 45.*ns);
 | 
				
			||||||
 | 
					    scint_material_mpt -> AddConstProperty("YIELDRATIO", 1);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    scint_mat -> SetMaterialPropertiesTable(scint_material_mpt);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Surface of scintillator to wolfram
 | 
				
			||||||
 | 
					    G4OpticalSurface *OpScintillatorSurface = new G4OpticalSurface("Scintillator Surface to Wolfram",glisur, polished, dielectric_metal);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalBorderSurface *ScintillatorSurface = new G4LogicalBorderSurface("Scintillator Surface", physScint, physScint_W, OpScintillatorSurface);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double reflectivity_W[n] = {0.9, 0.9};
 | 
				
			||||||
 | 
					    G4double efficiency_W[n] = {0, 0};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4MaterialPropertiesTable *ScintillatorToWolframMaterialPropertyTable = new G4MaterialPropertiesTable();
 | 
				
			||||||
 | 
					    ScintillatorToWolframMaterialPropertyTable -> AddProperty("REFLECTIVITY", pp, reflectivity_W, n);
 | 
				
			||||||
 | 
					    ScintillatorToWolframMaterialPropertyTable -> AddProperty("EFFICIENCY", pp, efficiency_W, n);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    OpScintillatorSurface -> SetMaterialPropertiesTable(ScintillatorToWolframMaterialPropertyTable);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Surface from scintillator to sipm0 and sipm1
 | 
				
			||||||
 | 
					    G4OpticalSurface *SurfacefromScintillatorToSipm = new G4OpticalSurface("SurfacefromScintillatorToSipm", glisur, polished, dielectric_metal);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalBorderSurface *SurfacefromScintillatorToSipm0_logical = new G4LogicalBorderSurface("SurfacefromScintillatorToSipm0", physScint, physSipm0, SurfacefromScintillatorToSipm);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalBorderSurface *SurfacefromScintillatorToSipm1_logical2 = new G4LogicalBorderSurface("SurfacefromScintillatorToSipm1", physScint, physSipm1, SurfacefromScintillatorToSipm);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //----------------------------------
 | 
				
			||||||
 | 
					    G4double reflectivity[n] = {1, 1}; //ha nem 1,1 akkor nem éri el a sipm-et az aki eléri a scint végét.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4MaterialPropertiesTable *ScintillatorMaterialPropertyTable = new G4MaterialPropertiesTable();
 | 
				
			||||||
 | 
					    ScintillatorMaterialPropertyTable -> AddProperty("REFLECTIVITY", pp, reflectivity, n);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    SurfacefromScintillatorToSipm -> SetMaterialPropertiesTable(ScintillatorMaterialPropertyTable);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Surface
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    G4int matrixX = 3;
 | 
				
			||||||
 | 
					    G4int matrixY = 3;
 | 
				
			||||||
 | 
					    G4VPVParameterisation *chamberParam = new SiPMParameterisation(matrixX,
 | 
				
			||||||
 | 
					                                                                   matrixY,
 | 
				
			||||||
 | 
					                                                                   0,
 | 
				
			||||||
 | 
					                                                                   sipm_width);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /*new G4PVParameterised("Chamber",       // their name
 | 
				
			||||||
 | 
					                          logicContainer,   // their logical volume
 | 
				
			||||||
 | 
					                          physWorld,       // Mother logical volume
 | 
				
			||||||
 | 
					                          kXAxis,          // Are placed along this axis
 | 
				
			||||||
 | 
					                          3,    // Number of chambers
 | 
				
			||||||
 | 
					                          chamberParam,    // The parametrisation
 | 
				
			||||||
 | 
					                          true); // checking overlaps
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    new G4PVParameterised("Chamber",       // their name
 | 
				
			||||||
 | 
					                          logicContainer,   // their logical volume
 | 
				
			||||||
 | 
					                          physWorld,       // Mother logical volume
 | 
				
			||||||
 | 
					                          kYAxis,          // Are placed along this axis
 | 
				
			||||||
 | 
					                          matrixX * matrixY,    // Number of chambers
 | 
				
			||||||
 | 
					                          chamberParam,    // The parametrisation
 | 
				
			||||||
 | 
					                          true); // checking overlaps
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    //G4VPVParameterisation *paramSipm = new G4VPVParameterisation();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Using G4PVPlacement instead of replica or others
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					     int x = parameters -> GetXDivison();
 | 
				
			||||||
 | 
					     int y = parameters -> GetYDivison();
 | 
				
			||||||
 | 
					     int helper = 0;
 | 
				
			||||||
 | 
					     G4VPhysicalVolume *physContainer[x][y];
 | 
				
			||||||
 | 
					     char s1[30];
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					     for(int i = 0; i < x; i++)
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					         for(int j = 0; j < y; j++)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					             snprintf(s1, 30, "Container_x%d_y%d", i, j);
 | 
				
			||||||
 | 
					             logicContainer -> SetName(s1);
 | 
				
			||||||
 | 
					             physContainer[x][y] = new G4PVPlacement(0,
 | 
				
			||||||
 | 
					                                                     G4ThreeVector(i*cm, j*cm, 0),
 | 
				
			||||||
 | 
					                                                     logicContainer,
 | 
				
			||||||
 | 
					                                                     s1, //its name
 | 
				
			||||||
 | 
					                                                     logicWorld,
 | 
				
			||||||
 | 
					                                                     false,
 | 
				
			||||||
 | 
					                                                     helper, //copy number
 | 
				
			||||||
 | 
					                                                     checkOverlaps);
 | 
				
			||||||
 | 
					             //physSipm0 -> SetCopyNo(helper);
 | 
				
			||||||
 | 
					             //physSipm1 -> SetCopyNo(helper);
 | 
				
			||||||
 | 
					             helper++;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return physWorld;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,57 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMEventAction.cpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMEventAction.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMEventAction::SiPMEventAction() : G4UserEventAction()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    fForcenophotons = false;
 | 
				
			||||||
 | 
					    fForcedrawphotons = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMEventAction::~SiPMEventAction()
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMEventAction::BeginOfEventAction(const G4Event*)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    fEdep = 0.0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMEventAction::EndOfEventAction(const G4Event* anEvent)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // accumulate statistics in DERun
 | 
				
			||||||
 | 
					    SiPMRun* run = static_cast<SiPMRun*>(G4RunManager::GetRunManager()->GetNonConstCurrentRun());
 | 
				
			||||||
 | 
					    run->AddEdep(fEdep);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /*LXeUserEventInformation* eventInformation = (LXeUserEventInformation*)anEvent->GetUserInformation();
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					     G4TrajectoryContainer* trajectoryContainer=anEvent->GetTrajectoryContainer();
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					     G4int n_trajectories = 0;
 | 
				
			||||||
 | 
					     if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    // extract the trajectories and draw them
 | 
				
			||||||
 | 
					    /*if (G4VVisManager::GetConcreteInstance())
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					     for (G4int i=0; i<n_trajectories; i++)
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					     LXeTrajectory* trj = (LXeTrajectory*) ((*(anEvent->GetTrajectoryContainer()))[i]);
 | 
				
			||||||
 | 
					     if(trj->GetParticleName()=="opticalphoton")
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					     trj->SetForceDrawTrajectory(fForcedrawphotons);
 | 
				
			||||||
 | 
					     trj->SetForceNoDrawTrajectory(fForcenophotons);
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					     trj->DrawTrajectory();
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					     }*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,65 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMParameterisation.cc
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 23..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMParameterisation.hh"
 | 
				
			||||||
 | 
					#include "G4VPhysicalVolume.hh"
 | 
				
			||||||
 | 
					#include "G4ThreeVector.hh"
 | 
				
			||||||
 | 
					#include "G4Tubs.hh"
 | 
				
			||||||
 | 
					#include "G4SystemOfUnits.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMParameterisation::SiPMParameterisation(G4int    noChambersX,
 | 
				
			||||||
 | 
					                                           G4int    noChambersY,
 | 
				
			||||||
 | 
					                                           G4double spacingZ,        //  Z spacing of centers | The distance between the chambers' center
 | 
				
			||||||
 | 
					                                           G4double widthChamber)
 | 
				
			||||||
 | 
					: G4VPVParameterisation()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    fNoChambersX =  noChambersX;
 | 
				
			||||||
 | 
					    fNoChambersY = noChambersY;
 | 
				
			||||||
 | 
					    fWidth = widthChamber + spacingZ;
 | 
				
			||||||
 | 
					    fHalfWidth  =  0.5*widthChamber;
 | 
				
			||||||
 | 
					    fSpacing    =  spacingZ;
 | 
				
			||||||
 | 
					    if (fNoChambersX < 0 || fNoChambersY < 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        G4Exception("SiPMParameterisation::SiPMParameterisation()",
 | 
				
			||||||
 | 
					                    "InvalidSetup", FatalException,
 | 
				
			||||||
 | 
					                    "fNoChambersX or fNoChambersX < 0");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMParameterisation::~SiPMParameterisation()
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMParameterisation::ComputeTransformation(const G4int copyNo, G4VPhysicalVolume* physVol) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Note: copyNo will start with zero!
 | 
				
			||||||
 | 
					    G4double Xposition = copyNo * fWidth;
 | 
				
			||||||
 | 
					    G4ThreeVector origin(0,Xposition,0);
 | 
				
			||||||
 | 
					    physVol->SetTranslation(origin);
 | 
				
			||||||
 | 
					    physVol->SetRotation(0);
 | 
				
			||||||
 | 
					    std::cout << "ComputeTransform called | Copy no: " << copyNo << std::endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMParameterisation::ComputeDimensions(G4Tubs& trackerChamber, const G4int copyNo, const G4VPhysicalVolume*) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Note: copyNo will start with zero!
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    G4double rmax = fRmaxFirst + copyNo * fRmaxIncr;
 | 
				
			||||||
 | 
					    trackerChamber.SetInnerRadius(0);
 | 
				
			||||||
 | 
					    trackerChamber.SetOuterRadius(rmax);
 | 
				
			||||||
 | 
					    trackerChamber.SetZHalfLength(fHalfWidth);
 | 
				
			||||||
 | 
					    trackerChamber.SetStartPhiAngle(0.*deg);
 | 
				
			||||||
 | 
					    trackerChamber.SetDeltaPhiAngle(360.*deg);
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Parameters.cc
 | 
				
			||||||
 | 
					//  Parameters
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 06. 30..
 | 
				
			||||||
 | 
					//  Modified for SiPM Simulation on 2018. 08. 23..
 | 
				
			||||||
 | 
					//  Copyright © 2018. Baranyai David. All rights reserved.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMParameters.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMParameters* SiPMParameters::GetInstance()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (instance == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        instance = new SiPMParameters();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return instance;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMParameters* SiPMParameters::instance = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMParameters::SiPMParameters()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ResetToDefaults();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMParameters::~SiPMParameters()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMParameters::ResetToDefaults()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    particleGun_position = G4ThreeVector(50, -5, 0);
 | 
				
			||||||
 | 
					    particleGun_MomentumDirection = G4ThreeVector(0.5, 1, 0);
 | 
				
			||||||
 | 
					    particleGun_energy = 1; //in GeV
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    sipm_Dimension = G4ThreeVector(1, 1, 1); //applies to both (in cm)
 | 
				
			||||||
 | 
					    scintillator_length = 40; //the size same as sipm
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    x_division = 10;
 | 
				
			||||||
 | 
					    y_division = 10;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    scint_radius = 0.25; //in cm
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,39 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMPrimaryGeneratorAction.cpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMPrimaryGeneratorAction.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMPrimaryGeneratorAction::SiPMPrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction(), fParticleGun(0)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SiPMParameters *parameters = SiPMParameters::GetInstance();
 | 
				
			||||||
 | 
					    G4int n_particle = 1;   //particles per event
 | 
				
			||||||
 | 
					    fParticleGun  = new G4ParticleGun(n_particle);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // default particle kinematic
 | 
				
			||||||
 | 
					    G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
 | 
				
			||||||
 | 
					    G4String particleName;
 | 
				
			||||||
 | 
					    G4ParticleDefinition* particle = particleTable->FindParticle(particleName="mu+");
 | 
				
			||||||
 | 
					    fParticleGun->SetParticleDefinition(particle);
 | 
				
			||||||
 | 
					    fParticleGun->SetParticleMomentumDirection(parameters -> GetParticleGunMomentumDirection());
 | 
				
			||||||
 | 
					    fParticleGun->SetParticleEnergy(parameters -> GetParticleGunEnergy()*GeV); //1GeV
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMPrimaryGeneratorAction::~SiPMPrimaryGeneratorAction()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    delete fParticleGun;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SiPMParameters *parameters = SiPMParameters::GetInstance();
 | 
				
			||||||
 | 
					    fParticleGun->SetParticlePosition(parameters -> GetParticleGunPosition());
 | 
				
			||||||
 | 
					    fParticleGun->GeneratePrimaryVertex(anEvent);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMRun.cpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMRun.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMRun::SiPMRun()
 | 
				
			||||||
 | 
					: G4Run()
 | 
				
			||||||
 | 
					{fEdep=0.0;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMRun::~SiPMRun()
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMRun::Merge(const G4Run* run)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    const SiPMRun* localRun = static_cast<const SiPMRun*>(run);
 | 
				
			||||||
 | 
					    fEdep  += localRun->fEdep;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Run::Merge(run);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMRun::AddEdep (G4double edep)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    fEdep  += edep;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,62 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMRunAction.cpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMRunAction.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMRunAction::SiPMRunAction() : G4UserRunAction()
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMRunAction::~SiPMRunAction()
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					G4Run* SiPMRunAction::GenerateRun()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return new SiPMRun;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMRunAction::BeginOfRunAction(const G4Run*)
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMRunAction::EndOfRunAction(const G4Run* run)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    G4int nofEvents = run->GetNumberOfEvent();
 | 
				
			||||||
 | 
					    if (nofEvents == 0) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    const SiPMRun* siPMRun = static_cast<const SiPMRun*>(run);
 | 
				
			||||||
 | 
					    G4double edepInRuns  = siPMRun->GetEdep();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // Print
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    if (IsMaster()) {
 | 
				
			||||||
 | 
					        SiPMAnalysis *analysis = SiPMAnalysis::getInstance();
 | 
				
			||||||
 | 
					        analysis -> Close();
 | 
				
			||||||
 | 
					        G4cout
 | 
				
			||||||
 | 
					        << G4endl
 | 
				
			||||||
 | 
					        << "--------------------End of Global Run-----------------------";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					        G4cout
 | 
				
			||||||
 | 
					        << G4endl
 | 
				
			||||||
 | 
					        << "--------------------End of Local Run------------------------";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4cout
 | 
				
			||||||
 | 
					    << G4endl
 | 
				
			||||||
 | 
					    << " The run consists of " << nofEvents << " edep: "<< edepInRuns/keV
 | 
				
			||||||
 | 
					    << G4endl;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,106 @@
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SiPMSteppingAction.cpp
 | 
				
			||||||
 | 
					//  sipm
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Baranyai David on 2018. 08. 22..
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "SiPMSteppingAction.hh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMSteppingAction::SiPMSteppingAction(SiPMEventAction* eventAction) : G4UserSteppingAction(),
 | 
				
			||||||
 | 
					fEventAction(eventAction)
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SiPMSteppingAction::~SiPMSteppingAction()
 | 
				
			||||||
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SiPMSteppingAction::UserSteppingAction(const G4Step* step)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SiPMAnalysis *analysis = SiPMAnalysis::getInstance();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4LogicalVolume* volume
 | 
				
			||||||
 | 
					    = step->GetPreStepPoint()->GetTouchableHandle()
 | 
				
			||||||
 | 
					    ->GetVolume()->GetLogicalVolume();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Track *fTrack = step -> GetTrack();
 | 
				
			||||||
 | 
					    G4int trackID = fTrack -> GetTrackID();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double postTime = step->GetPostStepPoint()->GetLocalTime();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if(fTrack->GetTrackStatus()!=fAlive) { return; } /// check if it is alive
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4VPhysicalVolume* prevolume  = step -> GetPreStepPoint() -> GetTouchableHandle() -> GetVolume();
 | 
				
			||||||
 | 
					    G4VPhysicalVolume* postvolume  = step -> GetPostStepPoint() -> GetTouchableHandle() -> GetVolume();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double preX = step->GetPreStepPoint()->GetPosition().x();
 | 
				
			||||||
 | 
					    G4double preY = step->GetPreStepPoint()->GetPosition().y();
 | 
				
			||||||
 | 
					    G4double preZ  = step->GetPreStepPoint()->GetPosition().z();
 | 
				
			||||||
 | 
					    G4double prekinE  = step->GetPreStepPoint()->GetKineticEnergy();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4double postX = step->GetPostStepPoint()->GetPosition().x();
 | 
				
			||||||
 | 
					    G4double postY = step->GetPostStepPoint()->GetPosition().y();
 | 
				
			||||||
 | 
					    G4double postZ = step->GetPostStepPoint()->GetPosition().z();
 | 
				
			||||||
 | 
					    G4double postkinE  = step->GetPostStepPoint()->GetKineticEnergy();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4String preName = prevolume -> GetName();
 | 
				
			||||||
 | 
					    G4String postName = postvolume -> GetName();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    G4Track *theTrack = step->GetTrack();
 | 
				
			||||||
 | 
					    G4ParticleDefinition* particleType = theTrack->GetDefinition();
 | 
				
			||||||
 | 
					    if(particleType==G4OpticalPhoton::OpticalPhotonDefinition())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if(postZ >= 40.9*cm)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					         std::cout << "Possibly hits sipm1: " << postZ  << " | " << particleType -> GetParticleName() << std::endl;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					        //std::cout << "Optical photon\n";
 | 
				
			||||||
 | 
					        /*if(preName == "Scintillator" && postName == "Scintillator")
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					         std::cout << "Photon inside Scintillator" << std::endl;
 | 
				
			||||||
 | 
					         }*/
 | 
				
			||||||
 | 
					        if(postName == "Sipm0")
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            fTrack -> SetTrackStatus(fStopAndKill);
 | 
				
			||||||
 | 
					            std::cout << "Photon reached Sipm0 at: " << step -> GetPostStepPoint() -> GetTouchableHandle() -> GetVolume(1) -> GetCopyNo() << std::endl;
 | 
				
			||||||
 | 
					            std::cout << "Mother Logical name: " << step -> GetPostStepPoint() -> GetTouchableHandle() -> GetVolume(1) -> GetName() << std::endl;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            analysis -> Fill(step -> GetPostStepPoint() -> GetTouchableHandle() -> GetVolume(1) -> GetCopyNo(), postX, postY, postkinE, 1, step -> GetPostStepPoint() -> GetGlobalTime());
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            //sipm0_num++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(postName == "Sipm1")
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            fTrack -> SetTrackStatus(fStopAndKill);
 | 
				
			||||||
 | 
					            std::cout << "Photon reached Sipm1 at: " << step -> GetPostStepPoint() -> GetTouchableHandle() -> GetVolume(1) -> GetCopyNo() << std::endl;
 | 
				
			||||||
 | 
					            std::cout << "Mother Logical name: " << step -> GetPostStepPoint() -> GetTouchableHandle() -> GetVolume(1) -> GetName() << std::endl;
 | 
				
			||||||
 | 
					            std::cout << "Coordinates: " << postX << " " << postY << std::endl;
 | 
				
			||||||
 | 
					            std::cout << "Global time: " << step -> GetPostStepPoint() -> GetGlobalTime() << std::endl;
 | 
				
			||||||
 | 
					            std::cout << "Local time: " << postTime << std::endl;
 | 
				
			||||||
 | 
					            //std::cout << "Photon reached Sipm1 at copy no: " << postvolume -> GetCopyNo() << std::endl;
 | 
				
			||||||
 | 
					            //sipm1_num++;
 | 
				
			||||||
 | 
					            analysis -> Fill(step -> GetPostStepPoint() -> GetTouchableHandle() -> GetVolume(1) -> GetCopyNo(), postX, postY, postkinE, 2, step -> GetPostStepPoint() -> GetGlobalTime());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /*if(postName == "Scintillator_W")
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					         //std::cout << "Photon reached wolfram" << std::endl;
 | 
				
			||||||
 | 
					         }*/
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if(particleType==G4Electron::ElectronDefinition())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //std::cout << "Electron\n";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    //std::cout << "Sipm0: " << sipm0_num << std::endl << "Sipm1: " << sipm1_num << std::endl;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // collect energy deposited in this step
 | 
				
			||||||
 | 
					    G4double edepStep = step->GetTotalEnergyDeposit();
 | 
				
			||||||
 | 
					    fEventAction->AddEdep(edepStep);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue