Program Listing for File ProjectionDefectSplitter.h

Return to documentation for file (larflow/Reco/ProjectionDefectSplitter.h)

#ifndef __LARFLOW_PROJECTION_DEFECT_SPLITTER_H__
#define __LARFLOW_PROJECTION_DEFECT_SPLITTER_H__

#include <vector>
#include <string>

#include "larcv/core/Base/larcv_base.h"
#include "larcv/core/DataFormat/IOManager.h"
#include "larcv/core/DataFormat/Image2D.h"
#include "DataFormat/storage_manager.h"
#include "DataFormat/larflowcluster.h"

#include "cluster_functions.h"

namespace larflow {
namespace reco {

  class ProjectionDefectSplitter : public larcv::larcv_base {

  public:

    ProjectionDefectSplitter()
      : larcv::larcv_base("ProjectionDefectSplitter"),
      _input_lfhit_tree_name("larmatch"),
      _output_cluster_tree_name("projsplit"),
      _min_larmatch_score(0.0),
      _maxdist(2.0),
      _minsize(20),
      _maxkd(30)
      {};
    virtual ~ProjectionDefectSplitter() {};

    void process( larcv::IOManager& iolc, larlite::storage_manager& ioll );

    int split_clusters( std::vector<cluster_t>& cluster_v,
                        const std::vector<larcv::Image2D>& adc_v,
                        const float min_second_pca_len );

  protected:

    larlite::larflowcluster
      _makeLArFlowCluster( cluster_t& cluster,
                           const larlite::event_larflow3dhit& source_lfhit_v );

    cluster_t _absorb_nearby_hits( const cluster_t& cluster,
                                   const std::vector<larlite::larflow3dhit>& hit_v,
                                   std::vector<int>& used_hits_v,
                                   float max_dist2line );

    void _runSplitter( const larlite::event_larflow3dhit& inputhits,
                       const std::vector<larcv::Image2D>& adc_v,
                       std::vector<int>& used_hits_v,
                       std::vector<cluster_t>& output_cluster_v );

    void _defragment_clusters( std::vector<cluster_t>& cluster_v,
                               const float max_2nd_pca_eigenvalue );

    // PARAMETER NAMES
  protected:

    std::string _input_lfhit_tree_name;
    std::string _output_cluster_tree_name;
    float _min_larmatch_score;
    float _maxdist;
    int   _minsize;
    int   _maxkd;

  public:

    void set_input_larmatchhit_tree_name( std::string name ) { _input_lfhit_tree_name=name; };

    void set_output_tree_name( std::string name ) { _output_cluster_tree_name=name; };

    void set_min_larmatch_score( float min_score ) { _min_larmatch_score = min_score; };


    void set_dbscan_pars( float maxdist, int minsize, int maxkd ) {
      _maxdist = maxdist;
      _minsize = minsize;
      _maxkd = maxkd;
    };

  };

}
}

#endif