5
procedure EstimateFDR2(lnTests: integer; var Ps: SingleP; var lFDR05, lFDR01,lnegFDR05, lnegFDR01: double);
6
procedure qsort(lower, upper : integer; var Data:SingleP);
9
procedure qsort(lower, upper : integer; var Data:SingleP);
10
//40ms - very recursive...
12
left, right : integer;
15
pivot:=Data^[(lower+upper) div 2];
18
while left<=right do begin
19
while Data^[left] < pivot do left:=left+1; { Parting for left }
20
while Data^[right] > pivot do right:=right-1;{ Parting for right}
21
if left<=right then begin { Validate the change }
23
Data^[left] := Data^[right];
24
Data^[right] := lswap;
28
end;//while left <=right
29
if right>lower then qsort(lower,right,Data); { Sort the LEFT part }
30
if upper>left then qsort(left ,upper,data); { Sort the RIGHT part }
33
procedure EstimateFDR2(lnTests: integer; var Ps: SingleP; var lFDR05, lFDR01,lnegFDR05, lnegFDR01: double);
39
//ShaQuickSort(lnTests,Singlep0(Ps[1]));
41
//qcksrt(1,lnTests,Ps);
42
GetMem(Qs,lnTests*sizeof(single));
44
for lInc := 1 to lnTests do
45
Qs^[lInc] := (0.05*lInc)/lnTests;
47
for lInc := 1 to lnTests do
48
if Ps^[lInc] <= Qs^[lInc] then
51
for lInc := 1 to lnTests do
52
Qs^[lInc] := (0.01*lInc)/lnTests;
54
for lInc := 1 to lnTests do
55
if Ps^[lInc] <= Qs^[lInc] then
58
GetMem(lrPs,lnTests*sizeof(single));
59
for lInc := 1 to lnTests do
60
lrPs^[lInc] := 1- Ps^[lnTests-lInc+1];
61
for lInc := 1 to lnTests do
62
Qs^[lInc] := (0.05*lInc)/lnTests;
64
for lInc := 1 to lnTests do
65
if lrPs^[lInc] <= Qs^[lInc] then
66
lnegFDR05 := lrPs^[lInc];
68
for lInc := 1 to lnTests do
69
Qs^[lInc] := (0.01*lInc)/lnTests;
71
for lInc := 1 to lnTests do
72
if lrPs^[lInc] <= Qs^[lInc] then
73
lnegFDR01 := lrPs^[lInc];