17 from 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)
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]
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]
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)