GEANT4. Leszek Adamczyk. Geometria detektora

Podobne dokumenty
Środowisko programistyczne GEANT4

GEANT4. Leszek Adamczyk. Interfejs użytkownika -2 Geometria -2

Środowisko programistyczne GEANT4

GEANT4. Leszek Adamczyk. Przykład budowy aplikacji Interfejs użytkownika Wizualizacje

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

PARADYGMATY PROGRAMOWANIA Wykład 4

BRYŁY PODSTAWOWE I OBIEKTY ELEMENTARNE

Zaawansowane programowanie w C++ (PCP)

Mechanizm dziedziczenia

PHP 5 język obiektowy

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Wykład 4: Klasy i Metody

Wykład 2 Układ współrzędnych, system i układ odniesienia

Dokumentacja do API Javy.

Język C++ zajęcia nr 2

Programowanie komputerowe. Zajęcia 7

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

PARADYGMATY PROGRAMOWANIA Wykład 2

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

JAVA W SUPER EXPRESOWEJ PIGUŁCE

TEMAT : KLASY DZIEDZICZENIE

Rozdział 4 KLASY, OBIEKTY, METODY

Układy współrzędnych

Materiały do zajęć VII

Wykład 5: Więcej o Klasach i Metodach

Wstęp do Programowania 2

Zaawansowane programowanie w C++ (PCP)

Programowanie 2. Język C++. Wykład 9.

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

WYMAGANIA Z WIEDZY I UMIEJĘTNOŚCI NA POSZCZEGÓLNE STOPNIE SZKOLNE DLA KLASY CZWARTEJ H. zakres rozszerzony. Wiadomości i umiejętności

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

METODY MATEMATYCZNE I STATYSTYCZNE W INŻYNIERII CHEMICZNEJ

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Mechanizm dziedziczenia

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

POLITECHNIKA SZCZECIŃSKA KATEDRA MECHANIKI I PODSTAW KONSTRUKCJI MASZYN

Mobilne Aplikacje Multimedialne

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

PARADYGMATY PROGRAMOWANIA Wykład 3

Wzorce logiki dziedziny

Technologie i usługi internetowe cz. 2

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Template method (metoda szablonowa)

Plik klasy. h deklaracje klas

Dziedziczenie. Ogólna postać dziedziczenia klas:

Do czego służą klasy?

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Zaawansowane programowanie w języku C++ Programowanie obiektowe

KLASY cz.1. Dorota Pylak

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wykład 8: klasy cz. 4

Podstawy programowania III

Programowanie 2. Język C++. Wykład 3.

Ćwiczenie nr 8 - Modyfikacje części, tworzenie brył złożonych

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wprowadzenie do programowanie obiektowego w języku C++

Kryteria oceniania z matematyki Klasa III poziom rozszerzony

Operatory na rzecz typu TString

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie obiektowe i zdarzeniowe

Programowanie Obiektowe i C++

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Podstawy Programowania Obiektowego

Programowanie obiektowe Wykład 7. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Do czego służą klasy?

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Układy współrzędnych GUW, LUW Polecenie LUW

Układ współrzędnych dwu trój Wykład 2 "Układ współrzędnych, system i układ odniesienia"

Kurs WWW. Paweł Rajba.

Projektowanie 3D Tworzenie modeli przez wyciągnięcie profilu po krzywej SIEMENS NX Sweep Along Guide

Definiowanie własnych klas

.NET Klasy, obiekty. ciąg dalszy

Wykład 6: Dziedziczenie

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Współbieżność w środowisku Java

Programowanie obiektowe

ZADANIE 1 (5 PKT) ZADANIE 2 (5 PKT) Oblicz objętość czworościanu foremnego o krawędzi a.

1. Potęgi. Logarytmy. Funkcja wykładnicza

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

Java: interfejsy i klasy wewnętrzne

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Zaawansowane programowanie w C++ (PCP)

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Polimorfizm. dr Jarosław Skaruz

Podstawy POV-Ray a. Diana Domańska. Uniwersytet Śląski

Transkrypt:

GEANT4 Leszek Adamczyk Geometria detektora

Geometria detektora Trzy poziomy definicji geometrii: G4VSolid kształt, rozmiar G4LogicalVolume materiał, wizualizacja, G4VPhysicalVolume położenie, orientacja G4VSolid G4LogicalVolume G4VPhysicalVolume G4Box G4Material G4VisAttributes G4PVPlacement G4Tubs G4VSensitiveDetector G4PVParameterised

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 lokalnego układu współrzędnych obszaru matki. Początek układu jest środkiem obszaru matki. Obszar nie może wystawać poza obszar matki

Hierarchia geometrii detektora

Hierarchia geometrii detektora Jeden obszar logiczny może być umieszczony więcej niż jeden raz Kilka obszarów może być umieszczonych w jednym obszarze logicznym Jeśli obszar matka jest umieszczony kilka razy to z definicji wszystkie obszary córki pojawią się w każdej kopii obszaru matki. Obszar world musi być jeden i zawierać 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.

examplen03.: GNUmakefile examplen03.cc include src./include: ExN03DetectorConstruction.hh ExN03EventAction.hh ExN03PhysicsList.hh ExN03PrimaryGeneratorMessenger.hh ExN03SteppingAction.hh deklaracja klasy pochodnej ExN03DetectorMessenger.hh ExN03EventActionMessenger.hh ExN03PrimaryGeneratorAction.hh ExN03RunAction.hh ExN03SteppingVerbose.hh definicja klasy pochodnej./src: ExN03DetectorConstruction.cc ExN03EventAction.cc ExN03PhysicsList.cc ExN03PrimaryGeneratorMessenger.cc ExN03SteppingAction.cc ExN03DetectorMessenger.cc ExN03EventActionMessenger.cc ExN03PrimaryGeneratorAction.cc ExN03RunAction.cc ExN03SteppingVerbose.cc

examplen03.cc // Set mandatory initialization classes // ExN03DetectorConstruction* detector = new ExN03DetectorConstruction; runmanager->setuserinitialization(detector); // // Initialize G4 kernel // runmanager->initialize(); Wywołanie konstruktora klasy ExN03DetectorConstruction ExN03DetectorConstruction::ExN03DetectorConstruction {...} Wywołanie funkcji ExN03DetectorConstruction::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(); }; #endif G4VPhysicalVolume* ConstructCalorimeter(); // meteriały // geometria

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ły Wszystkie bryły w GEANT4 są wyprowadzone z abstrakcyjnej klasy bazowej G4VSolid. Klasa ta deklaruje (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

Inne bryły elementarne G4Cons powłoka stożkowa G4Orb pełna sfera G4Para graniastosłup G4Sphere powłoka sferyczna Opis wszystkich brył Rozdział 4.1.2 Przewodnika dla twórców aplikacji G4Torus torus G4Trap ostrosłup G4Trd ostrosłup foremny

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 G4Polyhedra G4Ellipsoid G4TwistedTrap G4EllipticalTube Opis wszystkich brył Rozdział 4.1.2 Przewodnika dla twórców aplikacji G4Paraboloid G4Hype 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: G4UnionSolid* union = new G4UnionSolid("Box+Cylinder", box, cyl); G4IntersectionSolid* intersection = new G4IntersectionSolid("Box*Cylinder", box, cyl); G4SubtractionSolid* subtraction = new G4SubtractionSolid("Box-Cylinder", box, cyl); 0 mm -> 50 mm // z: -50 mm -> 50 mm // phi: 0 -> 2 pi 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 obszaru 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ść jest obliczana 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 rzeczywistych Obszary 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 parametryzowany numerem kopii - kształt, rozmiar, materiał,... mogą być parametryzowane 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łączonych 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 ) Mother volume rotation translation in rotated frame

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 Mother volume volume rotatio n 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ę wyprowadzoną 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 powielanym 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 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 width width offset width offset

G4PVReplica przykład ExN03DetectorConstruction.cc 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 width 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 offset false, //no boulean operat 0); //copy number