]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliESDInputHandler.cxx
Possibility to propagate tracks to the DCA to the primary vertex at the AOD level...
[u/mrichter/AliRoot.git] / STEER / AliESDInputHandler.cxx
index d5722a498c332beb9062316fa6deca25b14f1b5b..51691ec44c2e4f64a21e8eb036364c523584bd79 100644 (file)
@@ -49,6 +49,7 @@ AliESDInputHandler::AliESDInputHandler() :
   AliInputEventHandler(),
   fEvent(0x0),
   fFriend(0x0),
+  fESDpid(0x0),
   fAnalysisType(0),
   fNEvents(0),
   fHLTEvent(0x0),
@@ -58,7 +59,9 @@ AliESDInputHandler::AliESDInputHandler() :
   fUseTags(kFALSE),
   fChainT(0),
   fTreeT(0),
-  fRunTag(0)
+  fRunTag(0),
+  fReadFriends(0),
+  fFriendFileName("AliESDfriends.root")
 {
   // default constructor
 }
@@ -67,34 +70,31 @@ AliESDInputHandler::AliESDInputHandler() :
 AliESDInputHandler::~AliESDInputHandler() 
 {
   //  destructor
-  //  delete fEvent;
 }
 
 //______________________________________________________________________________
 AliESDInputHandler::AliESDInputHandler(const char* name, const char* title):
-    AliInputEventHandler(name, title), fEvent(0x0), fFriend(0x0), fAnalysisType(0),
-    fNEvents(0),  fHLTEvent(0x0), fHLTTree(0x0), fUseHLT(kFALSE), fTagCutSumm(0x0), fUseTags(kFALSE), fChainT(0), fTreeT(0), fRunTag(0)
+    AliInputEventHandler(name, title), fEvent(0x0), fFriend(0x0), fESDpid(0x0), fAnalysisType(0),
+    fNEvents(0),  fHLTEvent(0x0), fHLTTree(0x0), fUseHLT(kFALSE), fTagCutSumm(0x0), fUseTags(kFALSE), fChainT(0), fTreeT(0), fRunTag(0), fReadFriends(0), fFriendFileName("AliESDfriends.root")
 {
     // Constructor
 }
 
 Bool_t AliESDInputHandler::Init(TTree* tree,  Option_t* opt)
 {
+    //
     // Initialisation necessary for each new tree 
+    // 
     fAnalysisType = opt;
     fTree         = tree;
     
     if (!fTree) return kFALSE;
     fTree->GetEntry(0);
     
-    // Get pointer to ESD event
-    SwitchOffBranches();
-    SwitchOnBranches();
-    
+
     if (!fEvent) fEvent = new AliESDEvent();
     fEvent->ReadFromTree(fTree);
     fNEvents = fTree->GetEntries();
-    fFriend = (AliESDfriend*)(fEvent->FindListObject("AliESDfriend"));
     return kTRUE;
 }
 
@@ -121,7 +121,6 @@ Bool_t AliESDInputHandler::BeginEvent(Long64_t entry)
   //
   // Friends
   ((AliESDEvent*)fEvent)->SetESDfriend(fFriend);
-  
   return kTRUE;
 }
 
@@ -136,6 +135,31 @@ Bool_t AliESDInputHandler::Notify(const char* path)
 {
     // Notify a directory change
     AliInfo(Form("Directory change %s \n", path));
+    //
+    // Handle the friends first
+    //
+    if (!fTree->FindBranch("ESDfriend.") && fReadFriends) {
+      // Try to add ESDfriend. branch as friend
+      TString esdTreeFName, esdFriendTreeFName;    
+      esdTreeFName = (fTree->GetCurrentFile())->GetName();
+      esdFriendTreeFName = esdTreeFName;
+      esdFriendTreeFName.ReplaceAll("AliESDs.root", fFriendFileName.Data());
+      
+      TTree* cTree = fTree->GetTree();
+      if (!cTree) cTree = fTree;
+      
+      cTree->AddFriend("esdFriendTree", esdFriendTreeFName.Data());
+      cTree->SetBranchStatus("ESDfriend.", 1);
+      fFriend = (AliESDfriend*)(fEvent->FindListObject("AliESDfriend"));
+      cTree->SetBranchAddress("ESDfriend.", &fFriend);
+    } 
+    //
+    //
+    SwitchOffBranches();
+    SwitchOnBranches();
+    fFriend = (AliESDfriend*)(fEvent->FindListObject("AliESDfriend"));
+    
+
     //
     if (fUseHLT) {
        // Get HLTesdTree from current file
@@ -150,6 +174,9 @@ Bool_t AliESDInputHandler::Notify(const char* path)
        }
     }
 
+
+
+
     if (!fUseTags) return (kTRUE);
     
     Bool_t zip = kFALSE;