GENIEGenerator
Loading...
Searching...
No Matches
genie::geometry::PathSegment Class Reference

#include <PathSegmentList.h>

Public Member Functions

 PathSegment ()
 ~PathSegment ()
void SetEnter (const TVector3 &p3enter, double raydist)
 point of entry to geometry element
void SetEnter (const Double_t *p3enter, double raydist)
void SetExit (const TVector3 &p3exit)
 point of exit from geometry element
void SetExit (const Double_t *p3exit)
void SetGeo (const TGeoVolume *gvol, const TGeoMedium *gmed, const TGeoMaterial *gmat)
 info about the geometry element
void SetPath (const char *path)
void SetStep (Double_t step, bool setlimits=true)
 step taken in the geometry element
bool IsTrimmedEmpty () const
Double_t GetSummedStepRange () const
 get the sum of all the step range (in case step has been trimmed or split)
TVector3 GetPosition (Double_t frac) const
 calculate position within allowed ranges passed on fraction of total
void DoCrossCheck (const TVector3 &startpos, double &ddist, double &dstep) const
 perform cross check on segment, return differences
void Print (ostream &stream) const

Public Attributes

Double_t fRayDist
 distance from start of ray
Double_t fStepLength
 total step size in volume
const TGeoVolume * fVolume
 ref only ptr to TGeoVolume
const TGeoMedium * fMedium
 ref only ptr to TGeoMedium
const TGeoMaterial * fMaterial
 ref only ptr to TGeoMaterial
TVector3 fEnter
 top vol coordinates and units
TVector3 fExit
 top vol coordinates and units
std::string fPathString
 full path names
StepRangeSet fStepRangeSet
 collection of {steplo,stephi} pairs

Friends

ostream & operator<< (ostream &stream, const PathSegment &list)
bool operator< (const PathSegment &lhs, const PathSegment &rhs)

Detailed Description

Definition at line 56 of file PathSegmentList.h.

Constructor & Destructor Documentation

◆ PathSegment()

PathSegment::PathSegment ( void )

Definition at line 76 of file PathSegmentList.cxx.

76 :
77 fRayDist(0), fStepLength(0),
78 fVolume(0), fMedium(0), fMaterial(0),
79 fEnter(), fExit()
80{
81}
const TGeoMaterial * fMaterial
ref only ptr to TGeoMaterial
TVector3 fEnter
top vol coordinates and units
TVector3 fExit
top vol coordinates and units
const TGeoVolume * fVolume
ref only ptr to TGeoVolume
Double_t fStepLength
total step size in volume
const TGeoMedium * fMedium
ref only ptr to TGeoMedium
Double_t fRayDist
distance from start of ray

References fEnter, fExit, fMaterial, fMedium, fRayDist, fStepLength, and fVolume.

Referenced by operator<.

◆ ~PathSegment()

genie::geometry::PathSegment::~PathSegment ( )
inline

Definition at line 60 of file PathSegmentList.h.

60{ ; }

Member Function Documentation

◆ DoCrossCheck()

void PathSegment::DoCrossCheck ( const TVector3 & startpos,
double & ddist,
double & dstep ) const

perform cross check on segment, return differences

Definition at line 84 of file PathSegmentList.cxx.

86{
87 double dist_recalc = (fEnter-startpos).Mag();
88 ddist = dist_recalc - fRayDist;
89
90 double step_recalc = (fExit-fEnter).Mag();
91 dstep = step_recalc - fStepLength;
92}

References fEnter, fExit, fRayDist, and fStepLength.

Referenced by genie::geometry::PathSegmentList::CrossCheck(), and genie::geometry::PathSegmentList::Print().

◆ GetPosition()

TVector3 PathSegment::GetPosition ( Double_t frac) const

calculate position within allowed ranges passed on fraction of total

calculate position within allowed ranges passed as fraction of trimmed segment seg.fEnter + fractotal * ( seg.fExit - seg.fEnter );

Definition at line 148 of file PathSegmentList.cxx.

149{
150 /// calculate position within allowed ranges passed as
151 /// fraction of trimmed segment
152 /// seg.fEnter + fractotal * ( seg.fExit - seg.fEnter );
153 Double_t sumrange = GetSummedStepRange();
154 if ( sumrange < 0.0 ) {
155 LOG("PathS", pFATAL) << "GetPosition failed fractrim=" << fractrim
156 << " because sumrange = " << sumrange;
157 return TVector3(0,0,0);
158 }
159 Double_t target = fractrim * sumrange;
160 Double_t sum = 0;
161 for ( size_t i = 0; i < fStepRangeSet.size(); ++i ) {
162 const StepRange& sr = fStepRangeSet[i];
163 Double_t ds = ( sr.second - sr.first );
164 sum += ds;
165#ifdef RWH_DEBUG
166 LOG("PathS", pINFO) << "GetPosition fractrim=" << fractrim
167 << " target " << target << " [" << i << "] "
168 << " ds " << ds << " sum " << sum;
169#endif
170 if ( sum >= target ) {
171 Double_t overstep = sum - target;
172 Double_t fractotal = (sr.second - overstep)/fStepLength;
173#ifdef RWH_DEBUG
174 LOG("PathS", pINFO) << "GetPosition fractrim=" << fractrim
175 << " overstep " << overstep
176 << " fractotal " << fractotal;
177#endif
178 return fEnter + fractotal * ( fExit - fEnter );
179 }
180 }
181 LOG("PathS", pFATAL) << "GetPosition failed fractrim=" << fractrim;
182 return TVector3(0,0,0);
183}
#define pINFO
Definition Messenger.h:62
#define pFATAL
Definition Messenger.h:56
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
StepRangeSet fStepRangeSet
collection of {steplo,stephi} pairs
Double_t GetSummedStepRange() const
get the sum of all the step range (in case step has been trimmed or split)
std::pair< Double_t, Double_t > StepRange

References fEnter, fExit, fStepLength, fStepRangeSet, GetSummedStepRange(), LOG, pFATAL, and pINFO.

Referenced by genie::geometry::ROOTGeomAnalyzer::GenerateVertex().

◆ GetSummedStepRange()

Double_t PathSegment::GetSummedStepRange ( ) const

get the sum of all the step range (in case step has been trimmed or split)

Definition at line 138 of file PathSegmentList.cxx.

139{
140 Double_t sum = 0;
141 for ( size_t i = 0; i < fStepRangeSet.size(); ++i ) {
142 const StepRange& sr = fStepRangeSet[i];
143 sum += ( sr.second - sr.first );
144 }
145 return sum;
146}

References fStepRangeSet.

Referenced by genie::geometry::ROOTGeomAnalyzer::ComputeMatLengths(), genie::geometry::PathSegmentList::FillMatStepSum(), genie::geometry::GeomVolSelectorI::GenerateTrimmedList(), genie::geometry::ROOTGeomAnalyzer::GenerateVertex(), and GetPosition().

◆ IsTrimmedEmpty()

bool genie::geometry::PathSegment::IsTrimmedEmpty ( ) const
inline

Definition at line 84 of file PathSegmentList.h.

84{ return fStepRangeSet.empty(); }

References fStepRangeSet.

◆ Print()

void PathSegment::Print ( ostream & stream) const

Definition at line 95 of file PathSegmentList.cxx.

96{
97 const char* vname = (fVolume) ? fVolume->GetName() : "no volume";
98 const char* mname = (fMaterial) ? fMaterial->GetName() : "no material";
100 //<< genie::pathsegutils::Vec3AsString(&fExit)
101 << " " // "raydist "
102 << std::setw(12) << fRayDist
103 << " " // "step "
104 << std::setw(12) << fStepLength << " "
105 << std::left
106 << std::setw(16) << vname << " '"
107 << std::setw(18) << mname << "' ";
108 size_t n = fStepRangeSet.size();
109 const int rngw = 24;
110 if ( n == 0 ) {
111 stream << std::setw(rngw) << "[ ]";
112 } else {
113 std::ostringstream rngset;
114 for ( size_t i = 0 ; i < n; ++i ) {
115 const StepRange& sr = fStepRangeSet[i];
116 rngset << "[" << sr.first << ":" << sr.second << "]";
117 }
118 stream << std::setw(rngw) << rngset.str();
119 }
120 stream << std::right;
121#ifdef PATHSEG_KEEP_PATH
122 stream << " " << fPathString;
123#endif
124
125}
std::string fPathString
full path names
string Vec3AsString(const TVector3 *vec)

References fEnter, fMaterial, fPathString, fRayDist, fStepLength, fStepRangeSet, fVolume, and genie::pathsegutils::Vec3AsString().

Referenced by operator<<.

◆ SetEnter() [1/2]

void genie::geometry::PathSegment::SetEnter ( const Double_t * p3enter,
double raydist )
inline

Definition at line 65 of file PathSegmentList.h.

66 { fEnter.SetXYZ(p3enter[0],p3enter[1],p3enter[2]); fRayDist = raydist; }

References fEnter, and fRayDist.

◆ SetEnter() [2/2]

void genie::geometry::PathSegment::SetEnter ( const TVector3 & p3enter,
double raydist )
inline

point of entry to geometry element

Definition at line 63 of file PathSegmentList.h.

64 { fEnter = p3enter; fRayDist = raydist; }

References fEnter, and fRayDist.

Referenced by genie::geometry::ROOTGeomAnalyzer::SwimOnce().

◆ SetExit() [1/2]

void genie::geometry::PathSegment::SetExit ( const Double_t * p3exit)
inline

Definition at line 70 of file PathSegmentList.h.

71 { fExit.SetXYZ(p3exit[0],p3exit[1],p3exit[2]); }

References fExit.

◆ SetExit() [2/2]

void genie::geometry::PathSegment::SetExit ( const TVector3 & p3exit)
inline

point of exit from geometry element

Definition at line 69 of file PathSegmentList.h.

69{ fExit = p3exit; }

References fExit.

Referenced by genie::geometry::ROOTGeomAnalyzer::SwimOnce().

◆ SetGeo()

void genie::geometry::PathSegment::SetGeo ( const TGeoVolume * gvol,
const TGeoMedium * gmed,
const TGeoMaterial * gmat )
inline

info about the geometry element

Definition at line 74 of file PathSegmentList.h.

76 { fVolume = gvol; fMedium = gmed; fMaterial = gmat; }

References fMaterial, fMedium, and fVolume.

Referenced by genie::geometry::ROOTGeomAnalyzer::SwimOnce().

◆ SetPath()

void genie::geometry::PathSegment::SetPath ( const char * path)
inline

Definition at line 78 of file PathSegmentList.h.

78{ fPathString = path; }

References fPathString.

Referenced by genie::geometry::ROOTGeomAnalyzer::SwimOnce().

◆ SetStep()

void PathSegment::SetStep ( Double_t step,
bool setlimits = true )

step taken in the geometry element

Definition at line 128 of file PathSegmentList.cxx.

129{
130 fStepLength = step;
131 if (setlimits) {
132 fStepRangeSet.clear();
133 fStepRangeSet.push_back(StepRange(0,step));
134 }
135}

References fStepLength, and fStepRangeSet.

Referenced by genie::geometry::ROOTGeomAnalyzer::SwimOnce().

◆ operator<

bool operator< ( const PathSegment & lhs,
const PathSegment & rhs )
friend

Definition at line 116 of file PathSegmentList.h.

117 { return ( lhs.fRayDist < rhs.fRayDist ); }

References fRayDist, and PathSegment().

◆ operator<<

ostream & operator<< ( ostream & stream,
const PathSegment & list )
friend

Definition at line 45 of file PathSegmentList.cxx.

46 {
47 ps.Print(stream);
48 return stream;
49 }

References Print().

Member Data Documentation

◆ fEnter

TVector3 genie::geometry::PathSegment::fEnter

top vol coordinates and units

Definition at line 108 of file PathSegmentList.h.

Referenced by DoCrossCheck(), GetPosition(), PathSegment(), Print(), SetEnter(), and SetEnter().

◆ fExit

TVector3 genie::geometry::PathSegment::fExit

top vol coordinates and units

Definition at line 109 of file PathSegmentList.h.

Referenced by DoCrossCheck(), GetPosition(), PathSegment(), SetExit(), and SetExit().

◆ fMaterial

◆ fMedium

const TGeoMedium* genie::geometry::PathSegment::fMedium

ref only ptr to TGeoMedium

Definition at line 106 of file PathSegmentList.h.

Referenced by PathSegment(), SetGeo(), and genie::geometry::GeomVolSelectorBasic::TrimSegment().

◆ fPathString

std::string genie::geometry::PathSegment::fPathString

full path names

Definition at line 111 of file PathSegmentList.h.

Referenced by Print(), SetPath(), and genie::geometry::GeomVolSelectorBasic::TrimSegment().

◆ fRayDist

Double_t genie::geometry::PathSegment::fRayDist

◆ fStepLength

Double_t genie::geometry::PathSegment::fStepLength

total step size in volume

Definition at line 104 of file PathSegmentList.h.

Referenced by DoCrossCheck(), GetPosition(), PathSegment(), Print(), and SetStep().

◆ fStepRangeSet

◆ fVolume

const TGeoVolume* genie::geometry::PathSegment::fVolume

The documentation for this class was generated from the following files: