皮提亚的bbbar对的质量不变性
Mass invarint of bbbar pair by Pythia
我不是C++专家,但我尝试制作一个简单的程序来计算并绘制PP碰撞中Pythia的BBBAR对质量不变分布(pp -> bbbar),从 .lhe 文件中获取事件。
现在关于此处附带的程序,我进行了以下步骤,但是直方图中未显示任何内容..可能是循环中有什么问题..步骤:
- 预订了直方图
- 启动事件循环
- 定义 iBottom 以解释 b 衰减-启动粒子循环
- 定义 B , bbar-启动粒子循环
- 绘制轮廓以查找配对
- 计算 invM。
所以有什么帮助吗? 知道如何制作这样的程序如果有人知道皮提亚.
// The program
#include <iostream>
// Header file to access Pythia 8 program elements.
#include "Pythia.h"
// ROOT, for histogramming.
#include "TH1.h"
// ROOT, for interactive graphics.
#include "TVirtualPad.h"
{#include "TApplication.h"
// ROOT, for saving file.
#include "TFile.h"
using namespace Pythia8;
int main(int argc, char* argv[]) {
// Create the ROOT application environment.
TApplication theApp("hist", &argc, argv);
// create Pythia object and set up generation
Pythia pythia;
pythia.readString("PartonLevel:MI = off");
pythia.init("events.lhe");
pythia.readString("Beams:eCM = 14000.");
pythia.readString("PhaseSpace:pTHatMin = 20.");
pythia.init();
// Create file on which histograms can be saved.
TFile* outFile = new TFile("hist.root", "RECREATE");
TH1F *Mbbbar = new TH1F("MbB","MbB invariant mass", 0,0.,2000.);
// Begin event loop. Genera1te event; skip if generation aborted.
for (int iEvent = 0; iEvent<100; ++iEvent)
{
int iBottom = 0;
if(!pythia.next()) continue;
for (int i = 0; i< pythia.event.size(); ++i)
{
if (pythia.event[i].id() == 5) iBottom = i;
// Look for BQuarks among decay products.
vector<int> b, bbar;
for (int i = 0; i< pythia.event.size(); ++i) {
int id = pythia.event[i].id();
if (id == 5) b.push_back(i);
if (id == -5) bbar.push_back(i);
// Check whether pair(s) present.
int N = bbar.size();
int n = b.size();
if (N + n > 1) {
// Fill masses of BQuarks pair.
for (int i1 = 0; i1 < n - 1; ++i1)
for (int i2 = 0; i2 < N - 1; ++i2)
Mbbbar->Fill(
(pythia.event[b[i1]].p() +pythia.event[bbar[i2]].p()).mCalc() );
}
}
}
}
pythia.stat();
Mbbbar->Draw();
std::cout << "nDouble click on the histogram window to quit.n";
gPad->WaitPrimitive();
// Save histogram on file and close file.
Mbbbar->Write();
delete outFile;
// Done
return 0;
}
谢谢萨菲娜兹
您的问题似乎既是关于特定领域的知识,也是关于您在这里很难找到的编程知识。最好尝试用基本术语解释您的意图,并且只询问如何在C++中实现这些语义。
对于初学者来说,看起来你已经不必要地嵌套了许多循环,这导致了奇怪的语义(你也应该小心声明具有相同名称的多个int i
)。我试图猜测你想做什么,并用评论解释一下
// Begin event loop. Genera1te event; skip if generation aborted.
int numEvent = 0;
int maxEvents = 100;
//as long as pytha.next() generates something and we have processed less than 100 events
while(pythia.next() && numEvent++ < maxEvents){
vector<int> b, bbar;
//for each particle in the event
for (int i = 0; i < pythia.event.size(); ++i){
//add the particle index to b if the id() is 5
//otherwise add it to bbar
switch(pythia.event[i].id()){
case 5:
b.push_back(i);
break;
case -5:
bbar.push_back(i);
break;
}
}
int bSize = b.size();
int bbSize = bbar.size();
//for every possible pair of id()=5 and id()=-5 particles found during this event
for (int i1 = 0; i1 < bSize; ++i1)
for (int i2 = 0; i2 < bbSize; ++i2)
Mbbbar->Fill(
(pythia.event[b[i1]].p() + pythia.event[bbar[i2]].p()).mCalc());
}
此外,您应该逐步检查您认为已执行的代码是否被执行。如果由于某种原因无法在调试模式下执行此操作,您还可以打印调试消息,例如:
std::cout << "starting event loop" << std::endl;
while(pythia.next() && numEvent++ < maxEvents){
std::cout << "starting event cycle number " << numEvent << " with " << pythia.event.size() << " particles" << std::endl;
//...
std::cout << "found " << b.size() << " particles with id()=5" << std::endl;
std::cout << "found " << bbar.size() << " particles with id()=-5" << std::endl;
for (int i1 = 0; i1 < bSize; ++i1)
//...
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 我的神经网络不起作用 [XOR 问题]
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- QSqlquery prepare()和bindvalue()不工作
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 检查输入是否不是整数或数字
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 使用不带参数的函数访问结构元素
- C++中右值引用的分配和不变性
- 关于 Python 元组的不变性
- C++ 类的不变性和优缺点
- 易变性只是不符合任何范式
- 为什么这个不变性会变成假的
- 皮提亚的bbbar对的质量不变性
- 使用const公共成员强制所有实例的不变性是合理的做法吗
- C++-具有结构共享/不变性的类映射数据结构