ROOT logo
#ifndef ALIMUONSEGMENT_H
#define ALIMUONSEGMENT_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice                               */

// $Id$

/// \ingroup geometry
/// \class AliMUONSegment
/// \brief A basic line segment, used for contour making algorithm(s)
/// 
// author Laurent Aphecetche

#ifndef ROOT_TObject
#  include "TObject.h"
#endif

class AliMUONSegment : public TObject
{
public:
  AliMUONSegment();
  AliMUONSegment(Double_t xstart, Double_t ystart, Double_t xend, Double_t yend);
  /// dtor
  virtual ~AliMUONSegment() {}
  
  virtual Int_t	Compare(const TObject* obj) const;

  /// We are sortable
  virtual Bool_t IsSortable() const { return kTRUE; }
  
  /// Return the x-coordinate of our starting point
  Double_t StartX() const { return fStartX; }
  /// Return the y-coordinate of our starting point
  Double_t StartY() const { return fStartY; }  
  /// Return the x-coordinate of our ending point
  Double_t EndX() const { return fEndX; }
  /// Return the y-coordinate of our ending point
  Double_t EndY() const { return fEndY; }
    
  /// Return our smallest y (of starting or ending point)
  double SmallerY() const { return fSmallerY; }

  /// Whether we are a horizontal segment
  Bool_t IsHorizontal() const { return fIsHorizontal; }
  
  /// Whethere we are a vertical segment
  Bool_t IsVertical() const { return fIsVertical; }
  
  /// Whether we are a left edge
  Bool_t IsLeftEdge() const { return fIsLeftEdge; }

  /// Whether we are a right edge
  Bool_t IsRightEdge() const { return fIsRightEdge; }
  
  /// Return our bottom y
  double Bottom() const { return SmallerY(); }
  
  double Top() const;
  
  double Distance() const;
  
  /// Whether we're just a point
  Bool_t IsAPoint() const { return fIsAPoint; }
  
  const char* AsString() const;
  
  static Bool_t AreEqual(double a, double b);

  void Print(Option_t* opt="") const;
  
  void Set(Double_t xstart, Double_t ystart, Double_t xend, Double_t yend);
  
private:
  Double_t fStartX; ///< x of start point
  Double_t fStartY; ///< y of start point
  Double_t fEndX; ///< x of end point
  Double_t fEndY; ///< y of end point
  Double_t fSmallerY; ///< Either StartY or EndY
  Bool_t fIsHorizontal; ///< Whether the segment is horizontal
  Bool_t fIsVertical; ///< Whether the segment is vertical
  Bool_t fIsLeftEdge; ///< Whether the segment is a left edge 
  Bool_t fIsRightEdge; ///< Whether the segment is a right edge
  Bool_t fIsAPoint; ///< Whether start==end
  
  static const Double_t fgkPrecision; ///< Floating point precision used in comparisons
  
  ClassDef(AliMUONSegment,1) // A basic line segment
};


#endif
 AliMUONSegment.h:1
 AliMUONSegment.h:2
 AliMUONSegment.h:3
 AliMUONSegment.h:4
 AliMUONSegment.h:5
 AliMUONSegment.h:6
 AliMUONSegment.h:7
 AliMUONSegment.h:8
 AliMUONSegment.h:9
 AliMUONSegment.h:10
 AliMUONSegment.h:11
 AliMUONSegment.h:12
 AliMUONSegment.h:13
 AliMUONSegment.h:14
 AliMUONSegment.h:15
 AliMUONSegment.h:16
 AliMUONSegment.h:17
 AliMUONSegment.h:18
 AliMUONSegment.h:19
 AliMUONSegment.h:20
 AliMUONSegment.h:21
 AliMUONSegment.h:22
 AliMUONSegment.h:23
 AliMUONSegment.h:24
 AliMUONSegment.h:25
 AliMUONSegment.h:26
 AliMUONSegment.h:27
 AliMUONSegment.h:28
 AliMUONSegment.h:29
 AliMUONSegment.h:30
 AliMUONSegment.h:31
 AliMUONSegment.h:32
 AliMUONSegment.h:33
 AliMUONSegment.h:34
 AliMUONSegment.h:35
 AliMUONSegment.h:36
 AliMUONSegment.h:37
 AliMUONSegment.h:38
 AliMUONSegment.h:39
 AliMUONSegment.h:40
 AliMUONSegment.h:41
 AliMUONSegment.h:42
 AliMUONSegment.h:43
 AliMUONSegment.h:44
 AliMUONSegment.h:45
 AliMUONSegment.h:46
 AliMUONSegment.h:47
 AliMUONSegment.h:48
 AliMUONSegment.h:49
 AliMUONSegment.h:50
 AliMUONSegment.h:51
 AliMUONSegment.h:52
 AliMUONSegment.h:53
 AliMUONSegment.h:54
 AliMUONSegment.h:55
 AliMUONSegment.h:56
 AliMUONSegment.h:57
 AliMUONSegment.h:58
 AliMUONSegment.h:59
 AliMUONSegment.h:60
 AliMUONSegment.h:61
 AliMUONSegment.h:62
 AliMUONSegment.h:63
 AliMUONSegment.h:64
 AliMUONSegment.h:65
 AliMUONSegment.h:66
 AliMUONSegment.h:67
 AliMUONSegment.h:68
 AliMUONSegment.h:69
 AliMUONSegment.h:70
 AliMUONSegment.h:71
 AliMUONSegment.h:72
 AliMUONSegment.h:73
 AliMUONSegment.h:74
 AliMUONSegment.h:75
 AliMUONSegment.h:76
 AliMUONSegment.h:77
 AliMUONSegment.h:78
 AliMUONSegment.h:79
 AliMUONSegment.h:80
 AliMUONSegment.h:81
 AliMUONSegment.h:82
 AliMUONSegment.h:83
 AliMUONSegment.h:84
 AliMUONSegment.h:85
 AliMUONSegment.h:86
 AliMUONSegment.h:87
 AliMUONSegment.h:88
 AliMUONSegment.h:89
 AliMUONSegment.h:90
 AliMUONSegment.h:91
 AliMUONSegment.h:92