#ifndef TRACKFILTERBFCALIBND_H
#define TRACKFILTERBFCALIBND_H
//_____________________________________________________________________________
///
/// \class TrackFilterBFCalibND 
///
/// Filter that selects only tracks useful for calibrating ND b-field.
/// Requires minimum number of planes, entire track goes through 
/// "partial coverage" area and ends in the detector.
///
/// \author Sergei avva@fnal.gov
///

#include "DataUtil/PlaneOutline.h"

#include "CandFitTrackSA/TrackFilter.h"


class AlgConfig;
class TrackContext;

class TrackFilterBFCalibND : public TrackFilter
{

public:
    
    TrackFilterBFCalibND();

    ~TrackFilterBFCalibND();

    virtual Bool_t Pass(const TrackContext& ) const;
    virtual void   Config(const AlgConfig& );
    

private:

    ///
    /// part of TrackFilterBFCalibND::Pass implementation
    ///   
    Bool_t  IsInCoverage(const TrackContext& trackContext) const;
 
    ///
    /// min # of hit planes per view 
    ///
    Int_t   fNHitsInViewMin; 
    
    ///
    /// max end plane (to select stopping tracks) 
    ///
    Int_t   fEndPlaneMax; 
    
    ///
    /// min acceptable track length in #planes
    ///
    Int_t   fNPlanesMin;
    
    ///
    /// min distance to the edge of ND partial coverage area
    /// (as given by PlaneOutline)
    ///
    Float_t   fEdgeDistanceMin;
    
    ///
    /// PlaneOutline calculates distance from a given point to 
    /// the detector edges
    ///
    PlaneOutline    fOutline;
    
};

#endif
