9#include "FairTrackParam.h"
11#include "TGeoManager.h"
13#include "TGeoMaterial.h"
14#include "TGeoVolume.h"
28 Bool_t downstream = zOut <= par->GetZ();
31 InitTrack(par, downstream);
32 if (gGeoManager->IsOutside()) {
42 gGeoManager->PushPoint();
43 stepInfo = MakeStep();
46 if (gGeoManager->IsOutside()) {
48 gGeoManager->PopDummy();
52 if (IsNaN(gGeoManager->GetCurrentPoint()[0]) ||
53 IsNaN(gGeoManager->GetCurrentPoint()[1]) ||
54 IsNaN(gGeoManager->GetCurrentPoint()[2])) {
56 gGeoManager->PopDummy();
60 Bool_t away = (!downstream) ? stepInfo.
GetZpos() >= zOut : stepInfo.
GetZpos() <= zOut;
62 gGeoManager->PopPoint();
63 Float_t l = CalcLength(zOut);
68 gGeoManager->PopDummy();
70 inter.push_back(stepInfo);
75void BmnGeoNavigator::InitTrack(
const FairTrackParam* par, Bool_t downstream)
const {
76 Double_t nz = 1. / TMath::Sqrt(par->GetTx() * par->GetTx() + par->GetTy() * par->GetTy() + 1);
78 Double_t nx = par->GetTx() * nz;
79 Double_t ny = par->GetTy() * nz;
87 gGeoManager->InitTrack(par->GetX(), par->GetY(), par->GetZ(), nx, ny, nz);
93 TGeoMaterial* mat = gGeoManager->GetCurrentNode()->GetMedium()->GetMaterial();
94 matInfo.
SetRL(mat->GetRadLen());
95 matInfo.
SetRho(mat->GetDensity());
96 matInfo.
SetZ(mat->GetZ());
97 matInfo.
SetA(mat->GetA());
98 matInfo.
SetName(gGeoManager->GetCurrentNode()->GetName());
101 gGeoManager->FindNextBoundaryAndStep(25.);
103 gGeoManager->SetStep(step);
104 gGeoManager->Step(kFALSE);
107 matInfo.
SetLength(gGeoManager->GetStep());
108 matInfo.
SetZpos(gGeoManager->GetCurrentPoint()[2]);
113Float_t BmnGeoNavigator::CalcLength(Float_t zOut)
const {
115 Float_t nx = gGeoManager->GetCurrentDirection()[0];
116 Float_t ny = gGeoManager->GetCurrentDirection()[1];
117 Float_t nz = gGeoManager->GetCurrentDirection()[2];
118 Float_t z = gGeoManager->GetCurrentPoint()[2];
120 Float_t t0 = (zOut - z) / nz;
122 Float_t dx = nx * t0;
123 Float_t dy = ny * t0;
124 Float_t dz = (zOut - z);
127 return std::sqrt(dx * dx + dy * dy + dz * dz);
virtual ~BmnGeoNavigator()
BmnStatus FindIntersections(const FairTrackParam *par, Float_t zOut, vector< BmnMaterialInfo > &inter)
void SetLength(Float_t length)
void SetName(const string &name)
void SetZpos(Float_t zpos)