Changeset 18622 for trunk/FACT++
- Timestamp:
- 09/18/16 14:47:40 (8 years ago)
- Location:
- trunk/FACT++/drive
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/drive/MCaos.cc
r18618 r18622 2 2 3 3 #include <fstream> 4 5 #include <TSystem.h> 6 #include <TFile.h> 7 #include <TTree.h> 8 #include <TH1.h> 9 #include <TH2.h> 10 #include <TGraph.h> 11 #include <TCanvas.h> 12 13 #include "MLog.h" 14 #include "MLogManip.h" 15 16 #include "MTime.h" 17 #include "MPointing.h" 4 #include <iostream> 5 #include <iomanip> 6 #include <math.h> 18 7 19 8 #include "Led.h" 20 #include "Ring.h"21 #include "Rings.h"22 9 #include "FilterLed.h" 23 10 … … 29 16 if (!fin) 30 17 { 31 gLog << err<< "ERROR - Cannot open " << name << endl;18 cout << "ERROR - Cannot open " << name << endl; 32 19 return; 33 20 } 34 21 35 fPositions. Clear();22 fPositions.clear(); 36 23 37 gLog << all<< " Reading " << name << ":" << endl;38 gLog << inf<< "------------------------------" << endl;24 cout << " Reading " << name << ":" << endl; 25 cout << "------------------------------" << endl; 39 26 while (1) 40 27 { 41 Double_t px, py, ox, oy;42 fin >> px >> py >> ox >> oy;28 double px, py, phi; 29 fin >> px >> py >> phi; 43 30 if (!fin) 44 31 break; 45 32 46 gLog << " Led #" << fPositions.GetEntriesFast() << ": "; 47 gLog << setw(3) << px << " "; 48 gLog << setw(3) << py << " ("; 49 gLog << setw(3) << ox << ", "; 50 gLog << setw(3) << oy << ")" << endl; 51 AddPosition(px, py, ox, oy); 33 cout << " Led #" << fPositions.size() << ": "; 34 cout << setw(3) << px << " "; 35 cout << setw(3) << py << " ("; 36 cout << setw(3) << phi << ")\n"; 37 AddPosition(px, py, phi); 52 38 } 53 gLog << all << "Found " << fPositions.GetEntriesFast() << " leds." << endl;39 cout << "Found " << fPositions.size() << " leds." << endl; 54 40 } 55 41 56 void MCaos:: OpenFile()42 void MCaos::CalcCenters(const vector<Led> &leds, float min, float max) 57 43 { 58 int i=0; 59 char name[100]; 60 while (1) 61 { 62 sprintf(name, "data/data%03d.root", i++); 63 if (gSystem->AccessPathName(name, kFileExists)) 64 break; 65 } 44 fRings.clear(); 66 45 67 if (fFile) 68 delete fFile; 46 const int nPoints = leds.size(); 69 47 70 fFile = new TFile(name, "RECREATE"); 48 // A minimum of at least 3 points is mandatory! 49 if (nPoints<fMinNumberLeds || nPoints<3) 50 return; 71 51 72 if (!fFile->IsOpen()) 73 { 74 delete fFile; 75 fFile = NULL; 52 // ofstream fout("rings.txt", ios::app); 76 53 77 gLog << err << "ERROR - Cannot open file '" << name << "'" << endl; 78 } 54 for (int i=0; i<nPoints-2; i++) 55 for (int j=i+1; j<nPoints-1; j++) 56 for (int k=j+1; k<nPoints; k++) 57 { 58 Ring ring; 59 if (!ring.CalcCenter(leds[i], leds[j], leds[k])) 60 continue; 79 61 80 TTree *tree = new TTree("Data", "Real CaOs Data");62 // fout << i+j*10+k*100 << " " << ring.GetR() << " " << ring.GetX() << " " << ring.GetY() << endl; 81 63 82 fLeds = new Leds; 83 fEvtTime = 0; 64 // 65 //filter and remove rings with too big or too small radius 66 // 67 if ((min>=0&&ring.GetR()<min) || (max>=0&&ring.GetR()>max)) 68 continue; 84 69 85 tree->Branch("Leds", "TClonesArray", &fLeds); 86 tree->Branch("ZenithDist.", &fZenithDist, "fZenithDist/D"); 87 tree->Branch("Azimuth.", &fAzimuth, "fAzimuth/D"); 88 tree->Branch("EvtTime.", &fEvtTime, "fEvtTime/D"); 89 90 gLog << inf << "Root file '" << name << "' open." << endl; 70 fRings.push_back(ring); 71 } 91 72 } 92 73 93 void MCaos::CloseFile()74 int32_t MCaos::CalcRings(std::vector<Led> &leds, float min, float max) 94 75 { 95 if (!fFile) 96 return; 76 CalcCenters(leds, min, max); 97 77 98 const TString name = fFile->GetName(); 99 const Double_t n = ((TTree*)fFile->Get("Data"))->GetEntries(); 78 fCenter.InterpolCenters(fRings); 100 79 101 fFile->Write(); 102 delete fFile; 103 fFile = NULL; 80 for (auto it=leds.begin(); it!=leds.end(); it++) 81 it->CalcPhi(fCenter); 104 82 105 gLog << inf << "Root file closed (n=" << n << ")" << endl; 106 107 if (n<1) 108 { 109 gSystem->Unlink(name); 110 gLog << warn << "Root file deleted - no entries." << endl; 111 } 83 return fRings.size(); 112 84 } 113 85 114 void MCaos::InitHistograms()86 Ring MCaos::Run(uint8_t *img) 115 87 { 116 if (fHistpr) 117 return; 118 119 Rings r; 120 r.SetMinNumberLeds(fMinNumberLeds); 121 r.CalcRings(fPositions); 122 123 const Ring &c = r.GetCenter(); 124 125 Double_t xmin = c.GetX()-50; 126 Double_t xmax = c.GetX()+50; 127 128 Double_t ymin = c.GetY()-50; 129 Double_t ymax = c.GetY()+50; 130 131 Double_t rmin = c.GetR()-50; 132 Double_t rmax = c.GetR()+50; 133 134 Int_t xbin = 1001; 135 Int_t ybin = 1001; 136 Int_t rbin = 1001; 137 138 const Int_t sz = 50; 139 fHistled = new TH2F*[fPositions.GetEntriesFast()]; 140 fHistw = new TH1F*[fPositions.GetEntriesFast()]; 141 for (int i=0; i<fPositions.GetEntriesFast(); i++) 142 { 143 TString name = "LED"; 144 TString title = "LED #"; 145 146 name += i; 147 title += i; 148 149 const Led &p = fPositions(i); 150 fHistled[i] = new TH2F(name, title, 151 20*sz+1, p.GetX()-sz, p.GetX()+sz, 152 20*sz+1, p.GetY()-sz, p.GetY()+sz); 153 fHistled[i]->SetXTitle("x [pix]"); 154 fHistled[i]->SetYTitle("counts"); 155 156 name = "Angle"; 157 title = "Angle of the Led #"; 158 159 name += i; 160 title += i; 161 162 fHistw[i] = new TH1F; 163 fHistw[i]->SetNameTitle(name, title); 164 fHistw[i]->SetBins(101, -50.5, 50.5); 165 fHistw[i]->SetXTitle("\\Phi [arcmin]"); 166 fHistw[i]->SetYTitle("counts"); 167 } 168 169 fHistallw = new TH1F; 170 fHistallw->SetNameTitle("allw","Rotation angel"); 171 fHistallw->SetBins(26, -25, 25); 172 fHistallw->SetXTitle("\\phi [arcmin]"); 173 fHistallw->SetYTitle("counts"); 174 175 fHistprxpry = new TH2F; 176 fHistprxpry->SetNameTitle("prx und pry","x- and y-coordinate of the ring-center"); 177 fHistprxpry->SetBins(xbin, xmin, xmax, ybin, ymin, ymax); 178 fHistprxpry->SetXTitle("x [pix]"); 179 fHistprxpry->SetYTitle("y [pix]"); 180 fHistprxpry->SetZTitle("counts"); 181 182 fGraphprx = new TGraph; 183 fGraphprx->SetTitle("time-developement of the x-coordinate of the ring-center"); 184 185 fGraphpry = new TGraph; 186 fGraphpry->SetTitle("time-developement of the y-coordinate of the ring-center"); 187 188 fGraphw = new TGraph; 189 fGraphw->SetTitle("Time-developement of rotation angle"); 190 191 fHistpr = new TH1F("pr","Radius of the ring", rbin, rmin, rmax); 192 fHistpr->SetXTitle("r [pix]"); 193 fHistpr->SetYTitle("counts"); 194 } 195 196 void MCaos::DeleteHistograms() 197 { 198 TH1F *dummy = fHistpr; 199 fHistpr=NULL; 200 201 if (!dummy) 202 return; 203 204 delete dummy; 205 delete fHistprxpry; 206 delete fHistallw; 207 delete fGraphprx; 208 delete fGraphpry; 209 delete fGraphr; 210 211 for (int i=0; i<6; i++) 212 { 213 delete fHistled[i]; 214 delete fHistw[i]; 215 delete fGraphw; 216 } 217 delete fHistled; 218 delete fHistw; 219 } 220 221 void MCaos::ShowHistograms() 222 { 223 if (!fHistpr || fHistpr->GetEntries()<1) 224 return; 225 226 TH1 *h; 227 228 TCanvas *c = new TCanvas("cring", "Center of the ring", 800, 800); 229 c->Divide(2,2); 230 c->cd(1); 231 h = (TH1*)fHistprxpry->ProfileX(); 232 h->Fit("gaus"); 233 h->Draw(); 234 h->SetBit(kCanDelete); 235 c->cd(2); 236 h = (TH1*)fHistprxpry->ProfileY(); 237 h->Fit("gaus"); 238 h->Draw(); 239 h->SetBit(kCanDelete); 240 c->cd(3); 241 fHistpr->Fit("gaus"); 242 fHistpr->DrawCopy(); 243 c->cd(4); 244 fHistprxpry->DrawCopy(/*"surf2"*/); 245 c->Update(); 246 247 const Int_t n1 = (Int_t)(TMath::Sqrt(fPositions.GetEntriesFast())+1.0); 248 const Int_t n2 = (Int_t)(TMath::Sqrt(fPositions.GetEntriesFast())+0.5); 249 250 TCanvas *c1 = new TCanvas("cpos", "Led Positions", 800, 600); 251 TCanvas *c2 = new TCanvas("cangle", "Angles of the Leds", 800, 600); 252 c1->Divide(n1, n2); 253 c2->Divide(n1, n2); 254 for (int i=0; i<fPositions.GetEntriesFast(); i++) 255 { 256 c1->cd(i+1); 257 fHistled[i]->DrawCopy(); 258 c2->cd(i+1); 259 fHistw[i]->DrawCopy(); 260 } 261 c1->Update(); 262 c2->Update(); 263 264 /* 265 c = new TCanvas("ctime", "Timedevelopement of Center", 800, 800); 266 c->Divide(1,3); 267 c->cd(1); 268 h = fGraphprx->GetHistogram(); 269 h->SetXTitle("time [s]"); 270 h->SetYTitle("x [pix]"); 271 h->DrawCopy(); 272 c->SetSelectedPad(NULL); 273 fGraphprx->DrawClone("ALP*")->SetBit(kCanDelete); 274 gPad->Modified(); 275 gPad->Update(); 276 c->cd(2); 277 h = fGraphpry->GetHistogram(); 278 h->SetXTitle("time [s]"); 279 h->SetYTitle("y [pix]"); 280 h->DrawCopy(); 281 //((TPad*)gPad)->SetSelectedPad(NULL); 282 //fGraphpry->DrawClone("ALP*")->SetBit(kCanDelete); 283 c->cd(3); 284 h = fGraphr->GetHistogram(); 285 h->SetXTitle("time [s]"); 286 h->SetYTitle("r [pix]"); 287 h->DrawCopy(); 288 //((TPad*)gPad)->SetSelectedPad(NULL); 289 //fGraphr->DrawClone("ALP*")->SetBit(kCanDelete); 290 c->Modified(); 291 c->Update(); 292 */ 293 294 c = new TCanvas("crot", "rotation angle", 800, 600); 295 c->Divide(2,1); 296 c->cd(1); 297 fHistallw->SetXTitle("\\phi [arcmin]"); 298 fHistallw->SetYTitle("counts"); 299 fHistallw->DrawCopy(); 300 /* 301 c->cd(2); 302 h = fGraphw->GetHistogram(); 303 h->SetXTitle("time [s]"); 304 h->SetYTitle("\\phi [arcmin]"); 305 h->DrawCopy(); 306 ((TPad*)gPad)->SetSelected(NULL); 307 fGraphw->DrawClone("ALP*")->SetBit(kCanDelete); 308 */ 309 310 /* -------------------------------------------------------- 311 * CALCULATE OFFSETS! 312 * -------------------------------------------------------- 313 Rings r; 314 r.CalcRings(fPositions); 315 316 const Ring &c = r.GetCenter(); 317 */ 318 } 319 320 void MCaos::ResetHistograms() 321 { 322 if (!fHistpr) 323 return; 324 325 fHistpr->Reset(); 326 fHistprxpry->Reset(); 327 fHistallw->Reset(); 328 for (int i=0; i<6; i++) 329 { 330 fHistled[i]->Reset(); 331 fHistw[i]->Reset(); 332 } 333 } 334 335 Ring MCaos::Run(byte *img, bool printl, bool printr, const ZdAz &pos, const MTime &t) 336 { 337 Leds &leds = *fLeds; 338 leds.Clear(); 339 340 fNumDetectedLEDs = 0; 341 fNumDetectedRings = 0; 342 343 /* 344 //the following lines are just to test the new setup 345 static int i=0; 346 i++; 347 i%=2; 348 if (i==0) 349 ReadResources("leds0.txt"); 350 else 351 ReadResources("leds1.txt"); 352 cout << "LEDs " << i << " " << flush; 353 */ 88 fLeds.clear(); 354 89 355 90 // img width height radius sigma 356 91 FilterLed f(img, 768, 576, fSizeBox, fSizeBox, fCut); 357 92 358 Int_t first=0; 359 for (int i=0; i<fPositions.GetEntriesFast(); i++) 93 for (auto it=fPositions.begin(); it!=fPositions.end(); it++) 360 94 { 95 std::vector<Led> arr; 96 361 97 // Try to find Led in this area 362 const Led &l0 = fPositions(i); 363 f.Execute(leds, TMath::FloorNint(l0.GetX()), TMath::FloorNint(l0.GetY())); 364 365 fNumDetectedLEDs = leds.GetEntries(); 98 f.Execute(arr, floor(it->GetX()), floor(it->GetY())); 366 99 367 100 // Loop over newly found Leds 368 for ( int j=first; j<leds.GetEntries(); j++)101 for (auto jt=arr.begin(); jt!=arr.end(); jt++) 369 102 { 370 Led &l1 = leds(j); 103 // Add Offset to Led 104 //jt->AddOffset(it->GetDx(), it->GetDy()); 371 105 372 // Add Offset to Led373 l1.AddOffset(l0.GetDx(), l0.GetDy());106 // Remember the expected phi for each detected led 107 jt->SetPhi(it->GetPhi()); 374 108 375 109 // Mark Led in image (FIXME: Move to MStarguider) 376 f.MarkPoint(l1.GetX(), l1.GetY(), l1.GetMag()); 110 f.MarkPoint(jt->GetX(), jt->GetY(), jt->GetMag()); 111 } 377 112 378 //old 379 /* 380 // Fill values into Histogram 381 if (!fHistpr) 382 continue; 383 384 fHistled[i]->Fill(l1.GetX(), l1.GetY()); 385 fHistw[i]->Fill(l1.GetPhi()); 386 */ 387 } 388 first = leds.GetEntries(); 113 fLeds.insert(fLeds.end(), arr.begin(), arr.end()); 389 114 } 390 115 391 Rings rings; 392 rings.SetMinNumberLeds(fMinNumberLeds); 393 // rings.CalcRings(leds, 265, 268); 394 // rwagner 395 // rings.CalcRings(leds, 158, 164); 396 fNumDetectedRings = rings.CalcRings(leds, fMinRadius, fMaxRadius); 116 fNumDetectedRings = CalcRings(fLeds, fMinRadius, fMaxRadius); 397 117 398 const Ring ¢er = rings.GetCenter(); 118 double sumphi = 0; 119 for (auto it=fLeds.begin(); it!=fLeds.end(); it++) 120 { 121 //cout << it->CalcPhi(fCenter) << "|" << it->GetPhi() << " "; 122 double dphi = it->CalcPhi(fCenter) - it->GetPhi(); 123 if (dphi>M_PI) 124 dphi -= 2*M_PI; 125 if (dphi<-M_PI) 126 dphi += 2*M_PI; 399 127 400 //uncommented for testing 401 // center.Print(); 128 sumphi += dphi; 129 } 130 //cout << endl; 402 131 403 // FIXME! 404 static const MTime t0(t); 405 fEvtTime = t-t0; 132 fCenter.SetPhi(sumphi/fLeds.size()); 406 133 407 if (fHistpr) 408 { 409 fHistpr->Fill(center.GetR()); 410 fHistprxpry->Fill(center.GetX(), center.GetY()); 411 fGraphprx->SetPoint(fGraphprx->GetN(), fEvtTime, center.GetX()); 412 fGraphpry->SetPoint(fGraphpry->GetN(), fEvtTime, center.GetY()); 413 414 //new 415 //----- 416 Double_t sum = 0; 417 for (int j=0; j<leds.GetEntries(); j++) 418 { 419 Led &l1 = leds(j); 420 421 fHistled[j]->Fill(l1.GetX(), l1.GetY()); 422 //fHistw[j]->Fill(l1.GetPhi()); 423 424 Double_t phi[6] = 425 { 426 0, 427 0, 428 0, 429 0, 430 0, 431 0 432 }; 433 434 const Double_t w = (leds(j).GetPhi()-phi[j])*60; 435 sum += w; 436 437 fHistw[j]->Fill(w); 438 sum /= leds.GetEntries(); 439 } 440 fGraphw->SetPoint(fGraphw->GetN(), fEvtTime, sum); 441 fHistallw->Fill(sum/leds.GetEntries()); 442 //----- 443 } 444 445 /* 446 //test - give number of rings 447 cout << rings.GetEntries() << " " << flush; 448 */ 449 450 if (printl) 451 leds.Print(); 452 if (printr) 453 rings.Print(); 454 455 if (fFile && leds.GetEntries()>0) 456 { 457 fZenithDist = pos.Zd(); //fCosy ? fCosy->GetPointingPos().Zd() : 0 458 fAzimuth = pos.Az(); //fCosy ? fCosy->GetPointingPos().Az() : 0; 459 460 TTree *t = (TTree*)fFile->Get("Data"); 461 t->Fill(); 462 } 463 464 return center; 465 /* 466 if (fCaosAnalyse->IsEntryEnabled(IDM_kStopAnalyse)) 467 { 468 const Ring ¢er = rings.GetCenter(); 469 470 Double_t phi[6] = 471 { 472 -124.727, 473 -61.0495, 474 -16.7907, 475 49.3119, 476 139.086 477 }; 478 479 Double_t sum = 0; 480 for (int i=0; i<6 && leds.At(i); i++) 481 { 482 const Double_t w = (leds(i).GetPhi()-phi[i])*60; 483 484 sum += w; 485 486 fHistw[i]->Fill(w); 487 fHistv[i]->Fill(leds(i).GetPhi()); 488 fGraphw[i]->SetPoint(fGraphw[i]->GetN(), fEvtTime, w); 489 } 490 fHistallw->Fill(sum/5); 491 } 492 */ 134 return fCenter; 493 135 } 494 495 496 Int_t MCaos::ReadEnv(const TEnv &env, TString prefix, Bool_t print)497 {498 if (IsEnvDefined(env, prefix, "File", print))499 ReadResources(GetEnvValue(env, prefix, "File", "ledsxxx.txt"));500 501 if (IsEnvDefined(env, prefix, "RadiusMin", print))502 fMinRadius = GetEnvValue(env, prefix, "RadiusMin", fMinRadius);503 504 if (IsEnvDefined(env, prefix, "RadiusMax", print))505 fMaxRadius = GetEnvValue(env, prefix, "RadiusMax", fMaxRadius);506 507 if (IsEnvDefined(env, prefix, "MinNumberLeds", print))508 fMinNumberLeds = GetEnvValue(env, prefix, "MinNumberLeds", fMinNumberLeds);509 510 if (IsEnvDefined(env, prefix, "SizeBox", print))511 fSizeBox = GetEnvValue(env, prefix, "SizeBox", fSizeBox);512 513 if (IsEnvDefined(env, prefix, "CleaningLevel", print))514 fCut = GetEnvValue(env, prefix, "CleaningLevel", fCut);515 516 if (IsEnvDefined(env, prefix, "ArcsecPerPixel", print))517 fArcsecPerPixel = GetEnvValue(env, prefix, "ArcsecPerPixel", fArcsecPerPixel);518 519 return kTRUE;520 } -
trunk/FACT++/drive/MCaos.h
r18618 r18622 2 2 #define CAOS_MCaos 3 3 4 #ifndef MARS_MParContainer5 #include "MParContainer.h"6 #endif7 #ifndef CAOS_Leds8 #include "Leds.h"9 #endif10 4 #ifndef CAOS_Ring 11 5 #include "Ring.h" 12 6 #endif 13 7 14 #ifndef COSY_PixClient 15 #include "PixClient.h" // byte 16 #endif 17 18 class TFile; 19 class TH1F; 20 class TH2F; 21 class TGraph; 22 23 class MTime; 24 class ZdAz; 25 26 class MCaos : public MParContainer 8 class MCaos 27 9 { 28 10 private: 29 TFile *fFile; // File we may write data to 11 std::vector<Led> fPositions; 12 std::vector<Led> fLeds; 30 13 31 Leds fPositions; 14 int16_t fMinNumberLeds; // minimum number of detected leds required 15 double fMinRadius; // minimum radius for cut in ring radius 16 double fMaxRadius; // maximum radius for cut in ring radius 17 uint16_t fSizeBox; // Size of the search box (side length in units of pixels) 18 double fCut; // Cleaning level (sigma above noise) 32 19 33 Leds *fLeds; 34 Double_t fEvtTime; 35 Double_t fZenithDist; 36 Double_t fAzimuth; 20 int32_t fNumDetectedRings; 37 21 38 TH1F *fHistpr; 39 TH2F **fHistled; 40 TH1F *fHistallw; 41 TH1F **fHistw; 22 Ring fCenter; 23 std::vector<Ring> fRings; 42 24 43 TH2F *fHistprxpry; 44 45 TGraph *fGraphprx; 46 TGraph *fGraphpry; 47 TGraph *fGraphw; 48 TGraph *fGraphr; 49 50 Short_t fMinNumberLeds; // minimum number of detected leds required 51 Double_t fMinRadius; // minimum radius for cut in ring radius 52 Double_t fMaxRadius; // maximum radius for cut in ring radius 53 UShort_t fSizeBox; // Size of the search box (side length in units of pixels) 54 Double_t fCut; // Cleaning level (sigma above noise) 55 Double_t fArcsecPerPixel; // Conversion from arcseconds to pixel 56 57 Int_t fNumDetectedLEDs; 58 Int_t fNumDetectedRings; 25 void CalcCenters(const std::vector<Led> &leds, float min, float max); 26 int32_t CalcRings(std::vector<Led> &leds, float min=-1, float max=-1); 27 const Ring &GetCenter() const { return fCenter; } 59 28 60 29 public: 61 MCaos(const char *name=0, const char *title=0) 62 : fFile(NULL), fHistpr(NULL), fMinNumberLeds(5), 63 fMinRadius(265), fMaxRadius(268), fSizeBox(19), fCut(3.0) 30 MCaos() : fMinRadius(236.7), fMaxRadius(238.6), fSizeBox(19), fCut(3.5) 64 31 { 65 fLeds = new Leds;66 32 } 67 33 68 34 ~MCaos() 69 35 { 70 CloseFile();71 DeleteHistograms();72 delete fLeds;73 36 } 74 37 75 void AddPosition( Float_t x, Float_t y, Float_t dx, Float_t dy)38 void AddPosition(float x, float y, float phi) 76 39 { 77 fPositions. Add(x, y, dx, dy);40 fPositions.push_back(Led(x, y, phi)); 78 41 } 79 42 80 43 void ReadResources(const char *name="leds.txt"); 81 44 82 void OpenFile(); 83 void CloseFile(); 84 85 void SetMinNumberLeds(Short_t n) 45 void SetMinNumberLeds(int16_t n) 86 46 { 87 47 fMinNumberLeds = n; 88 48 } 89 49 90 void SetMinRadius( Double_tmin) { fMinRadius=min; }91 void SetMaxRadius( Double_tmax) { fMaxRadius=max; }50 void SetMinRadius(double min) { fMinRadius=min; } 51 void SetMaxRadius(double max) { fMaxRadius=max; } 92 52 93 void InitHistograms(); 94 void DeleteHistograms(); 95 void ShowHistograms(); 96 void ResetHistograms(); 53 int32_t GetNumDetectedLEDs() const { return fLeds.size(); } 54 int32_t GetNumDetectedRings() const { return fNumDetectedRings; } 97 55 98 Int_t GetNumDetectedLEDs() const { return fNumDetectedLEDs; } 99 Int_t GetNumDetectedRings() const { return fNumDetectedRings; } 100 101 Double_t GetArcsecPerPixel() const { return fArcsecPerPixel; } 102 103 Ring Run(byte *img, bool printl, bool printr, const ZdAz &pos, 104 const MTime &t); 105 106 Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print=kFALSE); 56 Ring Run(uint8_t *img); 107 57 }; 108 58
Note:
See TracChangeset
for help on using the changeset viewer.