// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // Rich advanced example for Geant4 // RichTbMaterialParameters.cc for Rich of LHCb // History: // Created: Sajan Easo (Sajan.Easo@cern.ch) // Revision and changes: Patricia Mendez (Patricia.Mendez@cern.ch) ///////////////////////////////////////////////////////////////////////////// #include #include #include "globals.hh" #include "RichTbGeometryParameters.hh" #include "RichTbMaterialParameters.hh" #include "FilterTrData.hh" #include "AerogelTypeSpec.hh" #include "RichTbAnalysisManager.hh" void InitializeRichTbMaterial(){ } std::vector InitializePhotonMomentumVector() { G4double PhotonEnergyStep=(PhotonMaxEnergy-PhotonMinEnergy)/ NumPhotWaveLengthBins; std::vectorPhotMomVect(NumPhotWaveLengthBins); for (G4int ibin=0; ibin InitN2RefIndex(G4double pressure, G4double temperature){ std::vector PmV=InitN2RefPhotW(); std::vector RefN2(NumPhotWaveLengthBins); G4double GasRhoN2Cur=GasRhoN2atSTP*(GasTemperature_STP/temperature)* (pressure/ GasPressure_STP); G4double epho,pfe,cpfe; for(G4int ibinwn =0; ibinwn InitN2RefPhotW() { return InitializePhotonMomentumVector() ; } std::vector InitAgelPhotW() { return InitializePhotonMomentumVector() ; } std::vector InitializeHpdQE(G4int ihpdqe) { // Initialize the HPD QE G4int iqb; if(ihpdqe >= NumHpdTot ) { G4cout<<"Wrong HPD Number for QE " <qeCurPerCent(NumQEbins); if(ihpdqe == 0 ){ for(iqb=0; iqb InitializeHpdWaveL(G4int ihpdqe) { G4int iqb; if(ihpdqe >= NumHpdTot ) { G4cout<<"Wrong HPD Number for QE wavelength " <HpdQEW(NumQEbins); for (iqb=0; iqb GetCurAerogelType(AerogelNum); G4double Aparam=0.; G4double Cparam=0.; if(CurAerogelType == AerogelTypeA ) { Aparam = AerogelTypeATotTrans; Cparam = AerogelTypeAClarity*cm/(micrometer*micrometer*micrometer*micrometer); } for(G4int Iabin=0; Iabin<100; Iabin ++ ) { // G4double waLInmu = waL/1000.0; // G4double Aetr = Aparam* std::exp(-Cparam * thickness / std::pow(waLInmu,4) ); waL += stepsize; } G4int ihpdqa; ihpdqa=0; std::vectorWaveL1 = InitializeHpdWaveL(ihpdqa); std::vectorQEff1 = InitializeHpdQE(ihpdqa); } std::vector getDeadPixelList(G4int ihpdNum, G4int){ std::vectorDeadPixelList; // G4int isc,ipsc; if(G4int(DeadPixelList.size()) > MaxNumDeadPixelPerHpdSect ){ G4cout<<" Too Many dead Pixels in Hpd "<GetAerogelRScatLength(AerogelType CurrentAerogelType) { std::vectorAgelRayleighScatLength(NumPhotWaveLengthBins); std::vectorAgelPhotW = InitAgelPhotW(); G4double aClarity=0.; if(CurrentAerogelType == AerogelTypeA ) { aClarity=AerogelTypeAClarity/(micrometer*micrometer*micrometer*micrometer); }else if (CurrentAerogelType == AerogelTypeB ) { aClarity=AerogelTypeBClarity/(micrometer*micrometer*micrometer*micrometer); }else if (CurrentAerogelType == AerogelTypeC ) { aClarity=AerogelTypeCClarity/(micrometer*micrometer*micrometer*micrometer); }else if (CurrentAerogelType == AerogelTypeD ) { aClarity=AerogelTypeDClarity/(micrometer*micrometer*micrometer*micrometer); }else if (CurrentAerogelType == AerogelTypeE ) { aClarity=AerogelTypeEClarity/(micrometer*micrometer*micrometer*micrometer); }else {G4cout<<"Unknown Aerogel Type for Rayleigh Scat Length "<= 1.0) ATrans=1.0; return ATrans; }