修士論文や夏の学校の集録や学振申請書を書く皆さんへ (書き方、注意点、心得)

適宜更新します。

目次

  • 0 はじめに
  • 1 図に関すること
  • 2 日本語全般
  • 3 引用
  • 4 概要 (abstract)
  • 5 添削や指導の依頼の仕方

0 はじめに

0.1 この記事の目的



2012 年度末に修士論文の添削を初めて真面目に担当し、論文全体についての助言をする以前の段階で、注意すべき点、して欲しい点が多々あることが分かりました。修士論文に限らず、これは学振の申請書、夏の学校の集録原稿、物理学会の講演概要など、修士学生が他の場面で日本語を書く場面でも同じことが言えます。毎回、毎年、同じことを注意するのは面倒ですし、「修士論文 書き方」などで検索して辿りつく人もいるでしょうから、注意すべき点をまとめて記事にします。

0.2 対象読者

僕のまわりにいる学生と日本中の修士課程の学生。LaTeX を使って修士論文を書く高エネルギー宇宙物理関係の学生を想定していますが、他分野の人、Word を使う人などでも参考になることはたくさんあると思います。

0.3 元ネタ

僕の大学院指導教員である牧島一夫先生がまとめられた「M2 の皆さんへ」という修士論文の書き方の指南書と、「科学英文のチェックマニュアル」に大きな影響を受けて同じようなものを書くことにしました。ただし、この記事は日本語文書限定です。

上記 2 つの文書は理系大学院生必読です。修論などを書き始めるに目を通すことをお勧めします。

ついでに LaTeX修論テンプレートも GitHub で公開しているので、参考にしてください。
修士論文 LaTeX テンプレート|名古屋大学宇宙地球環境研究所の理学系修士学生用

1 図表に関すること

1.1 caption について (LaTeX 限定)

LaTeX で図目次を生成させる場合は、目次に長い説明を入れないこと。例えば次のようにすると、図目次には「The 3rd EGRET catalog (Hartman et al. 1999, with modification)」ではなく、短い説明「The 3rd EGRET catalog」のみが表示される。

\begin{figure}
 \centering
 \includegraphics[width=14cm,clip]{fig/EGRET.pdf}
 \caption[The 3rd EGRET catalog]{The 3rd EGRET catalog \citep[with modification]{Hartman1999}}
 \label{EGRET}
\end{figure}

そもそも図目次や表目次を利用する読者というのは多くないので、書いている本人が特に必要と感じないのであれば、ページ稼ぎの技として使用するのは控えましょう。

1.2 図の位置 (LaTeX 限定)

LaTeX の figure 環境で、図の位置を h で指定しないで下さい。h の指定をしないでも、LaTeX がちょうどよい場所に図を自動配置してくれます。論文の図は原則としてページの上部に置くのが慣習になっています。

\begin{figure}[h] %この [h] は取る。LaTeX の参考書で h を指定する例が載っていても絶対に取る。
 \centering
 \includegraphics{fig/EGRET.pdf}
 \caption{caption}
\end{figure}
1.3 画像形式について (LaTeX 限定)

線画では可能な限り vector 画像 (PDF や EPS) を使い、bitmap 画像の場合は PNG、GIF、JPEG を使い分けて下さい。例えば回路図のように線と文字しかないものは PDF を、オシロ画像には PNG を、回路の写真には JPEG を使います。JPEG を使うのは原則として写真のみと思って下さい。逆に、写真を PNG などで保存することも滅多にしません。

最近は PDF や PNG をそのまま LaTeX に貼り込めるので、古い LaTeX の本などに書いてあるように、必ずしも EPS にする必要はありません。やり方は、以下の通りです。

まず、fig/hoge.jpg などを用意した状態で次のコマンドのどちらかうまく動くほうを terminal から実行します。そうすると、fig/hoge.bb もしくは fig/hoge.xbb というファイルが生成されます。

ebb fig/hoge.jpg
extractbb fig/hoge.jpg

次に、LaTeX ソースの先頭のほうに次の行を追加します。

\usepackage[dvipdfmx]{graphicx}

そして、普通に figure 環境で JPEG 画像を指定すれば表示されます。

\begin{figure}
  \centering
  \includegraphics[width=5cm]{fig/hoge.jpg}
  \caption[]{素晴らしい実験装置}
  \label{fig_hoge}
\end{figure}
1.4 図の説明について

図の説明 (caption) は簡潔である必要はありません。むしろ、図示されただけでは読者が分らない情報をそこでちゃんと説明して下さい。何か回路の写真を載せるとして、「図 1.1. 測定回路の写真」とだけ書くのではなく、「図 1.1. 測定回路の写真。左上にあるのが〜〜で、〜〜と接続されている。」のように、読み取って欲しい情報をちゃんと書いて下さい。その図の読み方を読者に丸投げするのは失礼です。

また、本文でゴチャゴチャと図の説明をするよりも、図の caption で説明をしたほうが良い場合が多々あります。例えば本文中で「黒実線は ADC 値の分布」と書くよりも、caption に書いたほうが効果的ですし、読者の目の移動量が圧倒的に減ります。

1.5 図の言及の仕方

本文で全く言及しない図と言うのはありえません。掲載する場合は、本文中で「図 1.1 で示すように」や「〜〜の結果を図 1.1 に示す」や「図 1.1 から明らかなように」などと必ず言及して下さい。これをしないとその図は存在する意味がありません。またその図を見ながら本文を読む必要がある場合には、どの図を見るべきかを指示してもらえないと読者はその図を眺めながら本文を読めません。

また、「宇宙線のスペクトルは冪乗で表される (図 1.1)」などと書くのではなく、「図 1.1 に示す通り宇宙線のスペクトルは冪乗で表される」のような書き方をするように、特にその図の初出時には注意して下さい。

1.6 caption の場所

図の caption はその図の下に入れて下さい。逆に、表の場合は表の上に入れます。この理由はしりませんが、そういう慣習です。

1.7 大きさ

印刷して文字が読めるように配慮して下さい。小さい文字や図の細部が読めないのは駄目です。修論のページ数は決まっていないので、のびのびと紙面を使って下さい。文書の形式が 2 columns の場合、1 column に収めようとせず、大きい図は 2 columns にまたがって表示して下さい。

1.8 他人の作った図の使用

原則として、あなたが発表する論文や集録ではあなたが作った図を使います。共同研究の場合に、どうしても他の人が作った図を掲載する必要がある場合は、先行論文などの出典を明記するか、図の提供者 (その本人が著作権を有している場合に限る) をきちんと載せるかします。そうでない場合、「この図は私が作りました」と嘘をつくことになります。またその図の著作権が既に出版社などに譲渡されている場合、適切な引用を行わないのは著作権の侵害になります。

また、論文を出版する際などに出版社に著作権が譲渡される場合、適切な引用をしないと、複数の出版社でその図に関する権利がぶつかり合ってしまうということも注意してください。

1.9 縦横比を変更しない

写真や図を使用するときに、規定フォーマットやページ数制限に収めるために、縦横比を元画像から変更する人がいますが、これはやめましょう。写真の場合は被写体が実際より歪んで見えますし、グラフなどの場合は文字が細くなったり太くなったりして可読性が下がります。

1.10 軸のラベル

こんなことは中学校レベルだと思うのですが、グラフの縦軸、横軸の説明のない図を平気で出してくる学生がいます。その物理量は何か、単位は何かを必ず図中に書いてください。

1.11 スクリーンショットを使って他人の図を引用しない

修士論文で散見されるのですが、他人の論文から図を引用するときに、論文 PDF を開いた状態でスクリーンショットを撮り、それを修士論文に貼り付ける人がいます。多くの図はベクター形式で作られているため、このようにスクリーンショットにしてしまうとビットマップ画像に変換されてしまいます。また印刷の質に耐えない解像度になり、文字や図が潰れてしまいます。

宇宙・素粒子関係であれば多くの論文が arxiv に乗っていますので、Download > Other formats > Source と進んで画像ファイル一式を落としてきましょう。落としたファイルは tar.gz で圧縮されていますが、拡張子がつかない場合は手動で .tgz などの拡張子をファイル名に追加してください。また論文 PDF から該当箇所をコピーもしくはクロップするという方法もあります。

1.12 無駄にたくさんの罫線を表に使わない

表を作るときに Excel 方眼紙のように、あらゆる場所に罫線を使う人がいますが、ほとんどの縦線も横線もなくて大丈夫です。

↓こういう表ではなくて、

------------------
| Fruit  | Price |
------------------
| Apple  |   150 |
------------------
| Orange |   150 |
------------------

↓こういう表にしましょう。

----------------
 Fruit  | Price
----------------
 Apple  |   150
 Orange |   150
----------------

2 日本語全般

2.1 略語

PMT や ADC などの略語は、必ず初出の場所で「光電子増倍管 (Photomultiplier Tube、PMT)」などと定義して下さい。「Cherenkov Telescope Array」のような語の場合は日本語訳がありませんが、PMT のように日本語で書けるものはちゃんと日本語を書きます。

英単語の場合は「CTA (Cherenkov Telescope Array)」ではなく「Cherenkov Telescope Array (CTA)」と書きます。これは前者の書き方をすると、英文添削では必ず間違いを指摘されます。あくまで省略しない形が正式名称であり、丸括弧で囲んだ略語は「以下〜〜と略す」という意味だからです。

また、なんでもかんでも略語を使って論文中で使いまくる人がいますが、分野違いの人が読む可能性のある文章では略語の多用は避けるべきです。普通の人はどこでその略語が定義されたか、元の意味がなんだったかを全て覚えていられません。略語の多すぎる文章は相手の負担を増やし、また理解の妨げになると思ってください。特に申請書などの場合は分野外の人が審査員に回ることが多々ありますので、注意が必要です。

2.2 回りくどい表現を避ける

「温度測定を行った」などではなく、「温度を測定した」などの簡潔な表現のほうが読みやすく、また伝えたいことが伝わりやすくなります。

2.3 定性的な表現を避ける

「フィッティングの結果が悪くなった」などの定性的な表現ではなく、「フィッティングをしたところ、chi2/ndf が〜〜から〜〜へと悪化した」のように定量的に書いて下さい。これは著者の主観的な判断を示すのではなく、読者が客観的に数字を評価できるようにするため必須です。また、数値で比べてみると案外悪化していなかったりすることもあるので、自分のやっている作業の定量的な確認にも役立ちます。

2.4 単位

「20 GeV」を「20GeV」などと繋げて書いたり、LaTeX 中で「$20GeV$」と書いて「GeV」が斜体にならないようにすること。数式中で普通の文字を使いたい場合は、「$20\,\mathrm{GeV}$」や「$k_\mathrm{B}$」とします。例外として、「°」と「%」は直前の数字との間にスペースを空けません (このルールは国、時代、分野によって異なる可能性あり、最近はスペースを入れるのが主流かも)。「25°」や「95%」は、「$25^\circ$」や「$95$\%」と LaTeX で入力します。

また数値と単位の間に改行が含まれてしまうと読みにくくなる場合があるため、LaTeX の場合は「20~GeV」と書くことで「20」と「GeV」の間に改行が入るのを防ぐことができます。本文を修正するたびに改行に遭遇するかどうかは変わるため、常に「~」使って入力する癖をつけましょう。

Word や Pages を使って文書を作る場合、LaTeX の「~」は使えません。その代わり Mac であれば option + space で改行されないスペースが入力できます。Windows だと control + shift + space です。

2.5 斜体

一部の論文誌では、人工衛星や望遠鏡の名前に斜体を用います。この理由が何なのかはよく知らないのですが、船の名前や飛行機の名前 (例えば TitanicEnola Gay) には斜体を使うという慣習があり、それが人工衛星にも引き継がれたのだと思われます。また、人物名の Fermi とフェルミガンマ線宇宙望遠鏡の Fermi を区別することも可能になります。

Fermi や Chandra という文字を斜体にするときに LaTeX では「\textit{Fermi}」のようにします。たまに「$Fermi$」として数式中で変数が斜体になる LaTeX の仕組みを利用する人がいますが、数式と文中の斜体は異なります (実際に入力して、文字間隔を確認してみてください)。

また、変数名の添え字が変数でない場合は、その添え字に斜体は使わないでください。例えば $x_i$ などの i には斜体ですが、$E_threshold$ は $E_\mathrm{threshold}$ と書いて、E のみが斜体になるようにします。

2.6 丸括弧の使い方

丸括弧は極力使わないこと。「高エネルギー天体(ブラックホール中性子星など)」ではなく、「ブラックホール中性子星などの高エネルギー天体」と書きます。

2.7 鍵括弧の使い方

原則として、鍵括弧は以下の用途に使います。

  • 文を引用するとき
  • 本来の意味と異なる意図を含ませる時。これまでは「常識」とされてきた、のような書き方。
  • すざく」などの平仮名文字を前後の平仮名から区別したいとき。もしくは、「すざく」は本来の朱雀とは違うことを意識したいとき。
2.8 二重鍵括弧の使い方

同様に、以下の用途に使います。

  • 書名を書く時。『宇宙線』と書いた場合、それは宇宙線を指すのではなく小田稔著の書名になります。
  • 鍵括弧中でさらに鍵括弧を使いたい時。
2.9 記号

日本語で書ける記号は日本語で書く。例えば「20 GeV 〜 100 TeV」や「20 GeV – 100 TeV」は「20 GeV から 100 TeV」と書きます。「コンプトン散乱のエネルギー + 光電吸収のエネルギー」ではなく「コンプトン散乱のエネルギーと光電吸収のエネルギーの和」と書きます。

2.10 受動態と能動態

基本的に日本語の論文は能動態を積極的に使うべきです。主体が誰なのかを明確にする効果があります。「三日間に渡り温度変化が測定された」では誰がやったのか分かりませんが「三日間に渡り温度変化を測定した」であれば、主語がなくても著者がやったと分ります。

また、特に研究に参加したばかりの学生はまるで他人事のように感じているためか、「〜〜計画が国際共同で進められている」と受動態で書く場合が多数見受けられます。もっと自分が研究の中心なんだ、重要人物なんだ、自分が主体になって進めているのだという意識を持って (もしそうでないならば具体的に実行に移してください)、「我々は〜〜計画を国際共同で進めている」のように能動態に書き換えてください。

2.11 やたらとカタカナ語や英語を混ぜない

例えば「望遠鏡のコスト」は「望遠鏡の建設費用」とごく普通の日本語で表現できます。カタカナでしか対応する語句がない場合、もしくは日本語訳があまりに一般的でない場合を除き、日本語の文章は日本語で書きます。また英語をむやみに混ぜる人もいますが、これも一般的な日本語訳があり、英語で表現する必要性が全くない場合は日本語を使ってください。

2.12 主語と述語と目的語

あまりに長い文を書くと、その文中で主語と述語と目的語が離れ過ぎる場合があります。文を短くするか、それらが適切な位置関係に来るように工夫して書く必要があります。また長い文を書いているうちに主語や述語自体を書き忘れたり、主語が入れ替わったりする場合がよくありますが、絶対にこれは駄目です (日本語の常識として主語が省略出来る場合を除く)。

2.13 ハイフンとマイナス

マイナス記号とハイフンは異なります。メールなどでは「-20℃」と書きますが、LaTeX の場合これをやると、「-」がハイフンとして表示されます。$-20$℃と書けば「-」がマイナス記号になります。

また、天体名で例えば RX J1713.7−3946 などは、ハイフンではなくマイナスを使います。これは 1713.7 と 3946 がハイフンでつながっているのではなく、赤経 17h 13m 33s 赤緯 -39° 45' 36'' の場所にいるということを示しており、マイナス記号が使われます。

2.14 ハイフンとエンダッシュ

画面での違いが分かりにくいかもしれませんが、「-」と「–」と「—」は異なる文字で、それぞれ用途も違います。名前は、ハイフン、エンダッシュ (en dash)、エムダッシュ (em dash) です。Mac の場合、エンダッシュは option + - で入力し、エムダッシュは option + shift + - で入力します。LaTeX の場合、それぞれ「-」「--」「---」と入力します。

本来エンダッシュは比較的使う機会が多いのですが、見た目で違いがあまり分からないため、またメール文書などでは細かいことを気にしないため普通のハイフンで代用されることが多いです。ただし、英語の論文などではちゃんと違いに気をつけましょう。次の場合はハイフンではなくエンダッシュを使います。

  1. 数字の範囲などを示す場合。例: 20 GeV–300 TeV、300–800 nm
  2. 違うものを指す単語を連結させる場合。例:Davies–Cotton 光学系 (ただし、very-high-energy や two-year-old のように、単に前後の単語を繋ぐ場合はハイフンを使用する)

英語文章中のハイフンの使い方で注意したいのが、複合形容詞 (compound adjective) を作るときです。例えば「宇宙線」は「cosmic rays」と英語で書きますが、「宇宙線フラックス」を英語にするときは「cosmic-ray flux」とハイフンを使用します。これは「cosmic」が形容詞であるため、ハイフンを入れないと「ray」を修飾することになってしまうからです。「cosmic-ray flux」は「宇宙線の」フラックスという意味であり、「cosmic-ray」とハイフンを入れることによって複合形容詞になります。

同様に「超高エネルギー」は「very high energy」となりますが、「超高エネルギーの」と形容詞として使う場合には「very-high-energy」となります。ただし、「極高エネルギー」は「ultra-high energy」と書く場合があります。これは「very」が副詞なのに対し、「ultra」が接頭辞であるための違いです。複合形容詞として使う場合は「ultra-high-energy」とするのがやはり正しいように思いますが、これはなぜか「ultra-high energy cosmic rays」のように書くことが多いようです (どなたか理由を教えてください)。

2.15 「など」

「シンクロトロン放射などの過程」のように「など」を使って省略せず、数が限られており書くのが簡単な場合は「シンクロトロン放射、制動放射、逆コンプトン散乱」のように列挙したほうが良いです。

2.16 順接の「が」

「が」には順接と逆接の両方の使い方があります。順接の「が」は読者を混乱させる場合があるので、使わないようにしましょう。例えば「これまで温度測定を行ってきたが、今後とも継続する必要がある」のような書き方をすると、「が」の後に逆接が来ることを期待してしまいます (例えば「これまで温度測定を行ってきたが、今後は湿度測定を…」のような期待をする)。

2.17 本文中の数式

「dN/dE」のような簡単な数式は $$ 環境を LaTeX 中で使わなくても書けてしまいますが、N や E は斜体にすべきなので、必ず $$ 環境を使って $\mathrm{d}N/\mathrm{d}E$ と書きます。

2.18 「ch」

「ch」というのは channel の略なので、日本語で「分解能の悪い ch が存在する」のような表現はおかしいです。「チャンネル」とちゃんと書きます。「Ch 1 は分解能が悪い」は問題ないです。

2.19 何について書いてるのか明確にする

「精度が悪化する」とだけ書くと何の精度か分かりません。「エネルギー決定精度が悪化する」や「フィッティング精度が悪化する」のようにちゃんと書きます。「感度の向上」や「強度の低下」なども「ガンマ線検出感度の向上」や「ガンマ線強度の低下」のように、何を書いてるのか明確にします。

また、「信号を取得する」「データを転送する」のように漠然と記述されているのを散見しますが、どのような信号なのか、どのようなデータなのか (波形情報か、電圧値か、画像か) をちゃんと説明してください。書いている本人は何について述べているのか分かっているでしょうが、読者には分かりません。

2.20 英数文字と日本語の混在

日本語文章を書いているときに、句読点とコンマ・ピリオドが混在したり、半角の丸括弧と全角の丸括弧が混在している場合が多々あります。原則として日本語の文章中では、「、」「。」もしくは「,」「.」を使い、「,」「.」は使いません。また「(」「)」ではなく「(」「)」を使います。LaTeX を使っていれば、丸括弧の左右の余白は適切に調整してくれます。

特に、英単語を日本語文中で列挙している場合にこのミスが目立ちます。例えば「HESS, MAGIC, VERITAS といった望遠鏡」のような記述をするときに、アルファベットを打った勢いでそのままコンマを打ってしまうようです。

※と言いつつ、この blog の記事では「(」「)」の代わりに「 (」「) 」を使っています。理由は、世の中の web browser の組版が美しくないからです。LaTeX組版は綺麗なので、ちゃんと使い分けましょう。

2.20 「数十」と「数 10」

ガンマ線業界では「数十 GeV」や「数百天体」という表現をよくしますが、これを「数 10 GeV」や「数 100 天体」と書かないで下さい。「数 100000 天体」とか「太陽質量の数 100000000 倍」になってくると、なにかおかしいなと分かるはずです。

2.21 文中の文献番号の場所

文献番号が末尾にくるとき、「〜〜と報告されている [3]。」のように書きます。「〜〜と報告されている。[3]」とは書きません。

2.22 Double quotation の向きを揃える (LaTeX 限定)

LaTeX 中で「"this is a pen"」のように書きたい時、「``this is a pen''」と書きます。「``」は「`」を二連続で、「''」は「'」を二連続です。面倒ですが、こうしないと PDF にしたときに向きが揃いません。

2.23 タイトル中の Times の英語とゴシック体の日本語の混在 (LaTeX 限定)

例えば jarticle がスタイルとして指定されている原稿を書く場合、「\title{Cherenkov Telescope Array の装置開発}」と書くと「Cherenkov Telescope Array」だけフォントが Times になり、「の装置開発」はゴシックで表示されて統一感がなくなる場合があります。これを回避するには、次の行を先頭のほうに書いておくと解決します。

\usepackage[deluxe]{otf}
2.24 RMS標準偏差

主に ROOT を解析ソフトウェアとして使っている人の中に、RMS標準偏差の区別がついていない人がたくさんいます。これは PAW の時代から引きずっている悪習です。統計用語として違う概念ですので、区別して使って下さい。放射線放射能の違いには敏感な人が多い業界なのに、不思議な話です。

我々の業界でヒストグラムを作るとき、もし教員や先輩が「RMS」という言葉を発したら、それは標準偏差の間違いです。ROOT はバージョン 5 まで RMS という間違った用語を使っていましたが、バージョン 6 からは Standard Deviation (Std. Dev.) という言葉に直っています。GetRMS は GetStdDev です。

2.25 人名の姓名の途中での改行

集録などで著者名を書く時に、姓名の間に改行が入ってしまっている場合を散見します。例えば「奥村 曉」であれば「村」と「曉」の間に改行が入っていたり、「A. Okumura」であれば「A.」と「Okumura」の間に改行が入っていたりです。このように、姓名の間に改行が入るのはマナー違反とされています。

Word や Pages のようなワープロソフトや LaTeX の場合、それが人名だとは機械が判断できないため、改行しやすい場所で自動的に改行してしまいます。ここでは改行しないでね、と機械に伝えるためには、LaTeX の場合は「A.~Okumura」や「奥村~曉」と入力します。

また、Mac の Pages の場合は姓名の間の space の代わりに、option + space を入力します。そうすると自動改行がされなくなります。

2.26 「~」と「〜」

日本語文章で数字の範囲を書く時に、全角の「〜」の代わりに半角の「~」を使う人がいますが、これは違う文字です。後者はチルダと呼ばれる記号であり、範囲を表すために使う記号ではありません。そのため、英語文章で「300~650 nm」のように書くのは間違いです (日本人にしか通じません)。

2.27 上付き文字

「km²」などと書く時に「km^2」と書く人がいますが、LaTeX であれば「km$^2$」と書き、ワープロソフトであれば上付き文字の使用方法を調べて下さい。

2.28 なんでもかんでも「データ点」と総称しない

これは言葉の意味をよく考えずに書いているのだと思いますが、「得られたデータ点の統計誤差は」のような書き方をよく目にします。「データ点」は図中の測定値を表す点のことであり、実験であなたが得たものは「データ点」ではなく測定値です。また二次元、三次元の図では「データ点」は二つもしくは三つの座標を持つので、「データ点の誤差」のような書き方をされるとどの値の誤差なのか分からなくなります。

2.29 「における」の不適切な使用

物理学会の講演題目などでよく見かけるのですが、「における」という言葉の不自然な使い方をする学生が多いです。例えば「CTA 計画における大口径望遠鏡の開発」といった表現です。CTA 計画以外では大口径望遠鏡 (これはこの場合固有名詞です) の開発はやっていませんので、「における」は不自然です。「における」は複数ありうる中から特に限定した場所を指すときに使います。「日本における東京タワーの建設」は日本語としておかしいですよね、それと一緒です。

「における」の使用意図としては、「○○実験で使用する△△装置」という意味を持たせたいときに「○○実験における△△装置」という書き方をする場合が多いようです。この「△△」が仮に一般によく使用される装置、例えば光検出器などであれば、「○○実験における光検出器の使用」などとしても日本語としてはおかしくありません。

2.30 句読点

物理系の修士論文のような日本語の横書きの科学技術文書の場合、句読点は「、」と「。」の組み合わせ、もしくは「,」と「.」の組み合わせを使用してください。公文書では「,」と「。」の組み合わせを使うという指針が国から出されていますが、歴史的な理由からか科学技術文書では「,」と「.」が多く使われるのです。一般的には「,」と「.」の組み合わせが使われますが、私個人の好みは「、」と「。」です。あくまで好みの話なので、文書全体で統一されていれば好きなもので構いません。

2.31「講演」と「公演」

学会発表は「公演」ではなく「講演」と書きます。辞書で意味の違いを調べてください。

2.32「チャンネル」という言葉に「ピクセル」や「画素」という意味はない

よく「XX チャンネルの焦点面カメラ」のような表現を見かけますが、「チャンネル」には「ピクセル」や「画素」という意味はありません。「チャンネル」とは情報を伝達する経路のことです。我々の業界では、通常読み出し回路の数などを数える場合には「チャンネル」を使いますが、これは波形が信号線を通って読み出し回路に繋がっているからです。

2.33 体言止め

体言 (名詞) で文を終わる、いわゆる「体言止め」をしないこと。科学文書は文芸作品ではありません。

2.34 過去形と現在形

実験の説明は原則として全て過去形で述べてください。行った実験の事実は全て過去の出来事であり、現在形でも未来系でもどちらでもありません。一般論を述べる場合は現在形で構いませんが、自分の踏んだ実験手順をまるで料理のレシピのように現在形で書いてはいけません。

2.35 斜体と立体 (LaTeX 限定)

数式中や本文中の変数名は斜体にします。LaTeX の場合、「速度 v」と書くのではなく、「速度 $v$」と書きます。

また、変数の添え字は、それが変数であるか、何かの言葉であるかによって斜体と立体を使い分けます。例えば複数の電圧の測定値があるような場合は「$V_i$」と書き、i も変数であることが分かるようにします。しかし例えば電圧の最大値は「$V_\mathrm{max}$」のようにして、max の部分が斜体になるのを防ぎます。

2.36 わかりやすい変数名にする

光電子増倍管のゲイン M」や「望遠鏡の有効面積 F」のように、その変数の意味する内容を推測できない変数名をつけてはいけません。多くの場合、英語の頭文字を使い、例えば「光電子増倍管のゲイン G」や「望遠鏡の有効面積 A_eff」のようにします。

2.37 「次」と「以下」を使い分ける

「以下」というのは、そこから後ろ全てという意味です。例えば卒業式などで「以下同文」という使い方をします。「次」というのは、その場所の次に書いてある箇所を指します。したがって、次の行に出てくるような式を指す場合は「次の式」のように書きます。

3 引用

3.1 引用と転載

引用と転載は異なる概念なので、注意して下さい。他の人の論文の図を自分の修論に掲載する場合、その図があくまで自分の論文に対して主ではなく従である必要があります。また、どこからか図を持ってきたら、必ずその出典を明記して下さい。Web にある画像は URL を載せて下さい。

日本語で「引用」と言う場合、英語の quote と citation の 2 種類の意味がありえます。大学などの学位論文作成の注意書きには、よく quote のほうの引用の説明が書かれています。しかし宇宙物理などの分野では citation のほうの引用しかほとんどしないでしょうから、「ちゃんと文献を引用しろ」と指導教員に言われたら、それは citation のことだと思って下さい。

他の先行研究から図を借りてくるような行為は、quote に入ります。

3.2 論文の引用 (citation)

自分が考えたことでない記述は、原則としてその原典を書くべきです。例えば「近年では Fermi 衛星の活躍により超新星残骸での陽子加速の証拠がほぼ明らかになった」のような記述をするときは、該当論文を書いて下さい。一方で、「宇宙線の謎はその発見以来 100 年にわたり」のようなごく一般的な共通認識は、わざわざ引用する必要はありません。

3.3 盗用と無断転載 (≒コピペ)

こんなことをわざわざ書きたくありませんが、他人の論文や Wikipedia などから文章を盗んでくる人がたくさんいます。学部のレポートではなく、修士論文の話です。人の書いた文章を参考にするのはもちろん構いませんし、学問の発展と営みというのはそういうものです。しかし、コピペはいけません。修士論文だと最悪の場合、学位の取り消しになり修了できない、進学できない、就職できない、という結末が待っています。

ばれないだろうと思って万引きのようにコピペをするのでしょうが、コピペは読者にばれます。「コピペルナー」のような専用ソフトを使わなくてもばれます。ただし、指導教員や審査員がそれほど真面目に読まない場合は、コピペに気がつかない場合が多々あります。またコピペは絶対にやってはいけないという指導が徹底されていないため、はっきり言って今の日本の大学院ではコピペが蔓延っています。報道に出てくるのは氷山の一角でしょう。

今までに気がついたコピペの発見には以下のパターンがあります (修論に限りません)。

  • つい 1 週間前に読んだ論文と似た表現だなと感じた (某大学助教の学会申し込みの英文概要)
  • コピペまではいかないが、Wikipedia のある項目の内容に非常に似ており、しかもその項目は僕が書いたものであった (某大学の修士論文)
  • 日本語の表現として明らかにおかしく、原文は英語であったものを拙い翻訳をしたように見えた。しかも、その原文を書いた本人は僕だったので、ばればれ (某大学の修士論文)。
  • 「てにをは」や文末だけが不自然なので、100% のコピペを防ぐために 2% くらいだけ自分で変更して逆におかしくなった (某大学の修士論文)
  • 業界内では通常は使わないと思われる変な表現があったので、そんな用語があるのかと Google で検索したら他の公開されている修士論文からのコピペであった (某大学の修士論文)
  • 他の場所はボロボロなのに、その箇所だけやけに上手にかけている
  • やけに上手に書けているせいで、自分の修論と関係のないこと (コピペ元では必要な情報だったのでしょう) まで盛りだくさん。
  • その場所だけ文体が違う
  • イントロ部分が研究室、もしくは実験グループで代々引き継がれている
  • 図の引用元が明記されていない。なぜかというと、他人の修論からコピペしたのに、コピペ元でもその図の引用をちゃんとしていなかったため、原論文が分からない。
3.4 引用した文献はちゃんと読む

当たり前のことですが、自分が引用する文献にはちゃんと目を通しましょう。全文熟読する必要はないですが (場合によりけり)、その論文の趣旨を勘違いして引用していたり、その論文が出典だと思っていた図が、違う論文から持ってきたり図だったりすることもあります。

よくあるのは先輩や他の人の書いた修論を参考にし、「あ、この図は使えそうだな」と考えて図の引用のみをする場合です。イントロなどで使える綺麗な図、よくまとまった図が欲しいだけで、元文献なんて読みもせず、download もせずに図だけ貼り付ける人がいます。

3.5 自己剽窃について

コピペが駄目というのは、何も他人の文書を盗用 (剽窃) するのが駄目ということに限りません。過去に自分が発表した文章や図をそのまま他で流用することも、場合によっては禁止されています。これを自己剽窃と言います。

なぜ駄目かというと、主に理由がふたつあります。ひとつは同じ内容で二重投稿をしないようにすること (ひとつの研究成果を異なる雑誌などに投稿すること。成果の水増しになるし、査読者などの負担を無駄に増やすことになる。)、また著作権の問題があります。

二重投稿が駄目なのは感覚として当たり前だと思いますが、著作権についてはややこしいです。このあたりは別記事に書きます。

3.6 孫引き

あなたの使用したい図の初出が文献 A だとします (原典)。その図を他の論文やネット記事 (文献 B) が引用しているのをあなたが見つけるとします。このとき、あなたは図の引用元として文献 B を使用してはいけません。このような行為を孫引きと呼びます。あなたが引用元として明示するベきは、文献 A です。

4 概要 (abstract)

4.1 概要とは

概要はあくまで本文全体のまとめです。概要に既に書いたから本文には書かないで良いとか、概要に書いてあるのに本文に書かれていない記述があるということは、ありえません。概要は概要のみを取り出しても意味が通じるように書き、また本文は本文のみで取り出しても意味が通じなくてはいけません。

したがって、例えば概要で「Photomultiplier Tube (PMT)」と書いたとしても、本文中で PMT を使う時には初出の箇所で再度定義する必要があります。

4.2 概要をいつ書くか

概要は普通、修士論文の先頭 (表紙の直後) に来ます。そのためか多くの学生が、修士論文を書き進める前に概要に着手することがあるようです。しかし修士論文の筋書きや実験、計算結果などが全て揃っている場合を除き、修士論文を書き始めた時点でその結果や結論までが見えているのは稀でしょう。結論のあたりまで執筆が進んだ時点で、概要を書き始めるので良いと思います。

ただし、提出日当日に結論を書き終え、それから概要を書き始めるのでは間に合いません。概要を書くのに半日以上はかかると見込んで予定を立てましょう。

自分の職場だと、修士論文本体に加えて要旨の提出も求められます。これの作成作業についても、概要と同じことが言えます。

5 添削や指導の依頼の仕方

5.1 依頼をする前に

指導教員や先輩などに論文の添削をする前に、まずは最低限、ここに書かれていることを自分で直してから提出しましょう。論文の添削というのは全体の構成や論理展開、実験や考察の不足、間違いの指摘などを行うことが主な目的です。決して、「数字と単位の間にはスペースを入れるように」なんて下らない指摘をするために時間を浪費するためのものではありません。

一度ちゃんと気をつけて書くようになれば、書いている最中につまらないミスをすることはなくなります。書いている本人と添削する側の時間をお互いに無駄にしないために、ここに書かれていることは厳守しましょう。

5.2 時間に余裕をもって

第一草稿を真面目に添削をすると、例えば 50 ページの修論を読むのに 5 時間はかかります。4 ページの夏の学校の集録でも 1 時間はかかります。

論文の添削は大学教員の業務の一環なので、もちろんどんなに時間がかかろうが添削をします。しかし、添削以外にも大学教員は多くの仕事を抱えています。そのため、締切直前に添削依頼が来ても対応することができません。仕事の合間を縫って、睡眠時間を削って、家族との時間を割いて、添削せざるをえなくなります。

締切直前に添削依頼がくると、余裕をもって依頼が来た時に比べて当然添削にかけられる時間が減少します。そうすると十分な添削ができませんし、書き直しの指示を反映してもらう時間も無くなってしまいます。

添削結果をもらいたい三日前くらいには、依頼をするようにしましょう。

5.3 ボスキャラの前に雑魚キャラを使う

指導教員に添削してもらう前に、先輩やポスドク助教といった、雑魚キャラに添削をしてもらいましょう。

5.4 指摘された箇所は全て修正してから次の添削に出す

添削をしていると、「なぜ前回指摘した箇所の複数がまだ直っていないのか」と思うことが多々あります。これは本当に時間の無駄ですし、馬鹿にされているのかとさえ思います。指摘された箇所は全て直してから次の添削に回しましょう。

もし、修正する必要がないと思って修正しなかった場合、その理由を説明してちゃんと伝えましょう。添削者の思い込みなどで、見当違いの指摘が来る場合もあります。おかしいなと思った指摘に対しては、「〜〜の論文には〜〜と書いてあるため、現在の文章で問題ないと思います」のようにちゃんと説明をすることが大切です。

5.5 どこを直したかを分かりやすくする

大幅な改訂ではなく、細かい改訂の場合は、どこをどのように変更したか分かるように、もしくは伝えるようにしましょう。何ページもある PDF を渡されて、前回の版と何が違うのかが明示されていないと、添削する側は全文を読み直さなくてはいけません。

LaTeX を使っている場合は latexdiff を使うと便利です。

latexdiff version1.tex version2.tex > diff.tex
platex diff.tex
dvipdfmx diff.dvi

のようにすると、PDF 中に差分が分かりやすく表示されます。latexdiff は標準では入っていないので、LaTeX のパッケージと別途インストールが必要と思います。

5.6 謝辞にも可能なかぎり目を通してもらう

修士論文の最後に謝辞を書く場合がほとんどだと思いますが、ここが添削の対象になることはほとんどないと思います。自分も謝辞の添削まではしていません。また、学生本人の感謝の気持ちなどを書く場所であり、執筆の最中に指導教員に読まれるのが気恥ずかしいというのもあるのか、修士論文の提出直前に謝辞を追加する場合が多々あるようです。

ただし、謝辞の中で人名や職階の記入を間違えていたり、事実誤認が含まれている場合が多々あります。せっかく謝意を示す文章の中で、その相手の氏名を入力し間違えていては、大変失礼にあたります。可能であれば、謝辞も先輩などに確認してもらいましょう。

また謝辞で「指導教員」を「指導教」と書いたり、「助教」を「助教」としてしまう間違いがよくあります。国立大学が法人化された後は「教員」と呼びます。また昔の「助教授」は「准教授」に変わり、「助手」が「助教」と「助手」の二つに細分されました。

5.7 添削依頼をする場合は行番号をつける (LaTeX 限定)

添削をメールでやり取りする場合もあると思います。添削側は「XX 行目から YY 行目の日本語がおかしい」のように行番号を指定して突っ込みを入れたくなる場面が多々あるもので、この場合、各行に行番号が振ってあると大変便利です。Word のやり方はしりませんが、LaTeX の場合は .tex ファイルの先頭のほうで次の行を追加しておきましょう。

\usepackage{linen}
\linenumbers

もちろん、最終版を提出する際には行番号を出さないように注意してください。

5.8 「??」を無くす (LaTeX 限定)

LaTeX で図表や章節を参照するときに、\ref コマンドを使って「図 2.3」などと自動的に表示させることができます。しかしこのコマンドの使い方が間違っていたり参照先が無かったりすると、「図 ??」と表示されてしまします。

このような表示が残っているものを添削に回すというのは、自分で本文の確認をしていない状態で他人に添削依頼をするということですので、順序が間違っています。まずは自分で読んで、体裁や日本語でおかしなところがないか確認してください。

ついに ROOT で日本語を使えるようになりました (使わないけども)

(多分) ROOT 5.34 から TMathText という新しい class が導入され、ついにマルチバイト文字の扱いもできるようになりました。QtROOT を使えば以前から同じようなことが出来たのですが、非標準の ROOT は使いたくないので試したことがありませんでした。日本語を使いたいという機会が滅多にないですし。

また、マルチバイトの取り扱いができることよりも、TMathText の最大の売りは LaTeX 機能の改善です。TLatex でも LaTeX のような汚い何かは入力できていましたが、TMathText でかなり表示が改善されています。タイトルや軸など、TLatex で表示されていた部分は全て TMathText で置き換わりましたので、今後は TMathText に慣れましょう。

さて、実際に使って試してみます。まずは C++ の例です。japanese.C を utf-8 で保存しましょう (円記号の表示は、実際は backslash で入力)。

void japanese()
{
  TH1D* h = new TH1D("h", "\\hbox{標準偏差 }\\sigma=1\\hbox{ の正規分布の例};\\hbox{物理量};\\hbox{頻度}", 100, -5, 5);
  h->FillRandom("gaus", 10000000);
  h->Draw();
}
$ root
root [0] .x japanese.C

こちらは Python 版です。先頭に utf-8 であることを明記して、C++ と同様、文字列中にそのまま日本語を書き込みます。これも utf-8 で保存します。

# -*- coding: utf-8 -*-
import ROOT

def japanese():
    global h
    h = ROOT.TH1D("h", "\\hbox{標準偏差 }\\sigma=1\\hbox{ の正規分布の例};\\hbox{物理量};\\hbox{頻度}", 100, -5, 5)
    h.FillRandom("gaus", 10000000)
    h.Draw()
$ python
>>> import japanese.py
>>> japanese.japanese()

さて、出力結果は次のようになります。うまく表示できた、と思いきや、「偏」の旁の上の部分がおかしいですね。おかしいというか、日本の漢字ではなく中国の簡体字です。


▲ ROOT で日本語を表示した例。「偏」の字がおかしい。

なぜ日本の漢字ではなく簡体字になるかというと、ROOT と一緒に配布されるフォントが DroidSansFallback.ttf というものだからです。このフォントには日本語、韓国語、中国語などが含まれているのですが、異体字は同じ文字として扱われているため、日本語と簡体字の区別がちゃんとされていません。そのため、異体字が日中で重複してしまうような場合は簡体字が表示されてしまうのです。

それでは、他のフォントにしてしまえば良いのでは? という疑問が湧きますが、DroidSansFallback.ttf 以外のフォントを指定する方法は今のところ無いようです。TTF.cxx などにも、ベタ書きされています。

そこで、$ROOTSYS/fonts/DroidSansFallback.ttf を他のフォントで書き換えてしまいます。例えば、Osaka フォントを無理やり置いてみます。

$ cd $ROOTSYS/fonts 
$ mv DroidSansFallback.ttf DroidSansFallback.ttf.bak
$ cp /Library/Fonts/Osaka.ttf DroidSansFallback.ttf

この状態で japanese.C を再度走らせたものが次の図です。「偏」の表示は日本語らしくなりましたが、なぜか縦軸も横軸もタイトルが消えてしまいます。もう少し調べる必要がありそうです。


▲ 「偏」は直ったが、縦軸と横軸が表示されない。

仕方なく DroidSansFallback.ttf を使うとして、それでもまだ問題があります。まず、PDF に直接保存すると日本語部分が表示されません。仕方なく EPS に保存すると、今度は Mac の Preview.app では PDF に変換できません。Acrobat X を使っても開けません。gs で開くと日本語も表示されますが、うちの環境だと「量」の字が豆腐に化けました。ps2pdf を使って EPS を PDF に変換すると、同様に「量」が化けてしまいました。また、DroidSansFallback.ttf が全て EPS に埋め込まれる仕様のため、EPS の大きさが 20 MB を超えてしまいます。

とまあ、色々とまだ問題があります。

美味しいオクムライスの作り方

オクムライスとは


IMG_9161
奥村さんが Hawaii に住んでいた時に発明したドンブリです。オクムライスと呼ばれています。沖縄名物のタコライスって別に美味しくないよね、という人向け。ガツガツと食べたいけど、生野菜も摂りたいという人向け。子供っぽい味付けが好きな人向け。

まあ、冷蔵庫にあるものでタコライス的なものを作ろうとしたら違う料理になってしまった感じ。でもこっちのほうが美味しいし簡単。

用意するもの (二人前)

  • 炊き立てのご飯 2 合
  • 卵 4 つ
  • レタス 4 枚 (大きめ)
  • トマト 2 つ (大きめ)
  • もやし 1 袋
  • 牛挽肉 300 g (合い挽きでも可)
  • ニンニク 3 かけ
  • グラタンチーズ適量
  • 中濃ソース適量
  • ケチャップ適量
  • コショウ適量
  • サラダ油適量

手順 (所要時間 15 分)

1. ご飯を炊いて、蒸らしている間に 2. へ。

2. トマトはサイの目に切ってボウルへ。

3. レタスは太めの千切りにしてザルで水を切る。

4. ニンニクをスライスしてサラダ油で香りがでるまで炒める。

5. 牛挽肉を 4. に追加して火が通るまで炒める。

6. もやしを 5. に追加して 1 分くらい炒め、中濃ソースとコショウを適量加える。中濃ソースで味の濃さが決まるので、1 人 1 合食べるのに丁度良さそうな濃さまで適当に。

7. ご飯をドンブリか深めの皿に盛り、グラタンチーズを好きなだけ乗せる。

IMG_9158
▲ チーズはたくさん乗せたほうが美味しい。

8. チーズがちゃんと溶けるように、6. をチーズの上からかける。

IMG_9159
▲ 熱々をちゃんと乗せてチーズを十分に溶かすこと。

9. 別のフライパンで目玉焼きを作り始める。

10. 目玉焼きができるまでの間に、レタスとトマトを 8. に乗せる。レタスとトマトは多めのほうが美味しいので、こぼれないように大きめの器が良い。

IMG_9160
▲ これの 1.5 倍くらい野菜を乗せても良い。好きなだけ。

11. 半熟の目玉焼きを 10. に乗せて、ケチャップをかける。

IMG_9161
▲ 完成!!!

12. グチャグチャとスプーンでかき混ぜながら食べる。

CMake と SWIG を使って C++ と Python と ROOT に対応させる

やりたいこと

CTA の焦点面カメラの開発に必要なソフトを新たに書く必要があり、以下の条件を満たす必要があります。

  • 速度重視の用途に耐えるため、また multi thread に対応するため、中身は C++ で書かれていること
  • 速度を重視しない場合や簡単な試験にすぐ使えるように、Python からも利用可能なこと
  • C++ を使えない人にも使いやすいこと (これもすなわち、Python で動くこと)
  • ROOT からも動くこと
  • OS X でも Linux でも動くこと
  • Engineer の人でも使えるよう、将来的に Windows 対応もできること
  • ROOT に不慣れな人、ROOT を install していない人でも動かせること
  • PyROOT ではなく、純粋に Python のみで動くこと

つまり、標準では C++ の shared library を生成し、必要に応じて Python 用の library も生成し、さらに必要に応じて ROOT 用の library も生成するものが必要です。動作環境も全部載せです。

解決策



結論として、CMake と SWIG を使うことにしました。

まず、Autoconf を今更勉強したくなかった*1ので、CMake にしました。それと、CMake のほうが文法が簡単そうというのも理由です*2。また、最近の Geant4 では CMake が標準になったのも理由です。ROOT も新しいものは CMake に対応しています。Geant4 と ROOT が CMake に移行しているのだから、CMake の勉強しておけば役に立つだろう、と。

次に、C++ で書かれた code を Python に持って行くには、やはり SWIG が標準的だそうで、SWIG を使うことにしました。CMake から SWIG を呼び出すのも簡単なことが分かったのも理由です。

簡単と言えば簡単なのですが、CMake の分かりやすい解説はそれほど整備されていません。数日間にわたる Google 検索と試行錯誤の結果をここにまとめます。

使い方

階層

どのように directory や file を置くかは好みですが、自分の試した構成は次の通りです。実際にはもっと inc と src の中身は増えます。

target+
      |-CMakeLists.txt
      |-inc+
      |    |-BasePacket.h
      |    |-CommandPacket.h
      |    |-ResponsePacket.h
      |    |-LinkDef.h
      |
      |-src+
           |-BasePacket.cxx
           |-CommandPacket.cxx
           |-ResponsePacket.cxx
           |-CMakeLists.txt
           |-target.i
それぞれの中身
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

project(TARGET)
set(TARGET_VERSION_MAJOR 1)
set(TARGET_VERSION_MINOR 0)

option(PYTHON "Build the Python version of TARGET library" OFF)
option(ROOT "Build the ROOT version of TARGET library" OFF)

subdirs(src)

include_directories("${TARGET_SOURCE_DIR}/inc")

▲ target/CMakeLists.txt

aux_source_directory(. SOURCES)

add_library(TARGET SHARED ${SOURCES})
install(TARGETS TARGET DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

if(ROOT)
  message("ROOT support is added")

  find_package(ROOT REQUIRED)
  include(${ROOT_USE_FILE})

  include_directories(${ROOT_INCLUDE_DIRS})

  file(GLOB INCS "${TARGET_SOURCE_DIR}/inc/*h")
  file(GLOB LINKDEF_H "${TARGET_SOURCE_DIR}/inc/LinkDef.h")
  list(REMOVE_ITEM INCS ${LINKDEF_H})

  ROOT_GENERATE_DICTIONARY(RTARGETDict ${INCS} LINKDEF ${LINKDEF_H})
  ROOT_LINKER_LIBRARY(RTARGET ${SOURCES} RTARGETDict.cxx LIBRARIES Hist MathCore)
  ROOT_GENERATE_ROOTMAP(RTARGET LINKDEF ${LINKDEF_H} DEPENDENCIES Hist MathCore)
endif(ROOT)

if(PYTHON)
  message("Python support is added")
  find_package(SWIG REQUIRED)
  find_package(PythonLibs REQUIRED)

  include(${SWIG_USE_FILE})
  set(CMAKE_SWIG_FLAGS "")
  include_directories(${PYTHON_INCLUDE_DIRS})

  set_source_files_properties(target.i PROPERTIES CPLUSPLUS ON)
  set_source_files_properties(target.i PROPERTIES SWIG_FLAGS "-includeall")
  swig_add_module(target python target.i ${SOURCES})
  swig_link_libraries(target ${PYTHON_LIBRARIES})

  execute_process(COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
  install(TARGETS _target DESTINATION ${PYTHON_SITE_PACKAGES})
  install(FILES ${CMAKE_BINARY_DIR}/src/target.py DESTINATION ${PYTHON_SITE_PACKAGES})
endif(PYTHON)

▲ src/CMakeLists.txt

#ifndef TARGET_BASE_PACKET_H
#define TARGET_BASE_PACKET_H

namespace TARGET {

class BasePacket
{
private:
public:
  BasePacket();
  virtual ~BasePacket();
};

} // TARGET

#endif // TARGET_BASE_PACKET_H

▲ target/inc/BasePacket.h

#include "BasePacket.h"

namespace TARGET {

BasePacket::BasePacket()
{
}

//______________________________________________________________________________
BasePacket::~BasePacket()
{
}

} // TARGET

▲ target/src/BasePacket.cxx (中身はまだ空です)

#ifdef __CINT__

#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;

#pragma namespace TARGET;

#pragma link C++ class TARGET::BasePacket;
#pragma link C++ class TARGET::CommandPacket;
#pragma link C++ class TARGET::ResponsePacket;

#endif

▲ inc/LinkDef.h

%module target
%{
#include "BasePacket.h"
#include "CommandPacket.h"
#include "ResponsePacket.h"
%}
%include "BasePacket.h"
%include "CommandPacket.h"
%include "ResponsePacket.h"

▲ src/target.i

Build

$HOME に target という directory があると仮定します。

$ mkdir build
$ cd build
$ cmake ~/target -DPYTHON=ON -DROOT=ON
(snip)
$ make
(snip)
$ sudo make install
[ 35%] Built target RTARGET
[ 57%] Built target TARGET
[ 92%] Built target _target
[100%] Built target libRTARGET.rootmap
Install the project...
-- Install configuration: "RelWithDebInfo"
-- Installing: /usr/local/lib/libTARGET.dylib
-- Installing: /usr/local/lib/libRTARGET.so
-- Installing: /usr/local/lib/libRTARGET.rootmap
-- Installing: /Library/Python/2.7/site-packages/_target.so
-- Installing: /Library/Python/2.7/site-packages/target.py

これで、/usr/local/lib に C++ 用の library である libTARGET.dylib、ROOT 用の libRTARGET.so と libRTARGET.rootmap、また /Library/Python/2.7/site-packages に Python 用の _target.so と target.py が install されました。

実際に使ってみる
>>> import target
>>> base = target.BasePacket()
root [0] TARGET::BasePacket* base = new TARGET::BasePacket()

動作試験環境

OS X
Linux
  • Scientific Linux 6.3
  • GCC 4.4.6
  • Python 2.6.6 (yumpython-devel を入れる必要あり)
  • ROOT 5.34/04
  • SWIG 1.3.40 (yum)
  • CMake 2.8.10.2 (yum で導入可能な 2.6.4 では、ROOT の build でこけるので、2.8 以上を自分で導入する必要あり)

ROOT と CMake 以外は全て yum で取ってこられる最新のもの。

ただし、Scientific Linux の環境では /usr/include/python2.6/Python.h を見つけてくれなかったため、次のように実行しました。CMake はこれくらい自動で見つけてほしいですが…。

$ cmake ~/target -DPYTHON=ON -DPYTHON_INCLUDE_DIRS=/usr/include/python2.6 -DROOT=ON

*1:使ったことあると思いきや、ROOT 環境にべったりで自分で Makefile 書いたりする機会は少ない

*2:Autoconf を知らないので、比較しようないのですが、Autoconf は以前勉強しかけて面倒くさそうに見えたのでやめました。

ROOT を CMake で build してみる

CMake の勉強がてら、ROOT 5.34.03 を CMake で build してみます。OS X 10.8.2 です。

$ ll $ROOTSYS
lrwxr-xr-x  1 root  wheel  20 Dec 18 14:30 /usr/local/root -> root_v5.34.03.source
$ cd $ROOTSYS
$ make clean
$ make distclean
$ cd ~
$ mkdir tmp
$ cd tmp
$ CC=clang CXX=clang++ cmake $ROOTSYS -Dminuit2=ON -Dgdml=ON -Dmathmore=ON
$ make -j 8
$ make install

cmake の実行の CC と CXX を設定しているのは、なぜかこれをやらないと GCC と Clang が混在して使用されてしまうからです。OS X 特有の問題と思いますが、ここを参考にして解決しました。

普段は make install をやっていないのですが、CMake を使う場合は build directory を分けるのが普通なので、make install して $ROOTSYS/lib などに install します。また、CMake の module を $ROOTSYS/cmake の下に入れる必要が後々出てくるので、これも make install がやってくれます。

海外学振で渡英するための手続き

1. 海外学振でレスター大学に行きます



2013 年 4 月から、海外学振でイギリスのレスター大学 (University of Leicester) へ 2 年間行くことになりました。名古屋大学の太陽地球環境研究所に助教として 9 月に着任したばかりなのですが、その公募に申請するよりも前に出していた海外学振の申請が、面接免除で合格内定していました。助教の合格内定が 7 月末、海外学振の結果が分かったのは 8 月 9 日です。

たまたま両者の合格が同時期だったこと、また太陽研の同僚の方々のご理解があったため、助教着任後たったの半年で、長期海外出張という扱いで海外学振に行けることになりました。研究内容としては、今の職場でやっていることと同じなのですが、名古屋大学がアメリカやイギリスと共同で進めている Cherenkov Telescope Array (CTA) の焦点面カメラや光学系の開発を、イギリスの共同研究者と現地で行います。加えて、Fermi + H.E.S.S. で何かやれないかな、と。

というわけで、SLAC 滞在時の「J1 VISA取得の作業メモ」に続き、ビザの申請が必要なので記録を。

2. 学振との手続き

(書きかけ)

3. ビザの申請と発行

(書きかけ)

3.1 受入大学とビザの話を開始する (2012 年 12 月)

2013 年 4 月に渡航するとなると、3 月中にはビザが手元に欲しいので、この時期からビザ発行の手続きについて受入大学に問い合わせました。SLAC (米国) のときは相手側が海外学振の受け入れ経験豊富だったので、勝手に処理が進みましたが、今回は経験が無さそうだったので、クリスマス休暇に入る前に相談を開始しました。

まずは受入研究者 (Leicester の教授) に何をすれば良いかを問い合わせました。ここから、どの事務の人がビザの担当者かという連絡が来るのに 1 ヶ月以上。まあ、こんなもんでしょう。

3.2 子供のパスポートを作る (2013 年 1 月)

1 週間くらいで作れました。

7 ヶ月の赤ん坊の証明写真を撮るのが面倒だったので、50 mm のレンズを使って白っぽい背景の場所で自分で撮影し、Photoshop で背景色を白に飛ばしてセブンイレブンのコピー機に JPEG 画像を持ち込んで印刷しました。赤ん坊の顔の縮尺をどの程度にすれば良いか自信が無かったので、3 種類の大きさで印刷されるように、L 版の中に複数の画像を印刷しました。

自分で証明写真を撮影する場合、枠内にどの程度の大きさで収まるかを気にして撮影もしくは修正する必要があります。今回は東京都の解説を参考にして撮影と印刷をしました。

3.3 こちらから必要書類を送付 (2013 年 1 月 25 日)

Leicester の担当者から、以下の書類を送るようにとの指示を受けたのでこれを郵便局の EMS で発送しました。1 月 29 日に、Leicester に書類が到着したと連絡を受けました。

  1. 家族全員分のパスポートのコピー (自分と妻と息子)
  2. 所属機関が給料を二年間支払うと証明する書類 (Leicester が雇うわけではなく、またイギリスで就労もしないというのを示すため)
  3. 預金残高の証明書 (扶養家族 1 人につき、3 ヶ月あたり 600 ポンドの預金残高が必要。つまり、140 万円くらい。)

2 つ目については、名古屋大学に証明書を依頼するのが面倒だったので、学振が採用内定後に送ってくれる英文証明書を提出しました。もちろん、学振から貰うのは「給料」じゃなくて出張手当てに相当するのですが、この場合はどうでも良かろう。

3 つ目は、三菱東京 UFJ の近所の支店に依頼して、1 週間弱で郵送されてきました。自分の口座のある東京の支店が発行するため、郵送の往復で多少時間がかかるそうです。手数料は 735 円かかりました。口座番号と支店の情報 (つまり通帳を持っていけば良い)、および届け出印を窓口に持参すれば手続きが可能です。

これらの書類に加えて、Leicester でどのような研究を行うのかについての説明と、現住所などの情報を送るようにとの指示があったので、これはメールにて済ませました。

3.4 Certificate of Sponsorship の申請 (2013 年 2 月 1 日)

必要書類が Leicester に届くと、相手の事務の方が Certificate of Sponsorship という書類 (?) の発行手続きをしてくれました。海外学振で渡英する場合、Tier 5 (Temporary Worker - Government Authorised Exchange) というビザになるそうで、この申請をするにあたって Certificate of Sponsorship が必要となります。

2 月 1 日にすぐにメールが届き、以下の情報をメールの本文として得ました。

Tier and category : Tier 5 (Temporary worker - Government Authorised Exchange) 
Certificate number: XXXXXXXXXXX
Date assigned: 31 January 2013 
Expiry date (use by): 01 May 2013 
Certificate summary 
Passport number: XXXXXXXXXX
Family name: Okumura 
Given name(s): Akira 
Nationality: JAPAN 
Date of birth: 08/10/1980 
Gender: Male

この情報、というか Certificate number というのがあれば、ビザの申請を進められます。Certificate of Sponsorship は、紙の書類ではありません。各大学等から申請すると、単に登録番号が発行されるものです。したがって原本が郵送されてくる、というようなことはありません。

この番号の有効期限は三ヶ月のみであり、またビザの申請も発行の三ヶ月前からしか受け付けてもらえません。そのため、あまり早くに Certificate of Sponsorship を取得すると再発行以来をする必要があるので注意が必要です。

ここに情報として明記はされていませんが、sponsor が maintenance を confirm するかどうかで、単身者の場合は必要書類が変わります。これは何か問題があったときに受入大学が費用を負担するかどうかに関わってくるのだと思いますが、大学が confirm してくれる場合は銀行残高の証明を用意する必要がないそうです。家族がいる場合はビザ申請時に残高証明が必要です。

3.5 必要な書類

次の書類は、ビザ申請センターに電話で問い合わせて確認した必要書類です。

  • Certificate of Sponsorship の番号
  • Online で行うビザの申請を家族全員分
  • Appendix 6: Tier 5 (Temporary Worker) を記入し印刷したもの
  • 家族全員分の証明写真 (45 mm × 35 mm) を 1 枚ずつ 参照 PDF
  • 家族全員分のパスポート (これは申請中は預けることになる)
  • 1 人あたり 600 ポンド以上の残高が 90 日間以上あることを示す銀行の残高証明*1とその翻訳、および翻訳証明書*2
  • 婚姻関係を示すために戸籍謄本とその翻訳、および翻訳証明書

また上記の書類に加え、申請が確実になる可能性を高めるため、以下の書類も用意しました。これらがビザの審査に影響を与えるかは不明です。

  • 大学の学部卒業証明書 (英文)
  • 大学院の修士修了証明書 (英文)
  • 大学院の博士修了証明書 (英文)
  • 大学院の成績証明書 (英文)
  • 全ての書類のコピー
3.6 申請作業

http://www.visa4uk.fco.gov.uk/ApplyNow.aspx から online で申請します。

*1:Citibank の online の英文明細でも良いそうですが、それが本物であるという証明書を結局発行してもらわないといけない

*2:翻訳の専門家に依頼する必要あり

2012 年総選挙の小選挙区得票数を集計してみる

Twitter小選挙区の合計得票数について書いたところ、まあまあ反響があったので少し整理して書きます。皆さん知りたかった数字のようです。

▲ 78 RT

▲ 137 RT

似たようなのは時事通信も出していて、なんかちょっとたし算が違いますが比例小選挙区の集計が出ています。



2009 年の総選挙では民主党小選挙区を活用して圧勝し、そして今回の総選挙では自民党が同じく小選挙区制を利用して圧勝しました。そもそもは自民党議席数を盤石にするために導入された小選挙区制度と言われていましたから、「正しい使い方」に戻ったとも言えます。

小選挙区で毎回問題になるのが、小政党の切り捨てと「死票」の問題です。いくら小政党に投票しても、その小選挙区で 1 位にならなければ (比例復活を除いて) その候補は当選できず、落選議員に投票した民意は反映されないと言われているからです。

比例区の合計得票数は新聞記事でもよく目にしますが、では小選挙区での各党の合計得票数はどのようになっているのでしょうか。それを集計したものが以下の表です (比例は時事通信の結果より)。括弧内は相対値です。

政党 小選挙区得票数 小選挙区議席 比例区得票数 比例区議席
自民党 25,643,306 (43.0%) 237 (79.0%) 16,624,457 (27.6%) 57 (31.7%)
民主党 13,598,770 (22.8%) 27 (9.0%) 9,628,653 (15.9%) 30 (16.7%)
日本維新の会 6,942,350 (11.6%) 14 (4.7%) 12,252,228 (20.3%) 40 (22.2%)
共産党 4,700,287 (7.9%) 0 (0.0%) 3,689,159 (6.1%) 8 (4.4%)
日本未来の党 2,992,365 (5.0%) 2 (0.7%) 3,423,915 (5.6%) 7 (3.9%)
みんなの党 2,807,244 (4.7%) 4 (1.3%) 5,245,586 (8.7%) 14 (7.8%)
公明党 885,881 (1.5%) 9 (3.0%) 7,116,474 (11.8%) 22 (12.2%)
社民党 451,762 (0.8%) 1 (0.3%) 1,420,790 (2.3%) 1 (0.6%)
新党大地 315,604 (0.5%) 0 (0.0%) 346,848 (0.5%) 1 (0.6%)
国民新党 117,185 (0.2%) 1 (0.3%) 70,847 (0.1%) 0 (0.0%)

まあ、別に政治の床屋談義をするつもりはないので細かい話はしませんが、自民はそれほどの得票数ではないにもかかわらず、小選挙区 300 議席のうち実に 79% も占めるという結果になりました。維新は民主について得票しているのに、4.7% の議席数と大きく損をした感じです (小選挙区様々かもしれません)。

面白いのが共産党公明党共産党は 300 選挙区中 299 選挙区で候補者を擁立するという、他の政党に比べて圧倒的な充填率なのですが、支持層自体は大きくないため、7.9% も小選挙区で得票と健闘しているにも拘わらず比例当選しかありません。大選挙区になったり、比例ブロックが全国になれば大きく議席を増やして、小選挙区を維持したい人達にとっては困ったことになります。

公明党は 9 選挙区でしか候補を擁立しておらず得票数も 1.5% しかないのに、なんと全選挙区で当選というスゴ技です。さすが選挙慣れしています。比例区で 7.3% の議席を取り、小選挙区の得票数で 1.5% ということは、擁立した選挙区に創価学会員の多くが住民票を持っているなんて都市伝説はきっと嘘なのでしょう (=会員以外も公明支持層はいる)。あとまあ、うまく自民と連携している、と。

集計には毎日新聞の選挙特集のページを wget でひたすら落としてきて、

for i in {01..47}; do for j in {001..030}; do wget http://senkyo.mainichi.jp/46shu/kaihyo_area_ichiran.html\?aid=A$i$j; done; done

次の Python script を使用して整理しました。集計した結果は CSVここに置いてあります。

# -*- coding: utf-8 -*-
import codecs
import os

def rm():
    for i in range(1, 48):
        for j in range(1, 31):
            fname = 'data/kaihyo_area_ichiran.html?aid=A%02d%03d' % (i, j)
            try:
                f = open(fname)
                print 'opening', fname
            except:
                continue
            hasEntries = False
            for line in f.readlines():
                if line.find('<li class="Name"><div><a href') >= 0:
                    print line
                    hasEntries = True
            
            f.close()
            if not hasEntries:
                os.remove(fname)

def data():
    countList = {u'民主' : 0, u'自民' : 0, u'未来' : 0, u'公明' : 0, u'維新' : 0,
                 u'共産' : 0, u'みな' : 0, u'社民' : 0, u'大地' : 0, u'国民' : 0,
                 u'日本' : 0, u'改革' : 0, u'諸派' : 0, u'無属' : 0, u''    : 0}
                 
    for i in range(1, 48):
        for j in range(1, 31):
            fname = 'data/kaihyo_area_ichiran.html?aid=A%02d%03d' % (i, j)
            try:
                f = codecs.open(fname, 'r', 'utf8')
            except:
                break

            h1count = 0
            for line in f.readlines():
                if line.find('<h1>') == 0:
                    if h1count == 1:
                        block = line.split('<h1>')[1].split('<')[0]
                        num = u'0123456789'
                        for k in range(10):
                            block = block.replace(num[k], str(k))
                        block
                    h1count += 1
                elif line.find('<li class="Name"><div><a href=') == 0:
                    name = line.split('</a></div></li>')[0].split('>')[-1]
                    print block + ', ' + name + ',',
                elif line.find('<li class="Age"><div>') == 0:
                    age = line.split(')</div></li>')[0].split('(')[-1]
                    print age + ',',
                elif line.find('<li class="Party"><div><a href=') == 0:
                    party = line.split('</span></a></div></li>')[0].split('>')[-1]
                    print party + ',',
                elif line.find('<li class="Party"><div><span') == 0:
                    party = line.split('</span></div></li>')[0].split('>')[-1]
                    print party + ',',
                elif line.find('<li class="Duplicate"><a href=') == 0:
                    duplicate = line.split('</span></a></li>')[0].split('>')[-1]
                    print duplicate + ',',
                elif line.find('<li class="Duplicate"></li>') == 0:
                    duplicate = ''
                    print duplicate + ',',
                elif line.find('<li class="State"><div><span>') == 0:
                    state = line.split('</span></div></li>')[0].split('>')[-1]
                    print state + ',',
                elif line.find('<li class="VotesCount"><div>') == 0:
                    count = line.split('</span></div></li>')[0].split('>')[-2].split('<')[0].replace(',', '')
                    print count
                    countList[party] += int(count)

    for key in countList.keys():
        print key, countList[key]