gabbbri_ella

ScoringVolume: implementare DetectorConstruction

May 11th, 2022 (edited)
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.82 KB | None | 0 0
  1. IMPLEMENTARE DETECTOR CONSTRUCTION PER INSERIRE LO SCORING-VOLUME    
  2. //.........................................CONSTRUCTION.HH
  3. #ifndef CONSTRUCTION_HH
  4. #def CONSTRUCTION_HH
  5.  
  6. #include "G4SystemOfUnits.hh"
  7. #include "G4VUserDetectorConstruction.hh"
  8. #include "G4VPhysicalVolume.hh"
  9. #include "G4LogicalVolume.hh"
  10. #include "G4Box.hh"
  11. #include "G4PVPlacement.hh"
  12. #include "G4NistManager.hh"
  13.    
  14. class MyDetectorConstruction : public G4VUserdetectorConstruction
  15. {
  16. public:
  17.    MyDetectorConstruction();
  18.    ~MyDetectorConstruction();
  19.    
  20.    virtual G4VPhysicalVolume *Construct();
  21. };
  22.        
  23. #endif
  24.  
  25.  
  26. //.................................................passiamo alla parte di CONSTRUCTOR.CC
  27.  
  28. #include "construction.hh"
  29.  
  30. MyDetectorConstruction::MyDetectorConstruction()
  31. {}
  32. MyDetectorConstruction:~MyDetectorConstruction()
  33. {}
  34.  
  35. G4VPhysicalVolume *MyDetectorConstruction::Construct()  
  36.     //useremo un rivelatore fatto di aerogel
  37. {
  38.    G4NistManager *nist = G4NistManager::Instance();  //chiedere cosa fa instance.
  39.     //.........inserisci i materiali ................................
  40.    //composizione dell'aerogel
  41.     //ossido di sicilio
  42.    G4Material *SiO2 = new G4Material("SiO2",2.201*g/cm3, 2); //nome, densità, numero di componenti
  43.    SiO2->AddElement(nist->FindOrBuildElement("Si"),1); //chemical name e numero di atomi di quell'elemento
  44.    SiO2->AddElement(nist->FindOrBuildElement("O"),2);
  45.     //acqua
  46.    G4Material *H2O = new G4Material("H2O",1.000*g/cm3, 2);
  47.    H2O->AddElement(nist->FindOrBuildElement("H"),2);
  48.    H2O->AddElement(nist->FindOrBuildElement("O"),1);
  49.    
  50.    G4Element *C = nist->FindOrBuildElement("C") //carbonio
  51.        
  52.    G4Material *Aerogel = new G4Material("Aerogel", 0.200*g/cm3, 3);
  53.    Aerogel->AddMaterial(SiO2, 62.5*perCent);
  54.    Aerogel->AddMaterial(H2O, 37.4*perCent);
  55.    Aerogel->AddElement(C, 0.1*perCent);
  56.  //.............................................................CERENKOV................  
  57.    //specifichiamo a Geant4 che tipo di interazioni possono avvenire per centi intervalli di energia o momento di fotoni. l'obiettivo del tutorial è simulare l'effetto cerenkov. per farlo si introduce il seguente array
  58.     G4double energy[2] = {1.239841939*eV/0.2, 1.239841939*eV/0.9}; //valori di luce riflessa blu e rossa
  59.     G4double rindexaerogel[2] = {1.1, 1.1};//valori di luce riflessa blu e rossa in aerogel
  60.     //------------------->tutto questo si vede dal minuto 13:50 video tutorial6
  61.     G4MaterialPropertiesTable *mptAerogel = new G4MaterialPropertiesTable();
  62.     mptAerogel->AddProperty("RINDEX",energy, rindexAerogel,2); //2 valori di array
  63.    
  64.     Aerogel->SetMaterialPropertiesTable(mptAerogel);
  65. //.....................................................................END................    
  66.    //si devono calcolare le percentuali dei diversi materiali per inserirli
  67.    G4Material *worldMat = nist ->FindOrBuildMaterial ("G4_AIR")
  68.        
  69.    //.......inserisci i volumi.............    
  70. //VOLUME MADRE
  71.    G4Box *solidWordl = new G4Box("solidWorld",0.5*m, 0.5*m , 0.5*m);
  72.    
  73.    G4LogicalVolume *logicWorld = new G4LogicalVolume (solidWordl, worldMat , "logicWorld");
  74.    
  75.    G4VPhysicalVolume *physWorld = new G4PVPlacement(0., G4ThreeVector(0.,0.,0.), logicWorld, "physWorld", 0, false, 0, true);
  76. //VOLUME DI SCORING->più piccolo del world
  77.   G4Box *solidRadiator = new G4Box("solidRadiator",0.4*m, 0.4*m , 0.01*m); //lo volgio piccolo perchè è un rettangolo
  78.    
  79.    G4LogicalVolume *logicRadiator = new G4LogicalVolume (solidRadiator, Aerogel , "logicRadiator");
  80.    //nome del solido, nome del materiale, come voglio chiamare il volume logico
  81.    G4VPhysicalVolume *physRadiator = new G4PVPlacement(0., G4ThreeVector(0.,0.,0.25*m), logicRadiator, "physRadiator", logicWorld, false, 0, true);
  82.    //adesso dobbiamo specificare il volume madre
  83.    return physWorld;
  84.    
  85. }
Add Comment
Please, Sign In to add comment