133 double xscale = (gPad->XtoAbsPixel(gPad->GetUxmax()) - gPad->XtoAbsPixel(gPad->GetUxmin()) + 1.0)/
134 (gPad->GetUxmax() - gPad->GetUxmin());
135 double yscale = (gPad->YtoAbsPixel(gPad->GetUymax()) - gPad->YtoAbsPixel(gPad->GetUymin()) + 1.0)/
136 (gPad->GetUymax() - gPad->GetUymin());
151 double pixlen = std::sqrt(pixdx*pixdx + pixdy*pixdy);
166 double xscale = (gPad->XtoAbsPixel(gPad->GetUxmax()) - gPad->XtoAbsPixel(gPad->GetUxmin()) + 1.0)/
167 (gPad->GetUxmax() - gPad->GetUxmin());
168 double yscale = (gPad->YtoAbsPixel(gPad->GetUymax()) - gPad->YtoAbsPixel(gPad->GetUymin()) + 1.0)/
169 (gPad->GetUymax() - gPad->GetUymin());
173 double pixlen = std::sqrt(pixdx*pixdx + pixdy*pixdy);
177 double perpthet = std::atan2(pixdx,-pixdy);
230 double y2 =
fFinal->fDrawPos;
235 double length = std::sqrt(dx*dx + dy*dy);
239 double pixx1 = XtoAbsPixel(x1);
240 double pixx2 = XtoAbsPixel(x2);
241 double pixy1 = YtoAbsPixel(y1);
242 double pixy2 = YtoAbsPixel(y2);
247 double pixdx = pixx2 - pixx1;
248 double pixdy = pixy2 - pixy1;
251 double pixlen = std::sqrt(pixdx*pixdx + pixdy*pixdy);
255 double perpthet = std::atan2(pixdx,-pixdy);
256 double topwidth =
GetWidth()/2.0/std::cos(perpthet);
260 SetPoint(0, AbsPixeltoX(pixx1 - topwidth), AbsPixeltoY(pixy1));
261 SetPoint(1, AbsPixeltoX(pixx1 + topwidth), AbsPixeltoY(pixy1));
263 double headposx = x1 + dx*(length);
264 double headposy = y1 + dy*(length);
266 double pixheadposx = XtoAbsPixel(headposx) - pixdx*
GetHeadLength();
267 double pixheadposy = YtoAbsPixel(headposy) - pixdy*
GetHeadLength();
269 SetPoint(2, AbsPixeltoX(pixheadposx +
GetWidthX()/2.0),
270 AbsPixeltoY(pixheadposy +
GetWidthY()/2.0));
276 SetPoint(6, AbsPixeltoX(pixheadposx -
GetWidthX()/2.0),
277 AbsPixeltoY(pixheadposy -
GetWidthY()/2.0));
279 PaintPolyLine(7, GetX(), GetY(),
"F");
290 TString transition_string;
291 transition_string.Form(
"%3.2g",
fWidth);
294 fLabel->SetText(label_x, label_y, transition_string.Data());
299 fLabel->SetTextColor(kBlack);
301 fLabel->GetBoundingBox(w,h);
302 fLabelBox->SetX1(gPad->PixeltoX(gPad->XtoPixel(label_x) - w/2 - 5));
303 fLabelBox->SetX2(gPad->PixeltoX(gPad->XtoPixel(label_x) + w/2 + 5));
304 fLabelBox->SetY1(gPad->AbsPixeltoY(gPad->YtoAbsPixel(label_y) + h/2 + 5));
305 fLabelBox->SetY2(gPad->AbsPixeltoY(gPad->YtoAbsPixel(label_y) - h/2 - 5));
307 fLabelBox->SetFillColorAlpha(kWhite, 0.7);
340 if (!gPad->IsEditable())
348 gPad->SetCursor(kPointer);
354 px1 = gPad->XtoAbsPixel(
GetX1());
355 px2 = gPad->XtoAbsPixel(
GetX2());
356 py1 = gPad->YtoAbsPixel(
GetY1());
357 py2 = gPad->YtoAbsPixel(
GetY2());
359 double d1 = abs(px1-
px) + abs(py1-
py);
363 gPad->SetCursor(kPointer);
367 double d2 = abs(px2-
px) + abs(py2-
py);
371 gPad->SetCursor(kPointer);
379 double abspos = (gPad->AbsPixeltoX(
px)-gPad->AbsPixeltoX(px1old) + gPad->AbsPixeltoX(px1));
384 double abspos = (gPad->AbsPixeltoX(
px)-gPad->AbsPixeltoX(px2old) + gPad->AbsPixeltoX(px2));
388 gPad->Modified(kTRUE);
429 std::ifstream infile(filename);
432 while (std::getline(infile, line)) {
433 if (line.size() == 0) {
continue; }
434 if (line[0] ==
'#') {
continue; }
435 if (line[0] ==
';') {
continue; }
437 std::stringstream
ss(line);
449 std::string rightlab;
451 ss >> name >> energy >> left >> right >> leftlab >> rightlab;
453 AddState(name, energy, left, right, leftlab, rightlab);
456 else if (label ==
"E") {
457 double extleft, extright;
459 if (
ss >> name >> extleft >> extright) {
460 fStates[name].SetExtension(extleft, extright);
463 else if (label ==
"T") {
464 std::string name_init;
465 std::string name_fin;
472 ss >> name_init >> name_fin >> width >> start >> stop >> labelpos >> color;
474 EColor col =
static_cast<EColor
>(color);
476 AddTransition(name_init, name_fin, width, start, stop, labelpos, col);
482 std::ofstream outfile(filename);
484 outfile << std::setw(5) << std::left <<
"L"
485 << std::setw(10) << std::left << state.second.GetName()
486 << std::setw(10) << std::left << state.second.fEnergy
487 << std::setw(10) << std::left << std::setprecision(5) << state.second.fLeft
488 << std::setw(10) << std::left << std::setprecision(5) << state.second.fRight
489 << std::setw(10) << std::left << state.second.fLeftLab
490 << std::setw(10) << std::left << state.second.fRightLab;
491 outfile << std::endl;
494 if (state.second.extension) {
495 outfile << std::setw(5) << std::left <<
"E"
496 << std::setw(10) << std::left << state.second.GetName()
497 << std::setw(10) << std::left << std::setprecision(5) << state.second.fExtLeft
498 << std::setw(10) << std::left << std::setprecision(5) << state.second.fExtRight << std::endl;
503 outfile << std::setw(5) << std::left <<
"T"
504 << std::setw(10) << std::left << transition.fInitial->GetName()
505 << std::setw(10) << std::left << transition.fFinal->GetName()
506 << std::setw(10) << std::left << transition.fWidth
507 << std::setw(10) << std::left << std::setprecision(5) << transition.fStart
508 << std::setw(10) << std::left << std::setprecision(5) << transition.fStop
509 << std::setw(10) << std::left << std::setprecision(5) << transition.fLabelPos
510 << std::setw(10) << std::left << transition.GetFillColor() << std::endl;
515 void State::AddTransition(
const char *name_fin,
double width,
double start,
double stop,
double labelpos, EColor color) {
516 std::string nf(name_fin);
517 fScheme->AddTransition(GetName(), nf, width, start, stop, labelpos, color);