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$ */

//_________________________________________________________________________
//  The AliEMCALLoader gets the TClonesArray and TObjArray for reading
//  Hits, Dgits, SDigits and RecPoints. Filling is managed in the GetEvent()
//  method.
//  It also provides acces methods to the calibration and simulation OCDB parameters 
//
//*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
//*--         Completely redesigned by Dmitri Peressounko March 2001  
//
//*-- YS June 2001 : renamed the original AliEMCALIndexToObject and make
//*--         systematic usage of TFolders without changing the interface
// 
//*-- Marco van Leeuwen, Jan 2006: complete revision to simplify reading
//*--         and fit better in general ALICE scheme
//*-- GCB: Remove TClonesArrays and TObjArrays data members, they are created elsewhere.
//*--      Provide access to OCDB calibration and simulation parameters.          
//
//////////////////////////////////////////////////////////////////////////////

// --- ROOT system ---
#include "TMath.h"
#include "TTree.h"
// --- Standard library ---

// --- AliRoot header files ---
#include "AliEMCALLoader.h"
#include "AliLog.h"
#include "AliCDBLocal.h"
#include "AliCDBStorage.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"

 ClassImp(AliEMCALLoader)
  
const TString         AliEMCALLoader::fgkECARecPointsBranchName("EMCALECARP");//Name for branch with ECA Reconstructed Points
const TString         AliEMCALLoader::fgkECADigitsBranchName("DIGITS");//Name for branch with ECA Digits
const TString         AliEMCALLoader::fgkECASDigitsBranchName("SDIGITS");//Name for branch with ECA SDigits

AliEMCALCalibData*    AliEMCALLoader::fgCalibData = 0; //calibration data
AliCaloCalibPedestal* AliEMCALLoader::fgCaloPed   = 0; //dead map data
AliEMCALSimParam*     AliEMCALLoader::fgSimParam  = 0; //simulation parameters
AliEMCALRecParam*     AliEMCALLoader::fgRecParam  = 0; //reconstruction parameters

//____________________________________________________________________________ 
AliEMCALLoader::AliEMCALLoader()
: fDebug(0)
{
  //Default constructor for EMCAL Loader Class

}

//____________________________________________________________________________ 
AliEMCALLoader::AliEMCALLoader(const Char_t *detname,const Char_t *eventfoldername)
  : AliLoader(detname,eventfoldername), fDebug(0)
{
  //Specific constructor for EMCAL Loader class

}

//____________________________________________________________________________
AliEMCALLoader::AliEMCALLoader(const Char_t *name, TFolder *topfolder)
  : AliLoader(name,topfolder), fDebug(0)
{
  //Specific constructor for EMCAL Loader class

}

//____________________________________________________________________________ 
AliEMCALLoader::~AliEMCALLoader()
{
  // Disconnect trees and remove arrays
  if (TreeH())
    TreeH()->SetBranchAddress(fDetectorName,0);
//  if (TreeD())
//    TreeD()->SetBranchAddress(fDetectorName,0);
//  if (TreeS())
//    TreeS()->SetBranchAddress(fDetectorName,0);
//  if (TreeR())
//    TreeR()->SetBranchAddress(fgkECARecPointsBranchName,0);
	
	Clean(fgkECASDigitsBranchName);
	Clean(fgkECADigitsBranchName);
	Clean(fgkECARecPointsBranchName);
	
	AliLoader::CleanFolders();
		
}

//____________________________________________________________________________ 
AliEMCALCalibData* AliEMCALLoader::CalibData()
{ 
  // Check if the instance of AliEMCALCalibData exists, if not, create it if 
  // the OCDB is available, and finally return it.
  
  if(!fgCalibData && (AliCDBManager::Instance()->IsDefaultStorageSet()))
    {
      AliCDBEntry *entry = (AliCDBEntry*) 
	AliCDBManager::Instance()->Get("EMCAL/Calib/Data");
      if (entry) fgCalibData =  (AliEMCALCalibData*) entry->GetObject();
    }
  
  if(!fgCalibData)
    AliFatal("Calibration parameters not found in CDB!");
  
  return fgCalibData;
  
}

//____________________________________________________________________________ 
AliCaloCalibPedestal* AliEMCALLoader::PedestalData()
{ 
	// Check if the instance of AliCaloCalibPedestal exists, if not, create it if 
	// the OCDB is available, and finally return it.
	
	if(!fgCaloPed && (AliCDBManager::Instance()->IsDefaultStorageSet()))
    {
		AliCDBEntry *entry = (AliCDBEntry*) 
		AliCDBManager::Instance()->Get("EMCAL/Calib/Pedestals");
		if (entry) fgCaloPed =  (AliCaloCalibPedestal*) entry->GetObject();
    }
	
	if(!fgCaloPed)
		AliFatal("Pedestal info not found in CDB!");
	
	return fgCaloPed;
	
}

//____________________________________________________________________________ 
AliEMCALSimParam* AliEMCALLoader::SimulationParameters()
{ 
  // Check if the instance of AliEMCALSimParam exists, if not, create it if 
  // the OCDB is available, and finally return it.
  
  if(!fgSimParam && (AliCDBManager::Instance()->IsDefaultStorageSet()))
    {
      AliCDBEntry *entry = (AliCDBEntry*) 
      AliCDBManager::Instance()->Get("EMCAL/Calib/SimParam");
      if (entry) fgSimParam =  (AliEMCALSimParam*) entry->GetObject();
      
    }
  
  if(!fgSimParam)
    AliFatal("Simulations parameters not found in CDB!");
  
  return fgSimParam;
  
}


//____________________________________________________________________________ 
AliEMCALRecParam* AliEMCALLoader::ReconstructionParameters(Int_t eventType = 0)
{ 
  // Check if the instance of AliEMCALRecParam exists, if not, create it if 
  // the OCDB is available, and finally return it. 
  // The event type must be provided.
  
  if(!fgRecParam && (AliCDBManager::Instance()->IsDefaultStorageSet()))
  {
    AliCDBEntry *entry = (AliCDBEntry*) 
    AliCDBManager::Instance()->Get("EMCAL/Calib/RecoParam");
    if (entry) fgRecParam =  (AliEMCALRecParam*)((TObjArray *) entry->GetObject())->At(eventType);
    
  }
  
  if(!fgRecParam)
    AliFatal("Reconstruction parameters not found in CDB!");
  
  return fgRecParam;
  
}


//____________________________________________________________________________ 
Int_t AliEMCALLoader::GetEvent() 
{
  //Method to load all of the data
  //members of the EMCAL for a given
  //event from the Trees

  AliLoader::GetEvent();  // First call AliLoader to do all the groundwork
  
  // *** Hits ***
  // Hits are now handled directly on the AliEMCALSDigitizer, the only place it is requested.
  // together with AliEveEMCALData
	
  // *** SDigits ***
  // Initialize the SDigits TClonesArray, only if it did not existed before
  MakeSDigitsArray();
  
  TTree *treeS = TreeS();
  if (treeS) {
    TBranch * branchS = treeS->GetBranch(fDetectorName);
    
    // Reset SDigits array and branch
    branchS->ResetAddress();
    TClonesArray* sdigits = const_cast<AliEMCALLoader *>(this)->SDigits();
    if (sdigits) sdigits->Clear("C");
    
    branchS->SetAddress(&sdigits);
    branchS->GetEntry(0);
  }
  
  // *** Digits ***
  // Initialize the Digits TClonesArray, only if it did not existed before
  MakeDigitsArray();
  
  TTree *treeD = TreeD();
  if (treeD) {
    TBranch * branchD = treeD->GetBranch(fDetectorName);
    
    // Reset Digits array and branch
    branchD->ResetAddress();
    TClonesArray* digits = const_cast<AliEMCALLoader *>(this)->Digits();
    if (digits) digits->Clear("C");
    
    branchD->SetAddress(&digits);
    branchD->GetEntry(0);
  }
  
  // *** RecPoints ***  
  // Initialize the RecPoints TObjArray, only if it did not existed before
  MakeRecPointsArray();
  
  TTree *treeR = TreeR();
  if (treeR) {
    TBranch * branchR = treeR->GetBranch(fgkECARecPointsBranchName);
    
    // Reset RecPoints array and branch
    branchR->ResetAddress();
    TObjArray* rp = const_cast<AliEMCALLoader *>(this)->RecPoints();
    if (rp) rp->Clear();
    
    branchR->SetAddress(&rp);
    branchR->GetEntry(0);
  }
  
  return 0;
}

//____________________________________________________________________________
void AliEMCALLoader::MakeSDigitsArray(){
  // Add SDigits array to the data folder
  if (SDigits()) return;
  TClonesArray* sdigits = new TClonesArray("AliEMCALDigit",0);
  sdigits->SetName(fgkECASDigitsBranchName);
  GetDetectorDataFolder()->Add(sdigits);
}

//____________________________________________________________________________
void AliEMCALLoader::MakeDigitsArray(){
  // Add Digits array to the data folder
  if (Digits()) return;
  TClonesArray* digits = new TClonesArray("AliEMCALDigit",0);
  digits->SetName(fgkECADigitsBranchName);
  GetDetectorDataFolder()->Add(digits);
}

//____________________________________________________________________________
void AliEMCALLoader::MakeRecPointsArray(){
  // Add RecPoints array to the data folder
  if (RecPoints()) return;
  TObjArray* rp = new TObjArray(0);
  rp->SetName(fgkECARecPointsBranchName);
  GetDetectorDataFolder()->Add(rp);
}
 AliEMCALLoader.cxx:1
 AliEMCALLoader.cxx:2
 AliEMCALLoader.cxx:3
 AliEMCALLoader.cxx:4
 AliEMCALLoader.cxx:5
 AliEMCALLoader.cxx:6
 AliEMCALLoader.cxx:7
 AliEMCALLoader.cxx:8
 AliEMCALLoader.cxx:9
 AliEMCALLoader.cxx:10
 AliEMCALLoader.cxx:11
 AliEMCALLoader.cxx:12
 AliEMCALLoader.cxx:13
 AliEMCALLoader.cxx:14
 AliEMCALLoader.cxx:15
 AliEMCALLoader.cxx:16
 AliEMCALLoader.cxx:17
 AliEMCALLoader.cxx:18
 AliEMCALLoader.cxx:19
 AliEMCALLoader.cxx:20
 AliEMCALLoader.cxx:21
 AliEMCALLoader.cxx:22
 AliEMCALLoader.cxx:23
 AliEMCALLoader.cxx:24
 AliEMCALLoader.cxx:25
 AliEMCALLoader.cxx:26
 AliEMCALLoader.cxx:27
 AliEMCALLoader.cxx:28
 AliEMCALLoader.cxx:29
 AliEMCALLoader.cxx:30
 AliEMCALLoader.cxx:31
 AliEMCALLoader.cxx:32
 AliEMCALLoader.cxx:33
 AliEMCALLoader.cxx:34
 AliEMCALLoader.cxx:35
 AliEMCALLoader.cxx:36
 AliEMCALLoader.cxx:37
 AliEMCALLoader.cxx:38
 AliEMCALLoader.cxx:39
 AliEMCALLoader.cxx:40
 AliEMCALLoader.cxx:41
 AliEMCALLoader.cxx:42
 AliEMCALLoader.cxx:43
 AliEMCALLoader.cxx:44
 AliEMCALLoader.cxx:45
 AliEMCALLoader.cxx:46
 AliEMCALLoader.cxx:47
 AliEMCALLoader.cxx:48
 AliEMCALLoader.cxx:49
 AliEMCALLoader.cxx:50
 AliEMCALLoader.cxx:51
 AliEMCALLoader.cxx:52
 AliEMCALLoader.cxx:53
 AliEMCALLoader.cxx:54
 AliEMCALLoader.cxx:55
 AliEMCALLoader.cxx:56
 AliEMCALLoader.cxx:57
 AliEMCALLoader.cxx:58
 AliEMCALLoader.cxx:59
 AliEMCALLoader.cxx:60
 AliEMCALLoader.cxx:61
 AliEMCALLoader.cxx:62
 AliEMCALLoader.cxx:63
 AliEMCALLoader.cxx:64
 AliEMCALLoader.cxx:65
 AliEMCALLoader.cxx:66
 AliEMCALLoader.cxx:67
 AliEMCALLoader.cxx:68
 AliEMCALLoader.cxx:69
 AliEMCALLoader.cxx:70
 AliEMCALLoader.cxx:71
 AliEMCALLoader.cxx:72
 AliEMCALLoader.cxx:73
 AliEMCALLoader.cxx:74
 AliEMCALLoader.cxx:75
 AliEMCALLoader.cxx:76
 AliEMCALLoader.cxx:77
 AliEMCALLoader.cxx:78
 AliEMCALLoader.cxx:79
 AliEMCALLoader.cxx:80
 AliEMCALLoader.cxx:81
 AliEMCALLoader.cxx:82
 AliEMCALLoader.cxx:83
 AliEMCALLoader.cxx:84
 AliEMCALLoader.cxx:85
 AliEMCALLoader.cxx:86
 AliEMCALLoader.cxx:87
 AliEMCALLoader.cxx:88
 AliEMCALLoader.cxx:89
 AliEMCALLoader.cxx:90
 AliEMCALLoader.cxx:91
 AliEMCALLoader.cxx:92
 AliEMCALLoader.cxx:93
 AliEMCALLoader.cxx:94
 AliEMCALLoader.cxx:95
 AliEMCALLoader.cxx:96
 AliEMCALLoader.cxx:97
 AliEMCALLoader.cxx:98
 AliEMCALLoader.cxx:99
 AliEMCALLoader.cxx:100
 AliEMCALLoader.cxx:101
 AliEMCALLoader.cxx:102
 AliEMCALLoader.cxx:103
 AliEMCALLoader.cxx:104
 AliEMCALLoader.cxx:105
 AliEMCALLoader.cxx:106
 AliEMCALLoader.cxx:107
 AliEMCALLoader.cxx:108
 AliEMCALLoader.cxx:109
 AliEMCALLoader.cxx:110
 AliEMCALLoader.cxx:111
 AliEMCALLoader.cxx:112
 AliEMCALLoader.cxx:113
 AliEMCALLoader.cxx:114
 AliEMCALLoader.cxx:115
 AliEMCALLoader.cxx:116
 AliEMCALLoader.cxx:117
 AliEMCALLoader.cxx:118
 AliEMCALLoader.cxx:119
 AliEMCALLoader.cxx:120
 AliEMCALLoader.cxx:121
 AliEMCALLoader.cxx:122
 AliEMCALLoader.cxx:123
 AliEMCALLoader.cxx:124
 AliEMCALLoader.cxx:125
 AliEMCALLoader.cxx:126
 AliEMCALLoader.cxx:127
 AliEMCALLoader.cxx:128
 AliEMCALLoader.cxx:129
 AliEMCALLoader.cxx:130
 AliEMCALLoader.cxx:131
 AliEMCALLoader.cxx:132
 AliEMCALLoader.cxx:133
 AliEMCALLoader.cxx:134
 AliEMCALLoader.cxx:135
 AliEMCALLoader.cxx:136
 AliEMCALLoader.cxx:137
 AliEMCALLoader.cxx:138
 AliEMCALLoader.cxx:139
 AliEMCALLoader.cxx:140
 AliEMCALLoader.cxx:141
 AliEMCALLoader.cxx:142
 AliEMCALLoader.cxx:143
 AliEMCALLoader.cxx:144
 AliEMCALLoader.cxx:145
 AliEMCALLoader.cxx:146
 AliEMCALLoader.cxx:147
 AliEMCALLoader.cxx:148
 AliEMCALLoader.cxx:149
 AliEMCALLoader.cxx:150
 AliEMCALLoader.cxx:151
 AliEMCALLoader.cxx:152
 AliEMCALLoader.cxx:153
 AliEMCALLoader.cxx:154
 AliEMCALLoader.cxx:155
 AliEMCALLoader.cxx:156
 AliEMCALLoader.cxx:157
 AliEMCALLoader.cxx:158
 AliEMCALLoader.cxx:159
 AliEMCALLoader.cxx:160
 AliEMCALLoader.cxx:161
 AliEMCALLoader.cxx:162
 AliEMCALLoader.cxx:163
 AliEMCALLoader.cxx:164
 AliEMCALLoader.cxx:165
 AliEMCALLoader.cxx:166
 AliEMCALLoader.cxx:167
 AliEMCALLoader.cxx:168
 AliEMCALLoader.cxx:169
 AliEMCALLoader.cxx:170
 AliEMCALLoader.cxx:171
 AliEMCALLoader.cxx:172
 AliEMCALLoader.cxx:173
 AliEMCALLoader.cxx:174
 AliEMCALLoader.cxx:175
 AliEMCALLoader.cxx:176
 AliEMCALLoader.cxx:177
 AliEMCALLoader.cxx:178
 AliEMCALLoader.cxx:179
 AliEMCALLoader.cxx:180
 AliEMCALLoader.cxx:181
 AliEMCALLoader.cxx:182
 AliEMCALLoader.cxx:183
 AliEMCALLoader.cxx:184
 AliEMCALLoader.cxx:185
 AliEMCALLoader.cxx:186
 AliEMCALLoader.cxx:187
 AliEMCALLoader.cxx:188
 AliEMCALLoader.cxx:189
 AliEMCALLoader.cxx:190
 AliEMCALLoader.cxx:191
 AliEMCALLoader.cxx:192
 AliEMCALLoader.cxx:193
 AliEMCALLoader.cxx:194
 AliEMCALLoader.cxx:195
 AliEMCALLoader.cxx:196
 AliEMCALLoader.cxx:197
 AliEMCALLoader.cxx:198
 AliEMCALLoader.cxx:199
 AliEMCALLoader.cxx:200
 AliEMCALLoader.cxx:201
 AliEMCALLoader.cxx:202
 AliEMCALLoader.cxx:203
 AliEMCALLoader.cxx:204
 AliEMCALLoader.cxx:205
 AliEMCALLoader.cxx:206
 AliEMCALLoader.cxx:207
 AliEMCALLoader.cxx:208
 AliEMCALLoader.cxx:209
 AliEMCALLoader.cxx:210
 AliEMCALLoader.cxx:211
 AliEMCALLoader.cxx:212
 AliEMCALLoader.cxx:213
 AliEMCALLoader.cxx:214
 AliEMCALLoader.cxx:215
 AliEMCALLoader.cxx:216
 AliEMCALLoader.cxx:217
 AliEMCALLoader.cxx:218
 AliEMCALLoader.cxx:219
 AliEMCALLoader.cxx:220
 AliEMCALLoader.cxx:221
 AliEMCALLoader.cxx:222
 AliEMCALLoader.cxx:223
 AliEMCALLoader.cxx:224
 AliEMCALLoader.cxx:225
 AliEMCALLoader.cxx:226
 AliEMCALLoader.cxx:227
 AliEMCALLoader.cxx:228
 AliEMCALLoader.cxx:229
 AliEMCALLoader.cxx:230
 AliEMCALLoader.cxx:231
 AliEMCALLoader.cxx:232
 AliEMCALLoader.cxx:233
 AliEMCALLoader.cxx:234
 AliEMCALLoader.cxx:235
 AliEMCALLoader.cxx:236
 AliEMCALLoader.cxx:237
 AliEMCALLoader.cxx:238
 AliEMCALLoader.cxx:239
 AliEMCALLoader.cxx:240
 AliEMCALLoader.cxx:241
 AliEMCALLoader.cxx:242
 AliEMCALLoader.cxx:243
 AliEMCALLoader.cxx:244
 AliEMCALLoader.cxx:245
 AliEMCALLoader.cxx:246
 AliEMCALLoader.cxx:247
 AliEMCALLoader.cxx:248
 AliEMCALLoader.cxx:249
 AliEMCALLoader.cxx:250
 AliEMCALLoader.cxx:251
 AliEMCALLoader.cxx:252
 AliEMCALLoader.cxx:253
 AliEMCALLoader.cxx:254
 AliEMCALLoader.cxx:255
 AliEMCALLoader.cxx:256
 AliEMCALLoader.cxx:257
 AliEMCALLoader.cxx:258
 AliEMCALLoader.cxx:259
 AliEMCALLoader.cxx:260
 AliEMCALLoader.cxx:261
 AliEMCALLoader.cxx:262
 AliEMCALLoader.cxx:263
 AliEMCALLoader.cxx:264
 AliEMCALLoader.cxx:265
 AliEMCALLoader.cxx:266
 AliEMCALLoader.cxx:267
 AliEMCALLoader.cxx:268
 AliEMCALLoader.cxx:269
 AliEMCALLoader.cxx:270
 AliEMCALLoader.cxx:271
 AliEMCALLoader.cxx:272
 AliEMCALLoader.cxx:273
 AliEMCALLoader.cxx:274
 AliEMCALLoader.cxx:275
 AliEMCALLoader.cxx:276
 AliEMCALLoader.cxx:277
 AliEMCALLoader.cxx:278
 AliEMCALLoader.cxx:279
 AliEMCALLoader.cxx:280
 AliEMCALLoader.cxx:281
 AliEMCALLoader.cxx:282
 AliEMCALLoader.cxx:283