37#include <b2bii/modules/B2BIIMdstInput/B2BIIFixMdstModule.h>
38#include "belle_legacy/panther/panther.h"
46#include "CLHEP/Vector/ThreeVector.h"
48#include "belle_legacy/tables/mdst.h"
49#include "belle_legacy/tables/belletdf.h"
67 Belle::Belle_event_Manager& evtmgr = Belle::Belle_event_Manager::get_manager();
68 if (evtmgr.count() == 0)
return;
70 Belle::Mdst_event_add_Manager& addmgr = Belle::Mdst_event_add_Manager::get_manager();
71 if (addmgr.count() == 0)
return;
72 if (addmgr[0].flag(4) != 0)
return;
75 if (mode < 0 || mode > 2) {
76 B2ERROR(
"shift_tof: invalid mode specified;");
77 B2ERROR(
"mode must be 0, 1, 2");
81 int expmc = evtmgr[0].ExpMC();
82 int expno = evtmgr[0].ExpNo();
83 int runno = evtmgr[0].RunNo();
85 if (expmc == 2)
return;
91 Belle::Mdst_charged_Manager& ChgMgr = Belle::Mdst_charged_Manager::get_manager();
92 for (std::vector<Belle::Mdst_charged>::iterator it = ChgMgr.begin();
93 it != ChgMgr.end(); ++it) {
94 Belle::Mdst_charged& Chg = *it;
97 Belle::Mdst_tof& Tof = Chg.tof();
100 TVector3 Mom(Chg.px(), Chg.py(), Chg.pz());
101 double pmom = Mom.Mag();
102 double sgn = Chg.charge();
104 for (
int im = 0; im < 5; im++) {
107 if (fabs(shift) < .005)
continue;
108 double ot = Tof.tof_exp(im);
109 double odt = ot - Tof.tof();
110 double opid = Tof.pid(im);
112 int ndf = (int)(Tof.ndf(im) + .001);
113 if (opid > 0. && opid < 1.) {
114 double ct = ot + shift;
115 double cdt = ct - Tof.tof();
116 double err = fabs(odt) /
sqrt(-2.*log(opid));
117 double cch = pow(cdt / err, 2);
118 double cpid = exp(-.5 * cch);
119 double ccl = TMath::Prob(cch, ndf);
130 const int mode,
const int im,
131 const double pmom,
const double sgn,
134 static const double m[5] = {.000511, .10566, .13957, .49368, .93827};
136 double beta = pmom /
sqrt(pmom * pmom + m[im] * m[im]);
142 if (runno < 536) shift = 0.;
143 else if (runno < 1440) shift = .5054 - .5216 * std::min(beta, .955);
144 else shift = .8321 - .8648 * std::min(beta, .96);
147 if (runno < 536) shift = -.0414 * exp(-pow(beta - .538, 2) / .0569);
148 else if (runno < 1440) shift = -12.3 * exp(-pow(beta + .288, 2) / .1197);
153 shift = -.876 * exp(-pow(beta + .1818, 2) / .1947);
156 shift = .01 - .1028 * exp(-pow(beta - .4454, 2) / .00272);
157 else shift = .01 - .064 * exp(-pow(beta - .4273, 2) / .00317);
171 shift = 1.089 - 1.131 * std::min(beta, .955);
174 if (sgn > 0.) shift = -.876 * exp(-pow(beta + .1818, 2) / .1947);
175 else shift = .01 - .1028 * exp(-pow(beta - .4454, 2) / .00272);
189 if (sgn > 0.) shift = -.0183 * exp(-pow(beta - .911, 2) / .00161);
192 shift = -6.6 * exp(-beta / .1);
195 if (sgn > 0.) shift = -.736 * exp(-pow(beta + .04158, 2) / .119);
196 else shift = .02 - .1475 * exp(-pow(beta - .4267, 2) / .00249);
208 if (sgn > 0.) shift = -.3259 * exp(-pow(beta - .1042, 2) / .0817);
209 else shift = .02 - .1475 * exp(-pow(beta - .4267, 2) / .00249);
void shift_tof(const int mode)
Shift tof times to account for residuals.
void shift_tof_set(const int expno, const int runno, const int mode, const int im, const double pmom, const double sgn, double &shift)
Return time shifts for different exp.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.