#include "AliITSUClusterLines.h"
#include <TMath.h>
using std::cout;
using std::endl;
ClassImp(AliITSUClusterLines);
AliITSUClusterLines::AliITSUClusterLines() : TObject(),
fA(),
fB(),
fLabels(),
fV() {
for(Int_t i=0;i<9;++i) fW[i] = 0.;
}
AliITSUClusterLines::AliITSUClusterLines(UInt_t first, AliStrLine *line1, UInt_t second, AliStrLine *line2,Bool_t weight) : TObject(),
fA(),
fB(),
fLabels(),
fV() {
fLabels.push_back(first);
fLabels.push_back(second);
Double_t wmat1[9],wmat2[9],p1[3],p2[3],cd1[3],cd2[3],sq1[3]={1.,1.,1.},sq2[3]={1.,1.,1.};
line1->GetWMatrix(wmat1);
line2->GetWMatrix(wmat2);
for(Int_t i=0;i<9;++i) fW[i]=wmat1[i]+wmat2[i];
line1->GetP0(p1);
line2->GetP0(p2);
line1->GetCd(cd1);
line2->GetCd(cd2);
if(weight) {
line1->GetSigma2P0(sq1);
line2->GetSigma2P0(sq2);
}
Double_t det1=cd1[2]*cd1[2]*sq1[0]*sq1[1]+cd1[1]*cd1[1]*sq1[0]*sq1[2]+cd1[0]*cd1[0]*sq1[1]*sq1[2];
Double_t det2=cd2[2]*cd2[2]*sq2[0]*sq2[1]+cd2[1]*cd2[1]*sq2[0]*sq2[2]+cd2[0]*cd2[0]*sq2[1]*sq2[2];
fA[0]=(cd1[2]*cd1[2]*sq1[1]+cd1[1]*cd1[1]*sq1[2])/det1+(cd2[2]*cd2[2]*sq2[1]+cd2[1]*cd2[1]*sq2[2])/det2;
fA[1]=-cd1[0]*cd1[1]*sq1[2]/det1-cd2[0]*cd2[1]*sq2[2]/det2;
fA[2]=-cd1[0]*cd1[2]*sq1[1]/det1-cd2[0]*cd2[2]*sq2[1]/det2;
fA[3]=(cd1[2]*cd1[2]*sq1[0]+cd1[0]*cd1[0]*sq1[2])/det1+(cd2[2]*cd2[2]*sq2[0]+cd2[0]*cd2[0]*sq2[2])/det2;
fA[4]=-cd1[1]*cd1[2]*sq1[0]/det1-cd2[1]*cd2[2]*sq2[0]/det2;
fA[5]=(cd1[1]*cd1[1]*sq1[0]+cd1[0]*cd1[0]*sq1[1])/det1+(cd2[1]*cd2[1]*sq2[0]+cd2[0]*cd2[0]*sq2[1])/det2;
fB[0]=(cd1[1]*sq1[2]*(-cd1[1]*p1[0]+cd1[0]*p1[1])+cd1[2]*sq1[1]*(-cd1[2]*p1[0]+cd1[0]*p1[2]))/det1;
fB[0]+=(cd2[1]*sq2[2]*(-cd2[1]*p2[0]+cd2[0]*p2[1])+cd2[2]*sq2[1]*(-cd2[2]*p2[0]+cd2[0]*p2[2]))/det2;
fB[1]=(cd1[0]*sq1[2]*(-cd1[0]*p1[1]+cd1[1]*p1[0])+cd1[2]*sq1[0]*(-cd1[2]*p1[1]+cd1[1]*p1[2]))/det1;
fB[1]+=(cd2[0]*sq2[2]*(-cd2[0]*p2[1]+cd2[1]*p2[0])+cd2[2]*sq2[0]*(-cd2[2]*p2[1]+cd2[1]*p2[2]))/det2;
fB[2]=(cd1[0]*sq1[1]*(-cd1[0]*p1[2]+cd1[2]*p1[0])+cd1[1]*sq1[0]*(-cd1[1]*p1[2]+cd1[2]*p1[1]))/det1;
fB[2]+=(cd2[0]*sq2[1]*(-cd2[0]*p2[2]+cd2[2]*p2[0])+cd2[1]*sq2[0]*(-cd2[1]*p2[2]+cd2[2]*p2[1]))/det2;
this->ComputeClusterCentroid();
}
AliITSUClusterLines::~AliITSUClusterLines() {
}
void AliITSUClusterLines::Add(UInt_t label, AliStrLine *line, Bool_t weight) {
fLabels.push_back(label);
Double_t wmat[9],p[3],cd[3],sq[3]={1.,1.,1.};
line->GetWMatrix(wmat);
line->GetP0(p);
line->GetCd(cd);
for(Int_t i=0;i<9;++i) fW[i]+=wmat[i];
if(weight) line->GetSigma2P0(sq);
Double_t det=cd[2]*cd[2]*sq[0]*sq[1]+cd[1]*cd[1]*sq[0]*sq[2]+cd[0]*cd[0]*sq[1]*sq[2];
fA[0]+=(cd[2]*cd[2]*sq[1]+cd[1]*cd[1]*sq[2])/det;
fA[1]+=-cd[0]*cd[1]*sq[2]/det;
fA[2]+=-cd[0]*cd[2]*sq[1]/det;
fA[3]+=(cd[2]*cd[2]*sq[0]+cd[0]*cd[0]*sq[2])/det;
fA[4]+=-cd[1]*cd[2]*sq[0]/det;
fA[5]+=(cd[1]*cd[1]*sq[0]+cd[0]*cd[0]*sq[1])/det;
fB[0]+=(cd[1]*sq[2]*(-cd[1]*p[0]+cd[0]*p[1])+cd[2]*sq[1]*(-cd[2]*p[0]+cd[0]*p[2]))/det;
fB[1]+=(cd[0]*sq[2]*(-cd[0]*p[1]+cd[1]*p[0])+cd[2]*sq[0]*(-cd[2]*p[1]+cd[1]*p[2]))/det;
fB[2]+=(cd[0]*sq[1]*(-cd[0]*p[2]+cd[2]*p[0])+cd[1]*sq[0]*(-cd[1]*p[2]+cd[2]*p[1]))/det;
this->ComputeClusterCentroid();
}
Int_t AliITSUClusterLines::Compare(const TObject* obj) const {
const AliITSUClusterLines *cl=(const AliITSUClusterLines*)obj;
if(fLabels.size()<cl->GetSize()) return 1;
if(fLabels.size()>cl->GetSize()) return -1;
return 0;
}
void AliITSUClusterLines::ComputeClusterCentroid() {
Double_t *a=fA;
Double_t *b=fB;
Double_t *v=fV;
Double_t det=a[0]*(a[3]*a[5]-a[4]*a[4])-a[1]*(a[1]*a[5]-a[4]*a[2])+a[2]*(a[1]*a[4]-a[2]*a[3]);
if(det==0) {
cout << "Could not invert weight matrix" << endl;
return;
}
v[0]=-(b[0]*(a[3]*a[5]-a[4]*a[4])-a[1]*(b[1]*a[5]-a[4]*b[2])+a[2]*(b[1]*a[4]-b[2]*a[3]))/det;
v[1]=-(a[0]*(b[1]*a[5]-b[2]*a[4])-b[0]*(a[1]*a[5]-a[4]*a[2])+a[2]*(a[1]*b[2]-a[2]*b[1]))/det;
v[2]=-(a[0]*(a[3]*b[2]-b[1]*a[4])-a[1]*(a[1]*b[2]-b[1]*a[2])+b[0]*(a[1]*a[4]-a[2]*a[3]))/det;
}
void AliITSUClusterLines::GetCovMatrix(Float_t cov[6]) {
Double_t *w=fW;
Double_t den=w[0]*(w[4]*w[8]-w[5]*w[7])-w[1]*(w[3]*w[8]-w[5]*w[6])+w[2]*(w[3]*w[7]-w[4]*w[6]);
if(den==0) {
cout << "Could not invert weight matrix" << endl;
return;
}
cov[0]=(w[4]*w[8]-w[5]*w[7])/den;
cov[1]=-(w[1]*w[8]-w[7]*w[2])/den;
cov[2]=(w[1]*w[5]-w[4]*w[2])/den;
cov[3]=(w[0]*w[8]-w[6]*w[2])/den;
cov[4]=-(w[0]*w[5]-w[3]*w[2])/den;
cov[5]=(w[0]*w[4]-w[1]*w[3])/den;
}
void AliITSUClusterLines::GetCovMatrix(Double_t cov[6]) {
Double_t *w=fW;
Double_t den=w[0]*(w[4]*w[8]-w[5]*w[7])-w[1]*(w[3]*w[8]-w[5]*w[6])+w[2]*(w[3]*w[7]-w[4]*w[6]);
if(den==0) {
cout << "Could not invert weight matrix" << endl;
return;
}
cov[0]=(w[4]*w[8]-w[5]*w[7])/den;
cov[1]=-(w[1]*w[8]-w[7]*w[2])/den;
cov[2]=(w[1]*w[5]-w[4]*w[2])/den;
cov[3]=(w[0]*w[8]-w[6]*w[2])/den;
cov[4]=-(w[0]*w[5]-w[3]*w[2])/den;
cov[5]=(w[0]*w[4]-w[1]*w[3])/den;
}
Bool_t AliITSUClusterLines::IsEqual(const TObject* obj) const {
const AliITSUClusterLines *cl=(const AliITSUClusterLines*)obj;
if(fLabels.size()==cl->GetSize()) return kTRUE;
return kFALSE;
}
AliITSUClusterLines.cxx:1 AliITSUClusterLines.cxx:2 AliITSUClusterLines.cxx:3 AliITSUClusterLines.cxx:4 AliITSUClusterLines.cxx:5 AliITSUClusterLines.cxx:6 AliITSUClusterLines.cxx:7 AliITSUClusterLines.cxx:8 AliITSUClusterLines.cxx:9 AliITSUClusterLines.cxx:10 AliITSUClusterLines.cxx:11 AliITSUClusterLines.cxx:12 AliITSUClusterLines.cxx:13 AliITSUClusterLines.cxx:14 AliITSUClusterLines.cxx:15 AliITSUClusterLines.cxx:16 AliITSUClusterLines.cxx:17 AliITSUClusterLines.cxx:18 AliITSUClusterLines.cxx:19 AliITSUClusterLines.cxx:20 AliITSUClusterLines.cxx:21 AliITSUClusterLines.cxx:22 AliITSUClusterLines.cxx:23 AliITSUClusterLines.cxx:24 AliITSUClusterLines.cxx:25 AliITSUClusterLines.cxx:26 AliITSUClusterLines.cxx:27 AliITSUClusterLines.cxx:28 AliITSUClusterLines.cxx:29 AliITSUClusterLines.cxx:30 AliITSUClusterLines.cxx:31 AliITSUClusterLines.cxx:32 AliITSUClusterLines.cxx:33 AliITSUClusterLines.cxx:34 AliITSUClusterLines.cxx:35 AliITSUClusterLines.cxx:36 AliITSUClusterLines.cxx:37 AliITSUClusterLines.cxx:38 AliITSUClusterLines.cxx:39 AliITSUClusterLines.cxx:40 AliITSUClusterLines.cxx:41 AliITSUClusterLines.cxx:42 AliITSUClusterLines.cxx:43 AliITSUClusterLines.cxx:44 AliITSUClusterLines.cxx:45 AliITSUClusterLines.cxx:46 AliITSUClusterLines.cxx:47 AliITSUClusterLines.cxx:48 AliITSUClusterLines.cxx:49 AliITSUClusterLines.cxx:50 AliITSUClusterLines.cxx:51 AliITSUClusterLines.cxx:52 AliITSUClusterLines.cxx:53 AliITSUClusterLines.cxx:54 AliITSUClusterLines.cxx:55 AliITSUClusterLines.cxx:56 AliITSUClusterLines.cxx:57 AliITSUClusterLines.cxx:58 AliITSUClusterLines.cxx:59 AliITSUClusterLines.cxx:60 AliITSUClusterLines.cxx:61 AliITSUClusterLines.cxx:62 AliITSUClusterLines.cxx:63 AliITSUClusterLines.cxx:64 AliITSUClusterLines.cxx:65 AliITSUClusterLines.cxx:66 AliITSUClusterLines.cxx:67 AliITSUClusterLines.cxx:68 AliITSUClusterLines.cxx:69 AliITSUClusterLines.cxx:70 AliITSUClusterLines.cxx:71 AliITSUClusterLines.cxx:72 AliITSUClusterLines.cxx:73 AliITSUClusterLines.cxx:74 AliITSUClusterLines.cxx:75 AliITSUClusterLines.cxx:76 AliITSUClusterLines.cxx:77 AliITSUClusterLines.cxx:78 AliITSUClusterLines.cxx:79 AliITSUClusterLines.cxx:80 AliITSUClusterLines.cxx:81 AliITSUClusterLines.cxx:82 AliITSUClusterLines.cxx:83 AliITSUClusterLines.cxx:84 AliITSUClusterLines.cxx:85 AliITSUClusterLines.cxx:86 AliITSUClusterLines.cxx:87 AliITSUClusterLines.cxx:88 AliITSUClusterLines.cxx:89 AliITSUClusterLines.cxx:90 AliITSUClusterLines.cxx:91 AliITSUClusterLines.cxx:92 AliITSUClusterLines.cxx:93 AliITSUClusterLines.cxx:94 AliITSUClusterLines.cxx:95 AliITSUClusterLines.cxx:96 AliITSUClusterLines.cxx:97 AliITSUClusterLines.cxx:98 AliITSUClusterLines.cxx:99 AliITSUClusterLines.cxx:100 AliITSUClusterLines.cxx:101 AliITSUClusterLines.cxx:102 AliITSUClusterLines.cxx:103 AliITSUClusterLines.cxx:104 AliITSUClusterLines.cxx:105 AliITSUClusterLines.cxx:106 AliITSUClusterLines.cxx:107 AliITSUClusterLines.cxx:108 AliITSUClusterLines.cxx:109 AliITSUClusterLines.cxx:110 AliITSUClusterLines.cxx:111 AliITSUClusterLines.cxx:112 AliITSUClusterLines.cxx:113 AliITSUClusterLines.cxx:114 AliITSUClusterLines.cxx:115 AliITSUClusterLines.cxx:116 AliITSUClusterLines.cxx:117 AliITSUClusterLines.cxx:118 AliITSUClusterLines.cxx:119 AliITSUClusterLines.cxx:120 AliITSUClusterLines.cxx:121 AliITSUClusterLines.cxx:122 AliITSUClusterLines.cxx:123 AliITSUClusterLines.cxx:124 AliITSUClusterLines.cxx:125 AliITSUClusterLines.cxx:126 AliITSUClusterLines.cxx:127 AliITSUClusterLines.cxx:128 AliITSUClusterLines.cxx:129 AliITSUClusterLines.cxx:130 AliITSUClusterLines.cxx:131 AliITSUClusterLines.cxx:132 AliITSUClusterLines.cxx:133 AliITSUClusterLines.cxx:134 AliITSUClusterLines.cxx:135 AliITSUClusterLines.cxx:136 AliITSUClusterLines.cxx:137 AliITSUClusterLines.cxx:138 AliITSUClusterLines.cxx:139 AliITSUClusterLines.cxx:140 AliITSUClusterLines.cxx:141 AliITSUClusterLines.cxx:142 AliITSUClusterLines.cxx:143 AliITSUClusterLines.cxx:144 AliITSUClusterLines.cxx:145 AliITSUClusterLines.cxx:146 AliITSUClusterLines.cxx:147 AliITSUClusterLines.cxx:148 AliITSUClusterLines.cxx:149 AliITSUClusterLines.cxx:150 AliITSUClusterLines.cxx:151 AliITSUClusterLines.cxx:152 AliITSUClusterLines.cxx:153 AliITSUClusterLines.cxx:154 AliITSUClusterLines.cxx:155 AliITSUClusterLines.cxx:156 AliITSUClusterLines.cxx:157 AliITSUClusterLines.cxx:158 AliITSUClusterLines.cxx:159 AliITSUClusterLines.cxx:160 AliITSUClusterLines.cxx:161 AliITSUClusterLines.cxx:162 AliITSUClusterLines.cxx:163 AliITSUClusterLines.cxx:164 AliITSUClusterLines.cxx:165 AliITSUClusterLines.cxx:166 AliITSUClusterLines.cxx:167 AliITSUClusterLines.cxx:168 AliITSUClusterLines.cxx:169 AliITSUClusterLines.cxx:170 AliITSUClusterLines.cxx:171 AliITSUClusterLines.cxx:172 AliITSUClusterLines.cxx:173 AliITSUClusterLines.cxx:174