Ignore:
Timestamp:
12/21/08 18:09:49 (16 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mhbase/MH.cc

    r9186 r9195  
    11/* ======================================================================== *\
    2 ! $Name: not supported by cvs2svn $:$Id: MH.cc,v 1.41 2008-12-02 11:22:15 tbretz Exp $
     2! $Name: not supported by cvs2svn $:$Id: MH.cc,v 1.42 2008-12-21 18:09:49 tbretz Exp $
    33! --------------------------------------------------------------------------
    44!
     
    16161616        CreateGradientColorTable(8, s, r, g, b, ncol);
    16171617        found=kTRUE;
    1618     }
     1618    }/*
     1619    if (paletteName.Contains("glows2"))
     1620    {
     1621        double s[10] = {0.00, 0.17, 0.35, 0.50, 0.65, 0.73, 0.77, 0.85, 0.92, 1.00};
     1622        double r[10] = {0.09, 0.18, 0.09, 0.00, 0.00, 0.20, 0.55, 0.85, 1.00, 1.00};
     1623        double g[10] = {0.81, 0.51, 0.27, 0.00, 0.00, 0.05, 0.10, 0.20, 0.73, 1.00};
     1624        double b[10] = {0.70, 0.40, 0.02, 0.00, 0.27, 0.40, 0.35, 0.16, 0.03, 1.00};
     1625        gStyle->CreateGradientColorTable(10, s, r, g, b, ncol);
     1626        found=kTRUE;
     1627    }*/
    16191628
    16201629    if (paletteName.Contains("redish"))
     
    16681677        gLog << warn << "MH::SetPalette: Palette " << paletteName << " unknown... ignored." << endl;
    16691678}
     1679
     1680// --------------------------------------------------------------------------
     1681//
     1682// Unfortunately in TH1::GetObjectInfo the buffer is just 64 characters
     1683// which is sometimes to small. This is just a copy of the code but the
     1684// buffer has been increased to 128 which should fairly be enough.
     1685//
     1686//  Necessary for root <= 5.22/00
     1687//
     1688char *MH::GetObjectInfoH(Int_t px, Int_t py, const TH1 &h)
     1689{
     1690   const TH1 *fH = &h;
     1691   const TAxis *fXaxis = h.GetXaxis();
     1692   const TAxis *fYaxis = h.GetYaxis();
     1693
     1694   //   Redefines TObject::GetObjectInfo.
     1695   //   Displays the histogram info (bin number, contents, integral up to bin
     1696   //   corresponding to cursor position px,py
     1697
     1698   if (!gPad) return (char*)"";
     1699
     1700   static char info[128];
     1701   Double_t x  = gPad->PadtoX(gPad->AbsPixeltoX(px));
     1702   Double_t y  = gPad->PadtoY(gPad->AbsPixeltoY(py));
     1703   Double_t x1 = gPad->PadtoX(gPad->AbsPixeltoX(px+1));
     1704   const char *drawOption = fH->GetDrawOption();
     1705   Double_t xmin, xmax, uxmin,uxmax;
     1706   Double_t ymin, ymax, uymin,uymax;
     1707   if (fH->GetDimension() == 2) {
     1708      if (gPad->GetView() || strncmp(drawOption,"cont",4) == 0
     1709                          || strncmp(drawOption,"CONT",4) == 0) {
     1710         uxmin=gPad->GetUxmin();
     1711         uxmax=gPad->GetUxmax();
     1712         xmin = fXaxis->GetBinLowEdge(fXaxis->GetFirst());
     1713         xmax = fXaxis->GetBinUpEdge(fXaxis->GetLast());
     1714         x = xmin +(xmax-xmin)*(x-uxmin)/(uxmax-uxmin);
     1715         uymin=gPad->GetUymin();
     1716         uymax=gPad->GetUymax();
     1717         ymin = fYaxis->GetBinLowEdge(fYaxis->GetFirst());
     1718         ymax = fYaxis->GetBinUpEdge(fYaxis->GetLast());
     1719         y = ymin +(ymax-ymin)*(y-uymin)/(uymax-uymin);
     1720      }
     1721   }
     1722   Int_t binx,biny,binmin,binx1;
     1723   if (gPad->IsVertical()) {
     1724      binx   = fXaxis->FindFixBin(x);
     1725      binmin = fXaxis->GetFirst();
     1726      binx1  = fXaxis->FindFixBin(x1);
     1727      // special case if more than 1 bin in x per pixel
     1728      if (binx1-binx>1 && fH->GetDimension() == 1) {
     1729         Double_t binval=fH->GetBinContent(binx);
     1730         Int_t binnear=binx;
     1731         for (Int_t ibin=binx+1; ibin<binx1; ibin++) {
     1732            Double_t binvaltmp = fH->GetBinContent(ibin);
     1733            if (TMath::Abs(y-binvaltmp) < TMath::Abs(y-binval)) {
     1734               binval=binvaltmp;
     1735               binnear=ibin;
     1736            }
     1737         }
     1738         binx = binnear;
     1739      }
     1740   } else {
     1741      x1 = gPad->PadtoY(gPad->AbsPixeltoY(py+1));
     1742      binx   = fXaxis->FindFixBin(y);
     1743      binmin = fXaxis->GetFirst();
     1744      binx1  = fXaxis->FindFixBin(x1);
     1745      // special case if more than 1 bin in x per pixel
     1746      if (binx1-binx>1 && fH->GetDimension() == 1) {
     1747         Double_t binval=fH->GetBinContent(binx);
     1748         Int_t binnear=binx;
     1749         for (Int_t ibin=binx+1; ibin<binx1; ibin++) {
     1750            Double_t binvaltmp = fH->GetBinContent(ibin);
     1751            if (TMath::Abs(x-binvaltmp) < TMath::Abs(x-binval)) {
     1752               binval=binvaltmp;
     1753               binnear=ibin;
     1754            }
     1755         }
     1756         binx = binnear;
     1757      }
     1758   }
     1759   if (fH->GetDimension() == 1) {
     1760      Double_t integ = 0;
     1761      for (Int_t bin=binmin;bin<=binx;bin++) {integ += fH->GetBinContent(bin);}
     1762      sprintf(info,"(x=%g, y=%g, binx=%d, binc=%g, Sum=%g)",x,y,binx,fH->GetBinContent(binx),integ);
     1763   } else {
     1764      biny = fYaxis->FindFixBin(y);
     1765      sprintf(info,"(x=%g, y=%g, binx=%d, biny=%d, binc=%g)",x,y,binx,biny,fH->GetCellContent(binx,biny));
     1766   }
     1767   return info;
     1768}
     1769
     1770// --------------------------------------------------------------------------
     1771//
     1772// Unfortunately in TProfile::GetObjectInfo the buffer is just 64 characters
     1773// which is sometimes to small. This is just a copy of the code but the
     1774// buffer has been increased to 128 which should fairly be enough.
     1775//
     1776//  Necessary for root <= 5.22/00
     1777//
     1778char *MH::GetObjectInfoP(Int_t px, Int_t py, const TProfile &p)
     1779{
     1780    if (!gPad) return (char*)"";
     1781    static char info[128];
     1782    Double_t x  = gPad->PadtoX(gPad->AbsPixeltoX(px));
     1783    Double_t y  = gPad->PadtoY(gPad->AbsPixeltoY(py));
     1784    Int_t binx   = p.GetXaxis()->FindFixBin(x);
     1785    sprintf(info,"(x=%g, y=%g, binx=%d, binc=%g, bine=%g, binn=%d)", x, y, binx, p.GetBinContent(binx), p.GetBinError(binx), (Int_t)p.GetBinEntries(binx));
     1786    return info;
     1787}
     1788
     1789// --------------------------------------------------------------------------
     1790//
     1791// Unfortunately TH1::GetObjectInfo and TProfile::GetObjectInfo can
     1792// result in buffer ovwerflows therefor we have to re-implement these
     1793// function by our own.
     1794//
     1795//  Necessary for root <= 5.22/00
     1796//
     1797char *MH::GetObjectInfo(Int_t px, Int_t py, const TObject &o)
     1798{
     1799    if (!o.InheritsFrom(TH1::Class()))
     1800        return o.GetObjectInfo(px, py);
     1801
     1802    if (o.InheritsFrom(TProfile::Class()))
     1803        return GetObjectInfoP(px, py, static_cast<const TProfile&>(o));
     1804
     1805    if (o.InheritsFrom("MHCamera"))
     1806        return o.GetObjectInfo(px, py);
     1807
     1808    if (o.InheritsFrom(TH1::Class()))
     1809        return GetObjectInfoH(px, py, static_cast<const TH1&>(o));
     1810
     1811    return "MH::GetObjectInfo: unknown class.";
     1812}
Note: See TracChangeset for help on using the changeset viewer.