<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Greetings,</p>
<p>Here is the method for the DOCA</p>
<p><br>
</p>
<p> <font color="#ff0000"> vEg.SetPxPyPzE(0.0,0.0,egam,egam);
//beam four-momemtum info<br>
vP.SetPxPyPzE(P_Px,P_Py,P_Pz,E_P); //proton four-momemtum
info<br>
vPip.SetPxPyPzE(Pip_Px,Pip_Py,Pip_Pz,E_Pip); //pi+
four-momemtum info<br>
vPim.SetPxPyPzE(Pim_Px,Pim_Py,Pim_Pz,E_Pim); //pi-
four-momemtum info</font></p>
<p><font color="#ff0000">//-----------------------------------------------DOCA-------------------------------------------------------------------------<br>
<br>
vertex3_P.SetXYZ(prot_vx, prot_vy, prot_vz); //vertex of
proton<br>
vertex3_Pip.SetXYZ(pip_vx, pip_vy, pip_vz); //vertex of
pi+<br>
vertex3_Pim.SetXYZ(pim_vx, pim_vy, pim_vz); //vertex of pi-<br>
vertex3_Eg.SetXYZ(prot_vx, prot_vy, prot_vz); //vertex of
beam photon this should be proton vertex for non-deteached
vertices<br>
<br>
TVector3 PipPimMid = MatchTracks(vertex3_Pip, vPip.Vect(),
vertex3_Pim, vPim.Vect(), &PipPimDist, &PipPimStat);<br>
<br>
PipPim_Midx = PipPimMid.X();<br>
PipPim_Midy = PipPimMid.Y();<br>
PipPim_Midz = PipPimMid.Z();<br>
<br>
TVector3 PPhotMid = MatchTracks(vertex3_P, vP.Vect(),
vertex3_Eg, vEg.Vect(), &PPhotDist, &PPhotStat);<br>
<br>
TVector3 DIFFER = PipPimMid - PPhotMid;<br>
DOCA_ang = (DIFFER.Dot(IV_PipPimVec.Vect()) / (DIFFER.Mag()
* IV_PipPimVec.Vect().Mag()) ); //minimize this<br>
</font></p>
<p><br>
</p>
<p>The MatchTracks codes is as follows</p>
<p><br>
</p>
<p><font color="#ff0000">TVector3 MatchTracks( TVector3 v1,
TVector3 p1, TVector3 v2, TVector3 p2, Double_t *dist, Int_t
*stat)<br>
{<br>
Double_t R1 = 0;<br>
TVector3 diff = (v1) - (v2);<br>
<br>
TVector3 p1unit = p1.Unit();<br>
TVector3 p2unit = p2.Unit();<br>
<br>
Double_t R = p1unit.Dot(p2unit);<br>
<br>
if( R >= 1. ) {<br>
cout << "lines are parallel" << endl;<br>
(*stat) = -1;<br>
return(-1);<br>
}<br>
<br>
else {<br>
R1 = 1 / ( 1- R*R );<br>
}<br>
<br>
TVector3 RP21 = p2unit*R - p1unit;<br>
TVector3 RP12 = p2unit - p1unit*R;<br>
<br>
Double_t DOT21 = diff.Dot(RP21);<br>
Double_t DOT12 = diff.Dot(RP12);<br>
<br>
TVector3 M1 = v1 + p1unit*R1*DOT21;<br>
TVector3 M2 = v2 + p2unit*R1*DOT12;<br>
<br>
TVector3 diff1 = M2 - M1;<br>
if(M2.Mag() > M1.Mag()){<br>
(*dist) = -diff1.Mag();<br>
}<br>
else{(*dist) = diff1.Mag();}<br>
<br>
(*stat) = 1;<br>
TVector3 MidPoint = ( M1 + M2 ) * 0.5;<br>
return MidPoint;<br>
}</font><br>
</p>
<p><br>
</p>
<pre class="moz-signature" cols="72">BR
MK
----------------------------------------
Michael C. Kunkel, PhD
Forschungszentrum Jülich
Nuclear Physics Institute and Juelich Center for Hadron Physics
Experimental Hadron Structure (IKP-1)
<a class="moz-txt-link-abbreviated" href="http://www.fz-juelich.de/ikp">www.fz-juelich.de/ikp</a></pre>
<br>
<blockquote
cite="mid:BY2PR05MB235807ED65A64E4A8E981E3CE33F0@BY2PR05MB2358.namprd05.prod.outlook.com"
type="cite">
</blockquote>
<br>
</body>
</html>