// @(#)root/graf:$Id$
// Author: Rene Brun   12/05/95

/*************************************************************************
 * 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 <stdlib.h>

#include "Riostream.h"
#include "TROOT.h"
#include "TVirtualPad.h"
#include "TMarker.h"
#include "TVirtualX.h"
#include "TMath.h"
#include "TPoint.h"
#include "TText.h"
#include "TClass.h"
#include "TPoint.h"

ClassImp(TMarker)


//______________________________________________________________________________
//
// Manages Markers. Marker attributes are managed by TAttMarker.
//


//______________________________________________________________________________
TMarker::TMarker(): TObject(), TAttMarker()
{
   // Marker default constructor.

   fX = 0;
   fY = 0;
}


//______________________________________________________________________________
TMarker::TMarker(Double_t x, Double_t y, Int_t marker)
      :TObject(), TAttMarker()
{
   // Marker normal constructor.

   fX = x;
   fY = y;
   fMarkerStyle = marker;
}


//______________________________________________________________________________
TMarker::~TMarker()
{
   // Marker default destructor.
}


//______________________________________________________________________________
TMarker::TMarker(const TMarker &marker) : TObject(marker), TAttMarker(marker), TAttBBox2D(marker)
{
   // Marker copy constructor.

   fX = 0;
   fY = 0;
   ((TMarker&)marker).Copy(*this);
}


//______________________________________________________________________________
void TMarker::Copy(TObject &obj) const
{
   // Copy this marker to marker.

   TObject::Copy(obj);
   TAttMarker::Copy(((TMarker&)obj));
   ((TMarker&)obj).fX = fX;
   ((TMarker&)obj).fY = fY;
}


//______________________________________________________________________________
void TMarker::DisplayMarkerTypes()
{
   // Display the table of markers with their numbers.

   TMarker *marker = new TMarker();
   marker->SetMarkerSize(3);
   TText *text = new TText();
   text->SetTextFont(62);
   text->SetTextAlign(22);
   text->SetTextSize(0.1);
   char atext[] = "       ";
   Double_t x = 0;
   Double_t dx = 1/16.0;
   for (Int_t i=1;i<16;i++) {
      x += dx;
      snprintf(atext,7,"%d",i);
      marker->SetMarkerStyle(i);
      marker->DrawMarker(x,.35);
      text->DrawText(x,.17,atext);
      snprintf(atext,7,"%d",i+19);
      marker->SetMarkerStyle(i+19);
      marker->DrawMarker(x,.8);
      text->DrawText(x,.62,atext);
   }
   delete marker;
   delete text;
}


//______________________________________________________________________________
Int_t TMarker::DistancetoPrimitive(Int_t px, Int_t py)
{
   // Compute distance from point px,py to a marker.
   //
   //  Compute the closest distance of approach from point px,py to this marker.
   //  The distance is computed in pixels units.

   Int_t pxm, pym;
   if (TestBit(kMarkerNDC)) {
      pxm = gPad->UtoPixel(fX);
      pym = gPad->VtoPixel(fY);
   } else {
      pxm  = gPad->XtoAbsPixel(gPad->XtoPad(fX));
      pym  = gPad->YtoAbsPixel(gPad->YtoPad(fY));
   }
   Int_t dist = (Int_t)TMath::Sqrt((px-pxm)*(px-pxm) + (py-pym)*(py-pym));

   //marker size = 1 is about 8 pixels
   Int_t markerRadius = Int_t(4*fMarkerSize);
   if (dist <= markerRadius)   return 0;
   if (dist >  markerRadius+3) return 999;
   return dist;
}


//______________________________________________________________________________
void TMarker::Draw(Option_t *option)
{
   // Draw this marker with its current attributes.

   AppendPad(option);

}


//______________________________________________________________________________
void TMarker::DrawMarker(Double_t x, Double_t y)
{
   // Draw this marker with new coordinates.

   TMarker *newmarker = new TMarker(x, y, 1);
   TAttMarker::Copy(*newmarker);
   newmarker->SetBit(kCanDelete);
   newmarker->AppendPad();
}


//______________________________________________________________________________
void TMarker::ExecuteEvent(Int_t event, Int_t px, Int_t py)
{
   // Execute action corresponding to one event.
   //
   //  This member function is called when a marker is clicked with the locator
   //
   //  If Left button is clicked on a marker, the marker is moved to
   //  a new position when the mouse button is released.

   if (!gPad) return;

   TPoint p;
   static Int_t pxold, pyold;
   static Bool_t ndcsav;
   Double_t dpx, dpy, xp1,yp1;
   Bool_t opaque  = gPad->OpaqueMoving();

   if (!gPad->IsEditable()) return;

   switch (event) {

   case kButton1Down:
      ndcsav = TestBit(kMarkerNDC);
      if (!opaque) {
         gVirtualX->SetTextColor(-1);  // invalidate current text color (use xor mode)
         TAttMarker::Modify();  //Change marker attributes only if necessary
      }
      // No break !!!

   case kMouseMotion:
      pxold = px;  pyold = py;
      gPad->SetCursor(kMove);
      break;

   case kButton1Motion:
      p.fX = pxold; p.fY = pyold;
      if (!opaque) gVirtualX->DrawPolyMarker(1, &p);
      p.fX = px; p.fY = py;
      if (!opaque) gVirtualX->DrawPolyMarker(1, &p);
      pxold = px;  pyold = py;
      if (opaque) {
         if (ndcsav) this->SetNDC(kFALSE);
         this->SetX(gPad->PadtoX(gPad->AbsPixeltoX(px)));
         this->SetY(gPad->PadtoY(gPad->AbsPixeltoY(py)));
         gPad->ShowGuidelines(this, event, 'i', true);
         gPad->Modified(kTRUE);
         gPad->Update();
      }
      break;

   case kButton1Up:
      if (opaque) {
         if (ndcsav) {
            this->SetX((fX - gPad->GetX1())/(gPad->GetX2()-gPad->GetX1()));
            this->SetY((fY - gPad->GetY1())/(gPad->GetY2()-gPad->GetY1()));
            this->SetNDC();
         }
         gPad->ShowGuidelines(this, event);
      } else {
         if (TestBit(kMarkerNDC)) {
            dpx  = gPad->GetX2() - gPad->GetX1();
            dpy  = gPad->GetY2() - gPad->GetY1();
            xp1  = gPad->GetX1();
            yp1  = gPad->GetY1();
            fX = (gPad->AbsPixeltoX(pxold)-xp1)/dpx;
            fY = (gPad->AbsPixeltoY(pyold)-yp1)/dpy;
         } else {
            fX = gPad->PadtoX(gPad->AbsPixeltoX(px));
            fY = gPad->PadtoY(gPad->AbsPixeltoY(py));
         }
         gPad->Modified(kTRUE);
         gPad->Update();
         gVirtualX->SetTextColor(-1);
      }
      break;
   }
}


//______________________________________________________________________________
void TMarker::ls(Option_t *) const
{
   // List this marker with its attributes.

   TROOT::IndentLevel();
   printf("Marker  X=%f Y=%f marker type=%d\n",fX,fY,fMarkerStyle);
}


//______________________________________________________________________________
void TMarker::Paint(Option_t *)
{
   // Paint this marker with its current attributes.

   if (TestBit(kMarkerNDC)) {
      Double_t u = gPad->GetX1() + fX*(gPad->GetX2()-gPad->GetX1());
      Double_t v = gPad->GetY1() + fY*(gPad->GetY2()-gPad->GetY1());
      PaintMarker(u,v);
   } else {
      PaintMarker(gPad->XtoPad(fX),gPad->YtoPad(fY));
   }
}


//______________________________________________________________________________
void TMarker::PaintMarker(Double_t x, Double_t y)
{
   // Draw this marker with new coordinates.

   TAttMarker::Modify();  //Change line attributes only if necessary
   gPad->PaintPolyMarker(-1,&x,&y,"");
}


//______________________________________________________________________________
void TMarker::PaintMarkerNDC(Double_t, Double_t)
{
   // Draw this marker with new coordinates in NDC.
}


//______________________________________________________________________________
void TMarker::Print(Option_t *) const
{
   // Dump this marker with its attributes.

   printf("Marker  X=%f Y=%f",fX,fY);
   if (GetMarkerColor() != 1) printf(" Color=%d",GetMarkerColor());
   if (GetMarkerStyle() != 1) printf(" MarkerStyle=%d",GetMarkerStyle());
   if (GetMarkerSize()  != 1) printf(" MarkerSize=%f",GetMarkerSize());
   printf("\n");
}


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

   if (gROOT->ClassSaved(TMarker::Class())) {
      out<<"   ";
   } else {
      out<<"   TMarker *";
   }
   out<<"marker = new TMarker("<<fX<<","<<fY<<","<<fMarkerStyle<<");"<<std::endl;

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

   out<<"   marker->Draw();"<<std::endl;
}


//______________________________________________________________________________
void TMarker::SetNDC(Bool_t isNDC)
{
   // Set NDC mode on if isNDC = kTRUE, off otherwise

   ResetBit(kMarkerNDC);
   if (isNDC) SetBit(kMarkerNDC);
}


//______________________________________________________________________________
void TMarker::Streamer(TBuffer &R__b)
{
   // Stream an object of class TMarker.

   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(TMarker::Class(), this, R__v, R__s, R__c);
         return;
      }
      //====process old versions before automatic schema evolution
      TObject::Streamer(R__b);
      TAttMarker::Streamer(R__b);
      Float_t x,y;
      R__b >> x;  fX = x;
      R__b >> y;  fY = y;
      //====end of old versions

   } else {
      R__b.WriteClassBuffer(TMarker::Class(),this);
   }
}

//______________________________________________________________________________
Rectangle_t TMarker::GetBBox()
{
   // Return the bounding Box of the Line

   Double_t size = this->GetMarkerSize();

   Rectangle_t BBox;
   BBox.fX = gPad->XtoPixel(fX)+(Int_t)(2*size);
   BBox.fY = gPad->YtoPixel(fY)-(Int_t)(2*size);
   BBox.fWidth = 2*size;
   BBox.fHeight = 2*size;
   return (BBox);
}

//______________________________________________________________________________
TPoint TMarker::GetBBoxCenter()
{
   // Return the center of the BoundingBox as TPoint in pixels

   TPoint p;
   p.SetX(gPad->XtoPixel(fX));
   p.SetY(gPad->YtoPixel(fY));
   return(p);
}

//______________________________________________________________________________
void TMarker::SetBBoxCenter(const TPoint &p)
{
   // Set center of the BoundingBox

   fX = gPad->PixeltoX(p.GetX());
   fY = gPad->PixeltoY(p.GetY() - gPad->VtoPixel(0));
}

//______________________________________________________________________________
void TMarker::SetBBoxCenterX(const Int_t x)
{
   // Set X coordinate of the center of the BoundingBox

   fX = gPad->PixeltoX(x);
}

//______________________________________________________________________________
void TMarker::SetBBoxCenterY(const Int_t y)
{
   // Set Y coordinate of the center of the BoundingBox

   fY = gPad->PixeltoY(y - gPad->VtoPixel(0));
}

//______________________________________________________________________________
void TMarker::SetBBoxX1(const Int_t x)
{
   // Set lefthandside of BoundingBox to a value
   // (resize in x direction on left)

   Double_t size = this->GetMarkerSize();
   fX = gPad->PixeltoX(x + (Int_t)size);
}

//______________________________________________________________________________
void TMarker::SetBBoxX2(const Int_t x)
{
   // Set righthandside of BoundingBox to a value
   // (resize in x direction on right)

   Double_t size = this->GetMarkerSize();
   fX = gPad->PixeltoX(x - (Int_t)size);
}

//_______________________________________________________________________________
void TMarker::SetBBoxY1(const Int_t y)
{
   // Set top of BoundingBox to a value (resize in y direction on top)

   Double_t size = this->GetMarkerSize();
   fY = gPad->PixeltoY(y - (Int_t)size - gPad->VtoPixel(0));
}

//_______________________________________________________________________________
void TMarker::SetBBoxY2(const Int_t y)
{
   // Set bottom of BoundingBox to a value
   // (resize in y direction on bottom)

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