source: trunk/source/interfaces/test/benchmark.cc@ 1221

Last change on this file since 1221 was 989, checked in by garnier, 17 years ago

fichiers manquants

File size: 8.9 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// $Id: benchmark.cc,v 1.5 2006/06/29 19:10:32 gunter Exp $
28// GEANT4 tag $Name: $
29//
30//
31// ---------------------------------------------------------------------
32//
33// Test routine for combining "events+tracks", "tracking","geometry"
34// and "particle+matter"
35//
36// Calorimeter geometry
37//
38// Arranged by R.Kiuchi 09. Oct. 1995
39//
40// Original source written by Makoto Asai 5/Sep/95
41// revised for New G4ParticleDefinition by H.Kurashige 21/Apr/96
42// revised for New G4ParticleGun by H.Kurashige 3/May/96
43// revised for interactive version by M.Asai 11/Jun/96
44// revised for tag 0.5 by G.Cosmo 12/Feb/97
45// revised for alpha01-tag by G.Cosmo 8/Apr/97
46//
47
48#include "G4ios.hh"
49#include <stdlib.h>
50
51#include "G4ThreeVector.hh"
52
53#include "G4ParticleGun.hh"
54#include "G4Event.hh"
55#include "G4EventManager.hh"
56
57#include "G4GeometryManager.hh"
58#include "G4TransportationManager.hh"
59
60#include "G4PVPlacement.hh"
61#include "G4LogicalVolume.hh"
62#include "G4Box.hh"
63#include "G4Tubs.hh"
64
65#include "G4ParticleTable.hh"
66#include "G4Material.hh"
67#include "G4ProcessManager.hh"
68#include "G4MuDeltaRay.hh"
69#include "G4MuPairProduction.hh"
70#include "G4MuBremsstrahlung.hh"
71#include "G4MuEnergyLoss.hh"
72#include "G4Transportation.hh"
73#include "G4Geantino.hh"
74#include "G4Electron.hh"
75#include "G4MuonPlus.hh"
76#include "G4Gamma.hh"
77#include "G4Positron.hh"
78
79#include "G4UImanager.hh"
80#include "G4UIterminal.hh"
81
82G4VPhysicalVolume* BuildCalorimeter(G4Material* Air,
83 G4Material* Lead,
84 G4Material* Alluminium)
85{
86 G4double offset=22.5*cm, xTlate, yTlate;
87 G4int i,j,copyNo;
88
89 G4Box *myWorldBox= new G4Box ("WBox",10000*cm, 10000*cm, 10000*cm);
90 G4Box *myCalBox = new G4Box ("CBox",1500*cm, 1500*cm, 1000*cm);
91 G4Tubs *myTargetTube = new G4Tubs ("TTube",0*cm, 22.5*cm, 1000*cm, 0.*deg, 360.*deg);
92
93 G4LogicalVolume *myWorldLog=new G4LogicalVolume(myWorldBox,Air,
94 "WLog", 0, 0, 0);
95 G4LogicalVolume *myCalLog=new G4LogicalVolume(myCalBox,Alluminium,
96 "CLog", 0, 0, 0);
97 G4LogicalVolume *myTargetLog=new G4LogicalVolume(myTargetTube,Lead,
98 "TLog", 0, 0, 0);
99
100 G4PVPlacement *myWorldPhys=new G4PVPlacement(0,G4ThreeVector(),
101 "WPhys",
102 myWorldLog,
103 0,false,0);
104 G4PVPlacement *myCalPhys=new G4PVPlacement(0,G4ThreeVector(),
105 "CalPhys",
106 myCalLog,
107 myWorldPhys,false,0);
108
109 G4String tName1("TPhys1"); // Allow all target physicals to share
110 // same name (delayed copy)
111 copyNo=0;
112 for (j=1;j<=25;j++)
113 {
114 yTlate = -1000.0*cm - 40.0*cm + j*80.0*cm;
115
116 for (i=1;i<=50;i++)
117 {
118 copyNo++;
119 xTlate = -1000.0*cm - 20.0*cm + i*45.0*cm - offset;
120 G4PVPlacement *myTargetPhys=new G4PVPlacement(0,G4ThreeVector(xTlate,yTlate,0*cm),
121 tName1,
122 myTargetLog,
123 myCalPhys,
124 false,
125 copyNo);
126 }
127 }
128
129 G4String tName2("TPhys2"); // Allow all target physicals to share
130 // same name (delayed copy)
131 copyNo=0;
132 for (j=1;j<=26;j++)
133 {
134 yTlate = -1000.0*cm - 80.0*cm + j*80.0*cm;
135 for (i=1;i<=50;i++)
136 {
137 copyNo++;
138 xTlate = -1000.0*cm - 20.0*cm + i*45.0*cm;
139 G4PVPlacement *myTargetPhys=new G4PVPlacement(0,G4ThreeVector(xTlate,yTlate,0*cm),
140 tName2,
141 myTargetLog,
142 myCalPhys,
143 false,
144 copyNo);
145 }
146 }
147
148 return myWorldPhys;
149}
150
151int main()
152{
153//-------- set output format-------
154 G4cout.setf( std::ios:: scientific, std::ios :: floatfield );
155
156//--------- Material definition ---------
157
158 G4double a, iz, z, density;
159 G4String name, symbol;
160 G4int nel;
161
162 a = 14.01*g/mole;
163 G4Element* elN = new G4Element(name="Nitrogen", symbol="N", iz=7., a);
164 a = 16.00*g/mole;
165 G4Element* elO = new G4Element(name="Oxigen", symbol="O", iz=8., a);
166
167 a = 26.98*g/mole;
168 density = 2.7*g/cm3;
169 G4Material* Al = new G4Material(name="Aluminium", z=13., a, density);
170 a = 55.85*g/mole;
171 density = 7.87*g/cm3;
172 G4Material* Fe = new G4Material(name="Iron", z=26., a, density);
173 a = 207.19*g/mole;
174 density = 11.35*g/cm3;
175 G4Material* Pb = new G4Material(name="Lead", z=82., a, density);
176 density = 1.29e-03*g/cm3;
177 G4Material* Air = new G4Material(name="Air", density, nel=2);
178 Air->AddElement(elN, .7);
179 Air->AddElement(elO, .3);
180
181// Geometry definitions
182
183 G4VPhysicalVolume *myTopNode;
184
185 G4cout << "Calorimeter volume Performance Test" << G4endl;
186 myTopNode=BuildCalorimeter(Air,Pb,Al); // Build the geometry
187 G4GeometryManager::GetInstance()->CloseGeometry();
188
189 G4TransportationManager::GetTransportationManager()
190 ->GetNavigatorForTracking()->SetWorldVolume( myTopNode );
191
192// Particle and Process definitions
193
194// Particle definitions
195
196 G4ParticleDefinition* Gamma = G4Gamma::Gamma();
197 G4ParticleDefinition* Geantino = G4Geantino::Geantino();
198 G4ParticleDefinition* MuonPlus = G4MuonPlus::MuonPlus();
199 G4ParticleDefinition* Electron = G4Electron::Electron();
200 G4ParticleDefinition* Positron = G4Positron::Positron();
201 G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable();
202
203// Process definitions
204
205 G4ProcessManager* pmanager;
206 G4Transportation* theTransportationProcess= new G4Transportation();
207
208 G4ParticleTable::G4PTblDicIterator *piter = theParticleTable->GetIterator();
209 piter -> reset();
210 while( (*piter)() ){
211 pmanager = piter->value()->GetProcessManager();
212 // add Transportation
213 pmanager -> AddContinuousProcess(theTransportationProcess, 1);
214 }
215
216/* !!!!!!!!!!!!!!!!!!! Muons temporary commented out !!!!!!!!!!!!!!!!!
217 G4MuDeltaRay theDeltaRayProcess;
218 G4MuPairProduction thePairProductionProcess;
219 G4MuBremsstrahlung theBremsstrahlungProcess;
220
221 G4MuEnergyLoss theEnergyLossProcess;
222
223 G4ProcessManager* muonProcessManager= MuonPlus->GetProcessManager();
224 G4ProcessManager* geantinoProcessManager= Geantino->GetProcessManager();
225 G4ProcessManager* electronProcessManager= Electron->GetProcessManager();
226
227 muonProcessManager->AddDiscreteProcess(&theDeltaRayProcess);
228 muonProcessManager->AddDiscreteProcess(&thePairProductionProcess);
229 muonProcessManager->AddDiscreteProcess(&theBremsstrahlungProcess);
230
231 muonProcessManager->AddContinuousProcess(&theEnergyLossProcess);
232
233// Set the cut and Build cross-sections table for physics processes
234
235 Gamma->SetCuts(1.*cm);
236 Positron->SetCuts(1.*cm);
237 Electron->SetCuts(1.*cm);
238 MuonPlus->SetCuts(1.*cm);
239 !!!!!!!!!!!!!!!!!!! Muons temporary commented out !!!!!!!!!!!!!!!!! */
240
241// Event manager
242
243 G4EventManager * eventManager = new G4EventManager;
244
245// Event generator
246
247 G4int numPrimaries =1; //1 particle per event
248 G4ParticleGun * particleGun = new G4ParticleGun(numPrimaries);
249
250// Set navigator from transportation manager
251
252 eventManager->
253 set_Navigator(G4TransportationManager::GetTransportationManager()->
254 GetNavigatorForTracking() );
255
256// Prepare UI session
257
258 G4UImanager * UI = G4UImanager::GetUIpointer();
259 G4UIterminal * terminal = new G4UIterminal;
260 UI->SetSession( terminal );
261
262// OK. Let's start benchmarks............
263
264 UI->Interact("G4> ");
265
266// End of run business
267
268 G4GeometryManager::GetInstance()->OpenGeometry();
269
270 delete Air; delete Pb; delete Fe; delete Al;
271 delete elO; delete elN;
272 delete theTransportationProcess;
273 delete eventManager;
274 delete particleGun;
275
276 return EXIT_SUCCESS;
277}
Note: See TracBrowser for help on using the repository browser.