| 1 | /* ======================================================================== *\
|
|---|
| 2 | !
|
|---|
| 3 | ! *
|
|---|
| 4 | ! * This file is part of MARS, the MAGIC Analysis and Reconstruction
|
|---|
| 5 | ! * Software. It is distributed to you in the hope that it can be a useful
|
|---|
| 6 | ! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
|
|---|
| 7 | ! * It is distributed WITHOUT ANY WARRANTY.
|
|---|
| 8 | ! *
|
|---|
| 9 | ! * Permission to use, copy, modify and distribute this software and its
|
|---|
| 10 | ! * documentation for any purpose is hereby granted without fee,
|
|---|
| 11 | ! * provided that the above copyright notice appear in all copies and
|
|---|
| 12 | ! * that both that copyright notice and this permission notice appear
|
|---|
| 13 | ! * in supporting documentation. It is provided "as is" without express
|
|---|
| 14 | ! * or implied warranty.
|
|---|
| 15 | ! *
|
|---|
| 16 | !
|
|---|
| 17 | !
|
|---|
| 18 | ! Author(s): Thomas Bretz, 03/2004 <mailto:tbretz@astro.uni-wuerzburg.de>
|
|---|
| 19 | !
|
|---|
| 20 | ! Copyright: MAGIC Software Development, 2002-2004
|
|---|
| 21 | !
|
|---|
| 22 | !
|
|---|
| 23 | \* ======================================================================== */
|
|---|
| 24 |
|
|---|
| 25 | //////////////////////////////////////////////////////////////////////////////
|
|---|
| 26 | //
|
|---|
| 27 | // MAstroCatalog
|
|---|
| 28 | //
|
|---|
| 29 | // THIS IMPLEMENTATION IS PRELIMINARY AND WILL BE MERGED WITH
|
|---|
| 30 | // SOME PARTS OF THE DRIVE SOFTWARE SOON!
|
|---|
| 31 | //
|
|---|
| 32 | //////////////////////////////////////////////////////////////////////////////
|
|---|
| 33 | #include "MAstroCatalog.h"
|
|---|
| 34 |
|
|---|
| 35 | #include <fstream>
|
|---|
| 36 |
|
|---|
| 37 | #include <TLine.h>
|
|---|
| 38 | #include <TMarker.h>
|
|---|
| 39 | #include <TArrayI.h>
|
|---|
| 40 | #include <TRotation.h>
|
|---|
| 41 | #include <TStopwatch.h>
|
|---|
| 42 | #include <TVirtualPad.h>
|
|---|
| 43 |
|
|---|
| 44 | #include "MLog.h"
|
|---|
| 45 | #include "MLogManip.h"
|
|---|
| 46 |
|
|---|
| 47 | #include "MAstro.h"
|
|---|
| 48 | #include "MTime.h"
|
|---|
| 49 | #include "MObservatory.h"
|
|---|
| 50 |
|
|---|
| 51 | ClassImp(MVector3);
|
|---|
| 52 | ClassImp(MAstroCatalog);
|
|---|
| 53 |
|
|---|
| 54 | using namespace std;
|
|---|
| 55 |
|
|---|
| 56 | MVector3 MVector3::GetZdAz(const MObservatory &obs, Double_t gmst) const
|
|---|
| 57 | {
|
|---|
| 58 | if (!fType==kIsRaDec)
|
|---|
| 59 | return MVector3();
|
|---|
| 60 |
|
|---|
| 61 | const Double_t alpha = gmst + obs.GetElong();
|
|---|
| 62 |
|
|---|
| 63 | MVector3 zdaz;
|
|---|
| 64 | zdaz.SetZdAz(Theta(), alpha-Phi(), Mag());
|
|---|
| 65 | zdaz.RotateY(obs.GetPhi()-TMath::Pi()/2);
|
|---|
| 66 | return zdaz;
|
|---|
| 67 |
|
|---|
| 68 | /*
|
|---|
| 69 | // ------ The same using slalib, tested in the drive system -------
|
|---|
| 70 | const Double_t alpha = slaGmst(mjd) + obs.GetElong();
|
|---|
| 71 | Double_t el;
|
|---|
| 72 | slaDe2h(fAlpha-ra, dec, obs.GetPhi(), &az, &el);
|
|---|
| 73 | zd = TMath::Pi()/2-el;
|
|---|
| 74 | return;
|
|---|
| 75 | */
|
|---|
| 76 | }
|
|---|
| 77 |
|
|---|
| 78 | MVector3 MVector3::GetZdAz(const MTime &time, MObservatory &obs) const
|
|---|
| 79 | {
|
|---|
| 80 | return GetZdAz(obs, time.GetGmst());
|
|---|
| 81 | }
|
|---|
| 82 |
|
|---|
| 83 | TString MAstroCatalog::FindToken(TString &line, Char_t tok)
|
|---|
| 84 | {
|
|---|
| 85 | Ssiz_t token = line.First(tok);
|
|---|
| 86 | if (token<0)
|
|---|
| 87 | {
|
|---|
| 88 | const TString copy(line);
|
|---|
| 89 | line = "";
|
|---|
| 90 | return copy;
|
|---|
| 91 | }
|
|---|
| 92 |
|
|---|
| 93 | const TString res = line(0, token);
|
|---|
| 94 | line.Remove(0, token+1);
|
|---|
| 95 | return res;
|
|---|
| 96 | }
|
|---|
| 97 |
|
|---|
| 98 | Int_t MAstroCatalog::atoi(const TSubString &sub)
|
|---|
| 99 | {
|
|---|
| 100 | return atoi(TString(sub));
|
|---|
| 101 | }
|
|---|
| 102 |
|
|---|
| 103 | Float_t MAstroCatalog::atof(const TSubString &sub)
|
|---|
| 104 | {
|
|---|
| 105 | return atof(TString(sub));
|
|---|
| 106 | }
|
|---|
| 107 |
|
|---|
| 108 | Int_t MAstroCatalog::atoi(const TString &s)
|
|---|
| 109 | {
|
|---|
| 110 | return std::atoi(s);
|
|---|
| 111 | }
|
|---|
| 112 |
|
|---|
| 113 | Float_t MAstroCatalog::atof(const TString &s)
|
|---|
| 114 | {
|
|---|
| 115 | return std::atof(s);
|
|---|
| 116 | }
|
|---|
| 117 |
|
|---|
| 118 | Int_t MAstroCatalog::ReadXephem(TString catalog)
|
|---|
| 119 | {
|
|---|
| 120 | gLog << inf << "Reading Xephem catalog: " << catalog << endl;
|
|---|
| 121 |
|
|---|
| 122 | ifstream fin(catalog);
|
|---|
| 123 |
|
|---|
| 124 | Int_t add =0;
|
|---|
| 125 | Int_t cnt =0;
|
|---|
| 126 | Int_t line=0;
|
|---|
| 127 |
|
|---|
| 128 | Double_t maxmag=0;
|
|---|
| 129 |
|
|---|
| 130 | while (1)
|
|---|
| 131 | {
|
|---|
| 132 | TString row;
|
|---|
| 133 | row.ReadLine(fin);
|
|---|
| 134 | if (!fin)
|
|---|
| 135 | break;
|
|---|
| 136 |
|
|---|
| 137 | line++;
|
|---|
| 138 |
|
|---|
| 139 | if (row[0]=='#')
|
|---|
| 140 | continue;
|
|---|
| 141 |
|
|---|
| 142 | TString line(row);
|
|---|
| 143 |
|
|---|
| 144 | TString name = FindToken(line);
|
|---|
| 145 | TString dummy = FindToken(line);
|
|---|
| 146 | TString r = FindToken(line);
|
|---|
| 147 | TString d = FindToken(line);
|
|---|
| 148 | TString m = FindToken(line);
|
|---|
| 149 | TString epoch = FindToken(line);
|
|---|
| 150 |
|
|---|
| 151 | if (name.IsNull() || r.IsNull() || d.IsNull() || m.IsNull() || epoch.IsNull())
|
|---|
| 152 | {
|
|---|
| 153 | gLog << warn << "Invalid Entry Line #" << line << ": " << row << endl;
|
|---|
| 154 | continue;
|
|---|
| 155 | }
|
|---|
| 156 |
|
|---|
| 157 | cnt++;
|
|---|
| 158 |
|
|---|
| 159 | const Double_t mag = atof(m);
|
|---|
| 160 |
|
|---|
| 161 | maxmag = TMath::Max(maxmag, mag);
|
|---|
| 162 |
|
|---|
| 163 | if (mag>fLimMag)
|
|---|
| 164 | continue;
|
|---|
| 165 |
|
|---|
| 166 | if (epoch!="2000")
|
|---|
| 167 | {
|
|---|
| 168 | gLog << warn << "Epoch != 2000... skipped." << endl;
|
|---|
| 169 | continue;
|
|---|
| 170 | }
|
|---|
| 171 |
|
|---|
| 172 | Double_t ra0, dec0;
|
|---|
| 173 | MAstro::Coordinate2Angle(r, ra0);
|
|---|
| 174 | MAstro::Coordinate2Angle(d, dec0);
|
|---|
| 175 |
|
|---|
| 176 | ra0 *= TMath::Pi()/12;
|
|---|
| 177 | dec0 *= TMath::Pi()/180;
|
|---|
| 178 |
|
|---|
| 179 | MVector3 *star=new MVector3;
|
|---|
| 180 | star->SetRaDec(ra0, dec0, mag);
|
|---|
| 181 | if (star->Angle(fRaDec)*TMath::RadToDeg()>fRadiusFOV)
|
|---|
| 182 | {
|
|---|
| 183 | delete star;
|
|---|
| 184 | continue;
|
|---|
| 185 | }
|
|---|
| 186 |
|
|---|
| 187 | fList.Add(star);
|
|---|
| 188 | add++;
|
|---|
| 189 | }
|
|---|
| 190 | gLog << inf << "Read " << add << " out of " << cnt << " (Total max mag=" << maxmag << ")" << endl;
|
|---|
| 191 |
|
|---|
| 192 | return add;
|
|---|
| 193 | }
|
|---|
| 194 |
|
|---|
| 195 | Int_t MAstroCatalog::ReadNGC2000(TString catalog)
|
|---|
| 196 | {
|
|---|
| 197 | gLog << inf << "Reading NGC2000 catalog: " << catalog << endl;
|
|---|
| 198 |
|
|---|
| 199 | ifstream fin(catalog);
|
|---|
| 200 |
|
|---|
| 201 | Int_t add=0;
|
|---|
| 202 | Int_t cnt=0;
|
|---|
| 203 | Int_t n =0;
|
|---|
| 204 |
|
|---|
| 205 | Double_t maxmag=0;
|
|---|
| 206 |
|
|---|
| 207 | while (1)
|
|---|
| 208 | {
|
|---|
| 209 | TString row;
|
|---|
| 210 | row.ReadLine(fin);
|
|---|
| 211 | if (!fin)
|
|---|
| 212 | break;
|
|---|
| 213 |
|
|---|
| 214 | cnt++;
|
|---|
| 215 |
|
|---|
| 216 | const Int_t rah = atoi(row(13, 2));
|
|---|
| 217 | const Float_t ram = atof(row(16, 4));
|
|---|
| 218 | const Char_t decs = row(22);
|
|---|
| 219 | const Int_t decd = atoi(row(23, 2));
|
|---|
| 220 | const Int_t decm = atoi(row(26, 2));
|
|---|
| 221 | const TString m = row(43, 4);
|
|---|
| 222 |
|
|---|
| 223 | if (m.Strip().IsNull())
|
|---|
| 224 | continue;
|
|---|
| 225 |
|
|---|
| 226 | n++;
|
|---|
| 227 |
|
|---|
| 228 | const Double_t mag = atof(m);
|
|---|
| 229 |
|
|---|
| 230 | maxmag = TMath::Max(maxmag, mag);
|
|---|
| 231 |
|
|---|
| 232 | if (mag>fLimMag)
|
|---|
| 233 | continue;
|
|---|
| 234 |
|
|---|
| 235 | const Double_t ra = MAstro::Hms2Rad(rah, (int)ram, fmod(ram, 1)*60);
|
|---|
| 236 | const Double_t dec = MAstro::Dms2Rad(decd, decm, 0, decs);
|
|---|
| 237 |
|
|---|
| 238 | MVector3 *star=new MVector3;
|
|---|
| 239 | star->SetRaDec(ra, dec, mag);
|
|---|
| 240 | if (star->Angle(fRaDec)*TMath::RadToDeg()>fRadiusFOV)
|
|---|
| 241 | {
|
|---|
| 242 | delete star;
|
|---|
| 243 | continue;
|
|---|
| 244 | }
|
|---|
| 245 |
|
|---|
| 246 | fList.Add(star);
|
|---|
| 247 | add++;
|
|---|
| 248 | }
|
|---|
| 249 |
|
|---|
| 250 | gLog << inf << "Read " << add << " out of " << n << " (Total max mag=" << maxmag << ")" << endl;
|
|---|
| 251 |
|
|---|
| 252 | return add;
|
|---|
| 253 | }
|
|---|
| 254 |
|
|---|
| 255 | Int_t MAstroCatalog::ReadBSC(TString catalog)
|
|---|
| 256 | {
|
|---|
| 257 | gLog << inf << "Reading Bright Star Catalog (BSC5) catalog: " << catalog << endl;
|
|---|
| 258 |
|
|---|
| 259 | ifstream fin(catalog);
|
|---|
| 260 |
|
|---|
| 261 | Int_t add=0;
|
|---|
| 262 | Int_t cnt=0;
|
|---|
| 263 | Int_t n =0;
|
|---|
| 264 |
|
|---|
| 265 | Double_t maxmag=0;
|
|---|
| 266 |
|
|---|
| 267 | while (1)
|
|---|
| 268 | {
|
|---|
| 269 | TString row;
|
|---|
| 270 | row.ReadLine(fin);
|
|---|
| 271 | if (!fin)
|
|---|
| 272 | break;
|
|---|
| 273 |
|
|---|
| 274 | cnt++;
|
|---|
| 275 |
|
|---|
| 276 | const Int_t rah = atoi(row(75, 2));
|
|---|
| 277 | const Int_t ram = atoi(row(77, 2));
|
|---|
| 278 | const Float_t ras = atof(row(79, 4));
|
|---|
| 279 | const Char_t decsgn = row(83);
|
|---|
| 280 | const Int_t decd = atoi(row(84, 2));
|
|---|
| 281 | const Int_t decm = atoi(row(86, 2));
|
|---|
| 282 | const Int_t decs = atoi(row(88, 2));
|
|---|
| 283 | const TString m = row(102, 5);
|
|---|
| 284 |
|
|---|
| 285 | if (m.Strip().IsNull())
|
|---|
| 286 | continue;
|
|---|
| 287 |
|
|---|
| 288 | n++;
|
|---|
| 289 |
|
|---|
| 290 | const Double_t mag = atof(m.Data());
|
|---|
| 291 |
|
|---|
| 292 | maxmag = TMath::Max(maxmag, mag);
|
|---|
| 293 |
|
|---|
| 294 | if (mag>fLimMag)
|
|---|
| 295 | continue;
|
|---|
| 296 |
|
|---|
| 297 | const Double_t ra = MAstro::Hms2Rad(rah, ram, ras);
|
|---|
| 298 | const Double_t dec = MAstro::Dms2Rad(decd, decm, decs, decsgn);
|
|---|
| 299 |
|
|---|
| 300 | MVector3 *star=new MVector3;
|
|---|
| 301 | star->SetRaDec(ra, dec, mag);
|
|---|
| 302 | if (star->Angle(fRaDec)*TMath::RadToDeg()>fRadiusFOV)
|
|---|
| 303 | {
|
|---|
| 304 | delete star;
|
|---|
| 305 | continue;
|
|---|
| 306 | }
|
|---|
| 307 |
|
|---|
| 308 | fList.Add(star);
|
|---|
| 309 | add++;
|
|---|
| 310 | }
|
|---|
| 311 |
|
|---|
| 312 | gLog << inf << "Read " << add << " out of " << n << " (Total max mag=" << maxmag << ")" << endl;
|
|---|
| 313 |
|
|---|
| 314 | return add;
|
|---|
| 315 | }
|
|---|
| 316 |
|
|---|
| 317 | Bool_t MAstroCatalog::Convert(const TRotation &rot, TVector2 &v, Int_t type)
|
|---|
| 318 | {
|
|---|
| 319 | MVector3 w;
|
|---|
| 320 | w.SetRaDec(v.Y(), v.X()-fRaDec.Phi(), v.Y());
|
|---|
| 321 | w *= rot;
|
|---|
| 322 |
|
|---|
| 323 | v.Set(w.Phi(), w.Theta());
|
|---|
| 324 |
|
|---|
| 325 | return w.Angle(TVector3(1, 0, 0))*TMath::RadToDeg()<=fRadiusFOV;
|
|---|
| 326 | }
|
|---|
| 327 |
|
|---|
| 328 | Bool_t MAstroCatalog::PaintLine(const TVector2 &v, Double_t dx, Double_t dy, const TRotation &rot, Int_t type)
|
|---|
| 329 | {
|
|---|
| 330 | const TVector2 add(dx*TMath::DegToRad(), dy*TMath::DegToRad());
|
|---|
| 331 |
|
|---|
| 332 | TVector2 v0 = v;
|
|---|
| 333 | TVector2 v1 = v+add;
|
|---|
| 334 |
|
|---|
| 335 | const Bool_t rc0 = Convert(rot, v0, type);
|
|---|
| 336 | const Bool_t rc1 = Convert(rot, v1, type);
|
|---|
| 337 | if (!rc0 && !rc1)
|
|---|
| 338 | return kFALSE;
|
|---|
| 339 |
|
|---|
| 340 | TLine line;
|
|---|
| 341 | line.SetLineColor(kGreen);
|
|---|
| 342 | line.PaintLine(v0.X(), TMath::Pi()/2-v0.Y(),
|
|---|
| 343 | v1.X(), TMath::Pi()/2-v1.Y());
|
|---|
| 344 |
|
|---|
| 345 | return kTRUE;
|
|---|
| 346 | }
|
|---|
| 347 |
|
|---|
| 348 | void MAstroCatalog::Paint(const TVector2 &v0, const TRotation &rot, TArrayI &dx, TArrayI &dy, Byte_t type)
|
|---|
| 349 | {
|
|---|
| 350 | Int_t idx[] = {1, 1, 1, 1};
|
|---|
| 351 |
|
|---|
| 352 | Int_t dirs[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };
|
|---|
| 353 |
|
|---|
| 354 | for (int i=0; i<dx.GetSize(); i++)
|
|---|
| 355 | {
|
|---|
| 356 | for (int j=0; j<4; j++)
|
|---|
| 357 | if (dx[i]==dx[0]+dirs[j][0] && dy[i]==dy[0]+dirs[j][1])
|
|---|
| 358 | idx[j] = 0;
|
|---|
| 359 | }
|
|---|
| 360 |
|
|---|
| 361 | TVector2 v1 = v0 + TVector2(dx[0]*TMath::DegToRad(), dy[0]*TMath::DegToRad());
|
|---|
| 362 |
|
|---|
| 363 | for (int i=0; i<4; i++)
|
|---|
| 364 | if (idx[i])
|
|---|
| 365 | {
|
|---|
| 366 | dx.Set(dx.GetSize()+1);
|
|---|
| 367 | dy.Set(dy.GetSize()+1);
|
|---|
| 368 |
|
|---|
| 369 | dx[dx.GetSize()-1] = dx[0];
|
|---|
| 370 | dy[dy.GetSize()-1] = dy[0];
|
|---|
| 371 |
|
|---|
| 372 | dx[0] += dirs[i][0];
|
|---|
| 373 | dy[0] += dirs[i][1];
|
|---|
| 374 |
|
|---|
| 375 | if (PaintLine(v1, dirs[i][0], dirs[i][1], rot, type))
|
|---|
| 376 | Paint(v0, rot, dx, dy, type);
|
|---|
| 377 |
|
|---|
| 378 | dx[0] -= dirs[i][0];
|
|---|
| 379 | dy[0] -= dirs[i][1];
|
|---|
| 380 | }
|
|---|
| 381 | }
|
|---|
| 382 |
|
|---|
| 383 | void MAstroCatalog::PaintNet(const TVector2 &v0, const TRotation &rot, Int_t type)
|
|---|
| 384 | {
|
|---|
| 385 | //const Double_t step = TMath::DegToRad();
|
|---|
| 386 |
|
|---|
| 387 | TArrayI dx(1);
|
|---|
| 388 | TArrayI dy(1);
|
|---|
| 389 |
|
|---|
| 390 | TVector2 v = v0*TMath::RadToDeg();
|
|---|
| 391 | v.Set(TMath::Floor(v.X()), TMath::Floor(v.Y()));
|
|---|
| 392 | v *= TMath::DegToRad();
|
|---|
| 393 |
|
|---|
| 394 | Paint(v, rot, dx, dy, type);
|
|---|
| 395 | }
|
|---|
| 396 |
|
|---|
| 397 | void MAstroCatalog::Paint(Option_t *o)
|
|---|
| 398 | {
|
|---|
| 399 | Double_t ra = fRaDec.Phi();
|
|---|
| 400 | Double_t dec = TMath::Pi()/2-fRaDec.Theta();
|
|---|
| 401 |
|
|---|
| 402 | TIter Next(&fList);
|
|---|
| 403 | TVector3 *v;
|
|---|
| 404 |
|
|---|
| 405 | Double_t minra=360, maxra=0, mindec=360, maxdec=0;
|
|---|
| 406 |
|
|---|
| 407 | while ((v=(TVector3*)Next()))
|
|---|
| 408 | {
|
|---|
| 409 | minra = TMath::Min(minra, v->Phi());
|
|---|
| 410 | maxra = TMath::Max(maxra, v->Phi());
|
|---|
| 411 |
|
|---|
| 412 | mindec = TMath::Min(mindec, TMath::Pi()/2-v->Theta());
|
|---|
| 413 | maxdec = TMath::Max(maxdec, TMath::Pi()/2-v->Theta());
|
|---|
| 414 | }
|
|---|
| 415 |
|
|---|
| 416 | cout << gPad << endl;
|
|---|
| 417 |
|
|---|
| 418 | cout << "Minra: " << (minra-ra)*TMath::RadToDeg() << endl;
|
|---|
| 419 | cout << "Maxra: " << (maxra-ra)*TMath::RadToDeg() << endl;
|
|---|
| 420 |
|
|---|
| 421 | cout << "Mindec: " << (mindec-dec)*TMath::RadToDeg() << endl;
|
|---|
| 422 | cout << "Maxdec: " << (maxdec-dec)*TMath::RadToDeg() << endl;
|
|---|
| 423 |
|
|---|
| 424 | //gPad->Range(minra-ra, mindec-dec, maxra-ra, maxdec-dec);
|
|---|
| 425 | gPad->Range(-fRadiusFOV*TMath::DegToRad()/TMath::Sqrt(2.), -fRadiusFOV*TMath::DegToRad()/TMath::Sqrt(2.),
|
|---|
| 426 | fRadiusFOV*TMath::DegToRad()/TMath::Sqrt(2.), fRadiusFOV*TMath::DegToRad()/TMath::Sqrt(2.));
|
|---|
| 427 |
|
|---|
| 428 | Next.Reset();
|
|---|
| 429 |
|
|---|
| 430 | cout << "Dec: " << dec*TMath::RadToDeg() << endl;
|
|---|
| 431 | cout << "Ra: " << ra*TMath::RadToDeg() << endl;
|
|---|
| 432 |
|
|---|
| 433 | // Precalc Sin/Cos...
|
|---|
| 434 | TRotation trans;
|
|---|
| 435 | trans.Rotate(dec, TVector3(0, 1, 0));
|
|---|
| 436 |
|
|---|
| 437 | TStopwatch clk;
|
|---|
| 438 | clk.Start();
|
|---|
| 439 |
|
|---|
| 440 | TMarker mark;
|
|---|
| 441 | mark.SetMarkerColor(kBlack);
|
|---|
| 442 | mark.SetMarkerStyle(kCircle);
|
|---|
| 443 | while ((v=(TVector3*)Next()))
|
|---|
| 444 | {
|
|---|
| 445 | MVector3 v0;
|
|---|
| 446 | v0.SetRaDec(v->Phi()-ra, TMath::Pi()/2-v->Theta(), 1);
|
|---|
| 447 | v0 *= trans;
|
|---|
| 448 |
|
|---|
| 449 | mark.SetMarkerSize((fLimMag-TMath::Log(v->Mag()))/4);
|
|---|
| 450 | mark.PaintMarker(v0.Phi(), TMath::Pi()/2-v0.Theta());
|
|---|
| 451 | }
|
|---|
| 452 |
|
|---|
| 453 | TMarker m;
|
|---|
| 454 | m.SetMarkerStyle(kCross);
|
|---|
| 455 | m.PaintMarker(0, 0);
|
|---|
| 456 |
|
|---|
| 457 | m.SetMarkerColor(kRed);
|
|---|
| 458 | m.SetMarkerStyle(kFullDotSmall);
|
|---|
| 459 |
|
|---|
| 460 | TVector2 v0(ra, dec);
|
|---|
| 461 | PaintNet(v0, trans);
|
|---|
| 462 |
|
|---|
| 463 | clk.Stop();
|
|---|
| 464 | clk.Print();
|
|---|
| 465 | }
|
|---|