00001 #include "AlUserTrack.h"
00002
00003
00004 AlUserTrack::AlUserTrack()
00005 {
00006 _daughters.resize(0);
00007 HepSymMatrix temp1(5,0);
00008 _EM.assign(temp1);
00009 HepSymMatrix temp2(4,0);
00010 _EM_kin.assign(temp2);
00011 HepMatrix temp3(3,3,0);
00012 _corr_track_vertex = temp3;
00013
00014 eVertex = NULL;
00015
00016 }
00017
00018
00019 AlUserTrack::AlUserTrack(const AlUserTrack& rhsAt): QvecBase(rhsAt)
00020 {
00021 _daughters.resize(rhsAt._daughters.size());
00022
00023 for (unsigned int i = 0; i < rhsAt._daughters.size(); i++) {
00024 _daughters[i] = rhsAt._daughters[i];
00025 }
00026
00027 eVertex = rhsAt.eVertex;
00028 _EM = rhsAt._EM;
00029 _EM_kin = rhsAt._EM_kin;
00030 _corr_track_vertex = rhsAt._corr_track_vertex;
00031
00032 }
00033
00034
00035 AlephCollection<AlObject*>& AlUserTrack::getDaughters()
00036 {
00037 return _daughters;
00038 }
00039
00040
00041 void AlUserTrack::addDaughter(AlObject* d)
00042 {
00043 _daughters.push_back(d);
00044 }
00045
00046
00047 float AlUserTrack::EM(int i) const
00048 {
00049 if (i < 0 || i > 15) return -9999.;
00050 int j = 0;
00051 float val;
00052 for (int m = 1; m <= 5; m++) {
00053 for (int n = 1; n <= m; n++) {
00054 if (++j == i) {
00055 val = _EM(m,n);
00056 break;
00057 }
00058 }
00059 }
00060 return val;
00061 }
00062
00063
00064 float AlUserTrack::EM(int m, int n) const
00065 {
00066 return _EM(m,n);
00067 }
00068
00069
00070 HepSymMatrix& AlUserTrack::EM()
00071 {
00072 return _EM;
00073 }
00074
00075
00076 void AlUserTrack::setEM(int i, float val)
00077 {
00078 if (i > 0 && i < 15) {
00079 int j = 0;
00080 for (int m = 1; m <= 5; m++) {
00081 for (int n = 1; n <= m; n++) {
00082 if (++j == i) _EM(m,n) = val;
00083 }
00084 }
00085 }
00086 }
00087
00088
00089 void AlUserTrack::setEM(const HepSymMatrix& em)
00090 {
00091 for (int m = 1; m <= 5; m++) {
00092 for (int n = 1; n <= m; n++) {
00093 _EM(m,n) = em(m,n);
00094 }
00095 }
00096 }
00097
00098
00099
00100 float AlUserTrack::SIG(int i) const
00101 {
00102 if (i < 0 || i > 15) return -9999.;
00103 int j = 0;
00104 float val;
00105 for (int m = 1; m <= 5; m++) {
00106 for (int n = 1; n <= m; n++) {
00107 if (++j == i) {
00108 val = _EM_kin(m,n);
00109 break;
00110 }
00111 }
00112 }
00113 return val;
00114 }
00115
00116
00117 float AlUserTrack::EM_kin(int m, int n) const
00118 {
00119 return _EM_kin(m,n);
00120 }
00121
00122
00123 HepSymMatrix& AlUserTrack::EM_kin()
00124 {
00125 return _EM_kin;
00126 }
00127
00128
00129 void AlUserTrack::setEM_kin(int i, float val)
00130 {
00131 if (i > 0 && i < 15) {
00132 int j = 0;
00133 for (int m = 1; m <= 5; m++) {
00134 for (int n = 1; n <= m; n++) {
00135 if (++j == i) {
00136 _EM_kin(m,n) = val;
00137 break;
00138 }
00139 }
00140 }
00141 }
00142 }
00143
00144
00145 void AlUserTrack::setEM_kin(const HepSymMatrix& em)
00146 {
00147 for (int m = 1; m <= 5; m++) {
00148 for (int n = 1; n <= m; n++) {
00149 _EM_kin(m,n) = em(m,n);
00150 }
00151 }
00152 }
00153
00154
00155 float AlUserTrack::SIGEE() const { return SIG(10);}
00156
00157
00158 float AlUserTrack::SIGPP() const { return
00159 ( QX()*QX()*SIG(1) +
00160 QY()*QY()*SIG(3) +
00161 QZ()*QZ()*SIG(6) +
00162 2*( QX()*( QY()*SIG(2) + QZ()*SIG(4) ) + QY()*QZ()*SIG(5) ) ) / (QP()*QP()); }
00163
00164
00165 float AlUserTrack::SIGMM() const { return
00166 ( QM()*
00167 ( QE()*QE()*SIG(10) +
00168 QX()*QX()*SIG(1) +
00169 QY()*QY()*SIG(3) +
00170 QZ()*QZ()*SIG(6) +
00171 2*( QX()*( QY()*SIG(2) + QZ()*SIG(4) ) + QY()*QZ()*SIG(5) - QE()*(QX()*SIG(7) + QY()*SIG(8) + QZ()*SIG(9)) ) ) ); }
00172
00173
00174
00175 float AlUserTrack::corrMatrix(int m, int n) const
00176 {
00177 return _corr_track_vertex(m,n);
00178 }
00179
00180
00181 HepMatrix& AlUserTrack::corrMatrix()
00182 {
00183 return _corr_track_vertex;
00184 }
00185
00186
00187 void AlUserTrack::setCorrMatrix(int i, int j, float val)
00188 {
00189 _corr_track_vertex(i,j) = val;
00190
00191 }
00192
00193
00194 void AlUserTrack::setCorrMatrix(const HepMatrix& cm)
00195 {
00196 for (int m = 1; m <= 3; m++) {
00197 for (int n = 1; n <= 3; n++) {
00198 _corr_track_vertex(m,n) = cm(m,n);
00199 }
00200 }
00201 }