Skip to content

Utility functions for working with X-ray diffraction data

Notifications You must be signed in to change notification settings

JuliaSpect/XRD.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XRD.jl\n",
    "\n",
    "Convenience functions for working with X-ray diffraction data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module Reexport.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module StaticArrays.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module RecipesBase.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module PlotUtils.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module PlotThemes.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module Showoff.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module StatsBase.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module NaNMath.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module Measures.\n",
      "\u001b[39m\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mPrecompiling module Requires.\n",
      "\u001b[39m"
     ]
    }
   ],
   "source": [
    "using Plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\u001b[1m\u001b[36mINFO: \u001b[39m\u001b[22m\u001b[36mRecompiling stale cache file /home/juser/.julia/lib/v0.6/Cubature.ji for module Cubature.\n",
      "\u001b[39m"
     ]
    },
    {
     "data": {
      "text/plain": [
       "XRD"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "include(\"xrd.jl\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Structural statistics\n",
    "\n",
    "Often one needs to report average bond lengths \n",
    "\n",
    "Take, for example, the following compound [10.1021/acs.orglett.6b00577](http://pubs.acs.org/doi/suppl/10.1021/acs.orglett.6b00577)\n",
    "![SCXRD data](mm257.gif)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "r\"^\\s([a-z][a-z]?\\d+)\\s+([a-z][a-z]?\\d+)\\s+(\\d+\\.\\d+)\\((\\d+)\\).*\"im"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "length_regex = r\"^\\s([a-z][a-z]?\\d+)\\s+([a-z][a-z]?\\d+)\\s+(\\d+\\.\\d+)\\((\\d+)\\).*\"mi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING: ColorTypes.U16 is deprecated, use FixedPointNumbers.Normed{UInt16, 16} instead.\n",
      "  likely near In[7]:1\n",
      "WARNING: ColorTypes.U8 is deprecated, use FixedPointNumbers.Normed{UInt8, 8} instead.\n",
      "  likely near In[7]:1\n",
      "WARNING: ColorTypes.U16 is deprecated, use FixedPointNumbers.Normed{UInt16, 16} instead.\n",
      "  likely near In[7]:1\n",
      "WARNING: ColorTypes.U8 is deprecated, use FixedPointNumbers.Normed{UInt8, 8} instead.\n",
      "  likely near In[7]:1\n",
      "WARNING: ColorTypes.U16 is deprecated, use FixedPointNumbers.Normed{UInt16, 16} instead.\n",
      "  likely near In[7]:1\n",
      "WARNING: ColorTypes.U8 is deprecated, use FixedPointNumbers.Normed{UInt8, 8} instead.\n",
      "  likely near In[7]:1\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "25-element Array{Method,1}:<ul><li> ==(a::<b>Regex</b>, b::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L370\" target=\"_blank\">regex.jl:370</a><li> apropos(io::<b>IO</b>, needle::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/docs/utils.jl#L447\" target=\"_blank\">docs/utils.jl:447</a><li> eachmatch(re::<b>Regex</b>, str::<b>AbstractString</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L365\" target=\"_blank\">regex.jl:365</a><li> eachmatch(re::<b>Regex</b>, str::<b>AbstractString</b>, ovr::<b>Bool</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L362\" target=\"_blank\">regex.jl:362</a><li> hash(r::<b>Regex</b>, h::<b>UInt64</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L376\" target=\"_blank\">regex.jl:376</a><li> ismatch(r::<b>Regex</b>, s::<b>SubString</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L151\" target=\"_blank\">regex.jl:151</a><li> ismatch(r::<b>Regex</b>, s::<b>SubString</b>, offset::<b>Integer</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L151\" target=\"_blank\">regex.jl:151</a><li> ismatch(r::<b>Regex</b>, s::<b>AbstractString</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L145\" target=\"_blank\">regex.jl:145</a><li> ismatch(r::<b>Regex</b>, s::<b>AbstractString</b>, offset::<b>Integer</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L145\" target=\"_blank\">regex.jl:145</a><li> match(re::<b>Regex</b>, str::<b>Union{String, SubString{String}}</b>, idx::<b>Integer</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L159\" target=\"_blank\">regex.jl:159</a><li> match(re::<b>Regex</b>, str::<b>Union{String, SubString{String}}</b>, idx::<b>Integer</b>, add_opts::<b>UInt32</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L159\" target=\"_blank\">regex.jl:159</a><li> match(r::<b>Regex</b>, s::<b>AbstractString</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L173\" target=\"_blank\">regex.jl:173</a><li> match(r::<b>Regex</b>, s::<b>AbstractString</b>, i::<b>Integer</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L174\" target=\"_blank\">regex.jl:174</a><li> matchall(re::<b>Regex</b>, str::<b>String</b>, overlap::<b>Bool</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L179\" target=\"_blank\">regex.jl:179</a><li> matchall(re::<b>Regex</b>, str::<b>String</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L179\" target=\"_blank\">regex.jl:179</a><li> matchall(re::<b>Regex</b>, str::<b>SubString</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L212\" target=\"_blank\">regex.jl:212</a><li> matchall(re::<b>Regex</b>, str::<b>SubString</b>, overlap::<b>Bool</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L212\" target=\"_blank\">regex.jl:212</a><li> search(str::<b>Union{String, SubString}</b>, re::<b>Regex</b>, idx::<b>Integer</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L216\" target=\"_blank\">regex.jl:216</a><li> search(s::<b>AbstractString</b>, r::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L227\" target=\"_blank\">regex.jl:227</a><li> search(s::<b>AbstractString</b>, r::<b>Regex</b>, idx::<b>Integer</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L224\" target=\"_blank\">regex.jl:224</a><li> serialize(s::<b>AbstractSerializer</b>, r::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/serialize.jl#L302\" target=\"_blank\">serialize.jl:302</a><li> show(io::<b>IO</b>, re::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/regex.jl#L86\" target=\"_blank\">regex.jl:86</a><li> whos(pat::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/interactiveutil.jl#L729\" target=\"_blank\">interactiveutil.jl:729</a><li> whos(m::<b>Module</b>, pat::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/interactiveutil.jl#L728\" target=\"_blank\">interactiveutil.jl:728</a><li> whos(io::<b>IO</b>, m::<b>Module</b>, pattern::<b>Regex</b>) at <a href=\"https://github.com/JuliaLang/julia/tree/903644385b91ed8d95e5e3a5716c089dd1f1b08a/base/interactiveutil.jl#L686\" target=\"_blank\">interactiveutil.jl:686</a></ul>"
      ],
      "text/plain": [
       "25-element Array{Method,1}:\n",
       " ==(a::Regex, b::Regex) in Base at regex.jl:370                                                                 \n",
       " apropos(io::IO, needle::Regex) in Base.Docs at docs/utils.jl:447                                               \n",
       " eachmatch(re::Regex, str::AbstractString) in Base at regex.jl:365                                              \n",
       " eachmatch(re::Regex, str::AbstractString, ovr::Bool) in Base at regex.jl:362                                   \n",
       " hash(r::Regex, h::UInt64) in Base at regex.jl:376                                                              \n",
       " ismatch(r::Regex, s::SubString) in Base at regex.jl:151                                                        \n",
       " ismatch(r::Regex, s::SubString, offset::Integer) in Base at regex.jl:151                                       \n",
       " ismatch(r::Regex, s::AbstractString) in Base at regex.jl:145                                                   \n",
       " ismatch(r::Regex, s::AbstractString, offset::Integer) in Base at regex.jl:145                                  \n",
       " match(re::Regex, str::Union{String, SubString{String}}, idx::Integer) in Base at regex.jl:159                  \n",
       " match(re::Regex, str::Union{String, SubString{String}}, idx::Integer, add_opts::UInt32) in Base at regex.jl:159\n",
       " match(r::Regex, s::AbstractString) in Base at regex.jl:173                                                     \n",
       " match(r::Regex, s::AbstractString, i::Integer) in Base at regex.jl:174                                         \n",
       " matchall(re::Regex, str::String, overlap::Bool) in Base at regex.jl:179                                        \n",
       " matchall(re::Regex, str::String) in Base at regex.jl:179                                                       \n",
       " matchall(re::Regex, str::SubString) in Base at regex.jl:212                                                    \n",
       " matchall(re::Regex, str::SubString, overlap::Bool) in Base at regex.jl:212                                     \n",
       " search(str::Union{String, SubString}, re::Regex, idx::Integer) in Base at regex.jl:216                         \n",
       " search(s::AbstractString, r::Regex) in Base at regex.jl:227                                                    \n",
       " search(s::AbstractString, r::Regex, idx::Integer) in Base at regex.jl:224                                      \n",
       " serialize(s::AbstractSerializer, r::Regex) in Base.Serializer at serialize.jl:302                              \n",
       " show(io::IO, re::Regex) in Base at regex.jl:86                                                                 \n",
       " whos(pat::Regex) in Base at interactiveutil.jl:729                                                             \n",
       " whos(m::Module, pat::Regex) in Base at interactiveutil.jl:728                                                  \n",
       " whos(io::IO, m::Module, pattern::Regex) in Base at interactiveutil.jl:686                                      "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "methodswith(typeof(length_regex))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "data = readstring(\"mm257.cif\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Dict{Set{SubString{String}},Tuple{Float64,Int64}} with 21 entries:\n",
       "  Set(SubString{String}[\"C13\", \"N3\"]) => (1.327, 3)\n",
       "  Set(SubString{String}[\"C1\", \"C2\"])  => (1.456, 3)\n",
       "  Set(SubString{String}[\"O3\", \"C5\"])  => (1.247, 3)\n",
       "  Set(SubString{String}[\"N1\", \"C9\"])  => (1.468, 4)\n",
       "  Set(SubString{String}[\"C8\", \"N1\"])  => (1.455, 4)\n",
       "  Set(SubString{String}[\"C10\", \"N2\"]) => (1.315, 3)\n",
       "  Set(SubString{String}[\"O1\", \"C1\"])  => (1.262, 3)\n",
       "  Set(SubString{String}[\"C11\", \"N2\"]) => (1.463, 3)\n",
       "  Set(SubString{String}[\"C2\", \"C3\"])  => (1.474, 3)\n",
       "  Set(SubString{String}[\"C3\", \"O2\"])  => (1.25, 3)\n",
       "  Set(SubString{String}[\"C12\", \"N2\"]) => (1.463, 3)\n",
       "  Set(SubString{String}[\"C14\", \"N3\"]) => (1.459, 3)\n",
       "  Set(SubString{String}[\"C3\", \"C4\"])  => (1.455, 3)\n",
       "  Set(SubString{String}[\"C2\", \"C7\"])  => (1.397, 4)\n",
       "  Set(SubString{String}[\"C1\", \"C6\"])  => (1.46, 4)\n",
       "  Set(SubString{String}[\"C4\", \"C5\"])  => (1.459, 3)\n",
       "  Set(SubString{String}[\"C10\", \"C4\"]) => (1.403, 3)\n",
       "  Set(SubString{String}[\"C6\", \"C5\"])  => (1.468, 3)\n",
       "  Set(SubString{String}[\"N1\", \"C7\"])  => (1.318, 3)\n",
       "  Set(SubString{String}[\"C6\", \"C13\"]) => (1.394, 3)\n",
       "  Set(SubString{String}[\"C15\", \"N3\"]) => (1.47, 3)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Dict(Set([m.captures[1],m.captures[2]]) => (float(m.captures[3]),parse(Int,m.captures[4])) for m in eachmatch(length_regex, data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RegexMatch(\" O1 C1 1.262(3) . ?\\r\", 1=\"O1\", 2=\"C1\", 3=\"1.262(3)\")"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x=match(length_regex,data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SubString{String}"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "typeof(x.captures[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 0.6.0",
   "language": "julia",
   "name": "julia-0.6"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "0.6.0"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

About

Utility functions for working with X-ray diffraction data

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published