00001 // -*- C++ -*- 00002 #ifndef RIVET_AxesDefinition_HH 00003 #define RIVET_AxesDefinition_HH 00004 00005 #include "Rivet/Projection.hh" 00006 #include "Rivet/Event.hh" 00007 00008 namespace Rivet { 00009 00010 /** 00011 @brief A pure virtual interface for projections which define a set of 3 00012 basis vectors. This allows e.g. Thrust and Sphericity to be used 00013 interchangeably as defining bases for e.g. hemisphere mass and broadening 00014 calculations. 00015 00016 @author Andy Buckley 00017 */ 00018 class AxesDefinition : public Projection { 00019 public: 00020 00021 /// Virtual destructor. 00022 virtual ~AxesDefinition() { } 00023 00024 /// Clone on the heap. 00025 virtual const Projection* clone() const = 0; 00026 00027 ///@{ Axis accessors, in decreasing order of significance. 00028 /// The main axis. 00029 virtual const Vector3& axis1() const = 0; 00030 /// The 2nd most significant ("major") axis. 00031 virtual const Vector3& axis2() const = 0; 00032 /// The least significant ("minor") axis. 00033 virtual const Vector3& axis3() const = 0; 00034 ///@} 00035 00036 }; 00037 00038 } 00039 00040 #endif