]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliRunLoader.cxx
Coverity 16571
[u/mrichter/AliRoot.git] / STEER / AliRunLoader.cxx
index 5250242ac36d62647d7238512f6c3c9caa2e9379..3ebc988d3961d455db6a7873d8fe6d96100c0d50 100644 (file)
@@ -49,7 +49,6 @@
 #include <TBranch.h>
 #include <TFile.h>
 #include <TFolder.h>
-#include <TGeometry.h>
 #include <TObjArray.h>
 #include <TString.h>
 class TTask;
@@ -87,6 +86,7 @@ const TString AliRunLoader::fgkDefaultTriggerFileName("Trigger.root");
 AliRunLoader::AliRunLoader():
  fLoaders(0x0),
  fEventFolder(0x0),
+ fRun(-1),
  fCurrentEvent(0),
  fGAFile(0x0),
  fHeader(0x0),
@@ -95,6 +95,7 @@ AliRunLoader::AliRunLoader():
  fKineDataLoader(0x0),
  fTrackRefsDataLoader(0x0),
  fNEventsPerFile(1),
+ fNEventsPerRun(0),
  fUnixDirName(".")
 {
   AliConfig::Instance();//force to build the folder structure
@@ -106,6 +107,7 @@ AliRunLoader::AliRunLoader(const char* eventfoldername):
  TNamed(fgkRunLoaderName,fgkRunLoaderName),
  fLoaders(new TObjArray()),
  fEventFolder(0x0),
+ fRun(-1),
  fCurrentEvent(0),
  fGAFile(0x0),
  fHeader(0x0),
@@ -114,6 +116,7 @@ AliRunLoader::AliRunLoader(const char* eventfoldername):
  fKineDataLoader(new AliDataLoader(fgkDefaultKineFileName,fgkKineContainerName,"Kinematics")),
  fTrackRefsDataLoader(new AliDataLoader(fgkDefaultTrackRefsFileName,fgkTrackRefsContainerName,"Track References")),
  fNEventsPerFile(1),
+ fNEventsPerRun(0),
  fUnixDirName(".")
 {
 //ctor
@@ -122,35 +125,14 @@ AliRunLoader::AliRunLoader(const char* eventfoldername):
 }
 /**************************************************************************/
 
-AliRunLoader::AliRunLoader(const AliRunLoader &rl):
- TNamed(rl),
- fLoaders(0x0),
- fEventFolder(0x0),
- fCurrentEvent(0),
- fGAFile(0x0),
- fHeader(0x0),
- fStack(0x0),
- fCTrigger(0x0),
- fKineDataLoader(0x0),
- fTrackRefsDataLoader(0x0),
- fNEventsPerFile(0),
- fUnixDirName(".")
-{
-  //
-  // Copy ctor
-  //
-  rl.Copy(*this);
-}
-/**************************************************************************/
-
 AliRunLoader::~AliRunLoader()
 {
 //dtor
-  if (fgRunLoader == this) fgRunLoader = 0x0;
+
   
   UnloadHeader();
   UnloadgAlice();
-  
+  if (fgRunLoader == this) fgRunLoader = 0x0;  
   if(fLoaders) {
     fLoaders->SetOwner();
     delete fLoaders;
@@ -164,7 +146,6 @@ AliRunLoader::~AliRunLoader()
   
   //fEventFolder is deleted by the way of removing - TopAliceFolder owns it
   if( fCTrigger ) delete  fCTrigger;
-  delete fHeader;
   delete fStack;
   delete fGAFile;
 }
@@ -174,6 +155,7 @@ AliRunLoader::AliRunLoader(TFolder* topfolder):
  TNamed(fgkRunLoaderName,fgkRunLoaderName),
  fLoaders(new TObjArray()),
  fEventFolder(topfolder),
+ fRun(-1),
  fCurrentEvent(0),
  fGAFile(0x0),
  fHeader(0x0),
@@ -182,6 +164,7 @@ AliRunLoader::AliRunLoader(TFolder* topfolder):
  fKineDataLoader(new AliDataLoader(fgkDefaultKineFileName,fgkKineContainerName,"Kinematics")),
  fTrackRefsDataLoader(new AliDataLoader(fgkDefaultTrackRefsFileName,fgkTrackRefsContainerName,"Track References")),
  fNEventsPerFile(1),
+ fNEventsPerRun(0),
  fUnixDirName(".")
 {
 //ctor
@@ -210,12 +193,7 @@ AliRunLoader::AliRunLoader(TFolder* topfolder):
  fEventFolder->Add(this);//put myself to the folder to accessible for all
   
 }
-/**************************************************************************/
 
-void AliRunLoader::Copy(TObject &) const 
-{
-  AliFatal("Not implemented");
-}
 /**************************************************************************/
 
 Int_t AliRunLoader::GetEvent(Int_t evno)
@@ -261,15 +239,6 @@ Int_t AliRunLoader::GetEvent(Int_t evno)
   //Reload stack (If header was loaded)
   if (TreeE()) fStack = GetHeader()->Stack();
   //Set event folder in stack (it does not mean that we read kinematics from file)
-  if (fStack) 
-   { 
-     fStack->SetEventFolderName(fEventFolder->GetName());
-   }
-  else
-   {
-     AliWarning("Stack not found in header");
-   }
-
    if( GetTrigger() && TreeCT() ) {
       retval = TreeCT()->GetEvent(fCurrentEvent);
       if ( retval < 0 )      {
@@ -303,6 +272,8 @@ Int_t AliRunLoader::GetEvent(Int_t evno)
 
   if (fStack && fKineDataLoader->GetBaseLoader(0)->IsLoaded())
     {
+       fStack->ConnectTree(TreeK());
+       
       if (fStack->GetEvent() == kFALSE)
        {
          AliError(Form("Error occured while GetEvent for Stack. Event %d",evno));
@@ -568,8 +539,10 @@ void AliRunLoader::MakeHeader()
         fStack = fHeader->Stack(); //should be safe - if we created Stack, header returns pointer to the same object
         if (fStack)
          {
-           fStack->SetEventFolderName(fEventFolder->GetName());
-           if (TreeK()) fStack->GetEvent();
+           if (TreeK()) {
+              fStack->ConnectTree(TreeK());
+              fStack->GetEvent();
+          }
          }
         else
         {
@@ -587,7 +560,6 @@ void AliRunLoader::MakeStack()
   if(fStack == 0x0)
    { 
      fStack = new AliStack(10000);
-     fStack->SetEventFolderName(fEventFolder->GetName());
    }
 }
 /**************************************************************************/
@@ -616,21 +588,23 @@ void AliRunLoader::MakeTree(Option_t *option)
   const char *oK  = strstr(option,"K");  //Kine
   const char *oE  = strstr(option,"E");  //Header
   const char *oGG = strstr(option,"GG"); //Central TriGGer
-
-  if(oK && !TreeK())
-   
-     if (fKineDataLoader->GetBaseLoader(0)->IsLoaded() == kFALSE)
+  
+  if(oK)
+  { 
+      if (fKineDataLoader->GetBaseLoader(0)->IsLoaded() == kFALSE)
       {
-        AliError("Load Kinematics first");
+         AliError("Load Kinematics first");
       }
-     else
+      else
       {
-        fKineDataLoader->MakeTree();
-        MakeStack();
-        fStack->ConnectTree();
-        WriteKinematics("OVERWRITE");
-     }
-   }
+         if (!TreeK()) {
+             fKineDataLoader->MakeTree();
+             MakeStack();
+         } 
+         fStack->ConnectTree(TreeK());
+         WriteKinematics("OVERWRITE");
+      }
+  } // TreeK
   
   if(oE && !TreeE())
    { 
@@ -646,7 +620,9 @@ void AliRunLoader::MakeTree(Option_t *option)
       // create the CTP Trigger output file and tree
       TFile* file = gROOT->GetFile( fgkDefaultTriggerFileName );
       if( !file ) {
-         file = TFile::Open( gSystem->ConcatFileName( fUnixDirName.Data(), fgkDefaultTriggerFileName.Data() ), "RECREATE" ) ;
+        char* tmp = gSystem->ConcatFileName( fUnixDirName.Data(), fgkDefaultTriggerFileName.Data() );
+        file = TFile::Open(tmp , "RECREATE" ) ;
+        delete[] tmp;
       }
 
       file->cd();
@@ -743,9 +719,10 @@ Int_t AliRunLoader::LoadHeader()
 Int_t AliRunLoader::LoadTrigger(Option_t* option)
 {
    //Load treeCT
-
+   static Bool_t warned = kFALSE;
    if( TreeCT() ) {
-      AliWarning("Trigger is already loaded. Nothing done");
+      if (!warned) AliWarning("Trigger is already loaded. Nothing done. Message will not be repeated.");
+      warned = kTRUE;
       return 0;
    }
  
@@ -754,8 +731,11 @@ Int_t AliRunLoader::LoadTrigger(Option_t* option)
       return 1;
    }
    // get the CTP Trigger output file and tree
-   TString trgfile = gSystem->ConcatFileName( fUnixDirName.Data(),
-                                              fgkDefaultTriggerFileName.Data() );
+  char* tmp = gSystem->ConcatFileName( fUnixDirName.Data(),
+                                      fgkDefaultTriggerFileName.Data() );
+  TString trgfile(tmp);
+  delete[] tmp;
+  
    TFile* file = gROOT->GetFile( trgfile );
    if( !file ) {
       file = TFile::Open( trgfile, option ) ;
@@ -795,7 +775,8 @@ Int_t AliRunLoader::LoadKinematics(Option_t* option)
   }
  if (fStack) 
   {
-    retval = fStack->GetEvent();
+      fStack->ConnectTree(TreeK());
+      retval = fStack->GetEvent();
     if ( retval == kFALSE)
      {
        AliError("Error occured while loading kinamatics tree.");
@@ -917,21 +898,6 @@ AliRun* AliRunLoader::GetAliRun() const
 }
 /**************************************************************************/
 
-Int_t AliRunLoader::WriteGeometry(Option_t* /*opt*/)
-{
-//writes geometry to the file
-  fGAFile->cd();
-  TGeometry* geo = GetAliRun()->GetGeometry();
-  if (geo == 0x0)
-   {
-     AliError("Can not get geometry from gAlice");
-     return 1;
-   }
-  geo->Write();
-  return 0;
-}
-/**************************************************************************/
-
 Int_t AliRunLoader::WriteHeader(Option_t* opt)
 {
 //writes treeE
@@ -1189,7 +1155,6 @@ Int_t AliRunLoader::SetEventFolderName(const TString& name)
   fEventFolder = AliConfig::Instance()->BuildEventFolder(name,"Event Folder");
   fEventFolder->Add(this);//put myself to the folder to accessible for all
   
-  if (Stack()) Stack()->SetEventFolderName(fEventFolder->GetName());
   TIter next(fLoaders);
   AliLoader *loader;
   while((loader = (AliLoader*)next()))
@@ -1697,7 +1662,7 @@ AliLoader* AliRunLoader::GetDetectorLoader(const char* detname)
 //run loader object
   
   char loadername[256];
-  sprintf(loadername, "%sLoader", detname);
+  snprintf(loadername, 255, "%sLoader", detname);
   AliLoader* loader = GetLoader(loadername);
   if (!loader) {
     AliError(Form("No loader for %s found", detname));
@@ -1856,13 +1821,13 @@ void AliRunLoader::GetListOfDetectors(const char * namelist,TObjArray& pointerar
   
    char buff[10];
    char dets [200];
-   strcpy(dets,namelist);//compiler cries when char* = const Option_t*;
-   dets[strlen(dets)+1] = '\n';//set endl at the end of string 
+   strncpy(dets,namelist,199);//compiler cries when char* = const Option_t*;
+   //   dets[strlen(dets)+1] = '\n';//set endl at the end of string 
    char* pdet = dets;
    Int_t tmp;
    for(;;)
     {
-      tmp = sscanf(pdet,"%s",buff);//read the string from the input string pdet into buff
+      tmp = sscanf(pdet,"%9s",buff);//read the string from the input string pdet into buff
       if ( (buff[0] == 0) || (tmp == 0) ) break; //if not read
      
       pdet = strstr(pdet,buff) + strlen(buff);//move the input pointer about number of bytes (letters) read
@@ -1999,7 +1964,6 @@ void AliRunLoader::UnloadHeader()
  //removes TreeE from folder and deletes it
  // as well as fHeader object
  CleanHeader();
- delete fHeader;
  fHeader = 0x0;
 }
 /**************************************************************************/