I define a distance-function according to your proposal (although I don't see why you divide by the sum of errors: great errors make great differences in energy small)
For example a distance which is the difference in energy between the
levels divided by the sum of their errors
df[x_, y_] := Abs[(x[[1]] - y[[1]])/(x[[4]] + y[[4]])]
Unfortunately this does not give a clustering of level52
In[68]:= FindClusters[level52, DistanceFunction -> (df[#1, #2] &)]
% // Length
Out[68]= {{{6430, 0.93, 0.0808, 12}, {6452, 0.56, 0.112, 13}, {6485,
2.03, 0.0848, 15}, {6531, 0.78, 0.0579, 18}, {6584, 0.56, 0.0488,
21}, {6659, 0.83, 0.0483, 25}}}
Out[69]= 1
Interesting enough applying this distance-function to each pair of elements (produced by the Subsets-command) in level52 gives a set of numbers (distances), which are clustered in two parts:
In[83]:= Apply[df, Subsets[level52, {2}], {1}] // N
FindClusters[%]
Out[83]= {0.88, 2.03704, 3.36667, 4.66667, 6.18919, 1.17857, 2.54839, \
3.88235, 5.44737, 1.39394, 2.75, 4.35, 1.35897, 2.97674, 1.63043}
Out[84]= {{0.88, 2.03704, 1.17857, 2.54839, 1.39394, 2.75, 1.35897,
2.97674, 1.63043}, {3.36667, 4.66667, 6.18919, 3.88235, 5.44737,
4.35}}
But does df work at all in the Clustering-command?
If I produce a new set of data named level52a where there are added five datasets with an energy enhanced by 450 units the distance-function works: level52a is clustered in two sets consisting of 6 (the original data) and 5 (the new data) elements.
In[114]:=
level52a = Join[level52, # + {450, 0, 0, 0} & /@ Take[level52, 5]];
FindClusters[level52a, DistanceFunction -> (df[#1, #2] &)]
Length /@ %
Out[115]= {{{6430, 0.93, 0.0808, 12}, {6452, 0.56, 0.112, 13}, {6485,
2.03, 0.0848, 15}, {6531, 0.78, 0.0579, 18}, {6584, 0.56, 0.0488,
21}, {6659, 0.83, 0.0483, 25}}, {{6880, 0.93, 0.0808, 12}, {6902,
0.56, 0.112, 13}, {6935, 2.03, 0.0848, 15}, {6981, 0.78, 0.0579,
18}, {7034, 0.56, 0.0488, 21}}}
Out[116]= {6, 5}
Obviously df is not appropriate to cluster level 52a.