]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAODEvent.cxx
move from Bz to BxByBz in track propagation
[u/mrichter/AliRoot.git] / STEER / AliAODEvent.cxx
index 1ed88d1cb3160cc28a20d9600d430f2edfb5aa3d..5603a210e14f6ecda718aa181b8d7c964783afa2 100644 (file)
@@ -26,7 +26,7 @@
 #include <TFriendElement.h>
 #include <TProcessID.h>
 #include <TCollection.h>
-
+#include "Riostream.h"
 #include "AliAODEvent.h"
 #include "AliAODHeader.h"
 #include "AliAODTrack.h"
@@ -38,6 +38,7 @@ ClassImp(AliAODEvent)
                                                      "tracks",
                                                      "vertices",
                                                      "v0s",
+                                                     "cascades",
                                                      "tracklets",
                                                      "jets",
                                                      "emcalCells",
@@ -45,16 +46,19 @@ ClassImp(AliAODEvent)
                                                      "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),
@@ -71,10 +75,12 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod):
   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)),
@@ -88,6 +94,7 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod):
   AddObject(fTracks);
   AddObject(fVertices);
   AddObject(fV0s);
+  AddObject(fCascades);
   AddObject(fTracklets);
   AddObject(fJets);
   AddObject(fEmcalCells);
@@ -95,7 +102,7 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod):
   AddObject(fCaloClusters);
   AddObject(fFmdClusters);
   AddObject(fPmdClusters);
-
+  fConnected = aod.fConnected;
   GetStdContent();
 }
 
@@ -109,10 +116,12 @@ AliAODEvent & AliAODEvent::operator=(const AliAODEvent& aod) {
 
     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);
@@ -121,12 +130,12 @@ AliAODEvent & AliAODEvent::operator=(const AliAODEvent& aod) {
     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);
@@ -143,7 +152,12 @@ AliAODEvent & AliAODEvent::operator=(const AliAODEvent& aod) {
 AliAODEvent::~AliAODEvent() 
 {
 // destructor
-    delete fAODObjects;
+    if(fAODObjects&&!fConnected)
+    {
+       delete fAODObjects;
+       fAODObjects = 0;
+    }
+
     delete fAODFolder;
 }
 
@@ -183,6 +197,7 @@ void AliAODEvent::CreateStdContent()
   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());
@@ -263,6 +278,7 @@ void AliAODEvent::GetStdContent()
   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");
@@ -275,13 +291,16 @@ void AliAODEvent::GetStdContent()
 //______________________________________________________________________________
 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);
@@ -289,13 +308,17 @@ void AliAODEvent::ResetStd(Int_t 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();
@@ -320,14 +343,16 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
 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();
 }
@@ -340,12 +365,16 @@ Int_t AliAODEvent::GetPHOSClusters(TRefArray *clusters) const
   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);
-       //AliDebug(1,Form("IsPHOS cluster %d Size: %d \n",i,clusters->GetEntriesFast()));
+       //printf("IsPHOS cluster %d, E %2.3f Size: %d \n",i,cl->E(),clusters->GetEntriesFast());
       }
     }
   }
@@ -358,14 +387,17 @@ 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);
-       //AliDebug(1,Form("IsEMCAL cluster %d Size: %d \n",i,clusters->GetEntriesFast()));
+       //printf("IsEMCal cluster %d, E %2.3f Size: %d \n",i,cl->E(),clusters->GetEntriesFast());
       }
     }
   }
@@ -409,20 +441,21 @@ void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/)
     // Check if already connected to tree
     TList* connectedList = (TList*) (tree->GetUserInfo()->FindObject("AODObjectsConnectedToTree"));
     if (connectedList && (strcmp(opt, "reconnect"))) {
-       // If connected use the connected list if objects
+       // 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);
@@ -477,11 +510,12 @@ void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/)
     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
@@ -496,14 +530,21 @@ void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/)
     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;
 }