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