27 #include "TGTextView.h" 43 TGMainFrame(gClient->GetRoot(), 470, 240),
48 SetWindowName(
"Invariant Mass Dialog");
49 SetCleanup(kDeepCleanup);
51 m_text =
new TGTextView(
this);
52 AddFrame(
m_text,
new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 1, 1, 1, 1));
54 m_button =
new TGTextButton(
this,
"Calculate");
55 AddFrame(
m_button,
new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 1, 1, 1, 1));
57 m_button->Connect(
"Clicked()",
"FWInvMassDialog",
this,
"Calculate()");
101 TGText *txt =
m_text->GetText();
105 txt->InsText(TGLongPosition(0, 0), line);
110 txt->InsText(TGLongPosition(0, txt->RowCount()), line);
125 addLine(TString::Format(
" %d items in selection", (
int) sted.size()));
127 addLine(
"--------------------------------------------------+--------------");
128 addLine(
" px py pz pT | Collection");
129 addLine(
"--------------------------------------------------+--------------");
136 double sum_len_xy = 0;
140 for (std::set<FWModelId>::const_iterator
i = sted.begin();
i != sted.end(); ++
i, ++
n)
144 TClass *model_class =
const_cast<TClass*
>(
i->item()->modelType());
145 void *model_data =
const_cast<void*
> (
i->item()->modelData(
i->index()));
151 (model_class->DynamicCast(rc_class, model_data));
156 v.SetXYZ(rc->
px(), rc->
py(), rc->
pz());
161 (model_class->DynamicCast(rtb_class, model_data));
166 v.SetXYZ(rtb->
px(), rtb->
py(), rtb->
pz());
173 sum_len += TMath::Sqrt(v.mag2());
174 sum_len_xy += TMath::Sqrt(v.perp2());
176 line = TString::Format(
" %+10.3f %+10.3f %+10.3f %10.3f", v.x(), v.y(), v.z(), TMath::Sqrt(v.perp2()));
181 line = TString::Format(
" -------- not a Candidate or TrackBase --------");
183 line += TString::Format(
" | %s[%d]",
i->item()->name().c_str(),
i->index());
187 if (n == 0) first =
v;
else if (n == 1) second =
v;
190 addLine(
"--------------------------------------------------+--------------");
191 addLine(TString::Format(
" %+10.3f %+10.3f %+10.3f %10.3f | Sum", sum.x(), sum.y(), sum.z(), TMath::Sqrt(sum.perp2())));
193 addLine(TString::Format(
"m = %10.3f", TMath::Sqrt(
TMath::Max(0.0, sum_len * sum_len - sum.mag2()))));
194 addLine(TString::Format(
"mT = %10.3f", TMath::Sqrt(
TMath::Max(0.0, sum_len_xy * sum_len_xy - sum.perp2()))));
195 addLine(TString::Format(
"HT = %10.3f", sum_len_xy));
198 addLine(TString::Format(
"deltaPhi = %+6.4f",
deltaPhi(first.Phi(), second.Phi())));
199 addLine(TString::Format(
"deltaEta = %+6.4f", first.Eta()- second.Eta()));
200 addLine(TString::Format(
"deltaR = % 6.4f",
deltaR(first.Eta(), first.Phi(), second.Eta(), second.Phi())));
const std::set< FWModelId > & selected() const
virtual double pz() const =0
z coordinate of momentum vector
double px() const
x coordinate of momentum vector
~FWInvMassDialog() override
FWInvMassDialog(FWSelectionManager *sm)
U second(std::pair< T, U > const &p)
virtual double py() const =0
y coordinate of momentum vector
void addLine(const TString &line)
void CloseWindow() override
double pz() const
z coordinate of momentum vector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
virtual double px() const =0
x coordinate of momentum vector
FWSelectionManager * m_selectionMgr
double py() const
y coordinate of momentum vector