ITk strip QA (CCE)

ALiBaVaセットアップの使い方。

-- Shigeki Hirose - 2020-09-28

少々面倒なのだが、新しいPCでは原因不明のノイズが大きくDAQがまったくできないので、DAQは古いPCで行い、データの解析は新しいPCで行う。それぞれpc21、atlaspc21という名前がついているが、たいへんややこしいので以下旧PC、新PCと呼ぶ。なお、新PC(atlaspc21)はインターネット接続可能だが(IPアドレスは人に聞いてください)、旧PCは古いので独立なネットワークのみで新PCおよびラズパイにつないでいる。以下、独立な内部ネットワークでのIPアドレスのみを示してある。

PC起動時

PCなどが完全にシャットダウンされている状態から測定の準備をするには、以下の操作が必要。

  • 旧PC (192.168.1.3)新PC (192.168.1.4)を起動する
    • 操作は基本的に新PCから行う。新PCターミナルを3つ開く。1つはラズパイにログイン(いまはALiBaVa用PCからはssh atlasj@192.168.1.2でログインできる)。1つは旧PCにログインしてGPIB通信スクリプトを走らせる。1つは新PC上でオンラインモニターを走らせる。
    • ラズパイにログインしたら、/home/atlasj/work/stripQA/に移動し、まずcat /var/samba/trh/temp.datで温湿度を確認する。一番右の時刻を見て、現在時刻になっているようならOK。なっていなければスクリプトが止まっているので、sudo i2cget -y 1 0x35 0xDFで設定を通した後、nohup sudo python thermohydrometer.py &で温湿度モニタースクリプトを起動する(nohupをつけるとログアウト後もスクリプトを走らせているプロセスが生き続ける)。
    • 旧PCにログインする。ユーザーはatlasjではなくstripであることに注意!ログインしたら、まずsudo chmod 777 /dev/ttyUSB*で一般ユーザーもttyUSBを通した読み込み・書き込みをできるようにする。
    • 新PC用のターミナルで/home/atlasj/StripQA/buildに行き、"source bin/script/setup.sh"を実行。
  • ALiBaVa を起動する
    • 本体にスイッチはないので、ケーブルをさして起動。
    • 必ず、旧PCを起動した後に行うこと。でないと旧PCとのコミュニケーションがうまくいかずにエラーができる。
    • 旧PCにログインしているターミナルでalibava-guiコマンドを実行。エラーなくGUIが立ち上がればよい。以後、GUIは使わないので、File → Quitで終了。
      • 電源投入直後のalibava-gui起動では、ボードをリセットできないというエラーが出ることが多い。この場合は、GUIのRESETボタンによりリセットしてから、GUIを終了し、測定を続ける。
      • この時にエラーが出たら、通信できていない。その場合は、以下の"エラーが出た時の対処"を実行する。

測定をする

1. 治具にMini & MD8をセットする。バッチ番号、ウェハー番号の記録を忘れずに!金属プレートの上にチェッキングソースを載せる。

  • Mini & MD8ボードのコネクタがきちんとつながっているかは、横からのぞき込むとわかる。
2. 恒温槽のふたを閉め、PMTのHVを上げる。
  • 恒温槽を閉める前のチェックリスト。
    • センサーのバッチ番号とウェハー番号を記録したか?
    • チェッキングソースを治具に載せたか?
  • 850 Vまで上げる。スケーラーでトリガーレートが~300 Hzになっていることを確認する(DAQがせいぜい200 Hz程度なので、それ以上になっていれば問題ない)。
  • しっかり遮光されているので恒温槽が開いている間にHVが印加されていても基本的に問題はない。
注意:照射品の測定を始める前に、まずは未照射品を使ってADC-電子数の変換係数を求める必要がある。まだ行っていない場合には、まず未照射品をセットして以下の測定手順を実行し、未照射品の測定を完了したうえで、次項「ADCのキャリブレーション」の手順で変換係数を求める。キャリブレーションの時には未照射品であっても-20度で測定することに注意。(ALiVaBaボードのアンプが恒温槽内にあり、温度によってADCと電子数の変換係数が変わってしまうため。)

3. 恒温槽の温度を-20 degCに設定して「定時運転」を押し、-20 degCになるまで待つ。

  • 温度はラズパイ上でcat /var/samba/trh/temp.dat で確認できる(左から3つ目が温度[degC]、4つ目が湿度[%])。
4. -20 degCまで下がったら、一度バイアス電圧を700 V(未照射品であれば500 V)まで上がることを確認する。
  • もしブレークダウンしたら、その電圧を記録。その電圧が550 Vを十分に超えていたら、30分程度待ってから、ブレークダウンした電圧より50 V低い電圧まで測定する。これにはスクリプトの書き換えが必要なので、やり方がわからなければエキスパートを呼ぶ。550 Vを超えていない場合、あるいはエキスパートがすくに対応できない時には、このサンプルは諦めて別のサンプルの測定に移る。
5. 新PCで/home/atlasj/StripQA/runに行き、monitor.pyを実行。
  • 「PC起動時」にあるようにsetup.shをsourceしていれば、monitor.pyがコマンドとして認識されているはず。(この時点では、monitor.pyを実行しても何も表示されない。monitor.pyが走っている状態で、旧PCで測定を開始すると、自動でモニターが表示される。)
6. GPIB通信用スクリプトを起動。
  • 旧PCで/home/strip/StripQAに行き、python CCE_measurement_controller.py [batch number] [irrad or nonirrad] [operator]を実行。
    • [batch number]には、サンプルのバッチ番号を入れる。
    • [irrad or nonirrad]には、照射済みセンサーの場合はirrad、未照射センサーの場合はnonirradと入力する。
    • [operator]には自分を識別できる文字列を入れる(空白は受け付けないので注意。CERNアカウント名や研究室のアカウント名で良い)
  • スクリプトを実行すると、約2分かけて徐々に最大印加電圧(照射済みなら-700 V、未照射なら-500 V)までVbiasが上がるので、その間電流計に注意する。-20 degCの場合、照射済みなら大体18 uA @ -700 V、未照射済みなら大体2 uA @ -500 Vぐらい。
  • もし異常があれば、すぐにctrl + Cで止める!(ゆっくり2回)Vbiasは自動的に落ちるようになっているが、ちゃんと落ちているかすぐに確認し、もし落ちていなければ手で徐々に下げて落とす。
  • 問題なく最大印可電圧まで上げれば、自動的に測定が開始される。
以上で、残りの手順は自動的に走り、すべての測定点(照射済みサンプルであれば700 V → 600 V → 500 V → 400 V → 300 V)が測定される。万が一途中でエラーが出た時には、「エラーが出た時の対処」を試す。

7. すべての測定が終了したら、必ずVbiasが下がっていることを確認し(6517AのVOLTAGE SOURCE OPERATEランプが消灯している)、恒温槽の設定を20 degCにして温める。約15 degCまで上がったら、サンプルを取り出して次のサンプルに移る。

8. analysis.pyを走らせて、DBアップロード用ファイルを生成する。例)

analysis.py ../data/VPA38186_001/VPA38186_W01293_1_M1_MINI_CCE_001_temp.txt

引数には、*_temp.txtというファイルをとる。このファイルは、測定中にスクリプト(CCE_measurement_controller.py)によって自動的に生成されているはず。

ADCのキャリブレーション

たとえば、VPX32470とVPX32481(いずれも未照射品)をキャリブレーション用に-20度で測定したとする。以下のコマンドを使い、300 V以上のプラトー部分のADC値の平均が23,050 e-になるように、変換係数を求めることができる。

[atlasj@atlaspc21 run]$ calibration.py ../data/VPX32470_000 ../data/VPX32481_000
****************************************
Minimizer is Linear / Migrad
Chi2 = 7981.2
NDf = 9
p0 = 107.524 +/- 0.150218 
[[101.295, 0.380177], [101.406, 0.408082], [100.7, 0.370412], [99.8329, 0.381148], [98.0884, 0.376462], [130.558, 0.65694], [132.11, 0.753099], [132.988, 0.655305], [133.047, 0.720887], [131.525, 0.739086]]
Ave. : 214.37161142957441 +/- 0.2994924365147297

(上記の例では、あくまでデモンストレーションとして、測定条件の違いを気にせず2つのデータをランダムに引数にとっていることに注意。したがって出力結果にはあまり意味がない)

Ave. : の行が1 ADCカウント当たりの電子数を示す。この例であれば、214.37... [e-/ADC]となる。この値を、.../build/bin/script/python/config.pyのなかのconversion_factor()関数の返値に設定する。

def conversion_factor():
    return 214.37

これで、analysis.pyを走らせたときに、この値が変換係数として反映される。

新しいセンサーをローカルDBに登録する

刷新しました。新しい方法は ここを参照。

==================== 以下、古い情報なので参照しないこと! ====================

※このローカルDBはITk Pixel productionで使っているものとは全く無関係で、ストリップセンサー専用の小規模なものを意味していることに注意。

KEKにある(あった)センサーの情報は、ITkPDとは別に独自のMySQLデータベース(新PC)で管理し、測定や解析をするときにそこからセンサー情報を取得したり、複数のデータファイルがあるときにどのファイルをITkPDに上げるべきか(上げたか)がわかるようにしている。新しいセンサーが来たときは、以下の手順でセンサーを登録する。

1. "ITk strip TEGs stored in KEK"というGoogleスプレッドシート(リンクを知っていれば誰でも編集できてしまうため、ここには貼らない)にセンサー情報を登録する。

  • positionとscratchはわからなければ空欄でよい。そのほかの項目はすべて埋めないと、DBへの登録時にエラーになる。
  • 照射しないサンプルについては"Non-irrad"を選択し、Exposed doseは0に。Irrad dateは空欄でよい。
  • 照射前提のサンプルは、照射が終わって実照射線量まで記入する必要があることに注意!したがって、DBへの登録は照射が終わってから行う。
2. 新PCの/home/atlasj/StripQA/upload/itk-strip-sensor-kek-tsukuba-qcqa-scripts/QA/mysqlに行き、以下のコマンドを実行。

./get_spreadsheet.sh
./insert_sensors.py

3. /home/atlasjに移動し、以下のコマンドを実行。

./get_table.py

よくある問題とその対処

Alibavaがデバイスとして認識されていないっぽい(alibava-guiを実行した時点で通信エラーが出る)

まず、以下を試して、Alibavaが旧PCから認識されているかをチェックする。

  1. ls /dev/ttyUSB*
  2. lsusb
正しく認識されていれば、1. ではttyUSB0とttyUSB1が表示される。(どちらかがUSB-GPIBと、どちらかがAlibavaに対応。)また、2. では [後でチェックします] が表示される。

いずれも期待通りの表示が出なかった場合、そもそもAlibavaが認識されていない。次に、以下をチェックする。

  • Alibava本体の電源が入り、赤と緑のLEDが点灯しているか。(赤の方は、一度alibava-guiが正常に立ち上がって通信が確立していると、消えていることがあります。)
  • USBケーブルなどがしっかりと刺さっているか。(特にAlibava本体側は結構抜けやすい)
それでもだめなら、Alibavaの故障の可能性が高い。

Error: the temperature was measured XX seconds ago! というエラーが出る

CCE_measurement_controller.pyは、温湿度データが現在時刻の1分以内に測定されたものでないとこのエラーを出す。このエラーが出たときには、以下を確認する。

  • ラズパイ温度計が動いているか。動いていなければ動かす。
  • 旧PCの時刻があっているか。ずれていれば、以下の方法で修正。(旧PCはインターネットに接続できないので、NTPサーバーを利用した時刻同期を行えないため、このような問題が起こる。)
    • date -s "2022-01-01 00:00"(""内は現在時刻)で一時的に時刻を修正。
    • 永続的には、GUIで時刻を設定する。(旧PCはDVIでモニターに接続されており、手元のUSBスイッチでマウスとキーボードも新PCと切り替えられる。)

測定中にAlibavaがエラーを出した

注意:Error: value -1.0000000000e+00,1.0000000000e+00 cannot be interpreted as doubleというエラーは問題ないので無視すること!(本当は直した方が良いし、簡単に直せるはずなんですけどねぇ、ただの怠惰ですすみません。。。)

稀に、旧PCとAlibavaとの通信がうまくいかなくなってエラーが起きることがある。例えば、

03/24/2021 - 05:48:15 PM | Error [virtual int USBserial::open(const std::string&):67 Permission denied] Cannot open the device
03/24/2021 - 05:48:15 PM | Error [virtual int DAQmanager::open(const char*):96 Permission denied] Something failed when opening the device
process (8638) Error: value -1.0000000000e+00,1.0000000000e+00 cannot be interpreted as double
03/24/2021 - 05:48:15 PM | *** Sending Beetle configuration
03/24/2021 - 05:48:15 PM | Error [int Alibava::send_control(unsigned char):1264 Bad file descriptor] Failed sending control word 3
03/24/2021 - 05:48:15 PM | Error [int Alibava::beetle_header():350 Bad file descriptor] Failed sending [[BeetleConfig][BeetleConfig]]. rc=Write Error
03/24/2021 - 05:48:15 PM | Error [int Alibava::send_control(unsigned char):1264 Bad file descriptor] Failed sending control word 9
03/24/2021 - 05:48:15 PM | Error [int Alibava::do_acquisition(short unsigned int, Alibava::StateCode):756 Bad file descriptor] Failed sending command 9 with rc=Write Error
03/24/2021 - 05:48:15 PM | Error [virtual int [[DataRun][DataRun]]::loop(std::ostream&):60 Bad file descriptor] Error Write Error while acquiring. See messages above.
03/24/2021 - 05:48:15 PM | *** Reseting the board
03/24/2021 - 05:48:15 PM | Error [int Alibava::send_control(unsigned char):1264 Bad file descriptor] Failed sending control word ff
03/24/2021 - 05:48:15 PM | Error [int Alibava::software_reset():257 Bad file descriptor] Failed sending the software reset. rc=Write Error
### [[UnLoading][UnLoading]] Python module...
Finalizing Python
Error: /tmp/alibava-gui-status.txt seems incorrect; maybe alibava-gui was incorrectly finished or this file does not exist.

このようなエラーが出た時には、データを取得できずにCCE_measurement_controller.pyが終了する。この場合、以下の手順を試す。

1. まず、ターミナルの表示を遡り、何Vの測定中にこのエラーが出たかを記録する。

2. ALiBaVa の電源を抜く→10秒待って再度差す→30秒待つ。

3. 旧PCでsudo chmod 777 /dev/ttyUSB*を実行し、alibava-guiコマンドからGUIを立ち上げる。この時にエラーが出なければOK。File → QuitでGUIを終了。

4. 手順1で、エラーが最初から(照射済みサンプルであれば700 Vの測定中に)起きていたようであれば、再度python CCE_measurement_controller.py [batch number] [irrad or nonirrad] [operator]を実行して測定をやり直す。途中の測定点で起きていた場合には、その測定点からやり直せる。そのために、ls -ltr /home/strip/StripQA/dataを実行し、ラン番号を調べる。例えば、VPX32422_003とあったら、その測定はVPX32422に対するラン番号3であったことを意味する。python CCE_measurement_controller.py [batch number] [irrad or nonirrad] [operator] [run number]([run number]が先ほどまでなかった引数)を実行する。

ノイジーなチャンネルがあった

Hit distributionの中にノイジーなチャンネルが見えることがある。

この例の場合、178と179のノイズが突出している。これは、実はノイジーなのではなく、むしろワイヤーの断線などでセンサーがAlibavaに接続されていないことで起きる(Alibavaソフトウェアがやっているnoise subtractionのせいで、断線が起きているとむしろノイズが大きく見えてしまう。詳細は ITk-J sensor/module meeting 2021/02/16のスライドを参照)。

このような傾向が見えた場合、まずワイヤーが接続されているかをチェックする。測定データ中のチャンネル番号と実際のストリップ番号の対応は、以下の写真のようになっている。(2021//12/23現在)

ワイヤーが外れていた場合は、ワイヤーを打ち直して再度測定する。ワイヤーが外れていないのにノイジーなチャンネルがあった場合には、ひとまず次のサンプルを測定する。該当チャンネルがノイジーではなくなった場合、例えばコネクタの接続不良のような一時的な問題であった可能性が高く、後日再測定すればよい。もし同じチャンネルがやはりノイジーであれば、Alibava側の問題である可能性が高い。

テクニカル情報

ALiBaVa daughter cardのID

  • 今使っている方(2021/04/07時点):AS01-DB0A-L02B03
  • 使っていない方:10/16-12

その他の情報

参考資料
Edit | Attach | Watch | Print version | History: r14 < r13 < r12 < r11 < r10 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r14 - 2022-02-17 - AtlasjSilicon
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2022 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback