double CS_FluorLine(int Z, int line, double E, xrl_error **error) { double JumpK; double cs_line, Factor = 1.0; if (Z < 1 || Z > ZMAX) { xrl_set_error_literal(error, XRL_ERROR_INVALID_ARGUMENT, Z_OUT_OF_RANGE); return 0.0; } if (E <= 0.0) { xrl_set_error_literal(error, XRL_ERROR_INVALID_ARGUMENT, NEGATIVE_ENERGY); return 0.0; } if (line >= KN5_LINE && line <= KB_LINE) { double edgeK = EdgeEnergy(Z, K_SHELL, error); double cs, rr; if (E > edgeK && edgeK > 0.0) { double yield; JumpK = JumpFactor(Z, K_SHELL, error); if (JumpK == 0.0) { return 0.0; } yield = FluorYield(Z, K_SHELL, error); if (yield == 0.0) { return 0.0; } Factor = ((JumpK - 1)/JumpK) * yield; } else if (edgeK == 0.0) { return 0.0; } else { xrl_set_error_literal(error, XRL_ERROR_INVALID_ARGUMENT, TOO_LOW_EXCITATION_ENERGY); return 0.0; } cs = CS_Photo(Z, E, error); if (cs == 0.0) { return 0.0; } rr = RadRate(Z, line, error); if (rr == 0.0) { return 0.0; } cs_line = cs * Factor * rr; } else if ((line <= L1L2_LINE && line >= L3Q1_LINE) || line == LA_LINE) { double cs, rr; cs = CS_Photo(Z, E, error); if (cs == 0.0) { return 0.0; } rr = RadRate(Z, line, error); if (rr == 0.0) { return 0.0; } if (line >= L1P5_LINE && line <= L1L2_LINE) { Factor = Jump_from_L1(Z, E, error); } else if (line >= L2Q1_LINE && line <= L2L3_LINE) { Factor = Jump_from_L2(Z, E, error); } /* * it's safe to use LA_LINE since it's only composed of 2 L3-lines */ else if ((line >= L3Q1_LINE && line <= L3M1_LINE) || line == LA_LINE) { Factor = Jump_from_L3(Z, E, error); } if (Factor == 0.0) { return 0.0; } cs_line = cs * Factor * rr; } else if (line == LB_LINE) { /* * b1->b17 */ double cs; cs_line = Jump_from_L2(Z, E, NULL) * (RadRate(Z, L2M4_LINE, NULL) + RadRate(Z, L2M3_LINE, NULL)) + Jump_from_L3(Z, E, NULL) * (RadRate(Z, L3N5_LINE, NULL) + RadRate(Z, L3O4_LINE, NULL) + RadRate(Z, L3O5_LINE, NULL) + RadRate(Z, L3O45_LINE, NULL) + RadRate(Z, L3N1_LINE, NULL) + RadRate(Z, L3O1_LINE, NULL) + RadRate(Z, L3N6_LINE, NULL) + RadRate(Z, L3N7_LINE, NULL) + RadRate(Z, L3N4_LINE, NULL)) + Jump_from_L1(Z, E, NULL) * (RadRate(Z, L1M3_LINE, NULL) + RadRate(Z, L1M2_LINE, NULL) + RadRate(Z, L1M5_LINE, NULL) + RadRate(Z, L1M4_LINE, NULL)); if (cs_line == 0.0) { xrl_set_error_literal(error, XRL_ERROR_INVALID_ARGUMENT, TOO_LOW_EXCITATION_ENERGY); return 0.0; } cs = CS_Photo(Z, E, error); if (cs == 0.0) { return 0.0; } cs_line *= cs; } else { xrl_set_error_literal(error, XRL_ERROR_INVALID_ARGUMENT, INVALID_LINE); return 0.0; } return cs_line; }
float CS_FluorLine(int Z, int line, float E) { float JumpK; float cs_line, Factor = 1.; if (Z<1 || Z>ZMAX) { ErrorExit("Z out of range in function CS_FluorLine"); return 0; } if (E <= 0.) { ErrorExit("Energy <=0 in function CS_FluorLine"); return 0; } if (line>=KN5_LINE && line<=KB_LINE) { if (E > EdgeEnergy(Z, K_SHELL)) { JumpK = JumpFactor(Z, K_SHELL); if (JumpK <= 0.) return 0.; Factor = ((JumpK-1)/JumpK) * FluorYield(Z, K_SHELL); } else return 0.; cs_line = CS_Photo(Z, E) * Factor * RadRate(Z, line) ; } else if (line>=L1P5_LINE && line<=L1L2_LINE) { Factor=Jump_from_L1(Z,E); cs_line = CS_Photo(Z, E) * Factor * RadRate(Z, line) ; } else if (line>=L2Q1_LINE && line<=L2L3_LINE) { Factor=Jump_from_L2(Z,E); cs_line = CS_Photo(Z, E) * Factor * RadRate(Z, line) ; } /* * it's safe to use LA_LINE since it's only composed of 2 L3-lines */ else if ((line>=L3Q1_LINE && line<=L3M1_LINE) || line==LA_LINE) { Factor=Jump_from_L3(Z,E); cs_line = CS_Photo(Z, E) * Factor * RadRate(Z, line) ; } else if (line==LB_LINE) { /* * b1->b17 */ cs_line=Jump_from_L2(Z,E)*(RadRate(Z,L2M4_LINE)+RadRate(Z,L2M3_LINE))+ Jump_from_L3(Z,E)*(RadRate(Z,L3N5_LINE)+RadRate(Z,L3O4_LINE)+RadRate(Z,L3O5_LINE)+RadRate(Z,L3O45_LINE)+RadRate(Z,L3N1_LINE)+RadRate(Z,L3O1_LINE)+RadRate(Z,L3N6_LINE)+RadRate(Z,L3N7_LINE)+RadRate(Z,L3N4_LINE)) + Jump_from_L1(Z,E)*(RadRate(Z,L1M3_LINE)+RadRate(Z,L1M2_LINE)+RadRate(Z,L1M5_LINE)+RadRate(Z,L1M4_LINE)); cs_line*=CS_Photo(Z, E); } else { ErrorExit("Line not allowed in function CS_FluorLine"); return 0; } return (cs_line); }