47 #include <TObjString.h>
50 #include <Riostream.h>
80 TObjArray* branches = tree.GetListOfBranches();
85 while ( ( branch = static_cast<TBranch*>(next()) ) )
87 TString bname(branch->GetName());
88 if ( branch->GetAddress() == 0 &&
89 tree.GetBranchStatus(bname.Data()) == 1 )
91 AliError(Form(
"Branch %s has status 1 and no address",bname.Data()));
102 tree.GetEvent(event);
110 TObjArray* branches = tree.GetListOfBranches();
111 TIter next(branches);
114 while ( ( branch = static_cast<TBranch*>(next()) ) )
116 TString bname(branch->GetName());
117 Int_t status = tree.GetBranchStatus(bname.Data());
118 cout << Form(
"%50s Status %d Address %p",bname.Data(),status,branch->GetAddress()) << endl;
125 const char* className)
const
132 if ( test.Length() == 0 )
135 TList* userInfo = tree.GetUserInfo();
137 new TObjString(className),
145 const char* branchClassName,
146 const char* branchName,
148 Int_t bufferSize, Int_t splitLevel)
const
152 TBranch* branch = tree.Branch(branchName,branchClassName,address,bufferSize,splitLevel);
153 return ( branch != 0x0 );
162 TBranch* branch = tree.GetBranch(branchName);
165 branch->SetAddress(address);
168 AliError(Form(
"Did not find branch %s in tree %s",branchName,tree.GetName()));
179 TClass* classPtr = TClass::GetClass(className.Data());
182 AliError(Form(
"Could not get class %s",className.Data()));
185 return reinterpret_cast<TObject*
>(classPtr->New());
204 TIter next(tree.GetListOfBranches());
207 while ( ( branch = static_cast<TBranch*>(next()) ) )
209 TString bname(branch->GetName());
210 if ( bname.Contains(pattern) )
212 tree.SetBranchStatus(Form(
"%s*",branch->GetName()),1);
216 if ( !branch->GetAddress() )
218 tree.SetBranchStatus(Form(
"%s*",branch->GetName()),0);
228 Bool_t makeDefault)
const
236 TTree& vtree =
const_cast<TTree&
>(
tree);
238 TIter next(vtree.GetUserInfo());
242 while ( (
object = next() ) )
245 TString key = (
static_cast<TObjString*
>(pair->
First()))->String();
246 TString value = (
static_cast<TObjString*
>(pair->
Second()))->String();
247 if ( key.Contains(pattern,TString::kIgnoreCase) )
265 TString name(treeName);
266 TString spattern(pattern);
269 if ( name ==
"TreeH" )
271 return "AliMUONHitStoreV1";
274 if ( name ==
"TreeD" || name ==
"TreeS" )
276 if ( spattern.Contains(
"TRIGGER") )
return "AliMUONTriggerStoreV1";
277 if ( spattern.Contains(
"DIGIT") )
return "AliMUONDigitStoreV1";
280 if ( name ==
"TreeR" )
282 if ( spattern.Contains(
"CLUSTER") )
return "AliMUONClusterStoreV1";
283 if ( spattern.Contains(
"TRIGGER") )
return "AliMUONTriggerStoreV1";
286 if ( name ==
"TreeT" )
288 if ( spattern.Contains(
"TRIGGER" ) )
return "AliMUONTriggerTrackStoreV1";
289 if ( spattern.Contains(
"TRACK") )
return "AliMUONTrackStoreV1";
292 AliError(Form(
"Do not know how to create default class for tree %s pattern %s",
Bool_t SetAddress(TTree &tree, const char *branchName, void *address) const
void GetEvent(TTree &tree, Int_t event) const
TString GetClassName(const TTree &tree, const char *pattern, Bool_t makeDefault) const
virtual ~AliMUONTreeManager()
TObject * First() const
Return the first element of the pair.
Helper class to ease TTree (MUON) branches manipulations.
TObject * Second() const
Return the second element of the pair.
TString DefaultClassName(const char *treename, const char *pattern) const
TObject * CreateObject(const TTree &tree, const char *detail) const
void ShowStatus(TTree &tree) const
Debug method to show the tree branch statuses and addresses.
void AddClassName(TTree &tree, const char *pattern, const char *className) const
void UpdateBranchStatuses(TTree &tree, const char *pattern) const
Bool_t MakeBranch(TTree &tree, const char *storeClassName, const char *branchClassName, const char *branchName, void *address, Int_t bufferSize=4000, Int_t splitLevel=99) const
The equivalent of a std::pair<TObject*,TObject*> ;-)