Advertisement
Guest User

Untitled

a guest
Feb 21st, 2015
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.45 KB | None | 0 0
  1. CHARACTER*50 INFILE,OUTFILE
  2. CHARACTER*8 PROCNAM(5),PXN
  3. integer, dimension(:,:), allocatable :: jsnp
  4. integer, dimension(:), allocatable :: nsnp, isnp
  5. INTEGER ILIS(100,2)
  6. INTEGER NGS(1000000),IDSNP(1000000)
  7. INTEGER IGS(1000000,25)
  8. INTEGER ICH(20000),IGOC(20000)
  9. INTEGER IDGE(30000),IPFC(35000,2)
  10. INTEGER IDGO(20000),NGC(30000)
  11. INTEGER JDGO(20000),MGC(30000)
  12. INTEGER MPFC(20000),MCG(30000),NCG(30000)
  13. integer, dimension(:,:), allocatable :: igc, jgc, ksco
  14. INTEGER JSCO(20000)
  15. INTEGER ISGSNP(200000)
  16. INTEGER MSCO(20000)
  17. INTEGER NUMSIG(3,5)
  18. INTEGER MUMSIG(3,5),ISLIM(200)
  19. INTEGER ISCO(20000),MUM(20000),NUN(20000)
  20. REAL PR(20000),CRIT(3),CUM(1000001),QR(20000)
  21. REAL ZR(20000),YR(3,5),GM(20000),QZ(5),PMIN(5)
  22. REAL DUM(1000001),QMIN(5)
  23. REAL*8 QP(20000),CHX,RU(20000),QQ(20000)
  24. REAL*8 XX,ST,YY
  25. REAL*8 GETRAN
  26. EXTERNAL GETRAN,QUIKSORT
  27. allocate(JSNP(6000000,25))
  28. allocate(NSNP(6000000), ISNP(6000000))
  29. allocate(IGC(30000,1000),JGC(30000,1000),KSCO(50000,10000))
  30. OPEN(10,FILE='allsnp_gene_NCBI_0KB.txt')
  31. C THIS FILE CONTAINS A LIST OF ALL SNPs ANNOTATED
  32. C BY THE GENES THEY LIE WITHIN (NCBI ID NUMBERS)
  33. OPEN(25,FILE='allsnp_gene_NCBI_0KB.list')
  34. OPEN(11,FILE='gene_go_17_03_09.dat')
  35. OPEN(12,FILE='pfc_17_03_09.dat')
  36. READ(*,*) INFILE
  37. READ(*,*) OUTFILE
  38. OPEN(14,FILE=INFILE)
  39. OPEN(15,FILE=OUTFILE)
  40. READ(*,*) NSNPLIST
  41. READ(*,*) DRIT
  42. READ(*,*) NWIN
  43. READ(*,*) NREP
  44. READ(*,*) ST
  45. NSG=5770877
  46. C TOTAL NUMBER OF SNPS IN FILE allsnp_gene_NCBI_0KB.txt
  47. NGO=754498
  48. C TOTAL NUMBER OF GENE/GO CATEGORY ASSIGNMENTS
  49. NPFC=28339
  50. C TOTAL NUMBER OF GO CATEGORIES WITH NAMES/FUNCTION DATA
  51. PROCNAM(1)='ALL CATS'
  52. PROCNAM(2)='CELLULAR'
  53. PROCNAM(3)='FUNCTION'
  54. PROCNAM(4)='PROCESS '
  55. PROCNAM(5)='PRO+FUNC'
  56. CRIT(1)=0.05
  57. CRIT(2)=0.01
  58. CRIT(3)=0.001
  59. NUM=0
  60. DO 873 I=1,NPFC
  61. READ(12,*) (IPFC(I,K),K=1,2)
  62. 873 CONTINUE
  63. DO 871 I=1,1000000
  64. NGS(I)=0
  65. 871 CONTINUE
  66. DO 872 I=1,30000
  67. MGC(I)=0
  68. MCG(I)=0
  69. 872 CONTINUE
  70. DO 604 I=10,99
  71. READ(25,*) II,ILIS(I,1),ILIS(I,2)
  72. 604 CONTINUE
  73. C READING IN START AND END POINTS ON THE COMPLETE LIST OF SNPS WHOSE
  74. C RS NUMBERS START WITH 10, 11, .... 99
  75. C TO MAKE IT FASTER TO LOCATE THE SNPS USED IN A PARTICULAR STUDY.
  76. MMSP=0
  77. DO 503 I=1,NSG
  78. READ(10,*) ISNP(I),NSNP(I),(JSNP(I,K),K=1,NSNP(I))
  79. 503 CONTINUE
  80. C READS IN COMPLETE LIST OF SNPS WITHIN GENES
  81. MGE=0
  82. MSP=0
  83. DO 605 I=1,NSNPLIST
  84. C THIS SECTION READS IN THE SNPS USED IN THE STUDY BEING ANALYSED
  85. C CHECKS THEM AGAINST THE TOTAL LIST OF SNPS WITHIN GENES
  86. C TO CREATE A LIST OF SNPS WITHIN GENES AND THE GENES WITHIN WHICH THEY LIE
  87. READ(14,*) II,PP
  88. RS=REAL(II)
  89. RX=LOG10(RS)
  90. IX=INT(RX)-1
  91. RJ=REAL(IX)
  92. IC=INT(RS/(10**RJ))
  93. IUS=0
  94. DO 696 J=ILIS(IC,1),ILIS(IC,2)
  95. IF (II.EQ.ISNP(J)) THEN
  96. IUS=J
  97. GOTO 697
  98. ENDIF
  99. 696 CONTINUE
  100. 697 CONTINUE
  101. IF (IUS.EQ.0) THEN
  102. GOTO 605
  103. ENDIF
  104. MSP=MSP+1
  105. IDSNP(MSP)=ISNP(IUS)
  106. NGS(MSP)=NSNP(IUS)
  107. DO 698 J=1,NSNP(IUS)
  108. JGX=JSNP(IUS,J)
  109. JNE=0
  110. DO 802 II=1,MGE
  111. IF (JGX.EQ.IDGE(II)) THEN
  112. JNE=II
  113. ENDIF
  114. 802 CONTINUE
  115. IF (JNE.EQ.0) THEN
  116. MGE=MGE+1
  117. IDGE(MGE)=JGX
  118. JNE=MGE
  119. ENDIF
  120. IGS(MSP,J)=JNE
  121. 698 CONTINUE
  122. IF (PP.LT.DRIT) THEN
  123. NUM=NUM+1
  124. ISGSNP(NUM)=MSP
  125. ENDIF
  126. C CREATES LIST OF SIGNIFICANT SNPS WITH P-val < SPECIFIED CRITERION
  127. 699 CONTINUE
  128. 605 CONTINUE
  129. DUM(1)=0.0
  130. DO 603 I=1,MSP
  131. DUM(I+1)=DUM(I)+(1.0/FLOAT(MSP))
  132. 603 CONTINUE
  133. DUM(MSP+1)=1.0
  134. PRINT*,'SNPS READ'
  135. PRINT*,'#SNPS = ',MSP
  136. PRINT*,'#GENES = ',MGE
  137. DO 502 I=1,NGO
  138. READ(11,*) JGX,IID
  139. INE=0
  140. DO 842 II=1,MGE
  141. IF (JGX.EQ.IDGE(II)) THEN
  142. INE=II
  143. GOTO 937
  144. ENDIF
  145. 842 CONTINUE
  146. 937 CONTINUE
  147. IF (INE.EQ.0) THEN
  148. GOTO 502
  149. ENDIF
  150. JNE=0
  151. MMGO=0
  152. DO 602 II=1,MMGO
  153. IF (IID.EQ.JDGO(II)) THEN
  154. JNE=II
  155. ENDIF
  156. 602 CONTINUE
  157. IF (JNE.EQ.0) THEN
  158. MMGO=MMGO+1
  159. C PRINT*,MMGO,IID
  160. JDGO(MMGO)=IID
  161. JNE=MMGO
  162. ENDIF
  163. INF=0
  164. DO 722 J=1,MGC(INE)
  165. IF (JNE.EQ.JGC(INE,J)) THEN
  166. INF=J
  167. ENDIF
  168. 722 CONTINUE
  169. IF (INF.EQ.0) THEN
  170. MGC(INE)=MGC(INE)+1
  171. MCG(JNE)=MCG(JNE)+1
  172. JGC(INE,MGC(INE))=JNE
  173. ENDIF
  174. C JGC CONTAINS ALL GO GATEGORY MEMBERSHIPS FOR EACH GENE
  175. 502 CONTINUE
  176. MGO=0
  177. DO 607 I=1,MMGO
  178. C THIS SECTION REMOVES GO CATEGORIES WITH FEWER THAN 3 GENES
  179. C OR MORE THAN 5000 (USER CAN EDIT AND RECOMPILE IF DESIRED)
  180. IF (MCG(I).LT.3.OR.MCG(I).GT.5000) THEN
  181. ICH(I)=0
  182. GOTO 607
  183. ENDIF
  184. MGO=MGO+1
  185. NCG(MGO)=MCG(I)
  186. IDGO(MGO)=JDGO(I)
  187. ICH(I)=MGO
  188. IPF=0
  189. DO 874 J=1,NPFC
  190. IF (IDGO(MGO).EQ.IPFC(J,1)) THEN
  191. IPF=J
  192. GOTO 931
  193. ENDIF
  194. 874 CONTINUE
  195. 931 CONTINUE
  196. IF (IPF.EQ.0) THEN
  197. PRINT*,'MISSING CATEGORY ',IDGO(MGO)
  198. ELSE
  199. MPFC(MGO)=IPFC(IPF,2)
  200. ENDIF
  201. 607 CONTINUE
  202. DO 609 I=1,MGE
  203. NGC(I)=0
  204. NGC(I)=0
  205. DO 608 J=1,MGC(I)
  206. JX=JGC(I,J)
  207. NN=ICH(JX)
  208. IF (NN.NE.0) THEN
  209. NGC(I)=NGC(I)+1
  210. IGC(I,NGC(I))=NN
  211. ENDIF
  212. 608 CONTINUE
  213. 609 CONTINUE
  214. PRINT*,'CATS READ'
  215. PRINT*,'No.CATS = ',MGO
  216. NMA=0
  217. JMA=0
  218. DO 226 I=1,MGE
  219. IF (NGC(I).GE.NMA) THEN
  220. NMA=NGC(I)
  221. JMA=I
  222. ENDIF
  223. 226 CONTINUE
  224. PRINT*,'MAX #CATS PER GENE = ',NMA
  225. PRINT*,'GENE ID ',IDGE(JMA)
  226. NMA=0
  227. JMA=0
  228. DO 2 I=1,MSP
  229. IF (NGS(I).GE.NMA) THEN
  230. NMA=NGS(I)
  231. JMA=I
  232. ENDIF
  233. 2 CONTINUE
  234. PRINT*,'NO. SNPS IN STUDY = ',NSNPLIST
  235. PRINT*,'NO. SNPS IN GENES = ',MSP
  236. PRINT*,'MAX #GENES PER SNP = ',NMA
  237. PRINT*,'SNP ID ',IDSNP(JMA)
  238. NMA=0
  239. JMA=0
  240. DO 3 I=1,MGO
  241. IF (NGC(I).GE.NMA) THEN
  242. NMA=NGC(I)
  243. JMA=I
  244. ENDIF
  245. 3 CONTINUE
  246. DO 987 IY=1,20000
  247. ISCO(IY)=0
  248. JSCO(IY)=0
  249. 987 CONTINUE
  250. DO 587 IY=1,3
  251. DO 787 IZ=1,5
  252. NUMSIG(IY,IZ)=0
  253. 787 CONTINUE
  254. 587 CONTINUE
  255. JGE=0
  256. DO 14 I=1,NUM
  257. DO 198 J=1,20000
  258. IGOC(J)=0
  259. 198 CONTINUE
  260. KU=ISGSNP(I)
  261. C GET THE ID OF EACH SIGNIFICANT SNP
  262. DO 16 J=1,NGS(KU)
  263. ICG=IGS(KU,J)
  264. C WHAT GENES DOES IT LIE IN ?
  265. IUS=0
  266. DO 26 K=1,JGE
  267. IF (ICG.EQ.JSCO(K)) THEN
  268. IUS=K
  269. ENDIF
  270. 26 CONTINUE
  271. C IS THIS GENE ALREADY ON THE LIST ?
  272. IF (IUS.EQ.0) THEN
  273. JGE=JGE+1
  274. JSCO(JGE)=ICG
  275. C ADD GENE TO LIST
  276. DO 18 KK=1,NGC(ICG)
  277. K=IGC(ICG,KK)
  278. IF (IGOC(K).EQ.0) THEN
  279. ISCO(K)=ISCO(K)+1
  280. IGOC(K)=1
  281. ENDIF
  282. C INCREASE THE COUNT OF SIGNIFICANT GENES FOR ALL GO CATEGORIES
  283. C CONTAINING THIS GENE BY 1 - BUT ONLY IF THIS SNP HASN'T ALREADY
  284. C CONTRIBUTED A GENE TO THIS CATEGORY. IF A SNP LIES
  285. C IN SEVERAL OVERLAPPING GENES ALL IN THE SAME GO CATEGORY,
  286. C THIS PREVENTS ALL THE GENES BEING COUNTED SEPARATELY.
  287. 18 CONTINUE
  288. ENDIF
  289. 16 CONTINUE
  290. 14 CONTINUE
  291. PRINT*,'P-VALUE CRITERION FOR DEFINING SIGNIFICANT SNPS = ',DRIT
  292. PRINT*,'NUMBER OF GENES WITH SIGNIFICANT SNPS = ',JGE
  293. PRINT*,'NUMBER OF SIMULATED REPLICATE GENE-LISTS = ',NWIN
  294. PRINT*,'NUMBER OF BOOTSTRAP STUDIES = ',NREP
  295. DO 979 IT=1,NWIN
  296. PRINT*,'SIMULATED REPLICATE GENELIST',IT
  297. KRE=1
  298. DO 887 IY=1,10000
  299. JSCO(IY)=0
  300. GM(IY)=0
  301. KSCO(IT,IY)=0
  302. 887 CONTINUE
  303. KGE=0
  304. 666 CONTINUE
  305. YY=GETRAN(XX,ST)
  306. R=REAL(XX)
  307. KU=0
  308. DO 551 K=1,MSP
  309. IF (R.GE.DUM(K).AND.R.LT.DUM(K+1)) THEN
  310. KU=K
  311. ENDIF
  312. 551 CONTINUE
  313. C SELECT A RANDOM SNP
  314. DO 298 J=1,20000
  315. IGOC(J)=0
  316. 298 CONTINUE
  317. DO 116 J=1,NGS(KU)
  318. ICG=IGS(KU,J)
  319. C WHAT GENES DOES THE SNP LIE IN ?
  320. IUS=0
  321. DO 216 K=1,KGE
  322. IF (ICG.EQ.JSCO(K)) THEN
  323. IUS=K
  324. ENDIF
  325. 216 CONTINUE
  326. C GENE ALREADY ON LIST ?
  327. C PRINT*,II,NID-I,IDJ,IUS,ICG
  328. IF (IUS.EQ.0) THEN
  329. KGE=KGE+1
  330. C PRINT*,IT,KGE
  331. IF (KGE.GT.JGE) THEN
  332. GOTO 994
  333. ENDIF
  334. C GENELIST REACHED THE SAME LENGTH AS THE ORIGINAL ?
  335. JSCO(KGE)=ICG
  336. DO 118 KK=1,NGC(ICG)
  337. K=IGC(ICG,KK)
  338. IF (IGOC(K).EQ.0) THEN
  339. KSCO(IT,K)=KSCO(IT,K)+1
  340. IGOC(K)=1
  341. ENDIF
  342. 118 CONTINUE
  343. C ADD 1 TO EACH GO CATEGORY CONTAINING THE GENE (SEE ABOVE)
  344. ENDIF
  345. 116 CONTINUE
  346. GOTO 666
  347. 994 CONTINUE
  348. 979 CONTINUE
  349. DO 812 IX=1,5
  350. PMIN(IX)=99.0
  351. 812 CONTINUE
  352. NSCA=0
  353. DO 22 I=1,MGO
  354. NMP=MPFC(I)
  355. IF (ISCO(I).LE.1) THEN
  356. GOTO 22
  357. ENDIF
  358. C ONLY COUNT GO CATEGORIES WITH TWO OR MORE SIGNIFICANT GENES
  359. PR(I)=0
  360. ZR(I)=0
  361. RU(I)=0.0d0
  362. CUM(1)=0
  363. DO 32 J=1,NWIN
  364. IF (ISCO(I).LE.KSCO(J,I)) THEN
  365. PR(I)=PR(I)+(1.0/FLOAT(NWIN))
  366. ENDIF
  367. C CATEGORY-SPECIFIC P-VALUE = NUMBER OF SIMULATED GENELISTS
  368. C WHERE THE SCORE FOR THE CATEGORY (KSCO) IS AT LEAST AS HIGH
  369. C AS THAT IN THE REAL DATA (ISCO)
  370. CUM(J+1)=CUM(J)+(1.0/FLOAT(NWIN))
  371. GM(I)=GM(I)+(FLOAT(KSCO(J,I))/FLOAT(NWIN))
  372. C CALCULATING EXPECTED NUMBER OF SIGNIFICANT GENES IN THE CATEGORY
  373. 32 CONTINUE
  374. CUM(NWIN+1)=1.0
  375. IF (PR(I).LT.PMIN(1)) THEN
  376. PMIN(1)=PR(I)
  377. ENDIF
  378. DO 813 J=1,3
  379. IF (NMP.EQ.J.AND.PR(I).LE.PMIN(J+1)) THEN
  380. PMIN(J+1)=PR(I)
  381. ENDIF
  382. 813 CONTINUE
  383. IF (NMP.GE.2.AND.PR(I).LE.PMIN(5)) THEN
  384. PMIN(5)=PR(I)
  385. ENDIF
  386. C CALCULATING MINIMUM P-VALUES FOR CATEGORIES OF EACH FUNCTIONAL TYPE
  387. DO 33 J=1,3
  388. IF (PR(I).LE.CRIT(J)) THEN
  389. NUMSIG(J,1)=NUMSIG(J,1)+1
  390. NUMSIG(J,NMP+1)=NUMSIG(J,NMP+1)+1
  391. IF (NMP.GE.2) THEN
  392. NUMSIG(J,5)=NUMSIG(J,5)+1
  393. ENDIF
  394. ENDIF
  395. C COUNTING NUMBER OF CATEGORIES REACHING A GIVEN CATEGORY-SPECIFIC P-VALUE
  396. 33 CONTINUE
  397. QP(I)=DBLE(PR(I))
  398. 22 CONTINUE
  399. NBOOT=NWIN
  400. DO 716 IC=1,3
  401. DO 816 ID=1,5
  402. YR(IC,ID)=0
  403. 816 CONTINUE
  404. 716 CONTINUE
  405. DO 819 I=1,5
  406. QZ(I)=0
  407. 819 CONTINUE
  408. DO 51 I=1,NREP
  409. C PRINT*,I
  410. C PERFORMING REPLICATE "STUDIES" TO GET SIGNIFICANCE OF NUMBERS OF
  411. C SIGNIFICANTLY OVER-REPRESENTED CATEGORIES
  412. YY=GETRAN(XX,ST)
  413. R=REAL(XX)
  414. IYS=0
  415. DO 53 K=1,NWIN
  416. IF (R.GE.CUM(K).AND.R.LT.CUM(K+1)) THEN
  417. IYS=K
  418. ENDIF
  419. 53 CONTINUE
  420. C CHOOSE A REPLICATE GENE-LIST TO ACT AS THE "REAL DATA"
  421. DO 54 K=1,MGO
  422. MSCO(K)=KSCO(IYS,K)
  423. QR(K)=0
  424. 54 CONTINUE
  425. DO 58 K=1,3
  426. DO 589 KK=1,5
  427. MUMSIG(K,KK)=0
  428. 589 CONTINUE
  429. 58 CONTINUE
  430. DO 52 J=1,NBOOT
  431. 528 CONTINUE
  432. YY=GETRAN(XX,ST)
  433. R=REAL(XX)
  434. JYS=0
  435. DO 55 K=1,NWIN
  436. IF (R.GE.CUM(K).AND.R.LT.CUM(K+1)) THEN
  437. JYS=K
  438. ENDIF
  439. 55 CONTINUE
  440. IF (JYS.EQ.IYS) THEN
  441. GOTO 528
  442. ENDIF
  443. C SELECT REPLICATE GENE LISTS (WITH REPLACEMENT)
  444. DO 56 K=1,MGO
  445. IF (MSCO(K).LE.KSCO(JYS,K)) THEN
  446. QR(K)=QR(K)+(1.0/FLOAT(NBOOT))
  447. ENDIF
  448. C OBTAIN CATEGORY-SPECIFIC P-VALUES FOR THE "REAL DATA"
  449. 56 CONTINUE
  450. 52 CONTINUE
  451. DO 814 K=1,5
  452. QMIN(K)=99.0
  453. 814 CONTINUE
  454. DO 57 K=1,MGO
  455. NMP=MPFC(K)
  456. IF (MSCO(K).LE.1) THEN
  457. GOTO 57
  458. ENDIF
  459. JGG=IDGO(K)
  460. IF (QR(K).LT.QMIN(1)) THEN
  461. QMIN(1)=QR(K)
  462. ENDIF
  463. DO 815 JX=1,3
  464. IF (NMP.EQ.JX.AND.QR(K).LE.QMIN(JX+1)) THEN
  465. QMIN(JX+1)=QR(K)
  466. ENDIF
  467. 815 CONTINUE
  468. IF (NMP.GE.2.AND.QR(K).LE.QMIN(5)) THEN
  469. QMIN(5)=QR(K)
  470. ENDIF
  471. C OBTAIN MINIMUM P-VALUES FOR CATEGORIES OF VARIOUS FUNCTIONAL TYPES
  472. DO 63 JJ=1,3
  473. IF (QR(K).LE.CRIT(JJ)) THEN
  474. MUMSIG(JJ,1)=MUMSIG(JJ,1)+1
  475. MUMSIG(JJ,NMP+1)=MUMSIG(JJ,NMP+1)+1
  476. IF (NMP.GE.2) THEN
  477. MUMSIG(JJ,5)=MUMSIG(JJ,5)+1
  478. ENDIF
  479. ENDIF
  480. C OBTAIN NUMBERS OF CATEGORIES WITH CATEGORY-SPECIFIC P-VALUES LESS THAN
  481. C VARIOUS CRITERIA
  482. 63 CONTINUE
  483. 57 CONTINUE
  484. DO 67 K=1,MGO
  485. IF (ISCO(K).LE.1) THEN
  486. GOTO 67
  487. ENDIF
  488. IF (PR(K).GE.QMIN(1)) THEN
  489. ZR(K)=ZR(K)+(1.0/FLOAT(NREP))
  490. ENDIF
  491. C PROBABILITY THAT ANY CATEGORY-SPECIFIC P-VALUE IN A STUDY WHERE THERE
  492. C IS NO FUNCTIONAL ASSOCIATION (i.e. RANDOMLY-SELECTED "REAL DATA") IS
  493. C LESS THAN OR EQUAL TO THE P-VALUE OF A GIVEN CATEGORY IN THE ORIGINAL
  494. C DATASET (i.e. A STUDY-WIDE P-VALUE CORRECTED FOR TESTING MULTIPLE NON-
  495. C INDEPENDENT CATEGORIES)
  496. DO 77 KK=1,MGO
  497. IF (MSCO(KK).LE.1) THEN
  498. GOTO 77
  499. ENDIF
  500. IF (PR(K).GE.QR(KK)) THEN
  501. RU(K)=RU(K)+(1.0d0/DFLOAT(NREP))
  502. ENDIF
  503. C EXPECTED NUMBER OF CATEGORIES PER STUDY WITH CATEGORY-SPECIFIC P-vALUES
  504. C LESS THAN OR EQUAL TO THAT OF A GIVEN CATEGORY IN THE ORIGINAL DATASET
  505. 77 CONTINUE
  506. 67 CONTINUE
  507. DO 817 JJ=1,5
  508. IF (QMIN(JJ).LE.PMIN(JJ)) THEN
  509. QZ(JJ)=QZ(JJ)+(1.0/FLOAT(NREP))
  510. ENDIF
  511. C PROBABILITY THAT THE MINIMUM CATEGORY-SPECIFIC P-VALUE IN A STUDY WHERE THERE
  512. C IS NO FUNCTIONAL ASSOCIATION (i.e. RANDOMLY-SELECTED "REAL DATA") IS
  513. C LESS THAN OR EQUAL TO THE MINIMUM CATEGORY-SPECIFIC P-VALUE IN THE ORIGINAL
  514. C DATA
  515. 817 CONTINUE
  516. DO 64 JJ=1,3
  517. DO 642 JH=1,5
  518. IF (MUMSIG(JJ,JH).GE.NUMSIG(JJ,JH)) THEN
  519. YR(JJ,JH)=YR(JJ,JH)+(1.0/FLOAT(NREP))
  520. ENDIF
  521. C PROBABILITY THAN THE NUMBER OF CATEGORIES REACHING SIGNIFICANCE IN A STUDY
  522. C WHERE THERE IS NO FUNCTIONAL ASSOCIATION (i.e. RANDOMLY-SELECTED "REAL DATA")
  523. C IS LESS THAN OR EQUAL TO THAT IN THE ORIGINAL DATA (i.e. TESTING FOR A
  524. C SIGNIFICANTLY LARGE NUMBER OF OVER-REPRESENTED CATEGORIES)
  525. 642 CONTINUE
  526. 64 CONTINUE
  527. 51 CONTINUE
  528. DO 712 IT=1,MGO
  529. IF (ISCO(IT).EQ.0) THEN
  530. QP(IT)=1d0+DBLE(GM(IT))
  531. ENDIF
  532. 712 CONTINUE
  533. X=QUIKSORT(QP,MGO,MUM)
  534. DO 23 I=1,MGO
  535. J=MUM(I)
  536. NMP=MPFC(J)
  537. PXN=PROCNAM(NMP+1)
  538. JG=IDGO(J)
  539. JH=ISCO(J)
  540. IF (ISCO(J).LE.1) THEN
  541. GOTO 23
  542. ENDIF
  543. C ONLY COUNT GO CATEGORIES WITH TWO OR MORE SIGNIFICANT GENES
  544. WRITE(15,44) JG,PXN,JH,JGE,NCG(J),MGE,GM(J),PR(J),ZR(J),RU(J)
  545. 23 CONTINUE
  546. WRITE(15,*)
  547. WRITE(15,*)
  548. DO 691 ISS=1,5
  549. WRITE(15,*) PROCNAM(ISS)
  550. WRITE(15,*)
  551. WRITE(15,*) 'MIN P =',PMIN(ISS),' SIG = ',QZ(ISS)
  552. WRITE(15,*)
  553. DO 69 IS=1,3
  554. WRITE(15,*) 'NO. OF P<',CRIT(IS),' =',NUMSIG(IS,ISS)
  555. WRITE(15,*) 'SIG = ',YR(IS,ISS)
  556. 69 CONTINUE
  557. WRITE(15,*)
  558. 691 CONTINUE
  559. CLOSE(15)
  560. 44 FORMAT(I8,2X,A8,3(2X,I5),2X,I5,2X,F7.2,2X,F7.5,2X,F6.4,2X,F9.2)
  561. STOP
  562. END
  563.  
  564. REAL*8 FUNCTION GETRAN(X,S)
  565. REAL*8 X,S,A,B,SN,SS,RN
  566. INTEGER IS
  567. A=7D0**5
  568. B=(2D0**31)-1
  569. SN=S*A
  570. IS=INT(SN/B)
  571. SS=DFLOAT(IS)
  572. C PRINT*,SN,SS,IS
  573. RN=SN-(SS*B)
  574. S=RN
  575. X=S/B
  576. GETRAN=1D0
  577. RETURN
  578. END
  579.  
  580. REAL FUNCTION QUIKSORT(RLOD,NLO,NUM)
  581. REAL*8 RLOD(20000)
  582. REAL*8 SORT1(20000),SORT2(20000),SORT3(20000)
  583. INTEGER NUM(20000),NUM1(20000),NUM2(20000)
  584. DO 5 I=1,NLO
  585. SORT1(I)=-1000.0D0
  586. NUM1(I)=0
  587. 5 CONTINUE
  588. DO 10 I=1,NLO
  589. XLO=RLOD(I)
  590. C PRINT*,XLO
  591. IPOS=0
  592. DO 20 J=NLO+1-I,NLO
  593. IF (XLO.GE.SORT1(J)) THEN
  594. C PRINT*,XLO,SORT1(J),J
  595. IPOS=J
  596. ENDIF
  597. 20 CONTINUE
  598. C PRINT*,IPOS
  599. SORT2(IPOS)=XLO
  600. NUM2(IPOS)=I
  601. DO 30 K=2,IPOS
  602. SORT2(K-1)=SORT1(K)
  603. NUM2(K-1)=NUM1(K)
  604. 30 CONTINUE
  605. DO 40 K=IPOS+1,NLO
  606. SORT2(K)=SORT1(K)
  607. NUM2(K)=NUM1(K)
  608. 40 CONTINUE
  609. DO 50 L=1,NLO
  610. NUM1(L)=NUM2(L)
  611. SORT1(L)=SORT2(L)
  612. C PRINT*,L,SORT1(L)
  613. 50 CONTINUE
  614. 10 CONTINUE
  615. DO 60 I=1,NLO
  616. NUM(I)=NUM1(I)
  617. 60 CONTINUE
  618. QUIKSORT=1.0
  619. RETURN
  620. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement