int getXRayCS (int mode, double massThickness) { int i, Z=0; float energy_keV; double cosThetaIn; if (verbose > 3) { fprintf(stdout, "getXRayCS: targetFormula = %s\n", targetFormula); } if (mode > 9 ) { Z = SymbolToAtomicNumber ( targetFormula ); } if (verbose > 2) { fprintf(stdout, "\n Index PhotonEnergy TotalCS PhotoCS coherentCS incohrentCS"); if ( mode==2 || mode==12 ) { fprintf(stdout, " Transmission Absorption "); } else if ( mode==4 || mode==14 ) { fprintf(stdout, " Transmission Absorption FrontTEY(QE) BackTEY(QE) TEY(QE) "); } fprintf(stdout, "\n (eV) (cm2/g) (cm2/g) (cm2/g) (cm2/g) "); } cosThetaIn = cos(thetaIn * degToRad); for ( i = 0; i < npts; i++ ) { energy_keV = 0.001 * energy[i]; if ( mode < 10 ) { total[i] = CS_Total_CP ( targetFormula, energy_keV ); photo[i] = CS_Photo_CP ( targetFormula, energy_keV ); rayleigh[i] = CS_Rayl_CP ( targetFormula, energy_keV ); compton[i] = CS_Compt_CP ( targetFormula, energy_keV ); } else { total[i] = CS_Total ( Z, energy_keV ); photo[i] = CS_Photo ( Z, energy_keV ); rayleigh[i] = CS_Rayl ( Z, energy_keV ); compton[i] = CS_Compt ( Z, energy_keV ); } if (verbose>2) { fprintf(stdout, "\n %4d %10.1f %12.4g %10.4g %12.4g %12.4g", i, energy[i], total[i], photo[i], rayleigh[i], compton[i]); } if ( mode==2 || mode==4 || mode==12 || mode==14 ) { transmission [i] = exp(-1.0 * massThickness * total[i] / cosThetaIn ); absorption[i] = 1.0 - transmission[i]; if (verbose>2) { fprintf(stdout, " %12.4f %12.4g", transmission[i], absorption[i]); } if ( mode==4 || mode==14 ) { eYieldFront[i] = teyEfficiency * energy[i] * total[i] / cosThetaIn ; /* Front surface total electron yield */ eYieldBack[i] = teyEfficiency * energy[i] * total[i] / cosThetaIn * transmission [i]; /* Back surface total electron yield */ electronYield[i] = eYieldFront[i] + eYieldBack[i]; if (verbose>2) { fprintf(stdout, "%12.4g %12.4g %12.4g", eYieldFront[i], eYieldBack[i], electronYield[i] ); } } } } if (verbose) fprintf(stdout, "\n"); return 0; }
double Window::transmission(double ev) const { double _mac = CS_Total_CP(material.c_str(), ev/1000.); return std::exp(-_mac*density*thickness); }