1 #ifndef __JCYLINDER3D__ 
    2 #define __JCYLINDER3D__ 
   22 namespace JGEOMETRY3D {}
 
   23 namespace JPP { 
using namespace JGEOMETRY3D; }
 
   25 namespace JGEOMETRY3D {
 
   88                 const double precision = std::numeric_limits<double>::epsilon()) :
 
   93       if (__begin != __end) {
 
   95         zmin = std::numeric_limits<double>::max();
 
   96         zmax = std::numeric_limits<double>::lowest();
 
   98         for (
T i = __begin; i != __end; ++i) {
 
   99           if (i->getZ() < 
zmin) 
zmin = i->getZ();
 
  100           if (i->getZ() > 
zmax) 
zmax = i->getZ();
 
  244         return sqrt(R*R + dz*dz);
 
  280       double path[] = { 0.0, 0.0 };
 
  282       if (fabs(axis.
getDZ()) != 0.0) {
 
  291         for (
int i = 0; i != 2; ++i) {
 
  293           const double u = (Z[i] - axis.
getZ()) / axis.
getDZ();
 
  295           const double y =  axis.
getY() + u * axis.
getDY() - this->
getY();
 
  303       if (fabs(axis.
getDZ()) != 1.0) {
 
  307         const double x  = axis.
getX() - this->
getX();
 
  308         const double y  = axis.
getY() - this->
getY();
 
  309         const double dx = axis.
getDX();
 
  310         const double dy = axis.
getDY();
 
  313         const double a  =   (dx * dx +  dy * dy);
 
  314         const double b  = 2*(dx * x  +  dy * y);
 
  315         const double c  =   (x  * x  +  y  * y)  -  R * R;
 
  317         const double q  = b*b - 4*a*c;
 
  322             (-b - sqrt(q)) / (2*a),
 
  323             (-b + sqrt(q)) / (2*a)
 
  326           for (
int i = 0; i != 2; ++i) {
 
  328             const double z = axis.
getZ() + u[i] * axis.
getDZ();
 
  337       return std::make_pair(path[0], path[1]);
 
  351       in >> cylinder.
zmin >> cylinder.
zmax;
 
  366       const JFormat format(out, getFormat<JCylinder3D>(
JFormat_t(9, 3, std::ios::fixed | std::ios::showpos)));
 
  368       out << static_cast<const JCircle2D&>(cylinder);
 
  370       out << format << cylinder.
zmin;
 
  372       out << format << cylinder.
zmax;
 
  388       in >> cylinder.
zmin >> cylinder.
zmax;
 
  403       out << static_cast<const JCircle2D&>(cylinder);
 
  404       out << cylinder.
zmin << cylinder.
zmax;
 
const JPosition2D & getPosition() const 
Get position. 
 
Data structure for vector in two dimensions. 
 
JCylinder3D(T __begin, T __end, const double precision=std::numeric_limits< double >::epsilon())
Constructor. 
 
Interface for binary output. 
 
double getRadius() const 
Get radius. 
 
JVector2D()
Default constructor. 
 
JPosition2D()
Default constructor. 
 
Data structure for circle in two dimensions. 
 
void setZmin(const double zmin)
Set minimal z position. 
 
friend JWriter & operator<<(JWriter &out, const JCylinder3D &cylinder)
Write cylinder to output. 
 
double getZmin() const 
Get minimal z position. 
 
double getDistanceSquared(const JVector3D &pos) const 
Get square of distance between cylinder wall and given position. 
 
JCylinder3D & add(const JVector3D &pos)
Add position. 
 
intersection_type getIntersection(const JAxis3D &axis) const 
Get intersection points of axis with cylinder. 
 
friend JReader & operator>>(JReader &in, JCylinder3D &cylinder)
Read cylinder from input. 
 
double getY() const 
Get y position. 
 
friend std::istream & operator>>(std::istream &in, JCylinder3D &cylinder)
Read cylinder from input stream. 
 
JVector2D & sub(const JVector2D &vector)
Subtract vector. 
 
bool is_inside(const JVector2D &pos, const double precision=std::numeric_limits< double >::min()) const 
Check whether given point is inside circle. 
 
JPosition3D getCenter() const 
Get centre. 
 
friend std::ostream & operator<<(std::ostream &out, const JCylinder3D &cylinder)
Write cylinder to output stream. 
 
$WORKDIR driver txt done cat $WORKDIR driver txt<< EOFprocess ${DATAFILTER}$FILTER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&JDataFilter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAFILTER}-P $PORT</dev/null > &/dev/null)&';process ${DATAWRITER}$WRITER_HOST csh-c '(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&JDataWriter-H\$SERVER\$-M\$LOGGER\$-d $DEBUG-u ${DATAWRITER}</dev/null > &/dev/null)&';print enterevent ev_init{RC_CMD}event ev_reset{RC_CMD}event ev_init{RC_CMD}event ev_configure{RC_DFLTR%<$WORKDIR/ev_configure_datafilter.txt > RC_DOM<$WORKDIR/ev_configure_domsimulator.txt > RC_DWRT path
 
Data structure for vector in three dimensions. 
 
double getDY() const 
Get y direction. 
 
double getDX() const 
Get x direction. 
 
double getX() const 
Get x position. 
 
do set_variable OUTPUT_DIRECTORY $WORKDIR T
 
static const double PI
Mathematical constants. 
 
void addMargin(const double D)
Add (safety) margin. 
 
double getY() const 
Get y position. 
 
Interface for binary input. 
 
then usage $script[distance] fi case set_variable R
 
double getVolume() const 
Get volume. 
 
double getZmax() const 
Get maximal z position. 
 
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
 
JCylinder3D()
Default constructor. 
 
double getX() const 
Get x position. 
 
bool is_inside(const JVector3D &pos) const 
Check whether given point is inside cylinder. 
 
void setZmax(const double zmax)
Set maximal z position. 
 
do set_variable MODULE getModule a $WORKDIR detector_a datx L $STRING JEditDetector a $WORKDIR detector_a datx M $MODULE setz o $WORKDIR detector_a datx JEditDetector a $WORKDIR detector_b datx M $MODULE setz o $WORKDIR detector_b datx done echo Output stored at $WORKDIR detector_a datx and $WORKDIR tripod_a txt JDrawDetector2D a $WORKDIR detector_a datx a $WORKDIR detector_b datx L BL o detector $FORMAT $BATCH JDrawDetector2D T $WORKDIR tripod_a txt T $WORKDIR tripod_b txt L BL o tripod $FORMAT $BATCH JCompareDetector a $WORKDIR detector_a datx b $WORKDIR detector_b datx o $WORKDIR abc root &dev null for KEY in X Y Z
 
Data structure for position in three dimensions. 
 
std::pair< double, double > intersection_type
Type definition of intersection. 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
 
JCylinder3D(const JCircle2D &circle, const double zmin, const double zmax)
Constructor. 
 
double getDistance(const JVector3D &pos) const 
Get distance between cylinder wall and given position. 
 
double getLength() const 
Get length. 
 
do echo Generating $dir eval D
 
double getZ() const 
Get z position. 
 
double getDZ() const 
Get z direction.