SuperKEKB用Bucket selection案
梶 裕志

2

Bucket selection at KEKB
MR

Linac timingにdelayを与えることで、入射するMR-bucketを選択

しかしLinac-RF(周波数:2856MHz)とMR-RF(508.9MHz)の位相が揃う頻度は10.38MHz
これが入射タイミングの頻度で、MR-RF周波数の1/49
Linac

Delay=0で入射できる
MR-bucketを#0と定義

508.9MHz

入射タイミングは、49bunch-clossingに1回

周波数:2856MHz

入射機会（回目）

Delay値

MR-bucket#

10 ns

0

296 ns493192 ns

98‥

‥

‥

105

10.0 μs

25‥

‥

‥

209

20.0 μs

1‥

‥

‥

5120

493μs

5071

そのMR-bucketの為のdelay値（ns）

KEKB（電子・陽電子）でMR各bucketの為のdelay値

右上図を一部拡大MR-bucket#<500μsで全bucketを選択可能
209210106105
1回目

2107
3108
43

そのMR-bucketの為のdelay値（ns）

MR-bucket# vs delay値

5120回目に#5071を選択

109511111067112
81139

SuperKEKBでも電子入射はこれに従う

1141011MR-bucket#

4SuperKEKB陽電子の場合陽電子はDR（RF周波数:508.9MHz）を通して入射⇒ MR-bucketごとに「前述のdelay値で出射できるDR-bucket」を使う。
DR

出射タイミングは、
49bunch-clossingに1回508.9MHz

入射機会（回目） Delay値

MR-bucket#

DR-bucket#

10 ns

00

296 ns49493192 ns

98

984288 ns

147

147

5384 ns

196

1966480 ns

24515‥‥‥‥

5120

493 μs5071

131

Delay=0で出射できる
DR-bucketを#0と定義
これらのDR-bucketを選べば、KEKBと同じdelay値で入射可能

5

陽電子入射でDR-bucket選択に課される制限
現実には入射したいMR-bucket#に都合の良いDR-bucket#が選べないこともある。

DR-bucketを#99-#129しか選べないとき、各MR-bucketを選択するためのdelay値
そのMR-bucketの為のdelay値（ns）（青はP3と一緒）

そのMR-bucket為のdelay値（ns）

例えばDR-bucket# = 0, 49が埋まっているとき
次の入射のために使えるDR-bucketは#99-#180(1-bunch), #99-#129(2-bunch)

右上図を一部拡大

MR-bucket#
調度良く使えるDR-bucketが埋まっているとき、次のtimingまで待たないといけないため、delay値が大きくなる。
特にSuperKEKBで可能な最大delay値（2ms）以上を必要とするbucketが2323bucketsある。

MR-bucket#

6

現在考えられる対処法
Bucket selection内のdelay計算routineは以下のオプションに対応できる様に作っておく。
Linac前半を空撃ちDR ⇒ MR入射だけを行い、DRを空にする- T=0直後に必ず必要なオプション- その分dead timeが生まれる
Linac後半のRF位相を変調（508.9MHz clock単位）- 例えば「DR:#1 ⇒ MR:#1」通常入射では ⇒ ‘delay=3.5ms’- RF位相を+2ns（+1clock）すれば ⇒‘delay=2ns’- T=0直後は無理?
DRで先出し後入れ- まず始めの500μsで「DR ⇒ MR」、DRを空にする- 「Linac前半 ⇒ DR」は必ずdelay>500μsとし、500μs以内に「DR ⇒ MR」できるDR-bucketを選ぶ- Linac前半でdelay>500μsが必要- T=0直後は無理?

7

Bucket selection全体像今日のところは「set delay」部分だけを議論-入射bucketが決定した後にそのdelay値を計算し、各機器にセットする。
以下の仕様を満たすものにする。
「1-bunch/2-bunchどちらでも対応」「前頁の3対処法すべてに対応」

このプログラムでのglobal（public）変数 – 案 –static int eleposi;=0(電子), =1(陽電子)static int nobunch;
1-bunch/2-bunch入射
static int dr_mask[230]; =0(入射できないDR-bucket)
static int delay_max;
delayの最大値
static int n_fill;
次に入射するMR-bucket#
static int delay0;
Linac前半のdelay値を一時保管
static int delay1[5];Linac後半のdelay値を一時保管
static int dr_cand[5];そのとき使うDR-bucket#
static int ngood;
条件を満たすdelay候補#static int delay_gun;
次の20msのLinac前半delay値
static int delay_dr;
次の20msのLinac後半delay値
static int delay_dr1;
次の次の20msのLinac後半delay値
static int offset_rf;
次の20msのLinac後半RFの位相変調値

8Example of delay calculation
MR-bucketを選ぶためのdelay値（508.9MHz単位）を5つ計算しglobal変数 “delay1[5]” に保存- 以下2つがinput値
bucket_n: 選ぶMR-bucket
n_offset: Linac後半RF位相のoffset（508.9MHz clock単位）- その候補が使うBR-bucketも “dr_cand[5]” に保存さらに候補が以下の条件を満たすか調べる- delay値が条件 “delay_max” 以下- BR-bucketが入射可能 “dr_mask[i]==1”- 条件を満たす候補が見つかった場合その番号をglobal変数 “ngood” に保存routine自身は以下の値を返す- 条件を満たす候補が見つかった場合: 1- 条件を満たす候補が見つからなかった場合: 0- Input値がおかしい場合: -1

9Example of delay calculation for DR

ここにoffsetが足される

DR-bucketを選ぶためのdelay値（508.9MHz単位）を計算しglobal変数 “delay0” に保存- 入射したいDR-bucket#がinput値- delayなしで出射できるbucketを#0としたので、本当はこの値にoffsetがあるはず。

10

Linac前半を空撃ち
ここにはまだないが、本当は、「入射MR-bucket#を決定し、それをn_fillに入れる」部分が必要
Linac後半のdelay値を計算- RF変調ができないときは（例えばT=0では）、2つ目の引数を常に0とすれば良い。
- 前述の通り、結果はdelay1[5],dr_cand[5]に保存される。
- このprogramは電子bucketのdelay値計算にも使える。
（常にdelay1[0]を使えば良い）

set_delay_pと連動して、delay0を基にdr_mask[230]をアップデートするprogramも必要

Linac前半・後半のdelay値をセット- このprogramの作成が必要- 例えば「次のプロセスでLinac前半は動かさない」時は引数を負にしておく。

11

DRで先出し後入れ必ず最短delay値で取り出せるDR-bucketを選び続ける。

毎回、DRを空にしてから次の陽電子を入射- そのDRが選べないときは、delay値を+509.6μsする。
- このoffsetの値は許されるdelayの最大値を考慮して決める。

12

Linac後半のRF位相を変調offsetを変えながらloopし、その中でdelay値が最短になるものを選ぶ13

Delay値の設定 – 案 –電子・陽電子どちらの場合もdelay_gun, delay_drがLinac前半, Linac後半のdelay値になる。
「revolution/49を受け取り、それを基準にdelay値だけ遅れて動作」ことを仮定
電子陽電子

delay_gunをLinac前半に設定
delay_drをLinac後半に設定（上記2つは値が負のとき動作しない様にする）
offset_rfをLinac後半RF位相の変調値に設定

前頁までで計算したdelay値をinputにする

delay_gunをLinac前半に設定
delay_drをLinac後半に設定（上記2つは値が負のとき動作しない様にする）
offset_rfをLinac後半RF位相の変調値に設定

部分はまだ未完成だが、関係各所と話し合って仕様・アルゴリズムを決めたい。

14

Bucket selection仕様まとめ – 案 –Delay値計算の方法（P8, P9）は今日の案で確定したい。
- Delay値は5つ計算し、その中から可能なdelay値を選ぶ。
- DR-bucket使用の可否も判定する。
- Linac後半RF位相の変調値もinput値になっている。
基本的に以下の方針で、「delay値決定（P10, P11, P12）」「その設定（P13）」routineを1つのprogramにまとめる。
- 指示されたMR-bucketに入射できないときは「空撃ち」する。
- 「DRで先出し後入れ」「Linac後半のRF変調」は、if文で場合分け。
「入射bucketを決め、上述programにdelay値を計算」させるmain programを作成- 「BCE/non-BCE」「1-bunch/2-bunch」もここで決定- 「DRで先出し後入れ」「Linac後半のRF変調」を指定可能にする。
- 外部からのinput値で、オペレータもそれを変更可能にする。

エキスパートが、入射方法の特徴を熟知し、このprogramをメンテナンスする。
- 陽電子入射を50Hzで行うならば、「DR先出し後入れ」「Linac後半RF変調」の両方が必要- 「空撃ち」の頻度を抑える様に、programを最適化

15

Bucket selectionのoutput値 – 案 –各機器に与えるタイミング情報は以下の仕様にしたい- すべて508.9MHzのカウント数- revolution/49信号からのdelay値- Delay値<0のときは次の20msでは動作しない（陽電子空撃ち用）。
これとは別にLinac後半RFの位相の変調値も与える。
- 508.9MHzのカウント数- 変調しないときは “0” を渡す ← T=0でもこの値を受け取ってほしい16

Summary
KEKBでは、最大500μsの入射delayにより、電子・陽電子の全bucketを選択可能
SuperKEKBでは、- 電子入射はこれに従う。
- 陽電子入射は（適したDR-bucketが使えないとき）delay値が大きくなる。
陽電子のdelay計算アルゴリズムを考え、sourceの例を作成した。
- delay値は5つ計算し、その中から可能なdelay値を選択- 「DR先出し後入れ」「Linac後半のRF変調」の場合にdelay値を計算可能- 可能なdelay値がない場合は、陽電子を空撃ちする。
- Output値は「Linac前半/後半のdelay値」「Linac後半のRF変調値」
今後は以下のプログラムも製作する。
- Bucket selectionのmain program- Delay値を各機器に受け渡すprogram- 入射できないDR-bucketをマスクするprogram- 陽電子の50Hz入射に対応
そのために各機器の担当者に提案し、仕様を決定したい。