{"id":35276321,"url":"https://github.com/dfujim/bccd","last_synced_at":"2026-05-17T12:36:32.235Z","repository":{"id":57414314,"uuid":"210733288","full_name":"dfujim/bccd","owner":"dfujim","description":"Draw and process BNMR CCD image files","archived":false,"fork":false,"pushed_at":"2024-11-07T18:40:40.000Z","size":217,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-18T09:44:44.119Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/dfujim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-25T01:53:51.000Z","updated_at":"2024-11-07T18:40:44.000Z","dependencies_parsed_at":"2022-08-26T20:44:29.236Z","dependency_job_id":null,"html_url":"https://github.com/dfujim/bccd","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/dfujim/bccd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbccd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbccd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbccd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbccd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfujim","download_url":"https://codeload.github.com/dfujim/bccd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbccd/sbom","scorecard":{"id":339268,"data":{"date":"2025-08-11","repo":{"name":"github.com/dfujim/bccd","commit":"ae2497179062e141e3d1984a38b44fd820e388d0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 1/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T05:24:38.053Z","repository_id":57414314,"created_at":"2025-08-18T05:24:38.053Z","updated_at":"2025-08-18T05:24:38.053Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33138699,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2025-12-30T13:58:48.781Z","updated_at":"2026-05-17T12:36:32.223Z","avatar_url":"https://github.com/dfujim.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Draw and process B-NMR CCD image files\n\n## Installation and Running the GUI\n\n* Install with `pip3 install --user bccd` from [pypi](https://pypi.org/project/bccd/). \n* Run with `bccd`.\n\nNote that `bccd` uses `rsync` to copy all files from the machines which operate the cameras. These machines are password protected and the passwords must be entered on every use, unless you give your public key to these devices. To do that, do:\n\n* Create a public key if you don't have one already: `ssh-keygen -t rsa`. On prompt enter no password. \n* Copy the key to the server using the proper username and password: `ssh-copy-id user@machine.domain`\n\nOn first usage, `bccd` will need to transfer all the files from these machines. This may take some time, please be patient. On subsequent usages, `bccd` will only update its list of files so the process will be much faster. These files are stored in `$HOME/.bccd`.\n\n## `bccd.fits` Reference\n\nConstructor: \n\n```python\nfits(filename,rescale_pixels=True)\n```\n\nFunctions: \n    \n```python\n\n# look for shapes in image\ndetect_lines(sigma=1,min_length=50,min_gap=3,theta=None,nlines=np.inf,draw=True)\ndetect_hlines(sigma=1,min_length=50,min_gap=3,nlines=np.inf,draw=True,**kwargs)\ndetect_circles(rad_range,nlines=1,sigma=1,draw=True)\n\n# drawing and visualization\ndraw(black=0,alpha=1,cmap='Greys',imap=True)\ndraw_2Dfit(fn,*pars,levels=10,cmap='jet')\ndraw_contour(nlevels=5,alpha=1,cmap='Greys',imap=True)\ndraw_edges(sigma=1,alpha=1,cmap='Greys',imap=True) \ndraw_sobel(alpha=1,cmap='Greys',imap=False)\n\n# fitting\nfit2D(function,**fitargs)\nfit_gaussian2D(draw=True, get_p0_from_center=False, **fitargs)\n\n# processing\nget_center(draw=True)\nget_cm(draw=True)\nget_gaussian2D_overlap(ylo,yhi,xlo,xhi)\n\n# worker functions\nread(filename,rescale_pixels=True)\nset_black(black)\nset_mask(mask)\n```\n\nData fields:\n\n```\nblack:          float, pixel value corresponding to black (zero)\ndata:           2D numpy array, pixel values\ndata_original:  numpy array, pixel values\nheader:         dict, header information\n\nmask:           (x,y,r) specifying circle to mask on\n\nresult_center:      (par,names) fitting results\nresult_cm:          (par,names) center of mass results\nresult_fit2D:       (par,cov) fitting results\nresult_gaussian2D:  (par,cov,names) fitting results\nresult_gaussian2D_overlap: float, overlap\n```\n\nSome useful colourmap names:\n\n```\n    Greys\n    Purples\n    Yellows\n    Blues\n    Oranges\n    Reds\n    Greens\n```\n\nParameter descriptions\n\n```\nalpha:          float, image transparency. Range: [0,1].\nblack:          float, value to set to black, all pixels of lower value raised to this level. Use to\n                clean up noise. \n\ncmap:           str, color map to color the image. Ex: \"Reds\", \"Greens\", etc.\ndraw:           bool, if true, draw output\nfilename:       str, path to .fits file\nfitargs:        **dict, arguments passed to curve_fit\nfn:             function handle, function to draw\nimap:           bool, if True, invert color map colours\nlevels:         int, number of contour levels to draw\nkwargs:         **dict, unused\nmask:           tuple, exclude all pixels outside of circle from draw or calculation. (x0,y0,r)\nmin_length:     float, minimum length of lines to find, in pixels\nmin_gap:        float, maximum acceptable distance between line pixels which do not signify breaking\n                the line\nnlines:         int, number of shapes to find\npars:           *tuple, parameters passed to fn. \nrad_range:      tuple, radius range to seach in (r_lo, r_hi)\nrescale_pixels: bool, pixels are intrinsically asymmetric. Rescale image such that the pixels are \n                square, interpolating pixel values with 3rd order spline. \nshape:          tuple, shape of the image (number of pixels x,y)\nsigma:          float, standard deviation of rolling Gaussian filter, smoothing image features.\ntheta:          float, list of acceptable angles for the lines to point\n\nxlo:              function handle, lower integration bound [inner]\nxlhi:             function handle, upper integration bound [inner]\nylo:              float, lower integration bound [outer]\nyhi:              float, upper integration bound [outer]\n```\n\n\n\n## `bccd.functions`\n\n```python\ngaussian2D(x,y,x0,y0,sigmax,sigmay,amp,theta=0)\n```\n\nParameter descriptions\n\n```\namp:              float, unused in favour of normalized amplitude (present for ease of use)\nsx,sy:            float, standard deviation\ntheta:            float, angle of rotation                  \nx0,y0:            float, gaussian mean location\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfujim%2Fbccd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfujim%2Fbccd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfujim%2Fbccd/lists"}