[807] | 1 | // |
---|
| 2 | // ******************************************************************** |
---|
| 3 | // * License and Disclaimer * |
---|
| 4 | // * * |
---|
| 5 | // * The Geant4 software is copyright of the Copyright Holders of * |
---|
| 6 | // * the Geant4 Collaboration. It is provided under the terms and * |
---|
| 7 | // * conditions of the Geant4 Software License, included in the file * |
---|
| 8 | // * LICENSE and available at http://cern.ch/geant4/license . These * |
---|
| 9 | // * include a list of copyright holders. * |
---|
| 10 | // * * |
---|
| 11 | // * Neither the authors of this software system, nor their employing * |
---|
| 12 | // * institutes,nor the agencies providing financial support for this * |
---|
| 13 | // * work make any representation or warranty, express or implied, * |
---|
| 14 | // * regarding this software system or assume any liability for its * |
---|
| 15 | // * use. Please see the license in the file LICENSE and URL above * |
---|
| 16 | // * for the full disclaimer and the limitation of liability. * |
---|
| 17 | // * * |
---|
| 18 | // * This code implementation is the result of the scientific and * |
---|
| 19 | // * technical work of the GEANT4 collaboration. * |
---|
| 20 | // * By using, copying, modifying or distributing the software (or * |
---|
| 21 | // * any work based on the software) you agree to acknowledge its * |
---|
| 22 | // * use in resulting scientific publications, and indicate your * |
---|
| 23 | // * acceptance of all terms of the Geant4 Software license. * |
---|
| 24 | // ******************************************************************** |
---|
| 25 | // |
---|
| 26 | // Rich advanced example for Geant4 |
---|
| 27 | // RichTbMaterialParameters.hh for Rich of LHCb |
---|
| 28 | // History: |
---|
| 29 | // Created: Sajan Easo (Sajan.Easo@cern.ch) |
---|
| 30 | // Revision and changes: Patricia Mendez (Patricia.Mendez@cern.ch) |
---|
| 31 | ///////////////////////////////////////////////////////////////////////////// |
---|
| 32 | #ifndef RichTbMaterialParameters_h |
---|
| 33 | #define RichTbMaterialParameters_h 1 |
---|
| 34 | |
---|
| 35 | #include "globals.hh" |
---|
| 36 | #include "RichTbGeometryParameters.hh" |
---|
| 37 | #include "RichTbAnalysisManager.hh" |
---|
| 38 | #include "RichTbRunConfig.hh" |
---|
| 39 | #include "AerogelTypeSpec.hh" |
---|
| 40 | |
---|
| 41 | extern void InitializeRichTbMaterial(); |
---|
| 42 | extern void HistoRichTbMaterialProperties(RichTbRunConfig* RConfig); |
---|
| 43 | |
---|
| 44 | |
---|
| 45 | extern std::vector<G4double> InitializeHpdQE(G4int); |
---|
| 46 | extern std::vector<G4double> InitializeHpdWaveL(G4int); |
---|
| 47 | extern std::vector<G4double> InitN2RefIndex(G4double, G4double); |
---|
| 48 | extern std::vector<G4double> InitN2RefPhotW(); |
---|
| 49 | extern std::vector<G4double> InitAgelPhotW(); |
---|
| 50 | extern std::vector<G4double> InitializePhotonMomentumVector(); |
---|
| 51 | extern std::vector<G4int> getDeadPixelList(G4int ihpdNum , G4int IsectNum); |
---|
| 52 | extern std::vector<G4double>GetAerogelRScatLength(AerogelType); |
---|
| 53 | extern G4double GetCurrentBulkTrans(G4double currentMatRefIndex, |
---|
| 54 | G4double currentNeighbourRefIndex, |
---|
| 55 | G4double MaxTotMeasuredTransmission); |
---|
| 56 | |
---|
| 57 | // extern void GetGlassD263FilterTrans(); |
---|
| 58 | // |
---|
| 59 | // the following value should be calculated in terms of the |
---|
| 60 | // fundamental constants in the future. It is the conversion |
---|
| 61 | // factor between the wavelength of a photon in nanometers |
---|
| 62 | // and its energy in eV. |
---|
| 63 | static const G4double PhotMomWaveConv=1243.125; |
---|
| 64 | |
---|
| 65 | // Limits of Photon Energy and number of bins for the |
---|
| 66 | // Photon energy range. |
---|
| 67 | // static const G4double PhotonMinEnergy=1.5*eV; |
---|
| 68 | static const G4double PhotonMinEnergy=1.3*eV; |
---|
| 69 | static const G4double PhotonMaxEnergy=7.3*eV; |
---|
| 70 | static const G4int NumPhotWaveLengthBins = 1000; |
---|
| 71 | static const G4int NumPhotonRichMirrorReflWaveLengthBins=63; |
---|
| 72 | static const G4int NumAerogelRefIndexPhotonEnergyBins=37; |
---|
| 73 | // static const G4int NumFilterGlassD263WaveLengthBins=10; |
---|
| 74 | // Defintion of STP pressure and temp |
---|
| 75 | |
---|
| 76 | //static const G4double Pressure_STP=1.013*bar; |
---|
| 77 | //static const G4double Temperature_STP=273.*kelvin |
---|
| 78 | static const G4double GasPressure_STP=STP_Pressure; |
---|
| 79 | static const G4double GasTemperature_STP=STP_Temperature; |
---|
| 80 | // Ref Index of nitrogen using sellmeir parametrization |
---|
| 81 | static const G4double SellN2E1=13.414; |
---|
| 82 | static const G4double SellN2E2=23.215; |
---|
| 83 | static const G4double SellN2F1=921.28; |
---|
| 84 | static const G4double SellN2F2=3569.60; |
---|
| 85 | static const G4double GasMolWeightN2=28.02; //unit is grams |
---|
| 86 | static const G4double GasRhoN2atSTP=0.00125053; //unit is gramPercm3 |
---|
| 87 | // |
---|
| 88 | // |
---|
| 89 | //Mirror reflectivity |
---|
| 90 | // In the following, the bins at 100 nm, and 1000nm are |
---|
| 91 | // defined just for convenience of interpolation. |
---|
| 92 | // They are not measured points. |
---|
| 93 | static const G4double PhotonWavelengthRefl[]= |
---|
| 94 | {100.0, 200.0, 210.0, 220.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, |
---|
| 95 | 290.0, 300.0, 310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0, 380.0, |
---|
| 96 | 390.0, 400.0, 410.0, 420.0, 430.0, 440.0, 450.0, 460.0, 470.0, 480.0, |
---|
| 97 | 490.0, 500.0, 510.0, 520.0, 530.0, 540.0, 550.0, 560.0, 570.0, 580.0, |
---|
| 98 | 590.0, 600.0, 610.0, 620.0, 630.0, 640.0, 650.0, 660.0, 670.0, 680.0, |
---|
| 99 | 690.0, 700.0, 710.0, 720.0, 730.0, 740.0, 750.0, 760.0, 770.0, 780.0, |
---|
| 100 | 790.0, 800.0, 1000.0 }; |
---|
| 101 | |
---|
| 102 | static const G4double RichTbMirrorReflectivity[]= |
---|
| 103 | {0.0, 0.9106, 0.9232, 0.9285, 0.9314, 0.9323, 0.9312, 0.9287, 0.9264, |
---|
| 104 | 0.9234, 0.9195, 0.9156, 0.9109, 0.9066, 0.9022, 0.8981, 0.8925, 0.8883, |
---|
| 105 | 0.8836, 0.8796, 0.8756, 0.8727, 0.8697, 0.8672, 0.8653, 0.8636, 0.8624, |
---|
| 106 | 0.8612, 0.8608, 0.8601, 0.8601, 0.8601, 0.8600, 0.8603, 0.8603, 0.8604, |
---|
| 107 | 0.8605, 0.8608, 0.8609, 0.8608, 0.8608, 0.8606, 0.8604, 0.8600, 0.8598, |
---|
| 108 | 0.8591, 0.8581, 0.8573, 0.8563, 0.8549, 0.8535, 0.8517, 0.8497, 0.8475, |
---|
| 109 | 0.8447, 0.8417, 0.8382, 0.8388, 0.8296, 0.8258, 0.8204, 0.8172, 0.8172 }; |
---|
| 110 | |
---|
| 111 | static const G4double RichTbMirrorEfficiency[]= |
---|
| 112 | {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, |
---|
| 113 | 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, |
---|
| 114 | 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, |
---|
| 115 | 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, |
---|
| 116 | 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, |
---|
| 117 | 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, |
---|
| 118 | 0.0, 0.0, 0.0 }; |
---|
| 119 | |
---|
| 120 | // Transmission in quartz |
---|
| 121 | |
---|
| 122 | static const G4int NumPhotonRichTbGasQuartzWSurfaceWaveLengthBins=10; |
---|
| 123 | static const G4double RichGasQuartzWSurfacePhotMom[]= |
---|
| 124 | {1.0*eV,2.0*eV, 3.0*eV,4.0*eV,5.0*eV,6.0*eV,7.0*eV,8.0*eV, |
---|
| 125 | 9.0*eV,10.0*eV}; |
---|
| 126 | static const G4double RichTbGasQuartzWSurfaceReflectivity[]= |
---|
| 127 | {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; |
---|
| 128 | static const G4double RichTbGasQuartzWSurfaceEfficiency[]= |
---|
| 129 | {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; |
---|
| 130 | |
---|
| 131 | // Transmission in the filters |
---|
| 132 | static const G4int NumPhotonRichTbFilterSurfaceWaveLengthBins=10; |
---|
| 133 | static const G4double RichTbFilterSurfacePhotMom[]= |
---|
| 134 | {1.0*eV,2.0*eV, 3.0*eV,4.0*eV,5.0*eV,6.0*eV,7.0*eV,8.0*eV, |
---|
| 135 | 9.0*eV,10.0*eV}; |
---|
| 136 | static const G4double RichTbFilterSurfaceReflectivity[]= |
---|
| 137 | {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; |
---|
| 138 | static const G4double RichTbFilterSurfaceEfficiency[]= |
---|
| 139 | {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; |
---|
| 140 | // In the G4Example only 1 type of filter is used. |
---|
| 141 | // In the LHCb implementation several types of filters |
---|
| 142 | // were used. The program was originally setup for upto |
---|
| 143 | // 6 types of filters. |
---|
| 144 | // Now for the Glass D263 filter |
---|
| 145 | static const G4int NumPhotBinGlassD263Trans=601; |
---|
| 146 | // static const G4double RefIndexGlassD263=1.50; |
---|
| 147 | // artifically low value for the ref index of filter used for the |
---|
| 148 | // G4example. If one uses the original value of 1.5, the cherenkov |
---|
| 149 | // photons created in the filter by the 9 GeV/c pions will have cherenkov |
---|
| 150 | // angle larger than the critical angle and hence would cause |
---|
| 151 | // an (almost) infinite loop of total internal reflections. These |
---|
| 152 | // photons eventually die from photon absorption, |
---|
| 153 | // but they use a lot of cpu time. |
---|
| 154 | // In the lhcb implementation the G4OpboundaryProcess is modified to |
---|
| 155 | // to take care of this. But for the G4example this complication is |
---|
| 156 | // avoided by using an artificially low value for the ref idex of the filter. |
---|
| 157 | // SE. 15-11-2002. |
---|
| 158 | static const G4double RefIndexGlassD263=1.30; |
---|
| 159 | // for initlializing the arrays for the filter tramsmission |
---|
| 160 | // the following value is used. The arrays are later resized |
---|
| 161 | // to the appropiate value. |
---|
| 162 | static const G4int NumFilterTransBins= NumPhotBinGlassD263Trans; |
---|
| 163 | // |
---|
| 164 | //Now for the different type of Aerogel Tiles |
---|
| 165 | //In the G4example the same Aerogel type is simply repeated 5 times. |
---|
| 166 | //In the LHCb implementation 5 different types are used. |
---|
| 167 | static const G4double AerogelTypeAClarity |
---|
| 168 | =0.00719*micrometer*micrometer*micrometer*micrometer/cm; |
---|
| 169 | static const G4double AerogelTypeATotTrans=0.9368; |
---|
| 170 | static const G4double AerogelTypeANominalRefIndex=1.03066; |
---|
| 171 | |
---|
| 172 | static const G4double AerogelTypeBClarity= AerogelTypeAClarity; |
---|
| 173 | static const G4double AerogelTypeBTotTrans=AerogelTypeATotTrans; |
---|
| 174 | static const G4double AerogelTypeBNominalRefIndex=AerogelTypeANominalRefIndex; |
---|
| 175 | // |
---|
| 176 | static const G4double AerogelTypeCClarity=AerogelTypeAClarity; |
---|
| 177 | static const G4double AerogelTypeCTotTrans=AerogelTypeATotTrans; |
---|
| 178 | static const G4double AerogelTypeCNominalRefIndex=AerogelTypeANominalRefIndex; |
---|
| 179 | static const G4double AerogelTypeDClarity=AerogelTypeAClarity; |
---|
| 180 | static const G4double AerogelTypeDTotTrans=AerogelTypeATotTrans; |
---|
| 181 | static const G4double AerogelTypeDNominalRefIndex=AerogelTypeANominalRefIndex; |
---|
| 182 | static const G4double AerogelTypeEClarity=AerogelTypeAClarity; |
---|
| 183 | static const G4double AerogelTypeETotTrans=AerogelTypeATotTrans; |
---|
| 184 | static const G4double AerogelTypeENominalRefIndex=AerogelTypeANominalRefIndex; |
---|
| 185 | static const G4double AerogelReferenceRefIndWavelength[]= |
---|
| 186 | {400.0*nanometer,400.0*nanometer,400.0*nanometer,400.0*nanometer, |
---|
| 187 | 400.0*nanometer}; |
---|
| 188 | static const G4double StdAerogelNominalRefIndex=1.034; |
---|
| 189 | // for test try tdr aerogel |
---|
| 190 | //static const G4double StdAerogelNominalRefIndex=1.03123653; |
---|
| 191 | // static const char* StdAerogelRefIndFile = |
---|
| 192 | // "/afs/cern.ch/user/s/seaso/mycmt/RichTb/v5/inputData/aerogelRefIndex.txt"; |
---|
| 193 | // The following is the nominal ref index at STP for nitrogen. |
---|
| 194 | // the aerogel is kept inside the nitrogen; |
---|
| 195 | static const G4double NitrogenNominalRefIndex=1.000298; |
---|
| 196 | // |
---|
| 197 | // Quantum efficiency of the photocathodes |
---|
| 198 | // the following line already in geometryparameters.hh |
---|
| 199 | //static const G4int NumberOfHpds=4; |
---|
| 200 | |
---|
| 201 | static const G4int NumHpdTot= NumberOfHpds; |
---|
| 202 | static const G4int NumQEbins=41; |
---|
| 203 | // for now all HPDs have the same wavelength bins. |
---|
| 204 | // for the G4Example the QE is multiplied by 1.08 to account for |
---|
| 205 | // the fresnel losses at the HPD Input Quartz window. |
---|
| 206 | // In the G4 example, the correction to |
---|
| 207 | // account for the QE reduction in the periphery of the HPD |
---|
| 208 | // is not done, for simplicity. |
---|
| 209 | // In the LHCb implementation this taken care of more accurately. |
---|
| 210 | static const G4double HpdQEReductionFactor=1.08; |
---|
| 211 | static const G4double HpdQEWaveL[]= |
---|
| 212 | {200.0,210.0,220.0,230.0,240.0,250.0,260.0,270.0,280.0,290.0,300.0, |
---|
| 213 | 310.0,320.0,330.0,340.0,350.0,360.0,370.0,380.0,390.0,400.0,410.0, |
---|
| 214 | 420.0,430.0,440.0,450.0,460.0,470.0,480.0,490.0,500.0,510.0,520.0, |
---|
| 215 | 530.0,540.0,550.0,560.0,570.0,580.0,590.0,600.0}; |
---|
| 216 | static const G4double Hpd0QEPerCent[]= |
---|
| 217 | {0.0,0.0,2.4264,9.0559,14.5723,18.9039,24.2476,27.9504,29.0910, |
---|
| 218 | 31.5069,28.2676,26.8652,26.0060,25.2934,24.5034,23.4996,22.6084, |
---|
| 219 | 21.0618,19.6225,18.2942,16.4564,14.3433,12.5074,10.6036,8.7953, |
---|
| 220 | 7.2646,6.1266,5.0693,3.9949,3.0248,2.2300,1.5261,0.8610,0.4803, |
---|
| 221 | 0.2870,0.1320,0.0500,0.0135,0.0,0.0,0.0}; |
---|
| 222 | static const G4double Hpd1QEPerCent[]= |
---|
| 223 | {0.0,1.0810,3.1196,6.4212,10.4983,14.3031,17.9612,20.6541,22.1570, |
---|
| 224 | 25.5633,25.3696,25.2293,25.1988,24.9773,24.8055,24.4088,24.1165, |
---|
| 225 | 23.3368,22.4608,21.8726,20.4717,18.9725,17.5489,15.8493,14.1541, |
---|
| 226 | 12.5689,11.1047,9.7609,8.4922,7.3264,6.2243,5.0602,3.5248,2.3012, |
---|
| 227 | 1.5403,1.0813,0.6823,0.4553,0.2524,0.1227,0.0583}; |
---|
| 228 | static const G4double Hpd2QEPerCent[]= |
---|
| 229 | {0.0,0.0,1.3648,4.1624,6.8814,9.5704,12.5728,15.4286,16.7373,19.9520, |
---|
| 230 | 20.0918,20.3359,20.6562,20.7517,20.6236,20.1992,19.8387,18.6558,17.5653, |
---|
| 231 | 16.6784,15.2398,13.6456,12.1764,10.5722,9.0127,7.6529,6.4820,5.4517, |
---|
| 232 | 4.4408,3.5450,2.7400,1.9825,1.3073,0.7549,0.4712,0.3031,0.1675, |
---|
| 233 | 0.0803,0.0391,0.0169,0.0094}; |
---|
| 234 | static const G4double Hpd3QEPerCent[]= |
---|
| 235 | {0.0,11.3501,12.1319,13.2398,16.2100,18.7656,21.7482,24.3610,25.0792, |
---|
| 236 | 28.6009,28.2349,28.4114,28.5484,28.6614,28.8812,28.7106,28.1548,28.0591, |
---|
| 237 | 25.5305,21.8913,19.6042,18.3709,17.3953,17.1329,16.2153,14.8937,14.6245, |
---|
| 238 | 13.0102,13.8088,13.2000,12.0881,10.7617,8.1836,5.9729,4.6335,3.6822, |
---|
| 239 | 2.9047,2.2591,1.7516,1.2502,0.8219}; |
---|
| 240 | // only the linear term is used for now |
---|
| 241 | // static const G4double HpdDemagConst[]={ } |
---|
| 242 | static const G4double HpdDemagLinearTerm[]= |
---|
| 243 | {2.46433268,2.28343310,2.29306727,2.37845184}; |
---|
| 244 | // In the G4example the quadratic term is neglected and hence set to zero. |
---|
| 245 | static const G4double HpdDemagQuadraticTerm[]= |
---|
| 246 | {0.0,0.0,0.0,0.0}; |
---|
| 247 | static const G4double HpdDemagErrorPercent=0.0; |
---|
| 248 | // in the G4example a PSF factor is used, just an example. |
---|
| 249 | static const G4double PadHpdPSFsigma=100.0*micrometer; |
---|
| 250 | //quartz Transmission for 10 mm thickness. |
---|
| 251 | static const G4double QuTransDataThickness =10.0*mm; |
---|
| 252 | static const G4int NumPhotbinQuartzTrans=6; |
---|
| 253 | static const G4double QuartzTransWL[]= |
---|
| 254 | {180.0 ,185.0, 190.0, 200.0, 220.0,1000.0}; |
---|
| 255 | static const G4double QuartzTransmis[]= |
---|
| 256 | {0.80, 0.90, 0.95 ,0.98 , 1.0,1.0}; |
---|
| 257 | static const G4double PhCathodeNominalTransmission=0.52; |
---|
| 258 | |
---|
| 259 | //The dead Pixel List is set to zero for the G4Example. |
---|
| 260 | //Hence all pixels are set to be active. |
---|
| 261 | // The following is just a maximum number of deadpixels for array sizes. |
---|
| 262 | static const G4int MaxNumDeadPixelPerHpdSect=50; |
---|
| 263 | |
---|
| 264 | // Now for the back scattering |
---|
| 265 | static const G4double backscaprob=0.18; |
---|
| 266 | // Now for the approximate and adhoc way of evaluating the effect of |
---|
| 267 | // backscattering. |
---|
| 268 | static const G4double NsigmaInPedCut=4.0; |
---|
| 269 | static const G4double SignalToNoiseInData=10.0; |
---|
| 270 | |
---|
| 271 | #endif |
---|
| 272 | |
---|
| 273 | |
---|
| 274 | |
---|
| 275 | |
---|
| 276 | |
---|
| 277 | |
---|
| 278 | |
---|
| 279 | |
---|
| 280 | |
---|
| 281 | |
---|
| 282 | |
---|