14#include <FairTrackParam.h>
107 for (
int i = 0, k = 0; i < 3; i++)
108 for (
int j = 0; j <= i; j++, k++)
120 for (
int i = 0, k = 0; i < 3; i++)
121 for (
int j = 0; j <= i; j++, k++)
128 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
138 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
142 LOG(fatal) <<
" CbmTofTracklet::GetFirstInd, did only find " << iAddr;
183 double dZ = pHit->
GetZ();
185 if (pHit->
GetZ() <
fhit[0].GetZ()) dSign = -1;
187 LOG(debug) << Form(
"GetTex Bmon %7.3f, Z %7.1f, DZ %5.1f, Sign %2.0f, Tt %7.4f => Tex %7.3f, ",
fhit[0].
GetTime(), dZ,
188 dZ -
fhit[0].GetZ(), dSign,
fTt, dTex)
196 int32_t nValidHits = 0;
203 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
205 if (nValidHits == 0) {
213 if (
fhit[iHit].GetZ() <
fhit[iHit1].GetZ()) dSign = -1.;
214 aR[nValidHits] = dDist1 + dSign *
Dist3D(&
fhit[iHit], &
fhit[iHit1]);
215 at[nValidHits] =
fhit[iHit].GetTime();
216 ae[nValidHits] = 0.1;
263 double sig_weight = 0;
265 (
fTofHit.size() > 0) ? (at[0] - 10) : 0.;
267 for (int32_t i = 0; i < nValidHits; i++) {
269 sig_weight = (ae[i] * ae[i]);
270 Rsum += (aR[i] / sig_weight);
271 tsum += (at[i] / sig_weight);
272 RRsum += (aR[i] * aR[i] / sig_weight);
273 Rtsum += (aR[i] * at[i] / sig_weight);
274 esum += (1 / sig_weight);
279 fT0 = (RRsum * tsum - Rsum * Rtsum) / det_cov_mat;
280 fTt = (-Rsum * tsum + esum * Rtsum) / det_cov_mat;
289 LOG(debug) << Form(
"Trkl size %u, validHits %d, Tt = %6.4f TtErr = %2.4f Bmon "
290 "= %6.2f BmonErr = %2.2f BmonTtCov = %6.4f",
300 for (uint32_t iHL = 0; iHL <
fhit.size() - 1; iHL++) {
302 for (uint32_t iHH = iHL + 1; iHH <
fhit.size(); iHH++) {
306 / (
fhit[iHH].GetR() -
fhit[iHL].GetR());
312 LOG(warning) <<
"No valid hit pair ";
315 fTt = dTt / (double) iNt;
326 for (uint32_t iHL = 0; iHL <
fhit.size() - 1; iHL++) {
328 for (uint32_t iHH = iHL + 1; iHH <
fhit.size(); iHH++) {
331 dTx += (
fhit[iHH].GetX() -
fhit[iHL].GetX()) / (
fhit[iHH].GetZ() -
fhit[iHL].GetZ());
342 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
345 double dDZ = pHit->
GetZ() -
fhit[iHit].GetZ();
346 dXref +=
fhit[iHit].GetX() + dTx * dDZ;
351 LOG(error) <<
"DetId " << iDetId <<
", Nref " << iNref <<
" sizes " <<
fTofHit.size() <<
", " <<
fhit.size();
357 return pHit->
GetX() - dXref;
367 for (uint32_t iHL = 0; iHL <
fhit.size() - 1; iHL++) {
369 for (uint32_t iHH = iHL + 1; iHH <
fhit.size(); iHH++) {
371 dTy += (
fhit[iHH].GetY() -
fhit[iHL].GetY()) / (
fhit[iHH].GetZ() -
fhit[iHL].GetZ());
382 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
385 double dDZ = pHit->
GetZ() -
fhit[iHit].GetZ();
386 dYref +=
fhit[iHit].GetY() + dTy * dDZ;
391 LOG(error) <<
"DetId " << iDetId <<
", Nref " << iNref <<
" sizes " <<
fTofHit.size() <<
", " <<
fhit.size();
397 return pHit->
GetY() - dYref;
408 for (uint32_t iHL = 0; iHL <
fhit.size() - 1; iHL++) {
410 for (uint32_t iHH = iHL + 1; iHH <
fhit.size(); iHH++) {
414 sqrt(pow((
fhit[iHH].GetX() -
fhit[iHL].GetX()), 2) + pow((
fhit[iHH].GetY() -
fhit[iHL].GetY()), 2)
415 + pow((
fhit[iHH].GetZ() -
fhit[iHL].GetZ()), 2));
417 if (
fhit[iHH].GetZ() <
fhit[iHL].GetZ()) dSign = -1.;
424 LOG(error) <<
"No valid hit pair ";
433 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
437 if (
fhit[iHit].GetZ() < pHit->
GetZ()) dSign = -1;
438 dTref +=
fhit[iHit].GetTime() - dTt * dSign *
Dist3D(&
fhit[iHit], pHit);
442 LOG(error) <<
"DetId " << iDetId <<
", Nref " << Nref <<
" sizes " <<
fTofHit.size() <<
", " <<
fhit.size();
445 dTref /= (double) Nref;
446 double dTdif = pHit->
GetTime() - dTref;
454 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
455 int32_t iHaddr =
fhit[iHit].GetAddress() & 0x003FFFFF;
461 if (iHaddr == iAddr)
return true;
468 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
469 if ((
fhit[iHit].GetAddress() & 0x003FFFFF) == iAddr)
return iHit;
476 for (uint32_t iHit = 0; iHit <
fTofHit.size(); iHit++) {
477 if ((
fhit[iHit].GetAddress() & 0x003FFFFF) == iAddr)
return &
fhit[iHit];
487 fP[3] =
fhit[n].GetTime();
497 fP[3] =
fhit[n].GetTime();
529 LOG(info) << Form(
"TrklInfo: Nhits %d, Tt %6.3f, stations: ",
GetNofHits(),
GetTt());
531 for (int32_t iH = 0; iH <
GetNofHits(); iH++) {
532 LOG(info) << Form(
" Hit %2d: Ind %5d, det 0x%08x, addr 0x%08x, chi %6.3f, ae[]= %6.4f", iH,
fTofHit[iH],
539 double dDist =
sqrt(pow((pHit0->
GetX() - pHit1->
GetX()), 2) + pow((pHit0->
GetY() - pHit1->
GetY()), 2)
540 + pow((pHit0->
GetZ() - pHit1->
GetZ()), 2));
549 if (
fhit.size() >= iNhit) {
550 for (uint32_t iHL = 0; iHL < iNhit - 1; iHL++) {
551 for (uint32_t iHH = iHL + 1; iHH < iNhit; iHH++) {
558 LOG(debug) <<
" CbmTofTracklet::GetRefVel: No valid hit pair ";
561 dVel = (double) iNt / dTt;
ClassImp(CbmConverterManager)
friend fvec sqrt(const fvec &a)
double GetCovariance(int index) const
Provides information on attaching a TofHit to a TofTrack.
virtual double GetTdif(int32_t iSmType, CbmTofHit *pHit)
double GetRefVel(uint32_t N)
virtual bool ContainsAddr(int32_t iAddr)
virtual CbmTofHit * HitPointerOfAddr(int32_t iAddr)
virtual int32_t HitIndexOfAddr(int32_t iAddr)
virtual double GetXdif(int32_t iSmType, CbmTofHit *pHit)
int32_t GetNofHits() const
virtual double GetMatChi2(int32_t iSm)
const double * GetPoint(int32_t n)
void Clear(Option_t *option="")
const double * GetFitPoint(int32_t n)
virtual ~CbmTofTracklet()
std::vector< double > fMatChi
std::vector< int32_t > fTofDet
std::vector< CbmTofHit > fhit
void SetParamLast(const FairTrackParam *par)
virtual double GetYdif(int32_t iSmType, CbmTofHit *pHit)
virtual void GetFairTrackParamLast()
CbmTofTrackletParam fTrackPar
double GetTex(CbmTofHit *pHit)
std::vector< int32_t > fTofHit
FairTrackParam fParamFirst
FairTrackParam fParamLast
int32_t GetFirstInd(int32_t iSmType)
virtual double Dist3D(CbmTofHit *pHit0, CbmTofHit *pHit1)