Higgs Candidateの質量分布を作る
次の8つのファイルをダウンロードしてください。(code05)
main.cxx
ZZ.h
ZZ.cxx
signal.script
Makefile
HiggsUserInfo.h
HiggsUserInfo.cxx
Sort.icc
とりあえず、コンパイルして実行してみてください。
HiggsMassが先程の解のはずです。
今回のコードには、あるイベントにある複数のHiggsから次の条件に会うHiggsを
選択する方法も含まれている。その場合のHiggs質量分布はBestHiggsMassです。
条件: 複数のHiggs候補がある場合、Zの質量(PDG Z Mass=91.18760GeV)に
1番近いものと2番目に近いものを使ったものだけを選択する。
流れ:
- Isolated Muonを選ぶ。
- 2つのMuonからZを作る。
- 2つのZからHiggsを作る。
- 作ったHiggsをチェックして条件に合うものだけ選ぶ。
- HiggsをZ massに近い順に並びかえる。
- 最も条件に会うHiggsだけをHistogramにFillする。
詳細:
2つのZからHiggsを作るときに、次の値も計算した。
delta M = |1つ目のZ mass - PDG Z mass|+|2つ目のZ mass - PDG Z mass|
つまり、PDG Z massからどの程度離れているか? という情報を計算したことになる。
この情報をHiggsに持たせるために、ParticleUserInfoクラスを利用している。
ParticleUserInfoを使う場合は、Copy constructorとoperator =をきちんと実装して
更にclone()というメンバ関数も実装する必要がある。
実際、このclone()という関数を用いることでParticleクラス内部でコピーを行っている。
例のように書く限りメモリーリークはないと思います。(new/deleteはParticleクラス内部で面倒を見ています。)
自分が作ったUserInfoを利用するときは、安全のためDynamic castを使ってください。
Higgs Candidateをチェックする関数では、次の2つをチェックしています。
1. 子供が重なって使われていないか?
2. Z Candidateの質量が条件にあっているか?
Higgs Candidateを並びかえるときは、STLに含まれているSort機能を使っています。
これを使うためには、まず #include をインクルードします。
次に、Sort用のクラスを準備します。これは真似をすれば十分です。
小さい順に並べるときは、第1引数のParticleが小さいときに真(ture)を返すようにします。
class Low2HighByHiggsDifMass
{
public:
bool operator () (const Particle *t1, const Particle *t2) const {
return (dynamic_cast(t1->userInfo())->GetDifMass() <
dynamic_cast(t2->userInfo())->GetDifMass());
}
};
上記の方法で1つだけHiggsを選択した場合は、このよう(10000イベント)になります。
Resolutionが悪いね...実際は、10GeVを6GeVにしてZ mass constraintすれば改善します。
また、MuonのPt分布はこのよう(10000イベント)になります。
Go to the next page
Go to the previous page
Go to the index page
jtanaka