{"id":32641839,"url":"https://github.com/hadjiprocopis/protein-hops","last_synced_at":"2026-05-03T11:36:24.570Z","repository":{"id":182168982,"uuid":"109393357","full_name":"hadjiprocopis/protein-hops","owner":"hadjiprocopis","description":"Reads protein functional associations (e.g. from STRING-DB) and finds direct (0-hops) or indirect (1,2-hops) protein-links between a pair of proteins (C/C++).This work was done while working at the Institute of Cancer Research in London in association with people from the Erler Lab.","archived":false,"fork":false,"pushed_at":"2017-11-25T18:40:08.000Z","size":843,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-31T03:01:53.789Z","etag":null,"topics":["bioinformatics-analysis","c","cplusplus","cpp","erler-lab","graph-algorithms","protein","protein-protein-interaction"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hadjiprocopis.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-11-03T12:33:09.000Z","updated_at":"2019-06-28T14:36:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"19acfa48-c484-40a8-83f3-47c93120331b","html_url":"https://github.com/hadjiprocopis/protein-hops","commit_stats":null,"previous_names":["hadjiprocopis/protein-hops"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hadjiprocopis/protein-hops","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadjiprocopis%2Fprotein-hops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadjiprocopis%2Fprotein-hops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadjiprocopis%2Fprotein-hops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadjiprocopis%2Fprotein-hops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hadjiprocopis","download_url":"https://codeload.github.com/hadjiprocopis/protein-hops/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hadjiprocopis%2Fprotein-hops/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32567649,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics-analysis","c","cplusplus","cpp","erler-lab","graph-algorithms","protein","protein-protein-interaction"],"created_at":"2025-10-31T02:59:56.848Z","updated_at":"2026-05-03T11:36:24.550Z","avatar_url":"https://github.com/hadjiprocopis.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Proteins are associated with other proteins, somehow.\nSTRING-DB (https://string-db.org) provides\na free, public database of functional associations\nbetween proteins (for many species including human).\n\nThe data is of the form:\n    A B 123\nwhere A and B are proteins and 123 is the confidence\nthat they are functionally associated. Some of these\nassociations are transitive and some are not.\n\nFor humans (the 9606 files in string-db.org) there are\n11353057 associations (not unique proteins but pairs of\nassociated proteins).\n\nThis program reads a STRING-DB file, with the format\nA B 123\n...\n\nand then takes the names of two proteins (the 'from' and\nthe 'to') and a range of the number of hops.\nIt then proceeds to search the database as a Graph\nand report all associations which start with 'from',\nend with 'to' and have as many intermediates as the\nnumber of hops specified.\n\nFor example, running the command\n\ngraphos_enquiry_for_STRING --input /data/DATASETS/STRING_DB/9606.protein.links.v10.5.txt --ifs ' ' --skip_header_lines 1 --max_num_hops 2 --search '9606.ENSP00000000233,9606.ENSP00000301744' --output out\n\nwill report all associations between 9606.ENSP00000000233 and \n9606.ENSP00000301744 with a maximum of two hops between them,\ni.e.\n\n9606.ENSP00000000233 9606.ENSP00000301744 (the direct one if it exists)\n9606.ENSP00000000233 A 9606.ENSP00000301744 (1st degree, 1 intermediary protein 'A')\n9606.ENSP00000000233 A B 9606.ENSP00000301744 (2nd degree, 2 intermediaries 'A' and 'B')\n\nThis is version 4.2 and it is a preliminary version\nprovided as a proof-of-concept for my idea.\n\nVersion 11.0 does many many more things.\nIt does search. Very well.\n\nBut it also builds a network of\ninteractions with the protein intermediaries too.\nIt clusters this network either wrt to function or\nwith say expression if specified.\nIt then assesses the statistical\nsignificance of the clustering using monte carlo\nsimulation and t-test.\n\nV11 can be provided upon request and subsequent interviewing.\nIf successful, the candidate user will be provided with V11\nand supported.\n\n# download:\nI suggest you download the tarball from git repository at:\n\nhttps://github.com/hadjiprocopis/protein-hops/blob/master/grapher-4.2.tar.gz\n\n# compile and install:\nAt a unix (OSX or Linux, please do not ask me question about windows)\ncommand prompt do:\n```\ntar xvzf grapher-4.2.tar.gz\ncd grapher-4.2\n./configure --disable-debug\n```\nIf configure likes your system, finds all\ndependancies and is in a good day,\nyou may proceed to compilation:\n```\nmake clean \u0026\u0026 make all\n```\n\nThen probably you have the executable at\n```\nsrc/C/graphos_enquiry_for_STRING\n```\n\n# running the program:\nFirstly you must download a STRING-DB protein\nassociations file, for example the one for\nhuman species proteins at:\n```\nhttp://stringdb-static.org/download/protein.links.v10.5/9606.protein.links.v10.5.txt.gz\n```\n\nNote that I have changed 'https://...' to 'http://...'\nUsing https for public protein data is one way to destroy the world.\n\nThen you need to uncompress it and store it somewhere,\nlet's say at the current dir\n```\ngunzip 9606.protein.links.v10.5.txt.gz\n```\n\nwhich will yield the file\n```\n9606.protein.links.v10.5.txt\n```\nin the current directory.\n\nNow you are ready to run the grapher.\n\n```\ngraphos_enquiry_for_STRING --input 9606.protein.links.v10.5.txt --ifs ' ' --skip_header_lines 1 --max_num_hops 1 --search '9606.ENSP00000000233,9606.ENSP00000301744' --output out.hops1\n```\n\nThis will \n\nproduce the following output:\n```\ngraphos_enquiry_for_STRING : reading edges from file '/data/DATASETS/STRING_DB/9606.protein.links.v10.5.txt' ... \nread_file_in_memory : read 522240609 bytes from file '/data/DATASETS/STRING_DB/9606.protein.links.v10.5.txt' in memory.\ndone, read 11353057 lines (including header \u0026 empty), user: 5.170934, system: 0.276579 (5.170934, 0.278411)\ngraphos_enquiry_for_STRING : 1 of 1) recursive search 9606.ENSP00000000233 -\u003e 9606.ENSP00000301744, min num hops: 1, max num hops: 1\ngraphos_enquiry_for_STRING : 1 of 1) found 818 paths with criteria specified, user: 0.509191, system: 0.000000 (5.680152, 0.278413)\n\ngraphos_enquiry_for_STRING : doing calculations on the paths ... user: 0.000075, system: 0.000000 (5.680241, 0.278413)\n\ngraphos_enquiry_for_STRING : 1 of 1) saving paths to files (out.hops1.9606.ENSP00000000233.9606.ENSP00000301744.*) ...\n1 hops yielded 818 paths, output file 'out.hops1.9606.ENSP00000000233.9606.ENSP00000301744.1hops.txt'.\n1 hops yielded 1636 edges, output file 'out.hops1.9606.ENSP00000000233.9606.ENSP00000301744.edgelist.1hops.txt'.\nall hops yielded 1636 edges, output file 'out.hops1.9606.ENSP00000000233.9606.ENSP00000301744.edgelist.allhops.txt'.\n1 hops yielded 820 nodes, output file 'out.hops1.9606.ENSP00000000233.9606.ENSP00000301744.nodelist.1hops.txt'.\nall hops yielded 820 nodes, output file 'out.hops1.9606.ENSP00000000233.9606.ENSP00000301744.nodelist.allhops.txt'.\nuser: 0.003015, system: 0.000000 (5.683262, 0.278413)\ngraphos_enquiry_for_STRING : done, 0 (0.0%) searches failed, 1 (100.0%) searches succeeded, of a total of 1.\nuser: 6.039501, system: 0.276642 (6.039501, 0.278413)\n```\n\nWhich says that it finished in about 6 seconds and the output is in the\ncurrent directory prefixed with 'out.hops1.'\n\nThe file\n```\nout.hops1.9606.ENSP00000000233.9606.ENSP00000301744.1hops.txt\n```\n\ncontains entries like:\n```\n9606.ENSP00000000233()  ()      9606.ENSP00000358867()  ()      9606.ENSP00000301744()  (1)\n```\n\nwhich, as you can imagine is the association of the 'from' protein\n(at the left) with the 'to' protein (at the right) and all\nthe intermediate proteins in the middle.\n\nIf you have a fast computer and a lot of memory then you can try\nthe 2nd degree associations, i.e. with 2 intermediaries (plus 1 'from'\nand 1 'to' makes a chain of 4 proteins in total).\n\nIt will take exponentially more time to complete.\nIn my computer it took 16 minutes instead of\n6 seconds.\n\nSometimes the program may run out of memory. So try more hops than\n1 if you have confidence in your hardware. Otherwise, if all memory is\nexhausted, the computer will become very slow and it may not be\neasy to save any work you have been doing.\n\nSo, before running the 2-hops, save all your work and be ready\nto reboot your computer if it becomes too slow (usually having access\nto a terminal will be sufficient to kill the program using:\n```\nkillall graphos_enquiry_for_STRING\n```\n\nauthor (idea and implementation): Andreas Hadjiprocopis\ncontact: andreashad2@gmail.com\nwhen: at the time I was working at the Institute of Cancer Research.\nAlthough the idea and implementation are mine, I used\nICR's resources.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhadjiprocopis%2Fprotein-hops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhadjiprocopis%2Fprotein-hops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhadjiprocopis%2Fprotein-hops/lists"}