SNAP Library 2.1, User Reference  2013-09-25 10:47:25
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
TGStat Class Reference

#include <gstat.h>

List of all members.

Classes

class  TCmpByVal

Public Types

typedef TQuad< TStr, TStr,
TStr, TGpScaleTy
TPlotInfo

Public Member Functions

 TGStat (const TSecTm &GraphTm=TSecTm(), const TStr &GraphName=TStr())
 TGStat (const PNGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphName=TStr())
 TGStat (const PUNGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphName=TStr())
 TGStat (const PNEGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphName=TStr())
template<class PGraph >
 TGStat (const PGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphName=TStr())
 TGStat (const TGStat &GStat)
 TGStat (TSIn &SIn)
void Save (TSOut &SOut) const
template<class PGraph >
PGStat New (const PGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphNm=TStr())
PGStat Clone () const
TGStatoperator= (const TGStat &GStat)
bool operator== (const TGStat &GStat) const
bool operator< (const TGStat &GStat) const
int GetYear () const
int GetMonth () const
int GetDay () const
int GetHour () const
int GetMin () const
int GetSec () const
TStr GetTmStr () const
void SetTm (const TSecTm &GraphTm)
TStr GetNm () const
void SetNm (const TStr &GraphName)
int GetTime (const TTmUnit &TimeUnit) const
int GetVals () const
bool HasVal (const TGStatVal &StatVal) const
double GetVal (const TGStatVal &StatVal) const
void SetVal (const TGStatVal &StatVal, const double &Val)
int GetDistrs () const
bool HasDistr (const TGStatDistr &Distr) const
const TFltPrVGetDistr (const TGStatDistr &Distr) const
void GetDistr (const TGStatDistr &Distr, TFltPrV &FltPrV) const
void SetDistr (const TGStatDistr &Distr, const TFltPrV &FltPrV)
int GetNodes () const
int GetEdges () const
void TakeStat (const PNGraph &Graph, const TSecTm &Time, TFSet StatFSet, const TStr &GraphName)
void TakeStat (const PUNGraph &Graph, const TSecTm &Time, TFSet StatFSet, const TStr &GraphName)
template<class PGraph >
void TakeStat (const PGraph &Graph, const TSecTm &Time, TFSet StatFSet, const TStr &GraphName)
template<class PGraph >
void TakeBasicStat (const PGraph &Graph, const bool &IsMxWcc=false)
template<class PGraph >
void TakeBasicStat (const PGraph &Graph, TFSet FSet, const bool &IsMxWcc=false)
template<class PGraph >
void TakeSccStat (const PGraph &Graph, TFSet StatFSet)
template<class PGraph >
void TakeBccStat (const PGraph &Graph, TFSet StatFSet)
template<class PGraph >
void TakeDegDistr (const PGraph &Graph)
template<class PGraph >
void TakeDegDistr (const PGraph &Graph, TFSet StatFSet)
template<class PGraph >
void TakeDiam (const PGraph &Graph, const bool &IsMxWcc=false)
template<class PGraph >
void TakeDiam (const PGraph &Graph, TFSet StatFSet, const bool &IsMxWcc=false)
template<class PGraph >
void TakeConnComp (const PGraph &Graph)
template<class PGraph >
void TakeConnComp (const PGraph &Graph, TFSet StatFSet)
template<class PGraph >
void TakeClustCf (const PGraph &Graph, const int &SampleNodes=-1)
template<class PGraph >
void TakeTriadPart (const PGraph &Graph)
void TakeSpectral (const PNGraph &Graph, const int _TakeSngVals=-1)
void TakeSpectral (const PNGraph &Graph, TFSet StatFSet, int _TakeSngVals=-1)
void Plot (const TGStatDistr &Distr, const TStr &FNmPref, TStr Desc=TStr(), bool PowerFit=false) const
void Plot (const TFSet &FSet, const TStr &FNmPref, TStr Desc=TStr(), bool PowerFit=false) const
void PlotAll (const TStr &FNmPref, TStr Desc=TStr(), bool PowerFit=false) const
void DumpValStat ()
void AvgGStat (const PGStatVec &GStatVec, const bool &ClipAt1=false)
void AvgGStat (const TGStatV &GStatV, const bool &ClipAt1=false)

Static Public Member Functions

static PGStat New (const TSecTm &Time=TSecTm(), const TStr &GraphName=TStr())
static PGStat New (const PNGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphNm=TStr())
static PGStat New (const PUNGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphNm=TStr())
static PGStat New (const PNEGraph &Graph, const TSecTm &Time, TFSet StatFSet=TFSet(), const TStr &GraphNm=TStr())
static PGStat Load (TSIn &SIn)
static TStr GetDistrStr (const TGStatDistr &Distr)
static TStr GetValStr (const TGStatVal &Val)
static TPlotInfo GetPlotInfo (const TGStatVal &Val)
static TPlotInfo GetPlotInfo (const TGStatDistr &Distr)
static TFSet NoStat ()
static TFSet BasicStat ()
static TFSet DegDStat ()
static TFSet NoDiamStat ()
static TFSet NoDistrStat ()
static TFSet NoSvdStat ()
static TFSet AllStat ()

Public Attributes

TSecTm Time
TStr GraphNm
TIntFltH ValStatH
THash< TInt, TFltPrVDistrStatH

Static Public Attributes

static int NDiamRuns = 10
static int TakeSngVals = 100

Private Attributes

TCRef CRef

Static Private Attributes

static const TFltPrV EmptyV = TFltPrV()

Friends

class TCmpByVal
class TPt< TGStat >

Detailed Description

Statistics of a Graph Snapshot

Definition at line 36 of file gstat.h.


Member Typedef Documentation

Definition at line 40 of file gstat.h.


Constructor & Destructor Documentation

TGStat::TGStat ( const TSecTm GraphTm = TSecTm(),
const TStr GraphName = TStr() 
)

Definition at line 21 of file gstat.cpp.

                                                           :
  Time(GraphTm), GraphNm(GraphName), ValStatH(), DistrStatH() {
}
TGStat::TGStat ( const PNGraph Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphName = TStr() 
)

Definition at line 25 of file gstat.cpp.

                                                                                                 {
  TakeStat(Graph, GraphTm, StatFSet, GraphName);
}
TGStat::TGStat ( const PUNGraph Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphName = TStr() 
)

Definition at line 29 of file gstat.cpp.

                                                                                                  {
  TakeStat(Graph, GraphTm, StatFSet, GraphName);
}
TGStat::TGStat ( const PNEGraph Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphName = TStr() 
)

Definition at line 33 of file gstat.cpp.

                                                                                                  {
  TakeStat(Graph, GraphTm, StatFSet, GraphName);
}
template<class PGraph >
TGStat::TGStat ( const PGraph &  Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphName = TStr() 
) [inline]

Definition at line 64 of file gstat.h.

                                                                                                                                {
    TakeStat(Graph, Time, StatFSet, GraphName); }
TGStat::TGStat ( const TGStat GStat)

Definition at line 36 of file gstat.cpp.

                                  : Time(GStat.Time), GraphNm(GStat.GraphNm),
  ValStatH(GStat.ValStatH), DistrStatH(GStat.DistrStatH) {
}
TGStat::TGStat ( TSIn SIn)

Definition at line 40 of file gstat.cpp.

: Time(SIn), GraphNm(SIn), ValStatH(SIn), DistrStatH(SIn) { }

Member Function Documentation

TFSet TGStat::AllStat ( ) [static]

Definition at line 401 of file gstat.cpp.

void TGStat::AvgGStat ( const PGStatVec GStatVec,
const bool &  ClipAt1 = false 
)

Definition at line 243 of file gstat.cpp.

                                                                    {
  AvgGStat(GStatVec->GetGStatV(), ClipAt1);
}
void TGStat::AvgGStat ( const TGStatV GStatV,
const bool &  ClipAt1 = false 
)

Definition at line 247 of file gstat.cpp.

                                                                {
  if (GStatV.Empty()) return;
  Time = GStatV[0]->Time;
  GraphNm = GStatV[0]->GraphNm;
  // values
  for (int statVal = 0; statVal > gsvMx; statVal++) {
    const TGStatVal GStatVal = TGStatVal(statVal);
    TMom Mom;
    for (int i = 0; i < GStatV.Len(); i++) {
      if (GStatV[i]->HasVal(GStatVal)) {
        Mom.Add(GStatV[i]->GetVal(GStatVal)); }
    }
    Mom.Def();
    if (Mom.IsUsable()) {
      IAssert(Mom.GetVals() == GStatV.Len()); // all must have the value
      SetVal(GStatVal, Mom.GetMean());
    }
  }
  // distributions
  for (int distr = gsdUndef; distr < gsdMx; distr++) {
    const TGStatDistr GStatDistr = TGStatDistr(distr);
    THash<TFlt, TFlt> ValToSumH;
    int DistrCnt = 0;
    for (int i = 0; i < GStatV.Len(); i++) {
      if (GStatV[i]->HasDistr(GStatDistr)) {
        const TFltPrV& D = GStatV[i]->GetDistr(GStatDistr);
        for (int d = 0; d < D.Len(); d++) {
          ValToSumH.AddDat(D[d].Val1) += D[d].Val2; }
        DistrCnt++;
      }
    }
    IAssert(DistrCnt==0 || DistrCnt==GStatV.Len()); // all must have distribution
    TFltPrV AvgStatV;
    ValToSumH.GetKeyDatPrV(AvgStatV);  AvgStatV.Sort();
    for (int i = 0; i < AvgStatV.Len(); i++) {
      AvgStatV[i].Val2 /= double(DistrCnt);
      if (ClipAt1 && AvgStatV[i].Val2 < 1) { AvgStatV[i].Val2 = 1; }
    }
    SetDistr(GStatDistr, AvgStatV);
  }
}
TFSet TGStat::BasicStat ( ) [static]

Definition at line 380 of file gstat.cpp.

                        {
  return TFSet();
}
PGStat TGStat::Clone ( ) const [inline]

Definition at line 80 of file gstat.h.

{ return new TGStat(*this); }
TFSet TGStat::DegDStat ( ) [static]

Definition at line 384 of file gstat.cpp.

                       {
  return TFSet() | gsdInDeg |  gsdOutDeg;
}

Definition at line 235 of file gstat.cpp.

                         {
  for (int val = gsvNone; val < gsvMx; val++) {
    const TGStatVal Val = TGStatVal(val);
    if (! HasVal(Val)) { continue; }
    printf("  %s\t%g\n", GetValStr(Val).CStr(), GetVal(Val));
  }
}
int TGStat::GetDay ( ) const [inline]

Definition at line 87 of file gstat.h.

{ return Time.GetDayN(); }
const TFltPrV & TGStat::GetDistr ( const TGStatDistr Distr) const

Definition at line 92 of file gstat.cpp.

                                                              {
  if (! DistrStatH.IsKey(int(Distr))) { return EmptyV; }
  return DistrStatH.GetDat(int(Distr));
}
void TGStat::GetDistr ( const TGStatDistr Distr,
TFltPrV FltPrV 
) const

Definition at line 101 of file gstat.cpp.

                                                                     {
  FltPrV = GetDistr(Distr);
}
int TGStat::GetDistrs ( ) const [inline]

Definition at line 101 of file gstat.h.

{ return DistrStatH.Len(); }
TStr TGStat::GetDistrStr ( const TGStatDistr Distr) [static]

Definition at line 289 of file gstat.cpp.

                                                 {
  switch (Distr) {
    case gsdUndef : return TStr("Undef");
    case gsdInDeg : return "InDeg";
    case gsdOutDeg : return "OutDeg";
    case gsdWcc : return "WccDist";
    case gsdScc : return "SccDist";
    case gsdHops : return "Hops";
    case gsdWccHops : return "WccHops";
    case gsdSngVal : return "SngVal";
    case gsdSngVec : return "SngVec";
    case gsdClustCf : return "ClustCf";
    case gsdTriadPart : return "TriadPart";
    case gsdMx: return TStr("Mx");
    default: Fail; return TStr();
  };
}
int TGStat::GetEdges ( ) const [inline]

Definition at line 108 of file gstat.h.

{ return (int) GetVal(gsvEdges); }
int TGStat::GetHour ( ) const [inline]

Definition at line 88 of file gstat.h.

{ return Time.GetHourN(); }
int TGStat::GetMin ( ) const [inline]

Definition at line 89 of file gstat.h.

{ return Time.GetMinN(); }
int TGStat::GetMonth ( ) const [inline]

Definition at line 86 of file gstat.h.

{ return Time.GetMonthN(); }
TStr TGStat::GetNm ( ) const [inline]

Definition at line 93 of file gstat.h.

{ return GraphNm; }
int TGStat::GetNodes ( ) const [inline]

Definition at line 107 of file gstat.h.

{ return (int) GetVal(gsvNodes); }
TGStat::TPlotInfo TGStat::GetPlotInfo ( const TGStatVal Val) [static]

Definition at line 351 of file gstat.cpp.

                                                        {
  //switch (Distr) {
    //case gsdUndef : Fail; return TPlotInfo();
  Fail;
  return TPlotInfo();
}
TGStat::TPlotInfo TGStat::GetPlotInfo ( const TGStatDistr Distr) [static]

Definition at line 358 of file gstat.cpp.

                                                            {
  switch (Distr) {
    case gsdUndef : Fail; return TPlotInfo();
    case gsdInDeg : return TPlotInfo("inDeg", "In-degree, k", "Count", gpsLog10XY);
    case gsdOutDeg : return TPlotInfo("outDeg", "Out-degree, k", "Count", gpsLog10XY);
    case gsdWcc : return TPlotInfo("wcc", "WCC size", "Count", gpsLog10XY);
    case gsdScc : return TPlotInfo("scc", "SCC size", "Count", gpsLog10XY);
    case gsdHops : return TPlotInfo("hop", "Number of hops, h", "Reachable pairs of nodes inside h hops", gpsLog10Y);
    case gsdWccHops : return TPlotInfo("wccHop", "Number of hops, h", "Reachable pairs of nodes inside h hops in WCC", gpsLog10Y);
    case gsdSngVal : return TPlotInfo("sval", "Rank", "Singular value", gpsLog10XY);
    case gsdSngVec : return TPlotInfo("svec", "Rank", "Left singular vector", gpsLog10XY);
    case gsdClustCf : return TPlotInfo("ccf", "Degree, k", "Clustering coefficient, <C(k)>", gpsLog10XY);
    case gsdTriadPart : return TPlotInfo("triad", "Number of triads adjacent to a node", "Number of such nodes", gpsLog10XY);
    case gsdMx : Fail;
    default: Fail; return TPlotInfo();
  };
}
int TGStat::GetSec ( ) const [inline]

Definition at line 90 of file gstat.h.

{ return Time.GetSecN(); }
int TGStat::GetTime ( const TTmUnit TimeUnit) const [inline]

Definition at line 95 of file gstat.h.

{ return Time.GetInUnits(TimeUnit); }
TStr TGStat::GetTmStr ( ) const [inline]

Definition at line 91 of file gstat.h.

{ return Time.GetStr(); }
double TGStat::GetVal ( const TGStatVal StatVal) const

Definition at line 81 of file gstat.cpp.

                                                    {
  if (StatVal == gsvIndex) { return -1; }
  if (StatVal == gsvTime) { return Time.GetAbsSecs(); }
  if (! ValStatH.IsKey(int(StatVal))) { return -1.0; }
  return ValStatH.GetDat(int(StatVal));
}
int TGStat::GetVals ( ) const [inline]

Definition at line 97 of file gstat.h.

{ return ValStatH.Len(); }
TStr TGStat::GetValStr ( const TGStatVal Val) [static]

Definition at line 307 of file gstat.cpp.

                                           {
  static TIntStrH ValTyStrH;
  if (ValTyStrH.Empty()) {
    ValTyStrH.AddDat(gsvNone, "None");
    ValTyStrH.AddDat(gsvIndex, "Index");
    ValTyStrH.AddDat(gsvTime, "Time");
    ValTyStrH.AddDat(gsvNodes, "Nodes");
    ValTyStrH.AddDat(gsvZeroNodes, "ZeroNodes");
    ValTyStrH.AddDat(gsvNonZNodes, "NonZNodes");
    ValTyStrH.AddDat(gsvSrcNodes, "SrcNodes");
    ValTyStrH.AddDat(gsvDstNodes, "DstNodes");
    ValTyStrH.AddDat(gsvEdges, "Edges");
    ValTyStrH.AddDat(gsvUniqEdges, "UniqEdges");
    ValTyStrH.AddDat(gsvBiDirEdges, "BiDirEdges");
    ValTyStrH.AddDat(gsvWccNodes, "WccNodes");
    ValTyStrH.AddDat(gsvWccSrcNodes, "WccSrcNodes");
    ValTyStrH.AddDat(gsvWccDstNodes, "WccDstNodes");
    ValTyStrH.AddDat(gsvWccEdges, "WccEdges");
    ValTyStrH.AddDat(gsvWccUniqEdges, "WccUniqEdges");
    ValTyStrH.AddDat(gsvWccBiDirEdges, "WccBiDirEdges");
    ValTyStrH.AddDat(gsvSccNodes, "SccNodes");
    ValTyStrH.AddDat(gsvSccEdges, "SccEdges");
    ValTyStrH.AddDat(gsvBccNodes, "BccNodes");
    ValTyStrH.AddDat(gsvBccEdges, "BccEdges");
    ValTyStrH.AddDat(gsvFullDiam, "FullDiam");
    ValTyStrH.AddDat(gsvEffDiam, "EffDiam");
    ValTyStrH.AddDat(gsvEffWccDiam, "EffWccDiam");
    ValTyStrH.AddDat(gsvFullWccDiam, "FullWccDiam");
    ValTyStrH.AddDat(gsvFullDiamDev, "FullDiamDev");
    ValTyStrH.AddDat(gsvEffDiamDev, "EffDiamDev");
    ValTyStrH.AddDat(gsvEffWccDiamDev, "EffWccDiamDev");
    ValTyStrH.AddDat(gsvFullWccDiamDev, "FullWccDiamDev");
    ValTyStrH.AddDat(gsvClustCf, "ClustCf");
    ValTyStrH.AddDat(gsvOpenTriads, "OpenTr");
    ValTyStrH.AddDat(gsvClosedTriads, "ClosedTr");
    ValTyStrH.AddDat(gsvWccSize, "WccSize");
    ValTyStrH.AddDat(gsvSccSize, "SccSize");
    ValTyStrH.AddDat(gsvBccSize, "BccSize");
    ValTyStrH.AddDat(gsvMx, "Mx");
  }
  IAssert(ValTyStrH.IsKey(int(Val)));
  return ValTyStrH.GetDat(int(Val));
}
int TGStat::GetYear ( ) const [inline]

Definition at line 85 of file gstat.h.

{ return Time.GetYearN(); }
bool TGStat::HasDistr ( const TGStatDistr Distr) const [inline]

Definition at line 102 of file gstat.h.

{ return DistrStatH.IsKey(Distr); }
bool TGStat::HasVal ( const TGStatVal StatVal) const

Definition at line 75 of file gstat.cpp.

                                                  {
  if (StatVal == gsvIndex) { return true; }
  if (StatVal == gsvTime) { return Time.IsDef(); }
  return ValStatH.IsKey(int(StatVal));
}
static PGStat TGStat::Load ( TSIn SIn) [inline, static]

Definition at line 79 of file gstat.h.

{ return new TGStat(SIn); }
static PGStat TGStat::New ( const TSecTm Time = TSecTm(),
const TStr GraphName = TStr() 
) [inline, static]

Definition at line 69 of file gstat.h.

                                                                               {
    return new TGStat(Time, GraphName); }
static PGStat TGStat::New ( const PNGraph Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphNm = TStr() 
) [inline, static]

Definition at line 71 of file gstat.h.

                                { return new TGStat(Graph, Time, StatFSet, GraphNm); }
static PGStat TGStat::New ( const PUNGraph Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphNm = TStr() 
) [inline, static]

Definition at line 73 of file gstat.h.

                                { return new TGStat(Graph, Time, StatFSet, GraphNm); }
static PGStat TGStat::New ( const PNEGraph Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphNm = TStr() 
) [inline, static]

Definition at line 75 of file gstat.h.

                                { return new TGStat(Graph, Time, StatFSet, GraphNm); }
template<class PGraph >
PGStat TGStat::New ( const PGraph &  Graph,
const TSecTm Time,
TFSet  StatFSet = TFSet(),
const TStr GraphNm = TStr() 
) [inline]

Definition at line 77 of file gstat.h.

                                { return new TGStat(Graph, Time, StatFSet, GraphNm); }
TFSet TGStat::NoDiamStat ( ) [static]

Definition at line 388 of file gstat.cpp.

                         {
  return TFSet() | gsdInDeg |  gsdOutDeg |  gsdWcc |  gsdScc;
}
TFSet TGStat::NoDistrStat ( ) [static]

Definition at line 392 of file gstat.cpp.

                          {
  return TFSet() | gsdHops | gsdWccHops;
}
TFSet TGStat::NoStat ( ) [static]

Definition at line 376 of file gstat.cpp.

                     {
  return TFSet() | gsvNone;
}
TFSet TGStat::NoSvdStat ( ) [static]

Definition at line 396 of file gstat.cpp.

bool TGStat::operator< ( const TGStat GStat) const

Definition at line 61 of file gstat.cpp.

                                                  {
  if (Time<GStat.Time) { return true; }
  if (Time>GStat.Time) { return false; }
  if (ValStatH.Empty() && ! GStat.ValStatH.Empty()) { return true; }
  if (GStat.ValStatH.Empty()) { return false; }
  for (int v = gsvTime; v < gsvMx; v++) {
    if (! ValStatH.IsKey(v) && ! GStat.ValStatH.IsKey(v)) { continue; }
    if (ValStatH.IsKey(v) && ! GStat.ValStatH.IsKey(v)) { return false; }
    if (! ValStatH.IsKey(v)) { return true; }
    if (ValStatH.GetDat(v) < GStat.ValStatH.GetDat(v)) { return true; }
  }
  return false;
}
TGStat & TGStat::operator= ( const TGStat GStat)

Definition at line 47 of file gstat.cpp.

                                               {
  if (this != &GStat) {
    Time = GStat.Time;
    GraphNm = GStat.GraphNm;
    ValStatH = GStat.ValStatH;
    DistrStatH = GStat.DistrStatH;
  }
  return *this;
}
bool TGStat::operator== ( const TGStat GStat) const

Definition at line 57 of file gstat.cpp.

                                                   {
  return Time==GStat.Time && ValStatH==GStat.ValStatH && DistrStatH==GStat.DistrStatH;
}
void TGStat::Plot ( const TGStatDistr Distr,
const TStr FNmPref,
TStr  Desc = TStr(),
bool  PowerFit = false 
) const

Definition at line 204 of file gstat.cpp.

                                                                                               {
  if (Desc.Empty()) Desc = FNmPref.GetUc();
  if (! HasDistr(Distr) || Distr==gsdUndef || Distr==gsdMx) { return; }
  TPlotInfo Info = GetPlotInfo(Distr);
  TGnuPlot GnuPlot(Info.Val1+TStr(".")+FNmPref, TStr::Fmt("%s. G(%d, %d)", Desc.CStr(), GetNodes(),GetEdges()));
  GnuPlot.SetXYLabel(Info.Val2, Info.Val3);
  GnuPlot.SetScale(Info.Val4);
  const int plotId = GnuPlot.AddPlot(GetDistr(Distr), gpwLinesPoints, "");
  if (PowerFit) { GnuPlot.AddPwrFit(plotId, gpwLines); }
  #ifdef GLib_MACOSX
  GnuPlot.SaveEps();
  #else
  GnuPlot.SavePng();
  #endif
}
void TGStat::Plot ( const TFSet FSet,
const TStr FNmPref,
TStr  Desc = TStr(),
bool  PowerFit = false 
) const

Definition at line 220 of file gstat.cpp.

                                                                                        {
  for (int d = gsdUndef; d < gsdMx; d++) {
    const TGStatDistr Distr = TGStatDistr(d);
    if (! FSet.In(Distr)) { continue; }
    Plot(Distr, FNmPref, Desc, PowerFit);
  }
}
void TGStat::PlotAll ( const TStr FNmPref,
TStr  Desc = TStr(),
bool  PowerFit = false 
) const

Definition at line 228 of file gstat.cpp.

                                                                        {
  for (int d = gsdUndef; d < gsdMx; d++) {
    const TGStatDistr Distr = TGStatDistr(d);
    Plot(Distr, FNmPref, Desc, PowerFit);
  }
}
void TGStat::Save ( TSOut SOut) const

Definition at line 42 of file gstat.cpp.

                                   {
  Time.Save(SOut);  GraphNm.Save(SOut);
  ValStatH.Save(SOut);  DistrStatH.Save(SOut);
}
void TGStat::SetDistr ( const TGStatDistr Distr,
const TFltPrV FltPrV 
)

Definition at line 97 of file gstat.cpp.

                                                                     {
  DistrStatH.AddDat(Distr, FltPrV);
}
void TGStat::SetNm ( const TStr GraphName) [inline]

Definition at line 94 of file gstat.h.

{ GraphNm=GraphName; }
void TGStat::SetTm ( const TSecTm GraphTm) [inline]

Definition at line 92 of file gstat.h.

{ Time = GraphTm; }
void TGStat::SetVal ( const TGStatVal StatVal,
const double &  Val 
)

Definition at line 88 of file gstat.cpp.

                                                               {
  ValStatH.AddDat(int(StatVal), Val);
}
template<class PGraph >
void TGStat::TakeBasicStat ( const PGraph &  Graph,
const bool &  IsMxWcc = false 
)

Definition at line 257 of file gstat.h.

                                                                   {
  TakeBasicStat(Graph, TFSet() | gsvBiDirEdges | gsvWccBiDirEdges, IsMxWcc);
}
template<class PGraph >
void TGStat::TakeBasicStat ( const PGraph &  Graph,
TFSet  FSet,
const bool &  IsMxWcc = false 
)

Definition at line 262 of file gstat.h.

                                                                               {
  TExeTm ExeTm;
  if (! IsMxWcc) {
    // gsvNodes, gsvZeroNodes, gsvNonZNodes, gsvSrcNodes, gsvDstNodes,
    // gsvEdges, gsvUniqEdges, gsvBiDirEdges
    printf("basic...");
    const int Nodes = Graph->GetNodes();
    SetVal(gsvNodes, Nodes);
    SetVal(gsvZeroNodes, TSnap::CntDegNodes(Graph, 0));
    SetVal(gsvNonZNodes, Nodes - GetVal(gsvZeroNodes));
    SetVal(gsvSrcNodes, Nodes - TSnap::CntOutDegNodes(Graph, 0));
    SetVal(gsvDstNodes, Nodes - TSnap::CntInDegNodes(Graph, 0));
    SetVal(gsvEdges, Graph->GetEdges());
    if (! Graph->HasFlag(gfMultiGraph)) { SetVal(gsvUniqEdges, Graph->GetEdges()); }
    else { SetVal(gsvUniqEdges, TSnap::CntUniqDirEdges(Graph)); }
    if (FSet.In(gsvBiDirEdges)) {
      if (Graph->HasFlag(gfDirected)) { SetVal(gsvBiDirEdges, TSnap::CntUniqBiDirEdges(Graph)); }
      else { SetVal(gsvUniqEdges, GetVal(gsvEdges)); }
    }
    printf("[%s] ", ExeTm.GetTmStr());
  } else {
    // gsvWccNodes, gsvWccSrcNodes, gsvWccDstNodes, gsvWccEdges, gsvWccUniqEdges, gsvWccBiDirEdges
    printf("basic wcc...");
    const int Nodes = Graph->GetNodes();
    SetVal(gsvWccNodes, Nodes);
    SetVal(gsvWccSrcNodes, Nodes - TSnap::CntOutDegNodes(Graph, 0));
    SetVal(gsvWccDstNodes, Nodes - TSnap::CntInDegNodes(Graph, 0));
    SetVal(gsvWccEdges, Graph->GetEdges());
    if (! Graph->HasFlag(gfMultiGraph)) { SetVal(gsvWccUniqEdges, Graph->GetEdges()); }
    else { SetVal(gsvWccUniqEdges, TSnap::CntUniqDirEdges(Graph)); }
    if (FSet.In(gsvBiDirEdges)) {
      if (Graph->HasFlag(gfDirected)) { SetVal(gsvWccBiDirEdges, TSnap::CntUniqBiDirEdges(Graph)); }
      else { SetVal(gsvUniqEdges, GetVal(gsvEdges)); }
    }
    printf("[%s]  ", ExeTm.GetTmStr());
  }
}
template<class PGraph >
void TGStat::TakeBccStat ( const PGraph &  Graph,
TFSet  StatFSet 
)

Definition at line 434 of file gstat.h.

                                                            {
  TExeTm ExeTm;
  if (StatFSet.In(gsvBccNodes) || StatFSet.In(gsvBccEdges) || StatFSet.In(gsvBccSize)) {
    printf("bcc...");
    PGraph BccG = TSnap::GetMxBiCon(Graph);
    SetVal(gsvBccNodes, BccG->GetNodes());
    SetVal(gsvBccEdges, BccG->GetEdges());
    SetVal(gsvBccSize, BccG->GetNodes()/double(Graph->GetNodes()));
    printf("[%s]  ", ExeTm.GetTmStr());
  }
}
template<class PGraph >
void TGStat::TakeClustCf ( const PGraph &  Graph,
const int &  SampleNodes = -1 
)

Definition at line 447 of file gstat.h.

                                                                    {
  TExeTm ExeTm;
  printf("clustcf...");
  TFltPrV& ClustCfV = DistrStatH.AddDat(gsdClustCf);
  int64 Open, Close;
  const double ClustCf =  TSnap::GetClustCf(Graph, ClustCfV, Close, Open, SampleNodes);
  SetVal(gsvClustCf, ClustCf);
  SetVal(gsvOpenTriads, Open);
  SetVal(gsvClosedTriads, Close);
  printf("[%s]  ", ExeTm.GetTmStr());
}
template<class PGraph >
void TGStat::TakeConnComp ( const PGraph &  Graph)

Definition at line 392 of file gstat.h.

                                             {
  TakeConnComp(Graph, TFSet() | gsdWcc | gsdScc);
}
template<class PGraph >
void TGStat::TakeConnComp ( const PGraph &  Graph,
TFSet  StatFSet 
)

Definition at line 397 of file gstat.h.

                                                             {
  TExeTm ExeTm;
  if (StatFSet.In(gsdWcc)) {
    printf("wcc...");
    TIntPrV WccSzCntV1;
    TSnap::GetWccSzCnt(Graph, WccSzCntV1);
    TFltPrV& WccSzCntV = DistrStatH.AddDat(gsdWcc);
    WccSzCntV.Gen(WccSzCntV1.Len(), 0);
    for (int i = 0; i < WccSzCntV1.Len(); i++)
      WccSzCntV.Add(TFltPr(WccSzCntV1[i].Val1(), WccSzCntV1[i].Val2()));
  }
  if (StatFSet.In(gsdScc)) {
    printf("scc...");
    TIntPrV SccSzCntV1;
    TSnap::GetSccSzCnt(Graph, SccSzCntV1);
    TFltPrV& SccSzCntV = DistrStatH.AddDat(gsdScc);
    SccSzCntV.Gen(SccSzCntV1.Len(), 0);
    for (int i = 0; i < SccSzCntV1.Len(); i++)
      SccSzCntV.Add(TFltPr(SccSzCntV1[i].Val1(), SccSzCntV1[i].Val2()));
  }
  if (StatFSet.In(gsdWcc) || StatFSet.In(gsdScc)) { printf("[%s]  ", ExeTm.GetTmStr()); }
}
template<class PGraph >
void TGStat::TakeDegDistr ( const PGraph &  Graph)

Definition at line 301 of file gstat.h.

                                             {
  TakeDegDistr(Graph, TFSet() | gsdInDeg | gsdOutDeg);
}
template<class PGraph >
void TGStat::TakeDegDistr ( const PGraph &  Graph,
TFSet  StatFSet 
)

Definition at line 306 of file gstat.h.

                                                             {
  TExeTm ExeTm;
  // degree distribution
  if (StatFSet.In(gsdOutDeg) || StatFSet.In(gsdOutDeg)) {
    printf("deg:"); }
  if (StatFSet.In(gsdInDeg)) {
    printf("-in");
    TFltPrV& InDegV = DistrStatH.AddDat(gsdInDeg);
    TSnap::GetInDegCnt(Graph, InDegV);
  }
  if (StatFSet.In(gsdOutDeg)) {
    printf("-out");
    TFltPrV& OutDegV = DistrStatH.AddDat(gsdOutDeg);
    TSnap::GetOutDegCnt(Graph, OutDegV);
  }
  if (StatFSet.In(gsdOutDeg) || StatFSet.In(gsdOutDeg)) {
    printf("[%s]  ", ExeTm.GetTmStr()); }
}
template<class PGraph >
void TGStat::TakeDiam ( const PGraph &  Graph,
const bool &  IsMxWcc = false 
)

Definition at line 326 of file gstat.h.

template<class PGraph >
void TGStat::TakeDiam ( const PGraph &  Graph,
TFSet  StatFSet,
const bool &  IsMxWcc = false 
)

Definition at line 332 of file gstat.h.

                                                                              {
  TExeTm ExeTm;
  if (! IsMxWcc) {
    if (StatFSet.In(gsvFullDiam) || StatFSet.In(gsvEffDiam) || StatFSet.In(gsdHops)) {
      printf("anf:%druns...", NDiamRuns); }
    //bool Line=false;
    if (StatFSet.In(gsvEffDiam) || StatFSet.In(gsdHops)) {
      TMom DiamMom;  ExeTm.Tick();
      TIntFltKdV DistNbrsV;
      for (int r = 0; r < NDiamRuns; r++) {
        TSnap::GetAnf(Graph, DistNbrsV, -1, false, 32);
        DiamMom.Add(TSnap::TSnapDetail::CalcEffDiam(DistNbrsV, 0.9));
        printf(".");
      }
      DiamMom.Def();
      SetVal(gsvEffDiam, DiamMom.GetMean());
      SetVal(gsvEffDiamDev, DiamMom.GetSDev());
      TFltPrV& HopsV = DistrStatH.AddDat(gsdHops);
      HopsV.Gen(DistNbrsV.Len(), 0);
      for (int i = 0; i < DistNbrsV.Len(); i++) {
        HopsV.Add(TFltPr(DistNbrsV[i].Key(), DistNbrsV[i].Dat)); }
      printf("  anf-eff %.1f[%s]", DiamMom.GetMean(), ExeTm.GetTmStr());
      //Line=true;
    }
  } else {
    if (StatFSet.In(gsvEffWccDiam) || StatFSet.In(gsdWccHops)) { printf("wcc diam..."); }
    //bool Line=false;
    if (StatFSet.In(gsvFullDiam)) {
      TMom DiamMom;  ExeTm.Tick();
      for (int r = 0; r < NDiamRuns; r++) {
        DiamMom.Add(TSnap::GetBfsFullDiam(Graph, 1, false));
        printf("."); }
      DiamMom.Def();
      SetVal(gsvFullDiam, DiamMom.GetMean());
      SetVal(gsvFullDiamDev, DiamMom.GetSDev());
      printf("  bfs-full %g[%s]", DiamMom.GetMean(), ExeTm.GetTmStr());
      //Line=true;
    }
    if (StatFSet.In(gsvEffWccDiam) || StatFSet.In(gsdWccHops)) {
      TMom DiamMom; ExeTm.Tick();
      TIntFltKdV DistNbrsV;
      for (int r = 0; r < NDiamRuns; r++) {
        TSnap::GetAnf(Graph, DistNbrsV, -1, false, 32);
        DiamMom.Add(TSnap::TSnapDetail::CalcEffDiam(DistNbrsV, 0.9));
        printf(".");
      }
      DiamMom.Def();
      SetVal(gsvEffWccDiam, DiamMom.GetMean());
      SetVal(gsvEffWccDiamDev, DiamMom.GetSDev());
      TFltPrV& WccHopsV = DistrStatH.AddDat(gsdWccHops);
      WccHopsV.Gen(DistNbrsV.Len(), 0);
      for (int i = 0; i < DistNbrsV.Len(); i++) {
        WccHopsV.Add(TFltPr(DistNbrsV[i].Key(), DistNbrsV[i].Dat)); }
      printf("  anf-wcceff %.1f[%s]", DiamMom.GetMean(), ExeTm.GetTmStr());
      //Line=true;
    }
  }
}
template<class PGraph >
void TGStat::TakeSccStat ( const PGraph &  Graph,
TFSet  StatFSet 
)

Definition at line 421 of file gstat.h.

                                                            {
  TExeTm ExeTm;
  if (StatFSet.In(gsvSccNodes) || StatFSet.In(gsvSccEdges) || StatFSet.In(gsvSccSize)) {
    printf("scc...");
    PGraph SccG = TSnap::GetMxScc(Graph);
    SetVal(gsvSccNodes, SccG->GetNodes());
    SetVal(gsvSccEdges, SccG->GetEdges());
    SetVal(gsvSccSize, SccG->GetNodes()/double(Graph->GetNodes()));
    printf("[%s]  ", ExeTm.GetTmStr());
  }
}
void TGStat::TakeSpectral ( const PNGraph Graph,
const int  _TakeSngVals = -1 
)

Definition at line 169 of file gstat.cpp.

                                                                      {
  TakeSpectral(Graph, TFSet() | gsdSngVal | gsdSngVec, _TakeSngVals);
}
void TGStat::TakeSpectral ( const PNGraph Graph,
TFSet  StatFSet,
int  _TakeSngVals = -1 
)

Definition at line 173 of file gstat.cpp.

                                                                                {
  TExeTm ExeTm;
  if (_TakeSngVals == -1) { _TakeSngVals = TakeSngVals; }
  // singular values, vectors
  if (StatFSet.In(gsdSngVal)) {
    printf("sing-vals...");  
    const int SngVals = TMath::Mn(_TakeSngVals, Graph->GetNodes()/2);
    TFltV SngValV1;
    TSnap::GetSngVals(Graph, SngVals, SngValV1);
    SngValV1.Sort(false);
    TFltPrV& SngValV = DistrStatH.AddDat(gsdSngVal);
    SngValV.Gen(SngValV1.Len(), 0);
    for (int i = 0; i < SngValV1.Len(); i++) {
      SngValV.Add(TFltPr(i+1, SngValV1[i]));
    }
    printf("[%s]  ", ExeTm.GetTmStr());
  }
  if (StatFSet.In(gsdSngVec)) {
    printf("sing-vec...");  
    TFltV LeftV, RightV;
    TSnap::GetSngVec(Graph, LeftV, RightV);
    LeftV.Sort(false);
    TFltPrV& SngVec = DistrStatH.AddDat(gsdSngVec);
    SngVec.Gen(LeftV.Len(), 0);
    for (int i = 0; i < TMath::Mn(Kilo(10), LeftV.Len()/2); i++) {
      if (LeftV[i] > 0) { SngVec.Add(TFltPr(i+1, LeftV[i])); }
    }
    printf("[%s]  ", ExeTm.GetTmStr());
  }
}
void TGStat::TakeStat ( const PNGraph Graph,
const TSecTm Time,
TFSet  StatFSet,
const TStr GraphName 
)

Definition at line 105 of file gstat.cpp.

                                                                                                      {
  printf("\n===TakeStat:  G(%u, %u) at %s\n", Graph->GetNodes(), Graph->GetEdges(), _Time.IsDef()?_Time.GetStr().CStr():"");
  TExeTm ExeTm, FullTm;
  Time = _Time;
  GraphNm = GraphName;
  if (StatFSet.In(gsvNone)) { return; }
  TakeBasicStat(Graph, false);
  TakeDiam(Graph, StatFSet, false);
  if (StatFSet.In(gsdWcc) || StatFSet.In(gsdWccHops) || StatFSet.In(gsvFullDiam) || StatFSet.In(gsvEffWccDiam) || StatFSet.In(gsvWccNodes) || StatFSet.In(gsvWccSrcNodes) || StatFSet.In(gsvWccDstNodes) || StatFSet.In(gsvWccEdges) || StatFSet.In(gsvWccUniqEdges) || StatFSet.In(gsvWccBiDirEdges)) {
    PNGraph WccGraph = TSnap::GetMxWcc(Graph);
    TakeBasicStat(WccGraph, true);
    TakeDiam(WccGraph, StatFSet, true);
    SetVal(gsvWccSize, WccGraph->GetNodes()/double(Graph->GetNodes()));
  }
  // strongly connected component
  TakeSccStat(Graph, StatFSet);
  // strongly connected component
  TakeBccStat(Graph, StatFSet);
  // degrees
  TakeDegDistr(Graph, StatFSet);
  // components
  TakeConnComp(Graph, StatFSet);
  // spectral
  TakeSpectral(Graph, StatFSet, -1);
  // clustering coeffient
  if (StatFSet.In(gsdClustCf) || StatFSet.In(gsvClustCf)) {
    TakeClustCf(Graph); }
  if (StatFSet.In(gsdTriadPart)) {
    TakeTriadPart(Graph); }
  printf("**[%s]\n", FullTm.GetTmStr());
}
void TGStat::TakeStat ( const PUNGraph Graph,
const TSecTm Time,
TFSet  StatFSet,
const TStr GraphName 
)

Definition at line 137 of file gstat.cpp.

                                                                                                       {
  printf("\n===TakeStat:  UG(%u, %u) at %s\n", Graph->GetNodes(), Graph->GetEdges(), _Time.IsDef()?_Time.GetStr().CStr():"");
  TExeTm ExeTm, FullTm;
  Time = _Time;
  GraphNm = GraphName;
  if (StatFSet.In(gsvNone)) { return; }
  TakeBasicStat(Graph, false);
  TakeDiam(Graph, StatFSet, false);
  if (StatFSet.In(gsdWcc) || StatFSet.In(gsdWccHops) || StatFSet.In(gsvFullDiam) || StatFSet.In(gsvEffWccDiam) || StatFSet.In(gsvWccNodes) || StatFSet.In(gsvWccSrcNodes) || StatFSet.In(gsvWccDstNodes) || StatFSet.In(gsvWccEdges) || StatFSet.In(gsvWccUniqEdges) || StatFSet.In(gsvWccBiDirEdges)) {
    PUNGraph WccGraph = TSnap::GetMxWcc(Graph);
    TakeBasicStat(WccGraph, true);
    TakeDiam(WccGraph, StatFSet, true);
    SetVal(gsvWccSize, WccGraph->GetNodes()/double(Graph->GetNodes()));
  }
  // strongly connected component
  //TakeSccStat(Graph, StatFSet);
  // strongly connected component
  TakeBccStat(Graph, StatFSet);
  // degrees
  TakeDegDistr(Graph, StatFSet);
  // components
  TakeConnComp(Graph, StatFSet);
  // spectral
  //TakeSpectral(Graph, StatFSet, -1);
  // clustering coeffient
  if (StatFSet.In(gsdClustCf) || StatFSet.In(gsvClustCf)) {
    TakeClustCf(Graph); }
  if (StatFSet.In(gsdTriadPart)) {
    TakeTriadPart(Graph); }
  printf("**[%s]\n", FullTm.GetTmStr());
}
template<class PGraph >
void TGStat::TakeStat ( const PGraph &  Graph,
const TSecTm Time,
TFSet  StatFSet,
const TStr GraphName 
)

Definition at line 219 of file gstat.h.

                                                                                                     {
  printf("**TakeStat:  G(%u, %u)\n", Graph->GetNodes(), Graph->GetEdges());
  TExeTm ExeTm, FullTm;
  Time = _Time;
  GraphNm = GraphName;
  if (StatFSet.In(gsvNone)) { return; }
  TakeBasicStat(Graph, false);
  TakeSccStat(Graph, StatFSet);
  TakeBccStat(Graph, StatFSet);
  if (StatFSet.In(gsdWcc)) {
    PGraph WccG = TSnap::GetMxWcc(Graph);
    TakeBasicStat(WccG, true);
    SetVal(gsvWccSize, WccG->GetNodes()/double(Graph->GetNodes()));
  }
  // degrees
  TakeDegDistr(Graph, StatFSet);
  if (StatFSet.In(gsvFullDiam) || StatFSet.In(gsvEffDiam) || StatFSet.In(gsdHops) ||
   StatFSet.In(gsvEffWccDiam) || StatFSet.In(gsdWccHops) || StatFSet.In(gsdWcc) || StatFSet.In(gsdScc) ||
   StatFSet.In(gsdClustCf) || StatFSet.In(gsvClustCf) || StatFSet.In(gsdTriadPart)) {
    PNGraph NGraph = TSnap::ConvertGraph<PNGraph>(Graph, true);
    // diameter
    TakeDiam(NGraph, StatFSet, false);
    // components
    TakeConnComp(NGraph, StatFSet);
    // spectral
    TakeSpectral(NGraph, StatFSet, -1);
    // clustering coeffient
    if (StatFSet.In(gsdClustCf) || StatFSet.In(gsvClustCf)) {
      TakeClustCf(NGraph); }
    if (StatFSet.In(gsdTriadPart)) {
      TakeTriadPart(NGraph); }
    if (StatFSet.In(gsvFullDiam) || StatFSet.In(gsvEffWccDiam)) {
      TakeDiam(TSnap::GetMxWcc(NGraph), StatFSet, true); }
    printf("**[%s]\n", FullTm.GetTmStr());
  }
}
template<class PGraph >
void TGStat::TakeTriadPart ( const PGraph &  Graph)

Definition at line 460 of file gstat.h.

                                              {
  TExeTm ExeTm;
  printf("triadparticip...");
  TFltPrV& TriadCntV = DistrStatH.AddDat(gsdTriadPart);
  TIntPrV CntV;
  TSnap::GetTriadParticip(Graph, CntV);
  TriadCntV.Gen(CntV.Len(), 0);
  for (int i = 0; i < CntV.Len(); i++) {
    TriadCntV.Add(TFltPr(CntV[i].Val1(), CntV[i].Val2()));
  }
  printf("[%s]  ", ExeTm.GetTmStr());
}

Friends And Related Function Documentation

friend class TCmpByVal [friend]

Definition at line 149 of file gstat.h.

friend class TPt< TGStat > [friend]

Definition at line 150 of file gstat.h.


Member Data Documentation

TCRef TGStat::CRef [private]

Definition at line 53 of file gstat.h.

Definition at line 58 of file gstat.h.

const TFltPrV TGStat::EmptyV = TFltPrV() [static, private]

Definition at line 52 of file gstat.h.

Definition at line 56 of file gstat.h.

int TGStat::NDiamRuns = 10 [static]

Definition at line 38 of file gstat.h.

int TGStat::TakeSngVals = 100 [static]

Definition at line 39 of file gstat.h.

Definition at line 55 of file gstat.h.

Definition at line 57 of file gstat.h.


The documentation for this class was generated from the following files: