#include <EvtOrthogVector.hh>
Public Member Functions | |
EvtOrthogVector (int n, std::vector< double > *vectors) | |
~EvtOrthogVector () | |
std::vector< double > | getOrthogVector () |
Private Member Functions | |
void | findOrthog (int dim, std::vector< int > invect, std::vector< double > *vectors) |
int | findEvenOddSwaps () |
Private Attributes | |
int | _dimen |
std::vector< int > | _holder |
std::vector< double > | _orthogVector |
Definition at line 27 of file EvtOrthogVector.hh.
EvtOrthogVector::EvtOrthogVector | ( | int | n, | |
std::vector< double > * | vectors | |||
) |
Definition at line 30 of file EvtOrthogVector.cc.
References _dimen, _holder, _orthogVector, findOrthog(), genRecEmupikp::i, and subSeperate::temp.
00030 { 00031 00032 _dimen=n; 00033 _holder.resize(n); 00034 00035 std::vector<int> temp; 00036 00037 int i; 00038 for (i=0;i<n;i++) { 00039 _orthogVector.push_back(0.); 00040 temp.push_back(i); 00041 } 00042 00043 findOrthog(_dimen,temp, vectors); 00044 00045 }
EvtOrthogVector::~EvtOrthogVector | ( | ) |
int EvtOrthogVector::findEvenOddSwaps | ( | ) | [private] |
Definition at line 103 of file EvtOrthogVector.cc.
References _dimen, _holder, genRecEmupikp::i, ganga-rec::j, and subSeperate::temp.
Referenced by findOrthog().
00103 { 00104 00105 std::vector<int> temp(_dimen); 00106 00107 int i,j,nSwap; 00108 for (i=0; i<_dimen; i++) temp[i]=_holder[i]; 00109 00110 nSwap=0; 00111 for (i=0; i<(_dimen-1); i++) { 00112 for (j=i+1; j<_dimen; j++) { 00113 00114 if ( temp[i]>temp[j] ) { 00115 int duh=temp[j]; 00116 temp[j]=temp[i]; 00117 temp[i]=duh; 00118 nSwap+=1; 00119 } 00120 } 00121 } 00122 nSwap-= (nSwap/2)*2; 00123 00124 if ( nSwap ) return -1; 00125 00126 return 1; 00127 00128 }
void EvtOrthogVector::findOrthog | ( | int | dim, | |
std::vector< int > | invect, | |||
std::vector< double > * | vectors | |||
) | [private] |
Definition at line 50 of file EvtOrthogVector.cc.
References _dimen, _holder, _orthogVector, findEvenOddSwaps(), genRecEmupikp::i, ganga-rec::j, sign(), and subSeperate::temp.
Referenced by EvtOrthogVector().
00051 { 00052 00053 00054 if ( dim==2 ) { 00055 _holder[0]=invect[0]; 00056 _holder[1]=invect[1]; 00057 int sign=findEvenOddSwaps(); 00058 { 00059 double addition=1; 00060 int i; 00061 for (i=1; i<_dimen; i++){ 00062 addition*=vectors[i-1][_holder[i]]; 00063 } 00064 addition*=sign; 00065 _orthogVector[_holder[0]]+=addition; 00066 } 00067 00068 _holder[0]=invect[1]; 00069 _holder[1]=invect[0]; 00070 00071 { 00072 double addition=1; 00073 int i; 00074 for (i=1; i<_dimen; i++){ 00075 addition*=vectors[i-1][_holder[i]]; 00076 } 00077 addition*=sign; 00078 _orthogVector[_holder[0]]-=addition; 00079 } 00080 00081 return; 00082 } 00083 else{ 00084 std::vector<int> temp((2*dim)); 00085 00086 int i; 00087 for (i=0; i<dim; i++) temp[i]=invect[i]; 00088 for (i=0; i<dim; i++) temp[i+dim]=invect[i]; 00089 00090 for (i=0; i<dim; i++) { 00091 _holder[dim-1]=temp[dim-1+i]; 00092 std::vector<int> tempDim((dim-1)); 00093 00094 int j; 00095 for (j=0; j<(dim-1); j++) tempDim[j]=temp[j+i]; 00096 findOrthog(dim-1, tempDim, vectors); 00097 } 00098 } 00099 00100 return; 00101 }
std::vector<double> EvtOrthogVector::getOrthogVector | ( | ) | [inline] |
Definition at line 36 of file EvtOrthogVector.hh.
References _orthogVector.
Referenced by EvtCGCoefSingle::init().
00036 {return _orthogVector;}
int EvtOrthogVector::_dimen [private] |
Definition at line 41 of file EvtOrthogVector.hh.
Referenced by EvtOrthogVector(), findEvenOddSwaps(), and findOrthog().
std::vector<int> EvtOrthogVector::_holder [private] |
Definition at line 42 of file EvtOrthogVector.hh.
Referenced by EvtOrthogVector(), findEvenOddSwaps(), and findOrthog().
std::vector<double> EvtOrthogVector::_orthogVector [private] |
Definition at line 46 of file EvtOrthogVector.hh.
Referenced by EvtOrthogVector(), findOrthog(), and getOrthogVector().