Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- tutorial c++
- //supponiamo di voler costruire da zero un progetto, iniziamo con il detector construction, se non esiste l'header file dobbiamo inserire la dicitura commentata con l'asterisco.
- #ifndef CONSTRUCTION_HH //**
- #def CONSTRUCTION_HH //** questo è il nome del file equivalente al detector construction
- #include "G4SystemOfUnits.hh" //include la classe per le unità di misura e permette di usare gran parte delle unità di misura implemetate in G4
- #include "G4VUserDetectorConstruction.hh"
- #include "G4VPhysicalVolume.hh"
- #include "G4LogicalVolume.hh"
- #include "G4Box.hh"
- #include "G4PVPlacement.hh"
- #include "G4NistManager.hh"
- class MyDetectorConstruction : public G4VUserdetectorConstruction
- {
- public:
- MyDetectorConstruction();
- ~MyDetectorConstruction();
- virtual G4VPhysicalVolume *Construct(); //questa è la funzione più importante che prende il nome di construct: tutta la descrizione del detector sarà inserita all'interno di questa funzione. mettiamo virtual all'inizio perchè in realtà è descritta dentro la classe G4userdetectorConstruction
- };
- #endif
- passiamo alla parte di CONSTRUCTOR.CC
- #include "construction.hh"
- //include le informazioni di .hh in .cc
- MyDetectorConstruction::MyDetectorConstruction()
- {}
- MyDetectorConstruction:~MyDetectorConstruction
- G4VPhysicalVolume *MyDetectorConstruction::Construct()
- //prima di definire la geometria vanno definiti i materiali da utilizzare. I materiali non devono essere inventati ma esiste una classe preesistente che li contiene che è quella del nistManager.
- {
- G4NistManager *nist = G4NistManager::Instance();
- //qui ho chiamato la classe G4NistManager e le ho dato il nome di nist. useremo questa classe G4NistManager per usare materiali pre-definiti.
- G4Material *worldMat = nist ->FindOrBuildMaterial ("G4_AIR")
- //FindOrBuildMaterial questo è il nome della funzione. worldmat sarà il materiale del mio mondo
- //il nostro mondo sarà una box, G4Box è una classe
- //ogni volume definito in G4 è composto da tre parti: il solido che definisce la size del campione, il logic ch include il materialr, è il phisical che va a posizionare il nostro volume nella nostra applicazione geant4 dove posso effettuare rotazioni, traslazioni e altro.
- G4Box *solidWordl = new G4Box("solidWorld",0.5*m, 0.5*m , 0.5*m); //sono le tre mezze dimensioni in x,y,z. espresse in metri. queste unità di misura di trovano in .hh
- //adesso inseriamo il materiale creato all'interno del volume
- G4LogicalVolume *logicWorld = new G4LogicalVolume (solidWordl, worldMat , "logicWorld"); //l'ultimo parametro è il nome.
- G4VPhysicalVolume *physWorld = new G4PVPlacement(0., G4ThreeVector(0.,0.,0.), logicWorld, "physWorld", 0, false, 0, true);
- //dentro la parentesi si mette in ordine, rotazione=0, centro del sistema rispetto al centro di G4, usiamo la classe G4ThreeVector e lo mettiamo in x=0, y=0,z=0, poi mettiamo il logic volume e poi il nome di physicalworld, poi se questo volume si deve mettere dentro un volume madre e siccome è il volume madre lui stesso metto 0, poi false perchè non voglio implementare alcuna operazione booleana, copynumber=0, true=overlap per la geometria, da un worning nel caso ci sia.
- return physWorld;
- //adesso dobbiamo dire a Geant4 di usare questo mondo creato, torniamo al main e inseriamo la dicitura:
- //runManager->SetUserInitialization(new MyDetectorConstruction());
- //runManager->Initialize();
- //e poi mettiamo in include il construction.hh e il construction.cc
- }
Add Comment
Please, Sign In to add comment