source: trunk/MagicSoft/Mars/mpointing/MPointingDevCalc.cc@ 8785

Last change on this file since 8785 was 8767, checked in by tbretz, 17 years ago
*** empty log message ***
File size: 24.1 KB
Line 
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, 07/2005 <mailto:tbretz@astro.uni-wuerzburg.de>
19!
20! Copyright: MAGIC Software Development, 2000-2007
21!
22!
23\* ======================================================================== */
24
25/////////////////////////////////////////////////////////////////////////////
26//
27// MPointingDevCalc
28//
29// Calculates the pointing deviation from the starguider information.
30//
31// There are some quality parameters to steer which are the valid
32// starguider data points:
33//
34// * MPointingDevCalc.NumMinStars: 8
35// Minimum number of identified stars required to accep the data
36//
37// * MPointingDevCalc.NsbLevel: 3.0
38// Minimum deviation (in rms) from the the mean allowed for the
39// measured NSB (noise in the ccd camera)
40//
41// * MPointingDevCalc.NsbMin: 30
42// - minimum NSB to be used in mean/rms calculation
43//
44// * MPointingDevCalc.NsbMax: 60
45// - maximum NSB to be used in mean/rms calculation
46//
47// * MPointingDevCalc.MaxAbsDev: 15
48// - Maximum absolute deviation which is consideres as valid (arcmin)
49//
50// Starguider data which doens't fullfill this requirements is ignored.
51// If the measures NSB==0 (file too old, starguider didn't write down
52// these values) the checks based on NSB and NumMinStar are skipped.
53//
54// The calculation of NSB mean and rms is reset for each file (ReInit)
55//
56// If your starguider data doesn't fullfill this requirement the latest
57// value which could be correctly calculated is used instead. If the time
58// for which no valid value can be calculated exceeds one minute
59// the return value is reset to 0/0. The maximum time allowed without
60// a valid value can be setup using:
61//
62// * MPointingDevCalc.MaxAge: 1
63// Maximum time before the starguider is reset to 0/0 in minutes
64//
65// Note, that the starguider itself is not well calibrated. Therefore
66// it is necessary to do a starguider calibration in our software.
67//
68// There are two options:
69//
70// * Simple starguider calibration using offsets in the camera plane
71//
72// The starguider is calibrated by taking its values (dZd/dAz)
73// adding them to the source position, calculating the source position
74// in the camera plane and adding the offsets. To switch off the
75// full starguider calibration do:
76//
77// * MPointingDevCalc.PointingModels:
78//
79// To set the offsets (in units of degree) use
80//
81// * MPointingDevCalc.Dx: -0.001
82// * MPointingDevCalc.Dy: -0.004
83//
84// * A starguider calibration using a pointing model calculated
85// from calibration data, so called TPoints
86//
87// Because the pointing model can change from time to time
88// you can give the run-number from which on a new pointing
89// model is valid. The run itself is included, e.g.:
90//
91// * MPointingDevCalc.PointingModels: 85240 89180
92// * MPointingDevCalc.FilePrefix: resources/starguider
93//
94// mean that for all runs<85240 the simple offset correction is used.
95// For runs >=85240 and <89180 the file resources/starguider0085240.txt
96// and for runs >=89180 the file resources/starguider0089180.txt is
97// used. To setup a default file for all runs before 85240 setup
98// a low number (eg. 0 or 1)
99//
100// In the case a pointing model is used additional offsets in
101// the x/y-camera plane (in units of deg) can be set using the DX
102// and DY parameters of the pointing model. The fDx and fDy data
103// members of this class are ignored. To overwrite the starguider
104// calibrated offset in either Az or Zd with a constant, you
105// can use the PX/PY directive in the pointing model. (To enable
106// the overwrite set the third column, the error, to a value
107// greater than zero)
108//
109//
110// At the PostProcessing step a table with statistics is print if the
111// debug level is greater or equal 3 (in most applications it is switched
112// on by -v3)
113//
114//
115// Pointing Models:
116// ----------------
117//
118// What we know so far about (maybe) important changes in cosy:
119//
120// 18.03.2006: The camera holding has been repaired and the camera got
121// shifted a little bit.
122//
123// 16.04.2006: Around this date a roque lamp focussing hass been done
124//
125// 25.04.2006: A missalignment intrduced with the roque adjust has been
126// corrected
127//
128// The starguider pointing model for the time before 18.3.2006 and after
129// April 2006 (in fact there are no TPoints until 07/2006 to check it)
130// and for the period 07/2006 to (at least) 06/2007 are very similar.
131//
132// The pointing model for the time between 18.3.2006 and 04/2006 is
133// clearly different, mainly giving different Azimuth values between
134// Zenith and roughly ~25deg, and a slight offset on both axes.
135//
136// 10.5.2006: pos1 -= pos0 commented (What was the mentioned fix?)
137// 29.6.2006: repaired
138//
139// 23.3.2006: new starguider algorithm
140//
141// 17.3.2005: Fixed units of "nompos" in MDriveCom
142//
143//
144// New pointing models have been installed (if the pointing model
145// is different, than the previous one it might mean, that also
146// the starguider calibration is different.)
147//
148// 29. Apr. 2004 ~25800
149// 5. Aug. 2004 ~32000
150// 19. Aug. 2004 ~33530
151// 7. Jun. 2005 ~57650
152// 8. Jun. 2005
153// 9. Jun. 2005 ~57860
154// 12. Sep. 2005 ~68338
155// 24. Nov. 2005 ~75562
156// 17. Oct. 2006 ~103130
157// 17. Jun. 2007 ~248193
158// 18. Oct. 2007
159//
160// From 2.2.2006 beginnig of the night (21:05h, run >=81855) to 24.2.2006
161// beginning of the the night (20:34h, run<83722) the LEDs did not work.
162// In the time after this incident the shift crew often forgot to switch on
163// the LEDs at the beginning of the night!
164//
165// [2006-03-07 00:10:58] In the daytime, we raised the position of the
166// 9 o'clock LED by one screw hole to make it visible when the TPoint
167// Lid is closed. (< run 84980)
168//
169// Mirror refocussing around 23.Apr.2006, from the Runbook.
170//
171// 25./26.4.2006: Run 89180
172//
173// (Note: The year here is not a typo!)
174// [2007-04-25 23:50:39]
175// Markus is performing AMC focussing.
176//
177// Mirror refocussing around 4.Aug.2007, from the Runbook:
178//
179// [2007-08-04 04:46:47]
180// We finished with the focussing with Polaris. The images need to be
181// analysed and new LUTs generated.
182//
183// [2007-08-04 23:47:30]
184// Actually we see that the mispointing is always large; probably since
185// the LUT tables have not yet been adjusted to the new focussing.
186//
187// [2007-08-03 23:07:58]
188// Data taking stopped. Mirror focussing.
189//
190// [2007-08-05 00:09:16]
191// We take some pictures on stars nearby Cyg X3 with the sbig camera;
192// actually the spot doesn't look very nice... The pictures have been
193// saved with name Deneb- and Sadr- Polaris seems a bit better. Should we
194// have new LUT tables after the focussing?
195//
196// [2007-08-10 20:18:48]
197// Tonight we take first images of Polaris with a new LUT file generated
198// based on the recent focussing. The image will be analysed tomorrow and
199// than new LUTs will be generated. For tonight the focussing is still not
200// changed.
201//
202// [2007-08-14 20:57:59]
203// The weather is fine. There is a group of hobby astronomers at the
204// helicopter parking. Before data taking, we tried to check the new LUTs.
205// However, because of technical problems with the new LUTs we had to
206// postpone the measurements. We lost some 10 min of data taking because
207// of this.
208//
209// [2007-08-14 22:29:37]
210// Before continuing the observation we perform a focussing test with the
211// new LUTs from recent Polaris focussing. Note: Data on Her X-1 was taken
212// with old focussing. We performed PSF measurements on Kornephorus (Zd
213// 31.77, Az 264,67) first with old LUTs and then with new LUTs. We took
214// T-points with both focussing. The first T-Point corresponds to the
215// previous focussing and the second with the improved. Please check both
216// T-points for eventual misspointing. We found big improvement of the PSF
217// with the new LUTs and will therefore continue from now on with the new
218// focussing. Having a first look at the SBIG pictures we see a slightly
219// misspointing of ~0.1 deg with the new LUTs.
220//
221// [2007-08-14 22:46:10]
222// Comparing the trigger rate with yesterday night we do not see an
223// improvement with the new focussing.
224//
225// [2007-10-27 email]
226// [...]
227// When removing the cover of the motor all 4 nuts which fix the gear of
228// the motor to the structure fell out. The motor was completely loose.
229// [...]
230// We checked also the second azimuth motor and .. the same situation.
231// [...]
232// Peter Sawallisch opened and fixed all 3 motors of MAGIC-I. We checked
233// all critical screws that came to our minds and fixed them as much as
234// possible with loctite and counter nuts. No damage whatsoever has been
235// found.
236//
237//
238// ToDo:
239// -----
240//
241// * Is 0/0 the best assumption if the starguider partly fails?
242//
243//
244// Input Container:
245// MRawRunHeader
246// MReportStarguider
247//
248// Output Container:
249// MPointingDev
250//
251/////////////////////////////////////////////////////////////////////////////
252#include "MPointingDevCalc.h"
253
254#include "MLog.h"
255#include "MLogManip.h"
256
257#include "MParList.h"
258
259#include "MAstro.h"
260#include "MPointing.h"
261#include "MPointingDev.h"
262#include "MRawRunHeader.h"
263#include "MReportStarguider.h"
264
265ClassImp(MPointingDevCalc);
266
267using namespace std;
268
269const TString MPointingDevCalc::fgFilePrefix="resources/starguider";
270
271// --------------------------------------------------------------------------
272//
273// Destructor. Call Clear() and delete fPointingModels if any.
274//
275MPointingDevCalc::~MPointingDevCalc()
276{
277 Clear();
278}
279
280// --------------------------------------------------------------------------
281//
282// Delete fPointing and set pointing to NULL
283//
284void MPointingDevCalc::Clear(Option_t *o)
285{
286 if (fPointing)
287 delete fPointing;
288
289 fPointing = NULL;
290}
291
292// --------------------------------------------------------------------------
293//
294// Sort the entries in fPoinitngModels
295//
296void MPointingDevCalc::SortPointingModels()
297{
298 const int n = fPointingModels.GetSize();
299
300 TArrayI idx(n);
301
302 TMath::Sort(n, fPointingModels.GetArray(), idx.GetArray(), kFALSE);
303
304 const TArrayI arr(fPointingModels);
305
306 for (int i=0; i<n; i++)
307 fPointingModels[i] = arr[idx[i]];
308}
309
310// --------------------------------------------------------------------------
311//
312// Set new pointing models
313//
314void MPointingDevCalc::SetPointingModels(const TString &models)
315{
316 fPointingModels.Set(0);
317
318 if (models.IsNull())
319 return;
320
321 TObjArray *arr = models.Tokenize(" ");
322
323 const int n = arr->GetEntries();
324 fPointingModels.Set(n);
325
326 for (int i=0; i<n; i++)
327 fPointingModels[i] = atoi((*arr)[i]->GetName());
328
329 delete arr;
330
331 SortPointingModels();
332}
333
334// --------------------------------------------------------------------------
335//
336// Return a string with the pointing models, seperated by a space.
337//
338TString MPointingDevCalc::GetPointingModels() const
339{
340 TString rc;
341 for (int i=0; i<fPointingModels.GetSize(); i++)
342 rc += Form ("%d ", fPointingModels[i]);
343
344 return rc;
345}
346
347// --------------------------------------------------------------------------
348//
349// Add a number to the pointing models
350//
351void MPointingDevCalc::AddPointingModel(UInt_t runnum)
352{
353 const int n = fPointingModels.GetSize();
354 for (int i=0; i<n; i++)
355 if ((UInt_t)fPointingModels[i]==runnum)
356 {
357 *fLog << warn << "WARNING - Pointing model " << runnum << " already in list... ignored." << endl;
358 return;
359 }
360
361 fPointingModels.Set(n+1);
362 fPointingModels[n] = runnum;
363
364 SortPointingModels();
365}
366
367// --------------------------------------------------------------------------
368//
369// Find the highest number in the array which is lower or equal num.
370//
371UInt_t MPointingDevCalc::FindPointingModel(UInt_t num)
372{
373 const int n = fPointingModels.GetSize();
374 if (n==0)
375 return (UInt_t)-1;
376
377 // Loop over all pointing models
378 for (int i=0; i<n; i++)
379 {
380 // The number stored in the array did not yet overtake the runnumber
381 if ((UInt_t)fPointingModels[i]<num)
382 continue;
383
384 // The first pointing model is later than this run: use a default
385 if (i==0)
386 return (UInt_t)-1;
387
388 // The last entry in the array is the right one.
389 return fPointingModels[i-1];
390 }
391
392 // Runnumber is after last entry of pointing models. Use the last one.
393 return fPointingModels[n-1];
394}
395
396// --------------------------------------------------------------------------
397//
398// Clear the pointing model. If run-number >= 87751 read the new
399// pointing model with fFilePrefix
400//
401Bool_t MPointingDevCalc::ReadPointingModel(const MRawRunHeader &run)
402{
403 const UInt_t num = FindPointingModel(run.GetRunNumber());
404
405 // No poinitng models are defined. Use simple dx/dy-calibration
406 if (num==(UInt_t)-1)
407 {
408 Clear();
409 return kTRUE;
410 }
411
412 // compile the name for the starguider files
413 // The file with the number 00000000 is the default file
414 TString fname = Form("%s%08d.txt", fFilePrefix.Data(), num);
415
416 if (!fPointing)
417 fPointing = new MPointing;
418
419 if (fname==fPointing->GetName())
420 {
421 *fLog << inf << fname << " already loaded." << endl;
422 return kTRUE;
423 }
424
425 return fPointing->Load(fname);
426}
427
428// --------------------------------------------------------------------------
429//
430// Check the file/run type from the run-header and if it is a data file
431// load starguider calibration.
432//
433Bool_t MPointingDevCalc::ReInit(MParList *plist)
434{
435 MRawRunHeader *run = (MRawRunHeader*)plist->FindObject("MRawRunHeader");
436 if (!run)
437 {
438 *fLog << err << "MRawRunHeader not found... aborting." << endl;
439 return kFALSE;
440 }
441
442 fNsbSum = 0;
443 fNsbSq = 0;
444 fNsbCount = 0;
445
446 fRunType = run->GetRunType();
447
448 switch (fRunType)
449 {
450 case MRawRunHeader::kRTData:
451 if (!fReport)
452 *fLog << warn << "MReportStarguider not found... skipped." << endl;
453 return ReadPointingModel(*run);
454
455 case MRawRunHeader::kRTMonteCarlo:
456 return kTRUE;
457
458 case MRawRunHeader::kRTPedestal:
459 *fLog << err << "Cannot work in a pedestal Run!... aborting." << endl;
460 return kFALSE;
461
462 case MRawRunHeader::kRTCalibration:
463 *fLog << err << "Cannot work in a calibration Run!... aborting." << endl;
464 return kFALSE;
465
466 default:
467 *fLog << err << "Run Type " << fRunType << " unknown!... aborting." << endl;
468 return kFALSE;
469 }
470
471 return kTRUE;
472}
473
474// --------------------------------------------------------------------------
475//
476// Search for 'MPointingPos'. Create if not found.
477//
478Int_t MPointingDevCalc::PreProcess(MParList *plist)
479{
480 fDeviation = (MPointingDev*)plist->FindCreateObj("MPointingDev");
481 fReport = (MReportStarguider*)plist->FindObject("MReportStarguider");
482
483 // We use kRTNone here as a placeholder for data runs.
484 fRunType = MRawRunHeader::kRTNone;
485 fLastMjd = -1;
486
487 fSkip.Reset();
488
489 return fDeviation ? kTRUE : kFALSE;
490}
491
492// --------------------------------------------------------------------------
493//
494// Increase fSkip[i] by one. If the data in fDeviation is outdated (older
495// than fMaxAge) and the current report should be skipped reset DevZdAz and
496// DevXY and fSkip[6] is increased by one.
497//
498void MPointingDevCalc::Skip(Int_t i)
499{
500 fSkip[i]++;
501
502 const Double_t diff = (fReport->GetMjd()-fLastMjd)*1440; // [min] 1440=24*60
503 if (diff<fMaxAge && fLastMjd>0)
504 return;
505
506 fDeviation->SetDevZdAz(0, 0);
507 fDeviation->SetDevXY(0, 0);
508 fSkip[6]++;
509}
510
511// --------------------------------------------------------------------------
512//
513// Do a full starguider calibration using a pointing model for the starguider.
514//
515void MPointingDevCalc::DoCalibration(Double_t devzd, Double_t devaz) const
516{
517 if (!fPointing)
518 {
519 // Do a simple starguider calibration using a simple offset in x and y
520 fDeviation->SetDevZdAz(devzd, devaz);
521
522 // Linear starguider calibration taken from April/May data
523 // For calibration add MDriveReport::GetErrorZd/Az !
524 fDeviation->SetDevXY(fDx, fDy); // 1arcmin ~ 5mm
525
526 return;
527 }
528
529 // Get the nominal position the star is at the sky
530 // Unit: deg
531 ZdAz nom(fReport->GetNominalZd(), fReport->GetNominalAz());
532 nom *= TMath::DegToRad();
533
534 // Get the mispointing measured by the telescope. It is
535 // calculate as follows:
536 //
537 // The mispointing measured by the starguider:
538 // ZdAz mis(devzd, devaz);
539 // mis *= TMath::DegToRad();
540
541 // The pointing model is the conversion from the real pointing
542 // position of the telescope into the pointing position measured
543 // by the starguider.
544 //
545 // To keep as close to the fitted model we use the forward correction.
546
547 // Position at which the starguider camera is pointing in real:
548 // pointing position = nominal position - dev
549 //
550 // The position measured as the starguider's pointing position
551 ZdAz pos(nom); // cpos = sao - dev
552 pos -= ZdAz(devzd, devaz)*TMath::DegToRad();
553
554 // Now we convert the starguider's pointing position into the
555 // telescope pointing position (the pointing model converts
556 // the telescope pointing position into the starguider pointing
557 // position)
558 ZdAz point = fPointing->CorrectBack(pos); //FWD!!!
559
560 // MSrcPosCalc uses the following condition to calculate the
561 // source position in the camera:
562 // real pointing pos = nominal pointing pos - dev
563 // --> dev = nominal - real
564 // Therefor we calculate dev as follows:
565 ZdAz dev(nom);
566 dev -= point;
567 dev *= TMath::RadToDeg();
568
569 /*
570 // We chose the other way. It is less accurate because is is the
571 // other was than the poinitng model was fittet, but it is more
572 // accurate because the nominal (i.e. real) pointing position
573 // is less accurately known than the position returned by the
574 // starguider.
575 //
576 // Calculate the deviation which would be measured by the starguider
577 // if applied to a perfectly pointing telescope.
578 ZdAz dev = fPointing->Correct(nom);
579 dev -= nom;
580
581 // Now add these offsets and the starguider measured offsets to
582 // the real pointing deviation of the telescope (note, that
583 // signs here are just conventions)
584 dev += ZdAz(devzd, devaz)*TMath::DegToRad(); // --> nom-mis
585 dev *= TMath::RadToDeg();
586 */
587
588 // Check if the starguider pointing model requests overwriting
589 // of the values with constants (e.g. 0)
590 devaz = fPointing->IsPxValid() ? fPointing->GetPx() : dev.Az();
591 devzd = fPointing->IsPyValid() ? fPointing->GetPy() : dev.Zd();
592
593 fDeviation->SetDevZdAz(devzd, devaz);
594 fDeviation->SetDevXY(fPointing->GetDxy());
595}
596
597Int_t MPointingDevCalc::ProcessStarguiderReport()
598{
599 Double_t devzd = fReport->GetDevZd(); // [arcmin]
600 Double_t devaz = fReport->GetDevAz(); // [arcmin]
601 if (devzd==0 && devaz==0)
602 {
603 Skip(1);
604 return kTRUE;
605 }
606
607 if (!fReport->IsMonitoring())
608 {
609 Skip(2);
610 return kTRUE;
611 }
612
613 devzd /= 60; // Convert from arcmin to deg
614 devaz /= 60; // Convert from arcmin to deg
615
616 const Double_t nsb = fReport->GetSkyBrightness();
617 if (nsb>0)
618 {
619 if (nsb>fNsbMin && nsb<fNsbMax)
620 {
621 fNsbSum += nsb;
622 fNsbSq += nsb*nsb;
623 fNsbCount++;
624 }
625
626 if (fNsbCount>0)
627 {
628 const Double_t sum = fNsbSum/fNsbCount;
629 const Double_t sq = fNsbSq /fNsbCount;
630
631 const Double_t rms = fNsbLevel*TMath::Sqrt(sq - sum*sum);
632
633 if (nsb<sum-rms || nsb>sum+rms)
634 {
635 Skip(3);
636 return kTRUE;
637 }
638 }
639
640 if (fReport->GetNumIdentifiedStars()<fNumMinStars)
641 {
642 Skip(4);
643 return kTRUE;
644 }
645 }
646
647 // >= 87751 (31.3.06 12:00)
648
649 // Calculate absolute deviation
650 const Double_t dev = MAstro::GetDevAbs(fReport->GetNominalZd(), devzd, devaz);
651
652 // Sanity check... larger deviation are strange and ignored
653 if (dev*60>fMaxAbsDev)
654 {
655 Skip(5);
656 return kTRUE;
657 }
658
659 DoCalibration(devzd, devaz);
660
661 fSkip[0]++;
662 fLastMjd = fReport->GetMjd();
663
664 return kTRUE;
665}
666
667// --------------------------------------------------------------------------
668//
669// See class description.
670//
671Int_t MPointingDevCalc::Process()
672{
673 switch (fRunType)
674 {
675 case MRawRunHeader::kRTNone:
676 case MRawRunHeader::kRTData:
677 return fReport ? ProcessStarguiderReport() : kTRUE;
678
679 case MRawRunHeader::kRTMonteCarlo:
680 fSkip[0]++;
681 fDeviation->SetDevZdAz(0, 0);
682 fDeviation->SetDevXY(0, 0);
683 return kTRUE;
684 }
685 return kTRUE;
686}
687
688// --------------------------------------------------------------------------
689//
690// Print execution statistics
691//
692Int_t MPointingDevCalc::PostProcess()
693{
694 if (GetNumExecutions()==0)
695 return kTRUE;
696
697 *fLog << inf << endl;
698 *fLog << GetDescriptor() << " execution statistics:" << endl;
699 PrintSkipped(fSkip[1], "Starguider deviation not set, is exactly 0/0");
700 PrintSkipped(fSkip[2], "Starguider was not monitoring (eg. LEDs off)");
701 PrintSkipped(fSkip[3], Form("NSB out of %.1f sigma range", fNsbLevel));
702 PrintSkipped(fSkip[4], Form("Number of identified stars < %d", fNumMinStars));
703 PrintSkipped(fSkip[5], Form("Absolute deviation > %.1farcmin", fMaxAbsDev));
704 PrintSkipped(fSkip[6], Form("Events set to 0 because older than %.1fmin", fMaxAge));
705 *fLog << " " << (int)fSkip[0] << " (" << Form("%5.1f", 100.*fSkip[0]/GetNumExecutions()) << "%) Evts survived calculation!" << endl;
706 *fLog << endl;
707
708 return kTRUE;
709}
710
711// --------------------------------------------------------------------------
712//
713// MPointingDevCalc.NumMinStars: 8
714// MPointingDevCalc.NsbLevel: 3.0
715// MPointingDevCalc.NsbMin: 30
716// MPointingDevCalc.NsbMax: 60
717// MPointingDevCalc.MaxAbsDev: 15
718// MPointingDevCalc.MaxAge: 1.0
719// MPointingDevCalc.Dx: -0.001
720// MPointingDevCalc.Dy: -0.004
721//
722// For a detailed description see the class reference.
723//
724Int_t MPointingDevCalc::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
725{
726 Bool_t rc = kFALSE;
727 if (IsEnvDefined(env, prefix, "NumMinStars", print))
728 {
729 SetNumMinStars(GetEnvValue(env, prefix, "NumMinStars", (Int_t)fNumMinStars));
730 rc = kTRUE;
731 }
732 if (IsEnvDefined(env, prefix, "NsbLevel", print))
733 {
734 SetNsbLevel(GetEnvValue(env, prefix, "NsbLevel", fNsbLevel));
735 rc = kTRUE;
736 }
737 if (IsEnvDefined(env, prefix, "NsbMin", print))
738 {
739 SetNsbMin(GetEnvValue(env, prefix, "NsbMin", fNsbMin));
740 rc = kTRUE;
741 }
742 if (IsEnvDefined(env, prefix, "NsbMax", print))
743 {
744 SetNsbMax(GetEnvValue(env, prefix, "NsbMax", fNsbMax));
745 rc = kTRUE;
746 }
747 if (IsEnvDefined(env, prefix, "MaxAbsDev", print))
748 {
749 SetMaxAbsDev(GetEnvValue(env, prefix, "MaxAbsDev", fMaxAbsDev));
750 rc = kTRUE;
751 }
752 if (IsEnvDefined(env, prefix, "Dx", print))
753 {
754 fDx = GetEnvValue(env, prefix, "Dx", fDx);
755 rc = kTRUE;
756 }
757 if (IsEnvDefined(env, prefix, "Dy", print))
758 {
759 fDy = GetEnvValue(env, prefix, "Dy", fDy);
760 rc = kTRUE;
761 }
762 if (IsEnvDefined(env, prefix, "MaxAge", print))
763 {
764 fMaxAge = GetEnvValue(env, prefix, "MaxAge", fMaxAge);
765 rc = kTRUE;
766 }
767 if (IsEnvDefined(env, prefix, "FilePrefix", print))
768 {
769 fFilePrefix = GetEnvValue(env, prefix, "FilePrefix", fFilePrefix);
770 rc = kTRUE;
771 }
772 if (IsEnvDefined(env, prefix, "PointingModels", print))
773 {
774 SetPointingModels(GetEnvValue(env, prefix, "PointingModels", GetPointingModels()));
775 rc = kTRUE;
776 }
777
778 return rc;
779}
Note: See TracBrowser for help on using the repository browser.