ROOT logo
// @(#)root/hist:$Id: TPolyMarker.cxx 20882 2007-11-19 11:31:26Z rdm $
// Author: Rene Brun   12/12/94

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "Riostream.h"
#include "TROOT.h"
#include "TVirtualPad.h"
#include "TPolyMarker.h"
#include "TClass.h"
#include "TMath.h"

ClassImp(TPolyMarker)


//______________________________________________________________________________
//
//  a PolyMarker is defined by an array on N points in a 2-D space.
// At each point x[i], y[i] a marker is drawn.
// Marker attributes are managed by TAttMarker.
// See TMarker for the list of possible marker types.
//


//______________________________________________________________________________
TPolyMarker::TPolyMarker(): TObject()
{
   // Default constructor.
   
   fN = 0;
   fX = fY = 0;
   fLastPoint = -1;
}


//______________________________________________________________________________
TPolyMarker::TPolyMarker(Int_t n, Option_t *option)
      :TObject(), TAttMarker()
{
   // Constructor.

   fOption = option;
   SetBit(kCanDelete);
   fLastPoint = -1;
   if (n <= 0) {
      fN = 0;
      fLastPoint = -1;
      fX = fY = 0;
      return;
   }
   fN = n;
   fX = new Double_t [fN];
   fY = new Double_t [fN];
}


//______________________________________________________________________________
TPolyMarker::TPolyMarker(Int_t n, Float_t *x, Float_t *y, Option_t *option)
      :TObject(), TAttMarker()
{
   // Constructor.

   fOption = option;
   SetBit(kCanDelete);
   fLastPoint = -1;
   if (n <= 0) {
      fN = 0;
      fLastPoint = -1;
      fX = fY = 0;
      return;
   }
   fN = n;
   fX = new Double_t [fN];
   fY = new Double_t [fN];
   if (!x || !y) return;
   for (Int_t i=0; i<fN;i++) { fX[i] = x[i]; fY[i] = y[i]; }
   fLastPoint = fN-1;
}


//______________________________________________________________________________
TPolyMarker::TPolyMarker(Int_t n, Double_t *x, Double_t *y, Option_t *option)
      :TObject(), TAttMarker()
{
   // Constructor.

   fOption = option;
   SetBit(kCanDelete);
   fLastPoint = -1;
   if (n <= 0) {
      fN = 0;
      fLastPoint = -1;
      fX = fY = 0;
      return;
   }
   fN = n;
   fX = new Double_t [fN];
   fY = new Double_t [fN];
   if (!x || !y) return;
   for (Int_t i=0; i<fN;i++) { fX[i] = x[i]; fY[i] = y[i]; }
   fLastPoint = fN-1;
}

//______________________________________________________________________________
TPolyMarker& TPolyMarker::operator=(const TPolyMarker& pm)
{
   //assignment operator
   if(this!=&pm) {
      TObject::operator=(pm);
      TAttMarker::operator=(pm);
      fN=pm.fN;
      fLastPoint=pm.fLastPoint;
      fX=pm.fX;
      fY=pm.fY;
      fOption=pm.fOption;
   } 
   return *this;
}

//______________________________________________________________________________
TPolyMarker::~TPolyMarker()
{
   // Desctructor.

   if (fX) delete [] fX;
   if (fY) delete [] fY;
   fLastPoint = -1;
}


//______________________________________________________________________________
TPolyMarker::TPolyMarker(const TPolyMarker &polymarker) : TObject(polymarker), TAttMarker(polymarker)
{
   // Copy constructor.

   ((TPolyMarker&)polymarker).Copy(*this);
}


//______________________________________________________________________________
void TPolyMarker::Copy(TObject &obj) const
{

   // Copy.

   TObject::Copy(obj);
   TAttMarker::Copy(((TPolyMarker&)obj));
   ((TPolyMarker&)obj).fN = fN;
   if (fN > 0) {
      ((TPolyMarker&)obj).fX = new Double_t [fN];
      ((TPolyMarker&)obj).fY = new Double_t [fN];
      for (Int_t i=0; i<fN;i++) { ((TPolyMarker&)obj).fX[i] = fX[i], ((TPolyMarker&)obj).fY[i] = fY[i]; }
   } else {
      ((TPolyMarker&)obj).fX = 0;
      ((TPolyMarker&)obj).fY = 0;
   }
   ((TPolyMarker&)obj).fOption = fOption;
   ((TPolyMarker&)obj).fLastPoint = fLastPoint;
}


//______________________________________________________________________________
Int_t TPolyMarker::DistancetoPrimitive(Int_t px, Int_t py)
{
   // Compute distance from point px,py to a polymarker.
   //
   //  Compute the closest distance of approach from point px,py to each point
   //  of the polymarker.
   //  Returns when the distance found is below DistanceMaximum.
   //  The distance is computed in pixels units.

   const Int_t big = 9999;

   // check if point is near one of the points
   Int_t i, pxp, pyp, d;
   Int_t distance = big;

   for (i=0;i<Size();i++) {
      pxp = gPad->XtoAbsPixel(gPad->XtoPad(fX[i]));
      pyp = gPad->YtoAbsPixel(gPad->YtoPad(fY[i]));
      d   = TMath::Abs(pxp-px) + TMath::Abs(pyp-py);
      if (d < distance) distance = d;
   }
   return distance;
}


//______________________________________________________________________________
void TPolyMarker::Draw(Option_t *option)
{
   // Draw.

   AppendPad(option);
}


//______________________________________________________________________________
void TPolyMarker::DrawPolyMarker(Int_t n, Double_t *x, Double_t *y, Option_t *)
{
   // Draw polymarker.
   
   TPolyMarker *newpolymarker = new TPolyMarker(n,x,y);
   TAttMarker::Copy(*newpolymarker);
   newpolymarker->fOption = fOption;
   newpolymarker->SetBit(kCanDelete);
   newpolymarker->AppendPad();
}


//______________________________________________________________________________
void TPolyMarker::ExecuteEvent(Int_t, Int_t, Int_t)
{
   // Execute action corresponding to one event.
   //
   //  This member function must be implemented to realize the action
   //  corresponding to the mouse click on the object in the window
}


//______________________________________________________________________________
void TPolyMarker::ls(Option_t *) const
{
   // ls.

   TROOT::IndentLevel();
   printf("TPolyMarker  N=%d\n",fN);
}


//______________________________________________________________________________
Int_t TPolyMarker::Merge(TCollection *li)
{
   // Merge polymarkers in the collection in this polymarker.

   if (!li) return 0;
   TIter next(li);

   //first loop to count the number of entries
   TPolyMarker *pm;
   Int_t npoints = 0;
   while ((pm = (TPolyMarker*)next())) {
      if (!pm->InheritsFrom(TPolyMarker::Class())) {
         Error("Add","Attempt to add object of class: %s to a %s",pm->ClassName(),this->ClassName());
         return -1;
      }
      npoints += pm->Size();
   }

   //extend this polymarker to hold npoints
   pm->SetPoint(npoints-1,0,0);

   //merge all polymarkers
   next.Reset();
   while ((pm = (TPolyMarker*)next())) {
      Int_t np = pm->Size();
      Double_t *x = pm->GetX();
      Double_t *y = pm->GetY();
      for (Int_t i=0;i<np;i++) {
         SetPoint(i,x[i],y[i]);
      }
   }

   return npoints;
}


//______________________________________________________________________________
void TPolyMarker::Paint(Option_t *option)
{
   // Paint.

   PaintPolyMarker(fLastPoint+1, fX, fY, option);
}


//______________________________________________________________________________
void TPolyMarker::PaintPolyMarker(Int_t n, Double_t *x, Double_t *y, Option_t *option)
{
   // Paint polymarker.

   if (n <= 0) return;
   TAttMarker::Modify();  //Change marker attributes only if necessary
   Double_t *xx = x;
   Double_t *yy = y;
   if (gPad->GetLogx()) {
      xx = new Double_t[n];
      for (Int_t ix=0;ix<n;ix++) xx[ix] = gPad->XtoPad(x[ix]);
   }
   if (gPad->GetLogy()) {
      yy = new Double_t[n];
      for (Int_t iy=0;iy<n;iy++) yy[iy] = gPad->YtoPad(y[iy]);
   }
   gPad->PaintPolyMarker(n,xx,yy,option);
   if (x != xx) delete [] xx;
   if (y != yy) delete [] yy;
}


//______________________________________________________________________________
void TPolyMarker::Print(Option_t *) const
{
   // Print polymarker.

   printf("TPolyMarker  N=%d\n",fN);
}


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

   char quote = '"';
   out<<"   "<<endl;
   out<<"   Double_t *dum = 0;"<<endl;
   if (gROOT->ClassSaved(TPolyMarker::Class())) {
      out<<"   ";
   } else {
      out<<"   TPolyMarker *";
   }
   out<<"pmarker = new TPolyMarker("<<fN<<",dum,dum,"<<quote<<fOption<<quote<<");"<<endl;

   SaveMarkerAttributes(out,"pmarker",1,1,1);

   for (Int_t i=0;i<Size();i++) {
      out<<"   pmarker->SetPoint("<<i<<","<<fX[i]<<","<<fY[i]<<");"<<endl;
   }
   out<<"   pmarker->Draw("
      <<quote<<option<<quote<<");"<<endl;
}


//______________________________________________________________________________
Int_t TPolyMarker::SetNextPoint(Double_t x, Double_t y)
{
   // Set point following LastPoint to x, y.
   // Returns index of the point (new last point).

   fLastPoint++;
   SetPoint(fLastPoint, x, y);
   return fLastPoint;
}


//______________________________________________________________________________
void TPolyMarker::SetPoint(Int_t n, Double_t x, Double_t y)
{
   // Set point number n.
   // if n is greater than the current size, the arrays are automatically
   // extended
   
   if (n < 0) return;
   if (!fX || !fY || n >= fN) {
      // re-allocate the object
      Int_t newN = TMath::Max(2*fN,n+1);
      Double_t *savex = new Double_t [newN];
      Double_t *savey = new Double_t [newN];
      if (fX && fN){
         memcpy(savex,fX,fN*sizeof(Double_t));
         memset(&savex[fN],0,(newN-fN)*sizeof(Double_t));
         delete [] fX;
      }
      if (fY && fN){
         memcpy(savey,fY,fN*sizeof(Double_t));
         memset(&savey[fN],0,(newN-fN)*sizeof(Double_t));
         delete [] fY;
      }
      fX = savex;
      fY = savey;
      fN = newN;
   }
   fX[n] = x;
   fY[n] = y;
   fLastPoint = TMath::Max(fLastPoint,n);
}


//______________________________________________________________________________
void TPolyMarker::SetPolyMarker(Int_t n)
{
   // If n <= 0 the current arrays of points are deleted.

   if (n <= 0) {
      fN = 0;
      fLastPoint = -1;
      delete [] fX;
      delete [] fY;
      fX = fY = 0;
      return;
   }
   SetPoint(n-1,0,0);
}


//______________________________________________________________________________
void TPolyMarker::SetPolyMarker(Int_t n, Float_t *x, Float_t *y, Option_t *option)
{
   // If n <= 0 the current arrays of points are deleted.
   
   if (n <= 0) {
      fN = 0;
      fLastPoint = -1;
      delete [] fX;
      delete [] fY;
      fX = fY = 0;
      return;
   }
   fN =n;
   if (fX) delete [] fX;
   if (fY) delete [] fY;
   fX = new Double_t[fN];
   fY = new Double_t[fN];
   for (Int_t i=0; i<fN;i++) {
      if (x) fX[i] = (Double_t)x[i];
      if (y) fY[i] = (Double_t)y[i];
   }
   fOption = option;
   fLastPoint = fN-1;
}


//______________________________________________________________________________
void TPolyMarker::SetPolyMarker(Int_t n, Double_t *x, Double_t *y, Option_t *option)
{
   // If n <= 0 the current arrays of points are deleted.
   
   if (n <= 0) {
      fN = 0;
      fLastPoint = -1;
      delete [] fX;
      delete [] fY;
      fX = fY = 0;
      return;
   }
   fN =n;
   if (fX) delete [] fX;
   if (fY) delete [] fY;
   fX = new Double_t[fN];
   fY = new Double_t[fN];
   for (Int_t i=0; i<fN;i++) {
      if (x) fX[i] = x[i];
      if (y) fY[i] = y[i];
   }
   fOption = option;
   fLastPoint = fN-1;
}


//_______________________________________________________________________
void TPolyMarker::Streamer(TBuffer &R__b)
{
   // Stream a class object.

   if (R__b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
      if (R__v > 1) {
         R__b.ReadClassBuffer(TPolyMarker::Class(), this, R__v, R__s, R__c);
         return;
      }
      //====process old versions before automatic schema evolution
      TObject::Streamer(R__b);
      TAttMarker::Streamer(R__b);
      R__b >> fN;
      fX = new Double_t[fN];
      fY = new Double_t[fN];
      Int_t i;
      Float_t xold,yold;
      for (i=0;i<fN;i++) {R__b >> xold; fX[i] = xold;}
      for (i=0;i<fN;i++) {R__b >> yold; fY[i] = yold;}
      fOption.Streamer(R__b);
      R__b.CheckByteCount(R__s, R__c, TPolyMarker::IsA());
      //====end of old versions

   } else {
      R__b.WriteClassBuffer(TPolyMarker::Class(),this);
   }
}
 TPolyMarker.cxx:1
 TPolyMarker.cxx:2
 TPolyMarker.cxx:3
 TPolyMarker.cxx:4
 TPolyMarker.cxx:5
 TPolyMarker.cxx:6
 TPolyMarker.cxx:7
 TPolyMarker.cxx:8
 TPolyMarker.cxx:9
 TPolyMarker.cxx:10
 TPolyMarker.cxx:11
 TPolyMarker.cxx:12
 TPolyMarker.cxx:13
 TPolyMarker.cxx:14
 TPolyMarker.cxx:15
 TPolyMarker.cxx:16
 TPolyMarker.cxx:17
 TPolyMarker.cxx:18
 TPolyMarker.cxx:19
 TPolyMarker.cxx:20
 TPolyMarker.cxx:21
 TPolyMarker.cxx:22
 TPolyMarker.cxx:23
 TPolyMarker.cxx:24
 TPolyMarker.cxx:25
 TPolyMarker.cxx:26
 TPolyMarker.cxx:27
 TPolyMarker.cxx:28
 TPolyMarker.cxx:29
 TPolyMarker.cxx:30
 TPolyMarker.cxx:31
 TPolyMarker.cxx:32
 TPolyMarker.cxx:33
 TPolyMarker.cxx:34
 TPolyMarker.cxx:35
 TPolyMarker.cxx:36
 TPolyMarker.cxx:37
 TPolyMarker.cxx:38
 TPolyMarker.cxx:39
 TPolyMarker.cxx:40
 TPolyMarker.cxx:41
 TPolyMarker.cxx:42
 TPolyMarker.cxx:43
 TPolyMarker.cxx:44
 TPolyMarker.cxx:45
 TPolyMarker.cxx:46
 TPolyMarker.cxx:47
 TPolyMarker.cxx:48
 TPolyMarker.cxx:49
 TPolyMarker.cxx:50
 TPolyMarker.cxx:51
 TPolyMarker.cxx:52
 TPolyMarker.cxx:53
 TPolyMarker.cxx:54
 TPolyMarker.cxx:55
 TPolyMarker.cxx:56
 TPolyMarker.cxx:57
 TPolyMarker.cxx:58
 TPolyMarker.cxx:59
 TPolyMarker.cxx:60
 TPolyMarker.cxx:61
 TPolyMarker.cxx:62
 TPolyMarker.cxx:63
 TPolyMarker.cxx:64
 TPolyMarker.cxx:65
 TPolyMarker.cxx:66
 TPolyMarker.cxx:67
 TPolyMarker.cxx:68
 TPolyMarker.cxx:69
 TPolyMarker.cxx:70
 TPolyMarker.cxx:71
 TPolyMarker.cxx:72
 TPolyMarker.cxx:73
 TPolyMarker.cxx:74
 TPolyMarker.cxx:75
 TPolyMarker.cxx:76
 TPolyMarker.cxx:77
 TPolyMarker.cxx:78
 TPolyMarker.cxx:79
 TPolyMarker.cxx:80
 TPolyMarker.cxx:81
 TPolyMarker.cxx:82
 TPolyMarker.cxx:83
 TPolyMarker.cxx:84
 TPolyMarker.cxx:85
 TPolyMarker.cxx:86
 TPolyMarker.cxx:87
 TPolyMarker.cxx:88
 TPolyMarker.cxx:89
 TPolyMarker.cxx:90
 TPolyMarker.cxx:91
 TPolyMarker.cxx:92
 TPolyMarker.cxx:93
 TPolyMarker.cxx:94
 TPolyMarker.cxx:95
 TPolyMarker.cxx:96
 TPolyMarker.cxx:97
 TPolyMarker.cxx:98
 TPolyMarker.cxx:99
 TPolyMarker.cxx:100
 TPolyMarker.cxx:101
 TPolyMarker.cxx:102
 TPolyMarker.cxx:103
 TPolyMarker.cxx:104
 TPolyMarker.cxx:105
 TPolyMarker.cxx:106
 TPolyMarker.cxx:107
 TPolyMarker.cxx:108
 TPolyMarker.cxx:109
 TPolyMarker.cxx:110
 TPolyMarker.cxx:111
 TPolyMarker.cxx:112
 TPolyMarker.cxx:113
 TPolyMarker.cxx:114
 TPolyMarker.cxx:115
 TPolyMarker.cxx:116
 TPolyMarker.cxx:117
 TPolyMarker.cxx:118
 TPolyMarker.cxx:119
 TPolyMarker.cxx:120
 TPolyMarker.cxx:121
 TPolyMarker.cxx:122
 TPolyMarker.cxx:123
 TPolyMarker.cxx:124
 TPolyMarker.cxx:125
 TPolyMarker.cxx:126
 TPolyMarker.cxx:127
 TPolyMarker.cxx:128
 TPolyMarker.cxx:129
 TPolyMarker.cxx:130
 TPolyMarker.cxx:131
 TPolyMarker.cxx:132
 TPolyMarker.cxx:133
 TPolyMarker.cxx:134
 TPolyMarker.cxx:135
 TPolyMarker.cxx:136
 TPolyMarker.cxx:137
 TPolyMarker.cxx:138
 TPolyMarker.cxx:139
 TPolyMarker.cxx:140
 TPolyMarker.cxx:141
 TPolyMarker.cxx:142
 TPolyMarker.cxx:143
 TPolyMarker.cxx:144
 TPolyMarker.cxx:145
 TPolyMarker.cxx:146
 TPolyMarker.cxx:147
 TPolyMarker.cxx:148
 TPolyMarker.cxx:149
 TPolyMarker.cxx:150
 TPolyMarker.cxx:151
 TPolyMarker.cxx:152
 TPolyMarker.cxx:153
 TPolyMarker.cxx:154
 TPolyMarker.cxx:155
 TPolyMarker.cxx:156
 TPolyMarker.cxx:157
 TPolyMarker.cxx:158
 TPolyMarker.cxx:159
 TPolyMarker.cxx:160
 TPolyMarker.cxx:161
 TPolyMarker.cxx:162
 TPolyMarker.cxx:163
 TPolyMarker.cxx:164
 TPolyMarker.cxx:165
 TPolyMarker.cxx:166
 TPolyMarker.cxx:167
 TPolyMarker.cxx:168
 TPolyMarker.cxx:169
 TPolyMarker.cxx:170
 TPolyMarker.cxx:171
 TPolyMarker.cxx:172
 TPolyMarker.cxx:173
 TPolyMarker.cxx:174
 TPolyMarker.cxx:175
 TPolyMarker.cxx:176
 TPolyMarker.cxx:177
 TPolyMarker.cxx:178
 TPolyMarker.cxx:179
 TPolyMarker.cxx:180
 TPolyMarker.cxx:181
 TPolyMarker.cxx:182
 TPolyMarker.cxx:183
 TPolyMarker.cxx:184
 TPolyMarker.cxx:185
 TPolyMarker.cxx:186
 TPolyMarker.cxx:187
 TPolyMarker.cxx:188
 TPolyMarker.cxx:189
 TPolyMarker.cxx:190
 TPolyMarker.cxx:191
 TPolyMarker.cxx:192
 TPolyMarker.cxx:193
 TPolyMarker.cxx:194
 TPolyMarker.cxx:195
 TPolyMarker.cxx:196
 TPolyMarker.cxx:197
 TPolyMarker.cxx:198
 TPolyMarker.cxx:199
 TPolyMarker.cxx:200
 TPolyMarker.cxx:201
 TPolyMarker.cxx:202
 TPolyMarker.cxx:203
 TPolyMarker.cxx:204
 TPolyMarker.cxx:205
 TPolyMarker.cxx:206
 TPolyMarker.cxx:207
 TPolyMarker.cxx:208
 TPolyMarker.cxx:209
 TPolyMarker.cxx:210
 TPolyMarker.cxx:211
 TPolyMarker.cxx:212
 TPolyMarker.cxx:213
 TPolyMarker.cxx:214
 TPolyMarker.cxx:215
 TPolyMarker.cxx:216
 TPolyMarker.cxx:217
 TPolyMarker.cxx:218
 TPolyMarker.cxx:219
 TPolyMarker.cxx:220
 TPolyMarker.cxx:221
 TPolyMarker.cxx:222
 TPolyMarker.cxx:223
 TPolyMarker.cxx:224
 TPolyMarker.cxx:225
 TPolyMarker.cxx:226
 TPolyMarker.cxx:227
 TPolyMarker.cxx:228
 TPolyMarker.cxx:229
 TPolyMarker.cxx:230
 TPolyMarker.cxx:231
 TPolyMarker.cxx:232
 TPolyMarker.cxx:233
 TPolyMarker.cxx:234
 TPolyMarker.cxx:235
 TPolyMarker.cxx:236
 TPolyMarker.cxx:237
 TPolyMarker.cxx:238
 TPolyMarker.cxx:239
 TPolyMarker.cxx:240
 TPolyMarker.cxx:241
 TPolyMarker.cxx:242
 TPolyMarker.cxx:243
 TPolyMarker.cxx:244
 TPolyMarker.cxx:245
 TPolyMarker.cxx:246
 TPolyMarker.cxx:247
 TPolyMarker.cxx:248
 TPolyMarker.cxx:249
 TPolyMarker.cxx:250
 TPolyMarker.cxx:251
 TPolyMarker.cxx:252
 TPolyMarker.cxx:253
 TPolyMarker.cxx:254
 TPolyMarker.cxx:255
 TPolyMarker.cxx:256
 TPolyMarker.cxx:257
 TPolyMarker.cxx:258
 TPolyMarker.cxx:259
 TPolyMarker.cxx:260
 TPolyMarker.cxx:261
 TPolyMarker.cxx:262
 TPolyMarker.cxx:263
 TPolyMarker.cxx:264
 TPolyMarker.cxx:265
 TPolyMarker.cxx:266
 TPolyMarker.cxx:267
 TPolyMarker.cxx:268
 TPolyMarker.cxx:269
 TPolyMarker.cxx:270
 TPolyMarker.cxx:271
 TPolyMarker.cxx:272
 TPolyMarker.cxx:273
 TPolyMarker.cxx:274
 TPolyMarker.cxx:275
 TPolyMarker.cxx:276
 TPolyMarker.cxx:277
 TPolyMarker.cxx:278
 TPolyMarker.cxx:279
 TPolyMarker.cxx:280
 TPolyMarker.cxx:281
 TPolyMarker.cxx:282
 TPolyMarker.cxx:283
 TPolyMarker.cxx:284
 TPolyMarker.cxx:285
 TPolyMarker.cxx:286
 TPolyMarker.cxx:287
 TPolyMarker.cxx:288
 TPolyMarker.cxx:289
 TPolyMarker.cxx:290
 TPolyMarker.cxx:291
 TPolyMarker.cxx:292
 TPolyMarker.cxx:293
 TPolyMarker.cxx:294
 TPolyMarker.cxx:295
 TPolyMarker.cxx:296
 TPolyMarker.cxx:297
 TPolyMarker.cxx:298
 TPolyMarker.cxx:299
 TPolyMarker.cxx:300
 TPolyMarker.cxx:301
 TPolyMarker.cxx:302
 TPolyMarker.cxx:303
 TPolyMarker.cxx:304
 TPolyMarker.cxx:305
 TPolyMarker.cxx:306
 TPolyMarker.cxx:307
 TPolyMarker.cxx:308
 TPolyMarker.cxx:309
 TPolyMarker.cxx:310
 TPolyMarker.cxx:311
 TPolyMarker.cxx:312
 TPolyMarker.cxx:313
 TPolyMarker.cxx:314
 TPolyMarker.cxx:315
 TPolyMarker.cxx:316
 TPolyMarker.cxx:317
 TPolyMarker.cxx:318
 TPolyMarker.cxx:319
 TPolyMarker.cxx:320
 TPolyMarker.cxx:321
 TPolyMarker.cxx:322
 TPolyMarker.cxx:323
 TPolyMarker.cxx:324
 TPolyMarker.cxx:325
 TPolyMarker.cxx:326
 TPolyMarker.cxx:327
 TPolyMarker.cxx:328
 TPolyMarker.cxx:329
 TPolyMarker.cxx:330
 TPolyMarker.cxx:331
 TPolyMarker.cxx:332
 TPolyMarker.cxx:333
 TPolyMarker.cxx:334
 TPolyMarker.cxx:335
 TPolyMarker.cxx:336
 TPolyMarker.cxx:337
 TPolyMarker.cxx:338
 TPolyMarker.cxx:339
 TPolyMarker.cxx:340
 TPolyMarker.cxx:341
 TPolyMarker.cxx:342
 TPolyMarker.cxx:343
 TPolyMarker.cxx:344
 TPolyMarker.cxx:345
 TPolyMarker.cxx:346
 TPolyMarker.cxx:347
 TPolyMarker.cxx:348
 TPolyMarker.cxx:349
 TPolyMarker.cxx:350
 TPolyMarker.cxx:351
 TPolyMarker.cxx:352
 TPolyMarker.cxx:353
 TPolyMarker.cxx:354
 TPolyMarker.cxx:355
 TPolyMarker.cxx:356
 TPolyMarker.cxx:357
 TPolyMarker.cxx:358
 TPolyMarker.cxx:359
 TPolyMarker.cxx:360
 TPolyMarker.cxx:361
 TPolyMarker.cxx:362
 TPolyMarker.cxx:363
 TPolyMarker.cxx:364
 TPolyMarker.cxx:365
 TPolyMarker.cxx:366
 TPolyMarker.cxx:367
 TPolyMarker.cxx:368
 TPolyMarker.cxx:369
 TPolyMarker.cxx:370
 TPolyMarker.cxx:371
 TPolyMarker.cxx:372
 TPolyMarker.cxx:373
 TPolyMarker.cxx:374
 TPolyMarker.cxx:375
 TPolyMarker.cxx:376
 TPolyMarker.cxx:377
 TPolyMarker.cxx:378
 TPolyMarker.cxx:379
 TPolyMarker.cxx:380
 TPolyMarker.cxx:381
 TPolyMarker.cxx:382
 TPolyMarker.cxx:383
 TPolyMarker.cxx:384
 TPolyMarker.cxx:385
 TPolyMarker.cxx:386
 TPolyMarker.cxx:387
 TPolyMarker.cxx:388
 TPolyMarker.cxx:389
 TPolyMarker.cxx:390
 TPolyMarker.cxx:391
 TPolyMarker.cxx:392
 TPolyMarker.cxx:393
 TPolyMarker.cxx:394
 TPolyMarker.cxx:395
 TPolyMarker.cxx:396
 TPolyMarker.cxx:397
 TPolyMarker.cxx:398
 TPolyMarker.cxx:399
 TPolyMarker.cxx:400
 TPolyMarker.cxx:401
 TPolyMarker.cxx:402
 TPolyMarker.cxx:403
 TPolyMarker.cxx:404
 TPolyMarker.cxx:405
 TPolyMarker.cxx:406
 TPolyMarker.cxx:407
 TPolyMarker.cxx:408
 TPolyMarker.cxx:409
 TPolyMarker.cxx:410
 TPolyMarker.cxx:411
 TPolyMarker.cxx:412
 TPolyMarker.cxx:413
 TPolyMarker.cxx:414
 TPolyMarker.cxx:415
 TPolyMarker.cxx:416
 TPolyMarker.cxx:417
 TPolyMarker.cxx:418
 TPolyMarker.cxx:419
 TPolyMarker.cxx:420
 TPolyMarker.cxx:421
 TPolyMarker.cxx:422
 TPolyMarker.cxx:423
 TPolyMarker.cxx:424
 TPolyMarker.cxx:425
 TPolyMarker.cxx:426
 TPolyMarker.cxx:427
 TPolyMarker.cxx:428
 TPolyMarker.cxx:429
 TPolyMarker.cxx:430
 TPolyMarker.cxx:431
 TPolyMarker.cxx:432
 TPolyMarker.cxx:433
 TPolyMarker.cxx:434
 TPolyMarker.cxx:435
 TPolyMarker.cxx:436
 TPolyMarker.cxx:437
 TPolyMarker.cxx:438
 TPolyMarker.cxx:439
 TPolyMarker.cxx:440
 TPolyMarker.cxx:441
 TPolyMarker.cxx:442
 TPolyMarker.cxx:443
 TPolyMarker.cxx:444
 TPolyMarker.cxx:445
 TPolyMarker.cxx:446
 TPolyMarker.cxx:447
 TPolyMarker.cxx:448
 TPolyMarker.cxx:449
 TPolyMarker.cxx:450
 TPolyMarker.cxx:451
 TPolyMarker.cxx:452
 TPolyMarker.cxx:453
 TPolyMarker.cxx:454
 TPolyMarker.cxx:455
 TPolyMarker.cxx:456
 TPolyMarker.cxx:457
 TPolyMarker.cxx:458
 TPolyMarker.cxx:459
 TPolyMarker.cxx:460
 TPolyMarker.cxx:461
 TPolyMarker.cxx:462
 TPolyMarker.cxx:463
 TPolyMarker.cxx:464
 TPolyMarker.cxx:465
 TPolyMarker.cxx:466
 TPolyMarker.cxx:467
 TPolyMarker.cxx:468
 TPolyMarker.cxx:469
 TPolyMarker.cxx:470
 TPolyMarker.cxx:471
 TPolyMarker.cxx:472
 TPolyMarker.cxx:473
 TPolyMarker.cxx:474
 TPolyMarker.cxx:475
 TPolyMarker.cxx:476
 TPolyMarker.cxx:477
 TPolyMarker.cxx:478
 TPolyMarker.cxx:479
 TPolyMarker.cxx:480
 TPolyMarker.cxx:481
 TPolyMarker.cxx:482
 TPolyMarker.cxx:483
 TPolyMarker.cxx:484