Import Geant4 8.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 14:44:26 +02:00
parent 8a51e0bc40
commit 216a75eeb1
8717 changed files with 360418 additions and 141343 deletions
@@ -0,0 +1,41 @@
# $Id: GNUmakefile,v 1.5 2005/11/25 01:53:30 capra Exp $
# --------------------------------------------------------------------
# GNUmakefile for exaple subpackage
# R. Capra, 09 Sep 2005
# --------------------------------------------------------------------
name := Radmon
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/interfaces/basic/include \
-I$(G4BASE)/interfaces/common/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/event/include \
-I$(G4BASE)/tracking/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/solids/CSG/include \
-I$(G4BASE)/geometry/solids/Boolean/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/materials/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/digits_hits/hits/include \
-I$(G4BASE)/digits_hits/detector/include \
-I$(G4BASE)/digits_hits/digits/include \
-I$(G4BASE)/graphics_reps/include \
-I../materials/include \
-I../generalPurpose/include \
-I../sensitivity/include
include $(G4INSTALL)/config/common.gmk
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeConstructor.hh,v 1.3 2006/06/29 16:08:49 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with carved borders
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMECONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonDetectorFlatVolumeComponent> >
{
public:
inline RadmonDetectorCarvedFlatVolumeConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeConstructor(const RadmonDetectorCarvedFlatVolumeConstructor & copy);
RadmonDetectorCarvedFlatVolumeConstructor & operator=(const RadmonDetectorCarvedFlatVolumeConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeConstructor.icc,v 1.1.2.2 2006/06/29 16:08:51 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMECONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMECONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeConstructor :: RadmonDetectorCarvedFlatVolumeConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonDetectorFlatVolumeComponent> >("CarvedFlatVolume")
{
}
inline RadmonDetectorCarvedFlatVolumeConstructor :: ~RadmonDetectorCarvedFlatVolumeConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMECONSTRUCTOR_HH */
@@ -0,0 +1,62 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.hh,v 1.3 2006/06/29 16:08:53 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a carved box with a ground pad and marks and hole
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonTDetectorVolumesWithGroundDecorator.hh"
#include "RadmonTDetectorVolumesWithHoleDecorator.hh"
#include "RadmonTDetectorVolumesWithKeyMarksDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > > > >
{
public:
inline RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor(const RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor & copy);
RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor & operator=(const RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc,v 1.3 2006/06/29 16:08:55 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor :: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > > > >("CarvedFlatVolumeWithGroundAndKeyMarksAndHole")
{
}
inline RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor :: ~RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksAndHoleConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,61 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor.hh,v 1.3 2006/06/29 16:08:57 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a carved box with a ground pad and marks
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonTDetectorVolumesWithGroundDecorator.hh"
#include "RadmonTDetectorVolumesWithKeyMarksDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > > >
{
public:
inline RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor(const RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor & copy);
RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor & operator=(const RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor.icc,v 1.3 2006/06/29 16:08:59 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor :: RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > > >("CarvedFlatVolumeWithGroundAndKeyMarks")
{
}
inline RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor :: ~RadmonDetectorCarvedFlatVolumeWithGroundAndKeyMarksConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH */
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithGroundConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithGroundConstructor.hh,v 1.3 2006/06/29 16:09:01 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with carved borders
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonTDetectorVolumesWithGroundDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeWithGroundConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > >
{
public:
inline RadmonDetectorCarvedFlatVolumeWithGroundConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeWithGroundConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeWithGroundConstructor(const RadmonDetectorCarvedFlatVolumeWithGroundConstructor & copy);
RadmonDetectorCarvedFlatVolumeWithGroundConstructor & operator=(const RadmonDetectorCarvedFlatVolumeWithGroundConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeWithGroundConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithGroundConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithGroundConstructor.icc,v 1.3 2006/06/29 16:09:03 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeWithGroundConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeWithGroundConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeWithGroundConstructor :: RadmonDetectorCarvedFlatVolumeWithGroundConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > >("CarvedFlatVolumeWithGround")
{
}
inline RadmonDetectorCarvedFlatVolumeWithGroundConstructor :: ~RadmonDetectorCarvedFlatVolumeWithGroundConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH */
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithHoleConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithHoleConstructor.hh,v 1.3 2006/06/29 16:09:05 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with carved borders
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHHOLECONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMEWITHHOLECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonTDetectorVolumesWithHoleDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeWithHoleConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> > >
{
public:
inline RadmonDetectorCarvedFlatVolumeWithHoleConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeWithHoleConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeWithHoleConstructor(const RadmonDetectorCarvedFlatVolumeWithHoleConstructor & copy);
RadmonDetectorCarvedFlatVolumeWithHoleConstructor & operator=(const RadmonDetectorCarvedFlatVolumeWithHoleConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeWithHoleConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHHOLECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithHoleConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithHoleConstructor.icc,v 1.3 2006/06/29 16:09:07 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHHOLECONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeWithHoleConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeWithHoleConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMEWITHHOLECONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeWithHoleConstructor :: RadmonDetectorCarvedFlatVolumeWithHoleConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> > >("CarvedFlatVolumeWithHole")
{
}
inline RadmonDetectorCarvedFlatVolumeWithHoleConstructor :: ~RadmonDetectorCarvedFlatVolumeWithHoleConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHHOLECONSTRUCTOR_HH */
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithPinsConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithPinsConstructor.hh,v 1.3 2006/06/29 16:09:09 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with carved borders and pins
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHPINSCONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMEWITHPINSCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonTDetectorVolumesWithPinsDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeWithPinsConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithPinsDecorator<RadmonDetectorFlatVolumeComponent> > >
{
public:
inline RadmonDetectorCarvedFlatVolumeWithPinsConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeWithPinsConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeWithPinsConstructor(const RadmonDetectorCarvedFlatVolumeWithPinsConstructor & copy);
RadmonDetectorCarvedFlatVolumeWithPinsConstructor & operator=(const RadmonDetectorCarvedFlatVolumeWithPinsConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeWithPinsConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHPINSCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithPinsConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithPinsConstructor.icc,v 1.3 2006/06/29 16:09:11 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHPINSCONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeWithPinsConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeWithPinsConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMEWITHPINSCONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeWithPinsConstructor :: RadmonDetectorCarvedFlatVolumeWithPinsConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithPinsDecorator<RadmonDetectorFlatVolumeComponent> > >("CarvedFlatVolumeWithPins")
{
}
inline RadmonDetectorCarvedFlatVolumeWithPinsConstructor :: ~RadmonDetectorCarvedFlatVolumeWithPinsConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHPINSCONSTRUCTOR_HH */
@@ -0,0 +1,61 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor.hh,v 1.3 2006/06/29 16:09:13 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with carved borders
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithTracksDecorator.hh"
#include "RadmonTDetectorVolumesWithHoleDecorator.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> > > >
{
public:
inline RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor(const RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor & copy);
RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor & operator=(const RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor.icc,v 1.3 2006/06/29 16:09:15 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor :: RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonTDetectorCarvedVolumesDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> > > >("CarvedFlatVolumeWithTracksAndHole")
{
}
inline RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor :: ~RadmonDetectorCarvedFlatVolumeWithTracksAndHoleConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithTracksConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithTracksConstructor.hh,v 1.3 2006/06/29 16:09:17 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with carved borders and tracks
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH
#define RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorCarvedVolumesDecorator.hh"
#include "RadmonTDetectorVolumesWithTracksDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorCarvedFlatVolumeWithTracksConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonTDetectorCarvedVolumesDecorator<RadmonDetectorFlatVolumeComponent> > >
{
public:
inline RadmonDetectorCarvedFlatVolumeWithTracksConstructor();
inline virtual ~RadmonDetectorCarvedFlatVolumeWithTracksConstructor();
private:
// Hidden constructors and operators
RadmonDetectorCarvedFlatVolumeWithTracksConstructor(const RadmonDetectorCarvedFlatVolumeWithTracksConstructor & copy);
RadmonDetectorCarvedFlatVolumeWithTracksConstructor & operator=(const RadmonDetectorCarvedFlatVolumeWithTracksConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorCarvedFlatVolumeWithTracksConstructor.icc"
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorCarvedFlatVolumeWithTracksConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorCarvedFlatVolumeWithTracksConstructor.icc,v 1.3 2006/06/29 16:09:19 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH
#error "RadmonDetectorCarvedFlatVolumeWithTracksConstructor.icc cannot be included directly. Please use RadmonDetectorCarvedFlatVolumeWithTracksConstructor.hh"
#else /* RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH */
inline RadmonDetectorCarvedFlatVolumeWithTracksConstructor :: RadmonDetectorCarvedFlatVolumeWithTracksConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonTDetectorCarvedVolumesDecorator<RadmonDetectorFlatVolumeComponent> > >("CarvedFlatVolumeWithTracks")
{
}
inline RadmonDetectorCarvedFlatVolumeWithTracksConstructor :: ~RadmonDetectorCarvedFlatVolumeWithTracksConstructor()
{
}
#endif /* RADMONDETECTORCARVEDFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH */
@@ -0,0 +1,94 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorConstruction.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorConstruction.hh,v 1.3.2.2 2006/06/29 16:09:21 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Implementation of the G4VUserDetectorConstruction
//
#ifndef RADMONDETECTORCONSTRUCTION_HH
#define RADMONDETECTORCONSTRUCTION_HH
// Include files
#include "globals.hh"
#include "G4VUserDetectorConstruction.hh"
#include "RadmonVLayoutObserver.hh"
#include <stack>
#include <utility>
// Forward declaration
class G4VPhysicalVolume;
class G4VSolid;
class G4LogicalVolume;
class RadmonVDetectorLayout;
class RadmonVDetectorEntityConstructor;
class RadmonVDetectorEntitiesConstructorsFactory;
class G4String;
class RadmonDetectorConstruction : public G4VUserDetectorConstruction, public RadmonVLayoutObserver
{
public:
RadmonDetectorConstruction(RadmonVDetectorLayout * layout, RadmonVDetectorEntitiesConstructorsFactory * factory);
virtual ~RadmonDetectorConstruction();
virtual G4VPhysicalVolume * Construct(void);
virtual void OnLayoutChange(void);
private:
// Private methods
void Destruct(void);
void BuildEnvironmentFromType(const G4String & type);
void BuildEnvironmentSphere(void);
void BuildMultilayer(G4int index);
// Hidden constructors and operators
RadmonDetectorConstruction();
RadmonDetectorConstruction(const RadmonDetectorConstruction & copy);
RadmonDetectorConstruction & operator=(const RadmonDetectorConstruction & copy);
// Private data types
typedef std::pair<RadmonVDetectorEntityConstructor *, G4VPhysicalVolume *> LayerItem;
typedef std::stack<LayerItem> LayersStack;
// Private attributes
RadmonVDetectorLayout * detectorLayout;
RadmonVDetectorEntitiesConstructorsFactory * constructorsFactory;
LayersStack layersStack;
RadmonVDetectorEntityConstructor * environmentConstructor;
G4VPhysicalVolume * environmentPhysicalVolume;
G4LogicalVolume * environmentLogicalVolume;
G4VSolid * environmentSolid;
};
#endif /* RADMONDETECTORCONSTRUCTION_HH */
@@ -0,0 +1,69 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorEnvironmentLayout.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorEnvironmentLayout.hh,v 1.5 2006/06/29 16:09:23 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Internal class to describe the environment layout
//
#ifndef RADMONDETECTORENVIRONMENTLAYOUT_HH
#define RADMONDETECTORENVIRONMENTLAYOUT_HH
// Include files
#include "RadmonLayoutEntityWithAttributes.hh"
class RadmonDetectorEnvironmentLayout : public RadmonLayoutEntityWithAttributes
{
public:
inline RadmonDetectorEnvironmentLayout();
inline ~RadmonDetectorEnvironmentLayout();
inline G4bool IsEnabled(void) const;
inline void Enable(void);
inline void Disable(void);
inline const G4String & GetType(void) const;
inline void SetType(const G4String & type);
void DumpLayout(std::ostream & out, const G4String & indent=G4String("")) const;
private:
RadmonDetectorEnvironmentLayout(const RadmonDetectorEnvironmentLayout & copy);
RadmonDetectorEnvironmentLayout & operator=(const RadmonDetectorEnvironmentLayout & copy);
G4bool enabled;
G4String environmentType;
};
// Inline implementations
#include "RadmonDetectorEnvironmentLayout.icc"
#endif /* RADMONDETECTORENVIRONMENTLAYOUT_HH */
@@ -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. *
// ********************************************************************
//
//
// File name: RadmonDetectorEnvironmentLayout.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorEnvironmentLayout.icc,v 1.3 2006/06/29 16:09:25 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORENVIRONMENTLAYOUT_HH
#error "RadmonDetectorEnvironmentLayout.icc cannot be included directly. Please use RadmonDetectorEnvironmentLayout.hh"
#else /* RADMONDETECTORENVIRONMENTLAYOUT_HH */
inline RadmonDetectorEnvironmentLayout :: RadmonDetectorEnvironmentLayout()
:
enabled(false),
environmentType()
{
}
inline RadmonDetectorEnvironmentLayout :: ~RadmonDetectorEnvironmentLayout()
{
}
inline G4bool RadmonDetectorEnvironmentLayout :: IsEnabled(void) const
{
return enabled;
}
inline void RadmonDetectorEnvironmentLayout :: Enable(void)
{
enabled=true;
}
inline void RadmonDetectorEnvironmentLayout :: Disable(void)
{
enabled=false;
}
inline const G4String & RadmonDetectorEnvironmentLayout :: GetType(void) const
{
return environmentType;
}
inline void RadmonDetectorEnvironmentLayout :: SetType(const G4String & type)
{
environmentType=type;
}
#endif /* RADMONDETECTORENVIRONMENTLAYOUT_HH */
@@ -0,0 +1,70 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeComponent.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeComponent.hh,v 1.4 2006/06/29 16:09:27 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Component to create a box
//
#ifndef RADMONDETECTORFLATVOLUMECOMPONENT_HH
#define RADMONDETECTORFLATVOLUMECOMPONENT_HH
// Include files
#include "globals.hh"
// Forward declarations
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
class G4Box;
class G4VisAttributes;
class RadmonDetectorFlatVolumeComponent
{
public:
inline RadmonDetectorFlatVolumeComponent(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonDetectorFlatVolumeComponent();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeComponent();
RadmonDetectorFlatVolumeComponent(const RadmonDetectorFlatVolumeComponent & copy);
RadmonDetectorFlatVolumeComponent & operator=(const RadmonDetectorFlatVolumeComponent & copy);
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
G4Box * box;
G4VisAttributes * visAttributes;
};
// Inline implementations
#include "RadmonDetectorFlatVolumeComponent.icc"
#endif /* RADMONDETECTORFLATVOLUMECOMPONENT_HH */
@@ -0,0 +1,45 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeComponent.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeComponent.icc,v 1.1.2.2 2006/06/29 16:09:29 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMECOMPONENT_HH
#error "RadmonDetectorFlatVolumeComponent.icc cannot be included directly. Please use RadmonDetectorFlatVolumeComponent.hh"
#else /* RADMONDETECTORFLATVOLUMECOMPONENT_HH */
inline RadmonDetectorFlatVolumeComponent :: RadmonDetectorFlatVolumeComponent(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
box(0),
visAttributes(0)
{
}
#endif /* RADMONDETECTORFLATVOLUMECOMPONENT_HH */
@@ -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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeConstructor.hh,v 1.3 2006/06/29 16:09:31 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box
//
#ifndef RADMONDETECTORFLATVOLUMECONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeConstructor : public RadmonTDetectorLayerConstructor<RadmonDetectorFlatVolumeComponent>
{
public:
inline RadmonDetectorFlatVolumeConstructor();
inline virtual ~RadmonDetectorFlatVolumeConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeConstructor(const RadmonDetectorFlatVolumeConstructor & copy);
RadmonDetectorFlatVolumeConstructor & operator=(const RadmonDetectorFlatVolumeConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeConstructor.icc,v 1.3 2006/06/29 16:09:33 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMECONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMECONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeConstructor :: RadmonDetectorFlatVolumeConstructor()
:
RadmonTDetectorLayerConstructor<RadmonDetectorFlatVolumeComponent>("FlatVolume")
{
}
inline RadmonDetectorFlatVolumeConstructor :: ~RadmonDetectorFlatVolumeConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMECONSTRUCTOR_HH */
@@ -0,0 +1,61 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.hh,v 1.3 2006/06/29 16:09:35 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with a ground pad, marks and hole
//
#ifndef RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithGroundDecorator.hh"
#include "RadmonTDetectorVolumesWithKeyMarksDecorator.hh"
#include "RadmonTDetectorVolumesWithHoleDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithHoleDecorator<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > > >
{
public:
inline RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor(const RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor & copy);
RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor & operator=(const RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc,v 1.3 2006/06/29 16:09:37 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor :: RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithHoleDecorator<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > > >("FlatVolumeWithGroundAndKeyMarksAndHole")
{
}
inline RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor :: ~RadmonDetectorFlatVolumeWithGroundAndKeyMarksAndHoleConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor.hh,v 1.3 2006/06/29 16:09:39 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with a ground pad and marks
//
#ifndef RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithGroundDecorator.hh"
#include "RadmonTDetectorVolumesWithKeyMarksDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > >
{
public:
inline RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor(const RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor & copy);
RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor & operator=(const RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor.icc,v 1.3 2006/06/29 16:09:41 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor :: RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithKeyMarksDecorator<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> > >("FlatVolumeWithGroundAndKeyMarks")
{
}
inline RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor :: ~RadmonDetectorFlatVolumeWithGroundAndKeyMarksConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHGROUNDANDKEYMARKSCONSTRUCTOR_HH */
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithGroundConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithGroundConstructor.hh,v 1.3 2006/06/29 16:09:43 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with carved borders
//
#ifndef RADMONDETECTORFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithGroundDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithGroundConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> >
{
public:
inline RadmonDetectorFlatVolumeWithGroundConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithGroundConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithGroundConstructor(const RadmonDetectorFlatVolumeWithGroundConstructor & copy);
RadmonDetectorFlatVolumeWithGroundConstructor & operator=(const RadmonDetectorFlatVolumeWithGroundConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithGroundConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithGroundConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithGroundConstructor.icc,v 1.3 2006/06/29 16:09:45 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithGroundConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithGroundConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithGroundConstructor :: RadmonDetectorFlatVolumeWithGroundConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithGroundDecorator<RadmonDetectorFlatVolumeComponent> >("FlatVolumeWithGround")
{
}
inline RadmonDetectorFlatVolumeWithGroundConstructor :: ~RadmonDetectorFlatVolumeWithGroundConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHGROUNDCONSTRUCTOR_HH */
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithHoleConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithHoleConstructor.hh,v 1.3 2006/06/29 16:09:47 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with a hole
//
#ifndef RADMONDETECTORFLATVOLUMEWITHHOLECONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHHOLECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithHoleDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithHoleConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> >
{
public:
inline RadmonDetectorFlatVolumeWithHoleConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithHoleConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithHoleConstructor(const RadmonDetectorFlatVolumeWithHoleConstructor & copy);
RadmonDetectorFlatVolumeWithHoleConstructor & operator=(const RadmonDetectorFlatVolumeWithHoleConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithHoleConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHHOLECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithHoleConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithHoleConstructor.icc,v 1.3 2006/06/29 16:09:49 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHHOLECONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithHoleConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithHoleConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHHOLECONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithHoleConstructor :: RadmonDetectorFlatVolumeWithHoleConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> >("FlatVolumeWithHole")
{
}
inline RadmonDetectorFlatVolumeWithHoleConstructor :: ~RadmonDetectorFlatVolumeWithHoleConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHHOLECONSTRUCTOR_HH */
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithPadsConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithPadsConstructor.hh,v 1.3 2006/06/29 16:09:51 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with pins
//
#ifndef RADMONDETECTORFLATVOLUMEWITHPADSCONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHPADSCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithPadsDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithPadsConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithPadsDecorator<RadmonDetectorFlatVolumeComponent> >
{
public:
inline RadmonDetectorFlatVolumeWithPadsConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithPadsConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithPadsConstructor(const RadmonDetectorFlatVolumeWithPadsConstructor & copy);
RadmonDetectorFlatVolumeWithPadsConstructor & operator=(const RadmonDetectorFlatVolumeWithPadsConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithPadsConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHPADSCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithPadsConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithPadsConstructor.icc,v 1.3 2006/06/29 16:09:53 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHPADSCONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithPadsConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithPadsConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHPADSCONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithPadsConstructor :: RadmonDetectorFlatVolumeWithPadsConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithPadsDecorator<RadmonDetectorFlatVolumeComponent> >("FlatVolumeWithPads")
{
}
inline RadmonDetectorFlatVolumeWithPadsConstructor :: ~RadmonDetectorFlatVolumeWithPadsConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHPADSCONSTRUCTOR_HH */
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithPinsConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithPinsConstructor.hh,v 1.3 2006/06/29 16:09:55 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with pins
//
#ifndef RADMONDETECTORFLATVOLUMEWITHPINSCONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHPINSCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithPinsDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithPinsConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithPinsDecorator<RadmonDetectorFlatVolumeComponent> >
{
public:
inline RadmonDetectorFlatVolumeWithPinsConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithPinsConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithPinsConstructor(const RadmonDetectorFlatVolumeWithPinsConstructor & copy);
RadmonDetectorFlatVolumeWithPinsConstructor & operator=(const RadmonDetectorFlatVolumeWithPinsConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithPinsConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHPINSCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithPinsConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithPinsConstructor.icc,v 1.3 2006/06/29 16:09:57 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHPINSCONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithPinsConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithPinsConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHPINSCONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithPinsConstructor :: RadmonDetectorFlatVolumeWithPinsConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithPinsDecorator<RadmonDetectorFlatVolumeComponent> >("FlatVolumeWithPins")
{
}
inline RadmonDetectorFlatVolumeWithPinsConstructor :: ~RadmonDetectorFlatVolumeWithPinsConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHPINSCONSTRUCTOR_HH */
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithTracksAndHoleConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithTracksAndHoleConstructor.hh,v 1.3 2006/06/29 16:09:59 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with tracks and a hole
//
#ifndef RADMONDETECTORFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithTracksDecorator.hh"
#include "RadmonTDetectorVolumesWithHoleDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithTracksAndHoleConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> > >
{
public:
inline RadmonDetectorFlatVolumeWithTracksAndHoleConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithTracksAndHoleConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithTracksAndHoleConstructor(const RadmonDetectorFlatVolumeWithTracksAndHoleConstructor & copy);
RadmonDetectorFlatVolumeWithTracksAndHoleConstructor & operator=(const RadmonDetectorFlatVolumeWithTracksAndHoleConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithTracksAndHoleConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithTracksAndHoleConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithTracksAndHoleConstructor.icc,v 1.3 2006/06/29 16:10:01 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithTracksAndHoleConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithTracksAndHoleConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithTracksAndHoleConstructor :: RadmonDetectorFlatVolumeWithTracksAndHoleConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonTDetectorVolumesWithHoleDecorator<RadmonDetectorFlatVolumeComponent> > >("FlatVolumeWithTracksAndHole")
{
}
inline RadmonDetectorFlatVolumeWithTracksAndHoleConstructor :: ~RadmonDetectorFlatVolumeWithTracksAndHoleConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHTRACKSANDHOLECONSTRUCTOR_HH */
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithTracksConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithTracksConstructor.hh,v 1.3 2006/06/29 16:10:03 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Builds a box with tracks
//
#ifndef RADMONDETECTORFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH
#define RADMONDETECTORFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH
// Include files
#include "RadmonTDetectorLayerConstructor.hh"
#include "RadmonTDetectorVolumesWithTracksDecorator.hh"
#include "RadmonDetectorFlatVolumeComponent.hh"
class RadmonDetectorFlatVolumeWithTracksConstructor : public RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonDetectorFlatVolumeComponent> >
{
public:
inline RadmonDetectorFlatVolumeWithTracksConstructor();
inline virtual ~RadmonDetectorFlatVolumeWithTracksConstructor();
private:
// Hidden constructors and operators
RadmonDetectorFlatVolumeWithTracksConstructor(const RadmonDetectorFlatVolumeWithTracksConstructor & copy);
RadmonDetectorFlatVolumeWithTracksConstructor & operator=(const RadmonDetectorFlatVolumeWithTracksConstructor & copy);
};
// Inline implementations
#include "RadmonDetectorFlatVolumeWithTracksConstructor.icc"
#endif /* RADMONDETECTORFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH */
@@ -0,0 +1,49 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeWithTracksConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeWithTracksConstructor.icc,v 1.3 2006/06/29 16:10:05 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH
#error "RadmonDetectorFlatVolumeWithTracksConstructor.icc cannot be included directly. Please use RadmonDetectorFlatVolumeWithTracksConstructor.hh"
#else /* RADMONDETECTORFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH */
inline RadmonDetectorFlatVolumeWithTracksConstructor :: RadmonDetectorFlatVolumeWithTracksConstructor()
:
RadmonTDetectorLayerConstructor<RadmonTDetectorVolumesWithTracksDecorator<RadmonDetectorFlatVolumeComponent> >("FlatVolumeWithTracks")
{
}
inline RadmonDetectorFlatVolumeWithTracksConstructor :: ~RadmonDetectorFlatVolumeWithTracksConstructor()
{
}
#endif /* RADMONDETECTORFLATVOLUMEWITHTRACKSCONSTRUCTOR_HH */
@@ -0,0 +1,71 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLabelledEntitiesConstructorsFactory.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLabelledEntitiesConstructorsFactory.hh,v 1.4 2006/06/29 16:10:07 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Concrete factory that constructs
// RadmonVDetectorLabelledEntityConstructor objects
//
#ifndef RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSFACTORY_HH
#define RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSFACTORY_HH
// Include files
#include "RadmonVDetectorEntitiesConstructorsFactory.hh"
#include <list>
// Forward declarations
class RadmonVDetectorLabelledEntityConstructor;
class RadmonVDetectorEntityConstructor;
class RadmonDetectorLabelledEntitiesConstructorsFactory : public RadmonVDetectorEntitiesConstructorsFactory
{
public:
inline RadmonDetectorLabelledEntitiesConstructorsFactory();
virtual ~RadmonDetectorLabelledEntitiesConstructorsFactory();
virtual RadmonVDetectorEntityConstructor * CreateEntityConstructor(const G4String & entityName);
void AppendLabelledEntityConstructor(RadmonVDetectorLabelledEntityConstructor * constructor);
private:
// Hidden constructors and operators
RadmonDetectorLabelledEntitiesConstructorsFactory(const RadmonDetectorLabelledEntitiesConstructorsFactory & copy);
RadmonDetectorLabelledEntitiesConstructorsFactory & operator=(const RadmonDetectorLabelledEntitiesConstructorsFactory & copy);
// Private attributes
typedef std::list<RadmonVDetectorLabelledEntityConstructor *> EntityConstructorsList;
EntityConstructorsList entityConstructorsList;
};
// Inline implementations
#include "RadmonDetectorLabelledEntitiesConstructorsFactory.icc"
#endif /* RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSFACTORY_HH */
@@ -0,0 +1,41 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLabelledEntitiesConstructorsFactory.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLabelledEntitiesConstructorsFactory.icc,v 1.3 2006/06/29 16:10:09 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSFACTORY_HH
#error "RadmonDetectorLabelledEntitiesConstructorsFactory.icc cannot be included directly. Please use RadmonDetectorLabelledEntitiesConstructorsFactory.hh"
#else /* RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSFACTORY_HH */
inline RadmonDetectorLabelledEntitiesConstructorsFactory :: RadmonDetectorLabelledEntitiesConstructorsFactory()
{
}
#endif /* RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSFACTORY_HH */
@@ -0,0 +1,74 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLabelledEntitiesConstructorsMessenger.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLabelledEntitiesConstructorsMessenger.hh,v 1.3 2006/06/29 16:10:11 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: UI commands for dumping the available constructors
//
#ifndef RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSMESSENGER_HH
#define RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSMESSENGER_HH
// Include files
#include "RadmonMessenger.hh"
#include "G4String.hh"
#include <set>
class RadmonDetectorLabelledEntitiesConstructorsMessenger : public RadmonMessenger
{
public:
static RadmonDetectorLabelledEntitiesConstructorsMessenger * Instance(void);
void AddAvailableConstructor(const G4String & name);
void RemoveAvailableConstructor(const G4String & name);
virtual G4String GetCurrentValue(G4UIcommand * command);
virtual void SetNewValue(G4UIcommand * command, G4String newValue);
private:
// Hidden constructors and operators
RadmonDetectorLabelledEntitiesConstructorsMessenger();
RadmonDetectorLabelledEntitiesConstructorsMessenger(const RadmonDetectorLabelledEntitiesConstructorsMessenger & copy);
~RadmonDetectorLabelledEntitiesConstructorsMessenger();
RadmonDetectorLabelledEntitiesConstructorsMessenger & operator=(const RadmonDetectorLabelledEntitiesConstructorsMessenger & copy);
// Private Data Types
typedef std::set<G4String> AvailableConstructors;
// Private variables
AvailableConstructors availableConstructors;
static RadmonDetectorLabelledEntitiesConstructorsMessenger * instance;
// Commands
RADMON_DECLARE_COMMAND(Dump);
};
#endif /* RADMONDETECTORLABELLEDENTITIESCONSTRUCTORSMESSENGER_HH */
@@ -0,0 +1,70 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerLayout.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerLayout.hh,v 1.5 2006/06/29 16:10:13 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Internal class that describes layer informations
//
#ifndef RADMONDETECTORLAYERLAYOUT_HH
#define RADMONDETECTORLAYERLAYOUT_HH
// Include files
#include "RadmonLayoutEntityWithAttributes.hh"
class RadmonDetectorLayerLayout : public RadmonLayoutEntityWithAttributes
{
public:
inline RadmonDetectorLayerLayout();
inline RadmonDetectorLayerLayout(const RadmonDetectorLayerLayout & copy);
inline ~RadmonDetectorLayerLayout();
inline RadmonDetectorLayerLayout & operator=(const RadmonDetectorLayerLayout & copy);
inline const G4String & GetLabel(void) const;
inline const G4String & GetType(void) const;
inline G4double GetThickness(void) const;
inline void SetLabel(const G4String & label);
inline void SetType(const G4String & type);
inline void SetThickness(G4double thickness);
void DumpLayout(std::ostream & out, const G4String &indent=G4String()) const;
private:
// Private attributes
G4String layerLabel;
G4String layerType;
G4double layerThickness;
};
// Inline implementations
#include "RadmonDetectorLayerLayout.icc"
#endif /* RADMONDETECTORLAYERLAYOUT_HH */
@@ -0,0 +1,118 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerLayout.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerLayout.icc,v 1.5 2006/06/29 16:10:15 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORLAYERLAYOUT_HH
#error "RadmonDetectorLayerLayout.icc cannot be included directly. Please use RadmonDetectorLayerLayout.hh"
#else /* RADMONDETECTORLAYERLAYOUT_HH */
inline RadmonDetectorLayerLayout :: RadmonDetectorLayerLayout()
:
layerThickness(0.)
{
}
inline RadmonDetectorLayerLayout :: RadmonDetectorLayerLayout(const RadmonDetectorLayerLayout & copy)
:
RadmonLayoutEntityWithAttributes(copy),
layerLabel(copy.layerLabel),
layerType(copy.layerType),
layerThickness(copy.layerThickness)
{
}
inline RadmonDetectorLayerLayout :: ~RadmonDetectorLayerLayout()
{
}
inline RadmonDetectorLayerLayout & RadmonDetectorLayerLayout :: operator=(const RadmonDetectorLayerLayout & copy)
{
RadmonLayoutEntityWithAttributes::operator=(copy);
layerLabel=copy.layerLabel;
layerType=copy.layerType;
layerThickness=copy.layerThickness;
return (*this);
}
inline const G4String & RadmonDetectorLayerLayout :: GetLabel(void) const
{
return layerLabel;
}
inline const G4String & RadmonDetectorLayerLayout :: GetType(void) const
{
return layerType;
}
inline G4double RadmonDetectorLayerLayout :: GetThickness(void) const
{
return layerThickness;
}
inline void RadmonDetectorLayerLayout :: SetLabel(const G4String & label)
{
layerLabel=label;
}
inline void RadmonDetectorLayerLayout :: SetType(const G4String & type)
{
layerType=type;
}
inline void RadmonDetectorLayerLayout :: SetThickness(G4double thickness)
{
layerThickness=thickness;
}
#endif /* RADMONDETECTORLAYERLAYOUT_HH */
@@ -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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumesItem.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItem.hh,v 1.5 2006/06/29 16:10:17 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: solids, physical and logical volumes
//
#ifndef RADMONDETECTORLAYERVOLUMEITEM_HH
#define RADMONDETECTORLAYERVOLUMEITEM_HH
// Include files
#include "G4RotationMatrix.hh"
#include "G4ThreeVector.hh"
#include "G4String.hh"
// Forward declarations
class G4VisAttributes;
class G4VSolid;
class G4Material;
class G4LogicalVolume;
class G4VPhysicalVolume;
class G4VSensitiveDetector;
class RadmonDetectorLayerVolumeItem
{
public:
inline RadmonDetectorLayerVolumeItem();
~RadmonDetectorLayerVolumeItem();
inline void SetSolid(G4VSolid * solid);
inline void SetAttributes(G4VisAttributes * attrs);
inline void SetMaterial(G4Material * material);
inline void SetName(const G4String & name);
inline void SetPosition(const G4ThreeVector & position);
inline void SetRotation(const G4RotationMatrix & rotation);
inline void SetSensitiveDetector(G4VSensitiveDetector * detector);
inline void SetMotherVolumeItem(RadmonDetectorLayerVolumeItem * item);
inline G4VSolid * GetSolid(void) const;
inline G4VisAttributes * GetAttributes(void) const;
inline G4Material * GetMaterial(void) const;
inline const G4String & GetName(void) const;
inline const G4ThreeVector & GetPosition(void) const;
inline const G4RotationMatrix & GetRotation(void) const;
inline G4VSensitiveDetector * GetSensitiveDetector(void) const;
inline RadmonDetectorLayerVolumeItem * GetMotherVolumeItem(void) const;
G4LogicalVolume * GetLogicalVolume(void);
private:
// Private methods
void Assertion(void);
// Hidden constructors and operators
RadmonDetectorLayerVolumeItem(const RadmonDetectorLayerVolumeItem & copy);
RadmonDetectorLayerVolumeItem & operator=(const RadmonDetectorLayerVolumeItem & copy);
// Private attributes
G4VSolid * volumeSolid;
G4VisAttributes * volumeAttributes;
G4Material * volumeMaterial;
G4String volumeName;
G4RotationMatrix volumeRotation;
G4ThreeVector volumePosition;
G4LogicalVolume * volumeLogical;
G4VPhysicalVolume * volumePhysical;
G4VSensitiveDetector * volumeSensitiveDetector;
RadmonDetectorLayerVolumeItem * volumeMother;
};
// Inline implementations
#include "RadmonDetectorLayerVolumeItem.icc"
#endif /* RADMONDETECTORLAYERVOLUMEITEM_HH */
@@ -0,0 +1,173 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItem.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItem.icc,v 1.4 2006/06/29 16:10:19 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORLAYERVOLUMEITEM_HH
#error "RadmonDetectorLayerVolumeItem.icc cannot be included directly. Please use RadmonDetectorLayerVolumeItem.hh"
#else /* RADMONDETECTORLAYERVOLUMEITEM_HH */
inline RadmonDetectorLayerVolumeItem :: RadmonDetectorLayerVolumeItem()
:
volumeSolid(0),
volumeAttributes(0),
volumeMaterial(0),
volumeLogical(0),
volumePhysical(0),
volumeSensitiveDetector(0),
volumeMother(0)
{
}
inline void RadmonDetectorLayerVolumeItem :: SetSolid(G4VSolid * solid)
{
Assertion();
volumeSolid=solid;
}
inline void RadmonDetectorLayerVolumeItem :: SetAttributes(G4VisAttributes * attrs)
{
Assertion();
volumeAttributes=attrs;
}
inline void RadmonDetectorLayerVolumeItem :: SetMaterial(G4Material * material)
{
Assertion();
volumeMaterial=material;
}
inline void RadmonDetectorLayerVolumeItem :: SetName(const G4String & name)
{
Assertion();
volumeName=name;
}
inline void RadmonDetectorLayerVolumeItem :: SetPosition(const G4ThreeVector & position)
{
Assertion();
volumePosition=position;
}
inline void RadmonDetectorLayerVolumeItem :: SetRotation(const G4RotationMatrix & rotation)
{
Assertion();
volumeRotation=rotation;
}
inline void RadmonDetectorLayerVolumeItem :: SetSensitiveDetector(G4VSensitiveDetector * detector)
{
Assertion();
volumeSensitiveDetector=detector;
}
inline void RadmonDetectorLayerVolumeItem :: SetMotherVolumeItem(RadmonDetectorLayerVolumeItem * item)
{
Assertion();
volumeMother=item;
}
inline G4VSolid * RadmonDetectorLayerVolumeItem :: GetSolid(void) const
{
return volumeSolid;
}
inline G4VisAttributes * RadmonDetectorLayerVolumeItem :: GetAttributes(void) const
{
return volumeAttributes;
}
inline G4Material * RadmonDetectorLayerVolumeItem :: GetMaterial(void) const
{
return volumeMaterial;
}
inline const G4String & RadmonDetectorLayerVolumeItem :: GetName(void) const
{
return volumeName;
}
inline const G4ThreeVector & RadmonDetectorLayerVolumeItem :: GetPosition(void) const
{
return volumePosition;
}
inline const G4RotationMatrix & RadmonDetectorLayerVolumeItem :: GetRotation(void) const
{
return volumeRotation;
}
inline G4VSensitiveDetector * RadmonDetectorLayerVolumeItem :: GetSensitiveDetector(void) const
{
return volumeSensitiveDetector;
}
inline RadmonDetectorLayerVolumeItem * RadmonDetectorLayerVolumeItem :: GetMotherVolumeItem(void) const
{
return volumeMother;
}
#endif /* RADMONDETECTORLAYERVOLUMEITEM_HH */
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItemIntersection.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItemIntersection.hh,v 1.3 2006/06/29 16:10:21 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Intersection of two solids
//
#ifndef RADMONDETECTORLAYERVOLUMEITEMINTERSECTION_HH
#define RADMONDETECTORLAYERVOLUMEITEMINTERSECTION_HH
// Include files
#include "RadmonVDetectorLayerVolumeItemOperation.hh"
class RadmonDetectorLayerVolumeItemIntersection : public RadmonVDetectorLayerVolumeItemOperation
{
public:
inline RadmonDetectorLayerVolumeItemIntersection();
inline RadmonDetectorLayerVolumeItemIntersection(G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemIntersection(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemIntersection(G4VSolid * solid, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemIntersection(const RadmonDetectorLayerVolumeItem * item);
inline ~RadmonDetectorLayerVolumeItemIntersection();
protected:
virtual G4VSolid * Operate(G4VSolid * left, G4VSolid * right, G4RotationMatrix * relativeRotation, const G4ThreeVector & relativePosition);
};
// Inline implementations
#include "RadmonDetectorLayerVolumeItemIntersection.icc"
#endif /* RADMONDETECTORLAYERVOLUMEITEMINTERSECTION_HH */
@@ -0,0 +1,81 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItemIntersection.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItemIntersection.icc,v 1.3 2006/06/29 16:10:23 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORLAYERVOLUMEITEMINTERSECTION_HH
#error "RadmonDetectorLayerVolumeItemIntersection.icc cannot be included directly. Please use RadmonDetectorLayerVolumeItemIntersection.hh"
#else /* RADMONDETECTORLAYERVOLUMEITEMINTERSECTION_HH */
inline RadmonDetectorLayerVolumeItemIntersection :: RadmonDetectorLayerVolumeItemIntersection()
:
RadmonVDetectorLayerVolumeItemOperation()
{
}
inline RadmonDetectorLayerVolumeItemIntersection :: RadmonDetectorLayerVolumeItemIntersection(G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, rotation, position, ownSolid)
{
}
inline RadmonDetectorLayerVolumeItemIntersection :: RadmonDetectorLayerVolumeItemIntersection(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, position, ownSolid)
{
}
inline RadmonDetectorLayerVolumeItemIntersection :: RadmonDetectorLayerVolumeItemIntersection(G4VSolid * solid, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, ownSolid)
{
}
inline RadmonDetectorLayerVolumeItemIntersection :: RadmonDetectorLayerVolumeItemIntersection(const RadmonDetectorLayerVolumeItem * item)
:
RadmonVDetectorLayerVolumeItemOperation(item)
{
}
inline RadmonDetectorLayerVolumeItemIntersection :: ~RadmonDetectorLayerVolumeItemIntersection()
{
}
#endif /* RADMONDETECTORLAYERVOLUMEITEMINTERSECTION_HH */
@@ -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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItemSubtraction.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItemSubtraction.hh,v 1.3 2006/06/29 16:10:25 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Subtraction of two solids
//
#ifndef RADMONDETECTORLAYERVOLUMEITEMSUBTRACTION_HH
#define RADMONDETECTORLAYERVOLUMEITEMSUBTRACTION_HH
// Include files
#include "RadmonVDetectorLayerVolumeItemOperation.hh"
class RadmonDetectorLayerVolumeItemSubtraction : public RadmonVDetectorLayerVolumeItemOperation
{
public:
enum Mode
{
leftMinusRight,
rightMinusLeft
};
inline RadmonDetectorLayerVolumeItemSubtraction(Mode mode);
inline RadmonDetectorLayerVolumeItemSubtraction(Mode mode, G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemSubtraction(Mode mode, G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemSubtraction(Mode mode, G4VSolid * solid, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemSubtraction(Mode mode, const RadmonDetectorLayerVolumeItem * item);
inline ~RadmonDetectorLayerVolumeItemSubtraction();
protected:
virtual G4VSolid * Operate(G4VSolid * left, G4VSolid * right, G4RotationMatrix * relativeRotation, const G4ThreeVector & relativePosition);
private:
Mode opMode;
};
// Inline implementations
#include "RadmonDetectorLayerVolumeItemSubtraction.icc"
#endif /* RADMONDETECTORLAYERVOLUMEITEMSUBTRACTION_HH */
@@ -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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItemSubtraction.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItemSubtraction.icc,v 1.3 2006/06/29 16:10:27 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORLAYERVOLUMEITEMSUBTRACTION_HH
#error "RadmonDetectorLayerVolumeItemSubtraction.icc cannot be included directly. Please use RadmonDetectorLayerVolumeItemSubtraction.hh"
#else /* RADMONDETECTORLAYERVOLUMEITEMSUBTRACTION_HH */
inline RadmonDetectorLayerVolumeItemSubtraction :: RadmonDetectorLayerVolumeItemSubtraction(Mode mode)
:
RadmonVDetectorLayerVolumeItemOperation(),
opMode(mode)
{
}
inline RadmonDetectorLayerVolumeItemSubtraction :: RadmonDetectorLayerVolumeItemSubtraction(Mode mode, G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, rotation, position, ownSolid),
opMode(mode)
{
}
inline RadmonDetectorLayerVolumeItemSubtraction :: RadmonDetectorLayerVolumeItemSubtraction(Mode mode, G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, position, ownSolid),
opMode(mode)
{
}
inline RadmonDetectorLayerVolumeItemSubtraction :: RadmonDetectorLayerVolumeItemSubtraction(Mode mode, G4VSolid * solid, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, ownSolid),
opMode(mode)
{
}
inline RadmonDetectorLayerVolumeItemSubtraction :: RadmonDetectorLayerVolumeItemSubtraction(Mode mode, const RadmonDetectorLayerVolumeItem * item)
:
RadmonVDetectorLayerVolumeItemOperation(item),
opMode(mode)
{
}
inline RadmonDetectorLayerVolumeItemSubtraction :: ~RadmonDetectorLayerVolumeItemSubtraction()
{
}
#endif /* RADMONDETECTORLAYERVOLUMEITEMSUBTRACTION_HH */
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItemUnion.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItemUnion.hh,v 1.3 2006/06/29 16:10:29 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Union of two solids
//
#ifndef RADMONDETECTORLAYERVOLUMEITEMUNION_HH
#define RADMONDETECTORLAYERVOLUMEITEMUNION_HH
// Include files
#include "RadmonVDetectorLayerVolumeItemOperation.hh"
class RadmonDetectorLayerVolumeItemUnion : public RadmonVDetectorLayerVolumeItemOperation
{
public:
inline RadmonDetectorLayerVolumeItemUnion();
inline RadmonDetectorLayerVolumeItemUnion(G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemUnion(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemUnion(G4VSolid * solid, G4bool ownSolid=true);
inline RadmonDetectorLayerVolumeItemUnion(const RadmonDetectorLayerVolumeItem * item);
inline ~RadmonDetectorLayerVolumeItemUnion();
protected:
virtual G4VSolid * Operate(G4VSolid * left, G4VSolid * right, G4RotationMatrix * relativeRotation, const G4ThreeVector & relativePosition);
};
// Inline implementations
#include "RadmonDetectorLayerVolumeItemUnion.icc"
#endif /* RADMONDETECTORLAYERVOLUMEITEMUNION_HH */
@@ -0,0 +1,81 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItemUnion.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItemUnion.icc,v 1.3 2006/06/29 16:10:31 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORLAYERVOLUMEITEMUNION_HH
#error "RadmonDetectorLayerVolumeItemUnion.icc cannot be included directly. Please use RadmonDetectorLayerVolumeItemUnion.hh"
#else /* RADMONDETECTORLAYERVOLUMEITEMUNION_HH */
inline RadmonDetectorLayerVolumeItemUnion :: RadmonDetectorLayerVolumeItemUnion()
:
RadmonVDetectorLayerVolumeItemOperation()
{
}
inline RadmonDetectorLayerVolumeItemUnion :: RadmonDetectorLayerVolumeItemUnion(G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, rotation, position, ownSolid)
{
}
inline RadmonDetectorLayerVolumeItemUnion :: RadmonDetectorLayerVolumeItemUnion(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, position, ownSolid)
{
}
inline RadmonDetectorLayerVolumeItemUnion :: RadmonDetectorLayerVolumeItemUnion(G4VSolid * solid, G4bool ownSolid)
:
RadmonVDetectorLayerVolumeItemOperation(solid, ownSolid)
{
}
inline RadmonDetectorLayerVolumeItemUnion :: RadmonDetectorLayerVolumeItemUnion(const RadmonDetectorLayerVolumeItem * item)
:
RadmonVDetectorLayerVolumeItemOperation(item)
{
}
inline RadmonDetectorLayerVolumeItemUnion :: ~RadmonDetectorLayerVolumeItemUnion()
{
}
#endif /* RADMONDETECTORLAYERVOLUMEITEMUNION_HH */
@@ -0,0 +1,82 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumesList.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumesList.hh,v 1.4 2006/06/29 16:10:33 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Collection of solids, physical and logical volumes
//
#ifndef RADMONDETECTORLAYERVOLUMESLIST_HH
#define RADMONDETECTORLAYERVOLUMESLIST_HH
// Include files
#include "globals.hh"
#include <vector>
// Forward declaration
class RadmonDetectorLayerVolumeItem;
class RadmonDetectorLayerVolumesList
{
public:
inline RadmonDetectorLayerVolumesList();
inline ~RadmonDetectorLayerVolumesList();
inline G4int GetNItems(void) const;
inline G4bool Empty(void) const;
inline const RadmonDetectorLayerVolumeItem * GetItem(G4int index) const;
inline RadmonDetectorLayerVolumeItem * GetItem(G4int index);
RadmonDetectorLayerVolumeItem * AppendItem(void);
void RemoveItem(G4int index);
void RemoveItemsByRange(G4int first, G4int last);
void RemoveAllItems(void);
private:
// Hidden constructors and operators
RadmonDetectorLayerVolumesList(const RadmonDetectorLayerVolumesList & copy);
RadmonDetectorLayerVolumesList & operator=(const RadmonDetectorLayerVolumesList & copy);
// Private data types
typedef std::vector<RadmonDetectorLayerVolumeItem *> VolumesVector;
// Private methods
void RemoveRange(VolumesVector::iterator begin, VolumesVector::iterator end);
// Private attributes
VolumesVector volumesVector;
};
// Inline implementations
#include "RadmonDetectorLayerVolumesList.icc"
#endif /* RADMONDETECTORLAYERVOLUMESLIST_HH */
@@ -0,0 +1,77 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumesList.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumesList.icc,v 1.3 2006/06/29 16:10:35 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORLAYERVOLUMESLIST_HH
#error "RadmonDetectorLayerVolumesList.icc cannot be included directly. Please use RadmonDetectorLayerVolumesList.hh"
#else /* RADMONDETECTORLAYERVOLUMESLIST_HH */
inline RadmonDetectorLayerVolumesList :: RadmonDetectorLayerVolumesList()
{
}
inline RadmonDetectorLayerVolumesList :: ~RadmonDetectorLayerVolumesList()
{
RemoveAllItems();
}
inline G4int RadmonDetectorLayerVolumesList :: GetNItems(void) const
{
return volumesVector.size();
}
inline G4bool RadmonDetectorLayerVolumesList :: Empty(void) const
{
return volumesVector.empty();
}
inline const RadmonDetectorLayerVolumeItem * RadmonDetectorLayerVolumesList :: GetItem(G4int index) const
{
return volumesVector[index];
}
inline RadmonDetectorLayerVolumeItem * RadmonDetectorLayerVolumesList :: GetItem(G4int index)
{
return volumesVector[index];
}
#endif /* RADMONDETECTORLAYERVOLUMESLIST_HH */
@@ -0,0 +1,131 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayout.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayout.hh,v 1.4.2.2 2006/06/29 16:10:37 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Class to keep track of the configured detector layout
//
#ifndef RADMONDETECTORLAYOUT_HH
#define RADMONDETECTORLAYOUT_HH
// Include files
#include "RadmonVDetectorLayout.hh"
#include "RadmonDetectorEnvironmentLayout.hh"
#include "RadmonDetectorMultilayersLayoutCollection.hh"
#include "RadmonDetectorMultilayerPlacementsLayoutCollection.hh"
class RadmonDetectorLayout : public RadmonVDetectorLayout
{
public:
RadmonDetectorLayout();
~RadmonDetectorLayout();
virtual void EnableEnvironment(void);
virtual void DisableEnvironment(void);
virtual G4bool IsEnabledEnvironment(void) const;
virtual void SetEnvironmentType(const G4String & type);
virtual const G4String & GetEnvironmentType() const;
virtual G4int GetEnvironmentNAttributes(void) const;
virtual const G4String & GetEnvironmentAttributeName(G4int index) const;
virtual void SetEnvironmentAttribute(const G4String & attributeName, const G4String & attributeValue);
virtual const G4String GetEnvironmentAttribute(const G4String & attributeName, const G4String & defaultAttributeValue) const;
virtual void ClearEnvironmentAttribute(const G4String & attributeName);
virtual void CreateMultilayer(const G4String & multilayerLabel);
virtual void RemoveMultilayer(const G4String & multilayerLabel);
virtual void SetMultilayerWidth(const G4String & multilayerLabel, G4double width);
virtual G4double GetMultilayerWidth(const G4String & multilayerLabel) const;
virtual void SetMultilayerHeight(const G4String & multilayerLabel, G4double height);
virtual G4double GetMultilayerHeight(const G4String & multilayerLabel) const;
virtual G4double GetMultilayerTotalThickness(const G4String & multilayerLabel) const;
virtual void AppendLayerToMultilayer(const G4String & multilayerLabel, const G4String & layerLabel);
virtual void RemoveLayerFromMultilayer(const G4String & multilayerLabel, const G4String & layerLabel);
virtual void RemoveAllLayersFromMultilayer(const G4String & multilayerLabel);
virtual G4int GetMultilayerNLayers(const G4String & multilayerLabel) const;
virtual const G4String & GetMultilayerLayerLabel(const G4String & multilayerLabel, G4int index) const;
virtual void SetLayerThickness(const G4String & multilayerLabel, const G4String & layerLabel, G4double thickness);
virtual G4double GetLayerThickness(const G4String & multilayerLabel, const G4String & layerLabel) const;
virtual void SetLayerType(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & type);
virtual const G4String & GetLayerType(const G4String & multilayerLabel, const G4String & layerLabel) const;
virtual G4int GetLayerNAttributes(const G4String & multilayerLabel, const G4String & layerLabel) const;
virtual const G4String & GetLayerAttributeName(const G4String & multilayerLabel, const G4String & layerLabel, G4int index) const;
virtual void SetLayerAttribute(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & attributeName, const G4String & attributeValue);
virtual const G4String GetLayerAttribute(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & attributeName, const G4String & defaultAttributeValue) const;
virtual void ClearLayerAttribute(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & attributeName);
virtual void CreatePlacement(const G4String & placementLabel, const G4String & multilayerName);
virtual G4int GetNPlacements() const;
virtual const G4String & GetPlacementLabel(G4int index) const;
virtual void RemovePlacement(const G4String & placementLabel);
virtual const G4String & GetPlacementMultilayerType(const G4String & placementLabel) const;
virtual void SetPlacementPosition(const G4String & placementLabel, const G4ThreeVector & position);
virtual const G4ThreeVector & GetPlacementPosition(const G4String & placementLabel) const;
virtual void SetPlacementPosition(const G4String & placementLabel, const G4String & originLabel, const G4ThreeVector & offset);
virtual void SetPlacementRotation(const G4String & placementLabel, const G4RotationMatrix & rotation);
virtual const G4RotationMatrix & GetPlacementRotation(const G4String & placementLabel) const;
virtual void SetPlacementRotation(const G4String & placementLabel, const G4String & originLabel, const G4RotationMatrix & relativeRotation);
virtual void DumpLayout(std::ostream & out) const;
virtual G4bool Load(std::istream & in);
virtual G4bool Save(std::ostream & out) const;
private:
inline bool IsPlaced(const G4String & multilayerLabel);
inline RadmonDetectorMultilayerLayout * FindMultilayer(const G4String & multilayerLabel);
inline const RadmonDetectorMultilayerLayout *FindMultilayer(const G4String & multilayerLabel) const;
inline RadmonDetectorMultilayerPlacementLayout * FindPlacement(const G4String & placementLabel);
inline const RadmonDetectorMultilayerPlacementLayout *FindPlacement(const G4String & placementLabel) const;
inline RadmonDetectorLayerLayout * FindLayer(const G4String & multilayerLabel, const G4String & layerLabel);
inline const RadmonDetectorLayerLayout * FindLayer(const G4String & multilayerLabel, const G4String & layerLabel) const;
inline G4String & GetNullStr() const;
inline G4ThreeVector & GetNullPosition() const;
inline G4RotationMatrix & GetNullRotationMatrix() const;
// Hidden constructors and operators
RadmonDetectorLayout(const RadmonDetectorLayout & copy);
RadmonDetectorLayout & operator=(const RadmonDetectorLayout & copy);
// Private attributes
RadmonDetectorMultilayerPlacementsLayoutCollection multilayerPlacementsCollection;
RadmonDetectorMultilayersLayoutCollection multilayersCollection;
RadmonDetectorEnvironmentLayout environment;
};
#endif /* RADMONDETECTORLAYOUT_HH */
@@ -0,0 +1,96 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMessenger.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMessenger.hh,v 1.5 2006/06/29 16:10:39 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: UI commands for managing a layout
//
#ifndef RADMONDETECTORMESSENGER_HH
#define RADMONDETECTORMESSENGER_HH
// Include files
#include "RadmonMessenger.hh"
#include "G4String.hh"
// Forward declarations
class RadmonVDetectorLayout;
class RadmonDetectorMessenger : public RadmonMessenger
{
public:
RadmonDetectorMessenger(RadmonVDetectorLayout * layout);
~RadmonDetectorMessenger();
virtual G4String GetCurrentValue(G4UIcommand * command);
virtual void SetNewValue(G4UIcommand * command, G4String newValue);
private:
// Hidden constructors and operators
RadmonDetectorMessenger();
RadmonDetectorMessenger(const RadmonDetectorMessenger & copy);
RadmonDetectorMessenger & operator=(const RadmonDetectorMessenger & copy);
// Private Attributes
RadmonVDetectorLayout * detectorLayout;
// Commands
RADMON_DECLARE_COMMAND(EnableEnvironment);
RADMON_DECLARE_COMMAND(DisableEnvironment);
RADMON_DECLARE_COMMAND(SetEnvironmentType);
RADMON_DECLARE_COMMAND(SetEnvironmentAttribute);
RADMON_DECLARE_COMMAND(ClearEnvironmentAttribute);
RADMON_DECLARE_COMMAND(CreateMultilayer);
RADMON_DECLARE_COMMAND(RemoveMultilayer);
RADMON_DECLARE_COMMAND(SetMultilayerWidth);
RADMON_DECLARE_COMMAND(SetMultilayerHeight);
RADMON_DECLARE_COMMAND(AppendLayerToMultilayer);
RADMON_DECLARE_COMMAND(RemoveLayerFromMultilayer);
RADMON_DECLARE_COMMAND(RemoveAllLayersFromMultilayer);
RADMON_DECLARE_COMMAND(SetLayerThickness);
RADMON_DECLARE_COMMAND(SetLayerType);
RADMON_DECLARE_COMMAND(SetLayerAttribute);
RADMON_DECLARE_COMMAND(ClearLayerAttribute);
RADMON_DECLARE_COMMAND(CreatePlacement);
RADMON_DECLARE_COMMAND(RemovePlacement);
RADMON_DECLARE_COMMAND(SetPlacementPosition);
RADMON_DECLARE_COMMAND(SetPlacementRotation);
RADMON_DECLARE_COMMAND(SetRelativePlacementPosition);
RADMON_DECLARE_COMMAND(SetRelativePlacementRotation);
RADMON_DECLARE_COMMAND(DumpLayout);
RADMON_DECLARE_COMMAND(Load);
RADMON_DECLARE_COMMAND(Save);
};
#endif /* RADMONDETECTORMESSENGER_HH */
@@ -0,0 +1,97 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayerLayout.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayerLayout.hh,v 1.4 2006/06/29 16:10:41 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Internal class to manage multilayers
//
#ifndef RADMONDETECTORMULTILAYERLAYOUT_HH
#define RADMONDETECTORMULTILAYERLAYOUT_HH
// Include files
#include "RadmonDetectorLayerLayout.hh"
#include "RadmonTLabelledCollection.hh"
#include "G4String.hh"
#include "globals.hh"
class RadmonDetectorMultilayerLayout
{
public:
inline RadmonDetectorMultilayerLayout();
RadmonDetectorMultilayerLayout(const RadmonDetectorMultilayerLayout & copy);
inline ~RadmonDetectorMultilayerLayout();
RadmonDetectorMultilayerLayout & operator=(const RadmonDetectorMultilayerLayout & copy);
inline const G4String & GetLabel(void) const;
inline void SetLabel(const G4String & label);
inline G4double GetWidth(void) const;
inline G4double GetHeight(void) const;
G4double GetTotalThickness(void) const;
inline void SetWidth(G4double width);
inline void SetHeight(G4double height);
G4int GetNLayers(void) const;
G4bool Empty(void) const;
const RadmonDetectorLayerLayout & GetLayer(G4int index) const;
RadmonDetectorLayerLayout & GetLayer(G4int index);
G4bool ExistsLayerByLabel(const G4String & layerLabel) const;
G4int MultiplicityLayerByLabel(const G4String & layerLabel) const;
const RadmonDetectorLayerLayout & FindLayerByLabel(const G4String &layerLabel, G4int count = 0) const;
RadmonDetectorLayerLayout & FindLayerByLabel(const G4String & layerLabel, G4int count = 0);
RadmonDetectorLayerLayout & AppendLayer(void);
RadmonDetectorLayerLayout & PrependLayer(void);
void RemoveLayerByLabel(const G4String & layerLabel, G4int count = 0);
void RemoveLayersByLabel(const G4String & layerLabel);
void RemoveLayer(G4int index);
void RemoveLayersByRange(G4int first, G4int last);
void RemoveAllLayers(void);
void DumpLayout(std::ostream & out, const G4String & indent=G4String()) const;
private:
// Private attributes
G4String multilayerLabel;
G4double multilayerWidth;
G4double multilayerHeight;
RadmonTLabelledCollection<RadmonDetectorLayerLayout> multilayerLayersCollection;
};
// Inline implementations
#include "RadmonDetectorMultilayerLayout.icc"
#endif /* RADMONDETECTORMULTILAYERLAYOUT_HH */
@@ -0,0 +1,96 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayerLayout.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayerLayout.icc,v 1.4 2006/06/29 16:10:43 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORMULTILAYERLAYOUT_HH
#error "RadmonDetectorMultilayerLayout.icc cannot be included directly. Please use RadmonDetectorMultilayerLayout.hh"
#else /* RADMONDETECTORMULTILAYERLAYOUT_HH */
inline RadmonDetectorMultilayerLayout :: RadmonDetectorMultilayerLayout()
:
multilayerWidth(0.),
multilayerHeight(0.)
{
}
inline RadmonDetectorMultilayerLayout :: ~RadmonDetectorMultilayerLayout()
{
}
inline const G4String & RadmonDetectorMultilayerLayout :: GetLabel(void) const
{
return multilayerLabel;
}
inline void RadmonDetectorMultilayerLayout :: SetLabel(const G4String & label)
{
multilayerLabel=label;
}
inline G4double RadmonDetectorMultilayerLayout :: GetWidth(void) const
{
return multilayerWidth;
}
inline G4double RadmonDetectorMultilayerLayout :: GetHeight(void) const
{
return multilayerHeight;
}
inline void RadmonDetectorMultilayerLayout :: SetWidth(G4double width)
{
multilayerWidth=width;
}
inline void RadmonDetectorMultilayerLayout :: SetHeight(G4double height)
{
multilayerHeight=height;
}
#endif /* RADMONDETECTORMULTILAYERLAYOUT_HH */
@@ -0,0 +1,82 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayerPlacementLayout.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayerPlacementLayout.hh,v 1.4 2006/06/29 16:10:45 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Internal class to manage placed multilayer
//
#ifndef RADMONDETECTORMULTILAYERPLACEMENTLAYOUT_HH
#define RADMONDETECTORMULTILAYERPLACEMENTLAYOUT_HH
// Include files
#include "G4RotationMatrix.hh"
#include "G4ThreeVector.hh"
#include "G4String.hh"
class RadmonDetectorMultilayerPlacementLayout
{
public:
inline RadmonDetectorMultilayerPlacementLayout();
inline RadmonDetectorMultilayerPlacementLayout(const RadmonDetectorMultilayerPlacementLayout & copy);
inline ~RadmonDetectorMultilayerPlacementLayout();
inline RadmonDetectorMultilayerPlacementLayout & operator=(const RadmonDetectorMultilayerPlacementLayout & copy);
inline const G4String & GetLabel(void) const;
inline const G4String & GetMultilayerLabel(void) const;
inline void SetLabel(const G4String & label);
inline void SetMultilayerLabel(const G4String & label);
inline const G4ThreeVector & GetAbsolutePosition(void) const;
inline const G4RotationMatrix & GetAbsoluteRotation(void) const;
G4ThreeVector GetRelativePosition(const RadmonDetectorMultilayerPlacementLayout & reference) const;
G4RotationMatrix GetRelativeRotation(const RadmonDetectorMultilayerPlacementLayout & reference) const;
inline void SetAbsolutePosition(const G4ThreeVector & position);
inline void SetAbsoluteRotation(const G4RotationMatrix & rotation);
void SetRelativePosition(const RadmonDetectorMultilayerPlacementLayout & reference, const G4ThreeVector & position);
void SetRelativeRotation(const RadmonDetectorMultilayerPlacementLayout & reference, const G4RotationMatrix & rotation);
void DumpLayout(std::ostream & out, const G4String & indent=G4String()) const;
private:
// Private attributes
G4String placementLabel;
G4String multilayerLabel;
G4RotationMatrix multilayerRotation;
G4ThreeVector multilayerPosition;
};
// Inline implementations
#include "RadmonDetectorMultilayerPlacementLayout.icc"
#endif /* RADMONDETECTORMULTILAYERPLACEMENTLAYOUT_HH */
@@ -0,0 +1,136 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayerPlacementLayout.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayerPlacementLayout.icc,v 1.3 2006/06/29 16:10:47 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORMULTILAYERPLACEMENTLAYOUT_HH
#error "RadmonDetectorMultilayerPlacementLayout.icc cannot be included directly. Please use RadmonDetectorMultilayerPlacementLayout.hh"
#else /* RADMONDETECTORMULTILAYERPLACEMENTLAYOUT_HH */
inline RadmonDetectorMultilayerPlacementLayout :: RadmonDetectorMultilayerPlacementLayout()
{
}
inline RadmonDetectorMultilayerPlacementLayout :: RadmonDetectorMultilayerPlacementLayout(const RadmonDetectorMultilayerPlacementLayout & copy)
:
placementLabel(copy.placementLabel),
multilayerLabel(copy.multilayerLabel),
multilayerRotation(copy.multilayerRotation),
multilayerPosition(copy.multilayerPosition)
{
}
inline RadmonDetectorMultilayerPlacementLayout :: ~RadmonDetectorMultilayerPlacementLayout()
{
}
inline RadmonDetectorMultilayerPlacementLayout & RadmonDetectorMultilayerPlacementLayout :: operator=(const RadmonDetectorMultilayerPlacementLayout & copy)
{
placementLabel=copy.placementLabel;
multilayerLabel=copy.multilayerLabel;
multilayerRotation=copy.multilayerRotation;
multilayerPosition=copy.multilayerPosition;
return (*this);
}
inline const G4String & RadmonDetectorMultilayerPlacementLayout :: GetLabel(void) const
{
return placementLabel;
}
inline const G4String & RadmonDetectorMultilayerPlacementLayout :: GetMultilayerLabel(void) const
{
return multilayerLabel;
}
inline void RadmonDetectorMultilayerPlacementLayout :: SetLabel(const G4String & label)
{
placementLabel=label;
}
inline void RadmonDetectorMultilayerPlacementLayout :: SetMultilayerLabel(const G4String & label)
{
multilayerLabel=label;
}
inline const G4ThreeVector & RadmonDetectorMultilayerPlacementLayout :: GetAbsolutePosition(void) const
{
return multilayerPosition;
}
inline const G4RotationMatrix & RadmonDetectorMultilayerPlacementLayout :: GetAbsoluteRotation(void) const
{
return multilayerRotation;
}
inline void RadmonDetectorMultilayerPlacementLayout :: SetAbsolutePosition(const G4ThreeVector & position)
{
multilayerPosition=position;
}
inline void RadmonDetectorMultilayerPlacementLayout :: SetAbsoluteRotation(const G4RotationMatrix & rotation)
{
multilayerRotation=rotation;
}
#endif /* RADMONDETECTORMULTILAYERPLACEMENTLAYOUT_HH */
@@ -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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayerPlacementsLayoutCollection.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayerPlacementsLayoutCollection.hh,v 1.4 2006/06/29 16:10:49 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Internal class to collect placed multilayer
//
#ifndef RADMONDETECTORMULTILAYERPLACEMENTSLAYOUTCOLLECTION_HH
#define RADMONDETECTORMULTILAYERPLACEMENTSLAYOUTCOLLECTION_HH
// Include files
#include "RadmonTLabelledCollection.hh"
#include "globals.hh"
// Forward declarations
class G4String;
class RadmonDetectorMultilayerPlacementLayout;
class RadmonDetectorMultilayerPlacementsLayoutCollection
{
public:
inline RadmonDetectorMultilayerPlacementsLayoutCollection();
inline ~RadmonDetectorMultilayerPlacementsLayoutCollection();
G4int GetNPlacements(void) const;
G4bool Empty(void) const;
const RadmonDetectorMultilayerPlacementLayout & GetPlacement(G4int index) const;
RadmonDetectorMultilayerPlacementLayout & GetPlacement(G4int index);
G4bool ExistsPlacementByLabel(const G4String & label) const;
G4int MultiplicityPlacementByLabel(const G4String & label) const;
const RadmonDetectorMultilayerPlacementLayout & FindPlacementByLabel(const G4String & label, G4int count=0) const;
RadmonDetectorMultilayerPlacementLayout & FindPlacementByLabel(const G4String & label, G4int count=0);
RadmonDetectorMultilayerPlacementLayout & CreatePlacement(void);
void RemovePlacementByLabel(const G4String & label, G4int count=0);
void RemovePlacementsByLabel(const G4String & label);
void RemovePlacement(G4int index);
void RemoveAllPlacements(void);
void DumpLayout(std::ostream & out, const G4String & indent) const;
private:
// Hidden constructors and operators
RadmonDetectorMultilayerPlacementsLayoutCollection(const RadmonDetectorMultilayerPlacementsLayoutCollection & copy);
RadmonDetectorMultilayerPlacementsLayoutCollection & operator=(const RadmonDetectorMultilayerPlacementsLayoutCollection & copy);
// Private attributes
RadmonTLabelledCollection<RadmonDetectorMultilayerPlacementLayout> multilayerPlacementsCollection;
};
// Inline implementations
#include "RadmonDetectorMultilayerPlacementsLayoutCollection.icc"
#endif /* RADMONDETECTORMULTILAYERPLACEMENTSLAYOUTCOLLECTION_HH */
@@ -0,0 +1,55 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayerPlacementsLayoutCollection.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayerPlacementsLayoutCollection.icc,v 1.3 2006/06/29 16:11:14 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORMULTILAYERPLACEMENTSLAYOUTCOLLECTION_HH
#error "RadmonDetectorMultilayerPlacementsLayoutCollection.icc cannot be included directly. Please use RadmonDetectorMultilayerPlacementsLayoutCollection.hh"
#else /* RADMONDETECTORMULTILAYERPLACEMENTSLAYOUTCOLLECTION_HH */
// Include files
#include "RadmonDetectorMultilayerPlacementLayout.hh"
inline RadmonDetectorMultilayerPlacementsLayoutCollection :: RadmonDetectorMultilayerPlacementsLayoutCollection()
{
}
inline RadmonDetectorMultilayerPlacementsLayoutCollection :: ~RadmonDetectorMultilayerPlacementsLayoutCollection()
{
}
#endif /* RADMONDETECTORMULTILAYERPLACEMENTSLAYOUTCOLLECTION_HH */
@@ -0,0 +1,82 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayersLayoutCollection.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayersLayoutCollection.hh,v 1.4 2006/06/29 16:11:42 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Internal class to collect multilayers
//
#ifndef RADMONDETECTORMULTILAYERSLAYOUTCOLLECTION_HH
#define RADMONDETECTORMULTILAYERSLAYOUTCOLLECTION_HH
// Include files
#include "RadmonDetectorMultilayerLayout.hh"
#include "RadmonTLabelledCollection.hh"
class RadmonDetectorMultilayersLayoutCollection
{
public:
inline RadmonDetectorMultilayersLayoutCollection();
inline ~RadmonDetectorMultilayersLayoutCollection();
G4int GetNMultilayers(void) const;
G4bool Empty(void) const;
const RadmonDetectorMultilayerLayout & GetMultilayer(G4int index) const;
RadmonDetectorMultilayerLayout & GetMultilayer(G4int index);
G4bool ExistsMultilayerByLabel(const G4String & label) const;
G4int MultiplicityMultilayerByLabel(const G4String & label) const;
const RadmonDetectorMultilayerLayout & FindMultilayerByLabel(const G4String & label, G4int count = 0) const;
RadmonDetectorMultilayerLayout & FindMultilayerByLabel(const G4String & label, G4int count = 0);
RadmonDetectorMultilayerLayout & CreateMultilayer(void);
void RemoveMultilayerByLabel(const G4String & label, G4int count = 0);
void RemoveMultilayersByLabel(const G4String & label);
void RemoveMultilayer(G4int index);
void RemoveAllMultilayers(void);
void DumpLayout(std::ostream & out, const G4String &indent=G4String()) const;
private:
// Hidden constructors and operators
RadmonDetectorMultilayersLayoutCollection(const RadmonDetectorMultilayersLayoutCollection & copy);
RadmonDetectorMultilayersLayoutCollection & operator=(const RadmonDetectorMultilayersLayoutCollection & copy);
// Private attributes
RadmonTLabelledCollection<RadmonDetectorMultilayerLayout> multilayersCollection;
};
// Inline implementations
#include "RadmonDetectorMultilayersLayoutCollection.icc"
#endif /* RADMONDETECTORMULTILAYERSLAYOUTCOLLECTION_HH */
@@ -0,0 +1,47 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorMultilayersLayoutCollection.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorMultilayersLayoutCollection.icc,v 1.3 2006/06/29 16:12:06 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORMULTILAYERSLAYOUTCOLLECTION_HH
#error "RadmonDetectorMultilayersLayoutCollection.icc cannot be included directly. Please use RadmonDetectorMultilayersLayoutCollection.hh"
#else /* RADMONDETECTORMULTILAYERSLAYOUTCOLLECTION_HH */
inline RadmonDetectorMultilayersLayoutCollection :: RadmonDetectorMultilayersLayoutCollection()
{
}
inline RadmonDetectorMultilayersLayoutCollection :: ~RadmonDetectorMultilayersLayoutCollection()
{
}
#endif /* RADMONDETECTORMULTILAYERSLAYOUTCOLLECTION_HH */
@@ -0,0 +1,90 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorPadsData.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorPadsData.hh,v 1.3 2006/06/29 16:12:09 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Internal class for pads data managemenet
//
#ifndef RADMONDETECTORPADSDATA_HH
#define RADMONDETECTORPADSDATA_HH
// Include files
#include "G4ThreeVector.hh"
#include "G4RotationMatrix.hh"
#include <vector>
// Forward declarations
class G4Material;
class RadmonDetectorPadsData
{
public:
inline RadmonDetectorPadsData();
RadmonDetectorPadsData(const RadmonDetectorPadsData & copy);
inline ~RadmonDetectorPadsData();
inline G4double GetWidth(void) const;
inline G4double GetHeight(void) const;
inline G4Material * GetMaterial(void) const;
G4int GetNPads(void) const;
const G4ThreeVector & GetPosition(G4int index) const;
const G4RotationMatrix & GetRotation(G4int index) const;
inline void SetWidth(G4double width);
inline void SetHeight(G4double height);
inline void SetMaterial(G4Material * material);
inline void AppendPosition(const G4ThreeVector & position);
void AppendPositionAndRotation(const G4ThreeVector & position, const G4RotationMatrix & rotation);
bool ReadPositionsAndRotationsFromString(const G4String & positionsStr);
RadmonDetectorPadsData & operator=(const RadmonDetectorPadsData & copy);
private:
bool ProcessElement(G4double & x, G4double & y, G4double & delta, const G4String & content);
bool ReadUmis(G4double & value, const G4String & text, const char * category);
// Private data types
typedef std::vector<G4ThreeVector> PadPositions;
typedef std::vector<G4RotationMatrix> PadRotations;
// Private attributes
G4double padWidth;
G4double padHeight;
G4Material * padMaterial;
PadPositions padPositions;
PadRotations padRotations;
};
// Inline implementations
#include "RadmonDetectorPadsData.icc"
#endif /* RADMONDETECTORPADSDATA_HH */
@@ -0,0 +1,104 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorPadsData.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorPadsData.icc,v 1.3 2006/06/29 16:12:11 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONDETECTORPADSDATA_HH
#error "RadmonDetectorPadsData.icc cannot be included directly. Please use RadmonDetectorPadsData.hh"
#else /* RADMONDETECTORPADSDATA_HH */
inline RadmonDetectorPadsData :: RadmonDetectorPadsData()
:
padWidth(0.),
padHeight(0.),
padMaterial(0)
{
}
inline RadmonDetectorPadsData :: ~RadmonDetectorPadsData()
{
}
inline G4double RadmonDetectorPadsData :: GetWidth(void) const
{
return padWidth;
}
inline G4double RadmonDetectorPadsData :: GetHeight(void) const
{
return padHeight;
}
inline G4Material * RadmonDetectorPadsData :: GetMaterial(void) const
{
return padMaterial;
}
inline void RadmonDetectorPadsData :: SetWidth(G4double width)
{
padWidth=width;
}
inline void RadmonDetectorPadsData :: SetHeight(G4double height)
{
padHeight=height;
}
inline void RadmonDetectorPadsData :: SetMaterial(G4Material * material)
{
padMaterial=material;
}
inline void RadmonDetectorPadsData :: AppendPosition(const G4ThreeVector & position)
{
AppendPositionAndRotation(position, G4RotationMatrix::IDENTITY);
}
#endif /* RADMONDETECTORPADSDATA_HH */
@@ -0,0 +1,85 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorCarvedVolumesDecorator.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorCarvedVolumesDecorator.hh,v 1.5 2006/06/29 16:12:13 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Carves the borders of a component with the following method
// - Constructor
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORCARVEDVOLUMESDECORATOR_HH
#define RADMONTDETECTORCARVEDVOLUMESDECORATOR_HH
// Include files
#include <stack>
#include "RadmonDetectorLayerVolumeItemSubtraction.hh"
#include "RadmonDetectorLayerVolumeItemIntersection.hh"
#include "G4RotationMatrix.hh"
// Forward declaration
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
class G4VSolid;
class G4VAttributes;
template <class LayerVolumesComponent>
class RadmonTDetectorCarvedVolumesDecorator
{
public:
RadmonTDetectorCarvedVolumesDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonTDetectorCarvedVolumesDecorator();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonTDetectorCarvedVolumesDecorator();
RadmonTDetectorCarvedVolumesDecorator(const RadmonTDetectorCarvedVolumesDecorator & copy);
RadmonTDetectorCarvedVolumesDecorator & operator=(const RadmonTDetectorCarvedVolumesDecorator & copy);
// Private data types
typedef std::stack<G4VSolid *> OwnedSolids;
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
LayerVolumesComponent component;
OwnedSolids ownedSolids;
G4VisAttributes * visAttributes;
RadmonDetectorLayerVolumeItemSubtraction subtraction;
RadmonDetectorLayerVolumeItemIntersection intersection;
G4RotationMatrix identity;
};
// Inline implementations
#include "RadmonTDetectorCarvedVolumesDecorator.icc"
#endif /* RADMONTDETECTORCARVEDVOLUMESDECORATOR_HH */
@@ -0,0 +1,319 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorCarvedVolumesDecorator.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorCarvedVolumesDecorator.icc,v 1.2.2.2 2006/06/29 16:12:15 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORCARVEDVOLUMESDECORATOR_HH
#error "RadmonTDetectorCarvedVolumesDecorator.icc cannot be included directly. Please use RadmonTDetectorCarvedVolumesDecorator.hh"
#else /* RADMONTDETECTORCARVEDVOLUMESDECORATOR_HH */
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4VisAttributes.hh"
#include "G4DisplacedSolid.hh"
#include "G4UnionSolid.hh"
#include "G4Tubs.hh"
#include "G4UIcommand.hh"
template <class LayerVolumesComponent>
RadmonTDetectorCarvedVolumesDecorator<LayerVolumesComponent> :: RadmonTDetectorCarvedVolumesDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
component(constructor),
visAttributes(0),
subtraction(RadmonDetectorLayerVolumeItemSubtraction::rightMinusLeft)
{
}
template <class LayerVolumesComponent>
RadmonTDetectorCarvedVolumesDecorator<LayerVolumesComponent> :: ~RadmonTDetectorCarvedVolumesDecorator()
{
while (! ownedSolids.empty())
{
delete ownedSolids.top();
ownedSolids.pop();
}
delete visAttributes;
}
template <class LayerVolumesComponent>
RadmonDetectorLayerVolumesList * RadmonTDetectorCarvedVolumesDecorator<LayerVolumesComponent> :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4int holesAlongWidth(owner->GetAttributeAsInteger("HolesAlongWidth", -1));
if (holesAlongWidth<0)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: \"HolesAlongWidth\" attribute not defined." << G4endl;
return 0;
}
G4int holesAlongHeight(owner->GetAttributeAsInteger("HolesAlongHeight", -1));
if (holesAlongHeight<0)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: \"HolesAlongHeight\" attribute not defined." << G4endl;
return 0;
}
if ((holesAlongWidth+holesAlongHeight)<=0)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: Both \"HolesAlongHeight\" and \"HolesAlongHeight\" attributes are 0." << G4endl;
return 0;
}
G4double holesRadius(owner->GetAttributeAsMeasure("HolesRadius", "Length", -1.));
if (holesRadius<0)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: \"HolesRadius\" attribute not defined." << G4endl;
return 0;
}
G4double holesStep(owner->GetAttributeAsMeasure("HolesStep", "Length", -1.));
if (holesStep<0)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: \"HolesStep\" attribute not defined." << G4endl;
return 0;
}
G4double fullHolesStep(holesRadius*2.+holesStep);
if (fullHolesStep*static_cast<G4double>(holesAlongWidth-1)>width || fullHolesStep>width)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: Holes parameters does not fit along width." << G4endl;
return 0;
}
if (fullHolesStep*static_cast<G4double>(holesAlongHeight-1)>height || fullHolesStep>height)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: Holes parameters does not fit along height." << G4endl;
return 0;
}
G4Material * material(0);
G4double depositOnHolesThickness(owner->GetAttributeAsMeasure("DepositOnHolesThickness", "Length", -1.));
if (depositOnHolesThickness>0)
{
if (depositOnHolesThickness>=holesRadius)
{
G4cout << "RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: \"DepositOnHolesThickness\" >= \"HolesRadius\"." << G4endl;
return 0;
}
if (depositOnHolesThickness>0)
{
material=owner->GetMaterial("DepositOnHolesMaterial");
if (!material)
return 0;
visAttributes=owner->AllocateVisAttributes("DepositOnHolesVisAttributes", material);
}
}
else
depositOnHolesThickness=0*mm;
RadmonDetectorLayerVolumesList * list(component.GenerateVolumesList());
if (list==0)
return 0;
G4int nItems(list->GetNItems());
if (nItems==0)
{
delete list;
return 0;
}
G4Tubs * holeCylinder(new G4Tubs("SingleHole", 0, holesRadius-depositOnHolesThickness, (thickness/2.)*1.01, 0, 360.*deg));
ownedSolids.push(holeCylinder);
G4ThreeVector offset((fullHolesStep/2.)*static_cast<G4double>(holesAlongWidth-1), height/2., 0);
G4VSolid * displacedHole(0);
G4VSolid * holes(0);
G4int i(holesAlongWidth);
identity=G4RotationMatrix::IDENTITY;
G4int index(0);
G4String indexStr;
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
displacedHole=new G4DisplacedSolid("DisplacedSingleHole"+indexStr, holeCylinder, &identity, offset);
ownedSolids.push(displacedHole);
if (holes)
{
holes=new G4UnionSolid("DisplacedHoles"+indexStr, holes, displacedHole);
ownedSolids.push(holes);
}
else
holes=displacedHole;
offset.setY(-offset.getY());
if (offset.getY()>=0)
{
offset.setX(offset.getX()-fullHolesStep);
i--;
}
}
offset.setX(width/2.);
offset.setY((fullHolesStep/2.)*static_cast<G4double>(holesAlongHeight-1));
i=holesAlongHeight;
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
displacedHole=new G4DisplacedSolid("DisplacedSingleHole"+indexStr, holeCylinder, &identity, offset);
ownedSolids.push(displacedHole);
if (holes)
{
holes=new G4UnionSolid("DisplacedHoles"+indexStr, holes, displacedHole);
ownedSolids.push(holes);
}
else
holes=displacedHole;
offset.setX(-offset.getX());
if (offset.getX()>=0)
{
offset.setY(offset.getY()-fullHolesStep);
i--;
}
}
RadmonDetectorLayerVolumeItem * item;
RadmonDetectorLayerVolumeItem * motherItem;
subtraction.Initialize(holes, false);
while (nItems>0)
{
nItems--;
item=list->GetItem(nItems);
if (item->GetMotherVolumeItem()==0)
motherItem=item;
subtraction.ApplyTo(item);
}
if (!motherItem)
G4Exception("RadmonTDetectorCarvedVolumesDecorator::GenerateVolumesList: No mother volume found.");
if (material)
{
intersection.Initialize(motherItem);
G4Tubs * depositTub(new G4Tubs("SingleDeposit", holesRadius-depositOnHolesThickness, holesRadius, thickness/2., 0, 360.*deg));
ownedSolids.push(depositTub);
offset.setX((fullHolesStep/2.)*static_cast<G4double>(holesAlongWidth-1));
offset.setY(height/2.);
offset.setZ(0.);
i=holesAlongWidth;
index=0;
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(depositTub, offset, false, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("DepositOnHole"+indexStr);
item->SetMotherVolumeItem(motherItem);
offset.setY(-offset.getY());
if (offset.getY()>=0)
{
offset.setX(offset.getX()-fullHolesStep);
i--;
}
}
offset.setX(width/2.);
offset.setY((fullHolesStep/2.)*static_cast<G4double>(holesAlongHeight-1));
i=holesAlongHeight;
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(depositTub, offset, false, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("DepositOnHole"+indexStr);
item->SetMotherVolumeItem(motherItem);
offset.setX(-offset.getX());
if (offset.getX()>=0)
{
offset.setY(offset.getY()-fullHolesStep);
i--;
}
}
}
return list;
}
#endif /* RADMONTDETECTORCARVEDVOLUMESDECORATOR_HH */
@@ -0,0 +1,74 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorLayerConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorLayerConstructor.hh,v 1.4 2006/06/29 16:12:17 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Generates a layer using a component with the following methods
// - Constructor with RadmonVDetectorLabelledEntityConstructor or its base classes as argument
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORLAYERCONSTRUCTOR_HH
#define RADMONTDETECTORLAYERCONSTRUCTOR_HH
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "globals.hh"
// Forward declaration
class RadmonDetectorLayerVolumesList;
template <class LayerVolumesComponent>
class RadmonTDetectorLayerConstructor : public RadmonVDetectorLabelledEntityConstructor
{
public:
RadmonTDetectorLayerConstructor(const G4String & label);
~RadmonTDetectorLayerConstructor();
virtual G4LogicalVolume * ConstructLogicalVolume(void);
virtual RadmonVDetectorLabelledEntityConstructor * New(void) const;
private:
// Hidden constructors and operators
RadmonTDetectorLayerConstructor();
RadmonTDetectorLayerConstructor(const RadmonTDetectorLayerConstructor & copy);
RadmonTDetectorLayerConstructor & operator=(const RadmonTDetectorLayerConstructor & copy);
// Private attributes
RadmonDetectorLayerVolumesList * volumesList;
LayerVolumesComponent component;
};
// Inline implementations
#include "RadmonTDetectorLayerConstructor.icc"
#endif /* RADMONTDETECTORLAYERCONSTRUCTOR_HH */
@@ -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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorLayerConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorLayerConstructor.icc,v 1.2.2.2 2006/06/29 16:12:20 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORLAYERCONSTRUCTOR_HH
#error "RadmonTDetectorLayerConstructor.icc cannot be included directly. Please use RadmonTDetectorLayerConstructor.hh"
#else /* RADMONTDETECTORLAYERCONSTRUCTOR_HH */
// Include files
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4LogicalVolume.hh"
#include "G4UserLimits.hh"
template <class LayerVolumesComponent>
inline RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: RadmonTDetectorLayerConstructor(const G4String & label)
:
RadmonVDetectorLabelledEntityConstructor(label),
volumesList(0),
component(this)
{
}
template <class LayerVolumesComponent>
inline RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: ~RadmonTDetectorLayerConstructor()
{
delete volumesList;
}
template <class LayerVolumesComponent>
G4LogicalVolume * RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: ConstructLogicalVolume(void)
{
if (volumesList)
G4Exception("RadmonTDetectorLayerConstructor::ConstructLogicalVolume: Called twice.");
volumesList=component.GenerateVolumesList();
if (volumesList==0)
return 0;
G4double width(GetWidth());
G4double height(GetHeight());
G4double thickness(GetThickness());
if (width<thickness)
thickness=width;
if (height<thickness)
thickness=height;
RadmonDetectorLayerVolumeItem * item;
G4LogicalVolume * motherVolume(0);
G4LogicalVolume * volume;
G4int n(volumesList->GetNItems());
while (n>0)
{
n--;
item=volumesList->GetItem(n);
volume=item->GetLogicalVolume();
if (volume)
{
volume->SetUserLimits(new G4UserLimits(thickness/10.));
if (item->GetMotherVolumeItem()==0)
{
if (motherVolume)
G4Exception("RadmonTDetectorLayerConstructor::ConstructLogicalVolume: Found two mother volumes.");
motherVolume=volume;
}
}
}
if (!motherVolume)
G4Exception("RadmonTDetectorLayerConstructor::ConstructLogicalVolume: No mother volume found.");
return motherVolume;
}
template <class LayerVolumesComponent>
RadmonVDetectorLabelledEntityConstructor * RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: New(void) const
{
return new RadmonTDetectorLayerConstructor<LayerVolumesComponent>(GetLabel());
}
#endif /* RADMONTDETECTORLAYERCONSTRUCTOR_HH */
@@ -0,0 +1,73 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithGroundDecorator.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithGroundDecorator.hh,v 1.4 2006/06/29 16:12:28 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Decorates with a ground plane
// - Constructor
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORVOLUMESWITHGROUNDDECORATOR_HH
#define RADMONTDETECTORVOLUMESWITHGROUNDDECORATOR_HH
// Forward declaration
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
class G4Box;
class G4VisAttributes;
template <class LayerVolumesComponent>
class RadmonTDetectorVolumesWithGroundDecorator
{
public:
RadmonTDetectorVolumesWithGroundDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonTDetectorVolumesWithGroundDecorator();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonTDetectorVolumesWithGroundDecorator();
RadmonTDetectorVolumesWithGroundDecorator(const RadmonTDetectorVolumesWithGroundDecorator & copy);
RadmonTDetectorVolumesWithGroundDecorator & operator=(const RadmonTDetectorVolumesWithGroundDecorator & copy);
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
LayerVolumesComponent component;
G4Box * box;
G4VisAttributes * visAttributes;
};
// Inline implementations
#include "RadmonTDetectorVolumesWithGroundDecorator.icc"
#endif /* RADMONTDETECTORVOLUMESWITHGROUNDDECORATOR_HH */
@@ -0,0 +1,171 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithGroundDecorator.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithGroundDecorator.icc,v 1.1.2.2 2006/06/29 16:12:30 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORVOLUMESWITHGROUNDDECORATOR_HH
#error "RadmonTDetectorVolumesWithGroundDecorator.icc cannot be included directly. Please use RadmonTDetectorVolumesWithGroundDecorator.hh"
#else /* RADMONTDETECTORVOLUMESWITHGROUNDDECORATOR_HH */
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4Box.hh"
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithGroundDecorator<LayerVolumesComponent> :: RadmonTDetectorVolumesWithGroundDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
component(constructor),
box(0),
visAttributes(0)
{
}
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithGroundDecorator<LayerVolumesComponent> :: ~RadmonTDetectorVolumesWithGroundDecorator()
{
delete box;
delete visAttributes;
}
template <class LayerVolumesComponent>
RadmonDetectorLayerVolumesList * RadmonTDetectorVolumesWithGroundDecorator<LayerVolumesComponent> :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4double groundWidth(owner->GetAttributeAsMeasure("GroundWidth", "Length", -1.));
if (groundWidth<0)
{
groundWidth=owner->GetAttributeAsDouble("GroundScaleWidth", -1.);
if (groundWidth<0)
{
G4cout << "RadmonTDetectorVolumesWithGroundDecorator::GenerateVolumesList: Neither \"GroundWidth\" nor \"GroundScaleWidth\" attributes are defined." << G4endl;
return 0;
}
groundWidth*=width;
}
if (width<groundWidth)
{
G4cout << "RadmonTDetectorVolumesWithGroundDecorator::GenerateVolumesList: Ground width exceeds layer width." << G4endl;
return 0;
}
G4double groundHeight(owner->GetAttributeAsMeasure("GroundHeight", "Length", -1.));
if (groundHeight<0)
{
groundHeight=owner->GetAttributeAsDouble("GroundScaleHeight", -1.);
if (groundHeight<0)
{
G4cout << "RadmonTDetectorVolumesWithGroundDecorator::GenerateVolumesList: Neither \"GroundHeight\" nor \"GroundScaleHeight attributes are defined." << G4endl;
return 0;
}
groundHeight*=height;
}
if (height<groundHeight)
{
G4cout << "RadmonTDetectorVolumesWithGroundDecorator::GenerateVolumesList: Ground height exceeds layer height." << G4endl;
return 0;
}
G4Material * material(owner->GetMaterial("GroundMaterial"));
if (!material)
return 0;
visAttributes=owner->AllocateVisAttributes("GroundVisAttributes", material);
RadmonDetectorLayerVolumesList * list(component.GenerateVolumesList());
if (list==0)
return 0;
G4int n(list->GetNItems());
if (n==0)
{
delete list;
return 0;
}
RadmonDetectorLayerVolumeItem * item;
RadmonDetectorLayerVolumeItem * motherItem;
while (n>0)
{
n--;
item=list->GetItem(n);
if (item->GetMotherVolumeItem()==0)
{
motherItem=item;
break;
}
}
if (!motherItem)
G4Exception("RadmonTDetectorVolumesWithGroundDecorator::GenerateVolumesList: No mother volume found.");
box=new G4Box("Ground", groundWidth/2., groundHeight/2., thickness/2.);
item=list->AppendItem();
item->SetSolid(box);
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Ground");
item->SetMotherVolumeItem(motherItem);
return list;
}
#endif /* RADMONTDETECTORVOLUMESWITHGROUNDDECORATOR_HH */
@@ -0,0 +1,74 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithHoleDecorator.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithHoleDecorator.hh,v 1.5 2006/06/29 16:12:32 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Decorates with a hole a component with the following method
// - Constructor
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORVOLUMESWITHHOLEDECORATOR_HH
#define RADMONTDETECTORVOLUMESWITHHOLEDECORATOR_HH
// Include files
#include "RadmonDetectorLayerVolumeItemSubtraction.hh"
// Forward declaration
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
class G4VSolid;
template <class LayerVolumesComponent>
class RadmonTDetectorVolumesWithHoleDecorator
{
public:
RadmonTDetectorVolumesWithHoleDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonTDetectorVolumesWithHoleDecorator();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonTDetectorVolumesWithHoleDecorator();
RadmonTDetectorVolumesWithHoleDecorator(const RadmonTDetectorVolumesWithHoleDecorator & copy);
RadmonTDetectorVolumesWithHoleDecorator & operator=(const RadmonTDetectorVolumesWithHoleDecorator & copy);
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
LayerVolumesComponent component;
RadmonDetectorLayerVolumeItemSubtraction operation;
};
// Inline implementations
#include "RadmonTDetectorVolumesWithHoleDecorator.icc"
#endif /* RADMONTDETECTORVOLUMESWITHHOLEDECORATOR_HH */
@@ -0,0 +1,148 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithHoleDecorator.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithHoleDecorator.icc,v 1.4 2006/06/29 16:12:34 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORVOLUMESWITHHOLEDECORATOR_HH
#error "RadmonTDetectorVolumesWithHoleDecorator.icc cannot be included directly. Please use RadmonTDetectorVolumesWithHoleDecorator.hh"
#else /* RADMONTDETECTORVOLUMESWITHHOLEDECORATOR_HH */
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "RadmonDetectorLayerVolumeItemSubtraction.hh"
#include "G4Box.hh"
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithHoleDecorator<LayerVolumesComponent> :: RadmonTDetectorVolumesWithHoleDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
component(constructor),
operation(RadmonDetectorLayerVolumeItemSubtraction::rightMinusLeft)
{
}
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithHoleDecorator<LayerVolumesComponent> :: ~RadmonTDetectorVolumesWithHoleDecorator()
{
}
template <class LayerVolumesComponent>
RadmonDetectorLayerVolumesList * RadmonTDetectorVolumesWithHoleDecorator<LayerVolumesComponent> :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4double holeWidth(owner->GetAttributeAsMeasure("HoleWidth", "Length", -1.));
if (holeWidth<0)
{
holeWidth=owner->GetAttributeAsDouble("HoleScaleWidth", -1.);
if (holeWidth<0)
{
G4cout << "RadmonTDetectorVolumesWithHoleDecorator::GenerateVolumesList: Neither \"HoleWidth\" nor \"HoleScaleWidth\" attributes are defined." << G4endl;
return 0;
}
holeWidth*=width;
}
if (width<holeWidth)
{
G4cout << "RadmonTDetectorVolumesWithHoleDecorator::GenerateVolumesList: Hole width exceeds layer width." << G4endl;
return 0;
}
G4double holeHeight(owner->GetAttributeAsMeasure("HoleHeight", "Length", -1.));
if (holeHeight<0)
{
holeHeight=owner->GetAttributeAsDouble("HoleScaleHeight", -1.);
if (holeHeight<0)
{
G4cout << "RadmonTDetectorVolumesWithHoleDecorator::GenerateVolumesList: Neither \"HoleHeight\" nor \"HoleScaleHeight attributes are defined." << G4endl;
return 0;
}
holeHeight*=height;
}
if (height<holeHeight)
{
G4cout << "RadmonTDetectorVolumesWithHoleDecorator::GenerateVolumesList: Hole height exceeds layer height." << G4endl;
return 0;
}
RadmonDetectorLayerVolumesList * list(component.GenerateVolumesList());
if (list==0)
return 0;
G4int n(list->GetNItems());
if (n==0)
{
delete list;
return 0;
}
RadmonDetectorLayerVolumeItem * item;
G4Box * hole(new G4Box("Hole", holeWidth/2., holeHeight/2., (thickness/2.)*1.01));
operation.Initialize(hole);
while (n>0)
{
n--;
item=list->GetItem(n);
operation.ApplyTo(item);
}
return list;
}
#endif /* RADMONTDETECTORVOLUMESWITHHOLEDECORATOR_HH */
@@ -0,0 +1,78 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithKeyMarksDecorator.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithKeyMarksDecorator.hh,v 1.3 2006/06/29 16:12:36 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Decorates with key marks
// - Constructor
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORVOLUMESWITHKEYMARKSDECORATOR_HH
#define RADMONTDETECTORVOLUMESWITHKEYMARKSDECORATOR_HH
// Include files
#include "RadmonDetectorLayerVolumeItemIntersection.hh"
// Forward declaration
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
class G4VSolid;
template <class LayerVolumesComponent>
class RadmonTDetectorVolumesWithKeyMarksDecorator
{
public:
RadmonTDetectorVolumesWithKeyMarksDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonTDetectorVolumesWithKeyMarksDecorator();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonTDetectorVolumesWithKeyMarksDecorator();
RadmonTDetectorVolumesWithKeyMarksDecorator(const RadmonTDetectorVolumesWithKeyMarksDecorator & copy);
RadmonTDetectorVolumesWithKeyMarksDecorator & operator=(const RadmonTDetectorVolumesWithKeyMarksDecorator & copy);
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
LayerVolumesComponent component;
G4VisAttributes * visAttributes;
G4VSolid * box;
G4VSolid * tub;
G4RotationMatrix identity;
RadmonDetectorLayerVolumeItemIntersection intersection;
};
// Inline implementations
#include "RadmonTDetectorVolumesWithKeyMarksDecorator.icc"
#endif /* RADMONTDETECTORVOLUMESWITHKEYMARKSDECORATOR_HH */
@@ -0,0 +1,367 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithKeyMarksDecorator.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithKeyMarksDecorator.icc,v 1.1.2.2 2006/06/29 16:12:38 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORVOLUMESWITHKEYMARKSDECORATOR_HH
#error "RadmonTDetectorVolumesWithKeyMarksDecorator.icc cannot be included directly. Please use RadmonTDetectorVolumesWithKeyMarksDecorator.hh"
#else /* RADMONTDETECTORVOLUMESWITHKEYMARKSDECORATOR_HH */
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4Tubs.hh"
#include "G4SubtractionSolid.hh"
#include "G4Box.hh"
#include "G4UIcommand.hh"
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithKeyMarksDecorator<LayerVolumesComponent> :: RadmonTDetectorVolumesWithKeyMarksDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
component(constructor),
visAttributes(0),
box(0),
tub(0),
identity(G4RotationMatrix::IDENTITY)
{
}
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithKeyMarksDecorator<LayerVolumesComponent> :: ~RadmonTDetectorVolumesWithKeyMarksDecorator()
{
delete box;
delete tub;
delete visAttributes;
}
template <class LayerVolumesComponent>
RadmonDetectorLayerVolumesList * RadmonTDetectorVolumesWithKeyMarksDecorator<LayerVolumesComponent> :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4int holesAlongWidth(owner->GetAttributeAsInteger("HolesAlongWidth", -1));
if (holesAlongWidth<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: \"HolesAlongWidth\" attribute not defined." << G4endl;
return 0;
}
G4int holesAlongHeight(owner->GetAttributeAsInteger("HolesAlongHeight", -1));
if (holesAlongHeight<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: \"HolesAlongHeight\" attribute not defined." << G4endl;
return 0;
}
if ((holesAlongWidth+holesAlongHeight)<=0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Both \"HolesAlongHeight\" and \"HolesAlongHeight\" attributes are 0." << G4endl;
return 0;
}
G4double holesRadius(owner->GetAttributeAsMeasure("HolesRadius", "Length", -1.));
if (holesRadius<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: \"HolesRadius\" attribute not defined." << G4endl;
return 0;
}
G4double holesStep(owner->GetAttributeAsMeasure("HolesStep", "Length", -1.));
if (holesStep<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: \"HolesStep\" attribute not defined." << G4endl;
return 0;
}
G4double fullHolesStep(holesRadius*2.+holesStep);
if (fullHolesStep*static_cast<G4double>(holesAlongWidth-1)>width || fullHolesStep>width)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Holes parameters does not fit along width." << G4endl;
return 0;
}
if (fullHolesStep*static_cast<G4double>(holesAlongHeight-1)>height || fullHolesStep>height)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Holes parameters does not fit along height." << G4endl;
return 0;
}
G4int markedPin(owner->GetAttributeAsInteger("MarkedPin", 0));
if (markedPin<0 || markedPin>(holesAlongWidth+holesAlongHeight)*2)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Marked pin outside the range." << G4endl;
return 0;
}
G4double markedPinRadius;
G4double markedPinStep;
if (markedPin>0)
{
markedPinRadius=owner->GetAttributeAsMeasure("MarkedPinRadius", "Length", -1.);
if (markedPinRadius<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: \"MarkedPinRadius\" attribute not defined." << G4endl;
return 0;
}
markedPinStep=owner->GetAttributeAsMeasure("MarkedPinStep", "Length", -1.);
if (markedPinStep<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: \"MarkedPinStep\" attribute not defined." << G4endl;
return 0;
}
}
G4double groundWidth(owner->GetAttributeAsMeasure("GroundWidth", "Length", -1.));
if (groundWidth<0)
{
groundWidth=owner->GetAttributeAsDouble("GroundScaleWidth", -1.);
if (groundWidth<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Neither \"GroundWidth\" nor \"GroundScaleWidth\" attributes are defined." << G4endl;
return 0;
}
groundWidth*=width;
}
if (width<groundWidth)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Ground width exceeds layer width." << G4endl;
return 0;
}
G4double groundHeight(owner->GetAttributeAsMeasure("GroundHeight", "Length", -1.));
if (groundHeight<0)
{
groundHeight=owner->GetAttributeAsDouble("GroundScaleHeight", -1.);
if (groundHeight<0)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Neither \"GroundHeight\" nor \"GroundScaleHeight attributes are defined." << G4endl;
return 0;
}
groundHeight*=height;
}
if (height<groundHeight)
{
G4cout << "RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: Ground height exceeds layer height." << G4endl;
return 0;
}
G4Material * material(owner->GetMaterial("GroundMaterial"));
if (!material)
return 0;
visAttributes=owner->AllocateVisAttributes("GroundVisAttributes", material);
RadmonDetectorLayerVolumesList * list(component.GenerateVolumesList());
if (list==0)
return 0;
G4int n(list->GetNItems());
if (n==0)
{
delete list;
return 0;
}
RadmonDetectorLayerVolumeItem * item;
RadmonDetectorLayerVolumeItem * motherItem;
while (n>0)
{
n--;
item=list->GetItem(n);
if (item->GetMotherVolumeItem()==0)
{
motherItem=item;
break;
}
}
if (!motherItem)
G4Exception("RadmonTDetectorVolumesWithKeyMarksDecorator::GenerateVolumesList: No mother volume found.");
intersection.Initialize(motherItem);
G4bool markAlongWidth;
G4ThreeVector offset;
if (markedPin==0)
markAlongWidth=true;
else if (markedPin <= holesAlongWidth*2)
{
markAlongWidth=true;
G4double size((height-groundHeight)/2.-markedPinStep);
box=new G4Box("Mark", holesRadius, size/2., thickness/2.);
tub=new G4Tubs("Hole", 0, markedPinRadius, (thickness/2.)*1.01, 0, 360.*deg);
G4ThreeVector offset2;
offset2.setX(0);
offset2.setY(size/2);
offset2.setZ(0.);
offset.setX((fullHolesStep/2.)*static_cast<G4double>(holesAlongWidth-1)-fullHolesStep*((markedPin-1)/2));
offset.setY(height/2.-size/2-markedPinStep);
offset.setZ(0.);
if (markedPin%2!=1)
{
offset.setY(-offset.getY());
offset2.setY(-offset2.getY());
}
G4VSolid * solid(new G4SubtractionSolid("Mark - Hole", box, tub, &identity, offset2));
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(solid, offset, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Mark");
item->SetMotherVolumeItem(motherItem);
}
else
{
markAlongWidth=false;
G4double size((width-groundWidth)/2.-markedPinStep);
box=new G4Box("Mark", size/2., holesRadius, thickness/2.);
tub=new G4Tubs("Hole", 0, markedPinRadius, (thickness/2.)*1.01, 0, 360.*deg);
G4ThreeVector offset2;
offset2.setX(size/2);
offset2.setY(0);
offset2.setZ(0.);
offset.setX(width/2.-size/2-markedPinStep);
offset.setY((fullHolesStep/2.)*static_cast<G4double>(holesAlongHeight-1)-fullHolesStep*((markedPin-1)/2-holesAlongWidth));
offset.setZ(0.);
if (markedPin%2!=1)
{
offset.setX(-offset.getX());
offset2.setX(-offset2.getX());
}
G4VSolid * solid(new G4SubtractionSolid("Mark - Hole", box, tub, &identity, offset2));
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(solid, offset, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Mark");
item->SetMotherVolumeItem(motherItem);
}
if (markAlongWidth)
{
G4Box * thick(new G4Box("Mark", (width-groundWidth)/4., holesStep/2., thickness/2.));
offset.setX((groundWidth+width)/4.);
offset.setY(0.);
offset.setZ(0.);
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(thick, offset, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Mark");
item->SetMotherVolumeItem(motherItem);
offset.setX(-offset.getX());
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(thick, offset, false, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Mark");
item->SetMotherVolumeItem(motherItem);
}
else
{
G4Box * thick(new G4Box("Mark", holesStep/2., (height-groundHeight)/4., thickness/2.));
offset.setX(0.);
offset.setY((groundHeight-height)/4.);
offset.setZ(0.);
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(thick, offset, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Mark");
item->SetMotherVolumeItem(motherItem);
offset.setY(-offset.getY());
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(thick, offset, false, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Mark");
item->SetMotherVolumeItem(motherItem);
}
return list;
}
#endif /* RADMONTDETECTORVOLUMESWITHKEYMARKSDECORATOR_HH */
@@ -0,0 +1,82 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithPadsDecorator.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithPadsDecorator.hh,v 1.3 2006/06/29 16:12:40 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Decorates with a ground plane
// - Constructor
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORVOLUMESWITHPADSDECORATOR_HH
#define RADMONTDETECTORVOLUMESWITHPADSDECORATOR_HH
// Include files
#include "RadmonDetectorLayerVolumeItemIntersection.hh"
#include "RadmonDetectorPadsData.hh"
#include <stack>
// Forward declaration
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
class G4VSolid;
template <class LayerVolumesComponent>
class RadmonTDetectorVolumesWithPadsDecorator
{
public:
RadmonTDetectorVolumesWithPadsDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonTDetectorVolumesWithPadsDecorator();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonTDetectorVolumesWithPadsDecorator();
RadmonTDetectorVolumesWithPadsDecorator(const RadmonTDetectorVolumesWithPadsDecorator & copy);
RadmonTDetectorVolumesWithPadsDecorator & operator=(const RadmonTDetectorVolumesWithPadsDecorator & copy);
// Private datatypes
typedef std::stack<G4VisAttributes *> AttributesStack;
typedef std::list<RadmonDetectorPadsData> PadsDataList;
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
LayerVolumesComponent component;
RadmonDetectorLayerVolumeItemIntersection intersection;
AttributesStack attributesStack;
PadsDataList padsDataList;
};
// Inline implementations
#include "RadmonTDetectorVolumesWithPadsDecorator.icc"
#endif /* RADMONTDETECTORVOLUMESWITHPADSDECORATOR_HH */
@@ -0,0 +1,204 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithPadsDecorator.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithPadsDecorator.icc,v 1.1.2.2 2006/06/29 16:12:42 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORVOLUMESWITHPADSDECORATOR_HH
#error "RadmonTDetectorVolumesWithPadsDecorator.icc cannot be included directly. Please use RadmonTDetectorVolumesWithPadsDecorator.hh"
#else /* RADMONTDETECTORVOLUMESWITHPADSDECORATOR_HH */
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4Box.hh"
#include "G4UIcommand.hh"
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithPadsDecorator<LayerVolumesComponent> :: RadmonTDetectorVolumesWithPadsDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
component(constructor)
{
}
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithPadsDecorator<LayerVolumesComponent> :: ~RadmonTDetectorVolumesWithPadsDecorator()
{
while(!attributesStack.empty())
{
delete attributesStack.top();
attributesStack.pop();
}
}
template <class LayerVolumesComponent>
RadmonDetectorLayerVolumesList * RadmonTDetectorVolumesWithPadsDecorator<LayerVolumesComponent> :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4int padIndex(0);
G4String padIndexStr;
for(;;)
{
padIndex++;
padIndexStr=G4UIcommand::ConvertToString(padIndex);
if (!owner->ExistsAttribute("PadsPosition_"+padIndexStr))
break;
padsDataList.push_back(RadmonDetectorPadsData());
RadmonDetectorPadsData & last(padsDataList.back());
if (!last.ReadPositionsAndRotationsFromString(owner->GetAttribute("PadsPosition_"+padIndexStr, "#")))
{
G4cout << "RadmonTDetectorVolumesWithPadsDecorator::GenerateVolumesList: \"PadsPosition_" << padIndexStr << "\" has an invalid format" << G4endl;
return 0;
}
G4double var(owner->GetAttributeAsMeasure("PadsWidth_"+padIndexStr, "Length", -1.));
if (var<0)
{
G4cout << "RadmonTDetectorVolumesWithPadsDecorator::GenerateVolumesList: \"PadsWidth_" << padIndexStr << "\" not defined." << G4endl;
return 0;
}
last.SetWidth(var);
var=owner->GetAttributeAsMeasure("PadsHeight_"+padIndexStr, "Length", -1.);
if (var<0)
{
G4cout << "RadmonTDetectorVolumesWithPadsDecorator::GenerateVolumesList: \"PadsHeight_" << padIndexStr << "\" not defined." << G4endl;
return 0;
}
last.SetHeight(var);
G4Material * material(owner->GetMaterial("PadsMaterial_"+padIndexStr));
if (!material)
return 0;
last.SetMaterial(material);
}
if (padIndex<=1)
{
G4cout << "RadmonTDetectorVolumesWithPadsDecorator::GenerateVolumesList: No pads defined" << G4endl;
return 0;
}
RadmonDetectorLayerVolumesList * list(component.GenerateVolumesList());
if (list==0)
return 0;
G4int n(list->GetNItems());
if (n==0)
{
delete list;
return 0;
}
RadmonDetectorLayerVolumeItem * item;
RadmonDetectorLayerVolumeItem * motherItem;
while (n>0)
{
n--;
item=list->GetItem(n);
if (item->GetMotherVolumeItem()==0)
{
motherItem=item;
break;
}
}
if (!motherItem)
G4Exception("RadmonTDetectorVolumesWithPadsDecorator::GenerateVolumesList: No mother volume found.");
intersection.Initialize(motherItem);
PadsDataList::const_iterator i(padsDataList.begin());
PadsDataList::const_iterator end(padsDataList.end());
G4VisAttributes * visAttributes;
padIndex=0;
G4int j;
G4String jStr;
G4VSolid * box;
while (i!=end)
{
padIndex++;
padIndexStr=G4UIcommand::ConvertToString(padIndex);
visAttributes=owner->AllocateVisAttributes("PadsVisAttributes_"+padIndexStr, i->GetMaterial());
attributesStack.push(visAttributes);
box=new G4Box("Pad_"+padIndexStr, i->GetWidth()/2., i->GetHeight()/2., thickness/2.);
j=i->GetNPads();
while (j>0)
{
jStr=G4UIcommand::ConvertToString(j);
j--;
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(box, i->GetRotation(j), i->GetPosition(j), j==0, true));
item->SetAttributes(visAttributes);
item->SetMaterial(i->GetMaterial());
item->SetName("Pad_"+padIndexStr+"_"+jStr);
item->SetMotherVolumeItem(motherItem);
}
i++;
}
return list;
}
#endif /* RADMONTDETECTORVOLUMESWITHPADSDECORATOR_HH */
@@ -0,0 +1,74 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithPinsDecorator.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithPinsDecorator.hh,v 1.3 2006/06/29 16:12:44 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Decorates with the pin out
// - Constructor
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORVOLUMESWITHPINSDECORATOR_HH
#define RADMONTDETECTORVOLUMESWITHPINSDECORATOR_HH
// Include files
#include "RadmonDetectorLayerVolumeItemIntersection.hh"
// Forward declaration
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
template <class LayerVolumesComponent>
class RadmonTDetectorVolumesWithPinsDecorator
{
public:
RadmonTDetectorVolumesWithPinsDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonTDetectorVolumesWithPinsDecorator();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonTDetectorVolumesWithPinsDecorator();
RadmonTDetectorVolumesWithPinsDecorator(const RadmonTDetectorVolumesWithPinsDecorator & copy);
RadmonTDetectorVolumesWithPinsDecorator & operator=(const RadmonTDetectorVolumesWithPinsDecorator & copy);
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
LayerVolumesComponent component;
G4VisAttributes * visAttributes;
RadmonDetectorLayerVolumeItemIntersection intersection;
};
// Inline implementations
#include "RadmonTDetectorVolumesWithPinsDecorator.icc"
#endif /* RADMONTDETECTORVOLUMESWITHPINSDECORATOR_HH */
@@ -0,0 +1,335 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithPinsDecorator.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithPinsDecorator.icc,v 1.1.2.2 2006/06/29 16:12:46 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORVOLUMESWITHPINSDECORATOR_HH
#error "RadmonTDetectorVolumesWithPinsDecorator.icc cannot be included directly. Please use RadmonTDetectorVolumesWithPinsDecorator.hh"
#else /* RADMONTDETECTORVOLUMESWITHPINSDECORATOR_HH */
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4Trap.hh"
#include "G4Box.hh"
#include "G4UIcommand.hh"
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithPinsDecorator<LayerVolumesComponent> :: RadmonTDetectorVolumesWithPinsDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
component(constructor),
visAttributes(0)
{
}
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithPinsDecorator<LayerVolumesComponent> :: ~RadmonTDetectorVolumesWithPinsDecorator()
{
delete visAttributes;
}
template <class LayerVolumesComponent>
RadmonDetectorLayerVolumesList * RadmonTDetectorVolumesWithPinsDecorator<LayerVolumesComponent> :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4int holesAlongWidth(owner->GetAttributeAsInteger("HolesAlongWidth", -1));
if (holesAlongWidth<0)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"HolesAlongWidth\" attribute not defined." << G4endl;
return 0;
}
G4int holesAlongHeight(owner->GetAttributeAsInteger("HolesAlongHeight", -1));
if (holesAlongHeight<0)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"HolesAlongHeight\" attribute not defined." << G4endl;
return 0;
}
if ((holesAlongWidth+holesAlongHeight)<=0)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: Both \"HolesAlongHeight\" and \"HolesAlongHeight\" attributes are 0." << G4endl;
return 0;
}
G4double holesRadius(owner->GetAttributeAsMeasure("HolesRadius", "Length", -1.));
if (holesRadius<0)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"HolesRadius\" attribute not defined." << G4endl;
return 0;
}
G4double pinLength(owner->GetAttributeAsMeasure("PinLength", "Length", -1.));
if (pinLength<0)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"PinLength\" attribute not defined." << G4endl;
return 0;
}
if (pinLength>=width/2 || pinLength>=height/2)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"PinLength\" exceeds half width or height." << G4endl;
return 0;
}
G4double holesStep(owner->GetAttributeAsMeasure("HolesStep", "Length", -1.));
if (holesStep<0)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"HolesStep\" attribute not defined." << G4endl;
return 0;
}
G4double fullHolesStep(holesRadius*2.+holesStep);
if (fullHolesStep*static_cast<G4double>(holesAlongWidth-1)>width || fullHolesStep>width)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: Holes parameters does not fit along width." << G4endl;
return 0;
}
if (fullHolesStep*static_cast<G4double>(holesAlongHeight-1)>height || fullHolesStep>height)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: Holes parameters does not fit along height." << G4endl;
return 0;
}
G4int markedPin(owner->GetAttributeAsInteger("MarkedPin", 0));
if (markedPin<0 || markedPin>(holesAlongWidth+holesAlongHeight)*2)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: Marked pin outside the range." << G4endl;
return 0;
}
G4double markedPinLength(0.);
if (markedPin>0)
{
markedPinLength=owner->GetAttributeAsMeasure("MarkedPinLength", "Length", -1.);
if (markedPinLength<0.)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"MarkedPinLength\" attribute not defined." << G4endl;
return 0;
}
if (markedPinLength<=pinLength)
{
G4cout << "RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: \"MarkedPinLength\" <= \"PinLength\"." << G4endl;
return 0;
}
}
G4Material * material(owner->GetMaterial("PinsMaterial"));
if (!material)
return 0;
visAttributes=owner->AllocateVisAttributes("PinsVisAttributes", material);
RadmonDetectorLayerVolumesList * list(component.GenerateVolumesList());
if (list==0)
return 0;
G4int n(list->GetNItems());
if (n==0)
{
delete list;
return 0;
}
RadmonDetectorLayerVolumeItem * item;
RadmonDetectorLayerVolumeItem * motherItem;
while (n>0)
{
n--;
item=list->GetItem(n);
if (item->GetMotherVolumeItem()==0)
{
motherItem=item;
break;
}
}
if (!motherItem)
G4Exception("RadmonTDetectorVolumesWithPinsDecorator::GenerateVolumesList: No mother volume found.");
intersection.Initialize(motherItem);
G4Box * singlePin(new G4Box("SinglePin", holesRadius, pinLength/2., thickness/2.));
G4ThreeVector offset;
offset.setX((fullHolesStep/2.)*static_cast<G4double>(holesAlongWidth-1));
offset.setY(height/2.-pinLength/2.);
offset.setZ(0.);
G4int i(holesAlongWidth);
G4int index(0);
G4String indexStr;
const G4double heightFraction(.999);
const G4double pDx2(holesRadius);
const G4double pDx1(pDx2*(1.-heightFraction));
const G4double pDy1((markedPinLength-pinLength)*heightFraction/2.);
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(singlePin, offset, index==1, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Pin"+indexStr);
item->SetMotherVolumeItem(motherItem);
if (index==markedPin)
{
G4Trap * trap;
G4ThreeVector offset2(offset);
if (offset2.getY()<0)
{
offset2.setY(offset2.getY()+pDy1+pinLength/2);
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, pDy1, pDx2, pDx1, 0*deg,
// pDy2 pDx3 pDx4 pAlp2
pDy1, pDx2, pDx1, 0*deg);
}
else
{
offset2.setY(offset2.getY()-pDy1-pinLength/2);
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, pDy1, pDx1, pDx2, 0*deg,
// pDy2 pDx3 pDx4 pAlp2
pDy1, pDx1, pDx2, 0*deg);
}
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(trap, offset2, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("MarkedPin");
item->SetMotherVolumeItem(motherItem);
}
offset.setY(-offset.getY());
if (offset.getY()>=0)
{
offset.setX(offset.getX()-fullHolesStep);
i--;
}
}
offset.setX(width/2.-pinLength/2.);
offset.setY((fullHolesStep/2.)*static_cast<G4double>(holesAlongHeight-1));
i=holesAlongHeight;
G4RotationMatrix rotation(G4RotationMatrix::IDENTITY);
rotation.setDelta(90*deg);
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(singlePin, rotation, offset, index==1, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Pin"+indexStr);
item->SetMotherVolumeItem(motherItem);
if (index==markedPin)
{
G4Trap * trap;
G4ThreeVector offset2(offset);
if (offset2.getX()<0)
{
offset2.setX(offset2.getX()+pDy1+pinLength/2);
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, pDy1, pDx2, pDx1, 0*deg,
// pDy2 pDx3 pDx4 pAlp2
pDy1, pDx2, pDx1, 0*deg);
}
else
{
offset2.setX(offset2.getX()-pDy1-pinLength/2);
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, pDy1, pDx1, pDx2, 0*deg,
// pDy2 pDx3 pDx4 pAlp2
pDy1, pDx1, pDx2, 0*deg);
}
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(trap, rotation, offset2, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("MarkedPin");
item->SetMotherVolumeItem(motherItem);
}
offset.setX(-offset.getX());
if (offset.getX()>=0)
{
offset.setY(offset.getY()-fullHolesStep);
i--;
}
}
return list;
}
#endif /* RADMONTDETECTORVOLUMESWITHPINSDECORATOR_HH */
@@ -0,0 +1,75 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithTracksDecorator.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithTracksDecorator.hh,v 1.3 2006/06/29 16:12:48 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Decorates with tracks according to the pin-out
// - Constructor
// - Destructor
// - RadmonDetectorLayerVolumesList * GenerateVolumesList(void)
//
#ifndef RADMONTDETECTORVOLUMESWITHTRACKSDECORATOR_HH
#define RADMONTDETECTORVOLUMESWITHTRACKSDECORATOR_HH
// Include files
#include "RadmonDetectorLayerVolumeItemIntersection.hh"
// Forward declaration
class RadmonVDetectorLabelledEntityConstructor;
class RadmonDetectorLayerVolumesList;
class G4VSolid;
template <class LayerVolumesComponent>
class RadmonTDetectorVolumesWithTracksDecorator
{
public:
RadmonTDetectorVolumesWithTracksDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor);
~RadmonTDetectorVolumesWithTracksDecorator();
RadmonDetectorLayerVolumesList * GenerateVolumesList(void);
private:
// Hidden constructors and operators
RadmonTDetectorVolumesWithTracksDecorator();
RadmonTDetectorVolumesWithTracksDecorator(const RadmonTDetectorVolumesWithTracksDecorator & copy);
RadmonTDetectorVolumesWithTracksDecorator & operator=(const RadmonTDetectorVolumesWithTracksDecorator & copy);
// Private attributes
const RadmonVDetectorLabelledEntityConstructor * owner;
LayerVolumesComponent component;
G4VisAttributes * visAttributes;
RadmonDetectorLayerVolumeItemIntersection intersection;
};
// Inline implementations
#include "RadmonTDetectorVolumesWithTracksDecorator.icc"
#endif /* RADMONTDETECTORVOLUMESWITHTRACKSDECORATOR_HH */
@@ -0,0 +1,264 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonTDetectorVolumesWithTracksDecorator.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonTDetectorVolumesWithTracksDecorator.icc,v 1.1.2.2 2006/06/29 16:12:50 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONTDETECTORVOLUMESWITHTRACKSDECORATOR_HH
#error "RadmonTDetectorVolumesWithTracksDecorator.icc cannot be included directly. Please use RadmonTDetectorVolumesWithTracksDecorator.hh"
#else /* RADMONTDETECTORVOLUMESWITHTRACKSDECORATOR_HH */
// Include files
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4Trap.hh"
#include "G4UIcommand.hh"
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithTracksDecorator<LayerVolumesComponent> :: RadmonTDetectorVolumesWithTracksDecorator(const RadmonVDetectorLabelledEntityConstructor * constructor)
:
owner(constructor),
component(constructor),
visAttributes(0)
{
}
template <class LayerVolumesComponent>
RadmonTDetectorVolumesWithTracksDecorator<LayerVolumesComponent> :: ~RadmonTDetectorVolumesWithTracksDecorator()
{
delete visAttributes;
}
template <class LayerVolumesComponent>
RadmonDetectorLayerVolumesList * RadmonTDetectorVolumesWithTracksDecorator<LayerVolumesComponent> :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4int holesAlongWidth(owner->GetAttributeAsInteger("HolesAlongWidth", -1));
if (holesAlongWidth<0)
{
G4cout << "RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: \"HolesAlongWidth\" attribute not defined." << G4endl;
return 0;
}
G4int holesAlongHeight(owner->GetAttributeAsInteger("HolesAlongHeight", -1));
if (holesAlongHeight<0)
{
G4cout << "RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: \"HolesAlongHeight\" attribute not defined." << G4endl;
return 0;
}
if ((holesAlongWidth+holesAlongHeight)<=0)
{
G4cout << "RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: Both \"HolesAlongHeight\" and \"HolesAlongHeight\" attributes are 0." << G4endl;
return 0;
}
G4double holesRadius(owner->GetAttributeAsMeasure("HolesRadius", "Length", -1.));
if (holesRadius<0)
{
G4cout << "RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: \"HolesRadius\" attribute not defined." << G4endl;
return 0;
}
G4double holesStep(owner->GetAttributeAsMeasure("HolesStep", "Length", -1.));
if (holesStep<0)
{
G4cout << "RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: \"HolesStep\" attribute not defined." << G4endl;
return 0;
}
G4double fullHolesStep(holesRadius*2.+holesStep);
if (fullHolesStep*static_cast<G4double>(holesAlongWidth-1)>width || fullHolesStep>width)
{
G4cout << "RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: Holes parameters does not fit along width." << G4endl;
return 0;
}
if (fullHolesStep*static_cast<G4double>(holesAlongHeight-1)>height || fullHolesStep>height)
{
G4cout << "RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: Holes parameters does not fit along height." << G4endl;
return 0;
}
G4Material * material(owner->GetMaterial("TracksMaterial"));
if (!material)
return 0;
visAttributes=owner->AllocateVisAttributes("TracksVisAttributes", material);
RadmonDetectorLayerVolumesList * list(component.GenerateVolumesList());
if (list==0)
return 0;
G4int n(list->GetNItems());
if (n==0)
{
delete list;
return 0;
}
RadmonDetectorLayerVolumeItem * item;
RadmonDetectorLayerVolumeItem * motherItem;
while (n>0)
{
n--;
item=list->GetItem(n);
if (item->GetMotherVolumeItem()==0)
{
motherItem=item;
break;
}
}
if (!motherItem)
G4Exception("RadmonTDetectorVolumesWithTracksDecorator::GenerateVolumesList: No mother volume found.");
intersection.Initialize(motherItem);
const G4double heightFraction(.999);
G4int index(0);
G4String indexStr;
fullHolesStep/=2;
G4double angle;
const G4double pDx2(holesRadius);
const G4double pDx1(pDx2*(1.-heightFraction));
G4Trap * trap;
G4ThreeVector offset((fullHolesStep/2.)*static_cast<G4double>(holesAlongWidth-1), height/4.*(2.-heightFraction), 0);
G4int i(holesAlongWidth);
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
if (offset.getY()>=0)
{
angle=90.*deg-offset.getPhi();
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, height/4.*heightFraction, pDx1, pDx2, angle,
// pDy2 pDx3 pDx4 pAlp2
height/4.*heightFraction, pDx1, pDx2, angle);
}
else
{
angle=-90*deg-offset.getPhi();
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, height/4.*heightFraction, pDx2, pDx1, angle,
// pDy2 pDx3 pDx4 pAlp2
height/4.*heightFraction, pDx2, pDx1, angle);
}
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(trap, offset, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Track"+indexStr);
item->SetMotherVolumeItem(motherItem);
offset.setY(-offset.getY());
if (offset.getY()>=0)
{
offset.setX(offset.getX()-fullHolesStep);
i--;
}
}
G4RotationMatrix rotation(G4RotationMatrix::IDENTITY);
rotation.setDelta(90*deg);
offset.setX(width/4.*(2.-heightFraction));
offset.setY((fullHolesStep/2.)*static_cast<G4double>(holesAlongHeight-1));
i=holesAlongHeight;
while (i>0)
{
index++;
indexStr=G4UIcommand::ConvertToString(index);
if (offset.getX()>=0)
{
angle=-offset.getPhi();
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, width/4.*heightFraction, pDx1, pDx2, angle,
// pDy2 pDx3 pDx4 pAlp2
width/4.*heightFraction, pDx1, pDx2, angle);
}
else
{
angle=-offset.getPhi();
// pDz pTheta pPhi pDy1 pDx1 pDx2 pAlp1
trap=new G4Trap("Track"+indexStr, thickness/2., 0.*deg, 0.*deg, width/4.*heightFraction, pDx2, pDx1, angle,
// pDy2 pDx3 pDx4 pAlp2
width/4.*heightFraction, pDx2, pDx1, angle);
}
item=list->AppendItem();
item->SetSolid(intersection.ApplyTo(trap, rotation, offset, true, true));
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetName("Track"+indexStr);
item->SetMotherVolumeItem(motherItem);
offset.setX(-offset.getX());
if (offset.getX()>=0)
{
offset.setY(offset.getY()-fullHolesStep);
i--;
}
}
return list;
}
#endif /* RADMONTDETECTORVOLUMESWITHTRACKSDECORATOR_HH */
@@ -0,0 +1,62 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorEntitiesConstructorsFactory.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorEntitiesConstructorsFactory.hh,v 1.4 2006/06/29 16:12:52 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Abstract class of a factory of detector-entity constructor
//
#ifndef RADMONVDETECTORENTITIESCONSTRUCTORSFACTORY_HH
#define RADMONVDETECTORENTITIESCONSTRUCTORSFACTORY_HH
// Forward declaration
class RadmonVDetectorEntityConstructor;
class G4String;
class RadmonVDetectorEntitiesConstructorsFactory
{
public:
inline virtual ~RadmonVDetectorEntitiesConstructorsFactory();
virtual RadmonVDetectorEntityConstructor * CreateEntityConstructor(const G4String & entityName) = 0;
protected:
inline RadmonVDetectorEntitiesConstructorsFactory();
private:
// Hidden constructors and operators
RadmonVDetectorEntitiesConstructorsFactory(const RadmonVDetectorEntitiesConstructorsFactory & copy);
RadmonVDetectorEntitiesConstructorsFactory & operator=(const RadmonVDetectorEntitiesConstructorsFactory & copy);
};
// Inline implementations
#include "RadmonVDetectorEntitiesConstructorsFactory.icc"
#endif /* RADMONVDETECTORENTITIESCONSTRUCTORSFACTORY_HH */
@@ -0,0 +1,47 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorEntitiesConstructorsFactory.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorEntitiesConstructorsFactory.icc,v 1.3 2006/06/29 16:13:10 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONVDETECTORENTITIESCONSTRUCTORSFACTORY_HH
#error "RadmonVDetectorEntitiesConstructorsFactory.icc cannot be included directly. Please use RadmonVDetectorEntitiesConstructorsFactory.hh"
#else /* RADMONVDETECTORENTITIESCONSTRUCTORSFACTORY_HH */
inline RadmonVDetectorEntitiesConstructorsFactory :: ~RadmonVDetectorEntitiesConstructorsFactory()
{
}
inline RadmonVDetectorEntitiesConstructorsFactory :: RadmonVDetectorEntitiesConstructorsFactory()
{
}
#endif /* RADMONVDETECTORENTITIESCONSTRUCTORSFACTORY_HH */
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorEntityConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorEntityConstructor.hh,v 1.4 2006/06/29 16:13:12 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Abstract class of a detector-entity constructor
//
#ifndef RADMONVDETECTORENTITYCONSTRUCTOR_HH
#define RADMONVDETECTORENTITYCONSTRUCTOR_HH
// Forward declarations
class G4LogicalVolume;
class G4String;
class RadmonVDetectorEntityConstructor
{
public:
inline virtual ~RadmonVDetectorEntityConstructor();
virtual void SetEntityAttribute(const G4String & attributeName, const G4String &value) = 0;
virtual G4LogicalVolume * ConstructLogicalVolume() = 0;
protected:
inline RadmonVDetectorEntityConstructor();
private:
// Hidden constructors and operators
RadmonVDetectorEntityConstructor(const RadmonVDetectorEntityConstructor & copy);
RadmonVDetectorEntityConstructor & operator=(const RadmonVDetectorEntityConstructor & copy);
};
// Inline implementations
#include "RadmonVDetectorEntityConstructor.icc"
#endif /* RADMONVDETECTORENTITYCONSTRUCTOR_HH */
@@ -0,0 +1,47 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorEntityConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorEntityConstructor.icc,v 1.3 2006/06/29 16:13:14 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONVDETECTORENTITYCONSTRUCTOR_HH
#error "RadmonVDetectorEntityConstructor.icc cannot be included directly. Please use RadmonVDetectorEntityConstructor.hh"
#else /* RADMONVDETECTORENTITYCONSTRUCTOR_HH */
inline RadmonVDetectorEntityConstructor :: RadmonVDetectorEntityConstructor()
{
}
inline RadmonVDetectorEntityConstructor :: ~RadmonVDetectorEntityConstructor()
{
}
#endif /* RADMONVDETECTORENTITYCONSTRUCTOR_HH */
@@ -0,0 +1,81 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorLabelledEntityConstructor.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorLabelledEntityConstructor.hh,v 1.8 2006/06/29 16:13:16 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Abstract class of a detector-entity constructor with label
// and attributes
//
#ifndef RADMONVDETECTORLABELLEDENTITYCONSTRUCTOR_HH
#define RADMONVDETECTORLABELLEDENTITYCONSTRUCTOR_HH
// Include files
#include "RadmonLayoutEntityWithAttributes.hh"
#include "RadmonVDetectorEntityConstructor.hh"
// Forward declaration
class G4Material;
class G4VisAttributes;
class G4VSensitiveDetector;
class RadmonVDetectorLabelledEntityConstructor : public RadmonVDetectorEntityConstructor, public RadmonLayoutEntityWithAttributes
{
public:
inline virtual ~RadmonVDetectorLabelledEntityConstructor();
inline const G4String & GetLabel(void) const;
inline virtual void SetEntityAttribute(const G4String & attributeName, const G4String & value);
virtual RadmonVDetectorLabelledEntityConstructor * New(void) const = 0;
G4double GetWidth(void) const;
G4double GetHeight(void) const;
G4double GetThickness(void) const;
G4Material * GetMaterial(const G4String & attributeName) const;
G4VisAttributes * AllocateVisAttributes(const G4String & attributeName, const G4Material * material) const;
G4VSensitiveDetector * AllocateSensitiveDetector(const G4String & attributeName, const G4String & defaultAttrbuteValue) const;
protected:
inline RadmonVDetectorLabelledEntityConstructor(const G4String & label);
private:
// Hidden constructors and operators
RadmonVDetectorLabelledEntityConstructor(const RadmonVDetectorLabelledEntityConstructor & copy);
RadmonVDetectorLabelledEntityConstructor & operator=(const RadmonVDetectorLabelledEntityConstructor & copy);
// Private attributes
G4String entityLabel;
};
#include "RadmonVDetectorLabelledEntityConstructor.icc"
#endif /* RADMONVDETECTORLABELLEDENTITYCONSTRUCTOR_HH */
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorLabelledEntityConstructor.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorLabelledEntityConstructor.icc,v 1.3 2006/06/29 16:13:18 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONVDETECTORLABELLEDENTITYCONSTRUCTOR_HH
#error "RadmonVDetectorLabelledEntityConstructor.icc cannot be included directly. Please use RadmonVDetectorLabelledEntityConstructor.hh"
#else /* RADMONVDETECTORLABELLEDENTITYCONSTRUCTOR_HH */
inline RadmonVDetectorLabelledEntityConstructor :: ~RadmonVDetectorLabelledEntityConstructor()
{
}
inline const G4String & RadmonVDetectorLabelledEntityConstructor :: GetLabel(void) const
{
return entityLabel;
}
inline void RadmonVDetectorLabelledEntityConstructor :: SetEntityAttribute(const G4String & attributeName, const G4String & value)
{
SetAttribute(attributeName, value);
}
inline RadmonVDetectorLabelledEntityConstructor :: RadmonVDetectorLabelledEntityConstructor(const G4String & label)
:
entityLabel(label)
{
}
#endif /* RADMONVDETECTORLABELLEDENTITYCONSTRUCTOR_HH */
@@ -0,0 +1,100 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorLayerVolumeItemOperation.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorLayerVolumeItemOperation.hh,v 1.3 2006/06/29 16:13:20 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Operates on solids
//
#ifndef RADMONVDETECTORLAYERVOLUMEITEMOPERATION_HH
#define RADMONVDETECTORLAYERVOLUMEITEMOPERATION_HH
// Include files
#include "G4RotationMatrix.hh"
#include "G4ThreeVector.hh"
#include <stack>
// Forward declarations
class RadmonDetectorLayerVolumeItem;
class G4VSolid;
class RadmonVDetectorLayerVolumeItemOperation
{
public:
void Initialize(G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid=true);
void Initialize(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid=true);
void Initialize(G4VSolid * solid, G4bool ownSolid=true);
void Initialize(const RadmonDetectorLayerVolumeItem * item);
G4VSolid * ApplyTo(G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid=true, G4bool ownResult=true);
inline G4VSolid * ApplyTo(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid=true, G4bool ownResult=true);
inline G4VSolid * ApplyTo(G4VSolid * solid, G4bool ownSolid=true, G4bool ownResult=true);
void ApplyTo(RadmonDetectorLayerVolumeItem * item, G4bool ownResult=true);
protected:
inline RadmonVDetectorLayerVolumeItemOperation();
RadmonVDetectorLayerVolumeItemOperation(G4VSolid * solid, const G4RotationMatrix & rotation, const G4ThreeVector & position, G4bool ownSolid=true);
RadmonVDetectorLayerVolumeItemOperation(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid=true);
RadmonVDetectorLayerVolumeItemOperation(G4VSolid * solid, G4bool ownSolid=true);
RadmonVDetectorLayerVolumeItemOperation(const RadmonDetectorLayerVolumeItem * item);
~RadmonVDetectorLayerVolumeItemOperation();
virtual G4VSolid * Operate(G4VSolid * left, G4VSolid * right, G4RotationMatrix * relativeRotation, const G4ThreeVector & relativePosition) = 0;
inline G4RotationMatrix * AllocateMatrix();
inline void OwnSolid(G4VSolid * solid);
private:
inline void Validate();
void Merge(const G4RotationMatrix & rightRotation, const G4ThreeVector & rightPosition, G4RotationMatrix & relativeRotation, G4ThreeVector & relativePosition) const;
void Absolute(const RadmonDetectorLayerVolumeItem * item, G4RotationMatrix & rotation, G4ThreeVector & position) const;
// Hidden constructors and operators
RadmonVDetectorLayerVolumeItemOperation(const RadmonVDetectorLayerVolumeItemOperation & copy);
RadmonVDetectorLayerVolumeItemOperation & operator=(const RadmonVDetectorLayerVolumeItemOperation & copy);
// Private data types
typedef std::stack<G4VSolid *> OwnedSolids;
typedef std::stack<G4RotationMatrix> OwnedMatrices;
// Private attributes
OwnedSolids ownedSolids;
OwnedMatrices ownedMatrices;
G4RotationMatrix leftRotation;
G4RotationMatrix invLeftRotation;
G4ThreeVector leftPosition;
G4VSolid * leftSolid;
};
// Inline implementations
#include "RadmonVDetectorLayerVolumeItemOperation.icc"
#endif /* RADMONVDETECTORLAYERVOLUMEITEMOPERATION_HH */
@@ -0,0 +1,76 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorLayerVolumeItemOperation.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorLayerVolumeItemOperation.icc,v 1.3 2006/06/29 16:13:22 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONVDETECTORLAYERVOLUMEITEMOPERATION_HH
#error "RadmonVDetectorLayerVolumeItemOperation.icc cannot be included directly. Please use RadmonVDetectorLayerVolumeItemOperation.hh"
#else /* RADMONVDETECTORLAYERVOLUMEITEMOPERATION_HH */
inline RadmonVDetectorLayerVolumeItemOperation :: RadmonVDetectorLayerVolumeItemOperation()
:
leftSolid(0)
{
}
inline G4VSolid * RadmonVDetectorLayerVolumeItemOperation :: ApplyTo(G4VSolid * solid, const G4ThreeVector & position, G4bool ownSolid, G4bool ownResult)
{
return ApplyTo(solid, G4RotationMatrix::IDENTITY, position, ownSolid, ownResult);
}
inline G4VSolid * RadmonVDetectorLayerVolumeItemOperation :: ApplyTo(G4VSolid * solid, G4bool ownSolid, G4bool ownResult)
{
return ApplyTo(solid, G4ThreeVector(0, 0, 0), ownSolid, ownResult);
}
inline G4RotationMatrix * RadmonVDetectorLayerVolumeItemOperation :: AllocateMatrix()
{
ownedMatrices.push(G4RotationMatrix::IDENTITY);
return &ownedMatrices.top();
}
inline void RadmonVDetectorLayerVolumeItemOperation :: OwnSolid(G4VSolid * solid)
{
ownedSolids.push(solid);
}
#endif /* RADMONVDETECTORLAYERVOLUMEITEMOPERATION_HH */
@@ -0,0 +1,118 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorLayout.hh
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorLayout.hh,v 1.7 2006/06/29 16:13:24 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Description: Abstract class to keep track of the configured detector
// layout
//
#ifndef RADMONVDETECTORLAYOUT_HH
#define RADMONVDETECTORLAYOUT_HH
// Include files
#include "RadmonVLayoutSubject.hh"
#include "globals.hh"
#include "G4ThreeVector.hh"
#include "G4RotationMatrix.hh"
class RadmonVDetectorLayout : public RadmonVLayoutSubject
{
public:
virtual void EnableEnvironment(void) = 0;
virtual void DisableEnvironment(void) = 0;
virtual G4bool IsEnabledEnvironment(void) const = 0;
virtual void SetEnvironmentType(const G4String & type) = 0;
virtual const G4String & GetEnvironmentType() const = 0;
virtual G4int GetEnvironmentNAttributes(void) const = 0;
virtual const G4String & GetEnvironmentAttributeName(G4int index) const = 0;
virtual void SetEnvironmentAttribute(const G4String & attributeName, const G4String & attributeValue) = 0;
virtual const G4String GetEnvironmentAttribute(const G4String & attributeName, const G4String & defaultAttributeValue) const = 0;
virtual void ClearEnvironmentAttribute(const G4String & attributeName) = 0;
virtual void CreateMultilayer(const G4String & multilayerLabel) = 0;
virtual void RemoveMultilayer(const G4String & multilayerLabel) = 0;
virtual void SetMultilayerWidth(const G4String & multilayerLabel, G4double width) = 0;
virtual G4double GetMultilayerWidth(const G4String & multilayerLabel) const = 0;
virtual void SetMultilayerHeight(const G4String & multilayerLabel, G4double height) = 0;
virtual G4double GetMultilayerHeight(const G4String & multilayerLabel) const = 0;
virtual G4double GetMultilayerTotalThickness(const G4String & multilayerLabel) const = 0;
virtual void AppendLayerToMultilayer(const G4String & multilayerLabel, const G4String & layerLabel) = 0;
virtual void RemoveLayerFromMultilayer(const G4String & multilayerLabel, const G4String & layerLabel) = 0;
virtual void RemoveAllLayersFromMultilayer(const G4String & multilayerLabel) = 0;
virtual G4int GetMultilayerNLayers(const G4String & multilayerLabel) const = 0;
virtual const G4String & GetMultilayerLayerLabel(const G4String & multilayerLabel, G4int index) const = 0;
virtual void SetLayerThickness(const G4String & multilayerLabel, const G4String & layerLabel, G4double thickness) = 0;
virtual G4double GetLayerThickness(const G4String & multilayerLabel, const G4String & layerLabel) const = 0;
virtual void SetLayerType(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & type) = 0;
virtual const G4String & GetLayerType(const G4String & multilayerLabel, const G4String & layerLabel) const = 0;
virtual G4int GetLayerNAttributes(const G4String & multilayerLabel, const G4String & layerLabel) const = 0;
virtual const G4String & GetLayerAttributeName(const G4String & multilayerLabel, const G4String & layerLabel, G4int index) const = 0;
virtual void SetLayerAttribute(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & attributeName, const G4String & attributeValue) = 0;
virtual const G4String GetLayerAttribute(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & attributeName, const G4String & defaultAttributeValue) const = 0;
virtual void ClearLayerAttribute(const G4String & multilayerLabel, const G4String & layerLabel, const G4String & attributeName) = 0;
virtual void CreatePlacement(const G4String & placementLabel, const G4String & multilayerName) = 0;
virtual G4int GetNPlacements() const = 0;
virtual const G4String & GetPlacementLabel(G4int index) const = 0;
virtual void RemovePlacement(const G4String & placementLabel) = 0;
virtual const G4String & GetPlacementMultilayerType(const G4String & placementLabel) const = 0;
virtual void SetPlacementPosition(const G4String & placementLabel, const G4ThreeVector & position) = 0;
virtual const G4ThreeVector & GetPlacementPosition(const G4String & placementLabel) const = 0;
virtual void SetPlacementPosition(const G4String & placementLabel, const G4String & originLabel, const G4ThreeVector & offset) = 0;
virtual void SetPlacementRotation(const G4String & placementLabel, const G4RotationMatrix & rotation) = 0;
virtual const G4RotationMatrix & GetPlacementRotation(const G4String & placementLabel) const = 0;
virtual void SetPlacementRotation(const G4String & placementLabel, const G4String & originLabel, const G4RotationMatrix & relativeRotation) = 0;
virtual void DumpLayout(std::ostream & out) const = 0;
virtual G4bool Load(std::istream & in) = 0;
virtual G4bool Save(std::ostream & out) const = 0;
protected:
inline RadmonVDetectorLayout();
inline ~RadmonVDetectorLayout();
private:
// Hidden constructors and operators
RadmonVDetectorLayout(const RadmonVDetectorLayout & copy);
RadmonVDetectorLayout & operator=(const RadmonVDetectorLayout & copy);
};
// Inline implementations
#include "RadmonVDetectorLayout.icc"
#endif /* RADMONVDETECTORLAYOUT_HH */
@@ -0,0 +1,47 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonVDetectorLayout.icc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonVDetectorLayout.icc,v 1.3 2006/06/29 16:13:26 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
#ifndef RADMONVDETECTORLAYOUT_HH
#error "RadmonVDetectorLayout.icc cannot be included directly. Please use RadmonVDetectorLayout.hh"
#else /* RADMONVDETECTORLAYOUT_HH */
inline RadmonVDetectorLayout :: RadmonVDetectorLayout()
{
}
inline RadmonVDetectorLayout :: ~RadmonVDetectorLayout()
{
}
#endif /* RADMONVDETECTORLAYOUT_HH */
@@ -0,0 +1,328 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorConstruction.cc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorConstruction.cc,v 1.4.2.2 2006/06/29 16:13:28 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Include files
#include "RadmonDetectorConstruction.hh"
#include "RadmonVDetectorLayout.hh"
#include "RadmonVDetectorEntityConstructor.hh"
#include "RadmonVDetectorEntitiesConstructorsFactory.hh"
#include "RadmonMaterialsManager.hh"
#include "G4RunManager.hh"
#include "G4UIcommand.hh"
#include "G4Sphere.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
RadmonDetectorConstruction :: RadmonDetectorConstruction(RadmonVDetectorLayout * layout, RadmonVDetectorEntitiesConstructorsFactory * factory)
:
detectorLayout(layout),
constructorsFactory(factory),
environmentConstructor(0),
environmentPhysicalVolume(0),
environmentLogicalVolume(0),
environmentSolid(0)
{
if (detectorLayout==0)
G4Exception("RadmonDetectorConstruction::RadmonDetectorConstruction: layout==0.");
if (factory==0)
G4Exception("RadmonDetectorConstruction::RadmonDetectorConstruction: factory==0.");
detectorLayout->AttachObserver(this);
}
RadmonDetectorConstruction :: ~RadmonDetectorConstruction()
{
detectorLayout->DetachObserver(this);
Destruct();
delete constructorsFactory;
}
G4VPhysicalVolume * RadmonDetectorConstruction :: Construct(void)
{
// This method will not change the detector layout
RadmonVDetectorLayout const * const & const_detectorLayout(detectorLayout);
if (const_detectorLayout->IsEnabledEnvironment())
BuildEnvironmentFromType(const_detectorLayout->GetEnvironmentType());
else
BuildEnvironmentSphere();
environmentPhysicalVolume=new G4PVPlacement(0, G4ThreeVector(), "worldPV", environmentLogicalVolume, 0, false, 0);
G4int placement(const_detectorLayout->GetNPlacements());
while (placement>0)
{
placement--;
BuildMultilayer(placement);
}
return environmentPhysicalVolume;
}
void RadmonDetectorConstruction :: OnLayoutChange(void)
{
Destruct();
G4RunManager::GetRunManager()->DefineWorldVolume(Construct(), true);
}
void RadmonDetectorConstruction :: Destruct(void)
{
// Layers destruction
LayerItem item;
while (!layersStack.empty())
{
item=layersStack.top();
environmentLogicalVolume->RemoveDaughter(item.second);
delete item.second;
delete item.first;
layersStack.pop();
}
// Environment destruction
delete environmentPhysicalVolume;
environmentPhysicalVolume=0;
if (environmentConstructor)
{
delete environmentConstructor;
environmentConstructor=0;
}
else
{
delete environmentLogicalVolume;
delete environmentSolid;
environmentSolid=0;
}
environmentLogicalVolume=0;
}
void RadmonDetectorConstruction :: BuildEnvironmentFromType(const G4String & type)
{
environmentConstructor=constructorsFactory->CreateEntityConstructor(type);
if (environmentConstructor==0)
{
G4cout << "RadmonDetectorConstruction::BuildEnvironmentFromType: Environment type \"" << type << "\" not found. Environment ignored." << G4endl;
BuildEnvironmentSphere();
}
// This method will not change the detector layout
RadmonVDetectorLayout const * const & const_detectorLayout(detectorLayout);
G4int n(const_detectorLayout->GetEnvironmentNAttributes());
G4String name;
G4String value;
while (n>0)
{
n--;
name=const_detectorLayout->GetEnvironmentAttributeName(n);
value=const_detectorLayout->GetEnvironmentAttribute(name, G4String());
environmentConstructor->SetEntityAttribute(name, value);
}
environmentLogicalVolume=environmentConstructor->ConstructLogicalVolume();
if (environmentLogicalVolume==0)
{
delete environmentConstructor;
environmentConstructor=0;
G4cout << "RadmonDetectorConstruction::BuildEnvironmentFromType: Environment type \"" << type << "\" not built. Environment ignored." << G4endl;
BuildEnvironmentSphere();
}
}
void RadmonDetectorConstruction :: BuildEnvironmentSphere(void)
{
// This method will not change the detector layout
RadmonVDetectorLayout const * const & const_detectorLayout(detectorLayout);
G4double maxRadius(-0.1);
G4double radius;
G4ThreeVector vect;
G4int placement(const_detectorLayout->GetNPlacements());
G4String placementLabel;
G4String multilayerLabel;
while (placement>0)
{
placement--;
placementLabel=const_detectorLayout->GetPlacementLabel(placement);
multilayerLabel=const_detectorLayout->GetPlacementMultilayerType(placementLabel);
vect.setX(const_detectorLayout->GetMultilayerWidth(multilayerLabel));
vect.setY(const_detectorLayout->GetMultilayerHeight(multilayerLabel));
vect.setZ(const_detectorLayout->GetMultilayerTotalThickness(multilayerLabel));
radius=const_detectorLayout->GetPlacementPosition(placementLabel).getR()+vect.getR()/2.;
if (radius>maxRadius)
maxRadius=radius;
}
if (maxRadius<=0.)
maxRadius=5*m;
G4Material & vacuum(RadmonMaterialsManager::Instance()->GetMaterial("RADMON_VACUUM"));
environmentSolid=new G4Sphere("worldSphere", 0.*mm, maxRadius, 0.*deg, 360.*deg, 0.*deg, 180.*deg);
environmentLogicalVolume=new G4LogicalVolume(environmentSolid, &vacuum, "worldLV", 0, 0, 0);
}
void RadmonDetectorConstruction :: BuildMultilayer(G4int index)
{
// This method will not change the detector layout
RadmonVDetectorLayout const * const & const_detectorLayout(detectorLayout);
G4String placementLabel(const_detectorLayout->GetPlacementLabel(index));
G4String multilayerLabel(const_detectorLayout->GetPlacementMultilayerType(placementLabel));
G4RotationMatrix rotation(const_detectorLayout->GetPlacementRotation(placementLabel));
G4ThreeVector position(const_detectorLayout->GetPlacementPosition(placementLabel));
G4double width(const_detectorLayout->GetMultilayerWidth(multilayerLabel));
if (width<=0.)
return;
G4String widthStr(G4UIcommand::ConvertToString(width/mm)+" mm");
G4double height(const_detectorLayout->GetMultilayerHeight(multilayerLabel));
if (height<=0.)
return;
G4String heightStr(G4UIcommand::ConvertToString(height/mm)+" mm");
G4double z(const_detectorLayout->GetMultilayerTotalThickness(multilayerLabel));
if (z<=0.)
return;
z/=2.;
G4int n(const_detectorLayout->GetMultilayerNLayers(multilayerLabel));
if (n==0)
return;
while (n>0)
{
n--;
G4String layerLabel(const_detectorLayout->GetMultilayerLayerLabel(multilayerLabel, n));
G4String layerType(const_detectorLayout->GetLayerType(multilayerLabel, layerLabel));
G4double layerThickness(const_detectorLayout->GetLayerThickness(multilayerLabel, layerLabel));
if (layerThickness<=0.)
continue;
RadmonVDetectorEntityConstructor * entityConstructor(constructorsFactory->CreateEntityConstructor(layerType));
if (entityConstructor==0)
{
z-=layerThickness;
G4cout << "RadmonDetectorConstruction::BuildMultilayer: Layer type \"" << layerType << "\" not found. Layer ignored." << G4endl;
continue;
}
G4int m(const_detectorLayout->GetLayerNAttributes(multilayerLabel, layerLabel));
G4String name;
G4String value;
while (m>0)
{
m--;
name=const_detectorLayout->GetLayerAttributeName(multilayerLabel, layerLabel, m);
value=const_detectorLayout->GetLayerAttribute(multilayerLabel, layerLabel, name, G4String());
entityConstructor->SetEntityAttribute(name, value);
}
entityConstructor->SetEntityAttribute("_WIDTH", widthStr);
entityConstructor->SetEntityAttribute("_HEIGHT", heightStr);
entityConstructor->SetEntityAttribute("_THICKNESS", G4UIcommand::ConvertToString(layerThickness/mm)+" mm");
G4LogicalVolume * entityLogicalVolume(entityConstructor->ConstructLogicalVolume());
if (entityLogicalVolume==0)
{
delete entityConstructor;
G4cout << "RadmonDetectorConstruction::BuildMultilayer: Layer \"" << layerLabel << "\" from \"" << multilayerLabel << "\" not built. Layer ignored." << G4endl;
z-=layerThickness;
continue;
}
layerThickness/=2.;
z-=layerThickness;
G4ThreeVector layerPosition(rotation.colZ());
layerPosition*=z;
layerPosition+=position;
G4VPhysicalVolume * entityPhysicalVolume(new G4PVPlacement(G4Transform3D(rotation, layerPosition), entityLogicalVolume, placementLabel+"_"+multilayerLabel+"_"+layerLabel, environmentLogicalVolume, false, 0));
z-=layerThickness;
layersStack.push(LayerItem(entityConstructor, entityPhysicalVolume));
}
}
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorEnvironmentLayout.cc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorEnvironmentLayout.cc,v 1.5 2006/06/29 16:13:30 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Include files
#include "RadmonDetectorEnvironmentLayout.hh"
#include "RadmonDumpStyle.hh"
#include <iomanip>
void RadmonDetectorEnvironmentLayout :: DumpLayout(std::ostream & out, const G4String & indent) const
{
if (!enabled)
out << indent << "Environment disabled\n";
else
{
G4int width(RADMONDUMP_INDENT_WIDTH-indent.length());
if (width<0)
width=0;
out << indent << std::setw(width); out.setf(std::ostream::left, std::ostream::adjustfield); out << "Type" << " = \"" << environmentType << "\"\n"
<< indent << "Attributes:\n";
G4String indent2(indent);
indent2.prepend(" ");
DumpAttributesLayout(out, indent2);
}
}
@@ -0,0 +1,84 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorFlatVolumeComponent.cc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorFlatVolumeComponent.cc,v 1.2.2.2 2006/06/29 16:13:32 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Include files
#include "RadmonDetectorFlatVolumeComponent.hh"
#include "RadmonDetectorLayerVolumesList.hh"
#include "RadmonDetectorLayerVolumeItem.hh"
#include "RadmonVDetectorLabelledEntityConstructor.hh"
#include "G4Box.hh"
#include "G4LogicalVolume.hh"
#include "G4VisAttributes.hh"
#include "globals.hh"
RadmonDetectorFlatVolumeComponent :: ~RadmonDetectorFlatVolumeComponent()
{
delete visAttributes;
delete box;
}
RadmonDetectorLayerVolumesList * RadmonDetectorFlatVolumeComponent :: GenerateVolumesList(void)
{
G4double width(owner->GetWidth());
if (width<0)
return 0;
G4double height(owner->GetHeight());
if (height<0)
return 0;
G4double thickness(owner->GetThickness());
if (thickness<0)
return 0;
G4Material * material(owner->GetMaterial("Material"));
if (!material)
return 0;
visAttributes=owner->AllocateVisAttributes("VisAttributes", material);
box=new G4Box("FlatVolume", width/2., height/2., thickness/2.);
RadmonDetectorLayerVolumesList * list=new RadmonDetectorLayerVolumesList;
RadmonDetectorLayerVolumeItem * item=list->AppendItem();
item->SetSolid(box);
item->SetAttributes(visAttributes);
item->SetMaterial(material);
item->SetSensitiveDetector(owner->AllocateSensitiveDetector("SensitiveDetector", ""));
item->SetName("FlatVolume");
return list;
}
@@ -0,0 +1,85 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLabelledEntitiesConstructorsFactory.cc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLabelledEntitiesConstructorsFactory.cc,v 1.2.2.2 2006/06/29 16:13:34 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Include files
#include "RadmonDetectorLabelledEntitiesConstructorsFactory.hh"
#include "RadmonDetectorLabelledEntitiesConstructorsMessenger.hh"
#include "RadmonVDetectorLabelledEntityConstructor.hh"
RadmonDetectorLabelledEntitiesConstructorsFactory :: ~RadmonDetectorLabelledEntitiesConstructorsFactory()
{
EntityConstructorsList::iterator i(entityConstructorsList.begin());
EntityConstructorsList::iterator end(entityConstructorsList.end());
RadmonDetectorLabelledEntitiesConstructorsMessenger * messenger(RadmonDetectorLabelledEntitiesConstructorsMessenger::Instance());
while (i!=end)
{
messenger->RemoveAvailableConstructor((*i)->GetLabel());
delete (*i);
i++;
}
}
RadmonVDetectorEntityConstructor * RadmonDetectorLabelledEntitiesConstructorsFactory :: CreateEntityConstructor(const G4String & entityName)
{
EntityConstructorsList::iterator i(entityConstructorsList.begin());
EntityConstructorsList::iterator end(entityConstructorsList.end());
while (i!=end)
{
if ((*i)->GetLabel()==entityName)
return (*i)->New();
i++;
}
return 0;
}
void RadmonDetectorLabelledEntitiesConstructorsFactory :: AppendLabelledEntityConstructor(RadmonVDetectorLabelledEntityConstructor * constructor)
{
entityConstructorsList.push_back(constructor);
RadmonDetectorLabelledEntitiesConstructorsMessenger * messenger(RadmonDetectorLabelledEntitiesConstructorsMessenger::Instance());
messenger->AddAvailableConstructor(constructor->GetLabel());
}
@@ -0,0 +1,146 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLabelledEntitiesConstructorsMessenger.cc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLabelledEntitiesConstructorsMessenger.cc,v 1.5 2006/06/29 16:13:36 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Messenger commands path
#define COMMANDS_PATH "/radmon/detectorFactory/"
// Include files
#include "RadmonDetectorLabelledEntitiesConstructorsMessenger.hh"
RadmonDetectorLabelledEntitiesConstructorsMessenger * RadmonDetectorLabelledEntitiesConstructorsMessenger :: Instance(void)
{
if (instance==0)
{
instance=new RadmonDetectorLabelledEntitiesConstructorsMessenger;
if (!instance)
G4Exception("RadmonDetectorLabelledEntitiesConstructorsMessenger::Instance: RadmonDetectorLabelledEntitiesConstructorsMessenger singleton not allocated.");
}
return instance;
}
void RadmonDetectorLabelledEntitiesConstructorsMessenger :: AddAvailableConstructor(const G4String & name)
{
availableConstructors.insert(name);
}
void RadmonDetectorLabelledEntitiesConstructorsMessenger :: RemoveAvailableConstructor(const G4String & name)
{
availableConstructors.erase(name);
}
RadmonDetectorLabelledEntitiesConstructorsMessenger :: RadmonDetectorLabelledEntitiesConstructorsMessenger()
:
RadmonMessenger(COMMANDS_PATH, "Interactive labelled detector entities constructors factory commands."),
RADMON_INITIALIZE_COMMAND(Dump)
{
RADMON_CREATE_COMMAND_0ARGS(Dump, "Print out the current available detector entity constructors");
}
RadmonDetectorLabelledEntitiesConstructorsMessenger :: ~RadmonDetectorLabelledEntitiesConstructorsMessenger()
{
RADMON_DESTROY_COMMAND(Dump);
}
G4String RadmonDetectorLabelledEntitiesConstructorsMessenger :: GetCurrentValue(G4UIcommand * /* command */)
{
G4cout << "RadmonDetectorLabelledEntitiesConstructorsMessenger::GetCurrentValue(): Not supported" << G4endl;
return G4String();
}
void RadmonDetectorLabelledEntitiesConstructorsMessenger :: SetNewValue(G4UIcommand * command, G4String newValue)
{
RADMON_BEGIN_LIST_SET_COMMANDS
RADMON_SET_COMMAND(Dump)
RADMON_END_LIST_SET_COMMANDS
}
// Events
void RadmonDetectorLabelledEntitiesConstructorsMessenger :: OnDump(const G4String & /* value */)
{
G4String indent("- ");
G4String indent2(indent);
indent2.prepend(" ");
G4cout << indent << "Available constructors:\n";
AvailableConstructors::const_iterator i(availableConstructors.begin());
AvailableConstructors::const_iterator end(availableConstructors.end());
if (i==end)
G4cout << indent2 << "No constructors available.\n";
else
{
while (i!=end)
{
G4cout << indent2 << (*i) << '\n';
i++;
}
}
G4cout << G4endl;
}
RadmonDetectorLabelledEntitiesConstructorsMessenger * RadmonDetectorLabelledEntitiesConstructorsMessenger :: instance(0);
@@ -0,0 +1,59 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerLayout.cc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerLayout.cc,v 1.5 2006/06/29 16:13:39 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Include files
#include "RadmonDetectorLayerLayout.hh"
#include "RadmonDumpStyle.hh"
#include "G4UnitsTable.hh"
#include <iomanip>
void RadmonDetectorLayerLayout :: DumpLayout(std::ostream & out, const G4String & indent) const
{
G4int width(RADMONDUMP_INDENT_WIDTH-indent.length());
if (width<0)
width=0;
out << indent << std::setw(width); out.setf(std::ostream::left, std::ostream::adjustfield); out << "Label"; out.setf(std::ostream::right, std::ostream::adjustfield); out << " = \"" << layerLabel << "\"\n"
<< indent << std::setw(width); out.setf(std::ostream::left, std::ostream::adjustfield); out << "Type"; out.setf(std::ostream::right, std::ostream::adjustfield); out << " = \"" << layerType << "\"\n"
<< indent << std::setw(width); out.setf(std::ostream::left, std::ostream::adjustfield); out << "Thickness"; out.setf(std::ostream::right, std::ostream::adjustfield); out << " = " << std::setprecision(RADMONDUMP_DOUBLE_PRECISION) << G4BestUnit(layerThickness, "Length") << '\n'
<< indent << "Attributes:\n";
G4String indent2(indent);
indent2.prepend(" ");
DumpAttributesLayout(out, indent2);
}
@@ -0,0 +1,111 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// File name: RadmonDetectorLayerVolumeItem.cc
// Creation date: Sep 2005
// Main author: Riccardo Capra <capra@ge.infn.it>
//
// Id: $Id: RadmonDetectorLayerVolumeItem.cc,v 1.2.2.2 2006/06/29 16:13:44 gunter Exp $
// Tag: $Name: geant4-08-01 $
//
// Include files
#include "RadmonDetectorLayerVolumeItem.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4Material.hh"
#include "G4SDManager.hh"
RadmonDetectorLayerVolumeItem :: ~RadmonDetectorLayerVolumeItem()
{
if (volumePhysical)
{
volumeMother->GetLogicalVolume()->RemoveDaughter(volumePhysical);
delete volumePhysical;
}
if (volumeLogical->GetNoDaughters())
G4Exception("RadmonDetectorLayerVolumeItem::~RadmonDetectorLayerVolumeItem: Logical volume removed prior of daughters");
delete volumeLogical;
if (volumeSensitiveDetector)
{
G4SDManager * manager(G4SDManager::GetSDMpointer());
if (manager)
if (! manager->FindSensitiveDetector(volumeSensitiveDetector->GetFullPathName(), false))
delete volumeSensitiveDetector;
}
}
G4LogicalVolume * RadmonDetectorLayerVolumeItem :: GetLogicalVolume(void)
{
if (! volumeLogical)
{
if (volumeSensitiveDetector)
{
G4SDManager * manager(G4SDManager::GetSDMpointer());
if (manager)
{
G4VSensitiveDetector * sensitiveDetector(manager->FindSensitiveDetector(volumeSensitiveDetector->GetFullPathName(), false));
if (!sensitiveDetector)
manager->AddNewDetector(volumeSensitiveDetector);
else if (sensitiveDetector!=volumeSensitiveDetector)
{
delete volumeSensitiveDetector;
volumeSensitiveDetector=sensitiveDetector;
}
volumeSensitiveDetector->Activate(true);
}
}
volumeLogical=new G4LogicalVolume(volumeSolid, volumeMaterial, volumeName+"LV", 0, volumeSensitiveDetector, 0);
if (volumeAttributes)
volumeLogical->SetVisAttributes(volumeAttributes);
if (volumeMother)
volumePhysical=new G4PVPlacement(&volumeRotation, volumePosition, volumeLogical, volumeName+"LV", volumeMother->GetLogicalVolume(), false, 0);
}
return volumeLogical;
}
void RadmonDetectorLayerVolumeItem :: Assertion(void)
{
if (volumeLogical)
G4Exception("RadmonDetectorLayerVolumeItem::Assertion: You cannot change a RadmonDetectorLayerVolumeItem after GetLogicalVolume call.");
}

Some files were not shown because too many files have changed in this diff Show More