]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDInput.cxx
Removal of effc++ warnings
[u/mrichter/AliRoot.git] / FMD / AliFMDInput.cxx
index 49f6ff46f09a975b809a750ba1ba5808cfdff842..a8facd7819a7af66cc93290c549a346044dd0e0a 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-
 /* $Id$ */
-
+/** @file    AliFMDInput.cxx
+    @author  Christian Holm Christensen <cholm@nbi.dk>
+    @date    Mon Mar 27 12:42:40 2006
+    @brief   FMD utility classes for reading FMD data
+*/
 //___________________________________________________________________
 //
 // The classes defined here, are utility classes for reading in data
 #include "AliRunLoader.h"       // ALIRUNLOADER_H
 #include "AliRun.h"             // ALIRUN_H
 #include "AliStack.h"           // ALISTACK_H
+#include "AliRawReaderFile.h"   // ALIRAWREADERFILE_H
 #include "AliFMD.h"             // ALIFMD_H
 #include "AliFMDHit.h"         // ALIFMDHIT_H
 #include "AliFMDDigit.h"       // ALIFMDDigit_H
-#include "AliFMDMultStrip.h"   // ALIFMDMultStrip_H
-#include "AliFMDMultRegion.h"  // ALIFMDMultRegion_H
+#include "AliFMDSDigit.h"      // ALIFMDDigit_H
+#include "AliFMDRecPoint.h"    // ALIFMDRECPOINT_H
+#include "AliFMDRawReader.h"    // ALIFMDRAWREADER_H
+#include <AliESD.h>
+#include <AliESDFMD.h>
+#include <AliCDBManager.h>
+#include <AliCDBEntry.h>
+#include <AliAlignObjAngles.h>
 #include <TTree.h>              // ROOT_TTree
+#include <TChain.h>             // ROOT_TChain
 #include <TParticle.h>          // ROOT_TParticle
 #include <TString.h>            // ROOT_TString
 #include <TDatabasePDG.h>       // ROOT_TDatabasePDG
 #include <TMath.h>              // ROOT_TMath
 #include <TGeoManager.h>        // ROOT_TGeoManager 
+#include <TSystemDirectory.h>   // ROOT_TSystemDirectory
 #include <Riostream.h>         // ROOT_Riostream
 
 //____________________________________________________________________
@@ -58,18 +70,24 @@ AliFMDInput::AliFMDInput()
     fRun(0), 
     fStack(0),
     fFMDLoader(0), 
+    fReader(0),
     fFMD(0),
+    fMainESD(0),
+    fESD(0),
     fTreeE(0),
     fTreeH(0),
     fTreeD(0),
     fTreeS(0),
     fTreeR(0), 
+    fTreeA(0), 
+    fChainE(0),
     fArrayE(0),
     fArrayH(0),
     fArrayD(0),
     fArrayS(0), 
-    fArrayN(0), 
-    fArrayP(0), 
+    fArrayR(0), 
+    fArrayA(0), 
+    fGeoManager(0),
     fTreeMask(0), 
     fIsInit(kFALSE)
 {
@@ -88,18 +106,24 @@ AliFMDInput::AliFMDInput(const char* gAliceFile)
     fRun(0), 
     fStack(0),
     fFMDLoader(0), 
+    fReader(0),
     fFMD(0),
+    fMainESD(0),
+    fESD(0),
     fTreeE(0),
     fTreeH(0),
     fTreeD(0),
     fTreeS(0),
     fTreeR(0), 
+    fTreeA(0), 
+    fChainE(0),
     fArrayE(0),
     fArrayH(0),
     fArrayD(0),
     fArrayS(0), 
-    fArrayN(0), 
-    fArrayP(0), 
+    fArrayR(0), 
+    fArrayA(0), 
+    fGeoManager(0),
     fTreeMask(0), 
     fIsInit(kFALSE)
 {
@@ -160,6 +184,31 @@ AliFMDInput::Init()
   }
   fTreeE = fLoader->TreeE();
 
+  // Optionally, get the ESD files
+  if (TESTBIT(fTreeMask, kESD)) {
+    fChainE = new TChain("esdTree");
+    TSystemDirectory dir(".",".");
+    TList*           files = dir.GetListOfFiles();
+    TSystemFile*     file = 0;
+    if (!files) {
+      AliError("No files");
+      return kFALSE;
+    }
+    files->Sort();
+    TIter            next(files);
+    while ((file = static_cast<TSystemFile*>(next()))) {
+      TString fname(file->GetName());
+      if (fname.Contains("AliESDs")) fChainE->AddFile(fname.Data());
+    }
+    fChainE->SetBranchAddress("ESD", &fMainESD);
+  }
+    
+  if (TESTBIT(fTreeMask, kRaw)) {
+    AliInfo("Getting FMD raw data digits");
+    fArrayA = new TClonesArray("AliFMDDigit");
+    fReader = new AliRawReaderFile(-1);
+  }
+  
   // Optionally, get the geometry 
   if (TESTBIT(fTreeMask, kGeometry)) {
     TString fname(fRun->GetGeometryFileName());
@@ -173,7 +222,27 @@ AliFMDInput::Init()
       Fatal("Init", "No geometry manager found");
       return kFALSE;
     }
+    AliCDBManager* cdb   = AliCDBManager::Instance();
+    AliCDBEntry*   align = cdb->Get("FMD/Align/Data");
+    if (align) {
+      AliInfo("Got alignment data from CDB");
+      TClonesArray* array = dynamic_cast<TClonesArray*>(align->GetObject());
+      if (!array) {
+       AliWarning("Invalid align data from CDB");
+      }
+      else {
+       Int_t nAlign = array->GetEntries();
+       for (Int_t i = 0; i < nAlign; i++) {
+         AliAlignObjAngles* a = static_cast<AliAlignObjAngles*>(array->At(i));
+         if (!a->ApplyToGeometry()) {
+           AliWarning(Form("Failed to apply alignment to %s", 
+                           a->GetVolPath()));
+         }
+       }
+      }
+    }
   }
+
   
   fIsInit = kTRUE;
   return fIsInit;
@@ -229,91 +298,63 @@ AliFMDInput::Begin(Int_t event)
     AliInfo("Getting FMD reconstructed points");
     if (fFMDLoader->LoadRecPoints()) return kFALSE;
     fTreeR = fFMDLoader->TreeR();
-    if (!fArrayN) fArrayN = new TClonesArray("AliFMDMultStrip");
-    // if (!fArrayP) fArrayP = new TClonesArray("AliFMDMultRegion");
-    fTreeR->SetBranchAddress("FMD",  &fArrayN);
-    // fTreeR->SetBranchAddress("FMDPoisson", &fArrayP);
+    if (!fArrayR) fArrayR = new TClonesArray("AliFMDRecPoint");
+    fTreeR->SetBranchAddress("FMD",  &fArrayR);
+  }  // Possibly load FMD ESD information 
+  if (TESTBIT(fTreeMask, kESD)) {
+    AliInfo("Getting FMD event summary data");
+    Int_t read = fChainE->GetEntry(event);
+    if (read <= 0) return kFALSE;
+    fESD = fMainESD->GetFMDData();
+    if (!fESD) return kFALSE;
   }
+  // Possibly load FMD Digit information 
+  if (TESTBIT(fTreeMask, kRaw)) {
+    AliInfo("Getting FMD raw data digits");
+    if (!fReader->NextEvent()) return kFALSE;
+    AliFMDRawReader r(fReader, 0);
+    fArrayA->Clear();
+    r.ReadAdcs(fArrayA);
+  }
+  
   return kTRUE;
 }
 
+
 //____________________________________________________________________
-Bool_t
-AliFMDInput::End()
+Bool_t 
+AliFMDInput::Event()
 {
-  // Called at the end of each event.  Per default, it unloads the
-  // data trees and resets the pointers to the output arrays.   Users
-  // can overload this, but should call this member function in the
-  // overloaded member function of the derived class. 
-
-  // Check if we have been initialized
-  if (!fIsInit) { 
-    AliError("Not initialized");
-    return fIsInit;
-  }
-  // Possibly unload global kinematics information 
-  if (TESTBIT(fTreeMask, kKinematics)) {
-    fLoader->UnloadKinematics();
-    // fTreeK = 0;
-    fStack = 0;
-  }
-  // Possibly unload FMD Hit information 
-  if (TESTBIT(fTreeMask, kHits)) {
-    fFMDLoader->UnloadHits();
-    fTreeH = 0;
-  }
-  // Possibly unload FMD Digit information 
-  if (TESTBIT(fTreeMask, kDigits)) {
-    fFMDLoader->UnloadDigits();
-    fTreeD = 0;
-  }
-  // Possibly unload FMD Sdigit information 
-  if (TESTBIT(fTreeMask, kSDigits)) {
-    fFMDLoader->UnloadSDigits();
-    fTreeS = 0;
-  }
-  // Possibly unload FMD RecPoints information 
-  if (TESTBIT(fTreeMask, kRecPoints)) {
-    fFMDLoader->UnloadRecPoints();
-    fTreeR = 0;
-  }
-  AliInfo("Now out event");
+  // Process one event.  The default implementation one or more of 
+  //
+  //   -  ProcessHits       if the hits are loaded. 
+  //   -  ProcessDigits     if the digits are loaded. 
+  //   -  ProcessSDigits    if the sumbable digits are loaded. 
+  //   -  ProcessRecPoints  if the reconstructed points are loaded. 
+  //   -  ProcessESD        if the event summary data is loaded
+  // 
+  if (TESTBIT(fTreeMask, kHits)) 
+    if (!ProcessHits()) return kFALSE; 
+  if (TESTBIT(fTreeMask, kDigits)) 
+    if (!ProcessDigits()) return kFALSE;
+  if (TESTBIT(fTreeMask, kSDigits)) 
+    if (!ProcessSDigits()) return kFALSE;
+  if (TESTBIT(fTreeMask, kRaw)) 
+    if (!ProcessRawDigits()) return kFALSE;
+  if (TESTBIT(fTreeMask, kRecPoints)) 
+    if (!ProcessRecPoints()) return kFALSE;
+  if (TESTBIT(fTreeMask, kESD))
+    if (!ProcessESD(fESD)) return kFALSE;
+  
   return kTRUE;
 }
 
 //____________________________________________________________________
-Bool_t
-AliFMDInput::Run()
-{
-  // Run over all events and files references in galice.root 
-
-  Bool_t retval;
-  if (!(retval = Init())) return retval;
-
-  Int_t nEvents = NEvents();
-  for (Int_t event = 0; event < nEvents; event++) {
-    if (!(retval = Begin(event))) break;
-    if (!(retval = Event())) break;
-    if (!(retval = End())) break;
-  }
-  if (!retval) return retval;
-  retval = Finish();
-  return retval;
-}
-
-//====================================================================
-ClassImp(AliFMDInputHits)
-#if 0
-  ;
-#endif
-
-Bool_t
-AliFMDInputHits::Event()
+Bool_t 
+AliFMDInput::ProcessHits()
 {
   // Read the hit tree, and pass each hit to the member function
-  // ProcessHit.  Optionally, if the user said `AddLoad(kKinematics)'
-  // the track corresponding to the hit will also be passed to the
-  // ProcessHit member function of the derived class.
+  // ProcessHit.
   if (!fTreeH) {
     AliError("No hit tree defined");
     return kFALSE;
@@ -342,14 +383,9 @@ AliFMDInputHits::Event()
   return kTRUE;
 }
 
-//====================================================================
-ClassImp(AliFMDInputDigits)
-#if 0
-  ;
-#endif
-
-Bool_t
-AliFMDInputDigits::Event()
+//____________________________________________________________________
+Bool_t 
+AliFMDInput::ProcessDigits()
 {
   // Read the digit tree, and pass each digit to the member function
   // ProcessDigit.
@@ -368,14 +404,9 @@ AliFMDInputDigits::Event()
   return kTRUE;
 }
 
-//====================================================================
-ClassImp(AliFMDInputSDigits)
-#if 0
-  ;
-#endif
-
-Bool_t
-AliFMDInputSDigits::Event()
+//____________________________________________________________________
+Bool_t 
+AliFMDInput::ProcessSDigits()
 {
   // Read the summable digit tree, and pass each sumable digit to the
   // member function ProcessSdigit.
@@ -394,39 +425,106 @@ AliFMDInputSDigits::Event()
   return kTRUE;
 }
 
-//====================================================================
-ClassImp(AliFMDInputRecPoints)
-#if 0
-  ;
-#endif
+//____________________________________________________________________
+Bool_t 
+AliFMDInput::ProcessRawDigits()
+{
+  // Read the digit tree, and pass each digit to the member function
+  // ProcessDigit.
+  Int_t nDigit = fArrayA->GetEntries();
+  if (nDigit <= 0) return kTRUE;
+  for (Int_t j = 0; j < nDigit; j++) {
+    AliFMDDigit* digit = static_cast<AliFMDDigit*>(fArrayA->At(j));
+    if (!digit) continue;
+    if (!ProcessRawDigit(digit)) return kFALSE;
+  }    
+  return kTRUE;
+}
 
-Bool_t
-AliFMDInputRecPoints::Event()
+//____________________________________________________________________
+Bool_t 
+AliFMDInput::ProcessRecPoints()
 {
   // Read the reconstrcted points tree, and pass each reconstruction
-  // object to either ProcessStrip (for AliFMDMultStrip objects), or 
-  // ProcessRegion (for AliFMDMultRegion objects).
+  // object (AliFMDRecPoint) to either ProcessRecPoint.
   Int_t nEv = fTreeR->GetEntries();
   for (Int_t i = 0; i < nEv; i++) {
     Int_t recRead  = fTreeR->GetEntry(i);
     if (recRead <= 0) continue;
-    Int_t nRecStrip = fArrayN->GetEntries();
-    for (Int_t j = 0; j < nRecStrip; j++) {
-      AliFMDMultStrip* strip = static_cast<AliFMDMultStrip*>(fArrayN->At(j));
-      if (!strip) continue;
-      if (!ProcessStrip(strip)) return kFALSE;
-    }    
-    Int_t nRecRegion = fArrayP->GetEntries();
-    for (Int_t j = 0; j < nRecRegion; j++) {
-      AliFMDMultRegion* region =static_cast<AliFMDMultRegion*>(fArrayP->At(j));
-      if (!region) continue;
-      if (!ProcessRegion(region)) return kFALSE;
+    Int_t nRecPoint = fArrayR->GetEntries();
+    for (Int_t j = 0; j < nRecPoint; j++) {
+      AliFMDRecPoint* recPoint = static_cast<AliFMDRecPoint*>(fArrayR->At(j));
+      if (!recPoint) continue;
+      if (!ProcessRecPoint(recPoint)) return kFALSE;
     }    
   }
   return kTRUE;
 }
 
-    
+//____________________________________________________________________
+Bool_t
+AliFMDInput::End()
+{
+  // Called at the end of each event.  Per default, it unloads the
+  // data trees and resets the pointers to the output arrays.   Users
+  // can overload this, but should call this member function in the
+  // overloaded member function of the derived class. 
+
+  // Check if we have been initialized
+  if (!fIsInit) { 
+    AliError("Not initialized");
+    return fIsInit;
+  }
+  // Possibly unload global kinematics information 
+  if (TESTBIT(fTreeMask, kKinematics)) {
+    fLoader->UnloadKinematics();
+    // fTreeK = 0;
+    fStack = 0;
+  }
+  // Possibly unload FMD Hit information 
+  if (TESTBIT(fTreeMask, kHits)) {
+    fFMDLoader->UnloadHits();
+    fTreeH = 0;
+  }
+  // Possibly unload FMD Digit information 
+  if (TESTBIT(fTreeMask, kDigits)) {
+    fFMDLoader->UnloadDigits();
+    fTreeD = 0;
+  }
+  // Possibly unload FMD Sdigit information 
+  if (TESTBIT(fTreeMask, kSDigits)) {
+    fFMDLoader->UnloadSDigits();
+    fTreeS = 0;
+  }
+  // Possibly unload FMD RecPoints information 
+  if (TESTBIT(fTreeMask, kRecPoints)) {
+    fFMDLoader->UnloadRecPoints();
+    fTreeR = 0;
+  }
+  AliInfo("Now out event");
+  return kTRUE;
+}
+
+//____________________________________________________________________
+Bool_t
+AliFMDInput::Run()
+{
+  // Run over all events and files references in galice.root 
+
+  Bool_t retval;
+  if (!(retval = Init())) return retval;
+
+  Int_t nEvents = NEvents();
+  for (Int_t event = 0; event < nEvents; event++) {
+    if (!(retval = Begin(event))) break;
+    if (!(retval = Event())) break;
+    if (!(retval = End())) break;
+  }
+  if (!retval) return retval;
+  retval = Finish();
+  return retval;
+}
+
 
 //____________________________________________________________________
 //