ROOT logo
// $Id: THealPaletteAxis.cxx,v 1.1 2008/07/09 11:50:11 oxon Exp $
// Author: Akira Okumura 2008/07/09

/*****************************************************************************
   Copyright (C) 2008-, Akira Okumura
   All rights reserved.
******************************************************************************/

#include "Riostream.h"
#include "TGaxis.h"
#include "TMath.h"
#include "TROOT.h"
#include "TStyle.h"
#include "TView.h"
#include "TVirtualPad.h"

#include "THealPix.h"
#include "THealPaletteAxis.h"

ClassImp(THealPaletteAxis)

//______________________________________________________________________________
//
// a THealPaletteAxis object is used to display the color palette when
// drawing 2-d histograms.
// The object is automatically created when drawing a 2-D histogram
// when the option "z" is specified.
// The object is added to the histogram list of functions and can be retrieved
// and its attributes changed with:
//  THealPaletteAxis *palette = (THealPaletteAxis*)h->GetListOfFunctions()->FindObject("palette");
//
// The palette can be interactively moved and resized. The context menu
// can be used to set the axis attributes.
//
// It is possible to select a range on the axis to set the min/max in z
//
//Begin_Html
/*
<img src="gif/palette.gif">
*/
//End_Html
//

//______________________________________________________________________________
THealPaletteAxis::THealPaletteAxis(): TPave()
{
// palette default constructor

   fHeal  = 0;
   SetName("");
}

//______________________________________________________________________________
THealPaletteAxis::THealPaletteAxis(Double_t x1, Double_t y1,Double_t x2, Double_t  y2, THealPix* hp)
       :TPave(x1,y1,x2,y2)
{
// palette normal constructor

   fHeal = hp;
   SetName("palette");
   TAxis *zaxis = fHeal->GetZaxis();
   fAxis.ImportAxisAttributes(zaxis);
   if (gPad->GetView()) SetBit(kHasView);
}

//______________________________________________________________________________
THealPaletteAxis::~THealPaletteAxis()
{
// palette destructor
   if (fHeal) fHeal->GetListOfFunctions()->Remove(this);
}

//______________________________________________________________________________
THealPaletteAxis::THealPaletteAxis(const THealPaletteAxis &palette) : TPave(palette)
{
// palette copy constructor
   ((THealPaletteAxis&)palette).Copy(*this);
}

//______________________________________________________________________________
void THealPaletteAxis::Copy(TObject &obj) const
{
//*-*-*-*-*-*-*-*-*-*-*Copy this pave to pave*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                  ======================

   TPave::Copy(obj);
   ((THealPaletteAxis&)obj).fHeal    = fHeal;
   ((THealPaletteAxis&)obj).fName = fName;
}

//______________________________________________________________________________
Int_t THealPaletteAxis::DistancetoPrimitive(Int_t px, Int_t py)
{
   //check if mouse on the axis region
   Int_t plxmax = gPad->XtoAbsPixel(fX2);
   Int_t plymin = gPad->YtoAbsPixel(fY1);
   Int_t plymax = gPad->YtoAbsPixel(fY2);
   if (px > plxmax && px < plxmax+30 && py >= plymax &&py <= plymin) return px-plxmax;

   //otherwise check if inside the box
   return TPave::DistancetoPrimitive(px,py);
}

//______________________________________________________________________________
void THealPaletteAxis::ExecuteEvent(Int_t event, Int_t px, Int_t py)
{
   //check if mouse on the axis region
   static Int_t kmode = 0;
   Int_t plxmin = gPad->XtoAbsPixel(fX1);
   Int_t plxmax = gPad->XtoAbsPixel(fX2);
   if (kmode != 0 || px <= plxmax) {
      if (event == kButton1Down) kmode = 1;
      TBox::ExecuteEvent(event,px,py);
      if (event == kButton1Up) kmode = 0;
//*-* In case pave coordinates have been modified, recompute NDC coordinates
      Double_t dpx  = gPad->GetX2() - gPad->GetX1();
      Double_t dpy  = gPad->GetY2() - gPad->GetY1();
      Double_t xp1  = gPad->GetX1();
      Double_t yp1  = gPad->GetY1();
      fX1NDC = (fX1-xp1)/dpx;
      fY1NDC = (fY1-yp1)/dpy;
      fX2NDC = (fX2-xp1)/dpx;
      fY2NDC = (fY2-yp1)/dpy;
      return;
   }
   gPad->SetCursor(kHand);
   static Double_t ratio1, ratio2;
   static Int_t px1old, py1old, px2old, py2old;
   Double_t temp, xmin,xmax;

   switch (event) {

   case kButton1Down:
      ratio1 = (gPad->AbsPixeltoY(py) - fY1)/(fY2 - fY1);
      py1old = gPad->YtoAbsPixel(fY1+ratio1*(fY2 - fY1));
      px1old = plxmin;
      px2old = plxmax;
      py2old = py1old;
      gVirtualX->DrawBox(px1old, py1old, px2old, py2old, TVirtualX::kHollow);
      gVirtualX->SetLineColor(-1);
      // No break !!!

   case kButton1Motion:
      gVirtualX->DrawBox(px1old, py1old, px2old, py2old, TVirtualX::kHollow);
      ratio2 = (gPad->AbsPixeltoY(py) - fY1)/(fY2 - fY1);
      py2old = gPad->YtoAbsPixel(fY1+ratio2*(fY2 - fY1));
      gVirtualX->DrawBox(px1old, py1old, px2old, py2old, TVirtualX::kHollow);
      break;

   case kButton1Up:
      if (gROOT->IsEscaped()) {
         gROOT->SetEscape(kFALSE);
         break;
      }

      ratio2 = (gPad->AbsPixeltoY(py) - fY1)/(fY2 - fY1);
      xmin = ratio1;
      xmax = ratio2;
      if (xmin > xmax) {
         temp   = xmin;
         xmin   = xmax;
         xmax   = temp;
         temp   = ratio1;
         ratio1 = ratio2;
         ratio2 = temp;
      }
      if (ratio2 - ratio1 > 0.05) {
	Double_t zmin = fHeal->GetMinimum();
	Double_t zmax = fHeal->GetMaximum();
	if(gPad->GetLogz()){
	  if (zmin <= 0 && zmax > 0) zmin = TMath::Min((Double_t)1,
						       (Double_t)0.001*zmax);
	  zmin = TMath::Log10(zmin);
	  zmax = TMath::Log10(zmax);
	}
	Double_t newmin = zmin + (zmax-zmin)*ratio1;
	Double_t newmax = zmin + (zmax-zmin)*ratio2;
	if(newmin < zmin)newmin = fHeal->GetBinContent(fHeal->GetMinimumBin());
	if(newmax > zmax)newmax = fHeal->GetBinContent(fHeal->GetMaximumBin());
	if(gPad->GetLogz()){
	  newmin = TMath::Exp(2.302585092994*newmin);
	  newmax = TMath::Exp(2.302585092994*newmax);
	}
	fHeal->SetMinimum(newmin);
	fHeal->SetMaximum(newmax);
	fHeal->SetBit(THealPix::kIsZoomed);
	gPad->Modified(kTRUE);
      }
      gVirtualX->SetLineColor(-1);
      kmode = 0;
      break;
   }
}

//______________________________________________________________________________
char *THealPaletteAxis::GetObjectInfo(Int_t /* px */, Int_t py) const
{
//   Redefines TObject::GetObjectInfo.
//   Displays the z value corresponding to cursor position py
// 
   Double_t z;
   static char info[64];

   Double_t zmin = fHeal->GetMinimum();
   Double_t zmax = fHeal->GetMaximum();
   Int_t   y1   = gPad->GetWh()-gPad->VtoPixel(fY1NDC);
   Int_t   y2   = gPad->GetWh()-gPad->VtoPixel(fY2NDC);
   Int_t   y    = gPad->GetWh()-py;

   if (gPad->GetLogz()) {
      if (zmin <= 0 && zmax > 0) zmin = TMath::Min((Double_t)1,
                                                   (Double_t)0.001*zmax);
      Double_t zminl = TMath::Log10(zmin);
      Double_t zmaxl = TMath::Log10(zmax);
      Double_t zl    = (zmaxl-zminl)*((Double_t)(y-y1)/(Double_t)(y2-y1))+zminl;
      z = TMath::Power(10.,zl);
   } else {
      z = (zmax-zmin)*((Double_t)(y-y1)/(Double_t)(y2-y1))+zmin;
   }

   sprintf(info,"(z=%g)",z);
   return info;
}


//______________________________________________________________________________
void THealPaletteAxis::Paint(Option_t *)
{
// Paint the palette

   ConvertNDCtoPad();

   SetFillStyle(1001);
   Double_t ymin = fY1;
   Double_t ymax = fY2;
   Double_t xmin = fX1;
   Double_t xmax = fX2;
   Double_t wmin = fHeal->GetMinimum();
   Double_t wmax = fHeal->GetMaximum();
   Double_t wlmin = wmin;
   Double_t wlmax = wmax;
   Double_t y1,y2,w1,w2,zc;
   if (gPad->GetLogz()) {
      if (wmin <= 0 && wmax > 0) wmin = TMath::Min((Double_t)1,
                                                   (Double_t)0.001*wmax);
      wlmin = TMath::Log10(wmin);
      wlmax = TMath::Log10(wmax);
   }
   Double_t ws    = wlmax-wlmin;
   Int_t ncolors = gStyle->GetNumberOfColors();
   Int_t ndivz = TMath::Abs(fHeal->GetContour());
   Int_t theColor,color;
   Double_t scale = ndivz/(wlmax - wlmin);
   for (Int_t i=0;i<ndivz;i++) {

      zc = fHeal->GetContourLevel(i);
      if (fHeal->TestBit(THealPix::kUserContour) && gPad->GetLogz())
         zc = TMath::Log10(zc);
      w1 = zc;
      if (w1 < wlmin) w1 = wlmin;

      w2 = wlmax;
      if (i < ndivz-1) {
         zc = fHeal->GetContourLevel(i+1);
         if (fHeal->TestBit(THealPix::kUserContour) && gPad->GetLogz())
            zc = TMath::Log10(zc);
         w2 = zc;
      }

      if (w2 <= wlmin) continue;
      y1 = ymin + (w1-wlmin)*(ymax-ymin)/ws;
      y2 = ymin + (w2-wlmin)*(ymax-ymin)/ws;

      if (fHeal->TestBit(THealPix::kUserContour)) {
         color = i;
      } else {
         color = Int_t(0.01+(w1-wlmin)*scale);
      }

      theColor = Int_t((color+0.99)*Double_t(ncolors)/Double_t(ndivz));
      SetFillColor(gStyle->GetColorPalette(theColor));
      TAttFill::Modify();
      gPad->PaintBox(xmin,y1,xmax,y2);
   }
   Int_t ndiv  = fHeal->GetZaxis()->GetNdivisions()%100; //take primary divisions only
   char chopt[5] = "S   ";
   chopt[1] = 0;
   strcat(chopt, "+L");
   if (ndiv < 0) {
      ndiv =TMath::Abs(ndiv);
      strcat(chopt, "N");
   }
   if (gPad->GetLogz()) {
      wmin = TMath::Power(10.,wlmin);
      wmax = TMath::Power(10.,wlmax);
      strcat(chopt, "G");
   }
   fAxis.PaintAxis(xmax,ymin,xmax,ymax,wmin,wmax,ndiv,chopt);
}

//______________________________________________________________________________
void THealPaletteAxis::SavePrimitive(std::ostream &out, Option_t * /*= ""*/)
{
   // Save primitive as a C++ statement(s) on output stream out.

   //char quote = '"';
   out<<"   "<<std::endl;
   if (gROOT->ClassSaved(THealPaletteAxis::Class())) {
      out<<"   ";
   } else {
      out<<"   "<<ClassName()<<" *";
   }
   if (fOption.Contains("NDC")) {
      out<<"palette = new "<<ClassName()<<"("<<fX1NDC<<","<<fY1NDC<<","<<fX2NDC<<","<<fY2NDC
      <<","<<fHeal->GetName()<<");"<<std::endl;
   } else {
      out<<"palette = new "<<ClassName()<<"("<<fX1<<","<<fY1<<","<<fX2<<","<<fY2
      <<","<<fHeal->GetName()<<");"<<std::endl;
   }
   out<<"palette->SetLabelColor(" <<fAxis.GetLabelColor()<<");"<<std::endl;
   out<<"palette->SetLabelFont("  <<fAxis.GetLabelFont()<<");"<<std::endl;
   out<<"palette->SetLabelOffset("<<fAxis.GetLabelOffset()<<");"<<std::endl;
   out<<"palette->SetLabelSize("  <<fAxis.GetLabelSize()<<");"<<std::endl;
   out<<"palette->SetTitleOffset("<<fAxis.GetTitleOffset()<<");"<<std::endl;
   out<<"palette->SetTitleSize("  <<fAxis.GetTitleSize()<<");"<<std::endl;
   SaveFillAttributes(out,"palette",-1,-1);
   SaveLineAttributes(out,"palette",1,1,1);
}

//______________________________________________________________________________
void THealPaletteAxis::UnZoom()
{
   // Unzoom the palette

   TView *view = gPad->GetView();
   if (view) {
      delete view;
      gPad->SetView(0);
   }
   fHeal->GetZaxis()->SetRange(0,0);
   fHeal->SetMinimum();
   fHeal->SetMaximum();
   fHeal->ResetBit(THealPix::kIsZoomed);
}
 THealPaletteAxis.cxx:1
 THealPaletteAxis.cxx:2
 THealPaletteAxis.cxx:3
 THealPaletteAxis.cxx:4
 THealPaletteAxis.cxx:5
 THealPaletteAxis.cxx:6
 THealPaletteAxis.cxx:7
 THealPaletteAxis.cxx:8
 THealPaletteAxis.cxx:9
 THealPaletteAxis.cxx:10
 THealPaletteAxis.cxx:11
 THealPaletteAxis.cxx:12
 THealPaletteAxis.cxx:13
 THealPaletteAxis.cxx:14
 THealPaletteAxis.cxx:15
 THealPaletteAxis.cxx:16
 THealPaletteAxis.cxx:17
 THealPaletteAxis.cxx:18
 THealPaletteAxis.cxx:19
 THealPaletteAxis.cxx:20
 THealPaletteAxis.cxx:21
 THealPaletteAxis.cxx:22
 THealPaletteAxis.cxx:23
 THealPaletteAxis.cxx:24
 THealPaletteAxis.cxx:25
 THealPaletteAxis.cxx:26
 THealPaletteAxis.cxx:27
 THealPaletteAxis.cxx:28
 THealPaletteAxis.cxx:29
 THealPaletteAxis.cxx:30
 THealPaletteAxis.cxx:31
 THealPaletteAxis.cxx:32
 THealPaletteAxis.cxx:33
 THealPaletteAxis.cxx:34
 THealPaletteAxis.cxx:35
 THealPaletteAxis.cxx:36
 THealPaletteAxis.cxx:37
 THealPaletteAxis.cxx:38
 THealPaletteAxis.cxx:39
 THealPaletteAxis.cxx:40
 THealPaletteAxis.cxx:41
 THealPaletteAxis.cxx:42
 THealPaletteAxis.cxx:43
 THealPaletteAxis.cxx:44
 THealPaletteAxis.cxx:45
 THealPaletteAxis.cxx:46
 THealPaletteAxis.cxx:47
 THealPaletteAxis.cxx:48
 THealPaletteAxis.cxx:49
 THealPaletteAxis.cxx:50
 THealPaletteAxis.cxx:51
 THealPaletteAxis.cxx:52
 THealPaletteAxis.cxx:53
 THealPaletteAxis.cxx:54
 THealPaletteAxis.cxx:55
 THealPaletteAxis.cxx:56
 THealPaletteAxis.cxx:57
 THealPaletteAxis.cxx:58
 THealPaletteAxis.cxx:59
 THealPaletteAxis.cxx:60
 THealPaletteAxis.cxx:61
 THealPaletteAxis.cxx:62
 THealPaletteAxis.cxx:63
 THealPaletteAxis.cxx:64
 THealPaletteAxis.cxx:65
 THealPaletteAxis.cxx:66
 THealPaletteAxis.cxx:67
 THealPaletteAxis.cxx:68
 THealPaletteAxis.cxx:69
 THealPaletteAxis.cxx:70
 THealPaletteAxis.cxx:71
 THealPaletteAxis.cxx:72
 THealPaletteAxis.cxx:73
 THealPaletteAxis.cxx:74
 THealPaletteAxis.cxx:75
 THealPaletteAxis.cxx:76
 THealPaletteAxis.cxx:77
 THealPaletteAxis.cxx:78
 THealPaletteAxis.cxx:79
 THealPaletteAxis.cxx:80
 THealPaletteAxis.cxx:81
 THealPaletteAxis.cxx:82
 THealPaletteAxis.cxx:83
 THealPaletteAxis.cxx:84
 THealPaletteAxis.cxx:85
 THealPaletteAxis.cxx:86
 THealPaletteAxis.cxx:87
 THealPaletteAxis.cxx:88
 THealPaletteAxis.cxx:89
 THealPaletteAxis.cxx:90
 THealPaletteAxis.cxx:91
 THealPaletteAxis.cxx:92
 THealPaletteAxis.cxx:93
 THealPaletteAxis.cxx:94
 THealPaletteAxis.cxx:95
 THealPaletteAxis.cxx:96
 THealPaletteAxis.cxx:97
 THealPaletteAxis.cxx:98
 THealPaletteAxis.cxx:99
 THealPaletteAxis.cxx:100
 THealPaletteAxis.cxx:101
 THealPaletteAxis.cxx:102
 THealPaletteAxis.cxx:103
 THealPaletteAxis.cxx:104
 THealPaletteAxis.cxx:105
 THealPaletteAxis.cxx:106
 THealPaletteAxis.cxx:107
 THealPaletteAxis.cxx:108
 THealPaletteAxis.cxx:109
 THealPaletteAxis.cxx:110
 THealPaletteAxis.cxx:111
 THealPaletteAxis.cxx:112
 THealPaletteAxis.cxx:113
 THealPaletteAxis.cxx:114
 THealPaletteAxis.cxx:115
 THealPaletteAxis.cxx:116
 THealPaletteAxis.cxx:117
 THealPaletteAxis.cxx:118
 THealPaletteAxis.cxx:119
 THealPaletteAxis.cxx:120
 THealPaletteAxis.cxx:121
 THealPaletteAxis.cxx:122
 THealPaletteAxis.cxx:123
 THealPaletteAxis.cxx:124
 THealPaletteAxis.cxx:125
 THealPaletteAxis.cxx:126
 THealPaletteAxis.cxx:127
 THealPaletteAxis.cxx:128
 THealPaletteAxis.cxx:129
 THealPaletteAxis.cxx:130
 THealPaletteAxis.cxx:131
 THealPaletteAxis.cxx:132
 THealPaletteAxis.cxx:133
 THealPaletteAxis.cxx:134
 THealPaletteAxis.cxx:135
 THealPaletteAxis.cxx:136
 THealPaletteAxis.cxx:137
 THealPaletteAxis.cxx:138
 THealPaletteAxis.cxx:139
 THealPaletteAxis.cxx:140
 THealPaletteAxis.cxx:141
 THealPaletteAxis.cxx:142
 THealPaletteAxis.cxx:143
 THealPaletteAxis.cxx:144
 THealPaletteAxis.cxx:145
 THealPaletteAxis.cxx:146
 THealPaletteAxis.cxx:147
 THealPaletteAxis.cxx:148
 THealPaletteAxis.cxx:149
 THealPaletteAxis.cxx:150
 THealPaletteAxis.cxx:151
 THealPaletteAxis.cxx:152
 THealPaletteAxis.cxx:153
 THealPaletteAxis.cxx:154
 THealPaletteAxis.cxx:155
 THealPaletteAxis.cxx:156
 THealPaletteAxis.cxx:157
 THealPaletteAxis.cxx:158
 THealPaletteAxis.cxx:159
 THealPaletteAxis.cxx:160
 THealPaletteAxis.cxx:161
 THealPaletteAxis.cxx:162
 THealPaletteAxis.cxx:163
 THealPaletteAxis.cxx:164
 THealPaletteAxis.cxx:165
 THealPaletteAxis.cxx:166
 THealPaletteAxis.cxx:167
 THealPaletteAxis.cxx:168
 THealPaletteAxis.cxx:169
 THealPaletteAxis.cxx:170
 THealPaletteAxis.cxx:171
 THealPaletteAxis.cxx:172
 THealPaletteAxis.cxx:173
 THealPaletteAxis.cxx:174
 THealPaletteAxis.cxx:175
 THealPaletteAxis.cxx:176
 THealPaletteAxis.cxx:177
 THealPaletteAxis.cxx:178
 THealPaletteAxis.cxx:179
 THealPaletteAxis.cxx:180
 THealPaletteAxis.cxx:181
 THealPaletteAxis.cxx:182
 THealPaletteAxis.cxx:183
 THealPaletteAxis.cxx:184
 THealPaletteAxis.cxx:185
 THealPaletteAxis.cxx:186
 THealPaletteAxis.cxx:187
 THealPaletteAxis.cxx:188
 THealPaletteAxis.cxx:189
 THealPaletteAxis.cxx:190
 THealPaletteAxis.cxx:191
 THealPaletteAxis.cxx:192
 THealPaletteAxis.cxx:193
 THealPaletteAxis.cxx:194
 THealPaletteAxis.cxx:195
 THealPaletteAxis.cxx:196
 THealPaletteAxis.cxx:197
 THealPaletteAxis.cxx:198
 THealPaletteAxis.cxx:199
 THealPaletteAxis.cxx:200
 THealPaletteAxis.cxx:201
 THealPaletteAxis.cxx:202
 THealPaletteAxis.cxx:203
 THealPaletteAxis.cxx:204
 THealPaletteAxis.cxx:205
 THealPaletteAxis.cxx:206
 THealPaletteAxis.cxx:207
 THealPaletteAxis.cxx:208
 THealPaletteAxis.cxx:209
 THealPaletteAxis.cxx:210
 THealPaletteAxis.cxx:211
 THealPaletteAxis.cxx:212
 THealPaletteAxis.cxx:213
 THealPaletteAxis.cxx:214
 THealPaletteAxis.cxx:215
 THealPaletteAxis.cxx:216
 THealPaletteAxis.cxx:217
 THealPaletteAxis.cxx:218
 THealPaletteAxis.cxx:219
 THealPaletteAxis.cxx:220
 THealPaletteAxis.cxx:221
 THealPaletteAxis.cxx:222
 THealPaletteAxis.cxx:223
 THealPaletteAxis.cxx:224
 THealPaletteAxis.cxx:225
 THealPaletteAxis.cxx:226
 THealPaletteAxis.cxx:227
 THealPaletteAxis.cxx:228
 THealPaletteAxis.cxx:229
 THealPaletteAxis.cxx:230
 THealPaletteAxis.cxx:231
 THealPaletteAxis.cxx:232
 THealPaletteAxis.cxx:233
 THealPaletteAxis.cxx:234
 THealPaletteAxis.cxx:235
 THealPaletteAxis.cxx:236
 THealPaletteAxis.cxx:237
 THealPaletteAxis.cxx:238
 THealPaletteAxis.cxx:239
 THealPaletteAxis.cxx:240
 THealPaletteAxis.cxx:241
 THealPaletteAxis.cxx:242
 THealPaletteAxis.cxx:243
 THealPaletteAxis.cxx:244
 THealPaletteAxis.cxx:245
 THealPaletteAxis.cxx:246
 THealPaletteAxis.cxx:247
 THealPaletteAxis.cxx:248
 THealPaletteAxis.cxx:249
 THealPaletteAxis.cxx:250
 THealPaletteAxis.cxx:251
 THealPaletteAxis.cxx:252
 THealPaletteAxis.cxx:253
 THealPaletteAxis.cxx:254
 THealPaletteAxis.cxx:255
 THealPaletteAxis.cxx:256
 THealPaletteAxis.cxx:257
 THealPaletteAxis.cxx:258
 THealPaletteAxis.cxx:259
 THealPaletteAxis.cxx:260
 THealPaletteAxis.cxx:261
 THealPaletteAxis.cxx:262
 THealPaletteAxis.cxx:263
 THealPaletteAxis.cxx:264
 THealPaletteAxis.cxx:265
 THealPaletteAxis.cxx:266
 THealPaletteAxis.cxx:267
 THealPaletteAxis.cxx:268
 THealPaletteAxis.cxx:269
 THealPaletteAxis.cxx:270
 THealPaletteAxis.cxx:271
 THealPaletteAxis.cxx:272
 THealPaletteAxis.cxx:273
 THealPaletteAxis.cxx:274
 THealPaletteAxis.cxx:275
 THealPaletteAxis.cxx:276
 THealPaletteAxis.cxx:277
 THealPaletteAxis.cxx:278
 THealPaletteAxis.cxx:279
 THealPaletteAxis.cxx:280
 THealPaletteAxis.cxx:281
 THealPaletteAxis.cxx:282
 THealPaletteAxis.cxx:283
 THealPaletteAxis.cxx:284
 THealPaletteAxis.cxx:285
 THealPaletteAxis.cxx:286
 THealPaletteAxis.cxx:287
 THealPaletteAxis.cxx:288
 THealPaletteAxis.cxx:289
 THealPaletteAxis.cxx:290
 THealPaletteAxis.cxx:291
 THealPaletteAxis.cxx:292
 THealPaletteAxis.cxx:293
 THealPaletteAxis.cxx:294
 THealPaletteAxis.cxx:295
 THealPaletteAxis.cxx:296
 THealPaletteAxis.cxx:297
 THealPaletteAxis.cxx:298
 THealPaletteAxis.cxx:299
 THealPaletteAxis.cxx:300
 THealPaletteAxis.cxx:301
 THealPaletteAxis.cxx:302
 THealPaletteAxis.cxx:303
 THealPaletteAxis.cxx:304
 THealPaletteAxis.cxx:305
 THealPaletteAxis.cxx:306
 THealPaletteAxis.cxx:307
 THealPaletteAxis.cxx:308
 THealPaletteAxis.cxx:309
 THealPaletteAxis.cxx:310
 THealPaletteAxis.cxx:311
 THealPaletteAxis.cxx:312
 THealPaletteAxis.cxx:313
 THealPaletteAxis.cxx:314
 THealPaletteAxis.cxx:315
 THealPaletteAxis.cxx:316
 THealPaletteAxis.cxx:317
 THealPaletteAxis.cxx:318
 THealPaletteAxis.cxx:319
 THealPaletteAxis.cxx:320
 THealPaletteAxis.cxx:321
 THealPaletteAxis.cxx:322
 THealPaletteAxis.cxx:323
 THealPaletteAxis.cxx:324
 THealPaletteAxis.cxx:325
 THealPaletteAxis.cxx:326
 THealPaletteAxis.cxx:327
 THealPaletteAxis.cxx:328
 THealPaletteAxis.cxx:329
 THealPaletteAxis.cxx:330
 THealPaletteAxis.cxx:331
 THealPaletteAxis.cxx:332
 THealPaletteAxis.cxx:333
 THealPaletteAxis.cxx:334
 THealPaletteAxis.cxx:335
 THealPaletteAxis.cxx:336
 THealPaletteAxis.cxx:337
 THealPaletteAxis.cxx:338
 THealPaletteAxis.cxx:339
 THealPaletteAxis.cxx:340
 THealPaletteAxis.cxx:341
 THealPaletteAxis.cxx:342
 THealPaletteAxis.cxx:343
 THealPaletteAxis.cxx:344