source: trunk/MagicSoft/Mars/msignal/MExtractTime.cc@ 4804

Last change on this file since 4804 was 4775, checked in by hbartko, 20 years ago
*** empty log message ***
File size: 6.3 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, 04/2004 <mailto:markus@ifae.es>
19!
20! Copyright: MAGIC Software Development, 2000-2004
21!
22!
23\* ======================================================================== */
24
25//////////////////////////////////////////////////////////////////////////////
26//
27// MExtractTime
28//
29// Base class for the signal extractors, used the functions
30// FindTimeHiGain() and FindTimeLoGain() to extract the signal and
31// substract the pedestal value
32//
33// The following variables have to be set by the derived class and
34// do not have defaults:
35// - fNumHiGainSamples
36// - fNumLoGainSamples
37// - fSqrtHiGainSamples
38// - fSqrtLoGainSamples
39//
40// Input Containers:
41// MRawEvtData
42// MRawRunHeader
43// MPedestalCam
44//
45// Output Containers:
46// MArrivalTimeCam
47//
48//////////////////////////////////////////////////////////////////////////////
49#include "MExtractTime.h"
50
51#include <fstream>
52
53#include "MLog.h"
54#include "MLogManip.h"
55
56#include "MParList.h"
57
58#include "MRawEvtData.h"
59#include "MRawEvtPixelIter.h"
60#include "MRawRunHeader.h"
61
62#include "MPedestalCam.h"
63#include "MPedestalPix.h"
64
65#include "MArrivalTimeCam.h"
66#include "MArrivalTimePix.h"
67
68ClassImp(MExtractTime);
69
70using namespace std;
71
72const Float_t MExtractTime::fgOffsetLoGain = 1.51; // 5 ns
73
74// --------------------------------------------------------------------------
75//
76// Default constructor.
77//
78// Set:
79// - all pointers to NULL
80// - all variables to 0
81// - fSaturationLimit to fgSaturationLimit
82//
83// Call:
84// - AddToBranchList("MRawEvtData.*")
85//
86MExtractTime::MExtractTime(const char *name, const char *title)
87 : fArrTime(NULL)
88{
89
90 fName = name ? name : "MExtractTime";
91 fTitle = title ? title : "Base class for signal extractors";
92
93 SetOffsetLoGain();
94}
95
96
97
98// --------------------------------------------------------------------------
99//
100// The PreProcess searches for the following input containers:
101// - MRawEvtData
102// - MRawRunHeader
103// - MPedestalCam
104//
105// The following output containers are also searched and created if
106// they were not found:
107//
108// - MArrivalTimeCam
109//
110Int_t MExtractTime::PreProcess(MParList *pList)
111{
112 fRawEvt = (MRawEvtData*)pList->FindObject(AddSerialNumber("MRawEvtData"));
113 if (!fRawEvt)
114 {
115 *fLog << err << AddSerialNumber("MRawEvtData") << " not found... aborting." << endl;
116 return kFALSE;
117 }
118
119 fRunHeader = (MRawRunHeader*)pList->FindObject(AddSerialNumber("MRawRunHeader"));
120 if (!fRunHeader)
121 {
122 *fLog << err << AddSerialNumber("MRawRunHeader") << " not found... aborting." << endl;
123 return kFALSE;
124 }
125
126
127 fArrTime = (MArrivalTimeCam*)pList->FindCreateObj(AddSerialNumber("MArrivalTimeCam"));
128 if (!fArrTime)
129 return kFALSE;
130
131
132 fPedestals = (MPedestalCam*)pList->FindObject( AddSerialNumber(fNamePedestalCam), "MPedestalCam");
133 if (!fPedestals)
134 {
135 *fLog << err << AddSerialNumber("MPedestalCam") << " not found... aborting" << endl;
136 return kFALSE;
137 }
138
139 return kTRUE;
140}
141
142// --------------------------------------------------------------------------
143//
144// The ReInit calls:
145// - MExtractor::ReInit()
146//
147// Call:
148// - MArrivalTimeCam::SetUsedFADCSlices(fHiGainFirst, fHiGainLast, fNumHiGainSamples,
149// fLoGainFirst, fLoGainLast, fNumLoGainSamples);
150//
151Bool_t MExtractTime::ReInit(MParList *pList)
152{
153
154 MExtractor::ReInit(pList);
155
156 fArrTime->SetUsedFADCSlices(fHiGainFirst, fHiGainLast+fHiLoLast, fLoGainFirst, fLoGainLast);
157
158 return kTRUE;
159}
160
161
162
163void MExtractTime::FindTimeHiGain(Byte_t *firstused, Float_t &time, Float_t &dtime,
164 Byte_t &sat, const MPedestalPix &ped) const
165{
166 return;
167}
168
169void MExtractTime::FindTimeLoGain(Byte_t *firstused, Float_t &time, Float_t &dtime,
170 Byte_t &sat, const MPedestalPix &ped) const
171{
172 return;
173}
174
175// --------------------------------------------------------------------------
176//
177// Calculate the integral of the FADC time slices and store them as a new
178// pixel in the MArrivalTimeCam container.
179//
180Int_t MExtractTime::Process()
181{
182
183
184 MRawEvtPixelIter pixel(fRawEvt);
185 fArrTime->Clear();
186
187 while (pixel.Next())
188 {
189 //
190 // Find signal in hi- and lo-gain
191 //
192 Float_t timehi=0., deltatimehi=0.;
193 Byte_t sathi=0;
194
195 const Int_t pixid = pixel.GetPixelId();
196 const MPedestalPix &ped = (*fPedestals)[pixid];
197 MArrivalTimePix &pix = (*fArrTime)[pixid];
198
199 FindTimeHiGain(pixel.GetHiGainSamples()+fHiGainFirst, timehi, deltatimehi, sathi, ped);
200
201 Float_t timelo=0., deltatimelo=0.;
202 Byte_t satlo=0;
203
204 if ((sathi)&&pixel.HasLoGain())
205 FindTimeLoGain(pixel.GetLoGainSamples()+fLoGainFirst, timelo, deltatimelo, satlo, ped);
206
207 pix.SetArrivalTime(timehi, deltatimehi, timelo-fOffsetLoGain, deltatimelo);
208 pix.SetGainSaturation(sathi, sathi, satlo);
209
210 } /* while (pixel.Next()) */
211
212 fArrTime->SetReadyToSave();
213
214 return kTRUE;
215}
216
217// --------------------------------------------------------------------------
218//
219// In addition to the resources of the base-class MExtractor:
220// MJPedestal.MExtractor.OffsetLoGain: 1.51
221//
222Int_t MExtractTime::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
223{
224 Bool_t rc = kFALSE;
225
226 if (IsEnvDefined(env, prefix, "OffsetLoGain", print))
227 {
228 fOffsetLoGain = GetEnvValue(env, prefix, "OffsetLoGain", fOffsetLoGain);
229 rc = kTRUE;
230 }
231
232 return MExtractor::ReadEnv(env, prefix, print) ? kTRUE : rc;
233}
234
235void MExtractTime::Print(Option_t *o) const
236{
237 *fLog << all;
238 if (IsA()==MExtractTime::Class())
239 *fLog << GetDescriptor() << ":" << endl;
240 *fLog << " Offset Lo-Gain: " << fOffsetLoGain << endl;
241 MExtractor::Print(o);
242}
Note: See TracBrowser for help on using the repository browser.