14 using namespace genie;
15 using namespace genie::geometry;
17 #include <TGeoVolume.h>
18 #include <TGeoMaterial.h>
19 #include <TGeoMedium.h>
22 GeomVolSelectorRockBox::GeomVolSelectorRockBox()
24 , fExpandInclusion(false)
25 , fRockBoxShape(0), fROOTGeom(0)
31 for (
int i=0; i<3; ++i) {
66 for ( ; srs_itr != srs_end; ++srs_itr ) {
67 Double_t slo = srs_itr->first;
68 Double_t shi = srs_itr->second;
75 bool nonzerostep = ( step1.first != step1.second );
77 modifiedStepRangeSet.push_back(step1);
79 modifiedStepRangeSet.push_back(step2);
102 LOG(
"GeomVolSel",
pFATAL) <<
"no shape defined";
134 for (
int j = 0; j < 3; ++j ) {
147 for (
int j = 0; j < 3; ++j ) {
156 for (
int j = 0; j < 3; ++j ) {
167 double energy =
fP4.Energy();
168 double boxXYZMin[3], boxXYZMax[3];
169 for (
int j = 0; j < 3; ++j ) {
170 double dmin = 0, dmax = 0;
172 if ( dircos > 0 ) dmin = dircos*energy/
fDeDx;
173 else dmax = -dircos*energy/
fDeDx;
177 cout <<
"MakeRockBox [" << j <<
"] wall " <<
fMinimumWall
178 <<
" dm " << dmin <<
" " << dmax <<
" dircos " << dircos
179 <<
" e " << energy <<
" dedx " <<
fDeDx << endl;
204 static bool first =
true;
206 cout <<
"MakeRockBox first Minimal min ["
214 cout <<
"MakeRockBox first Inclusion min ["
224 cout <<
"MakeRockBox this ray using min ["
225 << boxXYZMin[0] <<
","
226 << boxXYZMin[1] <<
","
227 << boxXYZMin[2] <<
"]"
229 << boxXYZMax[0] <<
","
230 << boxXYZMax[1] <<
","
231 << boxXYZMax[2] <<
"]" << endl;
239 cout <<
"fid after: " << *
fShape << endl;
GENIE Interface for user-defined volume selector functors Trim path segments based on the intersectio...
void TrimSegment(PathSegment &segment) const
const TVector3 & GetStartPos() const
void TrimSegment(PathSegment &segment) const
TLorentzVector fP4
current neutrino ray's momentum (global)
std::vector< StepRange > StepRangeSet
Double_t fMinimalXYZMin[3]
void SetRockBoxInclusion(Double_t *xyzmin, Double_t *xyzmax)
Bool_t fIsHit
distance along ray to exit fid volume
StepRangeSet fStepRangeSet
collection of {steplo,stephi} pairs
virtual void ConvertShapeMaster2Top(const ROOTGeomAnalyzer *rgeom)
Object to be filled with the neutrino path-segments representing geometry volume steps (generally bou...
const TVector3 & GetDirection() const
void SetMinimumWall(Double_t w)
Double_t fInclusionXYZMin[3]
minimum distance around (XYZmin,XYZmax)
Double_t fMinimumWall
interior box upper corner
virtual ~GeomVolSelectorRockBox()
std::string fName
volume selector name
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
bool fRemoveEntries
whether selector should remove entries or set hi=lo
RayIntercept fInterceptRock
FidShape * fRockBoxShape
expand from minimal or inclusion box?
Double_t fInclusionXYZMax[3]
box within which events are always
A ROOT/GEANT4 geometry driver.
void BeginPSList(const PathSegmentList *untrimmed) const
std::pair< Double_t, Double_t > StepRange
static constexpr double ps
const ROOTGeomAnalyzer * fROOTGeom
shape changes for every nu ray
Double_t fRayDist
distance from start of ray
virtual RayIntercept Intercept(const TVector3 &start, const TVector3 &dir) const =0
virtual void ConvertShapeMaster2Top(const ROOTGeomAnalyzer *rgeom)
virtual void ConvertMaster2Top(const ROOTGeomAnalyzer *rgeom)=0
void SetReverseFiducial(Bool_t reverse=true)
static Bool_t NewStepPairs(Bool_t selectReverse, Double_t raydist, Double_t slo, Double_t shi, const RayIntercept &intercept, Bool_t &split, StepRange &step1, StepRange &step2)
void BeginPSList(const PathSegmentList *untrimmed) const
Bool_t fExpandInclusion
how to scale from energy to distance
void SetRockBoxMinimal(Double_t *xyzmin, Double_t *xyzmax)
void MakeBox(Double_t *xyzmin, Double_t *xyzmax)
FidShape * fShape
select for "outside" fiducial?
void push_back(const PlaneParam &pln)
Double_t fMinimalXYZMax[3]
interior box lower corner
const PathSegmentList * fCurrPathSegmentList
shape