物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Python+matplotlib で 発表等で使える文字が大きめのグラフを簡単に作る方法

普通にグラフを作ると、スライドやポスターで使うには文字が小さく出力される。

デフォルト

コード

import numpy as np
import matplotlib.pyplot as plt

def gaussian_func(arr, constant, mean, sigma):
    return constant * np.exp(- (arr - mean) ** 2 / (2 * sigma ** 2))/(2*np.pi*sigma**2)**0.5

x = np.linspace(-5, 5, 1000)
y =gaussian_func(x, 1.0, 0, 1)
fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x,y,"k-",label="Total")
ax.set_xlim(-5, 5)
ax.set_ylim(0,None)
plt.legend()
plt.ylabel("Probability")
plt.xlabel("Data (cm)")
plt.savefig("test_org.png")
plt.show()

matplotlibは様々な設定が可能で、詳細な設定は他のブログに任せることにするとして、簡単な方法を紹介する。

plt.rcParamsで figsize を小さめ(例えば(4,3))に設定し、出力時は、DPIを大きく(300くらいが適当)、bbox_inchesを tight にするだけで、見栄えの良いグラフになる。

改善後

コード

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [4,3] # 追加行: figsizeを指定

def gaussian_func(arr, constant, mean, sigma):
    return constant * np.exp(- (arr - mean) ** 2 / (2 * sigma ** 2))/(2*np.pi*sigma**2)**0.5

x = np.linspace(-5, 5, 1000)
y =gaussian_func(x, 1.0, 0, 1)
fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x,y,"k-",label="Total")
ax.set_xlim(-5, 5)
ax.set_ylim(0,None)
plt.legend()
plt.ylabel("Probability")
plt.xlabel("Data (cm)")
plt.savefig("test.png",dpi=300,bbox_inches="tight") #変更行: dpiとbbox_inchesを指定
plt.show()

グラフの要素をさらに操作したい場合はこの記事へ

phst.hateblo.jp

キヤノン CanoScan LiDE 400 のフラットベットサイズ

安いことで有名なキャノンのフラットベットスキャナーの CanoScan LiDE 400

personal.canon.jp

手元の実機で、縁から縁までの距離を測定した。結果は、ガラス面の有効サイズで 横 219 mm × 縦 308 mmだった。

用紙として載せられるのは 各1 mm減らして、218 mm × 308 mmまで。8.58268 インチ × 12.126 インチ。

公称では、レター紙 の 216 mm × 279 mm と A4 210 mm × 297 mm まで対応している。若干余裕のある作りになっている。

Windows11 + Visual Studio 2022で64bit版 GEANT4を動かす (2025年)

https://geant4.web.cern.ch/

Windowsで64bit版Geant4を入れたお話です。32bit版は過去記事参照

これまで、Windows用Geant4は32bit版しか提供されてきませんでしたが、11.3から64bitに対応したようです。

というわけで、インストールしてみましょう。

Geant4 64bit版入手

ダウンロードページからコンパイル済みのバイナリを入手し、インストールします。

https://cern.ch/geant4-data/releases/lib4.11.3.p02/WIN64-VC17.10.3-11.exe

PATHは手動で通すので、Do not add でよく、インストール先はデフォルトの C:\Program Files\Geant4-11.3 としておきましょう。x86 が外れましたね。

ユーザー環境変数の Path に C:\Program Files\Geant4-11.3\bin を追加しておきましょう。

Datasets の入手

https://geant4.web.cern.ch/download/11.3.2.html

からデータセットをダウンロードして展開し、ユーザー環境変数に変数と値をセットします。ここは以前と変わっていません。

G4ABLADATA=C:\geant4\data\G4SAIDDATA2.0
G4CHANNELINGDATA=C:\geant4\data\G4CHANNELING1.0
G4ENSDFSTATEDATA=C:\geant4\data\G4ENSDFSTATE3.0
G4INCLDATA=C:\geant4\data\G4INCL1.2
G4LEDATA=C:\geant4\data\G4EMLOW8.6.1
G4LEVELGAMMADATA=C:\geant4\data\PhotonEvaporation6.1
G4NEUTRONHPDATA=C:\geant4\data\G4NDL4.7.1
G4PARTICLEXSDATA=C:\geant4\data\G4PARTICLEXS4.1
G4PIIDATA=C:\geant4\data\G4PII1.3
G4RADIOACTIVEDATA=C:\geant4\data\RadioactiveDecay6.1.2
G4REALSURFACEDATA=C:\geant4\data\RealSurface2.2
G4SAIDXSDATA=C:\geant4\data\G4SAIDDATA2.0

Visual Studioでプロジェクトを作成

新しいプロジェクトを作成→ 空のプロジェクト C++ → 適当に名前を付けて作成します。まず、Release x64 にします。

ソースファイルに main.cpp を追加し

#include <G4coutDestination.hh>

int main() {
    G4cout << "Hello world!" << G4endl;
}

と書きます。

プロパティ → 構成プロパティ→VC++ディレクトリ

インクルードディレクトリに C:\Program Files\Geant4-11.3\include\Geant4 を追加

ライブラリディレクトリに C:\Program Files\Geant4-11.3\lib を追加

リンカーの入力の追加の依存ファイルに、C:\Program Files\Geant4-11.3\lib に存在するすべての lib のファイル名を書いておきます。

G4analysis.lib
G4clhep.lib
G4digits_hits.lib
G4error_propagation.lib
G4event.lib
G4expat.lib
G4FR.lib
G4geometry.lib
G4geomtext.lib
G4global.lib
G4GMocren.lib
G4graphics_reps.lib
G4intercoms.lib
G4interfaces.lib
G4materials.lib
G4mctruth.lib
G4modeling.lib
G4OpenGL.lib
G4parmodels.lib
G4particles.lib
G4physicslists.lib
G4processes.lib
G4ptl.lib
G4RayTracer.lib
G4readout.lib
G4run.lib
G4ToolsSG.lib
G4track.lib
G4tracking.lib
G4Tree.lib
G4vis_management.lib
G4visHepRep.lib
G4VRML.lib
G4zlib.lib

本当は必要なものだけでいいんですけどね。

ビルドすると

1>C:\Program Files\Geant4-11.3\include\Geant4\tls.hh(73,1): error C1189: #error:                                                                            "No Thread Local Storage (TLS) technology supported for this platform. Use sequential build !"

というエラーが出るはずです。

tls.hh の

#    elif defined(WIN32)
#      define G4ThreadLocalStatic static thread_local
#      define G4ThreadLocal thread_local

この部分を実行する必要があるので、x64版ですが仕方なく

C/C++→プリプロセッサ→プリプロセッサの定義 に WIN32 を追加します。

1>C:\Program Files\Geant4-11.3\include\Geant4\G4EnvironmentUtils.hh(145,24): error C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>(ソース ファイル 'main.cpp' をコンパイルしています)
1>C:\Program Files\Geant4-11.3\include\Geant4\G4EnvironmentUtils.hh(204,24): error C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>(ソース ファイル 'main.cpp' をコンパイルしています)

この古い関数に関するエラーを無視するため、プリプロセッサの定義 に _CRT_SECURE_NO_WARNINGS も追加しておきましょう。

C++ 17 以上にしろと言われるので、

1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\string_view(12): warning STL4038: The contents of <string_view> are available only with C++17 or later.

構成プロパティ→全般 で C++言語標準を、C++17標準 にします。

これでデバッグなしで開始などをすると、Hello world! が表示されるはずです。

サンプルB1を実行する

Geant4ぽいことをしてみよう。 Geant4 の examples から https://gitlab.cern.ch/geant4/geant4/-/tree/geant4-11.3-release/examples/basic/B1

メインのソースファイル(exampleB1.cc) 、srcフォルダ内のファイルとincludeフォルダ内のファイルをVisual Studioのプロジェクトに追加する。

run2.mac に 設定が書いてあるので、これを引数にして実行してみよう。

ここで設定されている、6 MeVのガンマ線を1000発打ち込んだ時、

/gun/particle gamma
/gun/energy 6 MeV
/run/beamOn 1000

結果は

--------------------End of Global Run-----------------------
 The run consists of 1000
 Cumulated dose per run, in scoring volume : 43.4009 picoGy  rms = 3.89683 picoGy
------------------------------------------------------------

43±4 pico Gy の doseがあったようだ。

210 MeVの陽子を1000発打ち込んだとき、

/gun/particle proton
/gun/energy 210 MeV
/run/beamOn 1000
--------------------End of Global Run-----------------------
 The run consists of 1000
 Cumulated dose per run, in scoring volume : 5.38591 nanoGy  rms = 144.936 picoGy
------------------------------------------------------------

5.4±0.1 nano Gy のdoseがあったようだ。

プリコンパイル済みバイナリではGUIは使えない。何が実行されているかは Geant4 B1 examples などで画像検索してほしい。

Windows で Wi-Fiのパスワード認証が通らないときは一旦SSIDを削除すべし

Windows 11で

パスワードを入力してください。 前回の接続の後で、いくつかの情報が変更されています。接続するには追加の情報が必要です。

でパスワードを要求されるが、パスワードを入れても接続中のまま失敗するケースがあった。

Windowsの設定から、Wi-Fiを検索するか、ネットワークとインターネットからWi-Fiを選び、既存のネットワークを管理から、接続しようとしている Wi-Fiスポットの名前(SSID) を見つけて削除する。

その後、SSIDを選択してパスワードを入れて接続すると、接続に成功した。