//////////////////////////////////////////////////////////////////////////
// //
// ATLFast virtual base class for Makers //
// //
//////////////////////////////////////////////////////////////////////////
#include <TChain.h>
#include <TTree.h>
#include <TList.h>
#include <TClonesArray.h>
#include <TBrowser.h>
#include "ATLFMaker.h"
#include "ATLFast.h"
ClassImp(ATLFMaker)
//_____________________________________________________________________________
ATLFMaker::ATLFMaker()
{
m_BranchName = "";
m_Save = 0;
m_Histograms = 0;
m_Fruits = 0;
m_Clones = 0;
m_IsClonable = kTRUE;
}
//_____________________________________________________________________________
ATLFMaker::ATLFMaker(const char *name, const char *title)
:TNamed(name,title)
{
m_BranchName = "";
m_Save = 0;
m_Histograms = new TList();
m_Clones = 0;
m_IsClonable = kTRUE;
gATLFast->Makers()->Add(this);
}
//_____________________________________________________________________________
ATLFMaker::~ATLFMaker()
{
delete m_Fruits;
delete m_Clones;
}
//______________________________________________________________________________
void ATLFMaker::Browse(TBrowser *b)
{
// Insert Maker objects in the list of objects to be browsed.
char name[64];
if( b == 0 || m_Fruits == 0) return;
TObject *obj;
// If m_Fruits is a ClonesArray, insert all the objects in the list
// of browsable objects
if (m_Fruits->InheritsFrom("TClonesArray")) {
TClonesArray *clones = (TClonesArray*)m_Fruits;
Int_t nobjects = clones->GetEntries();
for (Int_t i=0;i<nobjects;i++) {
obj = clones->At(i);
sprintf(name,"%s_%d",obj->GetName(),i);
if (strstr(name,"ATLF")) b->Add(obj, &name[4]);
else b->Add(obj, &name[0]);
}
// m_Fruits points to an object in general. Insert this object in the browser
} else {
b->Add( m_Fruits, m_Fruits->GetName());
}
}
//_____________________________________________________________________________
void ATLFMaker::Clear(Option_t *option)
{
if (m_Fruits) m_Fruits->Clear(option);
delete m_Clones;
m_Clones = 0;
}
//_____________________________________________________________________________
void ATLFMaker::Draw(Option_t *)
{
// Insert products of this maker in graphics pad list
TObject *obj;
// If m_Fruits is a ClonesArray, insert all the objects in the list
// of objects to be painted
if (m_Fruits->InheritsFrom("TClonesArray")) {
TClonesArray *clones = (TClonesArray*)m_Fruits;
Int_t nobjects = clones->GetEntries();
for (Int_t i=0;i<nobjects;i++) {
obj = clones->At(i);
if (obj) obj->AppendPad();
}
// m_Fruits points to an object in general. Insert this object in the pad
} else {
m_Fruits->AppendPad();
}
}
//_____________________________________________________________________________
void ATLFMaker::FillClone()
{
// Copy original fruits in a separate list (clones)
if (!m_IsClonable || m_Fruits == 0) return;
m_Clones = m_Fruits->Clone();
}
//_____________________________________________________________________________
void ATLFMaker::Init()
{
//dummy
}
//_____________________________________________________________________________
void ATLFMaker::Finish()
{
//dummy
}
//_____________________________________________________________________________
Int_t ATLFMaker::Make()
{
Warning("Make","Dummy function called");
return 0;
}
//_____________________________________________________________________________
void ATLFMaker::PrintInfo()
{
printf("*********************************n");
printf("* *n");
printf("* %23s *n",GetName());
printf("* *n");
printf("*********************************n");
Dump();
}
//_____________________________________________________________________________
void ATLFMaker::MakeBranch()
{
// Adds the list of physics objects to the ATLFast tree as a new branch
if (m_Save == 0) return;
TTree *tree = gATLFast->Tree();
if (tree == 0 || m_Fruits == 0 || m_BranchName.Length() == 0) return;
// Make a branch tree if a branch name has been set
Int_t buffersize = 4000;
if (m_Fruits->InheritsFrom("TClonesArray")) {
tree->Branch(m_BranchName.Data(), &m_Fruits, buffersize);
} else {
tree->Branch(m_BranchName.Data(),m_Fruits->ClassName(), &m_Fruits, buffersize);
}
}
//_____________________________________________________________________________
void ATLFMaker::SetChainAddress(TChain *chain)
{
// Set branch address in a chain of files
if (chain == 0) return;
chain->SetBranchAddress(m_BranchName.Data(), &m_Fruits);
}
//______________________________________________________________________________
void ATLFMaker::Streamer(TBuffer &R__b)
{
// Stream an object of class ATLFMaker.
if (R__b.IsReading()) {
R__b.ReadVersion(); // Version_t R__v = R__b.ReadVersion();
TNamed::Streamer(R__b);
R__b >> m_Save;
R__b >> m_Fruits;
m_BranchName.Streamer(R__b);
R__b >> m_Histograms;
//this is an addition to the standard rootcint version of Streamer
//branch address for this maker is set automatically
TTree *tree = gATLFast->Tree();
if (tree == 0 || m_Fruits == 0 || m_BranchName.Length() == 0) return;
TBranch *branch = tree->GetBranch(m_BranchName.Data());
if (branch) branch->SetAddress(&m_Fruits);
} else {
R__b.WriteVersion(ATLFMaker::IsA());
TNamed::Streamer(R__b);
R__b << m_Save;
R__b << m_Fruits;
m_BranchName.Streamer(R__b);
R__b << m_Histograms;
}
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.