Program Listing for File SCBoundary.h

Return to documentation for file (larflow/SCBoundary/SCBoundary.h)

#ifndef __LARFLOW_SCB_SCBOUNDARY_H__
#define __LARFLOW_SCB_SCBOUNDARY_H__

#include <vector>

namespace larflow {
namespace scb {

  class SCBoundary {

  public:

    typedef enum { kTop=0, kBottom, kUpstream, kDownstream, kAnode, kCathode, kNumBoundaries } Boundary_t;

    SCBoundary() {};
    virtual ~SCBoundary() {};

    template <class T>
      T dist2boundary( const std::vector<T>& pos, Boundary_t& btype ) const;

    float  dist2boundary( float  x, float y, float z ) const;
    double dist2boundary( double x, double y, double z ) const;
    float  dist2boundary(  float x,  float y,  float z, int& ibtype ) const;
    double dist2boundary( double x, double y, double z, int& ibtype ) const;

    template <class T>
      T XatBoundary( const std::vector<T>& pos ) const;
    float  XatBoundary( float x,  float y,  float z ) const;
    double XatBoundary( double x, double y, double z ) const;

  protected:

    // The units are cm
    // index from 1 to 10 for position dependece. See the talk
    /* https://microboone-docdb.fnal.gov/cgi-bin/private/ShowDocument?docid=26423 */

    static constexpr double YX_TOP_y1_array     = 116;
    static double YX_TOP_x1_array[10];
    static double YX_TOP_y2_array[10];
    static constexpr double YX_TOP_x2_array = 256;

    static constexpr double YX_BOT_y1_array     = -115;
    static double YX_BOT_x1_array[10];
    static double YX_BOT_y2_array[10];
    static constexpr double YX_BOT_x2_array = 256;

    static constexpr double ZX_Up_z1_array = 0;
    static constexpr double ZX_Up_x1_array = 120;
    static constexpr double ZX_Up_z2_array = 10;
    static constexpr double ZX_Up_x2_array = 256;

    static constexpr double ZX_Dw_z1_array     = 1037;
    static double ZX_Dw_x1_array[10];
    static double ZX_Dw_z2_array[10];
    static constexpr double ZX_Dw_x2_array     = 256;

    template <class T>
      T pointLineDistance( const std::vector<T>& linept1,
                           const std::vector<T>& linept2,
                           const std::vector<T>& testpt ) const;

  };


}
}

#endif