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 <TChain.h>
#include <TFile.h>
 
#include "AliTender.h"
#include "AliTenderSupply.h"
#include "AliAnalysisManager.h"
#include "AliCDBManager.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliLog.h"


ClassImp(AliTender)

//______________________________________________________________________________
AliTender::AliTender():
           AliAnalysisTaskSE(),
           fRun(0),
           fRunChanged(kFALSE),
           fCDBkey(0),
           fDefaultStorage(),
           fCDB(NULL),
           fESDhandler(NULL),
           fESD(NULL),
           fSupplies(NULL),
           fCDBSettings(NULL)
{
// Dummy constructor
}

//______________________________________________________________________________
AliTender::AliTender(const char* name):
           AliAnalysisTaskSE(name),
           fRun(0),
           fRunChanged(kFALSE),
           fCDBkey(0),
           fDefaultStorage(),
           fCDB(NULL),
           fESDhandler(NULL),
           fESD(NULL),
           fSupplies(NULL),
           fCDBSettings(NULL)
{
// Default constructor
  DefineOutput(1,  AliESDEvent::Class());
}

//______________________________________________________________________________
AliTender::~AliTender()
{
// Destructor
  if (fSupplies) {
    fSupplies->Delete();
    delete fSupplies;
  }
}

//______________________________________________________________________________
void AliTender::AddSupply(AliTenderSupply *supply)
{
// Addition of supplies.
  if (!fSupplies) fSupplies = new TObjArray();
  if (fSupplies->FindObject(supply)) {
     Error("AddSupply", "Tender supply %s already connected.", supply->GetName());
     return;
  }   
  fSupplies->Add(supply);
  supply->SetTender(this);
}
   
//______________________________________________________________________________
void AliTender::ConnectInputData(Option_t* option)
{
// Connect the input data, create CDB manager.
  if (fDebug > 1) Printf("AliTender::ConnectInputData()\n");
  
  if (!fESDhandler) { 
    AliAnalysisTaskSE::ConnectInputData(option);
    fESDhandler = dynamic_cast<AliESDInputHandler *>(fInputHandler);
  }
  
  if (fESDhandler) {
     fESD = fESDhandler->GetEvent();
  } else {
     AliFatal("No ESD input event handler connected") ; 
  }
  // Create CDB manager
  if (!fDefaultStorage.Length()) AliFatal("Default CDB storage not set.");
  fCDB = AliCDBManager::Instance();
  // SetDefault storage. Specific storages must be set by AliTenderSupply::Init()
  fCDB->SetDefaultStorage(fDefaultStorage);
  Int_t run = AliAnalysisManager::GetAnalysisManager()->GetRunFromPath();
  // Unlock CDB
  fCDBkey = fCDB->SetLock(kFALSE, fCDBkey);
  if (!run) {
     AliWarning("AliTaskCDBconnect: Could not set run from path");
  } else {
     fRun = run;
     fRunChanged = kTRUE;
     printf("AliTender: #### Setting run to: %d\n", fRun);
     fCDB->SetRun(fRun);
  }   
  TIter next(fSupplies);
  AliTenderSupply *supply;
  while ((supply=(AliTenderSupply*)next())) supply->Init();
  // Lock CDB
  fCDBkey = fCDB->SetLock(kTRUE, fCDBkey);
}

//______________________________________________________________________________
void AliTender::UserCreateOutputObjects()
{
// Nothing for the moment, but we may need ESD event replication here.
  if (fDebug > 1) Printf("AliTender::CreateOutputObjects()\n");
  fESDhandler = dynamic_cast<AliESDInputHandler *>(fInputHandler);
  if (fESDhandler && TObject::TestBit(kCheckEventSelection)) {
     fESDhandler->SetUserCallSelectionMask(kTRUE);
     Info("UserCreateOutputObjects","The TENDER will check the event selection. Make sure you add the tender as FIRST wagon!");
  }   
}

//______________________________________________________________________________
void AliTender::UserExec(Option_t* option)
{
//
// Execute all supplied analysis of one event. Notify run change via RunChanged().
  if (fDebug > 1) {
    Long64_t entry = fESDhandler->GetReadEntry();
    Printf("AliTender::Exec() %s ==> processing event %lld\n", fESDhandler->GetTree()->GetCurrentFile()->GetName(),entry);
  }  
  fESD = fESDhandler->GetEvent();

// Call the user analysis
  // Unlock CDB
  fCDBkey = fCDB->SetLock(kFALSE, fCDBkey);
  // Intercept when the run number changed
  if (fRun != fESD->GetRunNumber()) {
    fRunChanged = kTRUE;
    fRun = fESD->GetRunNumber();
    fCDB->SetRun(fRun);
  }
  TIter next(fSupplies);
  AliTenderSupply *supply;
  while ((supply=(AliTenderSupply*)next())) supply->ProcessEvent();
  fRunChanged = kFALSE;

  if (TObject::TestBit(kCheckEventSelection)) fESDhandler->CheckSelectionMask();

  // Lock CDB
  fCDBkey = fCDB->SetLock(kTRUE, fCDBkey);
  
  TString opt = option;
  if (!opt.Contains("NoPost")) PostData(1, fESD);
}

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