ExU01DetectorConstruction.cc
// $Id: DetectorConstruction.html,v 1.2 2001/05/24 02:52:09 g4u Exp $
// ====================================================================
// ExU01DetectorConstruction.cc
//
// .G4UserGroup, 2000
// ====================================================================
#include "ExU01DetectorConstruction.hh"
#include "ExU01MaterialManager.hh"
#include "G4LogicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4VisAttributes.hh"
#include "G4Box.hh"
// each detector component
#include "ExU01Counter.hh"
#include "ExU01Tracker.hh"
#include "ExU01Calorimeter.hh"
// for magnetic field
//#include "G4FieldManager.hh"
//#include "G4TransportationManager.hh"
//#include "G4ChordFinder.hh"
//#include "ExU01MagneticField.hh"
// ====================================================================
//
// constants (detector parameters)
//
// ====================================================================
// [experimental hall]
static const G4ThreeVector DXYZ_EXPHALL(10.*m, 10.*m, 10.*m);
// [downstream area]
static const G4ThreeVector DXYZ_DOWNAREA(2.*m, 2.*m, 3.*m);
static const G4ThreeVector XYZ_DOWNAREA(0.,0.,2.4*m);
// ====================================================================
//
// class description
//
// ====================================================================
//////////////////////////////////////////////////////
ExU01DetectorConstruction::ExU01DetectorConstruction()
: expHall(0), downArea(0),
dxyzExpHall(DXYZ_EXPHALL),
dxyzDownArea(DXYZ_DOWNAREA),
xyzDownArea(XYZ_DOWNAREA)
//////////////////////////////////////////////////////
{
}
/////////////////////////////////////////////////////////
G4VPhysicalVolume* ExU01DetectorConstruction::Construct()
/////////////////////////////////////////////////////////
{
// Material Manager
ExU01MaterialManager* materialMgr= ExU01MaterialManager::GetPointer();
// ==============================================================
// Experimental Hall (world)
// ==============================================================
G4Box* expHallSolid=
new G4Box("EXP_HALL",
dxyzExpHall.x()/2., dxyzExpHall.y()/2., dxyzExpHall.z()/2.);
G4Material* Air= materialMgr-> GetMaterial("Air");
G4LogicalVolume* expHallLV=
new G4LogicalVolume(expHallSolid, Air, "EXP_HALL_LV");
// visualization attributes
G4VisAttributes* expHallVisAtt=
new G4VisAttributes(FALSE, G4Colour(1., 1., 1.));
//expHallVisAtt-> SetForceWireframe(TRUE);
expHallLV-> SetVisAttributes(expHallVisAtt);
expHall= new G4PVPlacement(0, G4ThreeVector(), "EXP_HALL_PV",
expHallLV, 0, FALSE, 0);
// ... MV, MANY, copy#
// ==============================================================
// downstream area
// ==============================================================
G4Box* downAreaSolid=
new G4Box("DOWN_AREA",
dxyzDownArea.x()/2., dxyzDownArea.y()/2., dxyzDownArea.z()/2.);
G4LogicalVolume* downAreaLV=
new G4LogicalVolume(downAreaSolid, Air, "DOWN_AREA_LV");
downAreaLV-> SetVisAttributes(expHallVisAtt);
downArea= new G4PVPlacement(0, xyzDownArea, "DOWN_AREA_PV",
downAreaLV, expHall, FALSE, 0);
// Try to rotate the "Downstream Area" by 30 degree around Y-axis.
//const G4double angle= -30.*deg;
//G4RotationMatrix* rotMDA= new G4RotationMatrix;
//rotMDA-> rotateY(angle);
//G4ThreeVector posDA= xyzDownArea;
//posDA.rotateY(angle);
//G4Transform3D transformDA(*rotMDA, posDA);
//
// A give rotation matrix must be expressed in so called "passive" rotation.
//downArea= new G4PVPlacement(rotMDA, posDA, "DOWN_AREA_PV",
// downAreaLV, expHall, FALSE, 0);
//
// You can also directly specify active transformation.
//downArea= new G4PVPlacement(transformDA, "DOWN_AREA_PV",
// downAreaLV, expHall, FALSE, 0);
// ==============================================================
// each detector component
// ==============================================================
// counter system
ExU01Counter* counter= new ExU01Counter(this);
counter-> Spec();
counter-> Build();
// tracker system
ExU01Tracker* tracker= new ExU01Tracker(this);
tracker-> Spec();
tracker-> Build();
// calorimeter system
ExU01Calorimeter* calorimeter= new ExU01Calorimeter(this);
calorimeter-> Spec();
calorimeter-> Build();
// ==============================================================
// magnetic field
// ==============================================================
//G4FieldManager* fieldManager=
// G4TransportationManager::GetTransportationManager()-> GetFieldManager();
//ExU01MagneticField* magField= new ExU01MagneticField;
//fieldManager-> SetDetectorField(magField);
//fieldManager-> CreateChordFinder(magField);
//fieldManager-> GetChordFinder()-> SetDeltaChord(1.*mm); // if you need
// ==============================================================
// return PV of the world volume
return expHall;
}
Generated by GNU enscript 1.6.1.