ROOT logo
ROOT » . » Map2D

class Map2D: public TH2D

Function Members (Methods)

public:
Map2D()
Map2D(const Map2D& m)
Map2D(const TH2D& h)
virtual~Map2D()
voidTObject::AbstractMethod(const char* method) const
virtual Map2D&Add(const Map2D* map, Double_t c = 1)
virtual Map2D&Add(const Map2D* map1, const Map2D* map2, Double_t c1 = 1, Double_t c2 = 1)
voidTArrayD::AddAt(Double_t c, Int_t i)
virtual voidTH2D::AddBinContent(Int_t bin)
virtual voidTH2D::AddBinContent(Int_t bin, Double_t w)
static voidTH1::AddDirectory(Bool_t add = kTRUE)
static Bool_tTH1::AddDirectoryStatus()
voidTArrayD::Adopt(Int_t n, Double_t* array)
virtual voidTObject::AppendPad(Option_t* option = "")
Double_tTArrayD::At(Int_t i) const
virtual voidTH1::Browse(TBrowser* b)
virtual Int_tTH2::BufferEmpty(Int_t action = 0)
virtual Map2D&Center()
virtual Double_tTH1::Chi2Test(const TH1* h2, Option_t* option = "UU", Double_t* res = 0) const
virtual Double_tTH1::Chi2TestX(const TH1* h2, Double_t& chi2, Int_t& ndf, Int_t& igood, Option_t* option = "UU", Double_t* res = 0) const
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTNamed::Clear(Option_t* option = "")
virtual TObject*TNamed::Clone(const char* newname = "") const
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual Double_tTH1::ComputeIntegral()
virtual voidTH2D::Copy(TObject& hnew) const
virtual Double_tCorrelation(const Map2D* map, Double_t contrast = 1) const
virtual Double_tCurl(const Map2D* Vx, const Map2D* Vy)
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tDespeckle(Int_t maxsize = 0)
virtual Int_tDespike(Double_t maxheight, Int_t regionsize = 3)
virtual voidTH1::DirectoryAutoAdd(TDirectory*)
Int_tTAttLine::DistancetoLine(Int_t px, Int_t py, Double_t xp1, Double_t yp1, Double_t xp2, Double_t yp2)
virtual Int_tTH1::DistancetoPrimitive(Int_t px, Int_t py)
virtual Double_tDivergence(const Map2D* Vx, const Map2D* Vy)
virtual Bool_tTH1::Divide(const TH1* h1)
virtual Bool_tTH1::Divide(TF1* f1, Double_t c1 = 1)
virtual Bool_tTH1::Divide(const TH1* h1, const TH1* h2, Double_t c1 = 1, Double_t c2 = 1, Option_t* option = "")MENU
virtual voidTH1::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual TH1*TH2D::DrawCopy(Option_t* option = "") const
virtual TH1*TH1::DrawNormalized(Option_t* option = "", Double_t norm = 1) const
virtual voidTH1::DrawPanel()MENU
virtual voidTObject::Dump() constMENU
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTH1::Eval(TF1* f1, Option_t* option = "")
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTH1::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual TH1*TH1::FFT(TH1* h_output, Option_t* option)
virtual Map2D&Fill(const Map2D* map)
virtual voidTNamed::FillBuffer(char*& buffer)
virtual voidTH2::FillN(Int_t, const Double_t*, const Double_t*, Int_t)
virtual voidTH2::FillN(Int_t ntimes, const Double_t* x, const Double_t* y, const Double_t* w, Int_t stride = 1)
virtual voidTH2::FillRandom(const char* fname, Int_t ntimes = 5000)
virtual voidTH2::FillRandom(TH1* h, Int_t ntimes = 5000)
virtual Int_tTH1::FindBin(Double_t x, Double_t y = 0, Double_t z = 0)
virtual Int_tTH2::FindFirstBinAbove(Double_t threshold = 0, Int_t axis = 1) const
virtual Int_tTH1::FindFixBin(Double_t x, Double_t y = 0, Double_t z = 0) const
virtual Int_tTH2::FindLastBinAbove(Double_t threshold = 0, Int_t axis = 1) const
virtual TObject*TH1::FindObject(const char* name) const
virtual TObject*TH1::FindObject(const TObject* obj) const
virtual TFitResultPtrTH1::Fit(const char* formula, Option_t* option = "", Option_t* goption = "", Double_t xmin = 0, Double_t xmax = 0)MENU
virtual TFitResultPtrTH1::Fit(TF1* f1, Option_t* option = "", Option_t* goption = "", Double_t xmin = 0, Double_t xmax = 0)
static Int_tTH1::FitOptionsMake(Option_t* option, Foption_t& Foption)
virtual voidTH1::FitPanel()MENU
virtual voidTH2::FitSlicesX(TF1* f1 = 0, Int_t firstybin = 0, Int_t lastybin = -1, Int_t cut = 0, Option_t* option = "QNR", TObjArray* arr = 0)MENU
virtual voidTH2::FitSlicesY(TF1* f1 = 0, Int_t firstxbin = 0, Int_t lastxbin = -1, Int_t cut = 0, Option_t* option = "QNR", TObjArray* arr = 0)MENU
const Double_t*TArrayD::GetArray() const
Double_t*TArrayD::GetArray()
TH1*TH1::GetAsymmetry(TH1* h2, Double_t c2 = 1, Double_t dc2 = 0)
virtual Double_tTArrayD::GetAt(Int_t i) const
virtual Color_tTH1::GetAxisColor(Option_t* axis = "X") const
virtual Float_tTH1::GetBarOffset() const
virtual Float_tTH1::GetBarWidth() const
virtual Int_tTH1::GetBin(Int_t binx, Int_t biny = 0, Int_t binz = 0) const
virtual Double_tTH1::GetBinCenter(Int_t bin) const
virtual Double_tTH2D::GetBinContent(Int_t bin) const
virtual Double_tTH2D::GetBinContent(Int_t binx, Int_t biny) const
virtual Double_tTH2D::GetBinContent(Int_t binx, Int_t biny, Int_t) const
virtual Double_tTH1::GetBinError(Int_t bin) const
virtual Double_tTH1::GetBinError(Int_t binx, Int_t biny) const
virtual Double_tTH1::GetBinError(Int_t binx, Int_t biny, Int_t binz) const
virtual Double_tTH2::GetBinErrorLow(Int_t binx, Int_t biny)
virtual TH1::EBinErrorOptTH1::GetBinErrorOption() const
virtual Double_tTH2::GetBinErrorUp(Int_t binx, Int_t biny)
virtual Double_tTH1::GetBinLowEdge(Int_t bin) const
virtual Double_tTH1::GetBinWidth(Int_t bin) const
virtual Double_tTH1::GetBinWithContent(Double_t c, Int_t& binx, Int_t firstx = 0, Int_t lastx = 0, Double_t maxdiff = 0) const
virtual Double_tTH2::GetBinWithContent2(Double_t c, Int_t& binx, Int_t& biny, Int_t firstxbin = 1, Int_t lastxbin = -1, Int_t firstybin = 1, Int_t lastybin = -1, Double_t maxdiff = 0) const
virtual voidTH1::GetBinXYZ(Int_t binglobal, Int_t& binx, Int_t& biny, Int_t& binz) const
const Double_t*TH1::GetBuffer() const
Int_tTH1::GetBufferLength() const
Int_tTH1::GetBufferSize() const
virtual Double_tTH1::GetCellContent(Int_t binx, Int_t biny) const
virtual Double_tTH1::GetCellError(Int_t binx, Int_t biny) const
virtual voidTH1::GetCenter(Double_t* center) const
virtual Int_tTH1::GetContour(Double_t* levels = 0)
virtual Double_tTH1::GetContourLevel(Int_t level) const
virtual Double_tTH1::GetContourLevelPad(Int_t level) const
virtual Double_tTH2::GetCorrelationFactor(Int_t axis1 = 1, Int_t axis2 = 2) const
virtual Double_tTH2::GetCovariance(Int_t axis1 = 1, Int_t axis2 = 2) const
static Int_tTH1::GetDefaultBufferSize()
static Bool_tTH1::GetDefaultSumw2()
virtual Int_tTH1::GetDimension() const
TDirectory*TH1::GetDirectory() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
virtual Double_tTH1::GetEffectiveEntries() const
virtual Double_tTH1::GetEntries() const
virtual Color_tTAttFill::GetFillColor() const
virtual Style_tTAttFill::GetFillStyle() const
virtual TF1*TH1::GetFunction(const char* name) const
virtual const char*TObject::GetIconName() const
virtual Double_t*TH1::GetIntegral()
virtual Double_tTH1::GetKurtosis(Int_t axis = 1) const
virtual Color_tTH1::GetLabelColor(Option_t* axis = "X") const
virtual Style_tTH1::GetLabelFont(Option_t* axis = "X") const
virtual Float_tTH1::GetLabelOffset(Option_t* axis = "X") const
virtual Float_tTH1::GetLabelSize(Option_t* axis = "X") const
virtual Color_tTAttLine::GetLineColor() const
virtual Style_tTAttLine::GetLineStyle() const
virtual Width_tTAttLine::GetLineWidth() const
TList*TH1::GetListOfFunctions() const
virtual voidTH1::GetLowEdge(Double_t* edge) const
virtual Color_tTAttMarker::GetMarkerColor() const
virtual Size_tTAttMarker::GetMarkerSize() const
virtual Style_tTAttMarker::GetMarkerStyle() const
virtual Double_tTH1::GetMaximum(Double_t maxval = FLT_MAX) const
virtual Int_tTH1::GetMaximumBin() const
virtual Int_tTH1::GetMaximumBin(Int_t& locmax, Int_t& locmay, Int_t& locmaz) const
virtual Double_tTH1::GetMaximumStored() const
virtual Double_tTH1::GetMean(Int_t axis = 1) const
virtual Double_tTH1::GetMeanError(Int_t axis = 1) const
virtual Double_tTH1::GetMinimum(Double_t minval = -FLT_MAX) const
virtual Int_tTH1::GetMinimumBin() const
virtual Int_tTH1::GetMinimumBin(Int_t& locmix, Int_t& locmiy, Int_t& locmiz) const
virtual Double_tTH1::GetMinimumStored() const
virtual const char*TNamed::GetName() const
virtual Int_tTH1::GetNbinsX() const
virtual Int_tTH1::GetNbinsY() const
virtual Int_tTH1::GetNbinsZ() const
virtual Int_tTH1::GetNdivisions(Option_t* axis = "X") const
virtual Double_tTH1::GetNormFactor() const
virtual char*TH1::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TH1::GetOption() const
TVirtualHistPainter*TH1::GetPainter(Option_t* option = "")
virtual Int_tTH1::GetQuantiles(Int_t nprobSum, Double_t* q, const Double_t* probSum = 0)
virtual Double_tTH1::GetRandom() const
virtual voidTH2::GetRandom2(Double_t& x, Double_t& y)
virtual Double_tTH1::GetRMS(Int_t axis = 1) const
virtual Double_tTH1::GetRMSError(Int_t axis = 1) const
Int_tTArray::GetSize() const
virtual Double_tTH1::GetSkewness(Int_t axis = 1) const
virtual voidTH2::GetStats(Double_t* stats) const
Stat_tTArrayD::GetSum() const
virtual Double_tTH1::GetSumOfWeights() const
virtual TArrayD*TH1::GetSumw2()
virtual const TArrayD*TH1::GetSumw2() const
virtual Int_tTH1::GetSumw2N() const
virtual Float_tTH1::GetTickLength(Option_t* axis = "X") const
virtual const char*TNamed::GetTitle() const
virtual Style_tTH1::GetTitleFont(Option_t* axis = "X") const
virtual Float_tTH1::GetTitleOffset(Option_t* axis = "X") const
virtual Float_tTH1::GetTitleSize(Option_t* axis = "X") const
virtual UInt_tTObject::GetUniqueID() const
TAxis*TH1::GetXaxis() const
TAxis*TH1::GetYaxis() const
TAxis*TH1::GetZaxis() const
virtual Int_tGradient(Map2D* Vx, Map2D* Vy) const
virtual Bool_tGreensFunction(Double_t x0, Double_t y0)
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
virtual Double_tTH2::Integral(Option_t* option = "") const
virtual Double_tTH2::Integral(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Option_t* option = "") const
virtual Double_tTH2::Integral(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Option_t* = "") const
virtual Double_tTH2::IntegralAndError(Int_t binx1, Int_t binx2, Int_t biny1, Int_t biny2, Double_t& err, Option_t* option = "") const
virtual Double_tTH2::Interpolate(Double_t x)
virtual Double_tTH2::Interpolate(Double_t x, Double_t y)
virtual Double_tTH2::Interpolate(Double_t x, Double_t y, Double_t z)
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
Bool_tTH1::IsBinOverflow(Int_t bin) const
Bool_tTH1::IsBinUnderflow(Int_t bin) const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTNamed::IsSortable() const
virtual Bool_tTAttFill::IsTransparent() const
Bool_tTObject::IsZombie() const
virtual Double_tTH2::KolmogorovTest(const TH1* h2, Option_t* option = "") const
virtual voidTH1::LabelsDeflate(Option_t* axis = "X")
virtual voidTH1::LabelsInflate(Option_t* axis = "X")
virtual voidTH1::LabelsOption(Option_t* option = "h", Option_t* axis = "X")
virtual Int_tLaplaceSolve(const Map2D* mask = 0)
virtual Map2D&Level()
virtual voidTNamed::ls(Option_t* option = "") const
virtual Map2D&Mask(const Map2D* map, Int_t neg = 0, Double_t value = 0)
voidTObject::MayNotUse(const char* method) const
virtual Long64_tTH2::Merge(TCollection* list)
virtual voidTAttLine::Modify()
virtual Bool_tTH1::Multiply(const TH1* h1)
virtual Bool_tTH1::Multiply(TF1* h1, Double_t c1 = 1)
virtual Bool_tTH1::Multiply(const TH1* h1, const TH1* h2, Double_t c1 = 1, Double_t c2 = 1, Option_t* option = "")MENU
virtual Map2D&Normalize()
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
TH2D&TH2D::operator=(const TH2D& h1)
Double_t&TArrayD::operator[](Int_t i)
Double_tTArrayD::operator[](Int_t i) const
virtual voidTH1::Paint(Option_t* option = "")
virtual Double_tPoissonIter(const Map2D* rho = 0, const Map2D* mask = 0)
virtual Int_tPoissonSolve(const Map2D* rho, const Map2D* mask = 0)
virtual voidTObject::Pop()
virtual voidTH1::Print(Option_t* option = "") const
virtual TH1D&Profile(const char* name = "prof", const char* title = "", Int_t nbins = 100, Double_t xlow = 999., Double_t xhigh = 999.)
TProfile*TH2::ProfileX(const char* name = "_pfx", Int_t firstybin = 1, Int_t lastybin = -1, Option_t* option = "") constMENU
TProfile*TH2::ProfileY(const char* name = "_pfy", Int_t firstxbin = 1, Int_t lastxbin = -1, Option_t* option = "") constMENU
TH1D*TH2::ProjectionX(const char* name = "_px", Int_t firstybin = 0, Int_t lastybin = -1, Option_t* option = "") constMENU
TH1D*TH2::ProjectionY(const char* name = "_py", Int_t firstxbin = 0, Int_t lastxbin = -1, Option_t* option = "") constMENU
virtual voidTH2::PutStats(Double_t* stats)
virtual Int_tTObject::Read(const char* name)
static TArray*TArray::ReadArray(TBuffer& b, const TClass* clReq)
virtual TH1*TH1::Rebin(Int_t ngroup = 2, const char* newname = "", const Double_t* xbins = 0)MENU
virtual TH2*TH2::Rebin2D(Int_t nxgroup = 2, Int_t nygroup = 2, const char* newname = "")
virtual voidTH1::RebinAxis(Double_t x, TAxis* axis)
virtual TH2*TH2::RebinX(Int_t ngroup = 2, const char* newname = "")
virtual TH2*TH2::RebinY(Int_t ngroup = 2, const char* newname = "")
virtual voidTH1::Rebuild(Option_t* option = "")
virtual voidTH1::RecursiveRemove(TObject* obj)
virtual Map2D&Rescale(Double_t sx = 1, Double_t sy = 1, Double_t sz = 1)
virtual voidTH2D::Reset(Option_t* option = "")
virtual voidTAttFill::ResetAttFill(Option_t* option = "")
virtual voidTAttLine::ResetAttLine(Option_t* option = "")
virtual voidTAttMarker::ResetAttMarker(Option_t* toption = "")
voidTObject::ResetBit(UInt_t f)
virtual voidTH1::ResetStats()
virtual Map2D&Resize(Double_t xlow, Double_t ylow, Double_t xhigh, Double_t yhigh, Int_t pixels = 0) const
virtual Map2D&Rotate(Double_t phi = 0, Double_t theta = 0, Double_t psi = 0, Int_t degrees = 0)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTAttFill::SaveFillAttributes(ostream& out, const char* name, Int_t coldef = 1, Int_t stydef = 1001)
virtual voidTAttLine::SaveLineAttributes(ostream& out, const char* name, Int_t coldef = 1, Int_t stydef = 1, Int_t widdef = 1)
virtual voidTAttMarker::SaveMarkerAttributes(ostream& out, const char* name, Int_t coldef = 1, Int_t stydef = 1, Int_t sizdef = 1)
virtual voidTH1::SavePrimitive(ostream& out, Option_t* option = "")
virtual voidTH1::Scale(Double_t c1 = 1, Option_t* option = "")
virtual voidTArrayD::Set(Int_t n)
voidTArrayD::Set(Int_t n, const Double_t* array)
virtual voidTArrayD::SetAt(Double_t v, Int_t i)
virtual voidTH1::SetAxisColor(Color_t color = 1, Option_t* axis = "X")
virtual voidTH1::SetAxisRange(Double_t xmin, Double_t xmax, Option_t* axis = "X")
virtual voidTH1::SetBarOffset(Float_t offset = 0.25)
virtual voidTH1::SetBarWidth(Float_t width = 0.5)
virtual voidTH2D::SetBinContent(Int_t bin, Double_t content)
virtual voidTH2D::SetBinContent(Int_t binx, Int_t biny, Double_t content)
virtual voidTH2D::SetBinContent(Int_t binx, Int_t biny, Int_t, Double_t content)
virtual voidTH1::SetBinError(Int_t bin, Double_t error)
virtual voidTH1::SetBinError(Int_t binx, Int_t biny, Double_t error)
virtual voidTH1::SetBinError(Int_t binx, Int_t biny, Int_t binz, Double_t error)
virtual voidTH1::SetBinErrorOption(TH1::EBinErrorOpt type)
virtual voidTH1::SetBins(Int_t nx, const Double_t* xBins)
virtual voidTH1::SetBins(Int_t nx, Double_t xmin, Double_t xmax)
virtual voidTH1::SetBins(Int_t nx, const Double_t* xBins, Int_t ny, const Double_t* yBins)
virtual voidTH1::SetBins(Int_t nx, Double_t xmin, Double_t xmax, Int_t ny, Double_t ymin, Double_t ymax)
virtual voidTH1::SetBins(Int_t nx, const Double_t* xBins, Int_t ny, const Double_t* yBins, Int_t nz, const Double_t* zBins)
virtual voidTH1::SetBins(Int_t nx, Double_t xmin, Double_t xmax, Int_t ny, Double_t ymin, Double_t ymax, Int_t nz, Double_t zmin, Double_t zmax)
virtual voidTH2D::SetBinsLength(Int_t n = -1)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
virtual voidTH1::SetBuffer(Int_t buffersize, Option_t* option = "")
virtual voidTH1::SetCellContent(Int_t binx, Int_t biny, Double_t content)
virtual voidTH1::SetCellError(Int_t binx, Int_t biny, Double_t content)
virtual voidTH1::SetContent(const Double_t* content)
virtual voidTH1::SetContour(Int_t nlevels, const Double_t* levels = 0)
virtual voidTH1::SetContourLevel(Int_t level, Double_t value)
static voidTH1::SetDefaultBufferSize(Int_t buffersize = 1000)
static voidTH1::SetDefaultSumw2(Bool_t sumw2 = kTRUE)
virtual voidTH1::SetDirectory(TDirectory* dir)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidTH1::SetEntries(Double_t n)
virtual voidTH1::SetError(const Double_t* error)
virtual voidTAttFill::SetFillAttributes()MENU
virtual voidTAttFill::SetFillColor(Color_t fcolor)
virtual voidTAttFill::SetFillStyle(Style_t fstyle)
virtual voidTH1::SetLabelColor(Color_t color = 1, Option_t* axis = "X")
virtual voidTH1::SetLabelFont(Style_t font = 62, Option_t* axis = "X")
virtual voidTH1::SetLabelOffset(Float_t offset = 0.005, Option_t* axis = "X")
virtual voidTH1::SetLabelSize(Float_t size = 0.02, Option_t* axis = "X")
virtual voidTAttLine::SetLineAttributes()MENU
virtual voidTAttLine::SetLineColor(Color_t lcolor)
virtual voidTAttLine::SetLineStyle(Style_t lstyle)
virtual voidTAttLine::SetLineWidth(Width_t lwidth)
virtual voidTAttMarker::SetMarkerAttributes()MENU
virtual voidTAttMarker::SetMarkerColor(Color_t tcolor = 1)
virtual voidTAttMarker::SetMarkerSize(Size_t msize = 1)
virtual voidTAttMarker::SetMarkerStyle(Style_t mstyle = 1)
virtual voidTH1::SetMaximum(Double_t maximum = -1111)MENU
virtual voidTH1::SetMinimum(Double_t minimum = -1111)MENU
virtual voidTH1::SetName(const char* name)MENU
virtual voidTH1::SetNameTitle(const char* name, const char* title)
virtual voidTH1::SetNdivisions(Int_t n = 510, Option_t* axis = "X")
virtual voidTH1::SetNormFactor(Double_t factor = 1)
static voidTObject::SetObjectStat(Bool_t stat)
virtual voidTH1::SetOption(Option_t* option = " ")
virtual voidTH2::SetShowProjectionX(Int_t nbins = 1)MENU
virtual voidTH2::SetShowProjectionY(Int_t nbins = 1)MENU
virtual voidTH1::SetStats(Bool_t stats = kTRUE)MENU
virtual voidTH1::SetTickLength(Float_t length = 0.02, Option_t* axis = "X")
virtual voidTH1::SetTitle(const char* title)MENU
virtual voidTH1::SetTitleFont(Style_t font = 62, Option_t* axis = "X")
virtual voidTH1::SetTitleOffset(Float_t offset = 1, Option_t* axis = "X")
virtual voidTH1::SetTitleSize(Float_t size = 0.02, Option_t* axis = "X")
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidTH1::SetXTitle(const char* title)
virtual voidTH1::SetYTitle(const char* title)
virtual voidTH1::SetZTitle(const char* title)
virtual Map2D&Shift(Double_t dx = 0, Double_t dy = 0, Double_t dz = 0)
virtual TH1*TH2::ShowBackground(Int_t niter = 20, Option_t* option = "same")
virtual voidShowMembers(TMemberInspector&)
virtual Int_tTH2::ShowPeaks(Double_t sigma = 2, Option_t* option = "", Double_t threshold = 0.05)MENU
virtual Int_tTNamed::Sizeof() const
virtual voidTH2::Smooth(Int_t ntimes = 1, Option_t* option = "")MENU
static voidTH1::SmoothArray(Int_t NN, Double_t* XX, Int_t ntimes = 1)
static voidTH1::StatOverflows(Bool_t flag = kTRUE)
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTH1::Sumw2()
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
virtual Double_tTotalCurl(const Map2D* Vx, const Map2D* Vy, Map2D** silhouette = 0)
static TH1*TH1::TransformHisto(TVirtualFFT* fft, TH1* h_output, Option_t* option)
virtual Map2D&Uncurl(const Map2D* Vx, const Map2D* Vy, Int_t comp)
virtual voidTH1::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
static voidTArray::WriteArray(TBuffer& b, const TArray* a)
virtual Int_tZeroSuppress(Double_t threshold, Double_t zero = 0)
protected:
Bool_tTArray::BoundsOk(const char* where, Int_t at) const
virtual Int_tTH2::BufferFill(Double_t, Double_t)
virtual Int_tTH2::BufferFill(Double_t x, Double_t y, Double_t w)
static boolTH1::CheckAxisLimits(const TAxis* a1, const TAxis* a2)
static boolTH1::CheckBinLabels(const TAxis* a1, const TAxis* a2)
static boolTH1::CheckBinLimits(const TAxis* a1, const TAxis* a2)
static boolTH1::CheckConsistency(const TH1* h1, const TH1* h2)
static boolTH1::CheckConsistentSubAxes(const TAxis* a1, Int_t firstBin1, Int_t lastBin1, const TAxis* a2, Int_t firstBin2 = 0, Int_t lastBin2 = 0)
static boolTH1::CheckEqualAxes(const TAxis* a1, const TAxis* a2)
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
virtual voidTH2::DoFitSlices(bool onX, TF1* f1, Int_t firstbin, Int_t lastbin, Int_t cut, Option_t* option, TObjArray* arr)
virtual Double_tTH1::DoIntegral(Int_t ix1, Int_t ix2, Int_t iy1, Int_t iy2, Int_t iz1, Int_t iz2, Double_t& err, Option_t* opt, Bool_t doerr = kFALSE) const
virtual TProfile*TH2::DoProfile(bool onX, const char* name, Int_t firstbin, Int_t lastbin, Option_t* option) const
virtual TH1D*TH2::DoProjection(bool onX, const char* name, Int_t firstbin, Int_t lastbin, Option_t* option) const
virtual Bool_tTH1::FindNewAxisLimits(const TAxis* axis, const Double_t point, Double_t& newMin, Double_t& newMax)
voidTObject::MakeZombie()
Bool_tTArray::OutOfBoundsError(const char* where, Int_t i) const
static Bool_tTH1::RecomputeAxisLimits(TAxis& destAxis, const TAxis& anAxis)
Map2D*rescale(Double_t sx, Double_t sy, Double_t sz, Double_t x0, Double_t y0, Double_t z0) const
Map2D*rotateX(Double_t thetarad, Double_t y0, Double_t z0) const
Map2D*rotateY(Double_t thetarad, Double_t x0, Double_t z0) const
Map2D*rotateZ(Double_t phirad, Double_t x0, Double_t y0) const
static Bool_tTH1::SameLimitsAndNBins(const TAxis& axis1, const TAxis& axis2)
virtual voidTH1::SavePrimitiveHelp(ostream& out, const char* hname, Option_t* option = "")
Map2D*shift(Double_t dx, Double_t dy, Double_t dz) const

Data Members

public:
Double_t*TArrayD::fArray[fN] Array of fN doubles
Int_tTArray::fNNumber of array elements
static const Double_tzunit2xy
protected:
Short_tTH1::fBarOffset(1000*offset) for bar charts or legos
Short_tTH1::fBarWidth(1000*width) for bar charts or legos
TH1::EBinErrorOptTH1::fBinStatErrOptoption for bin statistical errors
Double_t*TH1::fBuffer[fBufferSize] entry buffer
Int_tTH1::fBufferSizefBuffer size
TArrayDTH1::fContourArray to display contour levels
Int_tTH1::fDimension!Histogram dimension (1, 2 or 3 dim)
TDirectory*TH1::fDirectory!Pointer to directory holding this histogram
Double_tTH1::fEntriesNumber of entries
Color_tTAttFill::fFillColorfill area color
Style_tTAttFill::fFillStylefill area style
TList*TH1::fFunctions->Pointer to list of functions (fits and user)
Double_t*TH1::fIntegral!Integral of bins used by GetRandom
Color_tTAttLine::fLineColorline color
Style_tTAttLine::fLineStyleline style
Width_tTAttLine::fLineWidthline width
Color_tTAttMarker::fMarkerColorMarker color index
Size_tTAttMarker::fMarkerSizeMarker size
Style_tTAttMarker::fMarkerStyleMarker style
Double_tTH1::fMaximumMaximum value for plotting
Double_tTH1::fMinimumMinimum value for plotting
TStringTNamed::fNameobject identifier
Int_tTH1::fNcellsnumber of bins(1D), cells (2D) +U/Overflows
Double_tTH1::fNormFactorNormalization factor
TStringTH1::fOptionhistogram options
TVirtualHistPainter*TH1::fPainter!pointer to histogram painter
Double_tTH2::fScalefactorScale factor
TArrayDTH1::fSumw2Array of sum of squares of weights
TStringTNamed::fTitleobject title
Double_tTH1::fTsumwTotal Sum of weights
Double_tTH1::fTsumw2Total Sum of squares of weights
Double_tTH1::fTsumwxTotal Sum of weight*X
Double_tTH1::fTsumwx2Total Sum of weight*X*X
Double_tTH2::fTsumwxyTotal Sum of weight*X*Y
Double_tTH2::fTsumwyTotal Sum of weight*Y
Double_tTH2::fTsumwy2Total Sum of weight*Y*Y
TAxisTH1::fXaxisX axis descriptor
TAxisTH1::fYaxisY axis descriptor
TAxisTH1::fZaxisZ axis descriptor
static Bool_tTH1::fgAddDirectory!flag to add histograms to the directory
static Int_tTH1::fgBufferSize!default buffer size for automatic histograms
static Bool_tTH1::fgDefaultSumw2!flag to call TH1::Sumw2 automatically at histogram creation time
static Bool_tTH1::fgStatOverflows!flag to use under/overflows in statistics

Class Charts

Inheritance Inherited Members Includes Libraries
Class Charts

Function documentation

Map2D()
Map2D(const Map2D& m)
Map2D(const TH2D& h)
~Map2D()
{ }
Map2D & Add(const Map2D* map, Double_t c = 1)
 Overloads TH2D::Add, has the same basic behaviour,
 except that zero plus anything is zero.
Map2D & Add(const Map2D* map1, const Map2D* map2, Double_t c1 = 1, Double_t c2 = 1)
 Overloads TH2D::Add, has the same basic behaviour,
 except that zero plus anything is zero.
Map2D & Shift(Double_t dx = 0, Double_t dy = 0, Double_t dz = 0)
 Translates the map image by a distance (dx,dy) in map coordinates,
 and shifts all pixels up or down by vertical distance dz in
 height units.  Image regions shifted outside the range of the
 map are lost.  Image regions shift into the range of the map
 from outside are zero.  Original contents are overwritten.
Map2D * shift(Double_t dx, Double_t dy, Double_t dz) const
 Same as Shift(), except a new object is created to hold
 the results and returned, and the original object is not
 touched.  The caller must delete the returned object.
Map2D & Rotate(Double_t phi = 0, Double_t theta = 0, Double_t psi = 0, Int_t degrees = 0)
 Rotates the map image by Euler angles phi,theta,psi about the center
 of the map surface.  Angles may be in degrees (degrees=1) or
 radians (degrees=0).  The angle phi determines the direction of
 the theta rotation axis in the xy plane, and does not generate
 an independent rotation.  Map rotations only make sense for small
 theta.  The theta rotation is implemented as a rotation about the
 x axis by angle theta*cos(phi) followed by a rotation about the y
 axis by angle theta*sin(phi), with errors entering at the level of
 theta^3.  Rotations in the xy plane (angle psi) may be of any size,
 and may result in clipping of the image.  Regions of the map that
 are rotated outside the map range are lost.  Original contents of
 the map are overwritten.
Map2D * rotateX(Double_t thetarad, Double_t y0, Double_t z0) const
 Rotates the map image about the x axis by angle thetarad in radians.
 The rotation axis is located at coordinate y0 and height z0.
 The map must remain single-valued after the rotation, which places
 an upper limit on the magnitude of theta that depends on the
 height profile of the map relative to z0.  An error message is
 printed if this constraint is violated.  A new Map2D object is
 created to hold the result, and the original object is untouched.
 The caller must delete the returned object.
Map2D * rotateY(Double_t thetarad, Double_t x0, Double_t z0) const
 Rotates the map image about the y axis by angle thetarad in radians.
 The rotation axis is located at coordinate x0 and height z0.
 The map must remain single-valued after the rotation, which places
 an upper limit on the magnitude of theta that depends on the
 height profile of the map relative to z0.  An error message is
 printed if this constraint is violated.  A new Map2D object is
 created to hold the result, and the original object is untouched.
 The caller must delete the returned object.
Map2D * rotateZ(Double_t phirad, Double_t x0, Double_t y0) const
 Rotates the map image about the z axis by angle thetarad in radians.
 The rotation axis is located at (x0,y0) in map coordinates.  There
 are no assumed bounds on phirad.  Regions of the image that move
 outside the map range are clipped and lost.  Regions of the image
 that move into the range from outside are zero.  A new Map2D object
 is created to hold the result, and the original object is untouched.
 The caller must delete the returned object.
Map2D & Rescale(Double_t sx = 1, Double_t sy = 1, Double_t sz = 1)
 Rescales the map image along all three axes by independent scale
 factors.  The origin of the rescaling is taken to be the center
 of the map in x and y, and z=0.  The original map is overwritten.
 Note: the special case of sx=-1,sy=1,sz=-1 or sx=1,sy=-1,sz=-1
 can be used to invert the surface, effectively flipping it over.
Map2D & Resize(Double_t xlow, Double_t ylow, Double_t xhigh, Double_t yhigh, Int_t pixels = 0) const
 Creates a new map with bounds set by corner coordinates (xlow,ylow)
 and (xhigh,yhigh), then copies this map into the new one.  The
 original map (*this) is not modified.  The name of the new map is
 the name of this map with the suffix "_rN", where N is an integer
 starting with 1 and counting forward.
Map2D * rescale(Double_t sx, Double_t sy, Double_t sz, Double_t x0, Double_t y0, Double_t z0) const
 Rescales the map image along all three axes by independent scale
 factors.  The origin of the rescaling is (x0,y0) in map coordinates,
 and z0 in height units.  A new object is created to hold the result
 and the original object is untouched.  The caller must delete the
 returned object.
Double_t Correlation(const Map2D* map, Double_t contrast = 1) const
 Computes the height correlation with another map, useful for
 aligning two images of the same terrain.  The contrast
 argument serves as a weight factor on terms in the sum
 where one or the other of the two maps is zero.  This allows
 control over how zero regions are treated, such that
	contrast=0 : ignore zero regions
	contrast=1 : treat them like plateaus with z=0
   contrast=BIG : boundaries dominate, maps are B/W
 Agreement between their coordinate ranges is not required,
 but the two maps must have the same dimensions.
Map2D & Fill(const Map2D* map)
 Copies the map from the source Map2D object into this object,
 overwriting this object's data but preserving its dimensions and
 axis limits.  Matte pixels in the source map are ignored, making
 this method an effective way to overlay two non-overlapping images.
 No new objects are created.
Map2D & Mask(const Map2D* map, Int_t neg = 0, Double_t value = 0)
 Overlays the input map on the output, and masks (overwrites with matte)
 any cells that are zero in the input map.  Cells in the input map
 that are non-zero are overwritten in *this with the constant "value"
 unless value=0, in which case those pixels are preserved.  If argument
 "neg" is non-zero, the input map is treated as a negative.  Both input
 and output maps must have the same dimensions.  No new objects are
 created.
Int_t ZeroSuppress(Double_t threshold, Double_t zero = 0)
 Scans through the map and finds any pixels less than the supplied
 threshold value, replacing them with the value zero.
Int_t Despeckle(Int_t maxsize = 0)
 Searches the map for regions.  Pixels belong to the same region if
 an unbroken path of contiguous pixels can be found that joins them.
 Two pixels are contiguous if they share a common edge; touching at the
 corners does not count.  Regions up to maxsize pixels are erased
 (overwritten with matte) and a count of the remaining islands of greater
 than maxsize pixels is returned.  If called with maxsize=0 then the
 total number of islands is returned, and the map is not modified.
Int_t Despike(Double_t maxheight, Int_t regionsize = 3)
 Searches the map for localized spikes that appear in regions of
 smoothly varying height, and replaces any spikes that are greater
 than maxheight above or below the local average surface height with
 the local neighborhood average.  The size of the neighborhood is
 (2*regionsize+1)x(2*regionsize+1) in pixels.  This operation is not
 reversible.
Map2D & Center()
 Finds the center of gravity of the non-zero portion of the map
 and applies a shift in x,y to locate the center at the midpoint.
Map2D & Level()
 Locates the left-most and the right-most pixels in the map with
 non-zero values and applies an in-plane rotation such that those
 two pixels are in the same row (y-value) of the map.
Map2D & Normalize()
 Finds the maximum and minimum values of the map, excluding cells
 with zero value, and sets the Max and Min to the corresponding values.
Double_t TotalCurl(const Map2D* Vx, const Map2D* Vy, Map2D** silhouette = 0)
 Forms a closed path around the outermost periphery of the map, and
 computes the total curl of a 2D vector field within that path using
 Stoke's theorem.  The two components of the vector field within the
 plane of the map are accepted as arguments Vx,Vy.  The result is
 returned in the units of V times coordinate length.  The two maps
 given as arguments must have the same dimensions and bounds in x and
 y.  The object being used to compute the curl is overwritten with a
 map filled with zeros everywhere except on the contour around which
 the Stokes integral was performed, with each cell on the contour
 containing the running integral value up to that point.  If optional
 argument silhouette is provided by the caller, it is overwritten upon
 return with a pointer to a new Map2D object with the same shape as
 Vx,Vy whose contents represent an edge-enhanced silhouette of the
 overlaid input maps, with bin values defined as follows.
        0    : the bin is outside the contour,
      (0,1)  : the bin is inside the contour,
     [1,inf) : the bin is on the contour.
 It is up to the user to delete the silhouette object when it is no
 longer needed.
Double_t Curl(const Map2D* Vx, const Map2D* Vy)
 Computes the curl of the 2D vector field represented by the components
 Vx,Vy and stores the result in the *this map.  The value stored in
 each cell of the output map represents the integral of the curl within
 that cell, so that the sum over all cells in the map should equal the
 line integral of the field around a closed loop enclosing the non-zero
 field region, according to Stoke's theorem.  The complementary method
 TotalCurl() is provided to compute the same result using the loop line
 integral.  The return value is the surface integral of the curl.
Map2D & Uncurl(const Map2D* Vx, const Map2D* Vy, Int_t comp)
 Computes a correction to a 2D vector field defined on a plane such
 that the resulting field has zero curl.  This essentially replaces
 one of the two degrees of freedom of the field with the constraint.
 The argument "comp" tells which of the two components is replaced:
      comp = 0: return a replacement for Vx;
      comp = 1; return a replacement for Vy.
 The read-only map arguments Vx,Vy are not modified.

 Algorithm:
 There are an infinite number of replacements for Vx,Vy such that
 Del x (Vx,Vy) = 0, all of which are related to one another through
 gauge transformations.  The purpose here is to modify the field in
 as minimal a fashion as possible to eliminate the curl.  To simplify
 the problem, consider only the subset of solutions that leaves Vx [Vy]
 unchanged, as selected by the user.  This reduces the solution to
 finding a set of independent columns [rows] that zeros the curl within
 that column [row] subject to some criterion for minimal modification.
 In 1D the zero-curl constrain reduces to a first-order differences
 equation (first-order inhomogenous differential equation in 1D written
 in finite-element form) which has just one overall undetermined offset.
  I chose the offset to minimize the sum of the squared differences
 from the corresponding input map.  This uniquely determines the result.
Double_t Divergence(const Map2D* Vx, const Map2D* Vy)
 Computes the divergence of the vector field V whose x,y components
 are passed in as the maps Vx,Vy.  The contents of map *this are
 overwritten with the result.  The return value is the total
 divergence integrated over the output map, in units of V times
 coordinate length.  The two maps given as arguments must have the
 same dimensions and bounds in x and y.
Int_t Gradient(Map2D* Vx, Map2D* Vy) const
 Computes the gradient of the scalar field V in map *this and
 stores the x,y components of the gradient in output maps Vx,Vy.
 Arguments Vx,Vy must point to maps which have been created by the
 user at input, otherwise the corresponding gradient component is not
 computed.  At output these maps are overwritten by the computed
 gradient components.  If both pointer arguments are zero at input
 the routine does nothing and returns 0, otherwise it returns the
 total number of pixels in the map *this for which the gradient vector
 has been computed.
Int_t PoissonSolve(const Map2D* rho, const Map2D* mask = 0)
 Solves the Poisson equation in two dimensions with a source given by
 input map rho, subject to the boundary conditions contained in this
 object at entry.  If input argument "mask" points to an existing object,
 that object is interpreted as a mask for the pixels in map *this that
 contain boundary values, otherwise all non-zero pixels in map *this
 at input are considered to specify boundary values.  The algorithm
 will make use of as many (or few) boundary values as the user provides,
 although the solution may not satisfy all of them exactly if the
 problem is over-determined, i.e. too many values are provided, or they
 are clustered in too compact a region of the map.  In any case, the
 solution will attempt to match all of the provided data points as
 closely as possible, subject to the constraints of Poisson's equation
 and the resolution of the map.  All cells in the map *this are over
 written with the solution except those specifying boundary conditions.

 Return value:
 The return value is the rank of the matrix that expresses LaPlace's
 equation for the given boundary conditions.  The rank expresses the
 effective number of independent boundary values that were used in
 attempting the satisfy the stated boundary conditions.

 Algorithm:
 First the Green's function for the 2D Poisson equation with a point
 (single pixel) source is evaluated for each non-zero pixel in rho,
 and the results are superimposed.  At this point, the solution obeys
 Poisson's equation but with arbitrary boundary conditions. The map
 is now subtracted from map *this that specify the boundary values
 for the problem, and the resulting map is handed to LaplaceSolve()
 to find the homogeneous part of the solution.  Adding the homogenous
 and inhomogenous parts yields the full solution, which is returned
 in this object.

 Timing:
 The time required to complete this function increases quickly with
 the dimensions of the map.  The following figures are for a single
 Intel Core2 quad-core processor at 3.4GHz running a single thread.

   t = (56 + 5.3e-8 Ndim^4.2 + 4.9e-9 Ndim^4.2) seconds
         ^    ^               ^
         |    |               |
         |    |                \.
         |    |                 \--- compute the homogeneous part
         |    |
         |     \--- compute the Greens function integral
         |
          \--- compute the Greens function (35x35 discrete kernel)

 Example: for a 1000 x 1000 pixel map, t = 229,000 seconds (64 hr)
Double_t PoissonIter(const Map2D* rho = 0, const Map2D* mask = 0)
 Iterates the Poisson equation in two dimensions with a source given by
 input map rho, subject to the boundary conditions contained in this
 object at entry.  If input argument "mask" points to an existing object,
 that object is interpreted as a mask for the pixels in map *this that
 contain boundary values, otherwise all non-zero pixels in map *this
 at input are considered to specify boundary values.  The algorithm
 will make use of as many (or few) boundary values as the user provides,
 although the solution may not satisfy all of them exactly if the
 problem is over-determined, i.e. too many values are provided, or they
 are clustered in too compact a region of the map.  In any case, the
 solution will attempt to match all of the provided data points as
 closely as possible, subject to the constraints of Poisson's equation
 and the resolution of the map.  All cells in the map *this are over
 written with the solution except those specifying boundary conditions.

 Return value:
 The largest correction that was applied to any cell in the map in the
 present iteration, or zero if no changes were made.

 Algorithm:
 The following formula is applied to all cells except those with rho=0
 and the ones that specify boundary conditions.  Boundary condition
 cells are identified by having a non-zero value in the corresponding
 cell of the mask map, or if mask=0, by having non-zero values in the
 *this map at entry.

           / (n)    (n)   \    2   / (n)    (n)   \   2            2  2
          | u   +  u       | dy + | u   +  u       | dx  - rho   dx dy
  (n+1)    \ i-1,j  i+1,j /        \ i,j-1  i,j+1 /           i,j
 u     =   -------------------------------------------------------------
  i,j                        /  2      2 \                            .
                          2 | dx  +  dy   |
                             \           /                            .

 Timing:
Bool_t GreensFunction(Double_t x0, Double_t y0)
  The Green's function for the 2D Poisson equation can be written most
  compactly as follows,

                             1        |      2        2 |
             G(x,y;x ,y ) = ----  log |(x-x ) + (y-y )  |
                    0  0    4 pi      |    0        0   |

 where x0,y0 is the location of the source.  In two dimensions it is
 not possible to set the boundary conditions for G->0 at x0,y0->infinity
 so instead one choses that G=0 at some finite radius R.  The expression
 above has been written with R=1, but adding a constant term can be used
 to shift R to an arbitrary radius, except for the singular values 0 and
 infinity.  The result is loaded into this map, overwriting any contents
 that were present at input, but leaving the dimensions and bounds of
 the original map unchanged.  The point x0,y0 is assumed to lie somewhere
 within the bounds of the map.

 This is the correct expression for the continuum case, but it diverges
 as x,y -> x0,y0, and has large discretization errors for pixels nearby.
 For this reason, I take a NxN pixel square region centered around x0,y0
 and replace the computed value of G for these pixels with the solution
 to the discrete NxN matrix Poisson equation on a square grid, subject
 to the boundary condition that the cells around the outer perimeter of
 the NxN pixel block match onto the above continuum formula.  By chosing
 N to be sufficiently large, the residual discretization errors are kept
 to a negligible level.
Int_t LaplaceSolve(const Map2D* mask = 0)
 Solves the Laplace equation in two dimensions, subject to the boundary
 conditions contained in this object at entry.  If input argument "mask"
 points to an existing object, that object is interpreted as a mask for
 the pixels in map *this that contain boundary values, otherwise all
 non-zero pixels in map *this at input are considered to specify
 boundary values.  The algorithm will make use of as many (or few)
 boundary values as the user provides, although the solution may not
 satisfy all of them exactly if the problem is over-determined, i.e.
 too many values are provided, or they are clustered in too compact a
 region of the map.  In any case, the solution will attempt to match all
 of the provided data points as closely as possible, subject to the
 constraints of the Laplace equation and the resolution of the map.
  All cells in the map *this are over written with the solution.

 Algorithm:
 The problem is solved in the basis of solutions to Laplace's equation
 in polar coordinates.  Here f_n is a stackable column vector of two
 basis functions

                             /                              .
                         m  |  cos(m phi)
            f (x,y) =   r  <
             m              |  sin(m phi)
                             \                              .

 There is a second set of solutions that are singular at the origin,
 but these are excluded because the interior region of the map is
 assumed to include the origin, taken to lie at the geometric center
 of the map.  Note that for n=0 the second element of f_n is identically
 zero.  To form a column vector of basis functions F_i, imagine a stack
 of f_m column vectors starting with m=0 at the top, and increasing
 downward until the number N of elements in F equals at least M, the
 number the pixels (x_j,y_j), j=0..M that are provided as boundary
 values in the input map.  This results in a large MxN matrix A_ji
 such that
                   A     = F ( x , y )
                    j,i     i   j   j

 Solving Laplace's equation now amounts to solving the linear equation

                   A    C  = z
                    j,i  i    j

 for unknown coefficients C_i in terms of initial values z_j for pixel j.
 In general A is not a square matrix, and has many singular values.  I
 solve this equation using singular value decomposition, and identify
 the rank of the matrix A, which is passed as the return value from this
 method.  The results of the singular value decomposition are used to
 filter the given values z_j into the unknown coefficients C_i, which
 are then used to fill the map with the optimal solution to the boundary
 value problem.

 The user should pay careful attention to this value, as it may
 indicate that the problem is ill-posed.  In general, one expects that
 the rank will be close to the number of boundary values provided.  It
 will never be greater.  If the rank is significantly less than the
 number of boundary values provided, it may indicate that the boundary
 values over-determine the solution, or it may simply mean that fewer
 basis functions are needed to describe the solution than the number
 of boundary values would naively suggest.
TH1D & Profile(const char* name = "prof", const char* title = "", Int_t nbins = 100, Double_t xlow = 999., Double_t xhigh = 999.)
 Scans over the map and forms a histogram of the cell heights,
 omitting the cells that contain zero.