{ "info": { "author": "Ingo Marquardt", "author_email": "ingo.marquardt@gmx.de", "bugtrack_url": null, "classifiers": [], "description": "|PyPI version| |Build Status| |codecov| |DOI|\n\nPyPRF\n=====\n\nA free & open source *python package* for *population receptive field\n(pRF) analysis*. With this package you can present visual stimuli for a\nretinotopic mapping fMRI experiment, and perform a pRF analysis on the\nfMRI data.\n\n1. Stimulus presentation\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nPresents visual stimuli for retinotopic mapping experiments. The stimuli\nconsist of bars at different locations and orientations, filled with\nflickering black and white checkerboards. It is important that the\nparticipant fixates throughout the experiment. Therefore, there is a\ncentral fixation task. The fixation dot occasionally changes its colour,\nand the task is to press a button (number ``1``) in response. At the end\nof the presentation, the participant\u2019s hit rate is provided as feedback.\n\n2. Data analysis\n~~~~~~~~~~~~~~~~\n\nAnalysis tools for fMRI data from retinotopic mapping experiment. A pRF\nis estimated for each voxel (see [1]). The pRF model used here is a 2D\nGaussian; the free parameters are the Gaussian\u2019s x- and y-position, and\nits width (SD). This rather simple pRF model is best suited for early\nvisual cortex (higher cortical areas may require more complex models).\n\nHow to use - stimulus presentation\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n1. Installation\n\nThe stimulus presentation is implemented in\n`Psychopy `__, so if you would like to run the\nexperiment, you first need to install Psychopy (if you already have fMRI\ndata and would like to run the analysis, you can skip this step). On\n`debian `__, Psychopy can easily be installed\nusing ``apt-get``:\n\n.. code:: bash\n\n sudo apt-get install psychopy\n\nIf you\u2019re running some other operating system, please refer to the\n`Psychopy website `__.\n\nFor the stimulus presentation, you do not need to install ``pyprf``. You\nonly need a copy of the folder ``~/pyprf/pyprf/stimulus_presentation``.\nThe easiest way to get the ``pyprf`` stimuli is to clone the github\nrepository:\n\n.. code:: bash\n\n git clone https://github.com/ingo-m/pyprf.git\n\n(Or click the download button.)\n\nThen you can simply copy the folder ``stimulus_presentation`` and all\nits contents to the computer that you use for stimulus presentation. (Do\nnot change the folder names. )\n\n2. Create design matrix\n\nBefore you can run the experiment, you need to create a design matrix in\nwhich you specify the experimental design (e.g.\u00a0how many repetitions of\nthe stimulus, inter trial interval for target events, fMRI volume TR,\netc.). You can either open the script\n``~/pyprf/pyprf/stimulus_presentation/code/create_design_matrix.py`` in\nPsychopy and run it from there, or call it directly at command line.\n\nYou can specify all parameters in the GUI that will pop up. Note that\nthere is one stimulus per fMRI volume, so you have to know the volume TR\nwhen creating the design matrix.\n\n3. Stimulus presentation\n\nIn order to present the stimuli, you can open the file\n``~/pyprf/pyprf/stimulus_presentation/code/stimulus.py`` in Psychopy and\nrun it from there. Alternatively, you can call the presentation script\ndirectly from command line:\n\n.. code:: bash\n\n python `~/pyprf/pyprf/stimulus_presentation/code/stimulus.py`\n\nA GUI will open where you can specify further experimental parameters.\nImportantly, the name of the design matrix (e.g. \u2018Run_01\u2019) needs to\nmatch that of the file you created in the previous step.\n\nAfter starting the script, it will wait for a trigger signal from the\nfMRI scanner (default: keyboard button ``5``).\n\nThe stimuli look like this:\n\nYou can interrupt the presentation by pressing ``e`` and ``x`` at the\nsame time.\n\nHow to use - analysis\n~~~~~~~~~~~~~~~~~~~~~\n\n1. Install ``numpy``. For instance:\n\n.. code:: bash\n\n pip install numpy\n\n(Or, alternatively, if you\u2019re using conda,\n``conda install -c conda-forge numpy``.)\n\n2. The ``pyprf`` package can directly be installed from PyPI, in the\n following way:\n\n.. code:: bash\n\n pip install pyprf\n\n(Alternatively, you could also installed it from the repository, like\nthis: ``git clone https://github.com/ingo-m/pyprf.git`` followed by\n``pip install /path/to/pyprf``.)\n\n3. Data analysis:\n\nIn order to prepare the analysis, you need to run the stimulus\npresentation script in *logging mode* in order to create a log of the\nstimulus presentation. Run\n``~/pyprf/pyprf/stimulus_presentation/code/stimulus.py`` (as described\nabove, either from Psychopy or at command line). In the GUI, set\n\u2018Logging mode\u2019 to ``True``.\n\nThe stimulus presentation log is created in the folder\n``~/pyprf/pyprf/stimulus_presentation/log/Run_*_frames/``.\n\nThe analysis parameters are set in a config file. An example file can be\nfound\n`here `__.\nSee comments therein for more information.\n\nRun the analysis:\n\n.. code:: bash\n\n pyprf -config /path/to/config.csv\n\nDependencies\n~~~~~~~~~~~~\n\n``pyprf`` is implemented in `Python 3.6 `__.\n\nIf you install ``pyprf`` using ``pip`` (as described above), all of the\nfollowing dependencies except for ``Psychopy`` and ``numpy`` are\ninstalled automatically - you do not have to take care of this yourself.\nSimply follow the above installation instructions.\n\n+--------------------------------------------------------+----------------+\n| Stimulus presentation | Tested version |\n+========================================================+================+\n| `Psychopy `__ | 1.83.04 |\n+--------------------------------------------------------+----------------+\n| `NumPy `__ | 1.15.1 |\n+--------------------------------------------------------+----------------+\n| `SciPy `__ | 1.1.0 |\n+--------------------------------------------------------+----------------+\n| `Pillow `__ | 5.0.0 |\n+--------------------------------------------------------+----------------+\n\n+--------------------------------------------------------+----------------+\n| Data analysis | Tested version |\n+========================================================+================+\n| `NumPy `__ | 1.15.1 |\n+--------------------------------------------------------+----------------+\n| `SciPy `__ | 1.1.0 |\n+--------------------------------------------------------+----------------+\n| `NiBabel `__ | 2.2.1 |\n+--------------------------------------------------------+----------------+\n| `Cython `__\\ \u00b9 | 0.27.1 |\n+--------------------------------------------------------+----------------+\n| `Pillow `__ | 5.0.0 |\n+--------------------------------------------------------+----------------+\n| `Tensorflow `__\\ \u00b2 | 1.4.0 |\n+--------------------------------------------------------+----------------+\n| `h5py `__ | 2.8.0 |\n+--------------------------------------------------------+----------------+\n\n\u00b9: For considerably faster performance\n\n\u00b2: Can yield fast performance, depending on hardware. However, requires\ntensorflow to be configured for GPU usage (additional tensorflow\nspecific dependencies, including GPU drivers).\n\nThe analysis can be carried out in three different ways: using\n`numpy `__, `cython `__, or\n`tensorflow `__. You can set this option in\nthe ``config.csv`` file. All three approaches yield the same results,\nbut differ in their dependencies and computational time: - **Numpy**\nuses numpy for the model fitting. Should work out of the box. -\n**Cython** offers a considerable speedup by using compiled cython code\nfor model fitting. Should work out of the box. *This approach is\nrecommended for most users*. - **Tensorflow** may outperform the other\noptions in terms of speed (depending on the available hardware) by\nrunning the GLM model fitting on the graphics processing unit (GPU).\nHowever, in order for this to work, tensorflow needs to be configured to\nuse the GPU (including respective drivers). See the\n`tensorflow `__ website for information on\nhow to configure your system to use the GPU. If you do not configure\ntensorflow to use the GPU, the analysis should still run without error\non the CPU. Because this analysis may run single-threaded, it would be\nslow. Numpy is always required, no matter which option you choose.\n\nContributions\n~~~~~~~~~~~~~\n\nFor contributors, we suggest the following procedure:\n\n- Create your own fork (in the web interface, or by\n ``git checkout -b new_branch``)\n\n - If you create the branch in the web interface, pull changes to\n your local repository (``git pull``)\n\n- Change to new branch: ``git checkout new_branch``\n- Make changes\n- Commit changes to new branch (``git add .`` and ``git commit -m``)\n- Push changes to new branch (``git push origin new_branch``)\n- Create a pull request using the web interface\n\nReferences\n~~~~~~~~~~\n\nThis application is based on the following work:\n\n[1] Dumoulin, S. O. & Wandell, B. A. (2008). Population receptive field\nestimates in human visual cortex. NeuroImage 39, 647\u2013660.\n\nSupport\n~~~~~~~\n\nPlease use the `github\nissues `__ for questions or bug\nreports. You can also contact us on the ``pyprf`` |gitter| channel.\n\nLicense\n~~~~~~~\n\nThe project is licensed under `GNU General Public License Version\n3 `__.\n\n.. |PyPI version| image:: https://badge.fury.io/py/pyprf.svg\n :target: https://badge.fury.io/py/pyprf\n.. |Build Status| image:: https://travis-ci.org/ingo-m/pyprf.svg?branch=master\n :target: https://travis-ci.org/ingo-m/pyprf\n.. |codecov| image:: https://codecov.io/gh/ingo-m/pyprf/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/ingo-m/pyprf\n.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1475439.svg\n :target: https://doi.org/10.5281/zenodo.1475439\n.. |gitter| image:: https://badges.gitter.im/gitterHQ/gitter.png\n :target: https://gitter.im/pyprf/Lobby", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/ingo-m/pyprf/archive/v2.0.0.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ingo-m/pyprf", "keywords": "pRF,fMRI,retinotopy", "license": "GNU General Public License Version 3", "maintainer": "", "maintainer_email": "", "name": "pyprf", "package_url": "https://pypi.org/project/pyprf/", "platform": "", "project_url": "https://pypi.org/project/pyprf/", "project_urls": { "Download": "https://github.com/ingo-m/pyprf/archive/v2.0.0.tar.gz", "Homepage": "https://github.com/ingo-m/pyprf" }, "release_url": "https://pypi.org/project/pyprf/2.0.0/", "requires_dist": null, "requires_python": "", "summary": "A free & open source python tool for population receptive field analysis of fMRI data.", "version": "2.0.0" }, "last_serial": 4433567, "releases": { "1.1.0": [ { "comment_text": "", "digests": { "md5": "105db8b6393222bb22a628c1a7856087", "sha256": "9af9472fa16a8293adf7a55f924a2912d85af1600cb639e46101b85228fb005a" }, "downloads": -1, "filename": "pyprf-1.1.0.tar.gz", "has_sig": false, "md5_digest": "105db8b6393222bb22a628c1a7856087", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34345, "upload_time": "2018-01-13T00:02:56", "url": "https://files.pythonhosted.org/packages/40/b1/9bfd6bf04670c9dde23774e0e081fcf76af21cc70f4d2c2bd0cac0a1a2be/pyprf-1.1.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "f74c9f48ec926a6a39f763bbc1a73e4e", "sha256": "2e7e9427578b5cb2b26d398f4d9983aaaad2d6e0f6b0cbfe0f7d48572f6d8371" }, "downloads": -1, "filename": "pyprf-1.3.0.tar.gz", "has_sig": false, "md5_digest": "f74c9f48ec926a6a39f763bbc1a73e4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34581, "upload_time": "2018-02-20T13:54:09", "url": "https://files.pythonhosted.org/packages/84/5d/e9e60d16539b701747e3848c449dc2a8994f3fca9fb02e61580425c8d0df/pyprf-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "3be7d570cdd2cb1232ae09483bb531c8", "sha256": "be51e4d5de47ddf47d409eefb2cafc434bb0aea65cab35b7df3edebe75f08a6a" }, "downloads": -1, "filename": "pyprf-1.3.1.tar.gz", "has_sig": false, "md5_digest": "3be7d570cdd2cb1232ae09483bb531c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34658, "upload_time": "2018-02-20T15:29:55", "url": "https://files.pythonhosted.org/packages/9e/8c/3522f30fe1500a35339bb942fac707c188e06371c08d6f9cc3d41c4b7e5b/pyprf-1.3.1.tar.gz" } ], "1.3.10": [ { "comment_text": "", "digests": { "md5": "6e413f536a4b10ec866c65814058b0c9", "sha256": "f673c8e8d436a56c8f0932d57c52a608ebe849a9b95cd6c2f894f1bef40b89bb" }, "downloads": -1, "filename": "pyprf-1.3.10.tar.gz", "has_sig": false, "md5_digest": "6e413f536a4b10ec866c65814058b0c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 154474, "upload_time": "2018-03-11T12:06:26", "url": "https://files.pythonhosted.org/packages/4b/2d/c1c2a0c2f6b72d38eabfe4281048534d0451acc9511bacc66274c53ae755/pyprf-1.3.10.tar.gz" } ], "1.3.11": [ { "comment_text": "", "digests": { "md5": "c212354fe2aac9859403a352d76d87ec", "sha256": "4a9d8e21d4dcf17dca02f3e197c5d386a72fba3f9e912e17032f6dcb450250b0" }, "downloads": -1, "filename": "pyprf-1.3.11.tar.gz", "has_sig": false, "md5_digest": "c212354fe2aac9859403a352d76d87ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 154543, "upload_time": "2018-04-18T12:45:57", "url": "https://files.pythonhosted.org/packages/27/ad/347f091563270b2089753ff47affb2e87125046155b5afa52920aebd3416/pyprf-1.3.11.tar.gz" } ], "1.3.12": [ { "comment_text": "", "digests": { "md5": "6de9e2b2c0891bd792f59116bc180bdb", "sha256": "2e16616bf6d57054b5eb07b0014233a17ba764825d18403481219f12d14f6560" }, "downloads": -1, "filename": "pyprf-1.3.12.tar.gz", "has_sig": false, "md5_digest": "6de9e2b2c0891bd792f59116bc180bdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 154003, "upload_time": "2018-09-16T19:23:24", "url": "https://files.pythonhosted.org/packages/a1/b3/6ab690d1efa35ea253c2d3af3a0b97055ee2775e6ecb75a849a95c002720/pyprf-1.3.12.tar.gz" } ], "1.3.13": [ { "comment_text": "", "digests": { "md5": "abe73b1bc1d03ade4088e5173e100efc", "sha256": "7e9acd679022564e4fa70f57c46b9b7ee84e251ecda914234468d9870f9a478b" }, "downloads": -1, "filename": "pyprf-1.3.13.tar.gz", "has_sig": false, "md5_digest": "abe73b1bc1d03ade4088e5173e100efc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 156557, "upload_time": "2018-09-19T19:57:03", "url": "https://files.pythonhosted.org/packages/7a/d7/5f7d5b19f43af55898a4ac947cafa0d3afd6161b4f1a94cf712f28cef555/pyprf-1.3.13.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "893a132653e2044a0cabe951f16e40e5", "sha256": "3f308efbd83ad975da2b397a8c7d68a696e20b887d629386300f98ffac3bbfc6" }, "downloads": -1, "filename": "pyprf-1.3.2.tar.gz", "has_sig": false, "md5_digest": "893a132653e2044a0cabe951f16e40e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34652, "upload_time": "2018-02-20T16:07:06", "url": "https://files.pythonhosted.org/packages/0b/44/069f16188978a73a5996920f17b2c7d7b3642feb7d2c0582bb90cece5aba/pyprf-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "1ab1256b37d3a0b36872b57153f27528", "sha256": "4e1763df7badc1c7b1d482dccf7caf6e8c22699bc958d72e5f9c193e5e100c4a" }, "downloads": -1, "filename": "pyprf-1.3.3.tar.gz", "has_sig": false, "md5_digest": "1ab1256b37d3a0b36872b57153f27528", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34704, "upload_time": "2018-02-20T16:45:39", "url": "https://files.pythonhosted.org/packages/cd/9c/507fa59c9b778f3870de82e7303ce604508cbbe0aa4b6655442fe94adfa1/pyprf-1.3.3.tar.gz" } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "6bb508ce3c26682e355b222bfb151249", "sha256": "7814dc7793e368ce6ba7afbac2ee20d44ec4c037853870a813687f0d694d7bbb" }, "downloads": -1, "filename": "pyprf-1.3.4.tar.gz", "has_sig": false, "md5_digest": "6bb508ce3c26682e355b222bfb151249", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 151487, "upload_time": "2018-02-20T16:52:43", "url": "https://files.pythonhosted.org/packages/eb/1c/23bf13daa12c2e3fabb52ca87de34421703adeb1cc797a2f484e3bd940ad/pyprf-1.3.4.tar.gz" } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "bf3b1e92c0ccce3ba0cf1754db76b861", "sha256": "83f9323f49ed7d83b7591fb481e834df019cc2f67c01797229793ccfeea2f053" }, "downloads": -1, "filename": "pyprf-1.3.5.tar.gz", "has_sig": false, "md5_digest": "bf3b1e92c0ccce3ba0cf1754db76b861", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 150412, "upload_time": "2018-02-20T18:26:08", "url": "https://files.pythonhosted.org/packages/13/94/e702bb412623a1002e5898e53299ecf93d08e20292b44bb4b46bc1a485e9/pyprf-1.3.5.tar.gz" } ], "1.3.6": [ { "comment_text": "", "digests": { "md5": "6223ac70829dc10d3d01f664aa5a36cd", "sha256": "8317141192c23ad4a5960f562ab80d34c3a20485444d9b14316f9eabfe587b0c" }, "downloads": -1, "filename": "pyprf-1.3.6.tar.gz", "has_sig": false, "md5_digest": "6223ac70829dc10d3d01f664aa5a36cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 150415, "upload_time": "2018-02-20T18:52:27", "url": "https://files.pythonhosted.org/packages/78/86/c3990b6dc850a3ba514859e39cfb40a48a6ca5293c5d08bf46a56d1a4586/pyprf-1.3.6.tar.gz" } ], "1.3.9": [ { "comment_text": "", "digests": { "md5": "23ce5dd825172fa6bf1eb9dd4797f9fb", "sha256": "569afd5d04788eddab6a810f4c888cb7551841f99669b1cfee4624e44505153f" }, "downloads": -1, "filename": "pyprf-1.3.9.tar.gz", "has_sig": false, "md5_digest": "23ce5dd825172fa6bf1eb9dd4797f9fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 153655, "upload_time": "2018-03-11T11:18:50", "url": "https://files.pythonhosted.org/packages/f5/f5/0020dc2ffa25a24787c7a896ec1e2f4f7ab16755b91f2e15ee6ca788e6e9/pyprf-1.3.9.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "66f64b0bd0851b06b0277692922e4adf", "sha256": "e15d3f6c3e0c27539dc6a7273dda250d0791cca20060de00fdec61e1e3428b65" }, "downloads": -1, "filename": "pyprf-2.0.0.tar.gz", "has_sig": false, "md5_digest": "66f64b0bd0851b06b0277692922e4adf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 415901, "upload_time": "2018-10-30T22:40:57", "url": "https://files.pythonhosted.org/packages/11/8a/aa79db3698e89867ba7a8be6362197d68b62da9c3a46c318fce8b5ccb60f/pyprf-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "66f64b0bd0851b06b0277692922e4adf", "sha256": "e15d3f6c3e0c27539dc6a7273dda250d0791cca20060de00fdec61e1e3428b65" }, "downloads": -1, "filename": "pyprf-2.0.0.tar.gz", "has_sig": false, "md5_digest": "66f64b0bd0851b06b0277692922e4adf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 415901, "upload_time": "2018-10-30T22:40:57", "url": "https://files.pythonhosted.org/packages/11/8a/aa79db3698e89867ba7a8be6362197d68b62da9c3a46c318fce8b5ccb60f/pyprf-2.0.0.tar.gz" } ] }