28namespace HeedInterface {
46 const double x = pt.
v.
x;
47 const double y = pt.
v.
y;
48 const double z = pt.
v.
z;
51 efield =
vec(0., 0., 0.);
52 bfield =
vec(0., 0., 0.);
56 std::cerr <<
"TrackHeedGlobals::field_map:\n";
57 std::cerr <<
" Sensor pointer is null.\n";
63 double ex = 0., ey = 0., ez = 0.;
67 efield.x = ex * 1.e-5;
68 efield.y = ey * 1.e-5;
69 efield.z = ez * 1.e-5;
73 double bx = 0., by = 0., bz = 0.;
76 bfield.
x = bx * 1.e-3;
77 bfield.
y = by * 1.e-3;
78 bfield.
z = bz * 1.e-3;
100 hasActiveTrack(false),
103 usePhotonReabsorption(true),
104 usePacsOutput(false),
115 nEnergyIntervals(200),
136 deltaElectrons.clear();
141 if (particle != 0)
delete particle;
142 if (matter != 0)
delete matter;
143 if (gas != 0)
delete gas;
144 if (material != 0)
delete material;
145 if (m_atPacs != 0)
delete m_atPacs;
146 if (m_molPacs != 0)
delete m_molPacs;
147 if (energyMesh != 0)
delete energyMesh;
148 if (transferCs != 0)
delete transferCs;
149 if (elScat != 0)
delete elScat;
150 if (lowSigma != 0)
delete lowSigma;
151 if (pairProd != 0)
delete pairProd;
152 if (deltaCs != 0)
delete deltaCs;
153 if (chamber != 0)
delete chamber;
159 const double t0,
const double dx0,
const double dy0,
162 hasActiveTrack =
false;
167 std::cerr <<
className <<
"::NewTrack:\n";
168 std::cerr <<
" Sensor is not defined.\n";
173 double xmin = 0., ymin = 0., zmin = 0.;
174 double xmax = 0., ymax = 0., zmax = 0.;
176 std::cerr <<
className <<
"::NewTrack:\n";
177 std::cerr <<
" Drift area is not set.\n";
181 const double lx =
fabs(xmax - xmin);
182 const double ly =
fabs(ymax - ymin);
183 const double lz =
fabs(zmax - zmin);
185 std::cout <<
className <<
"::NewTrack:\n";
186 std::cout <<
" Bounding box dimensions:\n";
187 std::cout <<
" x: " << lx <<
" cm\n";
188 std::cout <<
" y: " << ly <<
" cm\n";
189 std::cout <<
" z: " << lz <<
" cm\n";
191 if (
fabs(lx - lX) > Small ||
fabs(ly - lY) > Small ||
fabs(lz - lZ) > Small) {
198 if (std::isinf(xmin) || std::isinf(xmax)) {
201 cX = 0.5 * (xmin + xmax);
203 if (std::isinf(ymin) || std::isinf(ymax)) {
206 cY = 0.5 * (ymin + ymax);
208 if (std::isinf(zmin) || std::isinf(zmax)) {
211 cZ = 0.5 * (zmin + zmax);
214 std::cout <<
className <<
"::NewTrack:\n";
215 std::cout <<
" Center of bounding box:\n";
216 std::cout <<
" x: " << cX <<
" cm\n";
217 std::cout <<
" y: " << cY <<
" cm\n";
218 std::cout <<
" z: " << cZ <<
" cm\n";
226 std::cerr <<
className <<
"::NewTrack:\n";
227 std::cerr <<
" No medium at initial position.\n";
230 std::cerr <<
"TrackHeed:NewTrack:\n";
231 std::cerr <<
" Medium at initial position is not ionisable.\n";
236 if (medium->
GetName() != mediumName ||
244 if (!Setup(medium))
return false;
246 mediumName = medium->
GetName();
251 deltaElectrons.clear();
256 double dx = dx0, dy = dy0, dz = dz0;
257 const double d =
sqrt(dx * dx + dy * dy + dz * dz);
260 std::cout <<
className <<
"::NewTrack:\n";
261 std::cout <<
" Direction vector has zero norm.\n";
262 std::cout <<
" Initial direction is randomized.\n";
266 const double stheta =
sqrt(1. - ctheta * ctheta);
268 dx =
cos(phi) * stheta;
269 dy =
sin(phi) * stheta;
277 vec velocity(dx, dy, dz);
278 velocity = velocity * Heed::c_light *
GetBeta();
281 std::cout <<
className <<
"::NewTrack:\n";
282 std::cout <<
" Track starts at (" << x0 <<
", " << y0 <<
", " << z0
283 <<
") at time " << t0 <<
"\n";
284 std::cout <<
" Initial direction: (" << dx <<
", " << dy <<
", " << dz
290 point p0((x0 - cX) * 10., (y0 - cY) * 10., (z0 - cZ) * 10.);
340 hasActiveTrack =
true;
352 std::cerr <<
className <<
"::GetClusterDensity:\n";
353 std::cerr <<
" Track has not been initialized.\n";
357 if (transferCs == 0) {
358 std::cerr <<
className <<
"::GetClusterDensity:\n";
359 std::cerr <<
" Ionisation cross-section is not available.\n";
363 return transferCs->
quanC;
369 std::cerr <<
className <<
"::GetStoppingPower:\n";
370 std::cerr <<
" Track has not been initialized.\n";
374 if (transferCs == 0) {
375 std::cerr <<
className <<
"::GetStoppingPower:\n";
376 std::cerr <<
" Ionisation cross-section is not available.\n";
380 return transferCs->
meanC1 * 1.e6;
384 double& tcls,
int& n,
double& e,
double& extra) {
387 xcls = ycls = zcls = tcls = 0.;
394 std::cerr <<
className <<
"::GetCluster:\n";
395 std::cerr <<
" Track has not been initialized.\n";
396 std::cerr <<
" Call NewTrack first.\n";
400 if (!hasActiveTrack) {
401 std::cerr <<
className <<
"::GetCluster:\n";
402 std::cerr <<
" There are no more clusters.\n";
416 hasActiveTrack =
false;
422 if (virtualPhoton == 0) {
423 std::cerr <<
className <<
"::GetCluster:\n";
424 std::cerr <<
" Particle is not a virtual photon.\n";
425 std::cerr <<
" Program bug!\n";
433 std::cerr <<
className <<
"::GetCluster:\n";
434 std::cerr <<
" Virtual photon has an unexpected parent.\n";
458 if (medium->
GetName() != mediumName ||
473 virtualPhoton->
fly();
475 e = virtualPhoton->
energy * 1.e6;
478 std::vector<int> ids;
485 deltaElectrons.clear();
488 bool deleteNode =
false;
494 while (nextNode != 0) {
501 for (
int i = nIds; i--;) {
508 deltaElectron newDeltaElectron;
509 newDeltaElectron.x = delta->
currpos.
pt.
v.
x * 0.1 + cX;
510 newDeltaElectron.y = delta->
currpos.
pt.
v.
y * 0.1 + cY;
511 newDeltaElectron.z = delta->
currpos.
pt.
v.
z * 0.1 + cZ;
517 deltaElectrons.push_back(newDeltaElectron);
528 std::cerr <<
className <<
"::GetCluster:\n";
529 std::cerr <<
" Particle is neither an electron nor a photon.\n";
532 for (
int i = nIds; i--;) {
535 if (usePhotonReabsorption) photon->
fly();
567 double& t,
double& e,
double& dx,
double& dy,
572 std::cerr <<
className <<
"::GetElectron:\n";
573 std::cerr <<
" Track has not been initialized.\n";
574 std::cerr <<
" Call NewTrack first.\n";
581 if (i < 0 || i >= n) {
582 std::cerr <<
className <<
"::GetElectron:\n";
583 std::cerr <<
" Electron number out of range.\n";
596 if (i < 0 || i >= nDeltas) {
597 std::cerr <<
className <<
"::GetElectron:\n";
598 std::cerr <<
" Delta electron number out of range.\n";
602 x = deltaElectrons[i].x;
603 y = deltaElectrons[i].y;
604 z = deltaElectrons[i].z;
605 t = deltaElectrons[i].t;
606 e = deltaElectrons[i].e;
607 dx = deltaElectrons[i].dx;
608 dy = deltaElectrons[i].dy;
609 dz = deltaElectrons[i].dz;
616 const double z0,
const double t0,
617 const double e0,
const double dx0,
618 const double dy0,
const double dz0,
625 std::cerr <<
className <<
"::TransportDeltaElectron:\n";
626 std::cerr <<
" Delta electron transport has been switched off.\n";
632 std::cerr <<
className <<
"::TransportDeltaElectron:\n";
633 std::cerr <<
" Kinetic energy must be positive.\n";
639 std::cerr <<
className <<
"::TransportDeltaElectron:\n";
640 std::cerr <<
" Sensor is not defined.\n";
646 double xmin, ymin, zmin;
647 double xmax, ymax, zmax;
649 std::cerr <<
className <<
"::TransportDeltaElectron:\n";
650 std::cerr <<
" Drift area is not set.\n";
656 const double lx =
fabs(xmax - xmin);
657 const double ly =
fabs(ymax - ymin);
658 const double lz =
fabs(zmax - zmin);
659 if (
fabs(lx - lX) > Small ||
fabs(ly - lY) > Small ||
fabs(lz - lZ) > Small) {
665 hasActiveTrack =
false;
668 cX = 0.5 * (xmin + xmax);
669 cY = 0.5 * (ymin + ymax);
670 cZ = 0.5 * (zmin + zmax);
677 std::cerr <<
className <<
"::TransportDeltaElectron:\n";
678 std::cerr <<
" No medium at initial position.\n";
681 std::cerr <<
"TrackHeed:TransportDeltaElectron:\n";
682 std::cerr <<
" Medium at initial position is not ionisable.\n";
688 if (medium->
GetName() != mediumName ||
693 hasActiveTrack =
false;
698 if (!Setup(medium))
return;
700 mediumName = medium->
GetName();
704 deltaElectrons.clear();
708 double dx = dx0, dy = dy0, dz = dz0;
709 const double d =
sqrt(dx * dx + dy * dy + dz * dz);
714 const double stheta =
sqrt(1. - ctheta * ctheta);
715 dx =
cos(phi) * stheta;
716 dy =
sin(phi) * stheta;
724 vec velocity(dx, dy, dz);
727 const double gamma = 1. + e0 / ElectronMass;
728 const double beta =
sqrt(1. - 1. / (gamma * gamma));
729 double speed = Heed::c_light * beta;
730 velocity = velocity * speed;
734 point p0((x0 - cX) * 10., (y0 - cY) * 10., (z0 - cZ) * 10.);
744 const double z0,
const double t0,
745 const double e0,
const double dx0,
746 const double dy0,
const double dz0,
int& nel) {
752 std::cerr <<
className <<
"::TransportPhoton:\n";
753 std::cerr <<
" Photon energy must be positive.\n";
759 std::cerr <<
className <<
"::TransportPhoton:\n";
760 std::cerr <<
" Sensor is not defined.\n";
766 double xmin, ymin, zmin;
767 double xmax, ymax, zmax;
769 std::cerr <<
className <<
"::TransportPhoton:\n";
770 std::cerr <<
" Drift area is not set.\n";
776 const double lx =
fabs(xmax - xmin);
777 const double ly =
fabs(ymax - ymin);
778 const double lz =
fabs(zmax - zmin);
779 if (
fabs(lx - lX) > Small ||
fabs(ly - lY) > Small ||
fabs(lz - lZ) > Small) {
785 hasActiveTrack =
false;
788 cX = 0.5 * (xmin + xmax);
789 cY = 0.5 * (ymin + ymax);
790 cZ = 0.5 * (zmin + zmax);
797 std::cerr <<
className <<
"::TransportPhoton:\n";
798 std::cerr <<
" No medium at initial position.\n";
801 std::cerr <<
"TrackHeed:TransportPhoton:\n";
802 std::cerr <<
" Medium at initial position is not ionisable.\n";
808 if (medium->
GetName() != mediumName ||
817 if (!Setup(medium))
return;
819 mediumName = medium->
GetName();
825 hasActiveTrack =
false;
828 deltaElectrons.clear();
833 double dx = dx0, dy = dy0, dz = dz0;
834 const double d =
sqrt(dx * dx + dy * dy + dz * dz);
839 const double stheta =
sqrt(1. - ctheta * ctheta);
840 dx =
cos(phi) * stheta;
841 dy =
sin(phi) * stheta;
849 vec velocity(dx, dy, dz);
850 velocity = velocity * Heed::c_light;
854 point p0((x0 - cX) * 10., (y0 - cY) * 10., (z0 - cZ) * 10.);
861 std::vector<int> ids;
876 while (nextNode != 0) {
882 bool gotParent =
false;
883 for (
int i = nIds; i--;) {
891 deltaElectron newDeltaElectron;
892 newDeltaElectron.x = delta->
currpos.
pt.
v.
x * 0.1 + cX;
893 newDeltaElectron.y = delta->
currpos.
pt.
v.
y * 0.1 + cY;
894 newDeltaElectron.z = delta->
currpos.
pt.
v.
z * 0.1 + cZ;
900 deltaElectrons.push_back(newDeltaElectron);
907 std::cerr <<
className <<
"::TransportPhoton:\n";
908 std::cerr <<
" Delta electron with unknown parent.\n";
913 if (fluorescencePhoton == 0) {
914 std::cerr <<
className <<
"::TransportPhoton:\n";
915 std::cerr <<
" Unknown secondary particle.\n";
918 for (
int i = nIds; i--;) {
921 fluorescencePhoton->
fly();
953 if (
fabs(e1 - e0) < Small) {
954 std::cerr <<
className <<
"::SetEnergyMesh:\n";
955 std::cerr <<
" Invalid energy range:\n";
956 std::cerr <<
" " << e0 <<
" < E [eV] < " << e1 <<
"\n";
961 std::cerr <<
className <<
"::SetEnergyMesh:\n";
962 std::cerr <<
" Number of intervals must be > 0.\n";
966 emin = std::min(e0, e1);
967 emax = std::max(e0, e1);
970 nEnergyIntervals = nsteps;
975 if (
fabs(z) < Small) {
976 std::cerr <<
className <<
"::SetParticleUser:\n";
977 std::cerr <<
" Particle cannot have zero charge.\n";
981 std::cerr <<
className <<
"::SetParticleUser:\n";
982 std::cerr <<
" Particle mass must be greater than zero.\n";
991bool TrackHeed::Setup(
Medium* medium) {
994 char* dbPath = getenv(
"HEED_DATABASE");
997 std::cerr <<
" Database path is not defined.\n";
998 std::cerr <<
" Environment variable HEED_DATABASE is not set.\n";
999 std::cerr <<
" Cannot proceed with initialization.\n";
1003 std::string databasePath = dbPath;
1004 if (databasePath[databasePath.size() - 1] !=
'/') {
1005 databasePath.append(
"/");
1011 std::cerr <<
" Medium pointer is null.\n";
1016 if (energyMesh != 0) {
1023 if (!SetupGas(medium))
return false;
1025 if (!SetupMaterial(medium))
return false;
1034 if (transferCs != 0) {
1041 if (!SetupDelta(databasePath))
return false;
1044 const double nc = transferCs->
quanC;
1045 const double dedx = transferCs->
meanC * 1.e3;
1046 const double dedxLeft = transferCs->
meanCleft * 1.e3;
1047 const double dedx1 = transferCs->
meanC1 * 1.e3;
1048 const double w = matter->
W * 1.e6;
1049 const double f = matter->
F;
1052 std::cout <<
" Cluster density: " << nc <<
" cm-1\n";
1053 std::cout <<
" Stopping power (restricted): " << dedxLeft <<
" - "
1054 << dedx <<
" keV/cm\n";
1055 std::cout <<
" Stopping power (incl. tail): " << dedx1 <<
" keV/cm\n";
1056 std::cout <<
" W value: " << w <<
" eV\n";
1057 std::cout <<
" Fano factor: " << f <<
"\n";
1058 std::cout <<
" Min. ionization potential: " << minI <<
" eV\n";
1066 chamber =
new HeedChamber(primSys, lX, lY, lZ, transferCs, deltaCs);
1071bool TrackHeed::SetupGas(Medium* medium) {
1075 pressure = (pressure / AtmosphericPressure) * Heed::atmosphere;
1079 if (nComponents < 1) {
1080 std::cerr <<
className <<
"::SetupGas:\n";
1081 std::cerr <<
" Gas " <<
medium->
GetName() <<
" has zero constituents.\n";
1085 if (m_molPacs != 0) {
1095 for (
int i = 0; i < nComponents; ++i) {
1096 std::string gasname;
1100 if (gasname ==
"He-3") gasname =
"He";
1101 if (gasname ==
"CD4") gasname =
"CH4";
1102 if (gasname ==
"iC4H10" || gasname ==
"nC4H10") gasname =
"C4H10";
1103 if (gasname ==
"neoC5H12" || gasname ==
"nC5H12") gasname =
"C5H12";
1104 if (gasname ==
"H2O") gasname =
"Water";
1105 if (gasname ==
"D2") gasname =
"H2";
1106 if (gasname ==
"cC3H6") gasname =
"C3H6";
1108 if (gasname ==
"CF4")
1110 else if (gasname ==
"Ar")
1112 else if (gasname ==
"He")
1114 else if (gasname ==
"Ne")
1116 else if (gasname ==
"Kr")
1118 else if (gasname ==
"Xe")
1120 else if (gasname ==
"CH4")
1122 else if (gasname ==
"C2H6")
1124 else if (gasname ==
"C3H8")
1126 else if (gasname ==
"C4H10")
1128 else if (gasname ==
"CO2")
1130 else if (gasname ==
"C5H12")
1132 else if (gasname ==
"Water")
1134 else if (gasname ==
"O2")
1136 else if (gasname ==
"N2" || gasname ==
"N2 (Phelps)")
1138 else if (gasname ==
"NO")
1140 else if (gasname ==
"N2O")
1142 else if (gasname ==
"C2H4")
1144 else if (gasname ==
"C2H2")
1146 else if (gasname ==
"H2")
1148 else if (gasname ==
"CO")
1150 else if (gasname ==
"Methylal")
1152 else if (gasname ==
"DME")
1154 else if (gasname ==
"C2F6")
1156 else if (gasname ==
"SF6")
1158 else if (gasname ==
"NH3")
1160 else if (gasname ==
"C3H6")
1162 else if (gasname ==
"CH3OH")
1164 else if (gasname ==
"C2H5OH")
1166 else if (gasname ==
"C3H7OH")
1168 else if (gasname ==
"Cs")
1170 else if (gasname ==
"F2")
1172 else if (gasname ==
"CS2")
1174 else if (gasname ==
"COS")
1176 else if (gasname ==
"CD4")
1178 else if (gasname ==
"BF3")
1180 else if (gasname ==
"C2HF5")
1182 else if (gasname ==
"C2H2F4")
1184 else if (gasname ==
"CHF3")
1186 else if (gasname ==
"CF3Br")
1188 else if (gasname ==
"C3F8")
1190 else if (gasname ==
"O3")
1192 else if (gasname ==
"Hg")
1194 else if (gasname ==
"H2S")
1196 else if (gasname ==
"GeH4")
1198 else if (gasname ==
"SiH4")
1201 std::cerr <<
className <<
"::SetupGas:\n";
1202 std::cerr <<
" Photoabsorption cross-section data for " << gasname
1203 <<
" are not available.\n";
1209 if (usePacsOutput) {
1210 std::ofstream pacsfile;
1211 pacsfile.open(
"heed_pacs.txt", std::ios::out);
1212 const int nValues = energyMesh->
get_q();
1214 for (
int i = 0; i < nValues; ++i) {
1215 double e = energyMesh->
get_e(i);
1216 pacsfile << 1.e6 * e <<
" ";
1217 for (
int j = 0; j < nComponents; ++j) {
1218 pacsfile << m_molPacs[j]->
get_ACS(e) <<
" "
1219 << m_molPacs[j]->
get_ICS(e) <<
" ";
1233 gas =
new Heed::GasDef(gasname, gasname, nComponents, notations, fractions,
1234 pressure, temperature, -1.);
1250bool TrackHeed::SetupMaterial(Medium* medium) {
1257 if (m_atPacs != 0) {
1267 for (
int i = 0; i < nComponents; ++i) {
1268 std::string materialName;
1271 if (materialName ==
"C")
1273 else if (materialName ==
"Si")
1276 else if (materialName ==
"Ga")
1278 else if (materialName ==
"Ge")
1280 else if (materialName ==
"As")
1282 else if (materialName ==
"Cd")
1284 else if (materialName ==
"Te")
1287 std::cerr <<
className <<
"::SetupMaterial:\n";
1288 std::cerr <<
" Photoabsorption cross-section data for " << materialName
1289 <<
" are not implemented.\n";
1295 if (usePacsOutput) {
1296 std::ofstream pacsfile;
1297 pacsfile.open(
"heed_pacs.txt", std::ios::out);
1298 const int nValues = energyMesh->
get_q();
1300 for (
int i = 0; i < nValues; ++i) {
1301 double e = energyMesh->
get_e(i);
1302 pacsfile << 1.e6 * e <<
" ";
1303 for (
int j = 0; j < nComponents; ++j) {
1304 pacsfile << m_atPacs[j]->
get_ACS(e) <<
" " << m_atPacs[j]->
get_ICS(e)
1312 if (material != 0) {
1317 material =
new Heed::MatterDef(materialName, materialName, nComponents,
1318 notations, fractions, density, temperature);
1334bool TrackHeed::SetupDelta(
const std::string databasePath) {
1337 std::string filename = databasePath +
"cbdel.dat";
1344 filename = databasePath +
"elastic_disp.dat";
1345 if (lowSigma != 0) {
1353 const double w = matter->
W * 1.e6;
1354 const double f = matter->
F;
1355 filename = databasePath +
"delta_path.dat";
1356 if (pairProd != 0) {
DoubleAc cos(const DoubleAc &f)
DoubleAc sqrt(const DoubleAc &f)
DoubleAc sin(const DoubleAc &f)
DoubleAc fabs(const DoubleAc &f)
void check_point(gparticle *)
AbsListNode< T > * get_next_node(void) const
void increment(const T *val=NULL)
virtual double GetMassDensity() const
double GetPressure() const
virtual void GetComponent(const unsigned int &i, std::string &label, double &f)
unsigned int GetNumberOfComponents() const
virtual bool IsGas() const
double GetTemperature() const
std::string GetName() const
void MagneticField(const double x, const double y, const double z, double &bx, double &by, double &bz, int &status)
void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&medium, int &status)
bool IsInArea(const double x, const double y, const double z)
bool GetMedium(const double x, const double y, const double z, Medium *&medium)
bool GetArea(double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax)
void EnableMagneticField()
void SetEnergyMesh(const double e0, const double e1, const int nsteps)
bool GetCluster(double &xcls, double &ycls, double &zcls, double &tcls, int &n, double &e, double &extra)
void TransportDeltaElectron(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0, int &nel)
void EnableElectricField()
void DisableMagneticField()
bool GetElectron(const int i, double &x, double &y, double &z, double &t, double &e, double &dx, double &dy, double &dz)
double GetFanoFactor() const
void TransportPhoton(const double x0, const double y0, const double z0, const double t0, const double e0, const double dx0, const double dy0, const double dz0, int &nel)
double GetClusterDensity()
bool NewTrack(const double x0, const double y0, const double z0, const double t0, const double dx0, const double dy0, const double dz0)
void SetParticleUser(const double m, const double z)
void DisableElectricField()
double GetStoppingPower()
void PlotCluster(const double x0, const double y0, const double z0)
void PlotNewTrack(const double x0, const double y0, const double z0)
virtual double get_ACS(double energy) const =0
virtual double get_ICS(double energy) const =0
double quanC
Integrated (ionization) cross-section.
double get_e(long n) const
long parent_particle_number
long parent_particle_number
virtual double get_ACS(double energy) const
virtual double get_ICS(double energy) const
BlkArr< HeedCondElectron > conduction_electron_bank
void set_mass(const double m)
void set_charge(const double z)
MolecPhotoAbsCS Cs_MPACS(Caesium_PACS, 1)
particle_def pi_minus_meson_def("pi_minus_meson", "pi-", 139.56755 *MeV/c_squared, -eplus, 0, 0, 0.0, spin_def(1.0, -1.0))
particle_def pi_plus_meson_def("pi_plus_meson", "pi+", 139.56755 *MeV/c_squared, eplus, 0, 0, 0.0, spin_def(1.0, 1.0))
ExAtomPhotoAbsCS Tellurium_PACS(49, shelllist_dir_name+"shelllist.dat", pacs_table_dir_name+"Te.dat")
MolecPhotoAbsCS CF3Br_MPACS(Carbon_for_CF4_PACS, 1, Fluorine_PACS, 3, Bromine_PACS, 1)
MolecPhotoAbsCS N2_MPACS(Nitrogen_PACS, 2, 34.8e-6)
ExAtomPhotoAbsCS Silicon_crystal_PACS(14, shelllist_dir_name+"shelllist_solid.dat", pacs_table_dir_name+"Si.dat", "Si_crystal")
particle_def muon_minus_def("muon_minus", "mu-", 105.658367 *MeV/c_squared, electron_charge, 1, 0, 0.5, spin_def(0.0, 0.0))
BlkArr< HeedCluster > cluster_bank
MolecPhotoAbsCS Ne_MPACS(Neon_PACS, 1, 35.4e-6)
MolecPhotoAbsCS C5H12_MPACS(Carbon_for_C4H10_PACS, 5, Hydrogen_for_H2_PACS, 12, 23.2e-6)
MolecPhotoAbsCS CO_MPACS(Carbon_for_CO2_PACS, 1, Oxygen_PACS, 1)
long last_particle_number
particle_def alpha_particle_def("alpha_particle", "alpha", 3727.417 *MeV/c_squared, 2 *eplus, 0, 4, 0.0, spin_def(0.0, 0.0))
particle_def anti_proton_def("", "p-", proton_def)
MolecPhotoAbsCS Hg_MPACS(Mercury_PACS, 1)
MolecPhotoAbsCS SiH4_MPACS(Silicon_PACS, 1, Hydrogen_for_H2_PACS, 4)
MolecPhotoAbsCS CS2_MPACS(Carbon_for_CO2_PACS, 1, Sulfur_PACS, 2)
MolecPhotoAbsCS COS_MPACS(Carbon_for_CO2_PACS, 1, Oxygen_PACS, 1, Sulfur_PACS, 1)
particle_def deuteron_def("deuteron", "dtr", 1875.613 *MeV/c_squared, eplus, 0, 2, 0.0, spin_def(0.0, 0.0))
MolecPhotoAbsCS DME_MPACS(Carbon_for_Methylal_PACS, 2, Hydrogen_for_H2_PACS, 6, Oxygen_PACS, 1)
MolecPhotoAbsCS Xe_MPACS(Xenon_PACS, 1, 22.1e-6)
particle_def proton_def("proton", "p+", proton_mass_c2/c_squared, eplus, 0, 1, 0.5, spin_def(0.5, 0.5))
MolecPhotoAbsCS H2S_MPACS(Hydrogen_for_H2_PACS, 2, Sulfur_PACS, 1)
ExAtomPhotoAbsCS Cadmium_PACS(48, shelllist_dir_name+"shelllist.dat", pacs_table_dir_name+"Cd.dat")
MolecPhotoAbsCS F2_MPACS(Fluorine_PACS, 2)
MolecPhotoAbsCS C3H8_MPACS(Carbon_for_CH4_PACS, 3, Hydrogen_for_H2_PACS, 8, 24.0e-6)
ExAtomPhotoAbsCS Arsenic_PACS(33, shelllist_dir_name+"shelllist.dat", pacs_table_dir_name+"As.dat")
particle_def K_minus_meson_def("K_minus_meson_def", "K-", K_plus_meson_def)
const double standard_factor_Fano
MolecPhotoAbsCS C2H5OH_MPACS(Carbon_for_C2H6_PACS, 2, Hydrogen_for_H2_PACS, 6, Oxygen_PACS, 1, 24.8e-6)
MolecPhotoAbsCS O2_MPACS(Oxygen_PACS, 2, 30.8e-6)
MolecPhotoAbsCS C2H2_MPACS(Carbon_for_CH4_PACS, 2, Hydrogen_for_H2_PACS, 2, 25.8e-6)
MolecPhotoAbsCS C2H4_MPACS(Carbon_for_C2H4_PACS, 2, Hydrogen_for_H2_PACS, 4, 25.8e-6)
particle_def K_plus_meson_def("K_plus_meson_def", "K+", 493.677 *MeV/c_squared, 1, 0, 0, 0.0, spin_def(0.5, -0.5))
MolecPhotoAbsCS Ar_MPACS(Argon_PACS, 1, 26.4e-6)
MolecPhotoAbsCS CHF3_MPACS(Carbon_for_CF4_PACS, 1, Hydrogen_for_H2_PACS, 1, Fluorine_PACS, 3)
MolecPhotoAbsCS NH3_MPACS(Nitrogen_PACS, 1, Hydrogen_for_NH4_PACS, 3, 26.6e-6)
AbsList< ActivePtr< gparticle > > particle_bank
MolecPhotoAbsCS CH3OH_MPACS(Carbon_for_C2H6_PACS, 1, Hydrogen_for_H2_PACS, 4, Oxygen_PACS, 1, 24.7e-6)
MolecPhotoAbsCS C2HF5_MPACS(Carbon_for_C2H6_PACS, 2, Hydrogen_for_H2_PACS, 1, Fluorine_PACS, 5)
MolecPhotoAbsCS C4H10_MPACS(Carbon_for_C4H10_PACS, 4, Hydrogen_for_H2_PACS, 10, 23.4e-6)
MolecPhotoAbsCS CH4_MPACS(Carbon_for_CH4_PACS, 1, Hydrogen_for_CH4_PACS, 4, 27.3e-6)
MolecPhotoAbsCS SF6_MPACS(Sulfur_PACS, 1, Fluorine_PACS, 6)
particle_def user_particle_def("user_particle", "X", 139.56755 *MeV/c_squared, eplus, 0, 0, 0.0, spin_def(0.0, 0.0))
MolecPhotoAbsCS C2H2F4_MPACS(Carbon_for_C2H6_PACS, 2, Fluorine_PACS, 4, Hydrogen_for_H2_PACS, 2)
MolecPhotoAbsCS BF3_MPACS(Boron_PACS, 1, Fluorine_PACS, 3)
ExAtomPhotoAbsCS Germanium_PACS(32, shelllist_dir_name+"shelllist.dat", pacs_table_dir_name+"Ge.dat")
MolecPhotoAbsCS Kr_MPACS(Krypton_PACS, 1, 24.4e-6)
MolecPhotoAbsCS C2F6_MPACS(Carbon_for_C2H6_PACS, 2, Fluorine_PACS, 6)
MolecPhotoAbsCS C3H7OH_MPACS(Carbon_for_C2H6_PACS, 3, Hydrogen_for_H2_PACS, 8, Oxygen_PACS, 1)
MolecPhotoAbsCS CO2_MPACS(Carbon_for_CO2_PACS, 1, Oxygen_for_CO2_PACS, 2, 33.0e-6)
MolecPhotoAbsCS C2H6_MPACS(Carbon_for_C2H6_PACS, 2, Hydrogen_for_H2_PACS, 6, 25.0e-6)
MolecPhotoAbsCS He_MPACS(Helium_PACS, 1, 41.3e-6)
particle_def muon_plus_def("muon_plus", "mu+", muon_minus_def)
particle_def positron_def("positron", "e+", electron_def)
particle_def electron_def("electron", "e-", electron_mass_c2/c_squared, electron_charge, 1, 0, 0.5, spin_def(0.0, 0.0))
MolecPhotoAbsCS H2_MPACS(Hydrogen_for_H2_PACS, 2)
ExAtomPhotoAbsCS Gallium_PACS(31, shelllist_dir_name+"shelllist.dat", pacs_table_dir_name+"Ga.dat")
ExAtomPhotoAbsCS Carbon_PACS(6, shelllist_dir_name+"shelllist.dat", pacs_table_dir_name+"C.dat")
MolecPhotoAbsCS NO_MPACS(Nitrogen_PACS, 1, Oxygen_PACS, 1)
MolecPhotoAbsCS O3_MPACS(Oxygen_PACS, 3)
MolecPhotoAbsCS GeH4_MPACS(Germanium_PACS, 1, Hydrogen_for_H2_PACS, 4)
MolecPhotoAbsCS C3F8_MPACS(Carbon_for_CF4_PACS, 3, Fluorine_PACS, 8)
MolecPhotoAbsCS Methylal_MPACS(Oxygen_PACS, 2, Carbon_for_Methylal_PACS, 3, Hydrogen_for_H2_PACS, 8, 10.0e-6 *23.4/10.55)
MolecPhotoAbsCS H2O_MPACS(Hydrogen_for_H2_PACS, 2, Oxygen_PACS, 1, 29.6e-6)
MolecPhotoAbsCS CF4_MPACS(Carbon_for_CF4_PACS, 1, Fluorine_PACS, 4)
MolecPhotoAbsCS N2O_MPACS(Nitrogen_PACS, 2, Oxygen_PACS, 1, 34.8e-6)
void field_map(const point &pt, vec &Efield, vec &Hfield, vfloat &mrange)
MolecPhotoAbsCS C3H6_MPACS(Carbon_for_C2H6_PACS, 3, Hydrogen_for_H2_PACS, 6)