17from CoolLumiUtilities.LumiBlobConversion
import bConvertList
63 for i
in range(last+1, n+1):
70 self.
nPar = calibPayload[
'NumOfParameters']
71 self.
fType = calibPayload[
'Function']
72 self.
muToLumi = calibPayload[
'MuToLumi']
73 blob = calibPayload[
'Parameters']
78 print(
'LumiCalibrator.setCalibration for %s found %d parameters: ' % (self.
fType, self.
nPar))
84 polyPos = algname.find(
"_PolyCorr")
85 currPos = algname.find(
"_CurrCorr")
87 if polyPos > 0
and currPos > 0:
88 algname = algname[:-18]
89 elif polyPos > 0
or currPos > 0:
90 algname = algname[:-9]
93 print(
'LumiCalibrator.setCalibration - Found poly: %d curr: %d' % (polyPos, currPos))
98 print(
'LumiCalibrator.setCalibration - reading polynomial from', self.
parVec[-4:-1])
115 print(
'LumiCalibrator.setCalibration - found %d parameters in %s' % (npar, algname))
116 print(
'LumiCalibrator.setCalibration - reading current vers %d from position %d' % (self.
currVersion, npar))
134 elif currPos > polyPos:
142 print(
'LumiCalibrator.setCalibration - found %d parameters in %s' % (npar, algname))
149 print(
'LumiCalibrator.setCalibration - reading current vers %d from position %d' % (self.
currVersion, npar))
169 print(
'LumiCalibrator.setCalibration - reading polynomial from list' , self.
parVec[-4:])
183 if currPayload
is None:
187 self.
currentA = currPayload[
'CurrentSideA']
188 self.
currentC = currPayload[
'CurrentSideC']
197 if self.
fType ==
'Logarithm':
200 elif self.
fType ==
'LookupTable_EventAND_Lin':
212 print(
'LumiCalibrator.calibrate(%f) - non-physical value!' % rawLumi)
216 elif (rawLumi == 0.):
220 calibstr = self.
fType
222 if calibstr.find(
'Polynomial') == 0:
226 elif calibstr.find(
'Logarithm') == 0:
230 elif calibstr.find(
'HitLogarithm') == 0:
234 elif calibstr.find(
'LookupTable_EventAND_Lin') == 0:
238 except Exception
as e:
241 print(
'LumiCalibrator.calibLookupTable(%f) - Error: %s' % (rawLumi, e))
243 elif calibstr.find(
'LookupTable_EventAND_Log') == 0:
247 except Exception
as e:
250 print(
'LumiCalibrator.calibLookupTableLog(%f) - Error: %s' % (rawLumi, e))
252 elif calibstr.find(
'LookupTable_EventANDFull_Log') == 0:
256 except Exception
as e:
259 print(
'LumiCalibrator.calibLookupTableFullLog(%f) - Error: %s' % (rawLumi, e))
261 elif calibstr.find(
'LookupTablePoisson_Lin') == 0:
265 except Exception
as e:
268 print(
'LumiCalibrator.calibLookupTablePoisson(%f) - Error: %s' % (rawLumi, e))
270 elif calibstr.find(
'LookupTableZeroPoisson_Lin') == 0:
274 except Exception
as e:
277 print(
'LumiCalibrator.calibLookupTableZeroPoisson(%f) - Error: %s' % (rawLumi, e))
280 print(
'LumiCalibrator.calibrate(%f) - Unknown calibration type %s!' % (rawLumi, self.
fType))
288 polyPos = calibstr.find(
"_PolyCorr")
289 currPos = calibstr.find(
"_CurrCorr")
292 if polyPos == -1
and currPos == -1:
295 elif polyPos == -1
and currPos > 0:
298 elif polyPos > 0
and currPos == -1:
301 elif polyPos < currPos:
305 elif currPos < polyPos:
310 print(
'LumiCalibrator.calibrate() - I am so confused: %s' % calibstr)
329 print(
'LumiCalibrator.currentCorrection() - unknown current type: %d' % self.
currType)
338 print(
'LumiCalibrator.currentCorrection() - invalid LUCID currents found - A: %f C: %f' % (self.
currentA, self.
currentC))
369 print(
'LumiCalibrator.currentCorrection() - unknown calibration version %d' % self.
currVersion)
372 print(
'LumiCalibrator.currentCorrection() - version %d -> currentA = %f, currentC = %f, correction = %f' % (self.
currVersion, self.
currentA, self.
currentC, correction))
389 print(
'LumiCalibrator.polyCorrection() - unknown calibration version %d' % self.
polyVersion)
397 nrange = int(self.
parVec[0])
400 for i
in range(nrange):
403 if rawLumi < rmax
and rawLumi >= rmin:
405 a.append(self.
parVec[i+4])
406 a.append(self.
parVec[i+5])
407 a.append(self.
parVec[i+6])
408 a.append(self.
parVec[i+7])
409 a.append(self.
parVec[i+8])
411 cal += a[k]*
pow(rawLumi, k)
417 print(
'LumiCalibrator.calibPolynomial(%f) - Value out of range' % rawLumi)
431 cal = -invEff*math.log(1.-rawLumi)
438 print(
'LumiCalibrator.calibLogarithm(%f) - Unphysical input!' % rawLumi)
449 maxRawLumiperBX = self.
parVec[3]
454 if rawLumi > maxRawLumiperBX:
456 print(
'LumiCalibrator.calibHitLogarithm(%f) - input greater than max range %f!' % (rawLumi, maxRawLumiperBX))
460 cal = -invEff*math.log(1.-rawLumi/channels)/(1-offset)
465 print(
'LumiCalibrator.calibHitLogarithm(%f) - Unphysical input!' % rawLumi)
478 print(
'LumiCalibrator.calibLookupTable(%f) - Unphysical input to LUT!' % rawLumi)
498 if (rawLumi < 0.)
or (rawLumi >= 1.):
500 print(
'LumiCalibrator.calibLookupTableLog(%f) - Unphysical input to LUT!' % rawLumi)
528 y = 1 - 2 * math.exp(-a * mu) + math.exp(-b * mu)
529 dy = 2 * a * math.exp(-a * mu) - b * math.exp(-b * mu)
531 munew = mu - (y-rawPerBX)/dy
537 if math.fabs(munew-mu)/munew < 1.e-5:
542 print(
'LumiCalibrator.calibLookupTable(', rawPerBX,
') - did not converge (Vincent method)!')
551 rbxl=self.
rpbx(sr,muvl)
552 rbxu=self.
rpbx(sr,muvu)
553 rbxm=self.
rpbx(sr,muvm)
559 if rawPerBX < rbxl
or rawPerBX > rbxu:
560 print(
'LumiCalibrator.calibLookupTable(', rawPerBX,
') - raw lumi value outside of LUT range', rbxl,
'to', rbxu,
'!')
565 if rbxl<rawPerBX
and rbxm>rawPerBX:
574 rbxm = self.
rpbx(sr, muvm)
576 if (muvu-muvl)/muvl < 1e-5:
581 print(
'LumiCalibrator.calibLookupTable(', rawPerBX,
') - did not converge (Mika method)!')
585 return 1 - 2*math.exp(-(1+sr)*muvis/2) + math.exp(-sr*muvis)
594 if (rawLumi < 0.)
or (rawLumi >= 1.):
596 print(
'LumiCalibrator.calibLookupTableFullLog(%f) - Unphysical input to LUT!' % rawLumi)
627 y = 1 - math.exp(-ra * mu) - math.exp(-rc * mu) + math.exp(-b * mu)
628 dy = ra * math.exp(-ra * mu) + rc * math.exp(-rc * mu) - b * math.exp(-b * mu)
630 munew = mu - (y-rawPerBX)/dy
636 if math.fabs(munew-mu)/munew < 1.e-5:
641 print(
'LumiCalibrator.calibLookupTable(', rawPerBX,
') - did not converge (Vincent method)!')
661 if rawPerBX < rbxl
or rawPerBX > rbxu:
662 print(
'LumiCalibrator.calibLookupTable(', rawPerBX,
') - raw lumi value outside of LUT range', rbxl,
'to', rbxu,
'!')
667 if rbxl<rawPerBX
and rbxm>rawPerBX:
676 rbxm = self.
rpbxFull(ra, rc, sr, muvm)
678 if (muvu-muvl)/muvl < 1e-5:
683 print(
'LumiCalibrator.calibLookupTable(', rawPerBX,
') - did not converge (Mika method)!')
687 return 1 - math.exp(-ra*muvis) - math.exp(-rc*muvis) + math.exp(-sr*muvis)
693 maxRawLumiperBX = self.
parVec[1]
696 nRefs = int(self.
parVec[4])
704 if rawLumi > maxRawLumiperBX:
705 print(
'LumiCalibrator.calibLookupTablePoisson(%f) - input greater than max range %f!' % (rawLumi, maxRawLumiperBX))
720 for j
in range(nRefs):
730 munew = mu - (y-rawLumi/math.exp(-mu))/dy
735 print(
'LumiCalibrator.calibLookupTablePoisson(%f) - failed to converge (went negative)!'% (rawLumi))
738 if math.fabs(munew-mu)/munew < 1.e-5:
740 return cal/(1-offset)
743 print(
'LumiCalibrator.calibLookupTablePoisson(%f) - failed to converge (trials)!'% (rawLumi))
744 return cal/(1-offset)
750 maxRawLumiperBX = self.
parVec[1]
753 nRefs = int(self.
parVec[4])
761 if rawLumi > maxRawLumiperBX:
762 print(
'LumiCalibrator.calibLookupTableZeroPoisson(%f) - input greater than max range %f!' % (rawLumi, maxRawLumiperBX))
776 for j
in range(nRefs):
786 munew = mu - (y-zRate/math.exp(-mu))/dy
790 print(
'LumiCalibrator.calibLookupTableZeroPoisson(%f) - failed to converge (negative)!'% (rawLumi))
794 if math.fabs(munew-mu)/munew < 1.e-5:
796 return cal/(1-offset)
798 print(
'LumiCalibrator.calibLookupTableZeroPoisson(%f) - failed to converge (trials)!'% (rawLumi))
799 return cal/(1-offset)
void print(char *figname, TCanvas *c1)
constexpr int pow(int base, int exp) noexcept
rpbxFull(self, ra, rc, sr, muvis)
setLucidCurrent(self, currPayload)
calibLogarithm(self, rawLumi)
getMuvisFull2(self, rawPerBX, sigA, sigC, sigAND)
getMuvis2(self, rawPerBX, sigo, siga)
calibLookupTable(self, rawLumi)
calibLookupTableFullLog(self, rawLumi)
getMuvis(self, rawPerBX, sigo, siga)
calibLookupTableZeroPoisson(self, rawLumi)
calibHitLogarithm(self, rawLumi)
calibPolynomial(self, rawLumi)
calibLookupTablePoisson(self, rawLumi)
calibLookupTableLog(self, rawLumi)
currentCorrection(self, mu)
getMuvisFull(self, rawPerBX, sigA, sigC, sigAND)
setCalibration(self, calibPayload)