You can use the straightforward method to handle this problem. Basically, you map the {0,100} by {0,100} domain to {0,2 Pi} domain. Add some radius info to adjust the looking of the torus. Here is an example
dataTorus = positionList/100*2 \[Pi] (* positionList is from your code*)
Assume the radius of the ring is
r1 and the radius of the tube is
r2. Use the parameterized coordinates, we have
r1=1;r2=0.3;
f[{\[Theta]_,\[Phi]_}]:={(r1+r2*Cos[\[Phi]])*Cos[\[Theta]],(r1+r2*Cos[\[Phi]])*Sin[\[Theta]],r2*Sin[\[Phi]]}
(* Phi is the (Pi/2 - polar angle) and Theta is the azimuth angle*)
The coordinate conversion is simply
Evaluate[f] /@ dataTorus
Use Show function as chocolate to glue the doughnut and sprinkles together:
Show[
ListPointPlot3D[Evaluate[f] /@ dataTorus,PlotStyle -> Directive[PointSize[0.02]]],
ParametricPlot3D[Evaluate@f[{\[Theta], \[Phi]}], {\[Theta], 0, 2*\[Pi]}, {\[Phi], 0, 2*\[Pi]}, Mesh -> None, PlotStyle -> Opacity[0.5]]]