Universita' di GenovaINFN Sezione di Genova  
AIRWATCH / EUSO Genova

EDetector - source file

// $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);
    
}

About Us | EUSO Official Website | Web pages created by Roberto Pesce and Alessandro Thea - Last Update Wed Nov 16 16:57:39 2005 Wed Nov 16 16:29:22 2005