source: trunk/Mars/mraw/MRawEvtData.cc@ 17200

Last change on this file since 17200 was 17148, checked in by ftemme, 11 years ago
Merging changes from the MC branch in the trunk
File size: 20.7 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, 12/2000 <mailto:tbretz@astro.uni-wuerzburg.de>
19!
20! Copyright: MAGIC Software Development, 2000-2008
21!
22!
23\* ======================================================================== */
24
25/////////////////////////////////////////////////////////////////////////////
26//
27// MRawEvtData
28//
29// Storage container to store the raw FADC values.
30//
31// MArrayS fHiGainPixId
32// ---------------------
33// Array of Pixel Numbers for their high voltage channel in the order the
34// FADC values are stored in fHiGainFadcSamples
35//
36// MArrayB fHiGainFadcSaples
37// -------------------------
38// FADC samples (hi gain) of all pixels
39//
40// MArrayS fLoGainPixId
41// --------------------
42// see fHiGainPixId
43//
44// MArrayB fLoGainFadcSamples
45// --------------------------
46// see fHiGainFadcSaples
47//
48//
49// Version 8
50// ------------------
51// + MArrayS *fStartCell
52// + Bool_t fIsSigned
53//
54// Version 7
55// ------------------
56// + UShort_t fNumBytesPerSample;
57//
58// Version 6
59// ------------------
60// - The data can now be stoe in a single array keeping he full
61// compatibility
62//
63// Version 5 (0.8.5):
64// ------------------
65// - Changed type of ABFlags from TArrayC to MArrayB
66//
67// Version 4 (0.8.4):
68// ------------------
69// - Changed derivement from MCamEvent to MParContainer and MCamEvent
70//
71// Version 3 (0.8.4):
72// ------------------
73// - Added fABFlags
74//
75// Version 2:
76// ----------
77// - Derives from MCamEvent now
78//
79// Version 1:
80// ----------
81// - First implementation
82//
83/////////////////////////////////////////////////////////////////////////////
84#include "MRawEvtData.h"
85
86#include <fstream>
87
88#include <TH1.h>
89#include <TGraph.h>
90#include <TArrayC.h>
91#include <TVirtualPad.h>
92
93#include "MLog.h"
94#include "MLogManip.h"
95
96#include "MArrayS.h"
97#include "MArrayB.h"
98#include "MArrayI.h"
99#include "MGeomCam.h"
100
101#include "MRawCrateArray.h"
102#include "MRawCrateData.h"
103
104#include "MRawRunHeader.h"
105#include "MRawEvtPixelIter.h"
106
107ClassImp(MRawEvtData);
108
109using namespace std;
110
111// --------------------------------------------------------------------------
112//
113// Default constructor. It initializes all arrays with zero size.
114//
115MRawEvtData::MRawEvtData(const char *name, const char *title)
116 : fRunHeader(0), fNumBytesPerSample(1), fTriggerType(0), fIsSigned(false)
117{
118 fName = name ? name : "MRawEvtData";
119 fTitle = title ? title : "Raw Event Data Information";
120
121 InitArrays();
122}
123
124// --------------------------------------------------------------------------
125//
126// Destructor. Deletes all the arrays.
127//
128MRawEvtData::~MRawEvtData()
129{
130 DeleteArrays();
131}
132
133// --------------------------------------------------------------------------
134//
135// reset all arrays
136//
137void MRawEvtData::Clear(Option_t *)
138{
139 /*
140 FIXME:
141 Is Reset (set all entries to zero) what you want to do
142 or Set(0) (delete the array)
143 */
144 fHiGainPixId->Reset();
145 fLoGainPixId->Reset();
146 fHiGainFadcSamples->Reset();
147 fLoGainFadcSamples->Reset();
148 fABFlags->Reset();
149}
150
151// --------------------------------------------------------------------------
152//
153// return the number of hi gain samples per pixel
154//
155UShort_t MRawEvtData::GetNumHiGainSamples() const
156{
157 // If value<0 we are reading old MC files which don't have the
158 // value set so far. So we use the old methid to determin the
159 // numbers and calculate them from the length of the arrays.
160 return fHiGainPixId->GetSize() ? fHiGainFadcSamples->GetSize()/(fHiGainPixId->GetSize()*fNumBytesPerSample) : 0;
161}
162
163// --------------------------------------------------------------------------
164//
165// return the number of lo gain samples per pixel
166//
167UShort_t MRawEvtData::GetNumLoGainSamples() const
168{
169 // If value<0 we are reading old MC files which don't have the
170 // value set so far. So we use the old methid to determin the
171 // numbers and calculate them from the length of the arrays.
172 return fLoGainPixId->GetSize() ? fLoGainFadcSamples->GetSize()/(fLoGainPixId->GetSize()*fNumBytesPerSample) : 0;
173}
174
175// --------------------------------------------------------------------------
176//
177// return the number of stored pixel
178//
179UShort_t MRawEvtData::GetNumPixels() const
180{
181 return fHiGainPixId ? fHiGainPixId->GetSize() : 0;
182}
183
184// --------------------------------------------------------------------------
185//
186// Print out the onformation to *fLog.
187// Options:
188// "hex" Prints the time slices hexadecimal (default)
189// "dec" Prints the time slices decimal
190//
191void MRawEvtData::Print(Option_t *opt) const
192{
193 //
194 // print fadc inforation to screen
195 // Possible Options:
196 // - DEC: Print values decimal instead of hexadecimal (default)
197 //
198 const UShort_t nHiSamp = GetNumHiGainSamples();
199 const UShort_t nLoSamp = GetNumLoGainSamples();
200
201 const UShort_t bps = GetNumBytesPerSample();
202
203 fLog->unsetf(ios::showbase);
204
205 *fLog << dec << all;
206 *fLog << GetDescriptor() << ": " << endl;
207 *fLog << GetNumPixels() << " Pixels with " << (Int_t)nHiSamp << "/" << (Int_t)nLoSamp << " samples" << endl;
208
209 TString str(opt);
210 Int_t manip = str.Contains("dec", TString::kIgnoreCase);
211
212 MRawEvtPixelIter pixel(const_cast<MRawEvtData*>(this));
213 Int_t i = 0;
214 while (pixel.Next())
215 {
216 const UShort_t idx = pixel.GetPixelId();
217
218 *fLog << endl << dec << setfill(' ');
219 *fLog << " " << setw(3) << i++ << " - " << setw(3) << idx << " ";
220
221 if (pixel.IsABFlagValid())
222 *fLog << "<" << (pixel.HasABFlag()?"B":"A") << "> ";
223
224 *fLog << (manip?dec:hex) << setfill(manip?' ':'0');
225
226 const Byte_t *hi = (Byte_t*)pixel.GetHiGainSamples();
227 const Byte_t *lo = (Byte_t*)pixel.GetLoGainSamples();
228
229 for (int j=0; j<nHiSamp*bps; j++)
230 {
231 *fLog << setw(manip?3:2);
232 *fLog << (hi[j]&0xff);
233 if (manip)
234 *fLog << ' ';
235 }
236
237 for (int j=0; j<nLoSamp*bps; j++)
238 {
239 *fLog << setw(manip?3:2);
240 *fLog << ((UShort_t)lo[j]&0xff);
241 if (manip)
242 *fLog << ' ';
243 }
244 }
245 *fLog << dec << endl;
246}
247
248// --------------------------------------------------------------------------
249//
250// Draw a pixel. A Histogram or Graph is created and it's draw function is
251// called.
252// Options:
253// "GRAPH" A graph is drawn
254// "HIST" A histogram is drawn
255// <index> The pixel with the given index is drawn
256//
257void MRawEvtData::Draw(Option_t *opt)
258{
259 if (GetNumPixels()==0)
260 {
261 *fLog << warn << "Sorry, no pixel to draw!" << endl;
262 return;
263 }
264
265 TString str(opt);
266 str.ToLower();
267
268 UInt_t id = 0;
269
270 if (str.BeginsWith("graph"))
271 sscanf(str.Data()+5, "%d", &id);
272 if (str.BeginsWith("hist"))
273 sscanf(str.Data()+4, "%d", &id);
274
275 MRawEvtPixelIter pix(this);
276 if (!pix.Jump(id))
277 {
278 *fLog << warn << dec << "Pixel Idx #" << id << " doesn't exist!" << endl;
279 return;
280 }
281
282 const void *higains = pix.GetHiGainSamples();
283 const void *logains = pix.GetLoGainSamples();
284
285 const Int_t nh = GetNumHiGainSamples();
286 const Int_t nl = GetNumLoGainSamples();
287
288 TString name = "Pixel Idx.";
289 name += pix.GetPixelId();
290
291 fIsSigned = kTRUE;
292
293 Bool_t same = str.Contains("same");
294
295 cout << "MIN/MAX=" << fNumBytesPerSample << " " << GetMin() << " " << GetMax() << endl;
296
297 if (str.BeginsWith("graph"))
298 {
299 *fLog << inf << "Drawing Graph: Pixel Idx #" << dec << pix.GetPixelId();
300 *fLog << " of " << (int)GetNumPixels() << "Pixels" << endl;
301
302 TGraph *graphhi = new TGraph;
303
304 for (int i=0; i<nh; i++)
305 graphhi->SetPoint(graphhi->GetN(), i, GetSample(higains, i));
306 for (int i=0; i<nl; i++)
307 graphhi->SetPoint(graphhi->GetN(), i+nh, GetSample(logains, i));
308
309 graphhi->SetMaximum(GetMax()+0.5);
310 graphhi->SetMinimum(GetMin());
311
312 graphhi->SetBit(kCanDelete);
313 graphhi->Draw(same ? "C*" : "AC*");
314
315 TH1F *histhi = graphhi->GetHistogram();
316 histhi->SetMinimum(GetMin());
317 histhi->SetMaximum(GetMax()+0.5);
318
319 histhi->SetXTitle("Time/FADC Slices");
320 histhi->SetYTitle("Signal/FADC Units");
321
322 return;
323 }
324
325 if (str.BeginsWith("hist"))
326 {
327 // FIXME: Add Legend
328 *fLog << inf << "Drawing Histogram of Pixel with Idx #" << dec << pix.GetPixelId() << " to " << gPad << endl;
329
330 TH1F *histh = new TH1F(name, "FADC Samples", nh+nl, -0.5, nh+nl-.5);
331 histh->SetMinimum(GetMin());
332 histh->SetMaximum(GetMax()+0.5);
333 histh->SetXTitle("Time [FADC Slices]");
334 histh->SetYTitle("Signal [FADC Units]");
335 histh->SetDirectory(NULL);
336 for (int i=0; i<nh; i++)
337 histh->Fill(i, GetSample(higains, i));
338 for (int i=0; i<nl; i++)
339 histh->Fill(i+nl, GetSample(logains, i));
340 histh->SetBit(kCanDelete);
341 histh->Draw(same ? "same" : "");
342
343 return;
344 }
345
346 *fLog << warn << dbginf << "WARNING - You must specify either 'GRAPH' or 'HIST'" << endl;
347}
348
349// --------------------------------------------------------------------------
350//
351// Deletes all the arrays
352// The flag is for future usage.
353//
354void MRawEvtData::InitArrays(UShort_t numconnected, UShort_t maxid)
355{
356 // fRunHeader should not be set only in the constructor!
357 const Int_t numhi = fRunHeader ? fRunHeader->GetNumSamplesHiGain() : 0;
358 const Int_t numlo = fRunHeader ? fRunHeader->GetNumSamplesLoGain() : 0;
359
360 fNumBytesPerSample = fRunHeader ? fRunHeader->GetNumBytesPerSample() : 1;
361
362
363 if (fRunHeader == 0)
364 {
365 fTriggerType = 0x0000;
366 }
367 else
368 {
369 switch(fRunHeader->GetRunType())
370 {
371 case MRawRunHeader::kRTMonteCarlo|MRawRunHeader::kRTData:
372 fTriggerType = 0x0004; break;
373 case MRawRunHeader::kRTMonteCarlo|MRawRunHeader::kRTPedestal:
374 fTriggerType = 0x0400; break;
375 case MRawRunHeader::kRTMonteCarlo|MRawRunHeader::kRTCalibration:
376 fTriggerType = 0x0164; break;
377 default:
378 fTriggerType = 0x0000; break;
379 }
380 }
381
382 fHiGainPixId = new MArrayS(numconnected);
383 fLoGainPixId = new MArrayS(0);
384 fHiGainFadcSamples = new MArrayB(numconnected*(numhi+numlo)*fNumBytesPerSample);
385 fLoGainFadcSamples = new MArrayB(0);
386
387 fABFlags = new MArrayB(maxid==0 ? 0 : maxid/8+1);
388 fStartCells = new MArrayS(0);
389
390 fConnectedPixels = 0;
391}
392
393void MRawEvtData::InitStartCells()
394{
395 delete fStartCells;
396 fStartCells = new MArrayS(fHiGainPixId->GetSize());
397}
398
399// --------------------------------------------------------------------------
400//
401// Deletes all the arrays
402//
403void MRawEvtData::DeleteArrays()
404{
405 delete fHiGainPixId;
406 delete fLoGainPixId;
407 delete fHiGainFadcSamples;
408 delete fLoGainFadcSamples;
409 delete fABFlags;
410 delete fStartCells;
411}
412
413// --------------------------------------------------------------------------
414//
415// Deletes all arrays describing the pixel Id and Samples in pixels.
416// The flag is for future usage.
417//
418void MRawEvtData::ResetPixels(UShort_t numconnected, UShort_t maxid)
419{
420 //const int npix = fRunHeader->GetNumCrates()*fRunHeader->GetNumPixInCrate();
421 if (fHiGainPixId && fHiGainPixId->GetSize()==numconnected && (UShort_t)fABFlags->GetSize()==(maxid/8+1))
422 {
423 fConnectedPixels = 0;
424 return;
425 }
426
427 DeleteArrays();
428 InitArrays(numconnected, maxid);
429}
430
431void MRawEvtData::ResetPixels()
432{
433 if (!fRunHeader)
434 return;
435
436 // FIXME: Better give NumNormalPixels if numconnected==0 ?
437
438 ResetPixels(fRunHeader->GetNumNormalPixels(), fRunHeader->GetNumNormalPixels()-1);
439}
440
441// --------------------------------------------------------------------------
442//
443// This is to fill the data of one pixel to the MRawEvtHeader Class.
444// The parameters are the pixelnumber and the FADC_SLICES values of ADCs
445//
446void MRawEvtData::AddPixel(UShort_t nOfPixel, const TArrayC &data)
447{
448 const Int_t n = fRunHeader->GetNumSamples();
449 if (data.GetSize()!=n)
450 {
451 *fLog << err << "RawEvtData::AddPixel: Error, number of samples in ";
452 *fLog << "TArrayC " << data.GetSize() << " doesn't match current number " << n << endl;
453 return;
454 }
455
456 //
457 // enhance pixel array by one
458 //
459 fHiGainPixId->Set(fHiGainPixId->GetSize()+1);
460
461 //
462 // add the number of the new pixel to the array as last entry
463 //
464 fHiGainPixId->AddAt(nOfPixel, fHiGainPixId->GetSize()-1);
465
466 //
467 // enhance the array by the number of new samples
468 //
469 fHiGainFadcSamples->Set(fHiGainFadcSamples->GetSize()+n);
470
471 //
472 // add the new slices as last entries to array
473 //
474 fHiGainFadcSamples->AddAt((Byte_t*)data.GetArray(), fHiGainFadcSamples->GetSize()-n, n);
475}
476
477// --------------------------------------------------------------------------
478//
479// Add the contents of the MArrayI to the fHiGainFadcSamples
480// One Integer is added to one sample in the array.
481//
482void MRawEvtData::Set(const MArrayI &data)
483{
484 fConnectedPixels = fHiGainPixId->GetSize();
485
486 UInt_t n = fConnectedPixels*fRunHeader->GetNumSamplesHiGain();
487 if (n!=data.GetSize())
488 {
489 *fLog << err << "MRawEvtData::Set: Size mismatch." << endl;
490 *fLog << " fConnectedPixels=" << fConnectedPixels << endl;
491 *fLog << " NumHiGainSamples=" << fRunHeader->GetNumSamplesHiGain() << endl;
492 *fLog << " data.GetSize()=" << data.GetSize() << endl;
493 return;
494 }
495
496 Byte_t *dest = fHiGainFadcSamples->GetArray();
497
498 UInt_t *src = reinterpret_cast<UInt_t*>(data.GetArray());
499 UInt_t *end = reinterpret_cast<UInt_t*>(data.GetArray()) + n;
500
501 switch (fNumBytesPerSample)
502 {
503 case 1:
504 {
505 Byte_t *ptr = reinterpret_cast<Byte_t*>(dest);
506 while (src<end)
507 *ptr++ = Byte_t(*src++);
508 }
509 return;
510
511 case 2:
512 {
513 UShort_t *ptr = reinterpret_cast<UShort_t*>(dest);
514 while (src<end)
515 *ptr++ = UShort_t(*src++);
516 }
517 return;
518
519 case 4:
520 memcpy(dest, data.GetArray(), n*4);
521 return;
522 }
523}
524
525// --------------------------------------------------------------------------
526//
527// Set indices according to the given array. The array must have the same
528// size as fHiGainPixId
529//
530void MRawEvtData::SetIndices(const MArrayS &idx)
531{
532 if (idx.GetSize()!=fHiGainPixId->GetSize())
533 return;
534
535 for (UInt_t i=0; i<fHiGainPixId->GetSize(); i++)
536 (*fHiGainPixId)[i] = idx[i]-1;
537}
538
539// --------------------------------------------------------------------------
540//
541// Set indices according to the length of the array fHiGainPixId
542// from 0 to n-1
543//
544void MRawEvtData::SetIndices()
545{
546 for (UInt_t i=0; i<fHiGainPixId->GetSize(); i++)
547 (*fHiGainPixId)[i] = i;
548}
549
550Byte_t *MRawEvtData::GetSamples() const { return fHiGainFadcSamples->GetArray(); }
551UShort_t *MRawEvtData::GetStartCells() const { return fStartCells->GetArray(); }
552UShort_t *MRawEvtData::GetPixelIds() const { return fHiGainPixId->GetArray(); }
553Bool_t MRawEvtData::HasStartCells() const { return fStartCells->GetSize()==fHiGainPixId->GetSize(); }
554
555/*
556void MRawEvtData::AddPixel(UShort_t nOfPixel, TArrayC *data, Bool_t lflag)
557{
558 MArrayS *arrpix = lflag ? fLoGainPixId : fHiGainPixId;
559 MArrayB *arrsam = lflag ? fLoGainFadcSamples : fHiGainFadcSamples;
560
561 //
562 // check whether we got the right number of new samples
563 // if there are no samples already stored: this is the new number of samples
564 //
565 const UShort_t ns = data->GetSize();
566 const UShort_t nSamp = lflag ? GetNumLoGainSamples() : GetNumHiGainSamples();
567 if (nSamp && ns!=nSamp)
568 {
569 *fLog << err << "RawEvtData::AddPixel: Error, number of samples in ";
570 *fLog << "TArrayC " << ns << " doesn't match current number " << nSamp << endl;
571 return;
572 }
573
574 //
575 // enhance pixel array by one
576 //
577 arrpix->Set(arrpix->GetSize()+1);
578
579 //
580 // add the number of the new pixel to the array as last entry
581 //
582 arrpix->AddAt(nOfPixel, arrpix->GetSize()-1);
583
584 //
585 // enhance the array by the number of new samples
586 //
587 arrsam->Set(arrsam->GetSize()+ns);
588
589 //
590 // add the new slices as last entries to array
591 //
592 arrsam->AddAt((Byte_t*)data->GetArray(), arrsam->GetSize()-ns, ns);
593}
594*/
595
596void MRawEvtData::ReadPixel(istream &fin, Int_t npix)
597{
598 // number of samples
599 const UInt_t ns = fRunHeader->GetNumSamples();
600
601 // bytes per sample
602 const Int_t bps = fRunHeader->GetNumBytesPerSample();
603
604 // Number of bytes
605 const Int_t nb = ns*bps;
606
607 // position in higain array
608 Byte_t *pos = fHiGainFadcSamples->GetArray() + fConnectedPixels*nb;
609
610 // Set pixel index
611 fHiGainPixId->AddAt(npix, fConnectedPixels++);
612
613 // Read data for one pixel
614 fin.read((char*)pos, nb);
615}
616
617void MRawEvtData::SetABFlag(Int_t npix, Bool_t ab)
618{
619 if (ab)
620 SETBIT((*fABFlags)[npix/8], npix%8);
621 else
622 CLRBIT((*fABFlags)[npix/8], npix%8);
623}
624
625// --------------------------------------------------------------------------
626//
627// Fills members with information from a magic binary file.
628// WARNING: you have to use Init() before you can do this
629//
630/*
631void MRawEvtData::ReadEvt(istream &fin, Int_t posinarray)
632{
633
634 const UShort_t npic = fRunHeader->GetNumPixInCrate();
635
636 const UShort_t npos = npic*posinarray;
637
638 //const Byte_t ab = fCrateArray->GetEntry(posinarray)->GetABFlags();
639
640 for (int i=npos; i<npic+npos; i++)
641 {
642 // calc the spiral hardware pixel number
643 const UShort_t ipos = i;
644
645 // Get Hardware Id
646 const Short_t hwid = fRunHeader->GetPixAssignment(ipos);
647
648 // Check whether the pixel is connected or not
649 if (hwid==0)
650 {
651 const UShort_t n = fRunHeader->GetNumSamplesLoGain()+fRunHeader->GetNumSamplesHiGain();
652 fin.seekg(n, ios::cur);
653 return;
654 }
655
656 // -1 converts the hardware pixel Id into the software pixel index
657 const Int_t npix = (Int_t)hwid-1;
658
659 const Byte_t ab = fCrateArray->GetEntry(posinarray)->GetABFlags();
660 AddPixel(fin, npix, TESTBIT(ab, i-npos));
661 }
662}
663*/
664
665// --------------------------------------------------------------------------
666//
667// Return the size in bytes of one event data block
668//
669Int_t MRawEvtData::GetNumBytes() const
670{
671 const UShort_t nlo = fRunHeader->GetNumSamplesLoGain();
672 const UShort_t nhi = fRunHeader->GetNumSamplesHiGain();
673 const UShort_t npic = fRunHeader->GetNumPixInCrate();
674 const UShort_t nbps = fRunHeader->GetNumBytesPerSample();
675
676 return (nhi+nlo)*npic*nbps;
677}
678
679// --------------------------------------------------------------------------
680//
681// Make sure, that you skip the whole event. This function only skips a part
682// of the event - see MRawRead::SkipEvent
683//
684void MRawEvtData::SkipEvt(istream &fin)
685{
686 fin.seekg(GetNumBytes(), ios::cur);
687}
688
689Bool_t MRawEvtData::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
690{
691 *fLog << warn << "WARNING - The use of MRawEvtData::GetPixelContent is deprecated!" << endl;
692
693 /*
694 MRawEvtPixelIter Next(const_cast<MRawEvtData*>(this));
695 if (!Next.Jump(idx))
696 return kFALSE;
697
698 switch (type)
699 {
700 case 0:
701 val = Next.GetSumHiGainSamples()-(float)GetNumHiGainSamples()*fHiGainFadcSamples->GetArray()[0];
702 val*= cam.GetPixRatio(idx);
703 break;
704 case 1:
705 val = Next.GetMaxHiGainSample();
706 break;
707 case 2:
708 val = Next.GetMaxLoGainSample();
709 break;
710 case 3:
711 val = Next.GetIdxMaxHiGainSample();
712 break;
713 case 4:
714 val = Next.GetIdxMaxLoGainSample();
715 break;
716 case 5:
717 val = Next.GetIdxMaxHiLoGainSample();
718 return val >= 0;
719 }
720*/
721 return kTRUE;
722}
723
724void MRawEvtData::Copy(TObject &named)
725#if ROOT_VERSION_CODE > ROOT_VERSION(3,04,01)
726const
727#endif
728{
729 MRawEvtData &evt = (MRawEvtData &)named;
730
731 *evt.fHiGainPixId = *fHiGainPixId;
732 *evt.fLoGainPixId = *fLoGainPixId;
733
734 *evt.fHiGainFadcSamples = *fHiGainFadcSamples;
735 *evt.fLoGainFadcSamples = *fLoGainFadcSamples;
736
737 *evt.fABFlags = *fABFlags;
738
739 evt.fConnectedPixels = fConnectedPixels;
740
741 evt.fNumBytesPerSample = fNumBytesPerSample;
742}
Note: See TracBrowser for help on using the repository browser.