// $Id: EDetector.cc,v 1.17 2005/10/20 12:46:24 pesce Exp $
// Author: A.Thea
/*****************************************************************************
* ESAF: Euso Simulation and Analysis Framework *
* *
* Id: EDetector *
* Package: SimuEvent *
* Coordinator: Alessandro.Thea *
* *
*****************************************************************************/
#include "EDetector.hh"
#include "Etypes.hh"
#include "EDetPhoton.hh"
#include "EMacroCellHit.hh"
#include "EMacroCell.hh"
#include "EFee.hh"
#include "EAFee.hh"
ClassImp(EDetector)
TClonesArray* EDetector::fgPhotons = NULL;
TClonesArray* EDetector::fgMacroCellHits = NULL;
TClonesArray* EDetector::fgFee = NULL;
TClonesArray* EDetector::fgAFee = NULL;
TClonesArray* EDetector::fgMacroCell = NULL;
//EDetector* EDetector::fgCurrent = NULL;
//______________________________________________________________________________
//
// EDetector
// =========
//
//______________________________________________________________________________
void EDetector::Streamer(TBuffer &R__b)
{
// Stream an object of class EDetector.
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
if (R__v == 1) {
TObject::Streamer(R__b);
EFillable::Streamer(R__b);
R__b >> fPhotonFillable;
R__b >> fNightGlowFillable;
fRunPars.Streamer(R__b);
fElectronics.Streamer(R__b);
R__b >> fNumPhotons;
R__b >> fNumCellHits;
R__b >> fNumFee;
R__b >> fNumAFee;
R__b >> fNumCells;
R__b >> fFirstTime;
R__b >> fLastTime;
fPhotons->Streamer(R__b);
fMacroCellHits->Streamer(R__b);
fFee->Streamer(R__b);
fAFee->Streamer(R__b);
fMacroCell->Streamer(R__b);
R__b >> fCopy;
R__b.CheckByteCount(R__s, R__c, EDetector::IsA());
} else {
EDetector::Class()->ReadBuffer(R__b,this, R__v, R__s, R__c);
}
} else {
EDetector::Class()->WriteBuffer(R__b,this);
}
}
//______________________________________________________________________________
EDetector::EDetector() : TObject() {
// ctor
if ( fgPhotons == NULL )
fgPhotons = new TClonesArray("EDetPhoton",20000);
if ( fgMacroCellHits == NULL )
fgMacroCellHits = new TClonesArray("EMacroCellHit",20000);
if ( fgFee == NULL )
fgFee = new TClonesArray("EFee",20000);
if ( fgAFee == NULL )
fgAFee = new TClonesArray("EAFee",20000);
if ( fgMacroCell == NULL )
fgMacroCell = new TClonesArray("EMacroCell",20000);
fMacroCellHits = fgMacroCellHits;
fFee = fgFee;
fAFee = fgAFee;
fPhotons = fgPhotons;
fMacroCell = fgMacroCell;
fPhotonFillable = kTRUE;
fCopy = kFALSE;
fNumPhotons = 0;
fNumFee = 0;
fNumAFee = 0;
fNumCells = 0;
fNumCellHits = 0;
fFirstTime = kHuge;
fLastTime = -kHuge;
}
//______________________________________________________________________________
EDetector::EDetector(const EDetector& other) : TObject() {
// copy ctor
other.Copy ( *this );
}
//______________________________________________________________________________
EDetector::~EDetector() {
// destructor
Clear();
// copied events have different TClonesArray and need additional cleaning
if ( IsCopy() )
ClearCopy();
// if ( GetCurrent() == this ) SetCurrent( 0 );
}
//______________________________________________________________________________
void EDetector::Copy( TObject& other) const {
// copy
TObject::Copy(other);
EDetector& det = (EDetector&)other;
// copy det variables
det.fNumPhotons = fNumPhotons;
det.fNumFee = fNumFee;
det.fNumAFee = fNumAFee;
det.fNumCells = fNumCells;
det.fNumCellHits = fNumCellHits;
det.fFirstTime = fFirstTime;
det.fLastTime = fLastTime;
// clear tclonesarrays
if ( det.IsCopy() ) {
SafeDelete(det.fMacroCellHits);
SafeDelete(det.fPhotons);
SafeDelete(det.fFee);
SafeDelete(det.fAFee);
SafeDelete(det.fMacroCell);
}
// create TClonesArray; for copied objects, the static buffer is not used
det.fMacroCellHits = (TClonesArray*)fMacroCellHits->Clone();
det.fPhotons = (TClonesArray*)fPhotons->Clone();
det.fFee = (TClonesArray*)fFee->Clone();
det.fAFee = (TClonesArray*)fAFee->Clone();
det.fMacroCell = (TClonesArray*)fMacroCell->Clone();
// copy objects
fElectronics.Copy( det.fElectronics );
fStatus.Copy( det.fStatus );
det.fRunPars = fRunPars;
det.SetCopy();
}
//______________________________________________________________________________
void EDetector::Clear( Option_t* opt ) {
// build header
if ( fMacroCellHits )
fMacroCellHits->Clear( opt );
if ( fPhotons )
fPhotons->Clear( opt );
if ( fFee )
fFee->Clear( opt );
if ( fAFee )
fAFee->Clear( opt );
if ( fMacroCell )
fMacroCell->Clear( opt );
fNumPhotons = 0;
fNumFee = 0;
fNumAFee = 0;
fNumCells = 0;
fFirstTime = kHuge;
fLastTime = -kHuge;
fElectronics.Clear();
fStatus.Clear();
TRef dummy;
fRunPars = dummy;
}
//______________________________________________________________________________
void EDetector::Print( Option_t* ) const {
Printf("=> EDetector:");
Printf("fPhotons entries: %d",fPhotons->GetEntriesFast());
Printf("fFee entries: %d",fFee->GetEntriesFast());
Printf("fAFee entries: %d",fAFee->GetEntriesFast());
Printf("fMacroCellHits entries: %d",fMacroCellHits->GetEntriesFast());
Printf("fMacroCell entries: %d",fMacroCell->GetEntriesFast());
Printf(" ");
Printf("fNumPhotons: %d",fNumPhotons);
Printf("fNumFee: %d",fNumFee);
Printf("fNumAFee: %d",fNumAFee);
Printf("fNumCellHits: %d",fNumCellHits);
Printf("fNumCells: %d",fNumCells);
Printf(" ");
Printf("fFirstTime %f",(Double_t)fFirstTime);
Printf("fLastTime %f",(Double_t)fLastTime);
}
//______________________________________________________________________________
void EDetector::ClearCopy() {
// delete TClonesArray in case of copied events
SafeDelete(fMacroCellHits);
SafeDelete(fFee);
SafeDelete(fPhotons);
SafeDelete(fAFee);
SafeDelete(fMacroCell);
}