Example #1
0
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;
}
Example #2
0
double Window::transmission(double ev) const
{
	double _mac = CS_Total_CP(material.c_str(), ev/1000.);
	return std::exp(-_mac*density*thickness);
}