#include <TFriendElement.h>
#include <TProcessID.h>
#include <TCollection.h>
-
+#include "Riostream.h"
#include "AliAODEvent.h"
#include "AliAODHeader.h"
#include "AliAODTrack.h"
"tracks",
"vertices",
"v0s",
+ "cascades",
"tracklets",
"jets",
"emcalCells",
"caloClusters",
"fmdClusters",
"pmdClusters"
+
};
//______________________________________________________________________________
AliAODEvent::AliAODEvent() :
AliVEvent(),
fAODObjects(new TList()),
fAODFolder(0),
+ fConnected(kFALSE),
fHeader(0),
fTracks(0),
fVertices(0),
fV0s(0),
+ fCascades(0),
fTracklets(0),
fJets(0),
fEmcalCells(0),
AliVEvent(aod),
fAODObjects(new TList()),
fAODFolder(new TFolder()),
+ fConnected(kFALSE),
fHeader(new AliAODHeader(*aod.fHeader)),
fTracks(new TClonesArray(*aod.fTracks)),
fVertices(new TClonesArray(*aod.fVertices)),
fV0s(new TClonesArray(*aod.fV0s)),
+ fCascades(new TClonesArray(*aod.fCascades)),
fTracklets(new AliAODTracklets(*aod.fTracklets)),
fJets(new TClonesArray(*aod.fJets)),
fEmcalCells(new AliAODCaloCells(*aod.fEmcalCells)),
AddObject(fTracks);
AddObject(fVertices);
AddObject(fV0s);
+ AddObject(fCascades);
AddObject(fTracklets);
AddObject(fJets);
AddObject(fEmcalCells);
AddObject(fCaloClusters);
AddObject(fFmdClusters);
AddObject(fPmdClusters);
-
+ fConnected = aod.fConnected;
GetStdContent();
}
fAODObjects = new TList();
fAODFolder = new TFolder();
+ fConnected = aod.fConnected;
fHeader = new AliAODHeader(*aod.fHeader);
fTracks = new TClonesArray(*aod.fTracks);
fVertices = new TClonesArray(*aod.fVertices);
fV0s = new TClonesArray(*aod.fV0s);
+ fCascades = new TClonesArray(*aod.fCascades);
fTracklets = new AliAODTracklets(*aod.fTracklets);
fJets = new TClonesArray(*aod.fJets);
fEmcalCells = new AliAODCaloCells(*aod.fEmcalCells);
fFmdClusters = new TClonesArray(*aod.fFmdClusters);
fPmdClusters = new TClonesArray(*aod.fPmdClusters);
- fAODObjects = new TList();
AddObject(fHeader);
AddObject(fTracks);
AddObject(fVertices);
AddObject(fV0s);
+ AddObject(fCascades);
AddObject(fTracklets);
AddObject(fJets);
AddObject(fEmcalCells);
AliAODEvent::~AliAODEvent()
{
// destructor
- delete fAODObjects;
+ if(fAODObjects&&!fConnected)
+ {
+ delete fAODObjects;
+ fAODObjects = 0;
+ }
+
delete fAODFolder;
}
AddObject(new TClonesArray("AliAODTrack", 0));
AddObject(new TClonesArray("AliAODVertex", 0));
AddObject(new TClonesArray("AliAODv0", 0));
+ AddObject(new TClonesArray("AliAODcascade", 0));
AddObject(new AliAODTracklets());
AddObject(new TClonesArray("AliAODJet", 0));
AddObject(new AliAODCaloCells());
//
TIter next(fAODObjects);
TObject* obj;
- while (obj = next())
+ while ((obj = next()))
{
if(obj->InheritsFrom("TCollection"))
{
fTracks = (TClonesArray*)fAODObjects->FindObject("tracks");
fVertices = (TClonesArray*)fAODObjects->FindObject("vertices");
fV0s = (TClonesArray*)fAODObjects->FindObject("v0s");
+ fCascades = (TClonesArray*)fAODObjects->FindObject("cascades");
fTracklets = (AliAODTracklets*)fAODObjects->FindObject("tracklets");
fJets = (TClonesArray*)fAODObjects->FindObject("jets");
fEmcalCells = (AliAODCaloCells*)fAODObjects->FindObject("emcalCells");
//______________________________________________________________________________
void AliAODEvent::ResetStd(Int_t trkArrSize,
Int_t vtxArrSize,
- Int_t v0ArrSize,
+ Int_t v0ArrSize,
+ Int_t cascadeArrSize,
Int_t jetSize,
Int_t caloClusSize,
Int_t fmdClusSize,
- Int_t pmdClusSize)
+ Int_t pmdClusSize
+ )
{
// deletes content of standard arrays and resets size
+
fTracks->Delete();
if (trkArrSize > fTracks->GetSize())
fTracks->Expand(trkArrSize);
fVertices->Delete();
if (vtxArrSize > fVertices->GetSize())
fVertices->Expand(vtxArrSize);
-
+
fV0s->Delete();
if (v0ArrSize > fV0s->GetSize())
fV0s->Expand(v0ArrSize);
-
+
+ fCascades->Delete();
+ if (cascadeArrSize > fCascades->GetSize())
+ fCascades->Expand(cascadeArrSize);
+
fJets->Delete();
- if (jetSize > fJets->GetSize())
+ if (jetSize > fJets->GetSize())
fJets->Expand(jetSize);
fCaloClusters->Delete();
void AliAODEvent::ClearStd()
{
// clears the standard arrays
- fTracks ->Clear();
- fVertices ->Clear();
- fV0s ->Clear();
+ fHeader ->RemoveQTheta();
+ fTracks ->Delete();
+ fVertices ->Delete();
+ fV0s ->Delete();
+ fCascades ->Delete();
fTracklets ->DeleteContainer();
fJets ->Delete();
fEmcalCells ->DeleteContainer();
fPhosCells ->DeleteContainer();
- fCaloClusters ->Clear();
+ fCaloClusters ->Delete();
fFmdClusters ->Clear();
fPmdClusters ->Clear();
}
+//_________________________________________________________________
+Int_t AliAODEvent::GetPHOSClusters(TRefArray *clusters) const
+{
+ // fills the provided TRefArray with all found phos clusters
+
+ clusters->Clear();
+
+ AliAODCaloCluster *cl = 0;
+ Bool_t first = kTRUE;
+ for (Int_t i = 0; i < GetNCaloClusters() ; i++) {
+ if ( (cl = GetCaloCluster(i)) ) {
+ if (cl->IsPHOSCluster()){
+ if(first) {
+ new (clusters) TRefArray(TProcessID::GetProcessWithUID(cl));
+ first=kFALSE;
+ }
+ clusters->Add(cl);
+ //printf("IsPHOS cluster %d, E %2.3f Size: %d \n",i,cl->E(),clusters->GetEntriesFast());
+ }
+ }
+ }
+ return clusters->GetEntriesFast();
+}
+
+//_________________________________________________________________
+Int_t AliAODEvent::GetEMCALClusters(TRefArray *clusters) const
+{
+ // fills the provided TRefArray with all found emcal clusters
+
+ clusters->Clear();
+ AliAODCaloCluster *cl = 0;
+ Bool_t first = kTRUE;
+ for (Int_t i = 0; i < GetNCaloClusters(); i++) {
+ if ( (cl = GetCaloCluster(i)) ) {
+ if (cl->IsEMCALCluster()){
+ if(first) {
+ new (clusters) TRefArray(TProcessID::GetProcessWithUID(cl));
+ first=kFALSE;
+ }
+ clusters->Add(cl);
+ //printf("IsEMCal cluster %d, E %2.3f Size: %d \n",i,cl->E(),clusters->GetEntriesFast());
+ }
+ }
+ }
+ return clusters->GetEntriesFast();
+}
+
+
//______________________________________________________________________________
Int_t AliAODEvent::GetMuonTracks(TRefArray *muonTracks) const
{
}
-void AliAODEvent::ReadFromTree(TTree *tree)
+void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/)
{
- // connects aod event to tree
+ // Connects aod event to tree
if(!tree){
Printf("%s %d AliAODEvent::ReadFromTree() Zero Pointer to Tree \n",(char*)__FILE__,__LINE__);
if(aodEvent){
// Check if already connected to tree
TList* connectedList = (TList*) (tree->GetUserInfo()->FindObject("AODObjectsConnectedToTree"));
- if (connectedList) {
- // If connected use the connected list if objects
- fAODObjects->Delete();
- fAODObjects = connectedList;
- GetStdContent();
- return;
- }
+ if (connectedList && (strcmp(opt, "reconnect"))) {
+ // If connected use the connected list of objects
+ fAODObjects->Delete();
+ fAODObjects = connectedList;
+ GetStdContent();
+ fConnected = kTRUE;
+ return;
+ }
// Connect to tree
// prevent a memory leak when reading back the TList
- delete fAODObjects;
- fAODObjects = 0;
+ if (!(strcmp(opt, "reconnect"))) fAODObjects->Delete();
+
// create a new TList from the UserInfo TList...
// copy constructor does not work...
fAODObjects = (TList*)(aodEvent->GetList()->Clone());
- fAODObjects->SetOwner(kFALSE);
+ fAODObjects->SetOwner(kTRUE);
if(fAODObjects->GetEntries()<kAODListN){
printf("%s %d AliAODEvent::ReadFromTree() TList contains less than the standard contents %d < %d \n",
(char*)__FILE__,__LINE__,fAODObjects->GetEntries(),kAODListN);
printf("Get list of object from tree %d !!\n", objL->GetEntries());
TIter nextobject(objL);
TObject* obj = 0;
- while(obj = nextobject())
+ while((obj = nextobject()))
{
printf("Adding object from friend %s !\n", obj->GetName());
fAODObjects->Add(obj);
while((el=(TNamed*)next())){
TString bname(el->GetName());
// check if branch exists under this Name
- printf("Trying to connect branch %s\n", bname.Data());
TBranch *br = tree->GetTree()->GetBranch(bname.Data());
if(br){
tree->SetBranchAddress(bname.Data(),fAODObjects->GetObjectRef(el));
GetStdContent();
// when reading back we are not owner of the list
// must not delete it
- fAODObjects->SetOwner(kFALSE);
+ fAODObjects->SetOwner(kTRUE);
fAODObjects->SetName("AODObjectsConnectedToTree");
// we are not owner of the list objects
// must not delete it
tree->GetUserInfo()->Add(fAODObjects);
+ fConnected = kTRUE;
}// no aodEvent
else {
// we can't get the list from the user data, create standard content
GetStdContent();
// when reading back we are not owner of the list
// must not delete it
- fAODObjects->SetOwner(kFALSE);
+ fAODObjects->SetOwner(kTRUE);
}
}
//______________________________________________________________________________
void AliAODEvent::Print(Option_t *) const
{
- // Something meaningful should be implemented here.
+ // Print the names of the all branches
+ TIter next(fAODObjects);
+ TNamed *el;
+ Printf(">>>>> AOD Content <<<<<");
+ while((el=(TNamed*)next())){
+ Printf(">> %s ",el->GetName());
+ }
+ Printf(">>>>> <<<<<");
return;
}
// written by a subsequent process.
TIter next(col);
TObject* obj;
- while (obj = next())
+ while ((obj = next()))
TProcessID::AssignID(obj);
}