gabbbri_ella

DetectorConstruction

May 10th, 2022 (edited)
629
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.56 KB | None | 0 0
  1. tutorial c++
  2.    
  3. //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.
  4.    
  5.    
  6. #ifndef CONSTRUCTION_HH //**
  7. #def CONSTRUCTION_HH //** questo è il nome del file equivalente al detector construction
  8.  
  9. #include "G4SystemOfUnits.hh" //include la classe per le unità di misura e permette di usare gran parte delle unità di misura implemetate in G4
  10. #include "G4VUserDetectorConstruction.hh"
  11. #include "G4VPhysicalVolume.hh"
  12. #include "G4LogicalVolume.hh"
  13. #include "G4Box.hh"
  14. #include "G4PVPlacement.hh"
  15. #include "G4NistManager.hh"
  16.    
  17. class MyDetectorConstruction : public G4VUserdetectorConstruction
  18. {
  19. public:
  20.    MyDetectorConstruction();
  21.    ~MyDetectorConstruction();
  22.    
  23.    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
  24. };
  25.        
  26. #endif
  27.  
  28.  
  29. passiamo alla parte di CONSTRUCTOR.CC
  30.  
  31. #include "construction.hh"
  32. //include le informazioni di .hh in .cc
  33. MyDetectorConstruction::MyDetectorConstruction()
  34. {}
  35.  
  36. MyDetectorConstruction:~MyDetectorConstruction
  37.  
  38. G4VPhysicalVolume *MyDetectorConstruction::Construct()
  39.     //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.
  40. {
  41.    G4NistManager *nist = G4NistManager::Instance();
  42.        //qui ho chiamato la classe G4NistManager e le ho dato il nome di nist. useremo questa classe G4NistManager per usare materiali pre-definiti.
  43.     G4Material *worldMat = nist ->FindOrBuildMaterial ("G4_AIR")
  44.       //FindOrBuildMaterial questo è il nome della funzione. worldmat sarà il materiale del mio mondo  
  45.     //il nostro mondo sarà una box, G4Box è una classe
  46.         //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.
  47.      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
  48.     //adesso inseriamo il materiale creato all'interno del volume
  49.     G4LogicalVolume *logicWorld = new G4LogicalVolume (solidWordl, worldMat , "logicWorld"); //l'ultimo parametro è il nome.
  50.    
  51.     G4VPhysicalVolume *physWorld = new G4PVPlacement(0., G4ThreeVector(0.,0.,0.), logicWorld, "physWorld", 0, false, 0, true);
  52.     //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.
  53.    
  54.     return physWorld;
  55.    
  56.     //adesso dobbiamo dire a Geant4 di usare questo mondo creato, torniamo al main e inseriamo la dicitura:
  57.     //runManager->SetUserInitialization(new MyDetectorConstruction());
  58.     //runManager->Initialize();
  59.     //e poi mettiamo in include il construction.hh e il construction.cc
  60. }
Add Comment
Please, Sign In to add comment