29 mStackEnergyCalculated(0),
32 mFitElecEffPitch{{140.0f, 200.0f, 280.0f}},
33 mFitElecEffWidth{{2.0f * mFitElecEffPitch[0] - mFitElecEffHoleDiameter, 2.0f * mFitElecEffPitch[1] - mFitElecEffHoleDiameter, 2.0f * mFitElecEffPitch[2] - mFitElecEffHoleDiameter}},
36 mFitElecEffTuneEta1{{6.78972f, 11.5214f, 18.788f}},
37 mFitElecEffTuneEta2{{6.88737f, 8.98337f, 9.90459f}},
38 mFitElecEffTuneDiffusion{{1.30061f, 1.30285f, 1.30125f}},
41 mFitAbsGainConstant{{-1.91668f, -1.95479f, -1.98842f}},
42 mFitAbsGainSlope{{0.0183423f, 0.0185194f, 0.0186415f}},
45 mFitSingleGainF0{{0.541429f, 0.549837f, 0.554301f}},
46 mFitSingleGainU0{{230.0f, 230.0f, 230.0f}},
47 mFitSingleGainQ{{0.03f, 0.03f, 0.03f}}
51 for (
int i = 0;
i <= 2; ++
i) {
52 mParamC1[
i] = getParameterC1(
i);
53 mParamC2[
i] = getParameterC2(
i);
54 mParamC3[
i] = getParameterC3(
i);
55 mParamC4[
i] = getParameterC4(
i);
56 mParamC5[
i] = getParameterC5(
i);
57 mParamC6[
i] = getParameterC6();
64 float ElecFieldGEM = (0.001 * gemPotential) / (0.0001 * mFitElecEffThickness);
65 float ElecFieldRatioAbove = elecFieldAbove / ElecFieldGEM;
67 float eta1 = mFitElecEffTuneEta1[geom] * ElecFieldRatioAbove;
68 float eta2 = mFitElecEffFieldBelow / mFitElecEffFieldGEM;
70 float paramC7Bar = getParameterC7Bar(eta1, eta2, geom);
71 float paramC8Bar = getParameterC8Bar(eta1, eta2, geom);
72 float paramC9Bar = getParameterC9Bar(eta1, eta2, geom);
74 return 2.0 * Pi * (paramC7Bar + paramC9Bar * eta1 + paramC8Bar * eta2) /
75 (mParamC1[geom] + mParamC3[geom] * eta1 + mParamC2[geom] * eta2);
81 float ElecFieldGEM = (0.001 * gemPotential) / (0.0001 * mFitElecEffThickness);
82 float ElecFieldRatioBelow = elecFieldBelow / ElecFieldGEM;
84 float eta1 = mFitElecEffFieldAbove / mFitElecEffFieldGEM;
85 float eta2 = mFitElecEffTuneEta2[geom] * ElecFieldRatioBelow;
87 float paramC7 = getParameterC7(eta1, eta2, geom);
88 float paramC8 = getParameterC8(eta1, eta2, geom);
89 float paramC9 = getParameterC9(eta1, eta2, geom);
91 return 2.0 * Pi * (paramC7 + paramC8 * eta1 + paramC9 * eta2) /
92 (std::pow(mFitElecEffTuneDiffusion[geom], 3.5) * mParamC4[geom] + mParamC5[geom] * eta1 + 1.0 / mFitElecEffTuneDiffusion[geom] * mParamC6[geom] * eta2);
98 return mAbsGainScaling * std::exp(mFitAbsGainConstant[geom] + mFitAbsGainSlope[geom] * gemPotential);
103 return mFitSingleGainF0[geom] + std::exp(-(gemPotential - mFitSingleGainU0[geom]) * mFitSingleGainQ[geom]);
108 mGeometry = geometry;
110 mPotential = potential;
111 mElectricField = electricField;
116 float PrimaryCharges = PhotonEnergy / Wi;
119 std::array<float, 4> NumElectrons;
121 const int NumOfGEMs = NumElectrons.size();
123 for (
int n = 0;
n < NumElectrons.size(); ++
n) {
124 float Attachment = 1.0 - mAttachment * mDistance[
n];
135 float Attachment = 1.0 - mAttachment * mDistance[NumOfGEMs];
136 NumElectrons[NumOfGEMs] = NumElectrons[NumOfGEMs - 1] *
getAbsoluteGain(mPotential[NumOfGEMs - 1], mGeometry[NumOfGEMs - 1]) *
getElectronExtractionEfficiency(mElectricField[NumOfGEMs], mPotential[NumOfGEMs - 1], mGeometry[NumOfGEMs - 1]) * Attachment;
138 float SigmaOverMuSquare = 0.0;
140 for (
int n = 0;
n <= NumOfGEMs - 1; ++
n) {
144 SigmaOverMuSquare += (Fano + SingleGainFluctuation) / NumElectrons[
n];
146 SigmaOverMuSquare += SingleGainFluctuation / NumElectrons[
n];
150 mStackEnergyCalculated = 1;
151 mStackEffectiveGain = NumElectrons[NumOfGEMs] / PrimaryCharges;
153 return std::sqrt(SigmaOverMuSquare);
158 if (!mStackEnergyCalculated) {
162 return mStackEffectiveGain;
165float ModelGEM::getParameterC1(
int geom)
167 return -getLambdaCathode(geom);
170float ModelGEM::getParameterC2(
int geom)
172 return -getMu2Cathode(geom);
175float ModelGEM::getParameterC3(
int geom)
177 return -getMu1Cathode(geom);
180float ModelGEM::getParameterC4(
int geom)
182 return (getMu2Top(-mFitElecEffHoleDiameter / 2.0, mFitElecEffHoleDiameter / 2.0, geom) + Pi * mFitElecEffHoleDiameter);
185float ModelGEM::getParameterC5(
int geom)
187 return -getMu2Top(-mFitElecEffHoleDiameter / 2.0, mFitElecEffHoleDiameter / 2.0, geom);
190float ModelGEM::getParameterC6()
192 return Pi * mFitElecEffHoleDiameter;
195float ModelGEM::getParameterC7(
float eta1,
float eta2,
int geom)
197 float intXStart = -(mFitElecEffWidth[geom] + mFitElecEffHoleDiameter) / 4.0;
198 float intXEnd = getIntXEndBot(eta1, eta2, geom);
201 flipDistanceNextPrevStage();
202 float result = getParameterC7BarFromX(intXStart, intXEnd, geom);
204 flipDistanceNextPrevStage();
209float ModelGEM::getParameterC8(
float eta1,
float eta2,
int geom)
211 float intXStart = -(mFitElecEffWidth[geom] + mFitElecEffHoleDiameter) / 4.0;
212 float intXEnd = getIntXEndBot(eta1, eta2, geom);
214 flipDistanceNextPrevStage();
215 float result = getParameterC8BarFromX(intXStart, intXEnd, geom);
216 flipDistanceNextPrevStage();
221float ModelGEM::getParameterC9(
float eta1,
float eta2,
int geom)
223 float intXStart = -(mFitElecEffWidth[geom] + mFitElecEffHoleDiameter) / 4.0;
224 float intXEnd = getIntXEndBot(eta1, eta2, geom);
226 flipDistanceNextPrevStage();
227 float result = getParameterC9BarFromX(intXStart, intXEnd, geom);
228 flipDistanceNextPrevStage();
233float ModelGEM::getParameterC7Bar(
float eta1,
float eta2,
int geom)
235 float intXStart = -(mFitElecEffWidth[geom] + mFitElecEffHoleDiameter) / 4.0;
236 float intXEnd = getIntXEndTop(eta1, eta2, geom);
238 return getParameterC7BarFromX(intXStart, intXEnd, geom);
241float ModelGEM::getParameterC8Bar(
float eta1,
float eta2,
int geom)
243 float intXStart = -(mFitElecEffWidth[geom] + mFitElecEffHoleDiameter) / 4.0;
244 float intXEnd = getIntXEndTop(eta1, eta2, geom);
246 return getParameterC8BarFromX(intXStart, intXEnd, geom);
249float ModelGEM::getParameterC9Bar(
float eta1,
float eta2,
int geom)
251 float intXStart = -(mFitElecEffWidth[geom] + mFitElecEffHoleDiameter) / 4.0;
252 float intXEnd = getIntXEndTop(eta1, eta2, geom);
254 return getParameterC9BarFromX(intXStart, intXEnd, geom);
257float ModelGEM::getParameterC7BarFromX(
float intXStart,
float intXEnd,
int geom)
259 return (-1.0 / (2.0 * Pi)) * (getLambdaCathode(geom) + 2.0 * getMu2Top(intXStart, intXEnd, geom));
262float ModelGEM::getParameterC8BarFromX(
float intXStart,
float intXEnd,
int geom)
264 return (-1.0 / (2.0 * Pi)) * (getMu2Cathode(geom) - 2.0 * getMu2Top(intXStart, intXEnd, geom));
267float ModelGEM::getParameterC9BarFromX(
float intXStart,
float intXEnd,
int geom)
269 return (-1.0 / (2.0 * Pi)) * (getMu1Cathode(geom) + 4.0 * Pi * (intXEnd - intXStart));
272void ModelGEM::flipDistanceNextPrevStage()
274 float mFitElecEffDistancePrevStageOld = mFitElecEffDistancePrevStage;
275 mFitElecEffDistancePrevStage = mFitElecEffDistanceNextStage;
276 mFitElecEffDistanceNextStage = mFitElecEffDistancePrevStageOld;
279float ModelGEM::getIntXEndBot(
float eta1,
float eta2,
int geom)
283 if (eta2 <= getEta2Kink1(eta1, geom)) {
284 result = -(mFitElecEffHoleDiameter + mFitElecEffWidth[geom]) / 4.0;
285 }
else if (getEta2Kink1(eta1, geom) < eta2 && eta2 < getEta2Kink2(eta1, geom)) {
286 result = -mFitElecEffPitch[geom] / 2.0 + sqrt(getHtop2(geom) * (eta1 - 1.0) * (2.0 * Pi * eta2 + getHtop0(geom) * (1.0 - eta1))) /
287 (getHtop2(geom) * (eta1 - 1.0));
289 result = -mFitElecEffHoleDiameter / 2.0;
295float ModelGEM::getIntXEndTop(
float eta1,
float eta2,
int geom)
299 if (eta1 <= getEta1Kink1(eta2, geom)) {
300 result = -(mFitElecEffHoleDiameter + mFitElecEffWidth[geom]) / 4.0;
301 }
else if (getEta1Kink1(eta2, geom) < eta1 && eta1 < getEta1Kink2(eta2, geom)) {
302 result = -mFitElecEffPitch[geom] / 2.0 + sqrt(getHtop2(geom) * (eta2 - 1.0) * (2.0 * Pi * eta1 + getHtop0(geom) * (1.0 - eta2))) /
303 (getHtop2(geom) * (eta2 - 1.0));
305 result = -mFitElecEffHoleDiameter / 2.0;
311float ModelGEM::getEta1Kink2(
float eta2,
int geom)
313 return 1.0 / (2.0 * Pi) *
314 ((mFitElecEffHoleDiameter - mFitElecEffPitch[geom]) * (mFitElecEffHoleDiameter - mFitElecEffPitch[geom]) / 4.0 * getHtop2(geom) +
319float ModelGEM::getEta1Kink1(
float eta2,
int geom)
321 return -1.0 / (2.0 * Pi) * getHtop0(geom) * (1.0 - eta2);
324float ModelGEM::getEta2Kink2(
float eta1,
int geom)
326 return 1.0 / (2.0 * Pi) *
327 ((mFitElecEffHoleDiameter - mFitElecEffPitch[geom]) * (mFitElecEffHoleDiameter - mFitElecEffPitch[geom]) / 4.0 * getHtop2(geom) +
332float ModelGEM::getEta2Kink1(
float eta1,
int geom)
334 return -1.0 / (2.0 * Pi) * getHtop0(geom) * (1.0 - eta1);
337float ModelGEM::getHtop0(
int geom)
341 for (
int n = 2;
n <= mFitElecEffNumberHoles; ++
n) {
342 result += getMu2TopFTaylorTerm0(
n, geom);
345 result += getMu2TopfTaylorTerm0(geom);
350float ModelGEM::getHtop2(
int geom)
354 for (
int n = 2;
n <= mFitElecEffNumberHoles; ++
n) {
355 result += getMu2TopFTaylorTerm2(
n, geom);
358 result += getMu2TopfTaylorTerm2(geom);
363float ModelGEM::getMu2TopfTaylorTerm2(
int geom)
365 float d = mFitElecEffThickness;
366 float L = mFitElecEffHoleDiameter;
367 float w = mFitElecEffWidth[geom];
369 return (12 * L + 4 *
w) / d / ((9 * std::pow(L, 2)) + (6 * L *
w) + 0.16e2 * std::pow(d, 0.2e1) + std::pow(
w, 2)) /
370 (std::pow(0.3e1 / 0.2e1 * L +
w / 0.2e1, 0.2e1) * std::pow(d, -0.2e1) / 0.4e1 + 0.1e1) +
371 (4 * L - 4 *
w) / d / (std::pow(L, 2) - (2 * L *
w) + 0.16e2 * std::pow(d, 0.2e1) + std::pow(
w, 2)) /
372 (std::pow(L / 0.2e1 -
w / 0.2e1, 0.2e1) * std::pow(d, -0.2e1) / 0.4e1 + 0.1e1);
375float ModelGEM::getMu2TopFTaylorTerm2(
int n,
int geom)
377 float d = mFitElecEffThickness;
378 float L = mFitElecEffHoleDiameter;
379 float w = mFitElecEffWidth[geom];
381 return -(8 * (
n - 2) * L + 8 * (
n - 1) *
w - 4 *
w - 4 * L) / d /
382 ((4 * std::pow(L, 2) * std::pow(
n, 2)) + (8 * L * std::pow(
n, 2) *
w) +
383 (4 * std::pow(
n, 2) * std::pow(
w, 2)) - (20 * std::pow(L, 2) *
n) - (32 *
n * L *
w) -
384 (12 *
n * std::pow(
w, 2)) + (25 * std::pow(L, 2)) + (30 * L *
w) + 0.16e2 * std::pow(d, 0.2e1) +
385 (9 * std::pow(
w, 2))) /
386 (std::pow(((
n - 2) * L) + ((
n - 1) *
w) -
w / 0.2e1 - L / 0.2e1, 0.2e1) * std::pow(d, -0.2e1) / 0.4e1 +
388 (8 * (
n - 2) * L + 8 * (
n - 1) *
w + 4 *
w + 4 * L) / d /
389 ((4 * std::pow(L, 2) * std::pow(
n, 2)) + (8 * L * std::pow(
n, 2) *
w) +
390 (4 * std::pow(
n, 2) * std::pow(
w, 2)) - (12 * std::pow(L, 2) *
n) - (16 *
n * L *
w) -
391 (4 *
n * std::pow(
w, 2)) + (9 * std::pow(L, 2)) + (6 * L *
w) + 0.16e2 * std::pow(d, 0.2e1) +
393 (std::pow(((
n - 2) * L) + ((
n - 1) *
w) +
w / 0.2e1 + L / 0.2e1, 0.2e1) * std::pow(d, -0.2e1) / 0.4e1 +
395 (8 *
n * L + 8 * (
n - 1) *
w - 4 *
w - 4 * L) / d /
396 ((4 * std::pow(L, 2) * std::pow(
n, 2)) + (8 * L * std::pow(
n, 2) *
w) +
397 (4 * std::pow(
n, 2) * std::pow(
w, 2)) - (4 * std::pow(L, 2) *
n) - (16 *
n * L *
w) -
398 (12 *
n * std::pow(
w, 2)) + std::pow(L, 2) + (6 * L *
w) + 0.16e2 * std::pow(d, 0.2e1) +
399 (9 * std::pow(
w, 2))) /
400 (std::pow((
n * L) + ((
n - 1) *
w) -
w / 0.2e1 - L / 0.2e1, 0.2e1) * std::pow(d, -0.2e1) / 0.4e1 + 0.1e1) +
401 (8 *
n * L + 8 * (
n - 1) *
w + 4 *
w + 4 * L) / d /
402 ((4 * std::pow(L, 2) * std::pow(
n, 2)) + (8 * L * std::pow(
n, 2) *
w) +
403 (4 * std::pow(
n, 2) * std::pow(
w, 2)) + (4 * std::pow(L, 2) *
n) - (4 *
n * std::pow(
w, 2)) +
404 std::pow(L, 2) - (2 * L *
w) + 0.16e2 * std::pow(d, 0.2e1) + std::pow(
w, 2)) /
405 (std::pow((
n * L) + ((
n - 1) *
w) +
w / 0.2e1 + L / 0.2e1, 0.2e1) * std::pow(d, -0.2e1) / 0.4e1 + 0.1e1);
408float ModelGEM::getMu2TopFTaylorTerm0(
int n,
int geom)
410 float d = mFitElecEffThickness;
411 float L = mFitElecEffHoleDiameter;
412 float w = mFitElecEffWidth[geom];
414 return std::atan((((
n - 2) * L) + ((
n - 1) *
w) -
w / 0.2e1 - L / 0.2e1) / d / 0.2e1) +
415 std::atan((((
n - 2) * L) + ((
n - 1) *
w) +
w / 0.2e1 + L / 0.2e1) / d / 0.2e1) -
416 std::atan(((
n * L) + ((
n - 1) *
w) -
w / 0.2e1 - L / 0.2e1) / d / 0.2e1) -
417 std::atan(((
n * L) + ((
n - 1) *
w) +
w / 0.2e1 + L / 0.2e1) / d / 0.2e1);
420float ModelGEM::getMu2TopfTaylorTerm0(
int geom)
422 float d = mFitElecEffThickness;
423 float L = mFitElecEffHoleDiameter;
424 float w = mFitElecEffWidth[geom];
426 return -std::atan((0.3e1 / 0.2e1 * L +
w / 0.2e1) / d / 0.2e1) - std::atan((L / 0.2e1 -
w / 0.2e1) / d / 0.2e1);
429float ModelGEM::getMu2Top(
float intXStart,
float intXEnd,
int geom)
433 for (
int n = 2;
n <= mFitElecEffNumberHoles; ++
n) {
434 result += getMu2TopF2(
n, intXStart, intXEnd, geom);
437 result += getMu2Topf2(intXStart, intXEnd);
442float ModelGEM::getMu2Topf2(
float intXStart,
float intXEnd)
444 float d = mFitElecEffThickness;
445 float L = mFitElecEffHoleDiameter;
447 return std::atan(((L - 2 * intXStart) / d) / 0.2e1) * intXStart -
448 std::atan(((L - 2 * intXStart) / d) / 0.2e1) * L / 0.2e1 +
449 d * std::log((std::pow(L, 2) - 4 * L * intXStart + 4 * std::pow(d, 2) + 4 * intXStart * intXStart)) / 0.2e1 +
450 std::atan(((L + 2 * intXStart) / d) / 0.2e1) * intXStart +
451 std::atan(((L + 2 * intXStart) / d) / 0.2e1) * L / 0.2e1 -
452 d * std::log((std::pow(L, 2) + 4 * L * intXStart + 4 * std::pow(d, 2) + 4 * intXStart * intXStart)) / 0.2e1 -
453 std::atan(((-2 * intXEnd + L) / d) / 0.2e1) * intXEnd +
454 std::atan(((-2 * intXEnd + L) / d) / 0.2e1) * L / 0.2e1 -
455 d * std::log((std::pow(L, 2) - 4 * L * intXEnd + 4 * std::pow(d, 2) + 4 * intXEnd * intXEnd)) / 0.2e1 -
456 std::atan(((2 * intXEnd + L) / d) / 0.2e1) * intXEnd - std::atan(((2 * intXEnd + L) / d) / 0.2e1) * L / 0.2e1 +
457 d * std::log((std::pow(L, 2) + 4 * L * intXEnd + 4 * std::pow(d, 2) + 4 * intXEnd * intXEnd)) / 0.2e1;
460float ModelGEM::getMu2TopF2(
int n,
float intXStart,
float intXEnd,
int geom)
462 float d = mFitElecEffThickness;
463 float L = mFitElecEffHoleDiameter;
464 float w = mFitElecEffWidth[geom];
466 return std::atan(((
n * L +
n *
w -
w + 2 * intXStart) / d) / 0.2e1) * intXStart -
467 std::atan(((
n * L +
n *
w -
w + 2 * intXStart) / d) / 0.2e1) *
w / 0.2e1 +
468 std::atan(((
n * L +
n *
w -
w - 2 * intXStart) / d) / 0.2e1) * intXStart +
469 std::atan(((
n * L +
n *
w -
w - 2 * intXStart) / d) / 0.2e1) *
w / 0.2e1 +
470 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXEnd) / d) / 0.2e1) * intXEnd -
471 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXEnd) / d) / 0.2e1) * L -
472 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXEnd) / d) / 0.2e1) *
w / 0.2e1 +
473 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXEnd) / d) / 0.2e1) * intXEnd +
474 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXEnd) / d) / 0.2e1) * L +
475 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXEnd) / d) / 0.2e1) *
w / 0.2e1 -
476 std::atan(((
n * L +
n *
w -
w + 2 * intXEnd) / d) / 0.2e1) * intXEnd +
477 std::atan(((
n * L +
n *
w -
w + 2 * intXEnd) / d) / 0.2e1) *
w / 0.2e1 -
478 std::atan(((
n * L +
n *
w -
w - 2 * intXEnd) / d) / 0.2e1) * intXEnd -
479 std::atan(((
n * L +
n *
w -
w - 2 * intXEnd) / d) / 0.2e1) *
w / 0.2e1 -
480 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXStart) / d) / 0.2e1) * intXStart +
481 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXStart) / d) / 0.2e1) * L +
482 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXStart) / d) / 0.2e1) *
w / 0.2e1 -
483 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXStart) / d) / 0.2e1) * intXStart -
484 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXStart) / d) / 0.2e1) * L -
485 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXStart) / d) / 0.2e1) *
w / 0.2e1 +
486 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXStart) / d) / 0.2e1) *
n * L / 0.2e1 +
487 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXStart) / d) / 0.2e1) *
n *
w / 0.2e1 +
488 std::atan(((
n * L +
n *
w -
w + 2 * intXStart) / d) / 0.2e1) *
n *
w / 0.2e1 +
489 std::atan(((
n * L +
n *
w -
w + 2 * intXStart) / d) / 0.2e1) *
n * L / 0.2e1 -
490 std::atan(((
n * L +
n *
w -
w - 2 * intXStart) / d) / 0.2e1) *
n * L / 0.2e1 -
491 std::atan(((
n * L +
n *
w -
w - 2 * intXStart) / d) / 0.2e1) *
n *
w / 0.2e1 +
492 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXEnd) / d) / 0.2e1) *
n * L / 0.2e1 +
493 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXEnd) / d) / 0.2e1) *
n *
w / 0.2e1 -
494 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXEnd) / d) / 0.2e1) *
n * L / 0.2e1 -
495 std::atan(((
n * L +
n *
w - 2 * L -
w - 2 * intXEnd) / d) / 0.2e1) *
n *
w / 0.2e1 -
496 std::atan(((
n * L +
n *
w -
w + 2 * intXEnd) / d) / 0.2e1) *
n * L / 0.2e1 -
497 std::atan(((
n * L +
n *
w -
w + 2 * intXEnd) / d) / 0.2e1) *
n *
w / 0.2e1 +
498 std::atan(((
n * L +
n *
w -
w - 2 * intXEnd) / d) / 0.2e1) *
n * L / 0.2e1 +
499 std::atan(((
n * L +
n *
w -
w - 2 * intXEnd) / d) / 0.2e1) *
n *
w / 0.2e1 -
500 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXStart) / d) / 0.2e1) *
n * L / 0.2e1 -
501 std::atan(((
n * L +
n *
w - 2 * L -
w + 2 * intXStart) / d) / 0.2e1) *
n *
w / 0.2e1 +
502 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 6 *
n * L *
w - 4 *
n * L * intXEnd - 2 *
n * std::pow(
w, 2) - 4 * intXEnd *
w *
n + 4 * std::pow(L, 2) + 4 * L *
w + 8 * L * intXEnd + 4 * std::pow(d, 2) + std::pow(
w, 2) + 4 * intXEnd *
w + 4 * intXEnd * intXEnd)) /
504 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 2 *
n * L *
w + 4 *
n * L * intXStart - 2 *
n * std::pow(
w, 2) + 4 *
w * intXStart *
n + 4 * std::pow(d, 2) + std::pow(
w, 2) - 4 *
w * intXStart + 4 * intXStart * intXStart)) /
506 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 2 *
n * L *
w - 4 *
n * L * intXEnd - 2 *
n * std::pow(
w, 2) - 4 * intXEnd *
w *
n + 4 * std::pow(d, 2) + std::pow(
w, 2) + 4 * intXEnd *
w + 4 * intXEnd * intXEnd)) /
508 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 6 *
n * L *
w - 4 *
n * L * intXStart - 2 *
n * std::pow(
w, 2) - 4 *
w * intXStart *
n + 4 * std::pow(L, 2) + 4 * L *
w + 8 * L * intXStart + 4 * std::pow(d, 2) + std::pow(
w, 2) + 4 *
w * intXStart + 4 * intXStart * intXStart)) /
510 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 6 *
n * L *
w + 4 *
n * L * intXStart - 2 *
n * std::pow(
w, 2) + 4 *
w * intXStart *
n + 4 * std::pow(L, 2) + 4 * L *
w - 8 * L * intXStart + 4 * std::pow(d, 2) + std::pow(
w, 2) - 4 *
w * intXStart + 4 * intXStart * intXStart)) /
512 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 6 *
n * L *
w + 4 *
n * L * intXEnd - 2 *
n * std::pow(
w, 2) + 4 * intXEnd *
w *
n + 4 * std::pow(L, 2) + 4 * L *
w - 8 * L * intXEnd + 4 * std::pow(d, 2) + std::pow(
w, 2) - 4 * intXEnd *
w + 4 * intXEnd * intXEnd)) /
514 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 2 *
n * L *
w - 4 *
n * L * intXStart - 2 *
n * std::pow(
w, 2) - 4 *
w * intXStart *
n + 4 * std::pow(d, 2) + std::pow(
w, 2) + 4 *
w * intXStart + 4 * intXStart * intXStart)) /
516 d * std::log((std::pow(L, 2) * std::pow(
n, 2) + 2 * L * std::pow(
n, 2) *
w + std::pow(
n, 2) * std::pow(
w, 2) - 2 *
n * L *
w + 4 *
n * L * intXEnd - 2 *
n * std::pow(
w, 2) + 4 * intXEnd *
w *
n + 4 * std::pow(d, 2) + std::pow(
w, 2) - 4 * intXEnd *
w + 4 * intXEnd * intXEnd)) /
520float ModelGEM::getMu1Cathode(
int geom)
524 for (
int n = 2;
n <= mFitElecEffNumberHoles; ++
n) {
525 result += getMu1CathodeF2(
n, geom);
528 result += getMu1Cathodef2(geom);
533float ModelGEM::getMu1Cathodef2(
int geom)
535 float d = mFitElecEffThickness;
536 float L = mFitElecEffHoleDiameter;
537 float w = mFitElecEffWidth[geom];
538 float g1 = mFitElecEffDistancePrevStage;
540 return -0.3e1 / 0.2e1 * L * std::atan(((3 * L +
w) / (-g1 + d)) / 0.2e1) +
541 L * std::atan(((-
w + L) / (-g1 + d)) / 0.2e1) / 0.2e1 - L * 0.3141592654e1 -
542 std::atan(((3 * L +
w) / (-g1 + d)) / 0.2e1) *
w / 0.2e1 +
543 d * std::log((9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
545 g1 * std::log((9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
547 std::atan(((-
w + L) / (-g1 + d)) / 0.2e1) *
w / 0.2e1 -
548 d * std::log((std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
550 g1 * std::log((std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
555float ModelGEM::getMu1CathodeF2(
int n,
int geom)
557 float d = mFitElecEffThickness;
558 float L = mFitElecEffHoleDiameter;
559 float w = mFitElecEffWidth[geom];
560 float g1 = mFitElecEffDistancePrevStage;
562 return -0.3e1 / 0.2e1 * L * std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (-g1 + d)) / 0.2e1) +
563 L * std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (-g1 + d)) / 0.2e1) *
n +
564 L * std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (-g1 + d)) / 0.2e1) *
n -
565 std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (-g1 + d)) / 0.2e1) *
n *
w -
566 std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (-g1 + d)) / 0.2e1) *
n *
w +
567 std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (-g1 + d)) / 0.2e1) *
n *
w +
568 std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (-g1 + d)) / 0.2e1) *
n *
w -
569 L * std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (-g1 + d)) / 0.2e1) *
n +
570 0.5e1 / 0.2e1 * L * std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (-g1 + d)) / 0.2e1) -
571 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 20 * std::pow(L, 2) *
n - 32 *
n * L *
w - 12 *
n * std::pow(
w, 2) + 25 * std::pow(L, 2) + 30 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
573 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 20 * std::pow(L, 2) *
n - 32 *
n * L *
w - 12 *
n * std::pow(
w, 2) + 25 * std::pow(L, 2) + 30 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
575 L * std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (-g1 + d)) / 0.2e1) / 0.2e1 +
576 std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (-g1 + d)) / 0.2e1) *
w / 0.2e1 +
577 0.3e1 / 0.2e1 * std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (-g1 + d)) / 0.2e1) *
w -
578 std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (-g1 + d)) / 0.2e1) *
w / 0.2e1 -
579 0.3e1 / 0.2e1 * std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (-g1 + d)) / 0.2e1) *
w +
580 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 16 *
n * L *
w - 12 *
n * std::pow(
w, 2) + std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
582 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 16 *
n * L *
w - 12 *
n * std::pow(
w, 2) + std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
584 L * std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (-g1 + d)) / 0.2e1) *
n -
585 L * std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (-g1 + d)) / 0.2e1) / 0.2e1 -
586 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) + 4 * std::pow(L, 2) *
n - 4 *
n * std::pow(
w, 2) + std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
588 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) + 4 * std::pow(L, 2) *
n - 4 *
n * std::pow(
w, 2) + std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
590 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 12 * std::pow(L, 2) *
n - 16 *
n * L *
w - 4 *
n * std::pow(
w, 2) + 9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
592 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 12 * std::pow(L, 2) *
n - 16 *
n * L *
w - 4 *
n * std::pow(
w, 2) + 9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) - 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
596float ModelGEM::getMu2Cathode(
int geom)
600 for (
int n = 2;
n <= mFitElecEffNumberHoles; ++
n) {
601 result += getMu2CathodeF2(
n, geom);
604 result += getMu2Cathodef2(geom);
609float ModelGEM::getMu2Cathodef2(
int geom)
611 float d = mFitElecEffThickness;
612 float L = mFitElecEffHoleDiameter;
613 float w = mFitElecEffWidth[geom];
614 float g1 = mFitElecEffDistancePrevStage;
616 return -0.3e1 / 0.2e1 * L * std::atan(((3 * L +
w) / (d + g1)) / 0.2e1) +
617 L * std::atan(((-
w + L) / (d + g1)) / 0.2e1) / 0.2e1 -
618 std::atan(((3 * L +
w) / (d + g1)) / 0.2e1) *
w / 0.2e1 +
619 d * std::log((9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
621 g1 * std::log((9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
623 std::atan(((-
w + L) / (d + g1)) / 0.2e1) *
w / 0.2e1 -
624 d * std::log((std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
626 g1 * std::log((std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
630float ModelGEM::getMu2CathodeF2(
int n,
int geom)
632 float d = mFitElecEffThickness;
633 float L = mFitElecEffHoleDiameter;
634 float w = mFitElecEffWidth[geom];
635 float g1 = mFitElecEffDistancePrevStage;
637 return -L * std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (d + g1)) / 0.2e1) *
n +
638 L * std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (d + g1)) / 0.2e1) *
n -
639 std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (d + g1)) / 0.2e1) *
n *
w +
640 std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (d + g1)) / 0.2e1) *
n *
w -
641 std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (d + g1)) / 0.2e1) *
n *
w +
642 std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (d + g1)) / 0.2e1) *
n *
w +
643 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) + 4 * std::pow(L, 2) *
n - 4 *
n * std::pow(
w, 2) + std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
645 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) + 4 * std::pow(L, 2) *
n - 4 *
n * std::pow(
w, 2) + std::pow(L, 2) - 2 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
647 L * std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (d + g1)) / 0.2e1) *
n -
648 L * std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (d + g1)) / 0.2e1) / 0.2e1 +
649 0.3e1 / 0.2e1 * std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (d + g1)) / 0.2e1) *
w -
650 std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (d + g1)) / 0.2e1) *
w / 0.2e1 +
651 std::atan(((2 *
n * L + 2 *
n *
w + L -
w) / (d + g1)) / 0.2e1) *
w / 0.2e1 -
652 0.3e1 / 0.2e1 * std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (d + g1)) / 0.2e1) *
w +
653 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 20 * std::pow(L, 2) *
n - 32 *
n * L *
w - 12 *
n * std::pow(
w, 2) + 25 * std::pow(L, 2) + 30 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
655 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 20 * std::pow(L, 2) *
n - 32 *
n * L *
w - 12 *
n * std::pow(
w, 2) + 25 * std::pow(L, 2) + 30 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
657 L * std::atan(((2 *
n * L + 2 *
n *
w - L - 3 *
w) / (d + g1)) / 0.2e1) / 0.2e1 +
658 0.5e1 / 0.2e1 * L * std::atan(((2 *
n * L + 2 *
n *
w - 5 * L - 3 *
w) / (d + g1)) / 0.2e1) -
659 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 16 *
n * L *
w - 12 *
n * std::pow(
w, 2) + std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
661 L * std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (d + g1)) / 0.2e1) *
n -
662 0.3e1 / 0.2e1 * L * std::atan(((2 *
n * L + 2 *
n *
w - 3 * L -
w) / (d + g1)) / 0.2e1) -
663 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 4 * std::pow(L, 2) *
n - 16 *
n * L *
w - 12 *
n * std::pow(
w, 2) + std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + 9 * std::pow(
w, 2))) /
665 d * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 12 * std::pow(L, 2) *
n - 16 *
n * L *
w - 4 *
n * std::pow(
w, 2) + 9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
667 g1 * std::log((4 * std::pow(L, 2) * std::pow(
n, 2) + 8 * L * std::pow(
n, 2) *
w + 4 * std::pow(
n, 2) * std::pow(
w, 2) - 12 * std::pow(L, 2) *
n - 16 *
n * L *
w - 4 *
n * std::pow(
w, 2) + 9 * std::pow(L, 2) + 6 * L *
w + 4 * std::pow(d, 2) + 8 * g1 * d + 4 * std::pow(g1, 2) + std::pow(
w, 2))) /
671float ModelGEM::getLambdaCathode(
int geom)
675 for (
int n = 2;
n <= mFitElecEffNumberHoles; ++
n) {
676 result += getLambdaCathodeF2(
n, geom);
679 result += getLambdaCathodef2(geom);
684float ModelGEM::getLambdaCathodef2(
int geom)
686 float d = mFitElecEffThickness;
687 float L = mFitElecEffHoleDiameter;
688 float w = mFitElecEffWidth[geom];
689 float g1 = mFitElecEffDistancePrevStage;
691 return -d * std::log(0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
693 g1 * std::log(0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
695 std::atan((-
w + L) / (-g1 + d) / 0.2e1) *
w / 0.2e1 +
696 0.3e1 / 0.2e1 * L * std::atan((0.3e1 * L +
w) / (d + g1) / 0.2e1) +
697 0.3e1 / 0.2e1 * L * std::atan((0.3e1 * L +
w) / (-g1 + d) / 0.2e1) -
698 d * std::log(0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
700 g1 * std::log(0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
702 L * std::atan((-
w + L) / (d + g1) / 0.2e1) / 0.2e1 +
703 std::atan((0.3e1 * L +
w) / (d + g1) / 0.2e1) *
w / 0.2e1 -
704 L * std::atan((-
w + L) / (-g1 + d) / 0.2e1) / 0.2e1 +
705 d * std::log(std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
707 g1 * std::log(std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
709 std::atan((0.3e1 * L +
w) / (-g1 + d) / 0.2e1) *
w / 0.2e1 +
710 std::atan((-
w + L) / (d + g1) / 0.2e1) *
w / 0.2e1 +
711 d * std::log(std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
713 g1 * std::log(std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
717float ModelGEM::getLambdaCathodeF2(
int n,
int geom)
719 float d = mFitElecEffThickness;
720 float L = mFitElecEffHoleDiameter;
721 float w = mFitElecEffWidth[geom];
722 float g1 = mFitElecEffDistancePrevStage;
724 return -d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) + 0.4e1 * std::pow(L, 0.2e1) *
n - 0.4e1 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
726 g1 * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) + 0.4e1 * std::pow(L, 0.2e1) *
n - 0.4e1 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
728 0.3e1 / 0.2e1 * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (d + g1) / 0.2e1) *
w +
729 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (d + g1) / 0.2e1) *
w / 0.2e1 -
730 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (d + g1) / 0.2e1) *
w / 0.2e1 +
731 0.3e1 / 0.2e1 * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (d + g1) / 0.2e1) *
w -
732 d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.20e2 * std::pow(L, 0.2e1) *
n - 0.32e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + 0.25e2 * std::pow(L, 0.2e1) + 0.30e2 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
734 g1 * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.20e2 * std::pow(L, 0.2e1) *
n - 0.32e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + 0.25e2 * std::pow(L, 0.2e1) + 0.30e2 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
736 g1 * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.4e1 * std::pow(L, 0.2e1) *
n - 0.16e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
738 d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.4e1 * std::pow(L, 0.2e1) *
n - 0.16e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
740 d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.12e2 * std::pow(L, 0.2e1) *
n - 0.16e2 *
n * L *
w - 0.4e1 *
n * std::pow(
w, 0.2e1) + 0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
743 std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w +
744 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.12e2 * std::pow(L, 0.2e1) *
n -
745 0.16e2 *
n * L *
w - 0.4e1 *
n * std::pow(
w, 0.2e1) + 0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w +
746 0.4e1 * std::pow(d, 0.2e1) + 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
748 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (-g1 + d) / 0.2e1) / 0.2e1 +
749 0.3e1 / 0.2e1 * L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (-g1 + d) / 0.2e1) -
750 0.5e1 / 0.2e1 * L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) +
751 g1 * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.20e2 * std::pow(L, 0.2e1) *
n - 0.32e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + 0.25e2 * std::pow(L, 0.2e1) + 0.30e2 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
753 d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.20e2 * std::pow(L, 0.2e1) *
n - 0.32e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + 0.25e2 * std::pow(L, 0.2e1) + 0.30e2 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
755 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (-g1 + d) / 0.2e1) *
w / 0.2e1 -
756 0.3e1 / 0.2e1 * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) *
w +
757 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (-g1 + d) / 0.2e1) *
w / 0.2e1 +
758 0.3e1 / 0.2e1 * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) *
w -
759 g1 * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.4e1 * std::pow(L, 0.2e1) *
n - 0.16e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
761 d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.4e1 * std::pow(L, 0.2e1) *
n - 0.16e2 *
n * L *
w - 0.12e2 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + 0.9e1 * std::pow(
w, 0.2e1)) /
763 g1 * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) + 0.4e1 * std::pow(L, 0.2e1) *
n - 0.4e1 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
765 d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) + 0.4e1 * std::pow(L, 0.2e1) *
n - 0.4e1 *
n * std::pow(
w, 0.2e1) + std::pow(L, 0.2e1) - 0.2e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
768 std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w +
769 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.12e2 * std::pow(L, 0.2e1) *
n -
770 0.16e2 *
n * L *
w - 0.4e1 *
n * std::pow(
w, 0.2e1) + 0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w +
771 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
773 d * std::log(0.4e1 * std::pow(L, 0.2e1) * std::pow(
n, 0.2e1) + 0.8e1 * L * std::pow(
n, 0.2e1) *
w + 0.4e1 * std::pow(
n, 0.2e1) * std::pow(
w, 0.2e1) - 0.12e2 * std::pow(L, 0.2e1) *
n - 0.16e2 *
n * L *
w - 0.4e1 *
n * std::pow(
w, 0.2e1) + 0.9e1 * std::pow(L, 0.2e1) + 0.6e1 * L *
w + 0.4e1 * std::pow(d, 0.2e1) - 0.8e1 * g1 * d + 0.4e1 * std::pow(g1, 0.2e1) + std::pow(
w, 0.2e1)) /
775 0.5e1 / 0.2e1 * L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (d + g1) / 0.2e1) +
776 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (d + g1) / 0.2e1) / 0.2e1 +
777 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (d + g1) / 0.2e1) / 0.2e1 +
778 0.3e1 / 0.2e1 * L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (d + g1) / 0.2e1) +
779 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) / 0.2e1 +
780 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) *
n *
w -
781 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (d + g1) / 0.2e1) *
n *
w +
782 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (-g1 + d) / 0.2e1) *
n *
w -
783 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) *
n -
784 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (d + g1) / 0.2e1) *
n +
785 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (-g1 + d) / 0.2e1) *
n +
786 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) *
n -
787 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (-g1 + d) / 0.2e1) *
n *
w +
788 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (d + g1) / 0.2e1) *
n *
w -
789 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (-g1 + d) / 0.2e1) *
n *
w -
790 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (-g1 + d) / 0.2e1) *
n -
791 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - L - 0.3e1 *
w) / (d + g1) / 0.2e1) *
n *
w +
792 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (d + g1) / 0.2e1) *
n +
793 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.5e1 * L - 0.3e1 *
w) / (d + g1) / 0.2e1) *
n +
794 std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w + L -
w) / (d + g1) / 0.2e1) *
n *
w -
795 L * std::atan((0.2e1 *
n * L + 0.2e1 *
n *
w - 0.3e1 * L -
w) / (d + g1) / 0.2e1) *
n;
Definition for the model calculations + simulations of the GEM efficiencies.
void setStackProperties(const std::array< int, 4 > &geometry, const std::array< float, 5 > &distance, const std::array< float, 4 > &potential, const std::array< float, 5 > &electricField)
float getStackEffectiveGain()
Calculate the total effective gain for a given GEM stack (defined with setStackProperties)
float getSingleGainFluctuation(float gemPotential, int geom)
float getAbsoluteGain(float gemPotential, int geom)
float getStackEnergyResolution()
Calculate the energy resolution for a given GEM stack (defined with setStackProperties)
float getElectronExtractionEfficiency(float elecFieldBelow, float gemPotential, int geom)
float getElectronCollectionEfficiency(float elecFieldAbove, float gemPotential, int geom)
GLsizei GLsizei GLfloat distance
GLubyte GLubyte GLubyte GLubyte w
Global TPC definitions and constants.