source: trunk/examples/advanced/radiation_monitor/detector/include/RadmonTDetectorLayerConstructor.icc @ 1358

Last change on this file since 1358 was 807, checked in by garnier, 16 years ago

update

File size: 4.3 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26//
27// File name:     RadmonTDetectorLayerConstructor.icc
28// Creation date: Sep 2005
29// Main author:   Riccardo Capra <capra@ge.infn.it>
30//
31// Id:            $Id: RadmonTDetectorLayerConstructor.icc,v 1.2.2.2 2006/06/29 16:12:20 gunter Exp $
32// Tag:           $Name: geant4-09-01-patch-02 $
33//
34
35#ifndef   RADMONTDETECTORLAYERCONSTRUCTOR_HH
36 #error "RadmonTDetectorLayerConstructor.icc cannot be included directly. Please use RadmonTDetectorLayerConstructor.hh"
37#else  /* RADMONTDETECTORLAYERCONSTRUCTOR_HH */
38
39 // Include files
40 #include "RadmonDetectorLayerVolumesList.hh"
41 #include "RadmonDetectorLayerVolumeItem.hh"
42 
43 #include "G4LogicalVolume.hh"
44 #include "G4UserLimits.hh"
45 
46 template <class LayerVolumesComponent>
47 inline                                         RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: RadmonTDetectorLayerConstructor(const G4String & label)
48 :
49  RadmonVDetectorLabelledEntityConstructor(label),
50  volumesList(0),
51  component(this)
52 {
53 }
54 
55 
56 
57 template <class LayerVolumesComponent>
58 inline                                         RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: ~RadmonTDetectorLayerConstructor()
59 {
60  delete volumesList;
61 }
62
63
64
65
66
67 template <class LayerVolumesComponent>
68 G4LogicalVolume *                              RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: ConstructLogicalVolume(void)
69 {
70  if (volumesList)
71   G4Exception("RadmonTDetectorLayerConstructor::ConstructLogicalVolume: Called twice.");
72   
73  volumesList=component.GenerateVolumesList();
74 
75  if (volumesList==0)
76   return 0;
77   
78  G4double width(GetWidth());
79  G4double height(GetHeight());
80  G4double thickness(GetThickness());
81 
82  if (width<thickness)
83   thickness=width;
84  if (height<thickness)
85   thickness=height;
86 
87  RadmonDetectorLayerVolumeItem * item;
88  G4LogicalVolume * motherVolume(0);
89  G4LogicalVolume * volume;
90 
91  G4int n(volumesList->GetNItems());
92 
93  while (n>0)
94  {
95   n--;
96   
97   item=volumesList->GetItem(n);
98   volume=item->GetLogicalVolume();
99   
100   if (volume)
101   {
102    volume->SetUserLimits(new G4UserLimits(thickness/10.));
103    if (item->GetMotherVolumeItem()==0)
104    {
105     if (motherVolume)
106      G4Exception("RadmonTDetectorLayerConstructor::ConstructLogicalVolume: Found two mother volumes.");
107
108     motherVolume=volume;
109    }
110   }
111  }
112 
113  if (!motherVolume)
114   G4Exception("RadmonTDetectorLayerConstructor::ConstructLogicalVolume: No mother volume found.");
115 
116  return motherVolume;
117 }
118
119
120
121 template <class LayerVolumesComponent>
122 RadmonVDetectorLabelledEntityConstructor *     RadmonTDetectorLayerConstructor<LayerVolumesComponent> :: New(void) const
123 {
124  return new RadmonTDetectorLayerConstructor<LayerVolumesComponent>(GetLabel());
125 }
126#endif /* RADMONTDETECTORLAYERCONSTRUCTOR_HH */
Note: See TracBrowser for help on using the repository browser.