+ fRmin = Rmin;
+ fRmax = Rmax;
+ fRmin = fRmax = 0.0;
+ fNs.SetXYZ(0.0,0.0,-1.0);
+ fNe.SetXYZ(0.0,0.0,1.0);
+ n = vect->GetEntries();
+ fTubes = new TObjArray(n-1);
+ fTranRot = new TObjArray(n-1);
+ fNs = ns*(1./ns.Mag());
+ fNe = ne*(1./ne.Mag());
+ //
+ x0 = *((TVector3 *)(vect->At(0)));
+ n0 = ns;
+ for(i=1;i<n;i++){
+ x1 = *((TVector3 *)(vect->At(i)));
+ d = x1 - x0;
+ if(i<n-1) {
+ x2 = *((TVector3 *)(vect->At(i+1)));
+ n1 = d + (x2-x1);
+ n1 *= 1./n1.Mag();
+ }else{
+ n1 = fNe;
+ } // end if
+ t = 0.5*(x1 + x0);
+ th = TMath::ATan2(TMath::Sqrt(2.*d.Mag2()-d.z()-2.*d.Mag()*d.y()-
+ 2.*d.Mag()*d.x()),
+ TMath::Sqrt(d.z()*d.z()-2.*d.Mag()*d.z()+d.Mag2()));
+ th *= TMath::RadToDeg();
+ ph = TMath::ATan2(d.y()-d.Mag(),d.x()-d.Mag());
+ ph *= TMath::RadToDeg();
+ sprintf(nam,"%sCombiTrans%dCable",name,i-1);
+ fTranRot->AddAt(new TGeoCombiTrans(nam,t.x(),t.y(),t.z(),
+ new TGeoRotation("",ph,th,0.0)),i-1);
+ s = d.Mag();
+ sprintf(nam,"%sPart%dCable",name,i-1);
+ fTubes->AddAt( new TGeoCtub(nam,fRmin,fRmax,0.5*s,0.0,360.0,n0.x(),
+ n0.y(),n0.z(),n1.x(),n1.y(),n1.z()),i-1);
+ n0 = -n1;
+ x0 = x1;
+ } // end for i
+}
+//----------------------------------------------------------------------
+AliITSGeoCable::~AliITSGeoCable(){
+ //
+ // Inputs:
+ // none.
+ // Outputs:
+ // none.
+ // Return:
+ // none.
+ Int_t i;