Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // ------------------------------------------- 28 // GEANT 4 - ULTRA experiment 29 // ------------------------------------------- 30 // 31 // Code developed by: 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, 33 // 34 // **************************************** 35 // * UltraFresnelLens.cc 36 // **************************************** 37 // 38 // Class for definition of the Ultra Fresne 39 // An UltraFresnelLens object is created i 40 // This class makes use of the UltraFresnel 41 // The lens profile is define through the G 42 // 43 #include <cmath> 44 #include "UltraFresnelLens.hh" 45 #include "UltraFresnelLensParameterisation.hh" 46 47 #include "G4PhysicalConstants.hh" 48 #include "G4SystemOfUnits.hh" 49 #include "G4Material.hh" 50 #include "G4MaterialTable.hh" 51 #include "G4Tubs.hh" 52 #include "G4Cons.hh" 53 #include "G4LogicalVolume.hh" 54 #include "G4PVPlacement.hh" 55 #include "G4PVParameterised.hh" 56 #include "G4ThreeVector.hh" 57 #include "G4VisAttributes.hh" 58 59 UltraFresnelLens::UltraFresnelLens(G4double Di 60 { 61 62 LensMaterial = Material ; 63 LensDiameter = Diameter ; 64 NumberOfGrooves = nGrooves; 65 GrooveWidth = (Diameter/2.0)/nGrooves ; 66 LensPosition = Pos ; 67 68 if( GrooveWidth <= 0 ){ 69 G4Exception("UltraFresnelLens::UltraFresnel 70 "UltraFresnelLens constructor: Groove 71 } 72 73 74 auto Rmin1 = (NumberOfGrooves-1)*(GrooveWidth 75 auto Rmax1 = (NumberOfGrooves-0)*(GrooveWidth 76 LensThickness = GetSagita(Rmax1)-GetSagita(R 77 78 BuildLens(MotherPV) ; 79 80 } 81 82 83 UltraFresnelLens::~UltraFresnelLens( ) 84 {;} 85 86 //....oooOO0OOooo........oooOO0OOooo........oo 87 88 void UltraFresnelLens::BuildLens(G4VPhysicalVo 89 90 auto StartPhi = 0.0 ; 91 auto DeltaPhi = twopi ; 92 93 auto LensMotherDz = LensThickness ; 94 95 96 auto LensMotherCylinder 97 = new G4Tubs("LensMotherCylinder",0.0*mm,L 98 99 auto LensMotherMaterial = MotherPV->GetLogical 100 auto LensMotherLV 101 = new G4LogicalVolume(LensMotherCylinder,L 102 auto LensMotherPV 103 = new G4PVPlacement(0,LensPosition,"LensMo 104 105 LensMotherLV->SetVisAttributes (G4VisAttribute 106 107 108 auto solidGroove 109 = new G4Cons("Groove",40.0*mm,50.0*mm,40.0*m 110 111 auto logicalGroove 112 = new G4LogicalVolume(solidGroove,LensMate 113 114 auto FresnelLensParam = new UltraFresnelLensPa 115 116 LensPhysicalVolume = 117 new G4PVParameterised("LensPV",logicalGroove, 118 119 } 120 121 //....oooOO0OOooo........oooOO0OOooo........oo 122 123 G4double UltraFresnelLens::GetSagita(G4double 124 { 125 auto Conic = -1.0; 126 auto Curvature = 0.00437636761488/mm ; 127 G4double Aspher[8] = {4.206739256e-05/(mm), 128 9.6440152e-10/(mm3), 129 -1.4884317e-15/(mm2*mm3 130 0.0/(mm*mm3*mm3), 131 0.0/(mm3*mm3*mm3), 132 0.0/(mm2*mm3*mm3*mm3), 133 0.0/(mm*mm3*mm3*mm3*mm 134 0.0/(mm*3*mm3*mm3*mm3* 135 }; 136 137 auto TotAspher = 0.0*mm ; 138 139 for(G4int k=1;k<9;k++){ 140 TotAspher += Aspher[k-1]*std::pow(radius,2 141 } 142 143 auto ArgSqrt = 1.0-(1.0+Conic)*std::pow(Curv 144 145 if (ArgSqrt < 0.0){ 146 G4Exception("UltraFresnelLens::GetSagita() 147 FatalException, 148 "UltraFresnelLensParameterisation::Sagita: 149 } 150 auto Sagita_value = Curvature*std::pow(radiu 151 152 return Sagita_value ; 153 154 155 } 156