-//______________________________________________________________________
-void AliITSVertexer3D::Find3DVertex(){
- // Determines the vertex position
- // same algorithm as in AliVertexerTracks::StrLinVertexFinderMinDist(0)
- // adapted to pure AliStrLine objects
-
- Int_t knacc = fLines->GetEntriesFast();
- Double_t (*vectP0)[3]=new Double_t [knacc][3];
- Double_t (*vectP1)[3]=new Double_t [knacc][3];
-
- Double_t sum[3][3];
- Double_t dsum[3]={0,0,0};
- for(Int_t i=0;i<3;i++)
- for(Int_t j=0;j<3;j++)sum[i][j]=0;
- for(Int_t i=0; i<knacc; i++){
- AliStrLine *line1 = (AliStrLine*)fLines->At(i);
-
- Double_t p0[3],cd[3];
- line1->GetP0(p0);
- line1->GetCd(cd);
- Double_t p1[3]={p0[0]+cd[0],p0[1]+cd[1],p0[2]+cd[2]};
- vectP0[i][0]=p0[0];
- vectP0[i][1]=p0[1];
- vectP0[i][2]=p0[2];
- vectP1[i][0]=p1[0];
- vectP1[i][1]=p1[1];
- vectP1[i][2]=p1[2];
-
- Double_t matr[3][3];
- Double_t dknow[3];
- AliVertexerTracks::GetStrLinDerivMatrix(p0,p1,matr,dknow);
-
- for(Int_t iii=0;iii<3;iii++){
- dsum[iii]+=dknow[iii];
- for(Int_t lj=0;lj<3;lj++) sum[iii][lj]+=matr[iii][lj];
- }
- }
-
- Double_t vett[3][3];
- Double_t det=AliVertexerTracks::GetDeterminant3X3(sum);
- Double_t initPos[3];
- Double_t sigma = 0.;
- for(Int_t i=0;i<3;i++)initPos[i]=0.;
-
- Int_t goodvert=0;
-
- if(det!=0){
- for(Int_t zz=0;zz<3;zz++){
- for(Int_t ww=0;ww<3;ww++){
- for(Int_t kk=0;kk<3;kk++) vett[ww][kk]=sum[ww][kk];
- }
- for(Int_t kk=0;kk<3;kk++) vett[kk][zz]=dsum[kk];
- initPos[zz]=AliVertexerTracks::GetDeterminant3X3(vett)/det;
- }
-
- Double_t rvert=TMath::Sqrt(initPos[0]*initPos[0]+initPos[1]*initPos[1]);
- Double_t zvert=initPos[2];
- if(rvert<fCoarseMaxRCut && TMath::Abs(zvert)<fZCutDiamond){
- for(Int_t i=0; i<knacc; i++){
- Double_t p0[3]={0,0,0},p1[3]={0,0,0};
- for(Int_t ii=0;ii<3;ii++){
- p0[ii]=vectP0[i][ii];
- p1[ii]=vectP1[i][ii];
- }
- sigma+=AliVertexerTracks::GetStrLinMinDist(p0,p1,initPos);
- }
- sigma=TMath::Sqrt(sigma);
- goodvert=1;
- }
- }
- delete vectP0;
- delete vectP1;
- if(!goodvert){
- Warning("Find3DVertex","Finder did not succed");
- for(Int_t i=0;i<3;i++)initPos[i]=0.;
- sigma=999;
- knacc=-1;
- }
- if(fVert3D){
- fVert3D-> SetXYZ(initPos);
- fVert3D->SetDispersion(sigma);
- fVert3D->SetNContributors(knacc);
- }else{
- fVert3D = new AliVertex(initPos,sigma,knacc);
- }
- if(fDebug) fVert3D->Print();
-}
-
-
-