Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:59:15

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 
0026 //---------------------------------------------------------------------------
0027 // ClassName:   G4UCNMicroRoughnessHelper
0028 //
0029 // Class description:
0030 //
0031 // This file contains the headers of various functions all related to the
0032 // calculation of microroughness.
0033 // see A. Steyerl, Z. Physik 254 (1972) 169.
0034 //
0035 // Angular cut: for angles which are closer to the specular direction than a
0036 // certain value (0.01°), the probability is set to 0 in order to avoid a
0037 // hang-up at the generation of the polar angle due to a very sharp angular
0038 // distribution
0039 //
0040 // 12-05-14, adopted from Stefan Heule (PSI) Thesis by P.Gumplinger
0041 //           reported in F. Atchison et al., Eur. Phys. J. A 44, 23–29 (2010)
0042 //                       DOI:  10.1140/epja/i2010-10926-x
0043 //           Thanks to Geza Zsigmond
0044 //
0045 // 02-11-19  Stefan Heule's thesis is available from PSI UCN group pages at
0046 //           https://www.psi.ch/en/ltp-ucn-physics/papers-and-theses
0047 //           or directly at https://opac.nebis.ch/ediss/20080426_002127549.pdf
0048 
0049 #ifndef G4MICROROUGHNESSHELPER_HH
0050 #define G4MICROROUGHNESSHELPER_HH 1
0051 
0052 #include "G4Types.hh"
0053 
0054 class G4UCNMicroRoughnessHelper
0055 {
0056  public:  // with description
0057   static G4UCNMicroRoughnessHelper* GetInstance();
0058 
0059  public:  // with description
0060   // Transmitted intensity with k-vector in vacuum
0061   // arguments:
0062   //         1) cos(theta)^2,
0063   //         2) (k_l/k)^2
0064   G4double S2(G4double, G4double) const;
0065 
0066   // Transmitted intensity with k-vector within the medium
0067   // arguments:
0068   //         1) cos(theta')^2,
0069   //         2) (k_l/k')^2
0070   G4double SS2(G4double, G4double) const;
0071 
0072   // Fourier-tranform of the autocorrelation function with k-vector in vacuum
0073   // arguments:
0074   //         1) k^2,
0075   //         2) theta_i,
0076   //         3) theta_o,
0077   //         4) phi_o,
0078   //         5) b^2,
0079   //         6) w^2,
0080   //         7) angular cut
0081   G4double Fmu(G4double, G4double, G4double, G4double, G4double, G4double, G4double) const;
0082 
0083   // Fourier-tranform of the autocorrelation function with k-vector within
0084   // the medium
0085   // arguments:
0086   //         1) k,
0087   //         2) k',
0088   //         3) theta_i,
0089   //         4) theta'_o,
0090   //         5) phi'_o,
0091   //         6) b^2,
0092   //         7) w^2,
0093   //         8) angular cut
0094   //         9) theta_refract
0095   G4double FmuS(
0096     G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const;
0097 
0098   // Integral probability for non-specular reflection
0099   // arguments:
0100   //         1) E,
0101   //         2) V_F,
0102   //         3) theta_i,
0103   //         4) number of angles theta_o for which the probability is calculated,
0104   //         5) number of angles phi_o for which the probability is calculated,
0105   //         6) b^2,
0106   //         7) w^2,
0107   //         8) pointer to G4double array with max values of the probability,
0108   //         9) angular cut
0109   G4double IntIplus(
0110     G4double, G4double, G4double, G4int, G4int, G4double, G4double, G4double*, G4double) const;
0111 
0112   // Probability of non-specular reflection with the microroughness model
0113   // arguments:
0114   //         1) E,
0115   //         2) V_F,
0116   //         3) theta_i,
0117   //         4) theta_o,
0118   //         5) phi_o,
0119   //         6) b,
0120   //         7) w,
0121   //         8) angular cut
0122   G4double ProbIplus(
0123     G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const;
0124 
0125   // Integral probability for non-specular transmission
0126   // arguments:
0127   //         1) E,
0128   //         2) V_F,
0129   //         3) theta_i,
0130   //         4) number of angles theta_o for which the probability is calculated,
0131   //         5) number of angles phi_o for which the probability is calculated,
0132   //         6) b^2,
0133   //         7) w^2,
0134   //         8) pointer to G4double array with max values of the probability,
0135   //         9) angular cut
0136   G4double IntIminus(
0137     G4double, G4double, G4double, G4int, G4int, G4double, G4double, G4double*, G4double) const;
0138 
0139   // Probability of non-specular transmission with the microroughness model
0140   // arguments:
0141   //         1) E,
0142   //         2) V_F,
0143   //         3) theta_i,
0144   //         4) theta'_o,
0145   //         5) phi'_o,
0146   //         6) b,
0147   //         7) w,
0148   //         8) angular cut
0149   G4double ProbIminus(
0150     G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const;
0151 
0152  protected:
0153   G4UCNMicroRoughnessHelper() = default;
0154   ~G4UCNMicroRoughnessHelper();
0155 
0156  private:
0157   static G4UCNMicroRoughnessHelper* fpInstance;
0158 };
0159 
0160 #endif  // G4MICROROUGHNESSHELPER_HH