Category: RubyPage 1 of 2

GROWTH FPGA/高速ADCボード – 1 – 概要など

昨年アカデミストを通じてクラウドファンディングにも挑戦した「雷雲ガンマ線実験(雷雲中の高電場での粒子加速に迫るための実験 = GROWTH実験)」の、2016-17年の冬シーズンの観測実験にむけて、ガンマ線検出器の小型化と多点観測にむけた量産を進めています。(ちなみに実験の初期の頃の信号処理システムは、大型のデスクトップマシンと「VME」や「NIM」という規格のこれまたデスクトップPCくらいのサイズのADC/アンプボードでした。これらを格納するために人が入って数日暮らせるくらいの大きさのアルミフレーム製の小屋を(榎戸さんが)作って観測場所に持って行きました。信号処理回路やPC、データ記録装置(SDカード)まで含めて10cm角サイズに収まるようになったことは感動的なエレクトロニクス技術の進歩です) 雷雲ガンマ線実験(GROWTH実験) – 京都大学の榎戸さん、原研の土屋さん、東京大学の中澤さん、和田さん、奥田さん、理研の中野さんなどと進めている楽しい基礎科学の観測実験プロジェクト。2015年度の観測結果のまとめは「冬季雷雲のガンマ線測定を狙う多地点観測システムの新規開発」(榎戸、湯浅、和田ほか 2016年5月)を参照してください。 先日、榎戸さんの研究費でシマフジ電機とともに開発したFPGA/高速ADCボードが届いたので、週末や夜の時間をつかってFPGAのコーディングを進めました。2015年度の観測装置のSpartan-6 FPGAボードで動いていたパルス計測用のVHDLコードが、今回のボードのArtix-7 FPGAとAD9231という50Mサンプル/秒のADCチップでも動作するようになりました(8月最終週)。また、9月3-4日の週末を使って、このFPGA/ADCボードに載せてあるSPIのSlow ADC/DACとLED、GPIOピンをRaspberry Piから制御することもできるようになりました。 今後何回かに分けて、このボードの試験の様子をレポートしていきます。このボードを使う実験メンバや、他の実験向けに利用してみたいという人の参考になれば幸いです。 【2016年12月28日追記】 GROWTH関連の成果物(ハードウエア/ソフトウエア)を利用する人が、使い方やコードの改良について質問・議論するためのGoogleグループ「GROWTH Users Group」を作成しました。Googleアカウントでログインすれば誰でも登録申請できるようにしているので、興味のある方は登録してみてください。 GRWOTH FPGA/ADCボード関連の記事一覧 GROWTH FPGA/高速ADCボードの概要 GROWTH FPGA/高速ADCボードの拡張コネクタ GROWTH FPGA/高速ADCボードのFPGA書き込み パルス計測プログラムgrowth_daqのビルドと測定実行 初回はボードの概要と仕様をまとめます。 GROWTH FPGA/ADCボードの概要…

Rubyのgnuplotで時系列データをプロット

RubyのGnuplot gemから、時系列データをプロットするときの例。基本的にgnuplotのコマンドラインでやっているように、 set timefmt ‘%Y-%m-%dT%H:%M:%SZ’ set xdata time set format x “%H:%M” を、plotオブジェクトに対してコールしてあげればよい。Ruby + Gnuplotは、ネット上に全然サンプルが載っていないので、たまに大変なのですが、文字列処理やM2XのWeb APIと組み合わせて、簡単にプロットしたいときにはとても便利なのです。 インストールや基本的な使い方は過去の記事「Rubyからgnuplotを使ってグラフを描画・保存する例」を参照してください。 ソースコード gistにも上げてあります。 Plot time-series data using Ruby Gnuplot – gist 実行結果のサンプル

HongoWikiを移設しました

新しいサーバへ移動しました 東京大学のサーバが不釣になって見られなくなっていたHongoWikiを、自前のサーバに移動して再開しました。新しいアドレスは以下のとおりです。そのうち、Googleの検索ランクも戻ってくると思います。あと、Mediawiki→Jekyllの変更にともない、コメント管理サービスDisqusを使ってコメント欄も付けているので、質問や改善のコメントがある人は気軽に書き込んでください。 HongoWiki – http://ytkyk.info/wiki/ (トップページからページの一覧が見れます) トップページと同じ説明文章を掲載しておきます。ページの追加や内容の更新に興味のある人は、コメント欄から連絡してください。 HongoWikiは2007-2016年に東京大学牧島・中澤研のサーバ上で公開されていた、 高エネルギー宇宙物理学分野の研究に関連した情報をまとめるためのWikiです。 詳細はHongoWikiについてを参照してください。 2016年にサーバトラブルにより閲覧できなくなっていたものを、新しいサーバで公開することにしました。記録的な意味がほとんどで、情報のアップデートはあまりされないと思います。 もし、ギブアンドテイクの精神で、自分でページを作って室の向上に貢献したいというえらい人がいたら、コメント欄で連絡してください。Jekyllのgitレポジトリを編集できるようにして、ページの追加・内容の改修ができるようにします。Markdownで記事が書けて、gitが使えれば大学院生・ポスドク・大学のスタッフ、誰でも歓迎です。 ★暫定的な注意事項★ 画像を含むページはまだ復元できていません。本郷のサーバのバックアップから、画像データをサルベージできた段階で追加します。 よく閲覧されているページへの直接リンク Xspecで自分のモデルを関数として入れる Xspecで自分のモデルをテーブルとして入れる Xspec11ユーザのためのXspec12入門講座 nano【標準で入っていて使い勝手の良いコマンドラインエディタ】 [tmkm-amazon]4883375536[/tmkm-amazon]

RubyFitsでFITSファイルをCSVファイルとしてダンプする例題

RubyFitsでFITSファイルをCSVファイルとしてダンプする例題をgistにアップロードしました。 以下のようにして実行すると、入力したFITSファイル名の後ろにHDU名をくっつけたファイル名で、CSVファイルが生成されます。 実行前には、RubyFitsをインストールしておく必要がありますが、Macの場合はHomebrewで とすればインストールできます。 conver_fits_to_csv.rb – a short example of FITS Table HDU read access using RubyFits

【RubyROOT】ヒストグラムをフィットする例

RubyROOTで1次元ヒストグラムのテキストデータを読みこんで、TH1D(Double型の1次元ヒストグラム)に変換し、一次関数+ガウシアンでフィットしてプロットする例を示します。RubyROOTのインストール方法は「RubyROOTをHomebrewでインストールする」を参照してください。 最終的に、以下のようなプロットが得られます。 コード コードは以下のような構成です。コメントに書いてある通りで、シンプルな構成です。以下のコードをコピーペーストして保存してもよいですが、gistにもアップロードしたので、そちらからダウンロードする方が簡単です。ファイル名はread_and_fit_histogram.rbとしてください。 ヒストグラムのデータはhistogram_sampleからダウンロードしてください。ビンのデータが縦に並んだ超シンプルなデータファイルです。 スクリプトの解説 ヒストグラムオブジェクトの作成 TH1Dという、1ビンがdoubleで表現されたROOTの標準的なヒストグラムクラスをもとに、ヒストグラムオブジェクト(インスタンス)を作成しています。 ROOTのTH1(1次元ヒストグラム)のAPIリファレンスはこちら→The Histogram classes テキストファイルの読み込み 標準的なRubyスクリプトのやり方でテキストファイルを開いて、一行ごとに読み込みんでいます。lineに格納された1行の文字列を、.to_i()メソッドを使って整数に変換し、その結果をヒストグラムに格納しています。 もしも入力データが のようにビンの値とカウントのペアになっているときは、読み込み部分は以下のようにString.split(delimitter)メソッドを用いて1行を空白文字で分割して配列に分けてから取り扱います。delimitterを”,”に変更すればCSVのファイルも読み込めます。 この場合、ヒストグラムオブジェクトの作成のところでも、入力データの範囲に対応させて のようにして、ビンの分割数、xmin、xmaxを適切に調整する必要があります。 ヒストグラムへのfill データを詰めるべきビン番号を検索して、line.to_i()で整数に変換したビンの値を設定しています。 プロット TCanvasのインスタンスを作ってから、TH1のDraw()メソッドに、”e”で表される統計エラーオプションをつけて描画しています。簡単ですね。 フィット関数 でフィットに使う関数を定義しています。 TFormulaのAPIリファレンスにあるようにgausは gaus(0) is a substitute…

【Rubyで単位付き計算】X線fluxをluminosityに変換する例

Soki Sakuraiさんのruby-dimensionalを使うと、Rubyで単位付きの計算がとても綺麗にできます。 たとえば、X線天文でよく出てくる「地球で観測したfluxから等方的な放射を仮定したときのluminosity(光度)を求める」計算は以下のようにできます。(以下の例は、激変星GK Perのdwarf nova outburst時のある観測の0.5-10 keVのluminosityを計算したときの例) これを実行すると、以下のようになります。 ruby-dimensionalのインストール ruby-dimensionalのインストールについては、github上のマニュアルを参照してください。 Homebrewでパッケージ管理している場合は、コマンド2個で簡単にインストールできます。 メッセージにあるように、.bashrcや.bash_profileもしくは.zshrcに以下の行を追加しておいてください。 使い方 ライブラリの読み込み 物理計算を行うときはrequireメソッドで、以下の3個のモジュールを読み込みます。 ruby-dimensional ruby-dimensional-standard ruby-dimensional-physics Physicsという名前空間で定義されている変数をフラットな名前空間から使う場合は、 としておきましょう(上のサンプルではPhysics内の定義は参照していないので必須ではないです)。 使い方 基本的に数値は普通の数値として表記し、単位は:cmや:km、:erg、:J等、単位名の前に”:”をつけた形式で表記します。掛け算、割り算、べき上等は普通の感覚で記述できます。 上の例では としてflux(単位時間当たりに単位面積を通過するX線光子のエネルギーの和)を定義しています。:pcは「パーセク」という、天文学で使われる距離の単位です。 変数に格納した単位付き数値は、以下の様に別の式で使用することもできます。 単位付き数値を、特定の単位に換算したい場合、in(単位)というメソッドを使います。指定した単位の次元が、その単位付き数値の単位の次元と等しい場合、指定した単位で表記した時の数値が戻されます。 定義されている単位一覧 irbから読み込んで、UV.showAllUnits()を実行するとその時点で定義されている単位を確認できます。

【Mechanize/Ruby】Amazonへのログイン

Amazonのウェブサービスの操作を自動化しています。RubyでMechanizeを使ってAmazonにログインしようとしたのですが、「Cookieを有効にしてください」の表示がでてしまってうまく行きませんでした。 調べたところ、Stackoverflowのページに投稿があり、以下のようにagent.follow_meta_refresh = trueとagent.redirect_ok = trueとagent.user_agent_alias = ‘Mac Safari’を設定したらうまく行きました。 以下の例の中で、MAIL_ADDRESSとPASSWORDのところは適当に変更してください。

【Ruby】コマンドラインからMediaWikiにファイルをアップロード

参加しているプロジェクトのwikiでMediaWikiを利用しています。会議のプレゼンテーションをまとめたりするときに頻繁にファイルをアップロードする必要があるのですが、毎回ブラウザ経由で手動でアップロードするのが面倒になってきました。 最近はRubyからSeleniumを使って色々なwebサービスの操作を自動化するのがマイブームになってきましたが、ブラウザのウインドウを開かずにコマンドラインだけで動作が完結するという点でMechanizeも便利です。なので、Mechanizeを使ってMediaWikiにファイルをアップロードするスクリプトを作成してgistに公開しました。 → upload_file_to_mediawiki – gist このページの下の方にもソースコードを掲載しておきます。 Mechanizeについて勉強・入門したいときの参考情報 Mechanize – オフィシャルのウェブページ Mechanize について –  君の瞳はまるでルビー このスクリプトの使い方 MediaWikiへのログインの省略について なお、今回作成した対象のwikiでは、LocalSettings.phpで以下の設定をすることで、ユーザごとのログインなしでファイルがアップロードできるようになっています。そのため、このスクリプトの中でもMediaWikiそのものにログインする処理は省略しています。 $wgEnableUploads = true; $wgGroupPermissions[‘*’][‘edit’] = true; $wgGroupPermissions[‘*’][‘upload’] = true; $wgGroupPermissions[‘*’][‘reupload’] = true;…

【Selenium】Rubyでウェブページのスクリーンショット

最近Seleniumにハマっています。以下のようにするとスクリーンショットも撮影できてしまいます。 save_screenshotメソッドで保存したスクリーンショットには、以下のようにブラウザのインタフェースは除外され、ウェブサイトの領域のみ記録されます。自分でブラウザインタフェースをトリミングする必要がないので楽です。 それで、いろいろな人にSeleniumをもっと簡単に使ってもらえるよう、Zirconiumというラッパーを作成しています。SeleniumのAPIを簡単化したRuby DSLを提供するとともに、あるユーザーが作成した自動化スクリプトを、githubやhttp経由でimportする機能も備えています。もう少し試験したら、入門の記事を投稿する予定です。お楽しみに。(20150207時点でも、githubのプロジェクトページにはそれなりにReadme.mdがあるので、Rubyが使える人なら自分でインストールして動作を試すことは出来ると思います) Zirconium – github.com/yuasatakayuki – ブラウザ操作の自動化用Ruby DSL環境

Ruby Fog::AWS::SimpleDBのサンプル

いまさらですがRubyのクラウドAPIであるFog経由でAmazonのSimpleDBを利用する練習として作ったスクリプトをgistにアップロードしておきました。ぼくは自分の写真のデータをバックアップしているAmazon Glacierとの連携や簡単なウェブサービスでの利用を想定していますが、他の誰かの何かの参考になれば。 → Ruby Fog::AWS::SimpleDB Example – gist fogはgemで簡単にインストールできます。 20150107時点のコードを以下にも再掲しておきます。(gist上では更新されているかもしれません) YOUR_ACCESS_KEY_IDとYOUR_SECRET_ACCESS_KEYは、実際に使用するアカウントのものに変更してください。利用したいregionがTokyoでない場合は:regionも変更してください。AmazonのRegions and Endpointsのページで各regionの名称が整理されているので必要な場合は参照してください。 Region Name Region US East (N. Virginia) us-east-1 US West (Oregon) us-west-2 US West (N. California)…