00001
00002
00003 #include <string>
00004 #include <iostream>
00005 #include <cmath>
00006
00007 #include "cheprep/DefaultHepRepPoint.h"
00008
00009 using namespace std;
00010 using namespace HEPREP;
00011
00016 namespace cheprep {
00017
00018 DefaultHepRepPoint::DefaultHepRepPoint(HepRepInstance* inst, double xx, double yy, double zz)
00019 : DefaultHepRepAttribute(), instance(inst), x(xx), y(yy), z(zz) {
00020
00021 if (instance == NULL) {
00022 cerr << "HepRepPoints cannot be created without a HepRepInstance." << endl;
00023 } else {
00024 instance->addPoint(this);
00025 }
00026 }
00027
00028 DefaultHepRepPoint::~DefaultHepRepPoint() {
00029 }
00030
00031 HepRepInstance* DefaultHepRepPoint::getInstance() {
00032 return instance;
00033 }
00034
00035 HepRepAttValue* DefaultHepRepPoint::getAttValue(string lowerCaseName) {
00036 HepRepAttValue* value = getAttValueFromNode(lowerCaseName);
00037 return (value != NULL) ? value : instance->getAttValue(lowerCaseName);
00038 }
00039
00040 HepRepPoint* DefaultHepRepPoint::copy(HepRepInstance* inst) {
00041 return new DefaultHepRepPoint(inst, x, y, z);
00042 }
00043
00044 double DefaultHepRepPoint::getX() {
00045 return x;
00046 }
00047
00048 double DefaultHepRepPoint::getY() {
00049 return y;
00050 }
00051
00052 double DefaultHepRepPoint::getZ() {
00053 return z;
00054 }
00055
00056 vector<double>* DefaultHepRepPoint::getXYZ(vector<double>* xyz) {
00057 (*xyz)[0] = x;
00058 (*xyz)[1] = y;
00059 (*xyz)[2] = z;
00060 return xyz;
00061 }
00062
00063 double DefaultHepRepPoint::getRho() {
00064 return sqrt(x*x + y*y);
00065 }
00066
00067 double DefaultHepRepPoint::getPhi() {
00068 return atan2(y, x);
00069 }
00070
00071 double DefaultHepRepPoint::getTheta() {
00072 return atan2(getRho(), z);
00073 }
00074
00075 double DefaultHepRepPoint::getR() {
00076 double r = getRho();
00077 return sqrt(r*r + z*z);
00078 }
00079
00080 double DefaultHepRepPoint::getEta() {
00081 double ct = cos(getTheta());
00082 return -0.5*log((1.-ct)/(1.+ct));
00083 }
00084
00085 double DefaultHepRepPoint::getX(double xVertex, double, double) {
00086 return x - xVertex;
00087 }
00088
00089 double DefaultHepRepPoint::getY(double, double yVertex, double) {
00090 return y - yVertex;
00091 }
00092
00093 double DefaultHepRepPoint::getZ(double, double, double zVertex) {
00094 return z - zVertex;
00095 }
00096
00097 double DefaultHepRepPoint::getRho(double xVertex, double yVertex, double zVertex) {
00098 double dx = getX(xVertex, yVertex, zVertex);
00099 double dy = getY(xVertex, yVertex, zVertex);
00100 return sqrt(dx*dx + dy*dy);
00101 }
00102
00103 double DefaultHepRepPoint::getPhi(double xVertex, double yVertex, double zVertex) {
00104 return atan2(getY(xVertex, yVertex, zVertex), getX(xVertex, yVertex, zVertex));
00105 }
00106
00107 double DefaultHepRepPoint::getTheta(double xVertex, double yVertex, double zVertex) {
00108 return atan2(getRho(xVertex, yVertex, zVertex), getZ(xVertex, yVertex, zVertex));
00109 }
00110
00111 double DefaultHepRepPoint::getR(double xVertex, double yVertex, double zVertex) {
00112 double dr = getRho(xVertex, yVertex, zVertex);
00113 double dz = getZ(xVertex, yVertex, zVertex);
00114 return sqrt(dr*dr + dz*dz);
00115 }
00116
00117 double DefaultHepRepPoint::getEta(double xVertex, double yVertex, double zVertex) {
00118 double ct = cos(getTheta(xVertex, yVertex, zVertex));
00119 return -0.5*log((1.-ct)/(1.+ct));
00120 }
00121
00122
00123 }
00124