27 #include "TGTextView.h" 43 : TGMainFrame(gClient->GetRoot(), 470, 240), m_selectionMgr(sm), m_text(nullptr), m_button(nullptr) {
44 SetWindowName(
"Invariant Mass Dialog");
45 SetCleanup(kDeepCleanup);
47 m_text =
new TGTextView(
this);
48 AddFrame(
m_text,
new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 1, 1, 1, 1));
50 m_button =
new TGTextButton(
this,
"Calculate");
51 AddFrame(
m_button,
new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 1, 1, 1, 1));
53 m_button->Connect(
"Clicked()",
"FWInvMassDialog",
this,
"Calculate()");
90 TGText *txt =
m_text->GetText();
93 txt->InsText(TGLongPosition(0, 0),
line);
96 txt->InsText(TGLongPosition(0, txt->RowCount()),
line);
107 addLine(TString::Format(
" %d items in selection", (
int)sted.size()));
109 addLine(
"--------------------------------------------------+--------------");
110 addLine(
" px py pz pT | Collection");
111 addLine(
"--------------------------------------------------+--------------");
118 double sum_len_xy = 0;
123 for (std::set<FWModelId>::const_iterator
i = sted.begin();
i != sted.end(); ++
i, ++
n) {
126 TClass *model_class =
const_cast<TClass *
>(
i->item()->modelType());
127 void *model_data =
const_cast<void *
>(
i->item()->modelData(
i->index()));
136 v.SetXYZ(rc->
px(), rc->
py(), rc->
pz());
140 if (rtb !=
nullptr) {
142 v.SetXYZ(rtb->
px(), rtb->
py(), rtb->
pz());
148 sum_len += TMath::Sqrt(
v.mag2());
149 sum_len_xy += TMath::Sqrt(
v.perp2());
151 line = TString::Format(
" %+10.3f %+10.3f %+10.3f %10.3f",
v.x(),
v.y(),
v.z(), TMath::Sqrt(
v.perp2()));
154 line = TString::Format(
" -------- not a Candidate or TrackBase --------");
156 line += TString::Format(
" | %s[%d]",
i->item()->name().c_str(),
i->index());
166 addLine(
"--------------------------------------------------+--------------");
168 " %+10.3f %+10.3f %+10.3f %10.3f | Sum", sum.x(), sum.y(), sum.z(), TMath::Sqrt(sum.perp2())));
170 addLine(TString::Format(
"m = %10.3f", TMath::Sqrt(
TMath::Max(0.0, sum_len * sum_len - sum.mag2()))));
171 addLine(TString::Format(
"mT = %10.3f", TMath::Sqrt(
TMath::Max(0.0, sum_len_xy * sum_len_xy - sum.perp2()))));
172 addLine(TString::Format(
"HT = %10.3f", sum_len_xy));
double px() const
x coordinate of momentum vector
virtual double pz() const =0
z coordinate of momentum vector
double py() const
y coordinate of momentum vector
~FWInvMassDialog() override
FWInvMassDialog(FWSelectionManager *sm)
U second(std::pair< T, U > const &p)
void addLine(const TString &line)
void CloseWindow() override
virtual double py() const =0
y coordinate of momentum vector
virtual double px() const =0
x coordinate of momentum vector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
double pz() const
z coordinate of momentum vector
const std::set< FWModelId > & selected() const
FWSelectionManager * m_selectionMgr