Universita' di GenovaINFN Sezione di Genova  
AIRWATCH / EUSO Genova

EEvent - source file

// ESAF : Euso Simulation and Analysis Framework
// $Id: EEvent.cc,v 1.13 2005/04/18 22:48:34 thea Exp $
// M. Pallavicini created Mar, 13 2002

#include "EEvent.hh"
#include "Etypes.hh"

ClassImp(EEvent)

EEvent* EEvent::fgCurrent = 0;

// class EEvent
//______________________________________________________________________________
EEvent::EEvent( Int_t branches ) : TObject() {
    //
    // Costructor
    // 
    
    fHeader     = new EHeader();
    fTruth      = new ETruth ();

    fShower           = (branches & kShower) ? new EShower() : 0 ;
    fAtmosphere       = (branches & kAtmosphere) ? new EAtmosphere() : 0;
    fDetector         = (branches & kDetector) ? new EDetector() : 0; 
    fChipTrackTrigger = (branches & kChipTrackTrigger) ? new EChipTrackTrigger() : 0; 
    
}

//______________________________________________________________________________
EEvent::EEvent(const EEvent& other) : TObject() {
    // copy ctor

    other.Copy ( *this );
}

//______________________________________________________________________________
EEvent::~EEvent() {
    // destructor
    
    Clear("C");

    if ( GetCurrent() == this ) SetCurrent( 0 ); 
    
}

//______________________________________________________________________________
 void EEvent::Copy( TObject& other) const {
    // 
    // Copy this to other
    // 
    
    // EEvent& event = (EEvent&)other;

    // TODO
}

//______________________________________________________________________________
 Bool_t EEvent::BranchTree(TTree *t ) {
    // 
    // Branch tree on EEvent data members 
    //

    Bool_t branched = kTRUE;

    // add capability not to branch on a subevent if requested
    if ( fHeader )             t->Branch("header","EHeader",&fHeader);
    if ( fTruth )              t->Branch("truth","ETruth",&fTruth);
    if ( fShower )             t->Branch("shower","EShower",&fShower);
    if ( fAtmosphere )         t->Branch("atmosphere","EAtmosphere",&fAtmosphere);
    if ( fDetector )           t->Branch("detector","EDetector",&fDetector);
    if ( fChipTrackTrigger )   t->Branch("trigger","EChipTrackTrigger",&fChipTrackTrigger);

    return branched;

}

//______________________________________________________________________________
 Bool_t EEvent::SetBranches(TTree *t ) {
    // 
    // Sets branches addresses for reading. Returns kTRUE if all container exist
    // in the tree. If one of the data member is 0 and corresponding branch 
    // is found, it is automatically allocated
    //

    Delete();
    
    Bool_t branched = kTRUE;
    
    TBranch *branch;
    
    if ( (branch = t->GetBranch( "header" )) )
        branch->SetAddress( &fHeader );
    branched &= ( branch != 0 );
    
    if ( (branch = t->GetBranch( "truth" )) )
        branch->SetAddress( &fTruth );
    branched &= ( branch != 0 );
    
    if ( (branch = t->GetBranch( "shower" )) )
        branch->SetAddress( &fShower );
    branched &= ( branch != 0 );

    if ( (branch = t->GetBranch( "atmosphere" )) )
        branch->SetAddress( &fAtmosphere );
    branched &= ( branch != 0 );
    
    if ( (branch = t->GetBranch( "detector" )) )
        branch->SetAddress( &fDetector );
    branched &= ( branch != 0 );

    if ( (branch = t->GetBranch( "trigger" )) )
        branch->SetAddress( &fChipTrackTrigger );
    branched &= ( branch != 0 );
    
    return branched;

}

//______________________________________________________________________________
 void EEvent::Build(Int_t run,Int_t ev, const char* name) {
    // build header

    if ( fHeader ) {
        fHeader->SetNum(ev);
        fHeader->SetRun(run);
        fHeader->SetRunName(name);
    }
}

//______________________________________________________________________________
 void EEvent::Clear( Option_t* opt ) {
    // clear event

    TString options(opt);

    if ( fHeader )             fHeader->Clear( opt );
    if ( fTruth )              fTruth->Clear( opt );
    if ( fShower )             fShower->Clear( opt );
    if ( fAtmosphere )         fAtmosphere->Clear( opt );
    if ( fDetector )           fDetector->Clear( opt );
    if ( fChipTrackTrigger )   fChipTrackTrigger->Clear( opt );

    if ( options.Contains("C") )
        Delete(); 
}


//______________________________________________________________________________
 void EEvent::Delete( Option_t* ) {
    //
    // Delete all containers
    // 

    if ( fHeader )           delete fHeader;           fHeader = 0;
    if ( fTruth )            delete fTruth;            fTruth = 0;
    if ( fShower )           delete fShower;           fShower = 0;
    if ( fAtmosphere )       delete fAtmosphere;       fAtmosphere = 0;
    if ( fDetector )         delete fDetector;         fDetector = 0;
    if ( fChipTrackTrigger ) delete fChipTrackTrigger; fChipTrackTrigger = 0;
}

//______________________________________________________________________________
 Bool_t EEvent::Fill(  EFiller& f ) {
    //
    // Deliver filler to its target
    //

    TString target( f.GetTarget() );

    EFillable* fillable;

    if ( target == "ETruth" ) {
        fillable = fTruth;
    } else if ( target == "EShower" ) {
        fillable = fShower;
    } else if ( target == "EAtmosphere" ) {
        fillable = fAtmosphere;
    } else if ( target == "EDetector" ) {
        fillable = fDetector;
    } else if ( target == "EChipTrackTrigger" ) {
        fillable = fChipTrackTrigger;
    } else {
        Error("Fill", "Filler type %s unknown",target.Data());
        return kFALSE;
    }

    // if filled is a null pointer return
    if ( !fillable ) return kFALSE;
    
    // try to fill the selected object
    Bool_t filled = fillable->Fill( f );

    if ( !filled )
        Error("Fill", "Unable to fill %s with filler type %s",
              fillable->Class_Name(), target.Data());

    return filled; 
        
}
About Us | EUSO Official Website | Web pages created by Roberto Pesce and Alessandro Thea - Last Update 14-May-2005 21:31