ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

#include "AliSelectorRL.h"

#include <AliLog.h>
#include "AliRunLoader.h"

#include <TTree.h>
#include <TFile.h>

// Selector base class for analysis based on whole AliRoot
// Please derive your selector-based analysis from this class, if you need to access the
// RunLoader or anything provided by it.
//
// This selector depends on the RunLoader, therefore to use it you have to have the whole AliRoot available
// The benefit is that you can use the RunLoader to access everything in the data structure
//
// The class has functions to return the stack (GetStack()), the RunLoader (GetRunLoader()), and
// the event header (GetHeader()).
//
// Author: Jan.Fiete.Grosse-Oetringhaus@cern.ch

ClassImp(AliSelectorRL)

AliSelectorRL::AliSelectorRL() :
  AliSelector(),
  fRunLoader(0),
  fKinematicsLoaded(kFALSE),
  fHeaderLoaded(kFALSE)
{
  //
  // Constructor. Initialization of pointers
  //
}

AliSelectorRL::~AliSelectorRL()
{
  //
  // Destructor
  //

  // histograms are in the output list and deleted when the output
  // list is deleted by the TSelector dtor
}

Bool_t AliSelectorRL::Notify()
{
  // Calls base class Notify
  // On top of that run loader is closed, because we change the input file

  if (AliSelector::Notify() == kFALSE)
    return kFALSE;

  DeleteRunLoader();

  return kTRUE;
}

Bool_t AliSelectorRL::Process(Long64_t entry)
{
  // Call the baseclass Process and set event number in runLoader (if loaded)

  if (AliSelector::Process(entry) == kFALSE)
    return kFALSE;

  if (fRunLoader)
  {
    if (fRunLoader->GetEvent((Int_t)entry) != 0)
      return kFALSE;
  }

  return kTRUE;
}

void AliSelectorRL::SlaveTerminate()
{
  // removes runloader

  AliSelector::SlaveTerminate();

  DeleteRunLoader();
}

AliRunLoader* AliSelectorRL::GetRunLoader()
{
  // Returns AliRun instance corresponding to current ESD active in fTree
  // Loads galice.root, the file is identified by replacing "AliESDs" to
  // "galice" in the file path of the ESD file. 

  if (!fRunLoader)
  {
    if (!fTree->GetCurrentFile())
      return 0;

    TString fileName(fTree->GetCurrentFile()->GetName());
    fileName.ReplaceAll("AliESDs", "galice");

    // temporary workaround for PROOF bug #18505
    fileName.ReplaceAll("#galice.root#galice.root", "#galice.root");

    fRunLoader = AliRunLoader::Open(fileName);
    if (!fRunLoader)
      return 0;

    fRunLoader->GetEvent((Int_t)(fTree->GetTree()->GetReadEntry()));
  }

  return fRunLoader;
}

void AliSelectorRL::DeleteRunLoader()
{
  //
  // deletes the runloader
  //

  if (fRunLoader)
  {
    fRunLoader->Delete();
    fRunLoader = 0;
  }

  fKinematicsLoaded = kFALSE;
  fHeaderLoaded = kFALSE;
}

AliHeader* AliSelectorRL::GetHeader()
{
  // Returns header retrieved from RunLoader

  AliRunLoader* runLoader = GetRunLoader();
  if (!runLoader)
    return 0;

  if (fHeaderLoaded == kFALSE)
    if (runLoader->LoadHeader() != 0)
      return 0;

  fHeaderLoaded = kTRUE;

  return runLoader->GetHeader();
}

AliStack* AliSelectorRL::GetStack()
{
  // Returns stack retrieved from RunLoader

  AliRunLoader* runLoader = GetRunLoader();
  if (!runLoader)
    return 0;

  if (fKinematicsLoaded == kFALSE)
    if (runLoader->LoadKinematics() != 0)
      return 0;

  fKinematicsLoaded = kTRUE;

  return runLoader->Stack();
}
 AliSelectorRL.cxx:1
 AliSelectorRL.cxx:2
 AliSelectorRL.cxx:3
 AliSelectorRL.cxx:4
 AliSelectorRL.cxx:5
 AliSelectorRL.cxx:6
 AliSelectorRL.cxx:7
 AliSelectorRL.cxx:8
 AliSelectorRL.cxx:9
 AliSelectorRL.cxx:10
 AliSelectorRL.cxx:11
 AliSelectorRL.cxx:12
 AliSelectorRL.cxx:13
 AliSelectorRL.cxx:14
 AliSelectorRL.cxx:15
 AliSelectorRL.cxx:16
 AliSelectorRL.cxx:17
 AliSelectorRL.cxx:18
 AliSelectorRL.cxx:19
 AliSelectorRL.cxx:20
 AliSelectorRL.cxx:21
 AliSelectorRL.cxx:22
 AliSelectorRL.cxx:23
 AliSelectorRL.cxx:24
 AliSelectorRL.cxx:25
 AliSelectorRL.cxx:26
 AliSelectorRL.cxx:27
 AliSelectorRL.cxx:28
 AliSelectorRL.cxx:29
 AliSelectorRL.cxx:30
 AliSelectorRL.cxx:31
 AliSelectorRL.cxx:32
 AliSelectorRL.cxx:33
 AliSelectorRL.cxx:34
 AliSelectorRL.cxx:35
 AliSelectorRL.cxx:36
 AliSelectorRL.cxx:37
 AliSelectorRL.cxx:38
 AliSelectorRL.cxx:39
 AliSelectorRL.cxx:40
 AliSelectorRL.cxx:41
 AliSelectorRL.cxx:42
 AliSelectorRL.cxx:43
 AliSelectorRL.cxx:44
 AliSelectorRL.cxx:45
 AliSelectorRL.cxx:46
 AliSelectorRL.cxx:47
 AliSelectorRL.cxx:48
 AliSelectorRL.cxx:49
 AliSelectorRL.cxx:50
 AliSelectorRL.cxx:51
 AliSelectorRL.cxx:52
 AliSelectorRL.cxx:53
 AliSelectorRL.cxx:54
 AliSelectorRL.cxx:55
 AliSelectorRL.cxx:56
 AliSelectorRL.cxx:57
 AliSelectorRL.cxx:58
 AliSelectorRL.cxx:59
 AliSelectorRL.cxx:60
 AliSelectorRL.cxx:61
 AliSelectorRL.cxx:62
 AliSelectorRL.cxx:63
 AliSelectorRL.cxx:64
 AliSelectorRL.cxx:65
 AliSelectorRL.cxx:66
 AliSelectorRL.cxx:67
 AliSelectorRL.cxx:68
 AliSelectorRL.cxx:69
 AliSelectorRL.cxx:70
 AliSelectorRL.cxx:71
 AliSelectorRL.cxx:72
 AliSelectorRL.cxx:73
 AliSelectorRL.cxx:74
 AliSelectorRL.cxx:75
 AliSelectorRL.cxx:76
 AliSelectorRL.cxx:77
 AliSelectorRL.cxx:78
 AliSelectorRL.cxx:79
 AliSelectorRL.cxx:80
 AliSelectorRL.cxx:81
 AliSelectorRL.cxx:82
 AliSelectorRL.cxx:83
 AliSelectorRL.cxx:84
 AliSelectorRL.cxx:85
 AliSelectorRL.cxx:86
 AliSelectorRL.cxx:87
 AliSelectorRL.cxx:88
 AliSelectorRL.cxx:89
 AliSelectorRL.cxx:90
 AliSelectorRL.cxx:91
 AliSelectorRL.cxx:92
 AliSelectorRL.cxx:93
 AliSelectorRL.cxx:94
 AliSelectorRL.cxx:95
 AliSelectorRL.cxx:96
 AliSelectorRL.cxx:97
 AliSelectorRL.cxx:98
 AliSelectorRL.cxx:99
 AliSelectorRL.cxx:100
 AliSelectorRL.cxx:101
 AliSelectorRL.cxx:102
 AliSelectorRL.cxx:103
 AliSelectorRL.cxx:104
 AliSelectorRL.cxx:105
 AliSelectorRL.cxx:106
 AliSelectorRL.cxx:107
 AliSelectorRL.cxx:108
 AliSelectorRL.cxx:109
 AliSelectorRL.cxx:110
 AliSelectorRL.cxx:111
 AliSelectorRL.cxx:112
 AliSelectorRL.cxx:113
 AliSelectorRL.cxx:114
 AliSelectorRL.cxx:115
 AliSelectorRL.cxx:116
 AliSelectorRL.cxx:117
 AliSelectorRL.cxx:118
 AliSelectorRL.cxx:119
 AliSelectorRL.cxx:120
 AliSelectorRL.cxx:121
 AliSelectorRL.cxx:122
 AliSelectorRL.cxx:123
 AliSelectorRL.cxx:124
 AliSelectorRL.cxx:125
 AliSelectorRL.cxx:126
 AliSelectorRL.cxx:127
 AliSelectorRL.cxx:128
 AliSelectorRL.cxx:129
 AliSelectorRL.cxx:130
 AliSelectorRL.cxx:131
 AliSelectorRL.cxx:132
 AliSelectorRL.cxx:133
 AliSelectorRL.cxx:134
 AliSelectorRL.cxx:135
 AliSelectorRL.cxx:136
 AliSelectorRL.cxx:137
 AliSelectorRL.cxx:138
 AliSelectorRL.cxx:139
 AliSelectorRL.cxx:140
 AliSelectorRL.cxx:141
 AliSelectorRL.cxx:142
 AliSelectorRL.cxx:143
 AliSelectorRL.cxx:144
 AliSelectorRL.cxx:145
 AliSelectorRL.cxx:146
 AliSelectorRL.cxx:147
 AliSelectorRL.cxx:148
 AliSelectorRL.cxx:149
 AliSelectorRL.cxx:150
 AliSelectorRL.cxx:151
 AliSelectorRL.cxx:152
 AliSelectorRL.cxx:153
 AliSelectorRL.cxx:154
 AliSelectorRL.cxx:155
 AliSelectorRL.cxx:156
 AliSelectorRL.cxx:157
 AliSelectorRL.cxx:158
 AliSelectorRL.cxx:159
 AliSelectorRL.cxx:160
 AliSelectorRL.cxx:161
 AliSelectorRL.cxx:162
 AliSelectorRL.cxx:163
 AliSelectorRL.cxx:164
 AliSelectorRL.cxx:165
 AliSelectorRL.cxx:166
 AliSelectorRL.cxx:167
 AliSelectorRL.cxx:168
 AliSelectorRL.cxx:169
 AliSelectorRL.cxx:170
 AliSelectorRL.cxx:171
 AliSelectorRL.cxx:172
 AliSelectorRL.cxx:173
 AliSelectorRL.cxx:174