]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONDataInterface.cxx
- During reco from RAW, digits are no longer re-written.
[u/mrichter/AliRoot.git] / MUON / AliMUONDataInterface.cxx
index 0caf3de3e22adf6d60e37b282dc1d72db72ae7e2..de5e177c1983775bc7f386181ae53cca6664abc9 100644 (file)
 
 #include "AliMUONDataInterface.h"
 #include "AliMUONLocalTrigger.h"
+#include "AliMUONGlobalTrigger.h"
 #include "AliMUONHit.h"
 #include "AliMUONDigit.h"
 #include "AliMUONRawCluster.h"
+#include "AliMUONTrack.h"
 #include "AliLog.h"
 
+#include <iostream>
+using std::endl;
+using std::cout;
+
 
 ClassImp(AliMUONDataInterface)
 
@@ -37,11 +43,11 @@ AliMUONDataInterface::AliMUONDataInterface(const AliMUONDataInterface& rhs)
 
 AliMUONDataInterface::~AliMUONDataInterface()
 {
-// Delete the runloader when done.
+// Delete the runloader if we created it.
 // If the runloader is not to be deleted then call Reset just before 
 // the destructor is called.
 
-       if (fRunloader != NULL)
+       if (fRunloader != NULL && fCreatedRunLoader)
                delete fRunloader;
 }
 
@@ -64,6 +70,7 @@ void AliMUONDataInterface::Reset()
 // Note: No resources are released!
 // Specificaly AliRunLoader is not deleted.
 
+       fCreatedRunLoader = kFALSE;
        fRunloader = NULL;
        fMuonloader = NULL;
        fEventnumber = -1;
@@ -75,6 +82,47 @@ void AliMUONDataInterface::Reset()
        fDigitAddressSet = kFALSE;
        fClusterAddressSet = kFALSE;
        fTriggerAddressSet = kFALSE;
+       fRecTracksAddressSet = kFALSE;
+}
+
+
+Bool_t AliMUONDataInterface::UseCurrentRunLoader()
+{
+// Tries to fetch the current runloader with AliRunLoader::GetRunLoader. If nothing is
+// currently loaded then kFALSE is returned and AliMUONDataInterface is reset.
+
+       Reset();
+       fRunloader = AliRunLoader::GetRunLoader();
+       if (fRunloader == NULL) return kFALSE;
+       // Fetch the current file name, folder name and event number.
+       fFilename = fRunloader->GetFileName();
+       fFoldername = fRunloader->GetEventFolder()->GetName();
+       fEventnumber = fRunloader->GetEventNumber();
+
+       if ( ! FetchMuonLoader(fFilename.Data(), fFoldername.Data()) )
+       {
+               Reset();
+               return kFALSE;
+       }               
+
+       return kTRUE;
+}
+
+
+Bool_t AliMUONDataInterface::FetchMuonLoader(TString filename, TString foldername)
+{
+       fMuonloader = fRunloader->GetLoader("MUONLoader");
+       if (fMuonloader == NULL)
+       {
+               AliError(Form("Could not find the MUON loader in file: %s and folder: %s", 
+                       (const char*)filename, (const char*)foldername));
+               return kFALSE;
+       }
+       
+       // Need to connect the muon loader to the AliMUONData object,
+       // else class to fData will return NULL.
+       fData.SetLoader(fMuonloader);
+       return kTRUE;
 }
 
 
@@ -90,19 +138,13 @@ Bool_t AliMUONDataInterface::LoadLoaders(TString filename, TString foldername)
                        (const char*)filename, (const char*)foldername));
                return kFALSE;
        }
-       fMuonloader = fRunloader->GetLoader("MUONLoader");
-       if (fMuonloader == NULL)
+       fCreatedRunLoader = kTRUE;
+       if ( ! FetchMuonLoader(filename, foldername) )
        {
-               AliError(Form("Could not find the MUON loader in file: %s and folder: %s", 
-                       (const char*)filename, (const char*)foldername));
                fRunloader = NULL;
                return kFALSE;
        }
        
-       // Need to connect the muon loader to the AliMUONData object,
-       // else class to fData will return NULL.
-       fData.SetLoader(fMuonloader);
-       
        fFilename = filename;
        fFoldername = foldername;
        fEventnumber = -1;  // Reset the event number to force the event to be loaded.
@@ -123,6 +165,17 @@ Bool_t AliMUONDataInterface::FetchLoaders(TString filename, TString foldername)
                fRunloader = AliRunLoader::GetRunLoader();
                if (fRunloader == NULL)
                        return LoadLoaders(filename, foldername);
+               else
+               {
+                       if (fMuonloader == NULL)
+                       {
+                               if ( ! FetchMuonLoader(filename, foldername) )
+                               {
+                                       fRunloader = NULL;
+                                       return kFALSE;
+                               }
+                       }
+               }
                
                // Fetch the current file and folder names.
                fFilename = fRunloader->GetFileName();
@@ -144,6 +197,8 @@ Bool_t AliMUONDataInterface::FetchEvent(Int_t event)
 {
 // Fetch the specified event from the runloader and reset all the track, cathode
 // and address flags to force them to be reloaded.
+// If a negative event number is specified then the current runloader event
+// number is used.
 
        if (fEventnumber < 0)
        {
@@ -156,6 +211,7 @@ Bool_t AliMUONDataInterface::FetchEvent(Int_t event)
                fDigitAddressSet = kFALSE;
                fClusterAddressSet = kFALSE;
                fTriggerAddressSet = kFALSE;
+               fRecTracksAddressSet = kFALSE;
        }
        if ( event != fEventnumber )
        {
@@ -169,6 +225,7 @@ Bool_t AliMUONDataInterface::FetchEvent(Int_t event)
                fDigitAddressSet = kFALSE;
                fClusterAddressSet = kFALSE;
                fTriggerAddressSet = kFALSE;
+               fRecTracksAddressSet = kFALSE;
        }
        return kTRUE;
 }
@@ -268,27 +325,46 @@ Bool_t AliMUONDataInterface::FetchTreeD()
 
 Bool_t AliMUONDataInterface::FetchTreeR()
 {
-// Fetch the reconstructed objects tree from the current muon loader.
-// Note: The addresses must still be set. 
-
-       if (fMuonloader->TreeR() == NULL)
+  // Fetch the reconstructed objects tree from the current muon loader.
+  // Note: The addresses must still be set. 
+  
+  if (fMuonloader->TreeR() == NULL)
+    {
+      fMuonloader->LoadRecPoints("READ");
+      if (fMuonloader->TreeR() == NULL)
        {
-               fMuonloader->LoadRecPoints("READ");
-               if (fMuonloader->TreeR() == NULL)
-               {
-                       AliError("Could not load TreeR.");
-                       return kFALSE;
-               }
-               
-               // Need to reset these flags so that the cluster and trigger address
-               // gets reset after this method. 
-               fClusterAddressSet = kFALSE;
-               fTriggerAddressSet = kFALSE;
+         AliError("Could not load TreeR.");
+         return kFALSE;
        }
-       return kTRUE;
+      
+      // Need to reset these flags so that the cluster and trigger address
+      // gets reset after this method. 
+      fClusterAddressSet = kFALSE;
+      fTriggerAddressSet = kFALSE;
+    }
+  return kTRUE;
 }
 
-
+Bool_t AliMUONDataInterface::FetchTreeT()
+{
+  // fetch the reconstructed tracks tree from the current muon loader
+  // note : the addresses must still be set.
+  if (fMuonloader->TreeT() == NULL)
+    {
+      fMuonloader->LoadTracks("READ");
+      if (fMuonloader->TreeT() == NULL)
+       {
+         AliError("Could not load TreeT.");
+         return kFALSE;
+       }
+      
+      // Need to reset these flags so that the rec tracks address
+      // gets reset after this method. 
+      fRecTracksAddressSet = kFALSE;
+    }
+  return kTRUE;
+}
+  
 Int_t AliMUONDataInterface::NumberOfEvents(TString filename, TString foldername)
 {
 // Returns the number of events in the specified file/folder, and -1 on error.
@@ -536,13 +612,13 @@ Int_t AliMUONDataInterface::NumberOfLocalTriggers(TString filename, TString fold
 
        if ( ! FetchLoaders(filename, foldername) ) return -1;
        if ( ! FetchEvent(event) ) return -1;
-       if ( ! FetchTreeR() ) return -1;
+       if ( ! FetchTreeD() ) return -1;
        if ( ! fTriggerAddressSet )
        {
                // If the local trigger address in TreeR is not set yet then set it now.
                fData.SetTreeAddress("GLT");
                fData.ResetTrigger();
-               fData.GetTrigger();
+               fData.GetTriggerD();
                fTriggerAddressSet = kTRUE;
        }
        return fData.LocalTrigger()->GetEntriesFast();
@@ -558,19 +634,18 @@ AliMUONLocalTrigger* AliMUONDataInterface::LocalTrigger(
 
        if ( ! FetchLoaders(filename, foldername) ) return NULL;
        if ( ! FetchEvent(event) ) return NULL;
-       if ( ! FetchTreeR() ) return NULL;
+       if ( ! FetchTreeD() ) return NULL;
        if ( ! fTriggerAddressSet )
        {
                // If the local trigger address in TreeR is not set yet then set it now.
                fData.SetTreeAddress("GLT");
                fData.ResetTrigger();
-               fData.GetTrigger();
+               fData.GetTriggerD();
                fTriggerAddressSet = kTRUE;
        }
        return static_cast<AliMUONLocalTrigger*>( fData.LocalTrigger()->At(trigger) );
 }
 
-
 Bool_t AliMUONDataInterface::SetFile(TString filename, TString foldername)
 {
 // Set the current file and folder from which to fetch data.
@@ -916,12 +991,12 @@ Int_t AliMUONDataInterface::NumberOfLocalTriggers()
                return -1;
        }
 
-       if ( ! FetchTreeR() ) return -1;
+       if ( ! FetchTreeD() ) return -1;
        if ( ! fTriggerAddressSet )
        {
                fData.SetTreeAddress("GLT");
                fData.ResetTrigger();
-               fData.GetTrigger();
+               fData.GetTriggerD();
                fTriggerAddressSet = kTRUE;
        }
        return fData.LocalTrigger()->GetEntriesFast();
@@ -944,13 +1019,123 @@ AliMUONLocalTrigger* AliMUONDataInterface::LocalTrigger(Int_t trigger)
                return NULL;
        }
 
-       if ( ! FetchTreeR() ) return NULL;
+       if ( ! FetchTreeD() ) return NULL;
        if ( ! fTriggerAddressSet )
        {
                fData.SetTreeAddress("GLT");
                fData.ResetTrigger();
-               fData.GetTrigger();
+               fData.GetTriggerD();
                fTriggerAddressSet = kTRUE;
        }
        return static_cast<AliMUONLocalTrigger*>( fData.LocalTrigger()->At(trigger) );
 }
+
+Int_t AliMUONDataInterface::NumberOfGlobalTriggers()
+{
+  
+  // Get the number of local trigger objects in the current event.
+  // -1 is returned on error.
+  
+  if (fRunloader == NULL)
+    {
+      AliError("File not set.");
+      return -1;
+    }
+  if (fEventnumber < 0)
+    {
+      AliError("Event not chosen.");
+      return -1;
+    }
+  
+  if ( ! FetchTreeD() ) return -1;
+  if ( ! fTriggerAddressSet )
+    {
+      fData.SetTreeAddress("GLT");
+      fData.ResetTrigger();
+      fData.GetTriggerD();
+      fTriggerAddressSet = kTRUE;
+    }
+  return fData.GlobalTrigger()->GetEntriesFast();
+}
+
+AliMUONGlobalTrigger* AliMUONDataInterface::GlobalTrigger(Int_t trigger)
+{
+  // Fetch the specified local trigger object from the current event.
+  // NULL is returned on error.
+  
+  if (fRunloader == NULL)
+    {
+      AliError("File not set.");
+      return NULL;
+    }
+  if (fEventnumber < 0)
+    {
+      AliError( "Event not chosen.");
+      return NULL;
+    }
+  
+  if ( ! FetchTreeD() ) return NULL;
+  if ( ! fTriggerAddressSet )
+    {
+      fData.SetTreeAddress("GLT");
+      fData.ResetTrigger();
+      fData.GetTriggerD();
+      fTriggerAddressSet = kTRUE;
+    }
+  return static_cast<AliMUONGlobalTrigger*>( fData.GlobalTrigger()->At(trigger) );
+}
+
+Int_t AliMUONDataInterface::NumberOfRecTracks()
+{
+  // Fetch the number of reconstructed tracks from the current event.
+  // NULL is returned on error.
+  
+  if (fRunloader == NULL)
+    {
+      AliError("File not set.");
+      return -1;
+    }
+  if (fEventnumber < 0)
+    {
+      AliError( "Event not chosen.");
+      return -1;
+    }
+  
+  if ( ! FetchTreeT() ) return -1;
+  if ( ! fRecTracksAddressSet )
+    {
+      fData.SetTreeAddress("RT");
+      fData.ResetRecTracks();
+      fData.GetRecTracks();
+      fRecTracksAddressSet = kTRUE;
+    }
+  return fData.RecTracks()->GetEntriesFast();
+}
+
+AliMUONTrack* AliMUONDataInterface::RecTrack(Int_t rectrack)
+{
+  // Fetch the specified reconstructed track object from the current event.
+  // NULL is returned on error.
+  
+  if (fRunloader == NULL)
+    {
+      AliError("File not set.");
+      return NULL;
+    }
+  if (fEventnumber < 0)
+    {
+      AliError( "Event not chosen.");
+      return NULL;
+    }
+  
+  if ( ! FetchTreeT() ) return NULL;
+  if ( ! fRecTracksAddressSet )
+    {
+      fData.SetTreeAddress("RT");
+      fData.ResetRecTracks();
+      fData.GetRecTracks();
+      fRecTracksAddressSet = kTRUE;
+    }
+  return static_cast<AliMUONTrack*>( fData.RecTracks()->At(rectrack) );
+  // return (AliMUONTrack*)(fData.RecTracks()->At(rectrack));
+}