source: trunk/MagicSoft/Mars/mhcalib/MHCalibrationPulseTimeCam.cc@ 6688

Last change on this file since 6688 was 6688, checked in by gaug, 20 years ago
*** empty log message ***
File size: 20.2 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): Markus Gaug 02/2004 <mailto:markus@ifae.es>
19!
20! Copyright: MAGIC Software Development, 2000-2004
21!
22!
23\* ======================================================================== */
24/////////////////////////////////////////////////////////////////////////////
25//
26// MHCalibrationPulseTimeCam
27//
28// Fills the extracted signals of MExtractedSignalCam into the MHCalibrationPix-classes
29// MHCalibrationPulseTimeHiGainPix and MHCalibrationPulseTimeLoGainPix for every:
30//
31// - Pixel, stored in the TOrdCollection's MHCalibrationCam::fHiGainArray and
32// MHCalibrationCam::fLoGainArray
33//
34// - Average pixel per AREA index (e.g. inner and outer for the MAGIC camera),
35// stored in the TOrdCollection's MHCalibrationCam::fAverageHiGainAreas and
36// MHCalibrationCam::fAverageLoGainAreas
37//
38// - Average pixel per camera SECTOR (e.g. sectors 1-6 for the MAGIC camera),
39// stored in the TOrdCollection's MHCalibrationCam::fAverageHiGainSectors and
40// MHCalibrationCam::fAverageLoGainSectors
41//
42// Every signal is taken from MExtractedSignalCam and filled into a histogram and
43// an array, in order to perform a Fourier analysis (see MHGausEvents).
44// The signals are moreover averaged on an event-by-event basis and written into
45// the corresponding average pixels.
46//
47// Additionally, the (FADC slice) position of the maximum is stored in an Absolute
48// Arrival Time histogram. This histogram serves for a rough cross-check if the
49// signal does not lie at or outside the edges of the extraction window.
50//
51// The PulseTime histograms are fitted to a Gaussian, mean and sigma with its errors
52// and the fit probability are extracted. If none of these values are NaN's and
53// if the probability is bigger than MHGausEvents::fProbLimit (default: 0.5%),
54// the fit is declared valid.
55// Otherwise, the fit is repeated within ranges of the previous mean
56// +- MHCalibrationPix::fPickupLimit (default: 5) sigma (see MHCalibrationPix::RepeatFit())
57// In case this does not make the fit valid, the histogram means and RMS's are
58// taken directly (see MHCalibrationPix::BypassFit()) and the following flags are set:
59// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kHiGainNotFitted ) or
60// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kLoGainNotFitted ) and
61// - MBadPixelsPix::SetUnsuitable( MBadPixelsPix::kUnreliableRun )
62//
63// Outliers of more than MHCalibrationPix::fPickupLimit (default: 5) sigmas
64// from the mean are counted as Pickup events (stored in MHCalibrationPix::fPickup)
65//
66// Unless more than fNumHiGainSaturationLimit (default: 1%) of the overall FADC
67// slices show saturation, the following flag is set:
68// - MCalibrationPulseTimePix::SetHiGainSaturation();
69// In that case, the calibration constants are derived from the low-gain results.
70//
71// If more than fNumLoGainSaturationLimit (default: 1%) of the overall
72// low-gain FADC slices saturate, the following flags are set:
73// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kLoGainSaturation ) and
74// - MBadPixelsPix::SetUnsuitable( MBadPixelsPix::kUnsuitableRun )
75//
76// The class also fills arrays with the signal vs. event number, creates a fourier
77// spectrum and investigates if the projected fourier components follow an exponential
78// distribution. In case that the probability of the exponential fit is less than
79// MHGausEvents::fProbLimit (default: 0.5%), the following flags are set:
80// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kHiGainOscillating ) or
81// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kLoGainOscillating ) and
82// - MBadPixelsPix::SetUnsuitable( MBadPixelsPix::kUnreliableRun )
83//
84// This same procedure is performed for the average pixels.
85//
86// The following results are written into MCalibrationPulseTimeCam:
87//
88// - MCalibrationPix::SetHiGainSaturation()
89// - MCalibrationPix::SetHiGainMean()
90// - MCalibrationPix::SetHiGainMeanErr()
91// - MCalibrationPix::SetHiGainSigma()
92// - MCalibrationPix::SetHiGainSigmaErr()
93// - MCalibrationPix::SetHiGainProb()
94// - MCalibrationPix::SetHiGainNumPickup()
95//
96// For all averaged areas, the fitted sigma is multiplied with the square root of
97// the number involved pixels in order to be able to compare it to the average of
98// sigmas in the camera.
99//
100/////////////////////////////////////////////////////////////////////////////
101#include "MHCalibrationPulseTimeCam.h"
102#include "MHCalibrationCam.h"
103
104#include "MLog.h"
105#include "MLogManip.h"
106
107#include "MParList.h"
108
109#include "MHCalibrationPix.h"
110
111#include "MCalibrationIntensityCam.h"
112#include "MCalibrationChargeCam.h"
113#include "MCalibrationChargePix.h"
114
115#include "MGeomCam.h"
116#include "MGeomPix.h"
117
118#include "MBadPixelsIntensityCam.h"
119#include "MBadPixelsCam.h"
120#include "MBadPixelsPix.h"
121
122#include "MRawEvtData.h"
123#include "MRawRunHeader.h"
124#include "MRawEvtPixelIter.h"
125
126#include "MExtractedSignalCam.h"
127#include "MExtractedSignalPix.h"
128
129#include "MArrayI.h"
130#include "MArrayD.h"
131
132#include <TOrdCollection.h>
133#include <TPad.h>
134#include <TVirtualPad.h>
135#include <TCanvas.h>
136#include <TStyle.h>
137#include <TF1.h>
138#include <TLatex.h>
139#include <TLegend.h>
140#include <TGraph.h>
141#include <TEnv.h>
142
143ClassImp(MHCalibrationPulseTimeCam);
144
145using namespace std;
146
147const Int_t MHCalibrationPulseTimeCam::fgHiGainNbins = 40;
148const Axis_t MHCalibrationPulseTimeCam::fgHiGainFirst = -0.5;
149const Axis_t MHCalibrationPulseTimeCam::fgHiGainLast = 19.5;
150const Float_t MHCalibrationPulseTimeCam::fgProbLimit = 0.0001;
151const Byte_t MHCalibrationPulseTimeCam::fgLowerSignalLimit = 100;
152const TString MHCalibrationPulseTimeCam::gsHistName = "PulseTime";
153const TString MHCalibrationPulseTimeCam::gsHistTitle = "Extracted Times";
154const TString MHCalibrationPulseTimeCam::gsHistXTitle = "Time [FADC slices]";
155const TString MHCalibrationPulseTimeCam::gsHistYTitle = "Nr. events";
156const TString MHCalibrationPulseTimeCam::fgReferenceFile = "mjobs/calibrationref.rc";
157// --------------------------------------------------------------------------
158//
159// Default Constructor.
160//
161// Sets:
162// - all pointers to NULL
163//
164// - fNbins to fgHiGainNbins
165// - fFirst to fgHiGainFirst
166// - fLast to fgHiGainLast
167//
168// - fHistName to gsHistName
169// - fHistTitle to gsHistTitle
170// - fHistXTitle to gsHistXTitle
171// - fHistYTitle to gsHistYTitle
172//
173MHCalibrationPulseTimeCam::MHCalibrationPulseTimeCam(const char *name, const char *title)
174 : fRawEvt(NULL)
175{
176
177 fName = name ? name : "MHCalibrationPulseTimeCam";
178 fTitle = title ? title : "Class to fill the extracted pulse times for cosmics ";
179
180 SetNbins(fgHiGainNbins);
181 SetFirst(fgHiGainFirst);
182 SetLast (fgHiGainLast );
183
184 SetProbLimit(fgProbLimit);
185
186 SetHistName (gsHistName .Data());
187 SetHistTitle (gsHistTitle .Data());
188 SetHistXTitle(gsHistXTitle.Data());
189 SetHistYTitle(gsHistYTitle.Data());
190
191 SetReferenceFile();
192 SetLoGain(kFALSE);
193 SetOscillations(kFALSE);
194
195 SetLowerSignalLimit();
196
197 fInnerRefTime = 5.;
198 fOuterRefTime = 5.;
199}
200// --------------------------------------------------------------------------
201//
202// Creates new MHCalibrationPulseTimeCam only with the averaged areas:
203// the rest has to be retrieved directly, e.g. via:
204// MHCalibrationPulseTimeCam *cam = MParList::FindObject("MHCalibrationPulseTimeCam");
205// - cam->GetAverageSector(5).DrawClone();
206// - (*cam)[100].DrawClone()
207//
208TObject *MHCalibrationPulseTimeCam::Clone(const char *) const
209{
210
211 MHCalibrationPulseTimeCam *cam = new MHCalibrationPulseTimeCam();
212
213 //
214 // Copy the data members
215 //
216 cam->fColor = fColor;
217 cam->fRunNumbers = fRunNumbers;
218 cam->fPulserFrequency = fPulserFrequency;
219 cam->fFlags = fFlags;
220 cam->fNbins = fNbins;
221 cam->fFirst = fFirst;
222 cam->fLast = fLast;
223 cam->fReferenceFile = fReferenceFile;
224
225 if (!IsAverageing())
226 return cam;
227
228 const Int_t navhi = fAverageHiGainAreas->GetSize();
229
230 for (int i=0; i<navhi; i++)
231 cam->fAverageHiGainAreas->AddAt(GetAverageHiGainArea(i).Clone(),i);
232
233 return cam;
234}
235
236// --------------------------------------------------------------------------
237//
238// Gets the pointers to:
239// - MRawEvtData
240//
241Bool_t MHCalibrationPulseTimeCam::SetupHists(const MParList *pList)
242{
243
244 fRawEvt = (MRawEvtData*)pList->FindObject("MRawEvtData");
245 if (!fRawEvt)
246 {
247 *fLog << err << dbginf << "MRawEvtData not found... aborting." << endl;
248 return kFALSE;
249 }
250
251 return kTRUE;
252}
253
254// --------------------------------------------------------------------------
255//
256// Gets or creates the pointers to:
257// - MExtractedSignalCam
258// - MCalibrationPulseTimeCam or MCalibrationIntensityPulseTimeCam
259// - MBadPixelsCam
260//
261// Initializes the number of used FADC slices from MExtractedSignalCam
262// into MCalibrationPulseTimeCam and test for changes in that variable
263//
264// Calls:
265// - InitHiGainArrays()
266//
267// Sets:
268// - fSumhiarea to nareas
269// - fSumloarea to nareas
270// - fSumhisector to nsectors
271// - fSumlosector to nsectors
272//
273Bool_t MHCalibrationPulseTimeCam::ReInitHists(MParList *pList)
274{
275
276 MExtractedSignalCam *signal =
277 (MExtractedSignalCam*)pList->FindObject(AddSerialNumber("MExtractedSignalCam"));
278 if (!signal)
279 {
280 *fLog << err << "MExtractedSignalCam not found... abort." << endl;
281 return kFALSE;
282 }
283
284 if (!InitCams(pList,"PulseTime"))
285 return kFALSE;
286
287 const Int_t npixels = fGeom->GetNumPixels();
288 const Int_t nsectors = fGeom->GetNumSectors();
289 const Int_t nareas = fGeom->GetNumAreas();
290
291 InitHiGainArrays(npixels,nareas,nsectors);
292
293 fSumhiarea .Set(nareas);
294 fSumhisector.Set(nsectors);
295
296 return kTRUE;
297}
298
299
300// --------------------------------------------------------------------------
301//
302// Retrieves from MExtractedSignalCam:
303// - first used LoGain FADC slice
304//
305// Retrieves from MGeomCam:
306// - number of pixels
307// - number of pixel areas
308// - number of sectors
309//
310// For all TOrdCollection's (including the averaged ones), the following steps are performed:
311//
312// 1) Fill PulseTimes histograms (MHGausEvents::FillHistAndArray()) with:
313// - MExtractedSignalPix::GetExtractedSignalHiGain();
314// - MExtractedSignalPix::GetExtractedSignalLoGain();
315//
316Bool_t MHCalibrationPulseTimeCam::FillHists(const MParContainer *par, const Stat_t w)
317{
318
319 MExtractedSignalCam *signal = (MExtractedSignalCam*)par;
320 if (!signal)
321 {
322 *fLog << err << "No argument in MExtractedSignalCam::Fill... abort." << endl;
323 return kFALSE;
324 }
325
326 const UInt_t nareas = fGeom->GetNumAreas();
327 const UInt_t nsectors = fGeom->GetNumSectors();
328
329 fSumhiarea .Reset();
330 fSumhisector.Reset();
331
332 MRawEvtPixelIter pixel(fRawEvt);
333 while (pixel.Next())
334 {
335
336 const Int_t i = pixel.GetPixelId();
337
338 MHCalibrationPix &histhi = (*this)[i];
339
340 if (histhi.IsExcluded())
341 continue;
342
343 const MExtractedSignalPix &pix = (*signal)[i];
344
345 const Int_t sathi = (Int_t)pix.GetNumHiGainSaturated();
346
347 if (sathi)
348 continue;
349
350 Byte_t *start = pixel.GetHiGainSamples();
351 Byte_t *end = start + pixel.GetNumHiGainSamples();
352 Byte_t *p = start;
353 Byte_t max = 0;
354 Int_t maxpos = 0;
355
356 while (p < end)
357 {
358 if (*p > max)
359 {
360 max = *p;
361 maxpos = p-start-1;
362 }
363 p++;
364 }
365
366 start = pixel.GetLoGainSamples();
367 end = start + pixel.GetNumLoGainSamples();
368 p = start;
369
370 while (p < end)
371 {
372 if (*p > max)
373 {
374 max = *p;
375 maxpos = p-start+pixel.GetNumHiGainSamples() - 1;
376 }
377 p++;
378 }
379
380 if (max < fLowerSignalLimit)
381 continue;
382
383 const Float_t time = (Float_t)maxpos;
384 histhi.FillHist(time);
385
386 // *fLog << inf << time << endl;
387
388 const Int_t aidx = (*fGeom)[i].GetAidx();
389 const Int_t sector = (*fGeom)[i].GetSector();
390
391 fSumhiarea[aidx] += time;
392 fSumhisector[sector] += time;
393
394 }
395
396 for (UInt_t j=0; j<nareas; j++)
397 {
398
399 const Int_t npix = fAverageAreaNum[j];
400
401 if (npix == 0)
402 continue;
403
404 MHCalibrationPix &hipix = GetAverageHiGainArea(j);
405 hipix.FillHist(fSumhiarea[j]/npix);
406
407 }
408
409 for (UInt_t j=0; j<nsectors; j++)
410 {
411
412 const Int_t npix = fAverageSectorNum[j];
413
414 if (npix == 0)
415 continue;
416
417 MHCalibrationPix &hipix = GetAverageHiGainSector(j);
418 hipix.FillHist(fSumhisector [j]/npix);
419 }
420
421 return kTRUE;
422}
423
424// --------------------------------------------------------------------------
425//
426// For all TOrdCollection's (including the averaged ones), the following steps are performed:
427//
428// 1) Returns if the pixel is excluded.
429// 2) Tests saturation. In case yes, set the flag: MCalibrationPix::SetHiGainSaturation()
430// or the flag: MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kLoGainSaturated )
431// 3) Store the absolute arrival times in the MCalibrationPulseTimePix's. If flag
432// MCalibrationPix::IsHiGainSaturation() is set, the Low-Gain arrival times are stored,
433// otherwise the Hi-Gain ones.
434// 4) Calls to MHCalibrationCam::FitHiGainArrays() and MCalibrationCam::FitLoGainArrays()
435// with the flags:
436// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kHiGainNotFitted )
437// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kLoGainNotFitted )
438// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kHiGainOscillating )
439// - MBadPixelsPix::SetUncalibrated( MBadPixelsPix::kLoGainOscillating )
440//
441Bool_t MHCalibrationPulseTimeCam::FinalizeHists()
442{
443
444 *fLog << endl;
445
446 MCalibrationCam *calcam = fIntensCam ? fIntensCam->GetCam() : fCam;
447 //
448 // Perform the fitting for the High Gain (done in MHCalibrationCam)
449 //
450 for (Int_t i=0; i<fHiGainArray->GetSize(); i++)
451 {
452
453 MHCalibrationPix &hist = (*this)[i];
454
455 if (hist.IsExcluded())
456 continue;
457
458 MCalibrationPix &pix = (*calcam)[i];
459 CalcHists(hist,pix);
460 }
461
462 if (!IsAverageing())
463 return kTRUE;
464
465 for (Int_t j=0; j<fAverageHiGainAreas->GetSize(); j++)
466 {
467
468 MHCalibrationPix &hist = GetAverageHiGainArea(j);
469 MCalibrationPix &pix = calcam->GetAverageArea(j);
470 CalcHists(hist,pix);
471 }
472
473 for (Int_t j=0; j<fAverageHiGainSectors->GetSize(); j++)
474 {
475 MHCalibrationPix &hist = GetAverageHiGainSector(j);
476 MCalibrationPix &pix = calcam->GetAverageSector(j);
477 CalcHists(hist,pix);
478 }
479
480 return kTRUE;
481}
482
483void MHCalibrationPulseTimeCam::CalcHists(MHCalibrationPix &hist, MCalibrationPix &pix)
484{
485
486
487 if (hist.IsEmpty() || hist.IsOnlyOverflow() || hist.IsOnlyUnderflow())
488 {
489 *fLog << warn << GetDescriptor()
490 << ": Only overflow or underflow in hi-gain pixel: " << pix.GetPixId() << endl;
491 return;
492 }
493
494 hist.BypassFit();
495
496 pix.SetHiGainMean ( hist.GetMean() );
497 pix.SetHiGainMeanVar ( hist.GetMeanErr() * hist.GetMeanErr() );
498 pix.SetHiGainRms ( hist.GetHistRms() );
499 pix.SetHiGainSigma ( hist.GetSigma() );
500 pix.SetHiGainSigmaVar ( hist.GetSigmaErr()* hist.GetSigmaErr() );
501
502 if (IsDebug())
503 {
504 *fLog << dbginf << GetDescriptor() << ": ID " << GetName()
505 << " Mean: " << hist.GetMean ()
506 << " MeanErr: " << hist.GetMeanErr ()
507 << " MeanSigma: " << hist.GetSigma ()
508 << " MeanSigmaErr: " << hist.GetSigmaErr()
509 << " Prob: " << hist.GetProb ()
510 << endl;
511 }
512 return;
513}
514
515
516// --------------------------------------------------------------------------
517//
518// Calls MHCalibrationPix::DrawClone() for pixel idx
519//
520void MHCalibrationPulseTimeCam::DrawPixelContent(Int_t idx) const
521{
522 (*this)[idx].DrawClone();
523}
524
525
526// -----------------------------------------------------------------------------
527//
528// Default draw:
529//
530// Displays the averaged areas, both High Gain and Low Gain
531//
532// Calls the Draw of the fAverageHiGainAreas and fAverageLoGainAreas objects with options
533//
534void MHCalibrationPulseTimeCam::Draw(const Option_t *opt)
535{
536
537 const Int_t nareas = fAverageHiGainAreas->GetSize();
538 if (nareas == 0)
539 return;
540
541 TString option(opt);
542 option.ToLower();
543
544 //
545 // From here on , the datacheck - Draw
546 //
547 TVirtualPad *pad = gPad ? gPad : MH::MakeDefCanvas(this);
548 pad->SetBorderMode(0);
549 pad->Divide(1,nareas);
550
551 //
552 // Loop over inner and outer pixels
553 //
554 for (Int_t i=0; i<nareas;i++)
555 {
556
557 pad->cd(i+1);
558
559 MHCalibrationPix &hipix = GetAverageHiGainArea(i);
560 DrawDataCheckPixel(hipix,i ? fOuterRefTime : fInnerRefTime);
561 }
562}
563
564// -----------------------------------------------------------------------------
565//
566// Draw the average pixel for the datacheck:
567//
568// Displays the averaged areas, both High Gain and Low Gain
569//
570// Calls the Draw of the fAverageHiGainAreas and fAverageLoGainAreas objects with options
571//
572void MHCalibrationPulseTimeCam::DrawDataCheckPixel(MHCalibrationPix &pix, const Float_t refline)
573{
574
575 gPad->SetTicks();
576 if (!pix.IsEmpty() && !pix.IsOnlyOverflow() && !pix.IsOnlyUnderflow())
577 gPad->SetLogy();
578
579 TH1F *hist = pix.GetHGausHist();
580
581 TH1F *null = new TH1F("Null",hist->GetTitle(),100,
582 pix.GetFirst() > 0. ? pix.GetFirst() : 0.,
583 pix.GetLast() > pix.GetFirst()
584 ? ( pix.GetLast() > 450.
585 ? ( fColor == MCalibrationCam::kBLUE ? 800. : 450. )
586 : pix.GetLast() )
587 : pix.GetFirst()*2.);
588
589 null->SetMaximum(1.1*hist->GetMaximum());
590 null->SetDirectory(NULL);
591 null->SetBit(kCanDelete);
592 null->SetStats(kFALSE);
593 //
594 // set the labels bigger
595 //
596 TAxis *xaxe = null->GetXaxis();
597 TAxis *yaxe = null->GetYaxis();
598 xaxe->CenterTitle();
599 yaxe->CenterTitle();
600 xaxe->SetTitleSize(0.07);
601 yaxe->SetTitleSize(0.07);
602 xaxe->SetTitleOffset(0.7);
603 yaxe->SetTitleOffset(0.55);
604 xaxe->SetLabelSize(0.06);
605 yaxe->SetLabelSize(0.06);
606 xaxe->SetTitle(hist->GetXaxis()->GetTitle());
607 yaxe->SetTitle(hist->GetYaxis()->GetTitle());
608
609 null->Draw();
610 hist->Draw("same");
611
612 gStyle->SetOptFit();
613
614 TF1 *fit = pix.GetFGausFit();
615
616 if (fit)
617 {
618 switch ( fColor )
619 {
620 case MCalibrationCam::kGREEN:
621 fit->SetLineColor(kGreen);
622 break;
623 case MCalibrationCam::kBLUE:
624 fit->SetLineColor(kBlue);
625 break;
626 case MCalibrationCam::kUV:
627 fit->SetLineColor(106);
628 break;
629 case MCalibrationCam::kCT1:
630 fit->SetLineColor(006);
631 break;
632 default:
633 fit->SetLineColor(kRed);
634 }
635 fit->Draw("same");
636 }
637
638 DisplayRefLines(null,refline);
639
640 return;
641
642}
643
644void MHCalibrationPulseTimeCam::DisplayRefLines(const TH1F *hist, const Float_t refline) const
645{
646
647 TGraph *uv10 = new TGraph(2);
648 uv10->SetPoint(0,refline,0.);
649 uv10->SetPoint(1,refline,hist->GetMaximum());
650 uv10->SetBit(kCanDelete);
651 uv10->SetLineColor(106);
652 uv10->SetLineStyle(2);
653 uv10->SetLineWidth(3);
654 uv10->Draw("L");
655
656 TLegend *leg = new TLegend(0.8,0.55,0.99,0.99);
657 leg->SetBit(kCanDelete);
658 leg->AddEntry(uv10,"10 Leds UV","l");
659
660 leg->Draw();
661}
662
663Int_t MHCalibrationPulseTimeCam::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
664{
665
666 Bool_t rc = kFALSE;
667
668 if (MHCalibrationCam::ReadEnv(env,prefix,print))
669 rc = kTRUE;
670
671 if (IsEnvDefined(env, prefix, "LowerSignalLimit", print))
672 {
673 SetLowerSignalLimit(GetEnvValue(env,prefix,"LowerSignalLimit",fLowerSignalLimit));
674 rc = kTRUE;
675 }
676
677 if (IsEnvDefined(env, prefix, "ReferenceFile", print))
678 {
679 SetReferenceFile(GetEnvValue(env,prefix,"ReferenceFile",fReferenceFile.Data()));
680 rc = kTRUE;
681 }
682
683 TEnv refenv(fReferenceFile);
684
685 fInnerRefTime = refenv.GetValue("InnerRefTime",fInnerRefTime);
686 fOuterRefTime = refenv.GetValue("OuterRefTime",fOuterRefTime);
687
688 return rc;
689}
Note: See TracBrowser for help on using the repository browser.