Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IMPLEMENTARE DETECTOR CONSTRUCTION PER INSERIRE LO SCORING-VOLUME
- //.........................................CONSTRUCTION.HH
- #ifndef CONSTRUCTION_HH
- #def CONSTRUCTION_HH
- #include "G4SystemOfUnits.hh"
- #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();
- };
- #endif
- //.................................................passiamo alla parte di CONSTRUCTOR.CC
- #include "construction.hh"
- MyDetectorConstruction::MyDetectorConstruction()
- {}
- MyDetectorConstruction:~MyDetectorConstruction()
- {}
- G4VPhysicalVolume *MyDetectorConstruction::Construct()
- //useremo un rivelatore fatto di aerogel
- {
- G4NistManager *nist = G4NistManager::Instance(); //chiedere cosa fa instance.
- //.........inserisci i materiali ................................
- //composizione dell'aerogel
- //ossido di sicilio
- G4Material *SiO2 = new G4Material("SiO2",2.201*g/cm3, 2); //nome, densità, numero di componenti
- SiO2->AddElement(nist->FindOrBuildElement("Si"),1); //chemical name e numero di atomi di quell'elemento
- SiO2->AddElement(nist->FindOrBuildElement("O"),2);
- //acqua
- G4Material *H2O = new G4Material("H2O",1.000*g/cm3, 2);
- H2O->AddElement(nist->FindOrBuildElement("H"),2);
- H2O->AddElement(nist->FindOrBuildElement("O"),1);
- G4Element *C = nist->FindOrBuildElement("C") //carbonio
- G4Material *Aerogel = new G4Material("Aerogel", 0.200*g/cm3, 3);
- Aerogel->AddMaterial(SiO2, 62.5*perCent);
- Aerogel->AddMaterial(H2O, 37.4*perCent);
- Aerogel->AddElement(C, 0.1*perCent);
- //.............................................................CERENKOV................
- //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
- G4double energy[2] = {1.239841939*eV/0.2, 1.239841939*eV/0.9}; //valori di luce riflessa blu e rossa
- G4double rindexaerogel[2] = {1.1, 1.1};//valori di luce riflessa blu e rossa in aerogel
- //------------------->tutto questo si vede dal minuto 13:50 video tutorial6
- G4MaterialPropertiesTable *mptAerogel = new G4MaterialPropertiesTable();
- mptAerogel->AddProperty("RINDEX",energy, rindexAerogel,2); //2 valori di array
- Aerogel->SetMaterialPropertiesTable(mptAerogel);
- //.....................................................................END................
- //si devono calcolare le percentuali dei diversi materiali per inserirli
- G4Material *worldMat = nist ->FindOrBuildMaterial ("G4_AIR")
- //.......inserisci i volumi.............
- //VOLUME MADRE
- G4Box *solidWordl = new G4Box("solidWorld",0.5*m, 0.5*m , 0.5*m);
- G4LogicalVolume *logicWorld = new G4LogicalVolume (solidWordl, worldMat , "logicWorld");
- G4VPhysicalVolume *physWorld = new G4PVPlacement(0., G4ThreeVector(0.,0.,0.), logicWorld, "physWorld", 0, false, 0, true);
- //VOLUME DI SCORING->più piccolo del world
- G4Box *solidRadiator = new G4Box("solidRadiator",0.4*m, 0.4*m , 0.01*m); //lo volgio piccolo perchè è un rettangolo
- G4LogicalVolume *logicRadiator = new G4LogicalVolume (solidRadiator, Aerogel , "logicRadiator");
- //nome del solido, nome del materiale, come voglio chiamare il volume logico
- G4VPhysicalVolume *physRadiator = new G4PVPlacement(0., G4ThreeVector(0.,0.,0.25*m), logicRadiator, "physRadiator", logicWorld, false, 0, true);
- //adesso dobbiamo specificare il volume madre
- return physWorld;
- }
Add Comment
Please, Sign In to add comment