37
GEANT4 Geometria detektora Leszek Adamczyk

GEANT4 - home.agh.edu.pl

  • Upload
    others

  • View
    17

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GEANT4 - home.agh.edu.pl

GEANT4

Geometria detektora

Leszek Adamczyk

Page 2: GEANT4 - home.agh.edu.pl

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

Page 3: GEANT4 - home.agh.edu.pl

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”

Page 4: GEANT4 - home.agh.edu.pl

Hierarchia geometrii detektora

Page 5: GEANT4 - home.agh.edu.pl

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

Page 6: GEANT4 - home.agh.edu.pl

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.

Page 7: GEANT4 - home.agh.edu.pl

.: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

Page 8: GEANT4 - home.agh.edu.pl

// 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

Page 9: GEANT4 - home.agh.edu.pl

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

Page 10: GEANT4 - home.agh.edu.pl

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 }........................

Page 11: GEANT4 - home.agh.edu.pl

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ę

Page 12: GEANT4 - home.agh.edu.pl

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

Page 13: GEANT4 - home.agh.edu.pl

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

Page 14: GEANT4 - home.agh.edu.pl

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

Page 15: GEANT4 - home.agh.edu.pl

Inne bryły specjalne

Opis wszystkich bryłRozdział 4.1.2Przewodnika dla twórców aplikacji

G4Hype

G4EllipticalTube

G4Ellipsoid G4TwistedTrap

G4Paraboloid

G4Polyhedra

G4TwistedBox

Page 16: GEANT4 - home.agh.edu.pl

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

Page 17: GEANT4 - home.agh.edu.pl

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

Page 18: GEANT4 - home.agh.edu.pl

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

Page 19: GEANT4 - home.agh.edu.pl

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”.

Page 20: GEANT4 - home.agh.edu.pl

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()

Page 21: GEANT4 - home.agh.edu.pl

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

Page 22: GEANT4 - home.agh.edu.pl

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

Page 23: GEANT4 - home.agh.edu.pl

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ę

Page 24: GEANT4 - home.agh.edu.pl

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

Page 25: GEANT4 - home.agh.edu.pl

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

Page 26: GEANT4 - home.agh.edu.pl

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

Page 27: GEANT4 - home.agh.edu.pl

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)

Page 28: GEANT4 - home.agh.edu.pl

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

Page 29: GEANT4 - home.agh.edu.pl

G4PVParameterised: przykład exampleN02

Tarcza + układ 5 komór śladowych o rosnących rozmiarach poprzecznych

Page 30: GEANT4 - home.agh.edu.pl

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

Page 31: GEANT4 - home.agh.edu.pl

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;...................................};

Page 32: GEANT4 - home.agh.edu.pl

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; ................................ }

Page 33: GEANT4 - home.agh.edu.pl

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);}

Page 34: GEANT4 - home.agh.edu.pl

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

Page 35: GEANT4 - home.agh.edu.pl

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

Page 36: GEANT4 - home.agh.edu.pl

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”

Page 37: GEANT4 - home.agh.edu.pl

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