Download - GEANT4 - home.agh.edu.pl
GEANT4
Geometria detektora
Leszek Adamczyk
Geometria detektora
G4Box
G4Tubs
G4VSolid G4VPhysicalVolume
G4Material
G4VSensitiveDetector
G4PVPlacement
G4PVParameterised
G4VisAttributes
G4LogicalVolume
Trzy poziomy definicji geometrii:
G4VSolid – kształt, rozmiar
G4LogicalVolume – materiał, wizualizacja, …
G4VPhysicalVolume – położenie, orientacja
Typowa strategia G4VSolid * solidWorld = new G4Box( "World", //its name WorldSizeX/2,WorldSizeYZ/2,WorldSizeYZ/2); //its size G4LogicalVolume * logicWorld = new G4LogicalVolume( solidWorld, //its solid defaultMaterial, //its material "World"); //its name G4VPhysicalVolume * physiWorld = new G4PVPlacement( 0, //no rotation G4ThreeVector(), //at (0,0,0) logicWorld, //its logical volume "World", //its name 0, //its mother volume false, //no boolean operation 0); //copy number
Każdy obszar jest umieszczany wewnątrz obszaru ”matki”. Pozycja i orientacja obszaru określana jest względem lokal-nego układu współrzędnych obszaru ”matki”. Początek ukła-du jest środkiem obszaru ”matki”. Obszar nie może wystawać poza obszar ”matki”
Hierarchia geometrii detektora
Hierarchia geometrii detektora
●Jeden obszar logiczny może być umie-szczony więcej niż jeden raz
●Kilka obszarów może być umieszczo-nych w jednym obszarze logicznym
●Jeśli obszar ”matka” jest umieszczony kilka razy to z definicji wszystkie obsza- ry ”córki” pojawią się w każdej kopii obszaru ”matki”. ●Obszar ”world” musi być jeden i zawie-rać całkowicie wszystkie pozostałe.
●Obszar ”world” definiuje globalny układ współrzędnych●Pozycje cząstek, depozytów energii podawane są względem globalnego układu współrzędnych
G4VUserDetectorConstruction
Definicja:, materiałów, geometrii, ....●Należy wyprowadzić z abstrakcyjnej klasy G4VUserDetectorConstruction klasę pochodną●Zaimplementować funkcję Construct()
Opis klasy G4VUserDetectorConstruction (Software Reference Manual)
Class Description:
This is the abstract base class of the user's mandatory initialization class for detector setup. It has only one pure virtual method Construct() which is invoked by G4RunManager when it's Initialize() method is invoked. The Construct() method must return the G4VPhysicalVolume pointer which represents the world volume.
.:GNUmakefile exampleN03.cc include src
./include:ExN03DetectorConstruction.hh ExN03DetectorMessenger.hhExN03EventAction.hh ExN03EventActionMessenger.hhExN03PhysicsList.hh ExN03PrimaryGeneratorAction.hhExN03PrimaryGeneratorMessenger.hh ExN03RunAction.hhExN03SteppingAction.hh ExN03SteppingVerbose.hh
./src:ExN03DetectorConstruction.cc ExN03DetectorMessenger.ccExN03EventAction.cc ExN03EventActionMessenger.ccExN03PhysicsList.cc ExN03PrimaryGeneratorAction.ccExN03PrimaryGeneratorMessenger.cc ExN03RunAction.ccExN03SteppingAction.cc ExN03SteppingVerbose.cc
deklaracja klasy pochodnej
definicja klasy pochodnej
exampleN03
// Initialize G4 kernel // runManager->Initialize();
// Set mandatory initialization classes // ExN03DetectorConstruction* detector = new ExN03DetectorConstruction; runManager->SetUserInitialization(detector); //
Wywołanie konstruktora klasy ExN03DetectorConstructionExN03DetectorConstruction::ExN03DetectorConstruction { ...}
exampleN03.cc
Wywołanie funkcjiExN03DetectorConstruction::Construct { ...}
Materiały, geometria mogą być zdefiniowane w dowolnej z powyższych funkcji (lub innej funkcji wywoływanej przez powyższe dwie). Musimy jednak zapewnić aby funkcja Construct wzracała wskaźnik do obszaru fizycznego ”world”. Ten obiekt reprezentuje cały nasz detektor
ExN03DetectorConstruction.hh#ifndef ExN03DetectorConstruction_h#define ExN03DetectorConstruction_h 1
#include "G4VUserDetectorConstruction.hh”
class ExN03DetectorConstruction : public G4VUserDetectorConstruction{ public: ExN03DetectorConstruction(); //konstruktor ~ExN03DetectorConstruction(); //destruktor G4VPhysicalVolume * Construct(); //funkcja Construct
public: inne funkcje lub dane publiczne (jeśli potrzebne)
private: inne funkcje lub dane prywatne (jeśli potrzebne) void DefineMaterials(); // meteriały G4VPhysicalVolume* ConstructCalorimeter(); // geometria };#endif
ExN03DetectorConstruction.cc
#include "ExN03DetectorConstruction.hh".....................ExN03DetectorConstruction::ExN03DetectorConstruction():Lista inicjalizacji{..................... DefineMaterials();..................... }ExN03DetectorConstruction::~ExN03DetectorConstruction(){.......}G4VPhysicalVolume* ExN03DetectorConstruction::Construct(){return ConstructCalorimeter();}......................void ExN03DetectorConstruction::DefineMaterials(){....... // definicje materiałów } G4VPhysicalVolume* ExN03DetectorConstruction::ConstructCalorimeter(){........// definicja geometrii detektora }........................
BryłyWszystkie bryły w GEANT4 są wyprowadzone z abstrakcyjnej klasy bazowej G4VSolid. Klasa tadeklaruje (ale nie implementuje) wszystkie funkcje potrzebne do:● Obliczenia odległości bryły od dowolnego punktu● Obliczenie wektora normalnego do powierzchni bryły w dowolnym punkcie● Sprawdzenia czy dany punkt znajduje się wewnątrz bryły● Obliczenia objętości, pola powierzchni, ....
Użytkownik może zdefiniować swoją własną klasę
Bryły elementarne
Prostopadłościan
G4Box(const G4String& pName, // name G4double pX, // half length in X G4double pY, // half length in Y G4double pZ) // half length in Z
Wycinek powłoki cylindrycznej
G4Tubs(const G4String& pName, // name G4double pRMin, // inner radius G4double pRMax, // outer radius G4double pDz, // half length in Z G4double pSPhi, // the starting phi angle G4double pDPhi) // the angle of the segment
G4Torus
torusG4Trap
ostrosłupG4Trd
ostrosłup foremny
G4Conspowłoka stożkowa
G4Orbpełna sfera
G4Paragraniastosłup
G4Spherepowłoka sferyczna
Inne bryły elementarne
Opis wszystkich bryłRozdział 4.1.2Przewodnika dla twórców aplikacji
Bryły specjalne
Wielostożek
G4Polycone(const G4String& pName, // name G4double phiStart, // starting phi angle G4double phiTotal, // total phi angle G4int numRZ, // number of corners in R-Z space const G4double r[], // r coordinate of corners const G4double z[]) // z coordinate of corners
Inne bryły specjalne
Opis wszystkich bryłRozdział 4.1.2Przewodnika dla twórców aplikacji
G4Hype
G4EllipticalTube
G4Ellipsoid G4TwistedTrap
G4Paraboloid
G4Polyhedra
G4TwistedBox
Bryły reprezentowane przez ich granice
●Można zdefiniować bryłę podając wszystkie płaszczyzny które ją ograniczają●Płaszczyzny mogą być płaskie, zakrzywione, płaty Beziera
Bryły powstałe z operacji logicznych
●Dwie bryły mogą być łączone za pomocą operacji logicznych: G4UnionSolid, G4SubtractionSolid,G4IntersectionSolid - druga bryła pozycjonowana jest względem lokalnego układu współrzędnych pierwszej
Union Subtraction Intersection
Bryły powstałe z operacji logicznych przykład
G4Box* box = new G4Box("Box",20*mm,30*mm,40*mm); G4Tubs* cyl = new G4Tubs("Cylinder",0,50*mm,50*mm,0,twopi); // r: 0 mm -> 50 mm // z: -50 mm -> 50 mm // phi: 0 -> 2 pi G4UnionSolid* union = new G4UnionSolid("Box+Cylinder", box, cyl); G4IntersectionSolid* intersection = new G4IntersectionSolid("Box*Cylinder", box, cyl); G4SubtractionSolid* subtraction = new G4SubtractionSolid("Box-Cylinder", box, cyl);
Lokalny układ współrzędnych powstałej bryły jest taki sam jak pierwszej bryły
Obszar logiczny
G4LogicalVolume( G4VSolid* pSolid, G4Material* pMaterial, const G4String& Name, G4FieldManager* pFieldMgr=0, G4VSensitiveDetector* pSDetector=0, G4UserLimits* pULimits=0)
Obszar logiczny posiada pełną informację o obszarze oprócz jego położenia i orientacji:kształt, rozmiar, materiał, pole magnetyczne, atrybut obsza-ru czułego detektora, atrybuty wizualizacji, warunki produkcji cząstek, pozycje i orientacje obszarów ”córek”.
Objętość i ciężar obszaru logicznego
●Objętość bryły można obliczyć za pomocą funkcji składowej G4VSolid::GetCubicVolume()Dla większości elementarnych brył objętość jestobliczana analitycznie dla pozostałych metodą
Monte Carlo ●Ciężar obszaru logicznego można obliczyć przy użyciu funkcji składowej: G4LogicalVolume::GetMass()
Obszar fizyczny
Obszary fizyczne dzielimy na: - jednokrotny : obszar umieszczony jednokrotnie jeden fizyczny obszar = jeden obszar rzeczywisty - wielokrotny : obszar umieszczany wielokrotnie jeden fizyczny obszar = wiele obszarów rzeczywistychObszary wielokrotne ze względu na sposób repetycji
dzielimy na: - parametryzowane w funkcji numeru kopii - powielane wzdłuż jednej osi
Obszar ”matka” może zawierać: - albo wiele obszarów jednokrotnych - albo jeden obszar wielokrotny
Obszar fizyczny (przegląd)●G4PVPlacement reprezentuje obszar jednokrotny
●G4PVParameterised reprezentuje obszar wielokrotny parametryzo-
wany numerem kopii - kształt, rozmiar, materiał, .... mogą być pa- rametryzowane numerem kopii - powielane obszary mogą zawierać w sobie
obszary ”wnuczki” o ile ”wnuczki” mają identyczne rozmiary i kształty - wymaga implementacji klasy
G4PVParameterisation
Obszar fizyczny (przegląd)
●G4PVReplica (obszar wielokrotny) obszary ”córki” mające ten sam kształt ustawiane są
wzdłuż jednej osi i wypełniają cały obszar ”matki” bez żadnych przerw ●G4PVDivision (obszar wielokrotny) tak jak G4PVReplica ale dopuszcza istnienie przerwy mię-
dzy brzegiem obszaru ”matki” a najbardziej zewnętrznymi ”córkami”, brak przerw między ”córkami”●G4ReflectionFactory (para obszarów) umożliwia umieszczenie obszaru i jego odbicia
●G4AssemblyVolume (wiele obszarów) umożliwia umieszczenie jednokrotnych obszarów połączo-
nych w grupę
G4PVPlacement G4PVPlacement( G4RotationMatrix* pRot, // obrót układu matki const G4ThreeVector& tlate, // pozycja w obróconym układzie G4LogicalVolume* pCurrentLogical, const G4String& pName, G4LogicalVolume* pMotherLogical, G4bool pMany, // false G4int pCopyNo, // dowolna unikalna liczba całk. G4bool pSurfChk=false )
rotation
translation in
rotated frame
Mother volume
G4PVPlacement - II Tra = G4Transform3D ( G4RotationMatrix &pRot //obrót układu ”córki” const G4ThreeVector &tlate) // pozycja w układzie ”matki”
G4PVPlacement( G4Transform3D Tra , // transformacja córki G4LogicalVolume* pCurrentLogical, ..............................
Mother volume
rotation
Mother volume
translation in
mother frame
G4PVPlacement – przykład exampleN03
physiCalor = new G4PVPlacement( 0, //no rotation G4ThreeVector(0,0,0),//at (0,0,0) logicCalor, //its logical volume "Calorimeter", //its name logicWorld, //its mother volume false, //no boolean operation 0); //copy number
G4PVParameterised G4PVParameterised( const G4String& pName, G4LogicalVolume* pDLogical, G4LogicalVolume* pMLogical, const EAxis pAxis, const G4int n, G4VPVParameterisation* pParam, G4bool pSurfChk=false )
●Umieszcza obszar (pDLogical), n razy używając parametryzacji (pParam) wewnątrz obszaru ”matki”(pMLogical) ●pAxis sugeruje wzdłuż której osi będą powielane obszary (kXAxis, kYAxis, kZAxis, kUndefined)
G4PVParameterised
Użytkownik musi zaimplementować klasę wypro- wadzoną z klasy G4VPVParameterisation oraz zdefiniować następujące wielkości w funkcji numeru kopii: - położenie i orientacje ComputeTransformation - opcjonalnie rozmiar ComputeDimensions kształt ComputeSolid materiał ComputeMaterial
Wszystkie kopie muszą zawierać się w obszarze”matki” i nie nachodzić na siebie
G4PVParameterised: przykład exampleN02
Tarcza + układ 5 komór śladowych o rosnących rozmiarach poprzecznych
ExN02DetectorConstruction.cc
solidChamber = new G4Box("chamber", 100*cm, 100*cm, 10*cm); logicChamber = new G4LogicalVolume(solidChamber,ChamberMater,"Chamber",0,0,0); chamberParam = new ExN02ChamberParameterisation( NbOfChambers, // NoChambers firstPosition, // Z of center of first ChamberSpacing, // Z spacing of centers ChamberWidth, // Width Chamber firstLength, // lengthInitial lastLength); // lengthFinal physiChamber = new G4PVParameterised( "Chamber", // their name logicChamber, // their logical volume LogicTracker, // Mother logical volume kZAxis, // Are placed along this axis NbOfChambers, // Number of chambers chamberParam); // The parametrisation
ExN02ChamberParameterisation.hh...................................class ExN02ChamberParameterisation : public G4VPVParameterisation{ public: ExN02ChamberParameterisation(G4int NoChambers, G4double startZ, G4double spacing, G4double widthChamber, G4double lengthInitial, G4double lengthFinal );
virtual ~ExN02ChamberParameterisation();
void ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const; void ComputeDimensions (G4Box & trackerLayer, const G4int copyNo, const G4VPhysicalVolume* physVol) const;...................................};
ExN02ChamberParameterisation.cc
...................................ExN02ChamberParameterisation::ExN02ChamberParameterisation( G4int NoChambers, G4double startZ, // Z of center of first G4double spacingZ, // Z spacing of centers G4double widthChamber, G4double lengthInitial, G4double lengthFinal ){ fNoChambers = NoChambers; fStartZ = startZ; fHalfWidth = widthChamber*0.5; fSpacing = spacingZ; fHalfLengthFirst = 0.5 * lengthInitial; ................................ }
ExN02ChamberParameterisation.cc
void ExN02ChamberParameterisation::ComputeTransformation(const G4int copyNo, G4VPhysicalVolume* physVol) const{ G4double Zposition= fStartZ + (copyNo+1) * fSpacing; G4ThreeVector origin(0,0,Zposition); physVol->SetTranslation(origin); physVol->SetRotation(0);}
void ExN02ChamberParameterisation::ComputeDimensions(G4Box& trackerChamber, const G4int copyNo, const G4VPhysicalVolume*) const{ G4double halfLength= fHalfLengthFirst + copyNo * fHalfLengthIncr; trackerChamber.SetXHalfLength(halfLength); trackerChamber.SetYHalfLength(halfLength); trackerChamber.SetZHalfLength(fHalfWidth);}
G4PVReplica●Obszar ”matki” musi być całkowicie wypełniony kopiami o takich samych rozmiarach (szerokościach) i kształtach●Powielanie może się odbywać wzdłuż: - osi układu kartezjańskiego (X,Y,Z), powielane plastry
są prostopadłe do tej osi a lokalny układ współrzę- dnych związany jest ze środkiem plastra - osi radialnej (R), powielane wycinki stożka/cylindra
są współosiowe i nieobrócone a układy współrzę- dnych kopii są takie same jak obszaru ”matki”● - osi kąta azymutalnego (Phi), powielane wycinki stoż- ka /cylindra są współosiowe i obracane o stały kąt a lokalny układ współrzędnych kopii jest obrócony
względem układu ”matki” w taki sposób, że oś X dzieli na pół każdy klin
G4PVReplica G4PVReplica( const G4String& pName, G4LogicalVolume* pCurrentLogical, G4LogicalVolume* pMotherLogical, const EAxis pAxis, const G4int nReplicas, const G4double width, const G4double offset=0 )
- Obszar ”matka” może sam być klasy G4PVReplica - Obszar klasy G4Placement może znajdować się w po- wielanym obszarze o ile powielanie nie następuje wzdłuż osi radialnej -Obszar klasy G4Parameterised nie może znajdować się w powielanym obszarze
G4PVReplica – pAxis, width, offset
width
offset
width
width
offset
●Osie kartezjańskie pAxis=kXaxis (YZ) offset musi mieć wartość 0
●Oś radialna pAxis=kRaxis offset musi być równy wewnętrznemu
promieniowi obszaru ”matki”●Oś kąta azymutalnego pAxis=kPhi offset musi być równy początkowemu
kątowi obszaru ”matki”
G4PVReplica – przykładExN03DetectorConstruction.cc
width
offset
solidLayer = new G4Box("Layer", //its name LayerThickness/2,CalorSizeYZ/2,CalorSizeYZ/2); //size logicLayer = new G4LogicalVolume(solidLayer, //its solid defaultMaterial, //its material "Layer"); //its name physiLayer = new G4PVReplica("Layer", //its name logicLayer, //its logical volume logicCalor, //its mother kXAxis, //axis of replication NbOfLayers, //number of replica LayerThickness); //witdth of replica
physiAbsorber = new G4PVPlacement(0, //no rotation G4ThreeVector(-GapThickness/2,0.,0.), //its position logicAbsorber, //its logical volume AbsorberMaterial->GetName(), //its name logicLayer, //its mother false, //no boulean operat 0); //copy number