00001
00002
00003 #ifndef ABSTRACTFOURVEC_H
00004 #define ABSTRACTFOURVEC_H
00005
00006 #include <iostream>
00007 #include <cmath>
00008
00015 class AbstractFourVec {
00016
00017 public:
00018 AbstractFourVec() {};
00019 virtual ~AbstractFourVec() {};
00020
00021
00022
00023
00024 virtual double px() const = 0;
00025 virtual double py() const = 0;
00026 virtual double pz() const = 0;
00027
00028
00029 virtual double phi() const = 0;
00030 virtual double eta() const = 0;
00031
00032
00033 virtual double eT() const = 0;
00034 virtual double e() const = 0;
00035 virtual double mass() const = 0;
00036
00037
00038 virtual double charge() const = 0;
00039
00040 private:
00041
00042 };
00043
00044
00045 inline std::ostream& operator<<(std::ostream& os, const AbstractFourVec& v)
00046 {
00047 return os <<"et: "<<v.eT()<<"\tphi: "<<v.phi()<<"\teta: "<<v.eta()<<"\tmass: "<<v.mass()
00048 <<"\tcharge: "<<v.charge();
00049 }
00050
00051 struct StreamFourVec
00052 {
00053 void operator()(AbstractFourVec* v) {
00054 std::cout << *v << std::endl;
00055 }
00056 };
00057
00058
00059 #endif // ABSTRACTFOURVEC_H