140 #include "StFtpcTrackingParams.hh"
141 #include "SystemOfUnits.h"
142 #include "StMessMgr.h"
144 #ifndef ST_NO_NAMESPACES
145 using namespace units;
159 class St_ftpcdEdxPars;
167 Double_t StFtpcTrackingParams::OuterRadius() {
return mOuterRadius; }
168 Int_t StFtpcTrackingParams::NumberOfPadRows() {
return mNumberOfPadRows; }
169 Int_t StFtpcTrackingParams::NumberOfPadRowsPerSide() {
return mNumberOfPadRowsPerSide; }
170 Double_t StFtpcTrackingParams::PadRowPosZ(Int_t row) {
return mPadRowPosZ[row]; }
173 Double_t StFtpcTrackingParams::MaxVertexPosZWarning() {
return mMaxVertexPosZWarning; }
174 Double_t StFtpcTrackingParams::MaxVertexPosZError() {
return mMaxVertexPosZError; }
177 Int_t StFtpcTrackingParams::HistoBins() {
return mHistoBins; }
178 Double_t StFtpcTrackingParams::HistoMin() {
return mHistoMin; }
179 Double_t StFtpcTrackingParams::HistoMax() {
return mHistoMax; }
180 Double_t StFtpcTrackingParams::MaxDcaVertex() {
return mMaxDcaVertex; }
181 Int_t StFtpcTrackingParams::MinNumTracks() {
return mMinNumTracks; }
184 Int_t StFtpcTrackingParams::RowSegments() {
return mRowSegments; }
185 Int_t StFtpcTrackingParams::PhiSegments() {
return mPhiSegments; }
186 Int_t StFtpcTrackingParams::EtaSegments() {
return mEtaSegments; }
189 Bool_t StFtpcTrackingParams::Laser(Int_t tracking_method) {
return mLaser[tracking_method]; }
190 Bool_t StFtpcTrackingParams::VertexConstraint(Int_t tracking_method) {
return mVertexConstraint[tracking_method]; }
191 Int_t StFtpcTrackingParams::MaxTrackletLength(Int_t tracking_method) {
return mMaxTrackletLength[tracking_method]; }
192 Int_t StFtpcTrackingParams::MinTrackLength(Int_t tracking_method) {
return mMinTrackLength[tracking_method]; }
193 Int_t StFtpcTrackingParams::RowScopeTracklet(Int_t tracking_method) {
return mRowScopeTracklet[tracking_method]; }
194 Int_t StFtpcTrackingParams::RowScopeTrack(Int_t tracking_method) {
return mRowScopeTrack[tracking_method]; }
195 Int_t StFtpcTrackingParams::PhiScope(Int_t tracking_method) {
return mPhiScope[tracking_method]; }
196 Int_t StFtpcTrackingParams::EtaScope(Int_t tracking_method) {
return mEtaScope[tracking_method]; }
197 Double_t StFtpcTrackingParams::MaxDca(Int_t tracking_method) {
return mMaxDca[tracking_method]; }
203 Double_t StFtpcTrackingParams::MaxAngleTrack(Int_t tracking_method) {
return mMaxAngleTrack[tracking_method]; }
204 Double_t StFtpcTrackingParams::MaxCircleDist(Int_t tracking_method) {
return mMaxCircleDist[tracking_method]; }
205 Double_t StFtpcTrackingParams::MaxLengthDist(Int_t tracking_method) {
return mMaxLengthDist[tracking_method]; }
208 Double_t StFtpcTrackingParams::MaxDist() {
return mMaxDist; }
209 Double_t StFtpcTrackingParams::MinPointRatio() {
return mMinPointRatio; }
210 Double_t StFtpcTrackingParams::MaxPointRatio() {
return mMaxPointRatio; }
213 Int_t StFtpcTrackingParams::DebugLevel() {
return mDebugLevel; }
214 Int_t StFtpcTrackingParams::IdMethod() {
return mIdMethod; }
215 Int_t StFtpcTrackingParams::NoAngle() {
return mNoAngle; }
216 Int_t StFtpcTrackingParams::MaxHit() {
return mMaxHit; }
217 Int_t StFtpcTrackingParams::MinHit() {
return mMinHit; }
218 Int_t StFtpcTrackingParams::MaxTrack() {
return mMaxTrack; }
220 Double_t StFtpcTrackingParams::PadLength() {
return mPadLength; }
221 Double_t StFtpcTrackingParams::FracTrunc() {
return mFracTrunc; }
222 Double_t StFtpcTrackingParams::Aip() {
return mAip; }
223 Double_t StFtpcTrackingParams::ALargeNumber() {
return mALargeNumber; }
227 StMatrixD StFtpcTrackingParams::GlobalToTpcRotation() {
return mGlobalToTpcRotation; }
228 StThreeVectorD StFtpcTrackingParams::TpcPositionInGlobal() {
return mTpcPositionInGlobal; }
230 StMatrixD StFtpcTrackingParams::FtpcRotation(Int_t i) {
return *mFtpcRotation[i]; }
231 StMatrixD StFtpcTrackingParams::FtpcRotationInverse(Int_t i) {
return *mFtpcRotationInverse[i]; }
232 StMatrixD StFtpcTrackingParams::FtpcRotationX(Int_t i) {
return *mFtpcRotationX[i]; }
233 StMatrixD StFtpcTrackingParams::FtpcRotationXInverse(Int_t i) {
return *mFtpcRotationXInverse[i]; }
234 StMatrixD StFtpcTrackingParams::FtpcRotationY(Int_t i) {
return *mFtpcRotationY[i]; }
235 StMatrixD StFtpcTrackingParams::FtpcRotationYInverse(Int_t i) {
return *mFtpcRotationYInverse[i]; }
237 Double_t StFtpcTrackingParams::InstallationPointX(Int_t i) {
return (i>=0 && i<=1) ? mInstallationPointX[i] : 0.; }
238 Double_t StFtpcTrackingParams::InstallationPointY(Int_t i) {
return (i>=0 && i<=1) ? mInstallationPointY[i] : 0.; }
239 Double_t StFtpcTrackingParams::InstallationPointZ(Int_t i) {
return (i>=0 && i<=1) ? mInstallationPointZ[i] : 0.; }
240 Double_t StFtpcTrackingParams::ObservedVertexOffsetY(Int_t i) {
return (i>=0 && i<=1) ? mObservedVertexOffsetY[i] : 0.; }
241 Double_t StFtpcTrackingParams::ObservedVertexOffsetX(Int_t i) {
return (i>=0 && i<=1) ? mObservedVertexOffsetX[i] : 0.; }
245 St_ftpcTrackingPars *trackPars,
246 St_ftpcdEdxPars *dEdxPars,
247 St_ftpcDimensions *dimensions,
248 St_ftpcPadrowZ *padrow_z) {
259 StFtpcTrackingParams* StFtpcTrackingParams::Instance(Bool_t debug, St_ftpcCoordTrans *ftpcCoordTrans) {
262 mInstance->InitCoordTransformation(ftpcCoordTrans->GetTable());
263 mInstance->InitSpaceTransformation();
266 mInstance->PrintParams();
280 StFtpcTrackingParams::StFtpcTrackingParams(St_ftpcTrackingPars *trackPars,
281 St_ftpcdEdxPars *dEdxPars,
282 St_ftpcDimensions *dimensions,
283 St_ftpcPadrowZ *zrow)
284 : mReturnCode(0), mTpcToGlobalRotation(3, 3, 1), mGlobalToTpcRotation(3, 3, 1)
287 memset(&mStart,0,&mEnd-&mStart+1);
291 mFtpcRotation[0] =
new StMatrixD(3, 3, 1);
292 mFtpcRotation[1] =
new StMatrixD(3, 3, 1);
293 mFtpcRotationInverse[0] =
new StMatrixD(3, 3, 1);
294 mFtpcRotationInverse[1] =
new StMatrixD(3, 3, 1);
295 mFtpcRotationX[0] =
new StMatrixD(3, 3, 1);
296 mFtpcRotationX[1] =
new StMatrixD(3, 3, 1);
297 mFtpcRotationXInverse[0] =
new StMatrixD(3, 3, 1);
298 mFtpcRotationXInverse[1] =
new StMatrixD(3, 3, 1);
299 mFtpcRotationY[0] =
new StMatrixD(3, 3, 1);
300 mFtpcRotationY[1] =
new StMatrixD(3, 3, 1);
301 mFtpcRotationYInverse[0] =
new StMatrixD(3, 3, 1);
302 mFtpcRotationYInverse[1] =
new StMatrixD(3, 3, 1);
305 InitTrackingParams(trackPars->GetTable());
306 InitdEdx(dEdxPars->GetTable());
307 InitDimensions(dimensions->GetTable());
308 InitPadRows(zrow->GetTable());
309 InitCoordTransformation();
313 StFtpcTrackingParams::StFtpcTrackingParams()
314 : mReturnCode(0), mTpcToGlobalRotation(3, 3, 1), mGlobalToTpcRotation(3, 3, 1)
317 memset(&mStart,0,&mEnd-&mStart+1);
321 mFtpcRotation[0] =
new StMatrixD(3, 3, 1);
322 mFtpcRotation[1] =
new StMatrixD(3, 3, 1);
323 mFtpcRotationInverse[0] =
new StMatrixD(3, 3, 1);
324 mFtpcRotationInverse[1] =
new StMatrixD(3, 3, 1);
325 mFtpcRotationX[0] =
new StMatrixD(3, 3, 1);
326 mFtpcRotationX[1] =
new StMatrixD(3, 3, 1);
327 mFtpcRotationXInverse[0] =
new StMatrixD(3, 3, 1);
328 mFtpcRotationXInverse[1] =
new StMatrixD(3, 3, 1);
329 mFtpcRotationY[0] =
new StMatrixD(3, 3, 1);
330 mFtpcRotationY[1] =
new StMatrixD(3, 3, 1);
331 mFtpcRotationYInverse[0] =
new StMatrixD(3, 3, 1);
332 mFtpcRotationYInverse[1] =
new StMatrixD(3, 3, 1);
335 mInnerRadius = 7.73 * centimeter;
336 mOuterRadius = 30.05 * centimeter;
338 mNumberOfPadRows = 20;
339 mNumberOfPadRowsPerSide = 10;
341 mPadRowPosZ =
new Double_t[mNumberOfPadRows];
343 mPadRowPosZ[0] = 162.75 * centimeter;
344 mPadRowPosZ[1] = 171.25 * centimeter;
345 mPadRowPosZ[2] = 184.05 * centimeter;
346 mPadRowPosZ[3] = 192.55 * centimeter;
347 mPadRowPosZ[4] = 205.35 * centimeter;
348 mPadRowPosZ[5] = 213.85 * centimeter;
349 mPadRowPosZ[6] = 226.65 * centimeter;
350 mPadRowPosZ[7] = 235.15 * centimeter;
351 mPadRowPosZ[8] = 247.95 * centimeter;
352 mPadRowPosZ[9] = 256.45 * centimeter;
353 mPadRowPosZ[10] = -162.75 * centimeter;
354 mPadRowPosZ[11] = -171.25 * centimeter;
355 mPadRowPosZ[12] = -184.05 * centimeter;
356 mPadRowPosZ[13] = -192.55 * centimeter;
357 mPadRowPosZ[14] = -205.35 * centimeter;
358 mPadRowPosZ[15] = -213.85 * centimeter;
359 mPadRowPosZ[16] = -226.65 * centimeter;
360 mPadRowPosZ[17] = -235.15 * centimeter;
361 mPadRowPosZ[18] = -247.95 * centimeter;
362 mPadRowPosZ[19] = -256.45 * centimeter;
365 mMaxVertexPosZWarning = 50 * centimeter;
366 mMaxVertexPosZError = 100 * centimeter;
370 mHistoMin = -75. * centimeter;
371 mHistoMax = 75. * centimeter;
372 mMaxDcaVertex = 100. * centimeter;
386 mVertexConstraint[0] = 1;
387 mVertexConstraint[1] = 0;
388 mVertexConstraint[2] = 1;
389 mVertexConstraint[3] = 0;
391 mMaxTrackletLength[0] = 3;
392 mMaxTrackletLength[1] = 3;
393 mMaxTrackletLength[2] = 10;
394 mMaxTrackletLength[3] = 10;
396 mMinTrackLength[0] = 5;
397 mMinTrackLength[1] = 5;
398 mMinTrackLength[2] = 5;
399 mMinTrackLength[3] = 5;
401 mRowScopeTracklet[0] = 2;
402 mRowScopeTracklet[1] = 2;
403 mRowScopeTracklet[2] = 2;
404 mRowScopeTracklet[3] = 3;
406 mRowScopeTrack[0] = 3;
407 mRowScopeTrack[1] = 3;
408 mRowScopeTrack[2] = 3;
409 mRowScopeTrack[3] = 3;
421 mMaxDca[0] = 100. * centimeter;
422 mMaxDca[1] = 100. * centimeter;
423 mMaxDca[2] = 100. * centimeter;
424 mMaxDca[3] = 100. * centimeter;
427 mMaxAngleTracklet[0] = 0.015 * radian;
428 mMaxAngleTracklet[1] = 0.03 * radian;
429 mMaxAngleTracklet[2] = 0.03 * radian;
430 mMaxAngleTracklet[3] = 0.05 * radian;
433 mMaxAngleTrack[0] = 0.03 * radian;
434 mMaxAngleTrack[1] = 0.08 * radian;
435 mMaxAngleTrack[2] = 0.007 * radian;
436 mMaxAngleTrack[3] = 0.007 * radian;
438 mMaxCircleDist[0] = 0.05 * 1./centimeter;
439 mMaxCircleDist[1] = 0.05 * 1./centimeter;
440 mMaxCircleDist[2] = 0.03 * 1./centimeter;
441 mMaxCircleDist[3] = 0.03 * 1./centimeter;
443 mMaxLengthDist[0] = 30. * centimeter;
444 mMaxLengthDist[1] = 70. * centimeter;
445 mMaxLengthDist[2] = 30. * centimeter;
446 mMaxLengthDist[3] = 30. * centimeter;
449 mMaxDist = 0.11 * centimeter;
450 mMinPointRatio = 0.5;
451 mMaxPointRatio = 0.5;
464 mALargeNumber = 1.0e+10;
467 mTpcPositionInGlobal.setX(-0.256 * centimeter);
468 mTpcPositionInGlobal.setY(-0.082 * centimeter);
469 mTpcPositionInGlobal.setZ(-0.192 * centimeter);
471 Double_t phi = 0.0 * radian;
472 Double_t theta = -0.000381 * radian;
473 Double_t psi = -0.000156 * radian;
475 mGlobalToTpcRotation(1, 1) = TMath::Cos(theta) * TMath::Cos(phi);
476 mGlobalToTpcRotation(1, 2) = TMath::Cos(theta) * TMath::Sin(phi);
477 mGlobalToTpcRotation(1, 3) = - TMath::Sin(theta);
478 mGlobalToTpcRotation(2, 1) = TMath::Sin(psi) * TMath::Sin(theta) * TMath::Cos(phi) - TMath::Cos(psi) * TMath::Sin(phi);
479 mGlobalToTpcRotation(2, 2) = TMath::Sin(psi) * TMath::Sin(theta) * TMath::Sin(phi) + TMath::Cos(psi) * TMath::Cos(phi);
480 mGlobalToTpcRotation(2, 3) = TMath::Cos(theta) * TMath::Sin(psi);
481 mGlobalToTpcRotation(3, 1) = TMath::Cos(psi) * TMath::Sin(theta) * TMath::Cos(phi) + TMath::Sin(psi) * TMath::Sin(phi);
482 mGlobalToTpcRotation(3, 2) = TMath::Cos(psi) * TMath::Sin(theta) * TMath::Sin(phi) - TMath::Sin(psi) * TMath::Cos(phi);
483 mGlobalToTpcRotation(3, 3) = TMath::Cos(theta) * TMath::Cos(psi);
486 mTpcToGlobalRotation = mGlobalToTpcRotation.inverse(ierr);
489 LOG_WARN <<
"Cant invert rotation matrix!" << endm;
490 LOG_WARN <<
"Global to TPC rotation matrix:" << mGlobalToTpcRotation << endm;
491 LOG_WARN <<
"TPC to global rotation matrix:" << mTpcToGlobalRotation << endm;
495 mInstallationPointX[0] = 0.0 * centimeter;
496 mInstallationPointX[1] = 0.0 * centimeter;
497 mInstallationPointY[0] = -22.25 * centimeter;
498 mInstallationPointY[1] = -22.25 * centimeter;
499 mInstallationPointZ[0] = -234.325 * centimeter;
500 mInstallationPointZ[1] = 234.325 * centimeter;
502 mObservedVertexOffsetY[0] = 0.1 * centimeter;
503 mObservedVertexOffsetY[1] = -0.034 * centimeter;
505 for (Int_t i = 0; i <= 1; i++) {
508 Double_t zShift, phi0, phi1, alpha;
509 Double_t pq = TMath::Sqrt(TMath::Power(mObservedVertexOffsetY[i], 2.)
510 - 2.*mObservedVertexOffsetY[i]*mInstallationPointY[i]
511 + TMath::Power(mInstallationPointZ[i], 2.));
517 zShift = (mInstallationPointZ[i] + pq) * centimeter;
518 phi0 = TMath::ATan((mInstallationPointY[i] - mObservedVertexOffsetY[i]) / mInstallationPointZ[i]) * radian;
519 phi1 = TMath::ATan(mInstallationPointY[i] / (mInstallationPointZ[i] - zShift)) * radian;
524 zShift = (mInstallationPointZ[i] - pq) * centimeter;
525 phi0 = TMath::ATan((mObservedVertexOffsetY[i] - mInstallationPointY[i]) / mInstallationPointZ[i]) * radian;
526 phi1 = TMath::ATan(mInstallationPointY[i] / (zShift - mInstallationPointZ[i]));
532 Double_t rx = 1.0 * centimeter;
533 Double_t ry = 0.0 * centimeter;
534 Double_t rz = 0.0 * centimeter;
537 Double_t norm_r = TMath::Sqrt(rx*rx + ry*ry + rz*rz);
545 (*mFtpcRotationY[i])(1, 1) = rx * rx * (1 - TMath::Cos(alpha)) + TMath::Cos(alpha);
546 (*mFtpcRotationY[i])(1, 2) = ry * rx * (1 - TMath::Cos(alpha)) - rz * TMath::Sin(alpha);
547 (*mFtpcRotationY[i])(1, 3) = rz * rx * (1 - TMath::Cos(alpha)) + ry * TMath::Sin(alpha);
548 (*mFtpcRotationY[i])(2, 1) = rx * ry * (1 - TMath::Cos(alpha)) + rz * TMath::Sin(alpha);
549 (*mFtpcRotationY[i])(2, 2) = ry * ry * (1 - TMath::Cos(alpha)) + TMath::Cos(alpha);
550 (*mFtpcRotationY[i])(2, 3) = rz * ry * (1 - TMath::Cos(alpha)) - rx * TMath::Sin(alpha);
551 (*mFtpcRotationY[i])(3, 1) = rx * ry * (1 - TMath::Cos(alpha)) - ry * TMath::Sin(alpha);
552 (*mFtpcRotationY[i])(3, 2) = ry * rz * (1 - TMath::Cos(alpha)) + rx * TMath::Sin(alpha);
553 (*mFtpcRotationY[i])(3, 3) = rz * rz * (1 - TMath::Cos(alpha)) + TMath::Cos(alpha);
555 (*mFtpcRotationYInverse[i]) = (*mFtpcRotationY[i]).inverse(ierr);
558 LOG_WARN <<
"Can't invert FTPC ";
559 if (i == 0) { LOG_WARN <<
" east rotation matrix Y!" << endm; }
560 else { LOG_WARN <<
" west rotation matrix Y!" << endm; }
561 LOG_WARN <<
"FTPC rotation matrix Y:" << (*mFtpcRotationY[i]) << endm;
562 LOG_WARN <<
"Inverse FTPC rotation matrix Y:" << (*mFtpcRotationYInverse[i]) << endm;
567 mObservedVertexOffsetX[0] = 0. * centimeter;
568 mObservedVertexOffsetX[1] = -0.08 * centimeter;
570 rx = 0.0 * centimeter;
571 ry = 1.0 * centimeter;
572 rz = 0.0 * centimeter;
574 norm_r = TMath::Sqrt(rx*rx + ry*ry + rz*rz);
582 pq = TMath::Sqrt(TMath::Power(mObservedVertexOffsetX[i], 2.)
583 - 2.*mObservedVertexOffsetX[i]*mInstallationPointX[i]
584 + TMath::Power(mInstallationPointZ[i], 2.));
589 zShift = (mInstallationPointZ[i] + pq) * centimeter;
590 phi0 = TMath::ATan((mInstallationPointX[i] - mObservedVertexOffsetX[i]) / mInstallationPointZ[i]) * radian;
591 phi1 = TMath::ATan(mInstallationPointX[i] / (mInstallationPointZ[i] - zShift)) * radian;
596 zShift = (mInstallationPointZ[i] - pq) * centimeter;
597 phi0 = TMath::ATan((mObservedVertexOffsetX[i] - mInstallationPointX[i]) / mInstallationPointZ[i]) * radian;
598 phi1 = TMath::ATan(mInstallationPointX[i] / (zShift - mInstallationPointZ[i]));
602 (*mFtpcRotationX[i])(1, 1) = rx * rx * (1 - TMath::Cos(beta)) + TMath::Cos(beta);
603 (*mFtpcRotationX[i])(1, 2) = ry * rx * (1 - TMath::Cos(beta)) - rz * TMath::Sin(beta);
604 (*mFtpcRotationX[i])(1, 3) = rz * rx * (1 - TMath::Cos(beta)) + ry * TMath::Sin(beta);
605 (*mFtpcRotationX[i])(2, 1) = rx * ry * (1 - TMath::Cos(beta)) + rz * TMath::Sin(beta);
606 (*mFtpcRotationX[i])(2, 2) = ry * ry * (1 - TMath::Cos(beta)) + TMath::Cos(beta);
607 (*mFtpcRotationX[i])(2, 3) = rz * ry * (1 - TMath::Cos(beta)) - rx * TMath::Sin(beta);
608 (*mFtpcRotationX[i])(3, 1) = rx * ry * (1 - TMath::Cos(beta)) - ry * TMath::Sin(beta);
609 (*mFtpcRotationX[i])(3, 2) = ry * rz * (1 - TMath::Cos(beta)) + rx * TMath::Sin(beta);
610 (*mFtpcRotationX[i])(3, 3) = rz * rz * (1 - TMath::Cos(beta)) + TMath::Cos(beta);
612 (*mFtpcRotationXInverse[i]) = (*mFtpcRotationX[i]).inverse(ierr);
615 LOG_WARN <<
"Can't invert FTPC ";
616 if (i == 0) {LOG_WARN <<
" east rotation matrix X !" << endm;}
617 else {LOG_WARN <<
" west rotation matrix X !" << endm;}
618 LOG_WARN <<
"FTPC rotation matrix X:" << (*mFtpcRotationX[i]) << endm;
619 LOG_WARN <<
"Inverse FTPC rotation matrix X:" << (*mFtpcRotationXInverse[i]) << endm;
624 (*mFtpcRotation[i]) = (*mFtpcRotationY[i])*(*mFtpcRotationX[i]);
625 (*mFtpcRotationInverse[i])=(*mFtpcRotation[i]).inverse(ierr);
629 LOG_WARN <<
"Can't invert FTPC ";
630 if (i == 0) {LOG_WARN <<
" east rotation matrix!" << endm;}
631 else {LOG_WARN <<
" west rotation matrix!" << endm;}
632 LOG_WARN <<
"FTPC rotation matrix:" << (*mFtpcRotation[i]) << endm;
633 LOG_WARN <<
"Inverse FTPC rotation matrix:" << (*mFtpcRotationInverse[i]) << endm;
638 StFtpcTrackingParams::~StFtpcTrackingParams() {
641 for (Int_t i = 0; i < 1; i++) {
642 delete mFtpcRotation[i];
643 delete mFtpcRotationInverse[i];
644 delete mFtpcRotationX[i];
645 delete mFtpcRotationXInverse[i];
646 delete mFtpcRotationY[i];
647 delete mFtpcRotationYInverse[i];
650 delete[] mPadRowPosZ;
656 Int_t StFtpcTrackingParams::InitTrackingParams(ftpcTrackingPars_st *trackParsTable) {
658 if (trackParsTable) {
661 mMaxVertexPosZWarning = trackParsTable->maxVertexPosZWarning * centimeter;
662 mMaxVertexPosZError = trackParsTable->maxVertexPosZError * centimeter;
665 mHistoBins = trackParsTable->histoBins;
666 mHistoMin = trackParsTable->histoMin * centimeter;
667 mHistoMax = trackParsTable->histoMax * centimeter;
668 mMaxDcaVertex = trackParsTable->maxDcaVertex * centimeter;
669 mMinNumTracks = trackParsTable->minNumTracks;
673 mRowSegments = trackParsTable->rowSegments;
674 mPhiSegments = trackParsTable->phiSegments;
675 mEtaSegments = trackParsTable->etaSegments;
683 for (Int_t i = 0; i < 4; i++) {
685 mLaser[i] = trackParsTable->laser[i] ? kTRUE : kFALSE;
686 mVertexConstraint[i] = trackParsTable->vertexConstraint[i] ? kTRUE : kFALSE;
688 mMaxTrackletLength[i] = trackParsTable->maxTrackletLength[i];
689 mMinTrackLength[i] = trackParsTable->minTrackLength[i];
690 mRowScopeTracklet[i] = trackParsTable->rowScopeTracklet[i];
692 mRowScopeTrack[i] = trackParsTable->rowScopeTrack[i];
693 mPhiScope[i] = trackParsTable->phiScope[i];
694 mEtaScope[i] = trackParsTable->etaScope[i];
696 mMaxDca[i] = trackParsTable->maxDca[i] * centimeter;
699 mMaxAngleTracklet[i] = trackParsTable->maxAngleTracklet[i] * radian;
702 mMaxAngleTrack[i] = trackParsTable->maxAngleTrack[i] * radian;
703 mMaxCircleDist[i] = trackParsTable->maxCircleDist[i] * 1./centimeter;
704 mMaxLengthDist[i] = trackParsTable->maxLengthDist[i] * centimeter;
708 mMaxDist = trackParsTable->maxDist * centimeter;
709 mMinPointRatio = trackParsTable->minPointRatio;
710 mMaxPointRatio = trackParsTable->maxPointRatio;
716 LOG_ERROR <<
"No data in table class St_TrackingPars." << endm;
723 Int_t StFtpcTrackingParams::InitdEdx(ftpcdEdxPars_st *dEdxParsTable) {
727 mDebugLevel = dEdxParsTable[0].debug_level;
728 mIdMethod = dEdxParsTable[0].id_method;
729 mNoAngle = dEdxParsTable[0].no_angle;
730 mMaxHit = dEdxParsTable[0].max_hit;
731 mMinHit = dEdxParsTable[0].min_hit;
732 mMaxTrack = dEdxParsTable[0].max_track;
733 mPadLength = dEdxParsTable[0].pad_length/100.;
734 mFracTrunc = dEdxParsTable[0].frac_trun;
735 mAip = dEdxParsTable[0].a_i_p * 1.0e-9;
736 mALargeNumber = dEdxParsTable[0].a_large_number;
742 LOG_ERROR <<
"No data in table class St_ftpcdEdxPars." << endm;
750 Int_t StFtpcTrackingParams::InitDimensions(ftpcDimensions_st* dimensionsTable) {
753 if (dimensionsTable) {
754 mInnerRadius = dimensionsTable->innerRadiusSensitiveVolume * centimeter;
755 mOuterRadius = dimensionsTable->outerRadiusSensitiveVolume * centimeter;
756 mNumberOfPadRows = dimensionsTable->totalNumberOfPadrows;
757 mNumberOfPadRowsPerSide = dimensionsTable->numberOfPadrowsPerSide;
758 mInstallationPointX[0] = dimensionsTable->installationPointX[0] * centimeter;
759 mInstallationPointX[1] = dimensionsTable->installationPointX[1] * centimeter;
760 mInstallationPointY[0] = dimensionsTable->installationPointY[0] * centimeter;
761 mInstallationPointY[1] = dimensionsTable->installationPointY[1] * centimeter;
762 mInstallationPointZ[0] = dimensionsTable->installationPointZ[0] * centimeter;
763 mInstallationPointZ[1] = dimensionsTable->installationPointZ[1] * centimeter;
769 LOG_ERROR <<
"No data in table class St_ftpcDimensions." << endm;
777 Int_t StFtpcTrackingParams::InitPadRows(ftpcPadrowZ_st* padrowzTable) {
781 mPadRowPosZ =
new Double_t[mNumberOfPadRows];
783 for (Int_t i = 0; i < mNumberOfPadRows; i++) {
784 mPadRowPosZ[i] = ((Float_t *)padrowzTable->z)[i];
791 LOG_ERROR <<
"No data in table class St_ftpcPadrowZ." << endm;
799 Int_t StFtpcTrackingParams::InitCoordTransformation() {
802 mObservedVertexOffsetY[0] = -9999.;
803 mObservedVertexOffsetY[1] = -9999.;
804 mObservedVertexOffsetX[0] = -9999.;
805 mObservedVertexOffsetX[1] = -9999.;
811 Int_t StFtpcTrackingParams::InitCoordTransformation(ftpcCoordTrans_st* ftpcCoordTrans) {
814 if (ftpcCoordTrans) {
816 Double_t oldY[2] = {mObservedVertexOffsetY[0] * centimeter, mObservedVertexOffsetY[1] * centimeter};
817 Double_t oldX[2] = {mObservedVertexOffsetX[0] * centimeter, mObservedVertexOffsetX[1] * centimeter};
819 mObservedVertexOffsetY[0] = ftpcCoordTrans->observedVertexOffsetY[0] * centimeter;
820 mObservedVertexOffsetY[1] = ftpcCoordTrans->observedVertexOffsetY[1] * centimeter;
822 mObservedVertexOffsetX[0] = ftpcCoordTrans->observedVertexOffsetX[0] * centimeter;
823 mObservedVertexOffsetX[1] = ftpcCoordTrans->observedVertexOffsetX[1] * centimeter;
831 if ((mObservedVertexOffsetY[0] != oldY[0] || mObservedVertexOffsetY[1] != oldY[1]) &&
832 (oldY[0] < -9990. || oldY[1] < -9990.)) {
834 LOG_DEBUG <<
"Observed vertex offset in y direction has changed. Changed from "
835 << oldY[0] <<
" to " << mObservedVertexOffsetY[0] <<
" (east) and from "
836 << oldY[1] <<
" to " << mObservedVertexOffsetY[1] <<
" (west)." << endm;
840 if ((mObservedVertexOffsetX[0] != oldX[0] || mObservedVertexOffsetX[1] != oldX[1]) &&
841 (oldX[0] < -9990. || oldX[1] < -9990.)) {
843 LOG_DEBUG <<
"Observed vertex offset in x direction has changed. Changed from "
844 << oldX[0] <<
" to " << mObservedVertexOffsetX[0] <<
" (east) and from "
845 << oldX[1] <<
" to " << mObservedVertexOffsetX[1] <<
" (west)." << endm;
852 LOG_ERROR <<
"No data in table class St_ftpcCoordTrans." << endm;
860 Int_t StFtpcTrackingParams::InitSpaceTransformation() {
865 if (gStTpcDb->GlobalPosition()) {
867 Double_t phi = 0.0 * radian;
868 Double_t theta = gStTpcDb->GlobalPosition()->TpcRotationAroundGlobalAxisY() * radian;
869 Double_t psi = gStTpcDb->GlobalPosition()->TpcRotationAroundGlobalAxisX() * radian;
871 mGlobalToTpcRotation(1, 1) = TMath::Cos(theta) * TMath::Cos(phi);
872 mGlobalToTpcRotation(1, 2) = TMath::Cos(theta) * TMath::Sin(phi);
873 mGlobalToTpcRotation(1, 3) = - TMath::Sin(theta);
874 mGlobalToTpcRotation(2, 1) = TMath::Sin(psi) * TMath::Sin(theta) * TMath::Cos(phi) - TMath::Cos(psi) * TMath::Sin(phi);
875 mGlobalToTpcRotation(2, 2) = TMath::Sin(psi) * TMath::Sin(theta) * TMath::Sin(phi) + TMath::Cos(psi) * TMath::Cos(phi);
876 mGlobalToTpcRotation(2, 3) = TMath::Cos(theta) * TMath::Sin(psi);
877 mGlobalToTpcRotation(3, 1) = TMath::Cos(psi) * TMath::Sin(theta) * TMath::Cos(phi) + TMath::Sin(psi) * TMath::Sin(phi);
878 mGlobalToTpcRotation(3, 2) = TMath::Cos(psi) * TMath::Sin(theta) * TMath::Sin(phi) - TMath::Sin(psi) * TMath::Cos(phi);
879 mGlobalToTpcRotation(3, 3) = TMath::Cos(theta) * TMath::Cos(psi);
882 mTpcToGlobalRotation = mGlobalToTpcRotation.inverse(ierr);
885 LOG_WARN <<
"Cant invert rotation matrix!" << endm;
886 LOG_WARN <<
"Global to TPC rotation matrix:" << mGlobalToTpcRotation << endm;
887 LOG_WARN <<
"TPC to global rotation matrix:" << mTpcToGlobalRotation << endm;
890 mTpcPositionInGlobal.setX(gStTpcDb->GlobalPosition()->TpcCenterPositionX() * centimeter);
891 mTpcPositionInGlobal.setY(gStTpcDb->GlobalPosition()->TpcCenterPositionY() * centimeter);
892 mTpcPositionInGlobal.setZ(gStTpcDb->GlobalPosition()->TpcCenterPositionZ() * centimeter);
896 LOG_ERROR <<
"StTpcDb IS INCOMPLETE! Cannot contstruct Coordinate transformation." << endm;
902 for (Int_t i = 0; i <= 1; i++) {
905 Double_t zShift, phi0, phi1, alpha;
906 Double_t pq = TMath::Sqrt(TMath::Power(mObservedVertexOffsetY[i], 2.)
907 - 2.*mObservedVertexOffsetY[i]*mInstallationPointY[i]
908 + TMath::Power(mInstallationPointZ[i], 2.));
914 zShift = (mInstallationPointZ[i] + pq) * centimeter;
915 phi0 = TMath::ATan((mInstallationPointY[i] - mObservedVertexOffsetY[i]) / mInstallationPointZ[i]) * radian;
916 phi1 = TMath::ATan(mInstallationPointY[i] / (mInstallationPointZ[i] - zShift)) * radian;
921 zShift = (mInstallationPointZ[i] - pq) * centimeter;
922 phi0 = TMath::ATan((mObservedVertexOffsetY[i] - mInstallationPointY[i]) / mInstallationPointZ[i]) * radian;
923 phi1 = TMath::ATan(mInstallationPointY[i] / (zShift - mInstallationPointZ[i]));
929 Double_t rx = 1.0 * centimeter;
930 Double_t ry = 0.0 * centimeter;
931 Double_t rz = 0.0 * centimeter;
934 Double_t norm_r = TMath::Sqrt(rx*rx + ry*ry + rz*rz);
942 (*mFtpcRotationY[i])(1, 1) = rx * rx * (1 - TMath::Cos(alpha)) + TMath::Cos(alpha);
943 (*mFtpcRotationY[i])(1, 2) = ry * rx * (1 - TMath::Cos(alpha)) - rz * TMath::Sin(alpha);
944 (*mFtpcRotationY[i])(1, 3) = rz * rx * (1 - TMath::Cos(alpha)) + ry * TMath::Sin(alpha);
945 (*mFtpcRotationY[i])(2, 1) = rx * ry * (1 - TMath::Cos(alpha)) + rz * TMath::Sin(alpha);
946 (*mFtpcRotationY[i])(2, 2) = ry * ry * (1 - TMath::Cos(alpha)) + TMath::Cos(alpha);
947 (*mFtpcRotationY[i])(2, 3) = rz * ry * (1 - TMath::Cos(alpha)) - rx * TMath::Sin(alpha);
948 (*mFtpcRotationY[i])(3, 1) = rx * ry * (1 - TMath::Cos(alpha)) - ry * TMath::Sin(alpha);
949 (*mFtpcRotationY[i])(3, 2) = ry * rz * (1 - TMath::Cos(alpha)) + rx * TMath::Sin(alpha);
950 (*mFtpcRotationY[i])(3, 3) = rz * rz * (1 - TMath::Cos(alpha)) + TMath::Cos(alpha);
954 (*mFtpcRotationYInverse[i]) = (*mFtpcRotationY[i]).inverse(ierr);
957 LOG_WARN <<
"Can't invert FTPC ";
958 if (i == 0) {LOG_WARN <<
" east rotation matrix! Y" << endm;}
959 else {LOG_WARN <<
" west rotation matrix! Y" << endm;}
960 LOG_WARN <<
"FTPC rotation matrix Y:" << (*mFtpcRotationY[i]) << endm;
961 LOG_WARN <<
"Inverse FTPC rotation matrix Y:" << (*mFtpcRotationYInverse[i]) << endm;
966 rx = 0.0 * centimeter;
967 ry = 1.0 * centimeter;
968 rz = 0.0 * centimeter;
970 norm_r = TMath::Sqrt(rx*rx + ry*ry + rz*rz);
978 pq = TMath::Sqrt(TMath::Power(mObservedVertexOffsetX[i], 2.)
979 - 2.*mObservedVertexOffsetX[i]*mInstallationPointX[i]
980 + TMath::Power(mInstallationPointZ[i], 2.));
985 zShift = (mInstallationPointZ[i] + pq) * centimeter;
986 phi0 = TMath::ATan((mInstallationPointX[i] - mObservedVertexOffsetX[i]) / mInstallationPointZ[i]) * radian;
987 phi1 = TMath::ATan(mInstallationPointX[i] / (mInstallationPointZ[i] - zShift)) * radian;
992 zShift = (mInstallationPointZ[i] - pq) * centimeter;
993 phi0 = TMath::ATan((mObservedVertexOffsetX[i] - mInstallationPointX[i]) / mInstallationPointZ[i]) * radian;
994 phi1 = TMath::ATan(mInstallationPointX[i] / (zShift - mInstallationPointZ[i]));
998 (*mFtpcRotationX[i])(1, 1) = rx * rx * (1 - TMath::Cos(beta)) + TMath::Cos(beta);
999 (*mFtpcRotationX[i])(1, 2) = ry * rx * (1 - TMath::Cos(beta)) - rz * TMath::Sin(beta);
1000 (*mFtpcRotationX[i])(1, 3) = rz * rx * (1 - TMath::Cos(beta)) + ry * TMath::Sin(beta);
1001 (*mFtpcRotationX[i])(2, 1) = rx * ry * (1 - TMath::Cos(beta)) + rz * TMath::Sin(beta);
1002 (*mFtpcRotationX[i])(2, 2) = ry * ry * (1 - TMath::Cos(beta)) + TMath::Cos(beta);
1003 (*mFtpcRotationX[i])(2, 3) = rz * ry * (1 - TMath::Cos(beta)) - rx * TMath::Sin(beta);
1004 (*mFtpcRotationX[i])(3, 1) = rx * ry * (1 - TMath::Cos(beta)) - ry * TMath::Sin(beta);
1005 (*mFtpcRotationX[i])(3, 2) = ry * rz * (1 - TMath::Cos(beta)) + rx * TMath::Sin(beta);
1006 (*mFtpcRotationX[i])(3, 3) = rz * rz * (1 - TMath::Cos(beta)) + TMath::Cos(beta);
1008 (*mFtpcRotationXInverse[i]) = (*mFtpcRotationX[i]).inverse(ierr);
1011 LOG_WARN <<
"Can't invert FTPC ";
1012 if (i == 0) {LOG_WARN <<
" east rotation matrix X !" << endm;}
1013 else {LOG_WARN <<
" west rotation matrix X !" << endm;}
1014 LOG_WARN <<
"FTPC rotation matrix X:" << (*mFtpcRotationX[i]) << endm;
1015 LOG_WARN <<
"Inverse FTPC rotation matrix X:" << (*mFtpcRotationXInverse[i]) << endm;
1020 (*mFtpcRotation[i]) = (*mFtpcRotationY[i])*(*mFtpcRotationX[i]);
1021 (*mFtpcRotationInverse[i])=(*mFtpcRotation[i]).inverse(ierr);
1025 LOG_WARN <<
"Can't invert FTPC ";
1026 if (i == 0) {LOG_WARN <<
" east rotation matrix!" << endm;}
1027 else {LOG_WARN <<
" west rotation matrix!" << endm;}
1028 LOG_WARN <<
"FTPC rotation matrix:" << (*mFtpcRotation[i]) << endm;
1029 LOG_WARN <<
"Inverse FTPC rotation matrix:" << (*mFtpcRotationInverse[i]) << endm;
1038 void StFtpcTrackingParams::PrintParams() {
1043 LOG_INFO <<
"Used parameters for FTPC tracking" << endm;
1044 LOG_INFO <<
"---------------------------------" << endm;
1047 LOG_INFO <<
"FTPC geometry" << endm;
1048 LOG_INFO <<
"Inner radius (cm)...........: " << mInnerRadius << endm;
1049 LOG_INFO <<
"Outer radius (cm)...........: " << mOuterRadius << endm;
1050 LOG_INFO <<
"Total number of padows......: " << mNumberOfPadRows << endm;
1051 LOG_INFO <<
"Number of padows per FTPC...: " << mNumberOfPadRowsPerSide << endm;
1053 for (Int_t i = 0; i < NumberOfPadRows(); i++) {
1054 LOG_DEBUG <<
"z-position of padrow ";
1055 if (i<10) {LOG_DEBUG <<
"z-position of padrow "<< i <<
" (cm): " << PadRowPosZ(i) << endm;}
1056 else {LOG_DEBUG <<
"z-position of padrow "<< i <<
" (cm): " << PadRowPosZ(i) << endm;}
1060 LOG_INFO <<
"Vertex position" << endm;
1061 LOG_INFO <<
"Max. vertex z-position to do tracking w/o warning (cm): " << mMaxVertexPosZWarning << endm;
1062 LOG_INFO <<
"Max. vertex z-position to do tracking at all (cm).....: " << mMaxVertexPosZError << endm;
1065 LOG_INFO <<
"Vertex reconstruction (with FTPC hits)" << endm;
1066 LOG_INFO <<
"# of histogram bins.............: " << mHistoBins << endm;
1067 LOG_INFO <<
"lower boundary of histogram (cm): " << mHistoMin << endm;
1068 LOG_INFO <<
"upper boundary of histogram (cm): " << mHistoMax << endm;
1069 LOG_INFO <<
"Dca cut (cm)....................: " << mMaxDcaVertex << endm;
1070 LOG_INFO <<
"min. # of tracks required.......: " << mMinNumTracks << endm;
1073 LOG_INFO <<
"Tracker settings" << endm;
1074 LOG_INFO <<
"# of row segments: " << mRowSegments << endm;
1075 LOG_INFO <<
"# of phi segments: " << mPhiSegments << endm;
1076 LOG_INFO <<
"# of eta segments: " << mEtaSegments << endm;
1079 LOG_INFO <<
"Settings for tracking" << endm;
1080 LOG_INFO <<
"Tracking method main vtx non vtx no fld laser" << endm;
1081 LOG_INFO <<
"Laser tracking switch: " << (Int_t)mLaser[0] <<
" "
1082 << (Int_t)mLaser[1] << " " << (Int_t)mLaser[2] << " "
1083 << (Int_t)mLaser[3] << endm;
1084 LOG_INFO << "
Vertex constraint....: " << (Int_t)mVertexConstraint[0] << " "
1085 << (Int_t)mVertexConstraint[1] << " " << (Int_t)mVertexConstraint[2] << " "
1086 << (Int_t)mVertexConstraint[3] << endm;
1087 LOG_INFO << "Max. tracklet length.: " << mMaxTrackletLength[0] << " "
1088 << mMaxTrackletLength[1] << " " << mMaxTrackletLength[2] << " "
1089 << mMaxTrackletLength[3] << endm;
1090 LOG_INFO << "Min.
track length....: " << mMinTrackLength[0] << " "
1091 << mMinTrackLength[1] << " " << mMinTrackLength[2] << " "
1092 << mMinTrackLength[3] << endm;
1093 LOG_INFO << "Tracklet row scope...: " << mRowScopeTracklet[0] << " "
1094 << mRowScopeTracklet[1] << " " << mRowScopeTracklet[2] << " "
1095 << mRowScopeTracklet[3] << endm;
1096 LOG_INFO << "
Track row scope......: " << mRowScopeTrack[0] << " "
1097 << mRowScopeTrack[1] << " " << mRowScopeTrack[2] << " "
1098 << mRowScopeTrack[3] << endm;
1099 LOG_INFO << "Phi scope............: " << mPhiScope[0] << " "
1100 << mPhiScope[1] << " " << mPhiScope[2] << " "
1101 << mPhiScope[3] << endm;
1102 LOG_INFO << "Eta scope............: " << mEtaScope[0] << " "
1103 << mEtaScope[1] << " " << mEtaScope[2] << " "
1104 << mEtaScope[3] << endm;
1105 LOG_INFO << "Max. DCA (cm)........: " << mMaxDca[0] << " "
1106 << mMaxDca[1] << " " << mMaxDca[2] << " "
1107 << mMaxDca[3] << endm;
1110 LOG_INFO << "Cuts for tracking" << endm;
1111 LOG_INFO << "Tracking method main vtx non vtx no fld laser" << endm;
1112 LOG_INFO << "Max. tracklet angle (rad).......: " << mMaxAngleTracklet[0] << " "
1113 << mMaxAngleTracklet[1] << " " << mMaxAngleTracklet[2] << " "
1114 << mMaxAngleTracklet[3] << endm;
1115 LOG_INFO << "Max.
track angle (rad)..........: " << mMaxAngleTrack[0] << " "
1116 << mMaxAngleTrack[1] << " " << mMaxAngleTrack[2] << " "
1117 << mMaxAngleTrack[3] << endm;
1118 LOG_INFO << "Max. dist. in circle fit (1/cm).: " << mMaxCircleDist[0] << " "
1119 << mMaxCircleDist[1] << " " << mMaxCircleDist[2] << " "
1120 << mMaxCircleDist[3] << endm;
1121 LOG_INFO << "Max. dist. in length fit (cm)...: " << mMaxLengthDist[0] << " "
1122 << mMaxLengthDist[1] << " " << mMaxLengthDist[2] << " "
1123 << mMaxLengthDist[3] << endm;
1126 LOG_INFO << "Settings for split
track merging" << endm;
1127 LOG_INFO << "Max. distance (cm): " << mMaxDist << endm;
1128 LOG_INFO << "Min. point ratio..: " << mMinPointRatio << endm;
1129 LOG_INFO << "Max. point ratio..: " << mMaxPointRatio << endm;
1132 LOG_DEBUG << "dE/dx" << endm;
1133 LOG_DEBUG << "Debugging level..............: " << mDebugLevel << endm;
1134 LOG_DEBUG << "Method Id....................: " << mIdMethod << endm;
1135 LOG_DEBUG << "Switch for dip/cross angles..: " << mNoAngle << endm;
1136 LOG_DEBUG << "Max. allowable hits per
track: " << mMaxHit << endm;
1137 LOG_DEBUG << "Min. no. of hits required....: " << mMinHit << endm;
1138 LOG_DEBUG << "Max. no. of tracks to be used: " << mMaxTrack << endm;
1139 LOG_DEBUG << "Length of pad (us/keV).......: " << mPadLength << endm;
1140 LOG_DEBUG << "Fraction for trunc. mean.....: " << mFracTrunc << endm;
1141 LOG_DEBUG << "a i p (GeV)..................: " << mAip << endm;
1142 LOG_DEBUG << "A large number...............: " << mALargeNumber << endm;
1145 LOG_INFO << "FTPC to global transformation" << endm;
1146 LOG_INFO << "Installation point x, y, z (east, cm).: " << InstallationPointX(0) << ", "<<InstallationPointY(0) << ", " << InstallationPointZ(0) << endm;
1147 LOG_INFO << "Installation point x, y, z (west, cm).: " << InstallationPointX(1) << ", "<< InstallationPointY(1) << ", " << InstallationPointZ(1) << endm;
1148 LOG_INFO << "Observed
vertex offset y (east, cm): " << ObservedVertexOffsetY(0) << endm;
1149 LOG_INFO << "Observed
vertex offset y (west, cm): " << ObservedVertexOffsetY(1) << endm;
1150 LOG_INFO << "Observed
vertex offset x (east, cm): " << ObservedVertexOffsetX(0) << endm;
1151 LOG_INFO << "Observed
vertex offset x (west, cm): " << ObservedVertexOffsetX(1) << endm;
1152 LOG_DEBUG << "FTPC east to global rotation Y: " << FtpcRotationY(0) << endm;
1153 LOG_DEBUG << "Global to FTPC east rotation Y: " << FtpcRotationYInverse(0) << endm;
1154 LOG_DEBUG << "FTPC west to global rotation Y: " << FtpcRotationY(1) << endm;
1155 LOG_DEBUG << "Global to FTPC west rotation Y: " << FtpcRotationYInverse(1) << endm;
1156 LOG_DEBUG << "FTPC east to global rotation X: " << FtpcRotationX(0) << endm;
1157 LOG_DEBUG << "Global to FTPC east rotation X: " << FtpcRotationXInverse(0) << endm;
1158 LOG_DEBUG << "FTPC west to global rotation X: " << FtpcRotationX(1) << endm;
1159 LOG_DEBUG << "Global to FTPC west rotation X: " << FtpcRotationXInverse(1) << endm;
1160 LOG_DEBUG << "FTPC east to global rotation: " << FtpcRotation(0) << endm;
1161 LOG_DEBUG << "Global to FTPC east rotation: " << FtpcRotationInverse(0) << endm;
1162 LOG_DEBUG << "FTPC west to global rotation: " << FtpcRotation(1) << endm;
1163 LOG_DEBUG << "Global to FTPC west rotation: " << FtpcRotationInverse(1) << endm;
1165 LOG_DEBUG << "TPC to global transformation" << endm;
1166 LOG_INFO << "Position of TPC (cm)..: " << TpcPositionInGlobal() <<endm;
1168 LOG_DEBUG << "Global to TPC rotation: " << GlobalToTpcRotation()<< endm;
StMatrixD TpcToGlobalRotation()
transformation due to rotated and displaced TPC
Double_t MaxAngleTracklet(Int_t tracking_method)
Tracklets.