/*****************************************************************************
* Project: RooFit *
* Package: RooFitCore *
* File: $Id: RooGraphEdge.cc,v 1.12 2005/06/20 15:44:53 wverkerke Exp $
* Authors: *
* WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
* DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
* *
* Copyright (c) 2000-2005, Regents of the University of California *
* and Stanford University. All rights reserved. *
* *
* Redistribution and use in source and binary forms, *
* with or without modification, are permitted according to the terms *
* listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
*****************************************************************************/
#include "RooFit.h"
#include "RooGraphEdge.h"
#include "RooGraphEdge.h"
#include "TLine.h"
#include "TArrow.h"
#include "Riostream.h"
#include <fstream>
///////////////////////////////////////////////////////////////////////////////
//RooGraphEdge: //
// //
//The edge class is a subset of the node class and an edge can only be made //
//if there are two nodes to connect it to. It is used to show how the nodes //
//depend on each other, and to help display the topology of the graph. They //
//are also necessary for finding the graph lenght for the springs. //
///////////////////////////////////////////////////////////////////////////////
ClassImp(RooGraphEdge)
RooGraphEdge::RooGraphEdge()
{
//Default constructor for an edge
fn1 = 0;
fn2 = 0;
fes = "aLine";
}
RooGraphEdge::RooGraphEdge(RooGraphNode *n1, RooGraphNode *n2)
{
//Edge standard constructor with default edge type
fn1 = n1;
fn2 = n2;
fes = "aLine";
}
RooGraphEdge::RooGraphEdge(RooGraphNode *n1, RooGraphNode *n2, TString es)
{
//Edge standard constructor
fn1 = n1;
fn2 = n2;
fes = es;
}
void RooGraphEdge::print()
{
//prints the names of the nodes the edge is connected to to the screen
cout << fn1->GetName() << ", " << fn2->GetName() << endl;
}
void RooGraphEdge::read(ifstream &file)
{
//gets the information needed to draw an edge from a file of a special format
TString ies;
TString firstnode;
TString secondnode;
file.seekg(4, ios::cur
file >> ies >> firstnode >> secondnode;
char eol;
file.get(eol);
fes = ies;
ffirstnode = firstnode;
fsecondnode = secondnode;
}
void RooGraphEdge::Set1stNode(RooGraphNode *n1)
{
//sets the first node for the edge
fn1 = n1;
}
void RooGraphEdge::Set2ndNode(RooGraphNode *n2)
{
//sets the second node for the edge
fn2 = n2;
}
void RooGraphEdge::Connect()
{
//draw the edge to the canvas in the form of either a line, or arrow
double x1 = fn1->GetX1();
double y1 = fn1->GetY1();
double x2 = fn2->GetX1();
double y2 = fn2->GetY1();
if (fes=="aLine"){
TLine *l = new TLine(x1,y1,x2,y2);
l->Draw();
}
if (fes=="Arrow"){
TArrow *a = new TArrow(x1,y1,x2,y2,0.02F,"|>");
a->Draw();
}
}
void RooGraphEdge::Connect(int color)
{
//draws the egde to the canvas with the given color
double x1 = fn1->GetX1();
double y1 = fn1->GetY1();
double x2 = fn2->GetX1();
double y2 = fn2->GetY1();
if (fes=="aLine"){
TLine *l = new TLine(x1,y1,x2,y2);
l->SetLineColor(color);
l->Draw();
}
if (fes=="Arrow"){
TArrow *a = new TArrow(x1,y1,x2,y2,0.02F,"|>");
a->SetLineColor(color);
a->Draw();
}
}
void RooGraphEdge::Connect(RooGraphNode *n1, RooGraphNode *n2)
{
//draws the edge to the screen with the given imput nodes
fn1 = n1;
fn2 = n2;
double x1 = fn1->GetX1();
double y1 = fn1->GetY1();
double x2 = fn2->GetX1();
double y2 = fn2->GetY1();
if (fes=="aLine"){
TLine *l = new TLine(x1,y1,x2,y2);
l->Draw();
}
if (fes=="Arrow"){
TArrow *a = new TArrow(x1,y1,x2,y2,0.02F,"|>");
a->Draw();
}
}
double RooGraphEdge::GetInitialDistance()
{
//Returns the length of the edge
const double x1 = fn1->GetX1();
const double y1 = fn1->GetY1();
const double x2 = fn2->GetX1();
const double y2 = fn2->GetY1();
double ilength = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
return ilength;
}
TObject *RooGraphEdge::GetType(TList *padlist)
{
//returns the object that represents the edge on the canvas
TObject *obj = padlist->First();
while(obj != 0)
{
if (obj->InheritsFrom("TLine"))
{
TLine *line = dynamic_cast<TLine*>(obj);
double x1 = line->GetX1();
double y1 = line->GetY1();
double x2 = line->GetX2();
double y2 = line->GetY2();
double X1 = fn1->GetX1();
double Y1 = fn1->GetY1();
double X2 = fn2->GetX1();
double Y2 = fn2->GetY1();
if (x1==X1&&y1==Y1&&x2==X2&&y2==Y2)
{ obj = line; break; }
}
if (obj->InheritsFrom("TArrow"))
{
TArrow *arrow = dynamic_cast<TArrow*>(obj);
double x1 = arrow->GetX1();
double y1 = arrow->GetY1();
double x2 = arrow->GetX2();
double y2 = arrow->GetY2();
double X1 = fn1->GetX1();
double Y1 = fn1->GetY1();
double X2 = fn2->GetX1();
double Y2 = fn2->GetY1();
if (x1==X1&&y1==Y1&&x2==X2&&y2==Y2)
{ obj = arrow; break; }
}
obj = padlist->After(obj);
}
return obj;
}
double RooGraphEdge::GetX1()
{
//returns the value for x1
const double x1 = fn1->GetX1();
return x1;
}
double RooGraphEdge::GetY1()
{
//returns the value for y1
const double y1 = fn1->GetY1();
return y1;
}
double RooGraphEdge::GetX2()
{
//returns the value for x2
const double x2 = fn2->GetX1();
return x2;
}
double RooGraphEdge::GetY2()
{
//returns the value for y2
const double y2 = fn2->GetY1();
return y2;
}
void RooGraphEdge::SwitchNodes()
{
//switches the nodes of the edge
RooGraphNode *n1 = fn1;
RooGraphNode *n2 = fn2;
fn1 = n2;
fn2 = n1;
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.