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

/*




Adapted from TRD
Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
*/

#include <TClonesArray.h>
#include <TObjArray.h>

#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliLog.h"

#include "AliEMCALTriggerDCSConfigDB.h"
#include "AliEMCALTriggerDCSConfig.h"
#include "AliEMCALTriggerSTUDCSConfig.h"
#include "AliEMCALTriggerTRUDCSConfig.h"

ClassImp(AliEMCALTriggerDCSConfigDB)

AliEMCALTriggerDCSConfigDB* AliEMCALTriggerDCSConfigDB::fgInstance   = 0;
Bool_t                      AliEMCALTriggerDCSConfigDB::fgTerminated = kFALSE;

//_____________________________________________________________________________
AliEMCALTriggerDCSConfigDB* AliEMCALTriggerDCSConfigDB::Instance()
{
	//
	// Singleton implementation
	// Returns an instance of this class, it is created if neccessary
	//
  
	if (fgTerminated != kFALSE) 
	{
		return 0;
	}

	if (fgInstance == 0) 
	{
		fgInstance = new AliEMCALTriggerDCSConfigDB();
	}

	return fgInstance;
}

//_____________________________________________________________________________
void AliEMCALTriggerDCSConfigDB::Terminate()
{
	//
	// Singleton implementation
	// Deletes the instance of this class and sets the terminated flag,
	// instances cannot be requested anymore
	// This function can be called several times.
	//
  
	fgTerminated = kTRUE;
  
	if (fgInstance != 0) 
	{
		delete fgInstance;
		fgInstance = 0;
	}
}

//_____________________________________________________________________________
AliEMCALTriggerDCSConfigDB::AliEMCALTriggerDCSConfigDB() : TObject()
,fRun(-1)
{
	//
	// Default constructor
	//
	// TODO Default runnumber is set to 0, this should be changed later
	//      to an invalid value (e.g. -1) to prevent
	// TODO invalid calibration data to be used.
	//

	for (Int_t i = 0; i < kCDBCacheSize; ++i) 
	{
		fCDBCache[i]   = 0;
		fCDBEntries[i] = 0;
	}
}

//_____________________________________________________________________________
AliEMCALTriggerDCSConfigDB::AliEMCALTriggerDCSConfigDB(const AliEMCALTriggerDCSConfigDB &c) : TObject(c)
,fRun(-1)
{
	//
	// Copy constructor (not that it make any sense for a singleton...)
	//

	for (Int_t i = 0; i < kCDBCacheSize; ++i) 
	{
		fCDBCache[i]   = 0;
		fCDBEntries[i] = 0;
	}
}

//_____________________________________________________________________________
AliEMCALTriggerDCSConfigDB &AliEMCALTriggerDCSConfigDB::operator=(const AliEMCALTriggerDCSConfigDB &c) 
{
	//
	// Assignment operator (same as above ...)
	//
	if (this != &c) 
	{
		AliFatal("No assignment operator defined");
	}

	return *this;
}

//_____________________________________________________________________________
AliEMCALTriggerDCSConfigDB::~AliEMCALTriggerDCSConfigDB() 
{
	//
	// destructor
	//
	Invalidate();
}

//_____________________________________________________________________________
const TObject *AliEMCALTriggerDCSConfigDB::GetCachedCDBObject(Int_t id)
{
	//
	// Retrieves a cdb object with the given id. The objects are cached as
	// long as the run number is not changed.
	//
	switch (id) 
	{
		// Parameters defined per pad and chamber
		case kIDTriggerConfig : 
			return CacheCDBEntry(kIDTriggerConfig, "EMCAL/Calib/Trigger"); 
			break;
		default:			
			AliError("Object not found!");
			break;
	}

	return 0x0;
}

//_____________________________________________________________________________
AliCDBEntry* AliEMCALTriggerDCSConfigDB::GetCDBEntry(const char *cdbPath)
{
	// 
	// Retrieves an entry with path <cdbPath> from the CDB.
	//
	AliCDBEntry *entry = AliCDBManager::Instance()->Get(cdbPath,fRun);
	
	if (!entry) 
	{ 
		AliError(Form("Failed to get entry: %s",cdbPath));
		return 0; 
	}
  
	return entry;
}

//_____________________________________________________________________________
const TObject *AliEMCALTriggerDCSConfigDB::CacheCDBEntry(Int_t id, const char *cdbPath)
{
	//
	// Caches the entry <id> with cdb path <cdbPath>
	//
  
	if (!fCDBCache[id]) 
	{
		fCDBEntries[id] = GetCDBEntry(cdbPath);
		
		if (fCDBEntries[id]) fCDBCache[id] = fCDBEntries[id]->GetObject();
	}

	return fCDBCache[id];
}

//_____________________________________________________________________________
void AliEMCALTriggerDCSConfigDB::SetRun(Long64_t run)
{
  //
  // Sets current run number. Calibration data is read from the corresponding file.
  // When the run number changes the caching is invalidated.
  //

  if (fRun == run) return;

  fRun = run;

  Invalidate();
}

//_____________________________________________________________________________
void AliEMCALTriggerDCSConfigDB::Invalidate()
{
	//
	// Invalidates cache (when run number is changed).
	//
	for (Int_t i = 0; i < kCDBCacheSize; ++i) 
	{
		if (fCDBEntries[i]) 
		{
			if (AliCDBManager::Instance()->GetCacheFlag() == kFALSE) 
			{
				if ((fCDBEntries[i]->IsOwner() == kFALSE) && (fCDBCache[i])) delete fCDBCache[i];
				
				delete fCDBEntries[i];
			}
			
			fCDBEntries[i] = 0;
			fCDBCache[i]   = 0;
		}
	}
}

//_____________________________________________________________________________
const AliEMCALTriggerDCSConfig* AliEMCALTriggerDCSConfigDB::GetTriggerDCSConfig()
{
	//
	// Get DCS config
	//
	const AliEMCALTriggerDCSConfig* dcsConf = dynamic_cast<const AliEMCALTriggerDCSConfig*>(GetCachedCDBObject(kIDTriggerConfig));
	
	if (!dcsConf) 
	{
		AliError("Trigger DCS configuration not found!");
		return 0x0;
	}
	else
		return dcsConf;
}
 AliEMCALTriggerDCSConfigDB.cxx:1
 AliEMCALTriggerDCSConfigDB.cxx:2
 AliEMCALTriggerDCSConfigDB.cxx:3
 AliEMCALTriggerDCSConfigDB.cxx:4
 AliEMCALTriggerDCSConfigDB.cxx:5
 AliEMCALTriggerDCSConfigDB.cxx:6
 AliEMCALTriggerDCSConfigDB.cxx:7
 AliEMCALTriggerDCSConfigDB.cxx:8
 AliEMCALTriggerDCSConfigDB.cxx:9
 AliEMCALTriggerDCSConfigDB.cxx:10
 AliEMCALTriggerDCSConfigDB.cxx:11
 AliEMCALTriggerDCSConfigDB.cxx:12
 AliEMCALTriggerDCSConfigDB.cxx:13
 AliEMCALTriggerDCSConfigDB.cxx:14
 AliEMCALTriggerDCSConfigDB.cxx:15
 AliEMCALTriggerDCSConfigDB.cxx:16
 AliEMCALTriggerDCSConfigDB.cxx:17
 AliEMCALTriggerDCSConfigDB.cxx:18
 AliEMCALTriggerDCSConfigDB.cxx:19
 AliEMCALTriggerDCSConfigDB.cxx:20
 AliEMCALTriggerDCSConfigDB.cxx:21
 AliEMCALTriggerDCSConfigDB.cxx:22
 AliEMCALTriggerDCSConfigDB.cxx:23
 AliEMCALTriggerDCSConfigDB.cxx:24
 AliEMCALTriggerDCSConfigDB.cxx:25
 AliEMCALTriggerDCSConfigDB.cxx:26
 AliEMCALTriggerDCSConfigDB.cxx:27
 AliEMCALTriggerDCSConfigDB.cxx:28
 AliEMCALTriggerDCSConfigDB.cxx:29
 AliEMCALTriggerDCSConfigDB.cxx:30
 AliEMCALTriggerDCSConfigDB.cxx:31
 AliEMCALTriggerDCSConfigDB.cxx:32
 AliEMCALTriggerDCSConfigDB.cxx:33
 AliEMCALTriggerDCSConfigDB.cxx:34
 AliEMCALTriggerDCSConfigDB.cxx:35
 AliEMCALTriggerDCSConfigDB.cxx:36
 AliEMCALTriggerDCSConfigDB.cxx:37
 AliEMCALTriggerDCSConfigDB.cxx:38
 AliEMCALTriggerDCSConfigDB.cxx:39
 AliEMCALTriggerDCSConfigDB.cxx:40
 AliEMCALTriggerDCSConfigDB.cxx:41
 AliEMCALTriggerDCSConfigDB.cxx:42
 AliEMCALTriggerDCSConfigDB.cxx:43
 AliEMCALTriggerDCSConfigDB.cxx:44
 AliEMCALTriggerDCSConfigDB.cxx:45
 AliEMCALTriggerDCSConfigDB.cxx:46
 AliEMCALTriggerDCSConfigDB.cxx:47
 AliEMCALTriggerDCSConfigDB.cxx:48
 AliEMCALTriggerDCSConfigDB.cxx:49
 AliEMCALTriggerDCSConfigDB.cxx:50
 AliEMCALTriggerDCSConfigDB.cxx:51
 AliEMCALTriggerDCSConfigDB.cxx:52
 AliEMCALTriggerDCSConfigDB.cxx:53
 AliEMCALTriggerDCSConfigDB.cxx:54
 AliEMCALTriggerDCSConfigDB.cxx:55
 AliEMCALTriggerDCSConfigDB.cxx:56
 AliEMCALTriggerDCSConfigDB.cxx:57
 AliEMCALTriggerDCSConfigDB.cxx:58
 AliEMCALTriggerDCSConfigDB.cxx:59
 AliEMCALTriggerDCSConfigDB.cxx:60
 AliEMCALTriggerDCSConfigDB.cxx:61
 AliEMCALTriggerDCSConfigDB.cxx:62
 AliEMCALTriggerDCSConfigDB.cxx:63
 AliEMCALTriggerDCSConfigDB.cxx:64
 AliEMCALTriggerDCSConfigDB.cxx:65
 AliEMCALTriggerDCSConfigDB.cxx:66
 AliEMCALTriggerDCSConfigDB.cxx:67
 AliEMCALTriggerDCSConfigDB.cxx:68
 AliEMCALTriggerDCSConfigDB.cxx:69
 AliEMCALTriggerDCSConfigDB.cxx:70
 AliEMCALTriggerDCSConfigDB.cxx:71
 AliEMCALTriggerDCSConfigDB.cxx:72
 AliEMCALTriggerDCSConfigDB.cxx:73
 AliEMCALTriggerDCSConfigDB.cxx:74
 AliEMCALTriggerDCSConfigDB.cxx:75
 AliEMCALTriggerDCSConfigDB.cxx:76
 AliEMCALTriggerDCSConfigDB.cxx:77
 AliEMCALTriggerDCSConfigDB.cxx:78
 AliEMCALTriggerDCSConfigDB.cxx:79
 AliEMCALTriggerDCSConfigDB.cxx:80
 AliEMCALTriggerDCSConfigDB.cxx:81
 AliEMCALTriggerDCSConfigDB.cxx:82
 AliEMCALTriggerDCSConfigDB.cxx:83
 AliEMCALTriggerDCSConfigDB.cxx:84
 AliEMCALTriggerDCSConfigDB.cxx:85
 AliEMCALTriggerDCSConfigDB.cxx:86
 AliEMCALTriggerDCSConfigDB.cxx:87
 AliEMCALTriggerDCSConfigDB.cxx:88
 AliEMCALTriggerDCSConfigDB.cxx:89
 AliEMCALTriggerDCSConfigDB.cxx:90
 AliEMCALTriggerDCSConfigDB.cxx:91
 AliEMCALTriggerDCSConfigDB.cxx:92
 AliEMCALTriggerDCSConfigDB.cxx:93
 AliEMCALTriggerDCSConfigDB.cxx:94
 AliEMCALTriggerDCSConfigDB.cxx:95
 AliEMCALTriggerDCSConfigDB.cxx:96
 AliEMCALTriggerDCSConfigDB.cxx:97
 AliEMCALTriggerDCSConfigDB.cxx:98
 AliEMCALTriggerDCSConfigDB.cxx:99
 AliEMCALTriggerDCSConfigDB.cxx:100
 AliEMCALTriggerDCSConfigDB.cxx:101
 AliEMCALTriggerDCSConfigDB.cxx:102
 AliEMCALTriggerDCSConfigDB.cxx:103
 AliEMCALTriggerDCSConfigDB.cxx:104
 AliEMCALTriggerDCSConfigDB.cxx:105
 AliEMCALTriggerDCSConfigDB.cxx:106
 AliEMCALTriggerDCSConfigDB.cxx:107
 AliEMCALTriggerDCSConfigDB.cxx:108
 AliEMCALTriggerDCSConfigDB.cxx:109
 AliEMCALTriggerDCSConfigDB.cxx:110
 AliEMCALTriggerDCSConfigDB.cxx:111
 AliEMCALTriggerDCSConfigDB.cxx:112
 AliEMCALTriggerDCSConfigDB.cxx:113
 AliEMCALTriggerDCSConfigDB.cxx:114
 AliEMCALTriggerDCSConfigDB.cxx:115
 AliEMCALTriggerDCSConfigDB.cxx:116
 AliEMCALTriggerDCSConfigDB.cxx:117
 AliEMCALTriggerDCSConfigDB.cxx:118
 AliEMCALTriggerDCSConfigDB.cxx:119
 AliEMCALTriggerDCSConfigDB.cxx:120
 AliEMCALTriggerDCSConfigDB.cxx:121
 AliEMCALTriggerDCSConfigDB.cxx:122
 AliEMCALTriggerDCSConfigDB.cxx:123
 AliEMCALTriggerDCSConfigDB.cxx:124
 AliEMCALTriggerDCSConfigDB.cxx:125
 AliEMCALTriggerDCSConfigDB.cxx:126
 AliEMCALTriggerDCSConfigDB.cxx:127
 AliEMCALTriggerDCSConfigDB.cxx:128
 AliEMCALTriggerDCSConfigDB.cxx:129
 AliEMCALTriggerDCSConfigDB.cxx:130
 AliEMCALTriggerDCSConfigDB.cxx:131
 AliEMCALTriggerDCSConfigDB.cxx:132
 AliEMCALTriggerDCSConfigDB.cxx:133
 AliEMCALTriggerDCSConfigDB.cxx:134
 AliEMCALTriggerDCSConfigDB.cxx:135
 AliEMCALTriggerDCSConfigDB.cxx:136
 AliEMCALTriggerDCSConfigDB.cxx:137
 AliEMCALTriggerDCSConfigDB.cxx:138
 AliEMCALTriggerDCSConfigDB.cxx:139
 AliEMCALTriggerDCSConfigDB.cxx:140
 AliEMCALTriggerDCSConfigDB.cxx:141
 AliEMCALTriggerDCSConfigDB.cxx:142
 AliEMCALTriggerDCSConfigDB.cxx:143
 AliEMCALTriggerDCSConfigDB.cxx:144
 AliEMCALTriggerDCSConfigDB.cxx:145
 AliEMCALTriggerDCSConfigDB.cxx:146
 AliEMCALTriggerDCSConfigDB.cxx:147
 AliEMCALTriggerDCSConfigDB.cxx:148
 AliEMCALTriggerDCSConfigDB.cxx:149
 AliEMCALTriggerDCSConfigDB.cxx:150
 AliEMCALTriggerDCSConfigDB.cxx:151
 AliEMCALTriggerDCSConfigDB.cxx:152
 AliEMCALTriggerDCSConfigDB.cxx:153
 AliEMCALTriggerDCSConfigDB.cxx:154
 AliEMCALTriggerDCSConfigDB.cxx:155
 AliEMCALTriggerDCSConfigDB.cxx:156
 AliEMCALTriggerDCSConfigDB.cxx:157
 AliEMCALTriggerDCSConfigDB.cxx:158
 AliEMCALTriggerDCSConfigDB.cxx:159
 AliEMCALTriggerDCSConfigDB.cxx:160
 AliEMCALTriggerDCSConfigDB.cxx:161
 AliEMCALTriggerDCSConfigDB.cxx:162
 AliEMCALTriggerDCSConfigDB.cxx:163
 AliEMCALTriggerDCSConfigDB.cxx:164
 AliEMCALTriggerDCSConfigDB.cxx:165
 AliEMCALTriggerDCSConfigDB.cxx:166
 AliEMCALTriggerDCSConfigDB.cxx:167
 AliEMCALTriggerDCSConfigDB.cxx:168
 AliEMCALTriggerDCSConfigDB.cxx:169
 AliEMCALTriggerDCSConfigDB.cxx:170
 AliEMCALTriggerDCSConfigDB.cxx:171
 AliEMCALTriggerDCSConfigDB.cxx:172
 AliEMCALTriggerDCSConfigDB.cxx:173
 AliEMCALTriggerDCSConfigDB.cxx:174
 AliEMCALTriggerDCSConfigDB.cxx:175
 AliEMCALTriggerDCSConfigDB.cxx:176
 AliEMCALTriggerDCSConfigDB.cxx:177
 AliEMCALTriggerDCSConfigDB.cxx:178
 AliEMCALTriggerDCSConfigDB.cxx:179
 AliEMCALTriggerDCSConfigDB.cxx:180
 AliEMCALTriggerDCSConfigDB.cxx:181
 AliEMCALTriggerDCSConfigDB.cxx:182
 AliEMCALTriggerDCSConfigDB.cxx:183
 AliEMCALTriggerDCSConfigDB.cxx:184
 AliEMCALTriggerDCSConfigDB.cxx:185
 AliEMCALTriggerDCSConfigDB.cxx:186
 AliEMCALTriggerDCSConfigDB.cxx:187
 AliEMCALTriggerDCSConfigDB.cxx:188
 AliEMCALTriggerDCSConfigDB.cxx:189
 AliEMCALTriggerDCSConfigDB.cxx:190
 AliEMCALTriggerDCSConfigDB.cxx:191
 AliEMCALTriggerDCSConfigDB.cxx:192
 AliEMCALTriggerDCSConfigDB.cxx:193
 AliEMCALTriggerDCSConfigDB.cxx:194
 AliEMCALTriggerDCSConfigDB.cxx:195
 AliEMCALTriggerDCSConfigDB.cxx:196
 AliEMCALTriggerDCSConfigDB.cxx:197
 AliEMCALTriggerDCSConfigDB.cxx:198
 AliEMCALTriggerDCSConfigDB.cxx:199
 AliEMCALTriggerDCSConfigDB.cxx:200
 AliEMCALTriggerDCSConfigDB.cxx:201
 AliEMCALTriggerDCSConfigDB.cxx:202
 AliEMCALTriggerDCSConfigDB.cxx:203
 AliEMCALTriggerDCSConfigDB.cxx:204
 AliEMCALTriggerDCSConfigDB.cxx:205
 AliEMCALTriggerDCSConfigDB.cxx:206
 AliEMCALTriggerDCSConfigDB.cxx:207
 AliEMCALTriggerDCSConfigDB.cxx:208
 AliEMCALTriggerDCSConfigDB.cxx:209
 AliEMCALTriggerDCSConfigDB.cxx:210
 AliEMCALTriggerDCSConfigDB.cxx:211
 AliEMCALTriggerDCSConfigDB.cxx:212
 AliEMCALTriggerDCSConfigDB.cxx:213
 AliEMCALTriggerDCSConfigDB.cxx:214
 AliEMCALTriggerDCSConfigDB.cxx:215
 AliEMCALTriggerDCSConfigDB.cxx:216
 AliEMCALTriggerDCSConfigDB.cxx:217
 AliEMCALTriggerDCSConfigDB.cxx:218
 AliEMCALTriggerDCSConfigDB.cxx:219
 AliEMCALTriggerDCSConfigDB.cxx:220
 AliEMCALTriggerDCSConfigDB.cxx:221
 AliEMCALTriggerDCSConfigDB.cxx:222
 AliEMCALTriggerDCSConfigDB.cxx:223
 AliEMCALTriggerDCSConfigDB.cxx:224
 AliEMCALTriggerDCSConfigDB.cxx:225
 AliEMCALTriggerDCSConfigDB.cxx:226
 AliEMCALTriggerDCSConfigDB.cxx:227
 AliEMCALTriggerDCSConfigDB.cxx:228
 AliEMCALTriggerDCSConfigDB.cxx:229
 AliEMCALTriggerDCSConfigDB.cxx:230
 AliEMCALTriggerDCSConfigDB.cxx:231
 AliEMCALTriggerDCSConfigDB.cxx:232
 AliEMCALTriggerDCSConfigDB.cxx:233
 AliEMCALTriggerDCSConfigDB.cxx:234
 AliEMCALTriggerDCSConfigDB.cxx:235
 AliEMCALTriggerDCSConfigDB.cxx:236
 AliEMCALTriggerDCSConfigDB.cxx:237
 AliEMCALTriggerDCSConfigDB.cxx:238
 AliEMCALTriggerDCSConfigDB.cxx:239
 AliEMCALTriggerDCSConfigDB.cxx:240
 AliEMCALTriggerDCSConfigDB.cxx:241
 AliEMCALTriggerDCSConfigDB.cxx:242
 AliEMCALTriggerDCSConfigDB.cxx:243
 AliEMCALTriggerDCSConfigDB.cxx:244
 AliEMCALTriggerDCSConfigDB.cxx:245
 AliEMCALTriggerDCSConfigDB.cxx:246
 AliEMCALTriggerDCSConfigDB.cxx:247