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

Last change on this file since 4235 was 4064, checked in by gaug, 20 years ago
*** empty log message ***
File size: 5.6 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;
71const Float_t MExtractTime::fgOffsetLoGain = 1.51; // 5 ns
72// --------------------------------------------------------------------------
73//
74// Default constructor.
75//
76// Set:
77// - all pointers to NULL
78// - all variables to 0
79// - fSaturationLimit to fgSaturationLimit
80//
81// Call:
82// - AddToBranchList("MRawEvtData.*")
83//
84MExtractTime::MExtractTime(const char *name, const char *title)
85 : fArrTime(NULL)
86{
87
88 fName = name ? name : "MExtractTime";
89 fTitle = title ? title : "Base class for signal extractors";
90
91 SetOffsetLoGain();
92}
93
94
95
96// --------------------------------------------------------------------------
97//
98// The PreProcess searches for the following input containers:
99// - MRawEvtData
100// - MRawRunHeader
101// - MPedestalCam
102//
103// The following output containers are also searched and created if
104// they were not found:
105//
106// - MArrivalTimeCam
107//
108Int_t MExtractTime::PreProcess(MParList *pList)
109{
110
111 fRawEvt = (MRawEvtData*)pList->FindObject(AddSerialNumber("MRawEvtData"));
112 if (!fRawEvt)
113 {
114 *fLog << err << AddSerialNumber("MRawEvtData") << " not found... aborting." << endl;
115 return kFALSE;
116 }
117
118 fRunHeader = (MRawRunHeader*)pList->FindObject(AddSerialNumber("MRawRunHeader"));
119 if (!fRunHeader)
120 {
121 *fLog << err << AddSerialNumber("MRawRunHeader") << " not found... aborting." << endl;
122 return kFALSE;
123 }
124
125
126 fArrTime = (MArrivalTimeCam*)pList->FindCreateObj(AddSerialNumber("MArrivalTimeCam"));
127 if (!fArrTime)
128 return kFALSE;
129
130
131 fPedestals = (MPedestalCam*)pList->FindObject(AddSerialNumber("MPedestalCam"));
132 if (!fPedestals)
133 {
134 *fLog << err << AddSerialNumber("MPedestalCam") << " not found... aborting" << endl;
135 return kFALSE;
136 }
137
138 return kTRUE;
139}
140
141// --------------------------------------------------------------------------
142//
143// The ReInit calls:
144// - MExtractor::ReInit()
145//
146// Call:
147// - MArrivalTimeCam::SetUsedFADCSlices(fHiGainFirst, fHiGainLast, fNumHiGainSamples,
148// fLoGainFirst, fLoGainLast, fNumLoGainSamples);
149//
150Bool_t MExtractTime::ReInit(MParList *pList)
151{
152
153 MExtractor::ReInit(pList);
154
155 fArrTime->SetUsedFADCSlices(fHiGainFirst, fHiGainLast+fHiLoLast, fLoGainFirst, fLoGainLast);
156
157 return kTRUE;
158}
159
160
161
162void MExtractTime::FindTimeHiGain(Byte_t *firstused, Float_t &time, Float_t &dtime,
163 Byte_t &sat, const MPedestalPix &ped) const
164{
165 return;
166}
167
168void MExtractTime::FindTimeLoGain(Byte_t *firstused, Float_t &time, Float_t &dtime,
169 Byte_t &sat, const MPedestalPix &ped) const
170{
171 return;
172}
173
174// --------------------------------------------------------------------------
175//
176// Calculate the integral of the FADC time slices and store them as a new
177// pixel in the MArrivalTimeCam container.
178//
179Int_t MExtractTime::Process()
180{
181
182
183 MRawEvtPixelIter pixel(fRawEvt);
184 fArrTime->Clear();
185
186 while (pixel.Next())
187 {
188 //
189 // Find signal in hi- and lo-gain
190 //
191 Float_t timehi=0., deltatimehi=0.;
192 Byte_t sathi=0;
193
194 const Int_t pixid = pixel.GetPixelId();
195 const MPedestalPix &ped = (*fPedestals)[pixid];
196 MArrivalTimePix &pix = (*fArrTime)[pixid];
197
198 FindTimeHiGain(pixel.GetHiGainSamples()+fHiGainFirst, timehi, deltatimehi, sathi, ped);
199
200 Float_t timelo=0., deltatimelo=0.;
201 Byte_t satlo=0;
202
203 if (sathi)
204 FindTimeLoGain(pixel.GetLoGainSamples()+fLoGainFirst, timelo, deltatimelo, satlo, ped);
205
206 pix.SetArrivalTime(timehi, deltatimehi, timelo-fOffsetLoGain, deltatimelo);
207 pix.SetGainSaturation(sathi, sathi, satlo);
208
209 } /* while (pixel.Next()) */
210
211 fArrTime->SetReadyToSave();
212
213 return kTRUE;
214}
215
Note: See TracBrowser for help on using the repository browser.