DA for calibrating energy by pi0 and MIP and related classes (Hisayuki Torii).
[u/mrichter/AliRoot.git] / MUON / AliMUONCalibrationData.cxx
CommitLineData
c5bdf179 1/**************************************************************************
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16// $Id$
17
18#include "AliMUONCalibrationData.h"
19
20#include "AliCDBEntry.h"
21#include "AliCDBManager.h"
4bec0403 22#include "AliCodeTimer.h"
c5bdf179 23#include "AliLog.h"
0045b488 24#include "AliMUONRejectList.h"
e7d7fa47 25#include "AliMUONTriggerEfficiencyCells.h"
26#include "AliMUONTriggerLut.h"
a0eca509 27#include "AliMUONVStore.h"
28#include "AliMUONVStore.h"
c3ce65fd 29#include "AliMUONVCalibParam.h"
92c23b09 30#include "AliMUONGlobalCrateConfig.h"
31#include "AliMUONRegionalTriggerConfig.h"
32
4bec0403 33#include <Riostream.h>
34#include <TClass.h>
35#include <TMap.h>
c5bdf179 36
3d1463c8 37//-----------------------------------------------------------------------------
5398f946 38/// \class AliMUONCalibrationData
39///
48ed403b 40/// For the moment, this class stores pedestals, gains, hv (for tracker)
41/// and lut, masks and efficiencies (for trigger) that are fetched from the CDB.
e7d7fa47 42///
43/// This class is to be considered as a convenience class.
44/// Its aim is to ease retrieval of calibration data from the
45/// condition database.
46///
47/// It acts as a "facade" to a bunch of underlying
48/// containers/calibration classes.
49///
5398f946 50/// \author Laurent Aphecetche
3d1463c8 51//-----------------------------------------------------------------------------
e7d7fa47 52
5398f946 53/// \cond CLASSIMP
c5bdf179 54ClassImp(AliMUONCalibrationData)
5398f946 55/// \endcond
c5bdf179 56
8f29b706 57AliMUONVStore* AliMUONCalibrationData::fBypassPedestals(0x0);
58AliMUONVStore* AliMUONCalibrationData::fBypassGains(0x0);
59
c5bdf179 60//_____________________________________________________________________________
61AliMUONCalibrationData::AliMUONCalibrationData(Int_t runNumber,
62 Bool_t deferredInitialization)
63: TObject(),
64fIsValid(kTRUE),
65fRunNumber(runNumber),
66fGains(0x0),
c3ce65fd 67fPedestals(0x0),
48ed403b 68fHV(0x0),
49e110ec 69fTriggerDCS(0x0),
e7d7fa47 70fLocalTriggerBoardMasks(0x0),
92c23b09 71fRegionalTriggerConfig(0x0),
72fGlobalTriggerCrateConfig(0x0),
e7d7fa47 73fTriggerLut(0x0),
c1bbaf66 74fTriggerEfficiency(0x0),
d067ba7c 75fCapacitances(0x0),
2b8a1212 76fNeighbours(0x0),
0045b488 77fOccupancyMap(0x0),
78fRejectList(0x0)
c5bdf179 79{
5398f946 80/// Default ctor.
81
c3ce65fd 82 // If deferredInitialization is false, we read *all* calibrations
83 // at once.
84 // So when using this class to access only one kind of calibrations (e.g.
85 // only pedestals), you should put deferredInitialization to kTRUE, which
86 // will instruct this object to fetch the data only when neeeded.
5398f946 87
c5bdf179 88 if ( deferredInitialization == kFALSE )
89 {
5562688f 90 Gains();
91 Pedestals();
7eafe398 92 OccupancyMap();
0045b488 93 RejectList();
5562688f 94 HV();
49e110ec 95 TriggerDCS();
5562688f 96 LocalTriggerBoardMasks(0);
92c23b09 97 RegionalTriggerConfig();
98 GlobalTriggerCrateConfig();
5562688f 99 TriggerLut();
100 TriggerEfficiency();
101 Capacitances();
102 Neighbours();
c5bdf179 103 }
104}
105
e7d7fa47 106//_____________________________________________________________________________
c5bdf179 107AliMUONCalibrationData::~AliMUONCalibrationData()
108{
c1bbaf66 109 /// Destructor. Note that we're the owner of our pointers.
23b1bc04 110 //PH The owner of the objects is CDB, do not delete them!
111 // Reset();
c3ce65fd 112}
c3ce65fd 113
114//_____________________________________________________________________________
5562688f 115AliMUONVStore*
116AliMUONCalibrationData::Capacitances() const
c3ce65fd 117{
5562688f 118 /// Create (if needed) and return the internal store for capacitances.
119
120 if (!fCapacitances)
c3ce65fd 121 {
5562688f 122 fCapacitances = CreateCapacitances(fRunNumber);
c3ce65fd 123 }
5562688f 124 return fCapacitances;
c5bdf179 125}
126
127//_____________________________________________________________________________
5562688f 128AliMUONVStore*
143cd71a 129AliMUONCalibrationData::CreateCapacitances(Int_t runNumber, Int_t* startOfValidity)
c5bdf179 130{
5562688f 131 /// Create capa store from OCDB for a given run
132
143cd71a 133 return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Capacitances",startOfValidity));
5562688f 134}
5398f946 135
5562688f 136//_____________________________________________________________________________
137AliMUONVStore*
143cd71a 138AliMUONCalibrationData::CreateGains(Int_t runNumber, Int_t* startOfValidity)
5562688f 139{
140 /// Create a new gain store from the OCDB for a given run
143cd71a 141 return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Gains",startOfValidity));
c5bdf179 142}
143
144//_____________________________________________________________________________
92c23b09 145AliMUONGlobalCrateConfig*
143cd71a 146AliMUONCalibrationData::CreateGlobalTriggerCrateConfig(Int_t runNumber, Int_t* startOfValidity)
c5bdf179 147{
92c23b09 148 /// Create the internal store for GlobalTriggerCrateConfig from OCDB
48ed403b 149
143cd71a 150 return dynamic_cast<AliMUONGlobalCrateConfig*>(CreateObject(runNumber,"MUON/Calib/GlobalTriggerCrateConfig",startOfValidity));
48ed403b 151}
152
92c23b09 153
154
48ed403b 155//_____________________________________________________________________________
5562688f 156TMap*
143cd71a 157AliMUONCalibrationData::CreateHV(Int_t runNumber, Int_t* startOfValidity)
c1bbaf66 158{
5562688f 159 /// Create a new HV map from the OCDB for a given run
143cd71a 160 return dynamic_cast<TMap*>(CreateObject(runNumber,"MUON/Calib/HV",startOfValidity));
c1bbaf66 161}
162
163//_____________________________________________________________________________
49e110ec 164TMap*
165AliMUONCalibrationData::CreateTriggerDCS(Int_t runNumber, Int_t* startOfValidity)
166{
167 /// Create a new Trigger HV and curent map from the OCDB for a given run
168 return dynamic_cast<TMap*>(CreateObject(runNumber,"MUON/Calib/TriggerDCS",startOfValidity));
169}
170
171//_____________________________________________________________________________
a0eca509 172AliMUONVStore*
143cd71a 173AliMUONCalibrationData::CreateLocalTriggerBoardMasks(Int_t runNumber, Int_t* startOfValidity)
d067ba7c 174{
5562688f 175 /// Get the internal store for LocalTriggerBoardMasks from OCDB
176
143cd71a 177 return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/LocalTriggerBoardMasks",startOfValidity));
d067ba7c 178}
179
180//_____________________________________________________________________________
a0eca509 181AliMUONVStore*
143cd71a 182AliMUONCalibrationData::CreateNeighbours(Int_t runNumber, Int_t* startOfValidity)
48ed403b 183{
5562688f 184 /// Create a neighbour store from the OCDB for a given run
143cd71a 185 return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Neighbours",startOfValidity));
c5bdf179 186}
187
188//_____________________________________________________________________________
5562688f 189TObject*
143cd71a 190AliMUONCalibrationData::CreateObject(Int_t runNumber, const char* path, Int_t* startOfValidity)
d067ba7c 191{
5562688f 192 /// Access the CDB for a given path (e.g. MUON/Calib/Pedestals),
193 /// and return the corresponding TObject.
d067ba7c 194
4bec0403 195 AliCodeTimerAutoClass(Form("%d : %s",runNumber,path));
196
5562688f 197 AliCDBManager* man = AliCDBManager::Instance();
198
465302eb 199 AliCDBEntry* entry = man->Get(path,runNumber);
5562688f 200
5562688f 201 if (entry)
d067ba7c 202 {
143cd71a 203 if ( startOfValidity ) *startOfValidity = entry->GetId().GetFirstRun();
204
4bec0403 205 TObject* object = entry->GetObject();
206 entry->SetOwner(kFALSE);
465302eb 207 if (!(man->GetCacheFlag())) delete entry;
4bec0403 208 return object;
209 }
143cd71a 210 else
211 {
212 if ( startOfValidity ) *startOfValidity = AliCDBRunRange::Infinity();
213 }
214
0045b488 215 {
216
217 AliCodeTimerAutoClass(Form("Failed to get %s for run %d",path,runNumber));
218
219 }
220
5562688f 221 return 0x0;
d067ba7c 222}
223
224//_____________________________________________________________________________
a0eca509 225AliMUONVStore*
7eafe398 226AliMUONCalibrationData::CreateOccupancyMap(Int_t runNumber, Int_t* startOfValidity)
2b8a1212 227{
7eafe398 228 /// Create a new occupancy map store from the OCDB for a given run
229 return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/OccupancyMap",startOfValidity));
2b8a1212 230}
231
232//_____________________________________________________________________________
0045b488 233AliMUONRejectList*
234AliMUONCalibrationData::CreateRejectList(Int_t runNumber, Int_t* startOfValidity)
235{
236 /// Create a new rejectlist store from the OCDB for a given run
237 return dynamic_cast<AliMUONRejectList*>(CreateObject(runNumber,"MUON/Calib/RejectList",startOfValidity));
238}
239
240//_____________________________________________________________________________
2b8a1212 241AliMUONVStore*
143cd71a 242AliMUONCalibrationData::CreatePedestals(Int_t runNumber, Int_t* startOfValidity)
c1bbaf66 243{
5562688f 244 /// Create a new pedestal store from the OCDB for a given run
143cd71a 245 return dynamic_cast<AliMUONVStore*>(CreateObject(runNumber,"MUON/Calib/Pedestals",startOfValidity));
c1bbaf66 246}
247
92c23b09 248
c1bbaf66 249//_____________________________________________________________________________
92c23b09 250AliMUONRegionalTriggerConfig*
143cd71a 251AliMUONCalibrationData::CreateRegionalTriggerConfig(Int_t runNumber, Int_t* startOfValidity)
5562688f 252{
92c23b09 253 /// Create the internal store for RegionalTriggerConfig from OCDB
5562688f 254
143cd71a 255 return dynamic_cast<AliMUONRegionalTriggerConfig*>(CreateObject(runNumber,"MUON/Calib/RegionalTriggerConfig",startOfValidity));
5562688f 256}
257
258//_____________________________________________________________________________
259AliMUONTriggerEfficiencyCells*
143cd71a 260AliMUONCalibrationData::CreateTriggerEfficiency(Int_t runNumber, Int_t* startOfValidity)
c5bdf179 261{
5562688f 262 /// Create trigger efficiency object from OCBD
263
143cd71a 264 return dynamic_cast<AliMUONTriggerEfficiencyCells*>(CreateObject(runNumber,"MUON/Calib/TriggerEfficiency",startOfValidity));
5562688f 265}
5398f946 266
5562688f 267//_____________________________________________________________________________
268AliMUONTriggerLut*
143cd71a 269AliMUONCalibrationData::CreateTriggerLut(Int_t runNumber, Int_t* startOfValidity)
5562688f 270{
271 /// Create trigger LUT from OCDB
272
143cd71a 273 return dynamic_cast<AliMUONTriggerLut*>(CreateObject(runNumber,"MUON/Calib/TriggerLut",startOfValidity));
5562688f 274}
275
276//_____________________________________________________________________________
277AliMUONVStore*
278AliMUONCalibrationData::Gains() const
279{
280 /// Create (if needed) and return the internal store for gains.
8f29b706 281 if (fBypassGains) return fBypassGains;
282
c5bdf179 283 if (!fGains)
284 {
5562688f 285 fGains = CreateGains(fRunNumber);
c5bdf179 286 }
287 return fGains;
288}
289
290//_____________________________________________________________________________
5562688f 291AliMUONVCalibParam*
292AliMUONCalibrationData::Gains(Int_t detElemId, Int_t manuId) const
e7d7fa47 293{
5562688f 294/// Return the gains for a given (detElemId, manuId) pair
295/// Note that, unlike the DeadChannel case, if the result is 0x0, that's an
296/// error (meaning that we should get gains for all channels).
5398f946 297
5562688f 298 AliMUONVStore* gains = Gains();
299 if (!gains)
300 {
301 return 0x0;
302 }
303
304 return static_cast<AliMUONVCalibParam*>(gains->FindObject(detElemId,manuId));
e7d7fa47 305}
306
307//_____________________________________________________________________________
92c23b09 308AliMUONGlobalCrateConfig*
309AliMUONCalibrationData::GlobalTriggerCrateConfig() const
e7d7fa47 310{
92c23b09 311 /// Return the config for the global trigger board.
5562688f 312
92c23b09 313 if (!fGlobalTriggerCrateConfig)
e7d7fa47 314 {
92c23b09 315 fGlobalTriggerCrateConfig = CreateGlobalTriggerCrateConfig(fRunNumber);
e7d7fa47 316 }
92c23b09 317 return fGlobalTriggerCrateConfig;
e7d7fa47 318}
319
92c23b09 320
e7d7fa47 321//_____________________________________________________________________________
5562688f 322TMap*
323AliMUONCalibrationData::HV() const
e7d7fa47 324{
5562688f 325 /// Return the calibration for a given (detElemId, manuId) pair
48ed403b 326
5562688f 327 if (!fHV)
e7d7fa47 328 {
5562688f 329 fHV = CreateHV(fRunNumber);
e7d7fa47 330 }
5562688f 331 return fHV;
e7d7fa47 332}
333
334//_____________________________________________________________________________
49e110ec 335TMap*
336AliMUONCalibrationData::TriggerDCS() const
337{
338 /// Return the calibration for a given (detElemId, manuId) pair
339
340 if (!fTriggerDCS)
341 {
342 fTriggerDCS = CreateTriggerDCS(fRunNumber);
343 }
344 return fTriggerDCS;
345}
346
347//_____________________________________________________________________________
a0eca509 348AliMUONVStore*
5562688f 349AliMUONCalibrationData::Neighbours() const
e7d7fa47 350{
5562688f 351 /// Create (if needed) and return the internal store for neighbours.
352 if (!fNeighbours)
353 {
354 fNeighbours = CreateNeighbours(fRunNumber);
355 }
356 return fNeighbours;
357}
358
359//_____________________________________________________________________________
360AliMUONVCalibParam*
361AliMUONCalibrationData::LocalTriggerBoardMasks(Int_t localBoardNumber) const
362{
363/// Return the masks for a given trigger local board.
5398f946 364
e7d7fa47 365 if (!fLocalTriggerBoardMasks)
366 {
5562688f 367 fLocalTriggerBoardMasks = CreateLocalTriggerBoardMasks(fRunNumber);
368 }
369
370 if ( fLocalTriggerBoardMasks )
371 {
372 AliMUONVCalibParam* ltbm =
373 static_cast<AliMUONVCalibParam*>(fLocalTriggerBoardMasks->FindObject(localBoardNumber));
374 if (!ltbm)
e7d7fa47 375 {
5562688f 376 AliError(Form("Could not get mask for localBoardNumber=%d",localBoardNumber));
e7d7fa47 377 }
5562688f 378 return ltbm;
e7d7fa47 379 }
5562688f 380 return 0x0;
e7d7fa47 381}
382
383//_____________________________________________________________________________
a0eca509 384AliMUONVStore*
7eafe398 385AliMUONCalibrationData::OccupancyMap() const
2b8a1212 386{
7eafe398 387 /// Get occupancy map
388 if (!fOccupancyMap)
2b8a1212 389 {
7eafe398 390 fOccupancyMap = CreateOccupancyMap(fRunNumber);
2b8a1212 391 }
7eafe398 392 return fOccupancyMap;
2b8a1212 393}
394
395//_____________________________________________________________________________
0045b488 396AliMUONRejectList*
397AliMUONCalibrationData::RejectList() const
398{
399 /// Get reject list
400 if (!fRejectList)
401 {
402 fRejectList = CreateRejectList(fRunNumber);
403 }
404 return fRejectList;
405}
406
407//_____________________________________________________________________________
8f29b706 408void
409AliMUONCalibrationData::BypassStores(AliMUONVStore* ped, AliMUONVStore* gain)
410{
411 /// Force the use of those pedestals and gains
412 fBypassPedestals = ped;
413 fBypassGains = gain;
414
415}
416
417//_____________________________________________________________________________
2b8a1212 418AliMUONVStore*
5562688f 419AliMUONCalibrationData::Pedestals() const
c5bdf179 420{
5562688f 421 /// Return pedestals
8f29b706 422
423 if (fBypassPedestals) return fBypassPedestals;
424
c5bdf179 425 if (!fPedestals)
426 {
5562688f 427 fPedestals = CreatePedestals(fRunNumber);
c5bdf179 428 }
429 return fPedestals;
430}
431
432//_____________________________________________________________________________
5562688f 433AliMUONVCalibParam*
434AliMUONCalibrationData::Pedestals(Int_t detElemId, Int_t manuId) const
435{
436 /// Return the pedestals for a given (detElemId, manuId) pair.
437 /// A return value of 0x0 is considered an error, meaning we should get
438 /// pedestals for all channels.
439
440 AliMUONVStore* pedestals = Pedestals();
441 if (!pedestals)
442 {
443 return 0x0;
444 }
445
446 return static_cast<AliMUONVCalibParam*>(pedestals->FindObject(detElemId,manuId));
447}
448
449//_____________________________________________________________________________
c5bdf179 450void
451AliMUONCalibrationData::Print(Option_t*) const
452{
5562688f 453 /// A very basic dump of our guts.
5398f946 454
c5bdf179 455 cout << "RunNumber " << RunNumber()
e7d7fa47 456 << " fGains=" << fGains
457 << " fPedestals=" << fPedestals
48ed403b 458 << " fHV=" << fHV
49e110ec 459 << " fTriggerDCS=" << fTriggerDCS
e7d7fa47 460 << " fLocalTriggerBoardMasks=" << fLocalTriggerBoardMasks
92c23b09 461 << " fRegionalTriggerConfig=" << fRegionalTriggerConfig
462 << " fGlobalTriggerCrateConfig=" << fGlobalTriggerCrateConfig
e7d7fa47 463 << " fTriggerLut=" << fTriggerLut
c5bdf179 464 << endl;
465}
466
92c23b09 467
48ed403b 468//_____________________________________________________________________________
92c23b09 469AliMUONRegionalTriggerConfig*
470AliMUONCalibrationData::RegionalTriggerConfig() const
e7d7fa47 471{
92c23b09 472 /// Return the config for the regional trigger board.
48ed403b 473
92c23b09 474 if (!fRegionalTriggerConfig)
e7d7fa47 475 {
92c23b09 476 fRegionalTriggerConfig = CreateRegionalTriggerConfig(fRunNumber);
e7d7fa47 477 }
92c23b09 478 return fRegionalTriggerConfig;
e7d7fa47 479}
480
92c23b09 481
e7d7fa47 482//_____________________________________________________________________________
483AliMUONTriggerEfficiencyCells*
484AliMUONCalibrationData::TriggerEfficiency() const
485{
5398f946 486/// Return the trigger efficiency.
487
e7d7fa47 488 if (!fTriggerEfficiency)
489 {
5562688f 490 fTriggerEfficiency = CreateTriggerEfficiency(fRunNumber);
e7d7fa47 491 }
492 return fTriggerEfficiency;
493}
494
5562688f 495
e7d7fa47 496//_____________________________________________________________________________
497AliMUONTriggerLut*
498AliMUONCalibrationData::TriggerLut() const
499{
5398f946 500/// Return the trigger look up table.
501
e7d7fa47 502 if (!fTriggerLut)
503 {
5562688f 504 fTriggerLut = CreateTriggerLut(fRunNumber);
e7d7fa47 505 }
506 return fTriggerLut;
507}
508
c1bbaf66 509//_____________________________________________________________________________
510void
511AliMUONCalibrationData::Reset()
512{
513/// Reset all data
514
515 delete fPedestals;
516 fPedestals = 0x0;
517 delete fGains;
518 fGains = 0x0;
519 delete fHV;
520 fHV = 0x0;
49e110ec 521 delete fTriggerDCS;
522 fTriggerDCS = 0x0;
c1bbaf66 523 delete fLocalTriggerBoardMasks;
524 fLocalTriggerBoardMasks = 0x0;
92c23b09 525 delete fRegionalTriggerConfig;
526 fRegionalTriggerConfig = 0x0;
527 delete fGlobalTriggerCrateConfig;
528 fGlobalTriggerCrateConfig = 0x0;
529
c1bbaf66 530 delete fTriggerLut;
531 fTriggerLut = 0x0;
532 delete fTriggerEfficiency;
533 fTriggerEfficiency = 0x0;
534 delete fCapacitances;
535 fCapacitances = 0x0;
d067ba7c 536 delete fNeighbours;
537 fNeighbours = 0x0;
c1bbaf66 538}
539
630711ed 540//_____________________________________________________________________________
541void
542AliMUONCalibrationData::Check(Int_t runNumber)
543{
544 /// Self-check to see if we can read all data for a given run
545 /// from the current OCDB...
546
547 if ( ! CreateCapacitances(runNumber) )
548 {
549 AliErrorClass("Could not read capacitances");
550 }
551 else
552 {
553 AliInfoClass("Capacitances read OK");
554 }
555
556 if ( ! CreateGains(runNumber) )
557 {
558 AliErrorClass("Could not read gains");
559 }
560 else
561 {
562 AliInfoClass("Gains read OK");
563 }
564
565 if ( ! CreateGlobalTriggerCrateConfig(runNumber) )
566 {
567 AliErrorClass("Could not read Trigger Crate Config");
568 }
569 else
570 {
571 AliInfoClass("TriggerBoardMasks read OK");
572 }
573
574 if ( ! CreateHV(runNumber) )
575 {
576 AliErrorClass("Could not read HV");
577 }
578 else
579 {
580 AliInfoClass("HV read OK");
49e110ec 581 }
582
583 if ( ! CreateTriggerDCS(runNumber) )
584 {
585 AliErrorClass("Could not read Trigger HV and Currents");
586 }
587 else
588 {
589 AliInfoClass("Trigger HV and Currents read OK");
630711ed 590 }
591
592 if ( ! CreateNeighbours(runNumber) )
593 {
594 AliErrorClass("Could not read Neighbours");
595 }
596 else
597 {
598 AliInfoClass("Neighbours read OK");
599 }
600
601 if ( ! CreateLocalTriggerBoardMasks(runNumber) )
602 {
603 AliErrorClass("Could not read LocalTriggerBoardMasks");
604 }
605 else
606 {
607 AliInfoClass("LocalTriggerBoardMasks read OK");
608 }
609
610 if ( ! CreatePedestals(runNumber) )
611 {
612 AliErrorClass("Could not read pedestals");
613 }
614 else
615 {
616 AliInfoClass("Pedestals read OK");
617 }
618
619 if ( ! CreateRegionalTriggerConfig(runNumber) )
620 {
621 AliErrorClass("Could not read RegionalTriggerConfig");
622 }
623 else
624 {
625 AliInfoClass("RegionalTriggerBoardMasks read OK");
626 }
627
628 if ( ! CreateTriggerLut(runNumber) )
629 {
630 AliErrorClass("Could not read TriggerLut");
631 }
632 else
633 {
634 AliInfoClass("TriggerLut read OK");
635 }
636
637 if ( ! CreateTriggerEfficiency(runNumber) )
638 {
639 AliErrorClass("Could not read TriggerEfficiency");
640 }
641 else
642 {
643 AliInfoClass("TriggerEfficiency read OK");
644 }
645}
e7d7fa47 646
c5bdf179 647