3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project *
5 //* ALICE Experiment at CERN, All rights reserved. *
7 //* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
8 //* for The ALICE HLT Project. *
10 //* Permission to use, copy, modify and distribute this software and its *
11 //* documentation strictly for non-commercial purposes is hereby granted *
12 //* without fee, provided that the above copyright notice appears in all *
13 //* copies and that both the copyright notice and this permission notice *
14 //* appear in the supporting documentation. The authors make no claims *
15 //* about the suitability of this software for any purpose. It is *
16 //* provided "as is" without express or implied warranty. *
17 //**************************************************************************
19 /// @file AliHLTMisc.cxx
20 /// @author Matthias Richter
22 /// @brief Miscellaneous methods for the HLT AliRoot integration
24 #include "AliHLTMiscImplementation.h"
25 #include "AliHLTLogging.h"
26 #include "AliCDBManager.h"
27 #include "AliCDBStorage.h"
28 #include "AliCDBEntry.h"
29 #include "AliGRPManager.h"
30 #include "AliRawReader.h"
31 #include "AliTracker.h"
32 #ifndef HAVE_NOT_ALIESDHLTDECISION
33 #include "AliESDHLTDecision.h"
34 #endif //HAVE_NOT_ALIESDHLTDECISION
35 #include "TGeoGlobalMagField.h"
36 #include "AliHLTGlobalTriggerDecision.h"
38 /** ROOT macro for the implementation of ROOT specific class methods */
39 ClassImp(AliHLTMiscImplementation);
41 AliHLTMiscImplementation::AliHLTMiscImplementation()
45 AliHLTMiscImplementation::~AliHLTMiscImplementation()
47 // see header file for function documentation
50 int AliHLTMiscImplementation::InitCDB(const char* cdbpath)
52 // see header file for function documentation
54 AliCDBManager* pCDB = AliCDBManager::Instance();
57 log.Logging(kHLTLogError, "InitCDB", "CDB handling", "Could not get CDB instance");
59 if (cdbpath && cdbpath[0]!=0) {
61 if (!uri.BeginsWith("local://") &&
62 !uri.Contains("://")) {
63 // assume a local path if no uri specifier is found
67 pCDB->SetDefaultStorage(uri);
68 log.Logging(kHLTLogDebug, "InitCDB", "CDB handling", "CDB instance 0x%x", pCDB);
69 } else if (!pCDB->IsDefaultStorageSet()) {
70 const char* cdbUri="local://$ALICE_ROOT/OCDB";
71 pCDB->SetDefaultStorage(cdbUri);
73 log.Logging(kHLTLogInfo, "InitCDB", "CDB handling", "set default URI: %s", cdbUri);
79 int AliHLTMiscImplementation::SetCDBRunNo(int runNo)
81 // see header file for function documentation
83 AliCDBManager* pCDB = AliCDBManager::Instance();
86 log.Logging(kHLTLogError, "SetCDBRunNo", "CDB handling", "Could not get CDB instance");
93 int AliHLTMiscImplementation::GetCDBRunNo()
95 // see header file for function documentation
96 AliCDBManager* pCDB = AliCDBManager::Instance();
99 log.Logging(kHLTLogError, "SetCDBRunNo", "CDB handling", "Could not get CDB instance");
101 return pCDB->GetRun();
106 AliCDBEntry* AliHLTMiscImplementation::LoadOCDBEntry(const char* path, int runNo, int version, int subVersion)
108 // see header file for function documentation
109 AliCDBStorage* store = AliCDBManager::Instance()->GetDefaultStorage();
113 if (version<0) version = store->GetLatestVersion(path, runNo);
114 if (subVersion<0) subVersion = store->GetLatestSubVersion(path, runNo, version);
115 return AliCDBManager::Instance()->Get(path, runNo, version, subVersion);
118 TObject* AliHLTMiscImplementation::ExtractObject(AliCDBEntry* entry)
120 // see header file for function documentation
121 if (!entry) return NULL;
122 return entry->GetObject();
125 int AliHLTMiscImplementation::InitMagneticField() const
127 // see header file for function documentation
129 // BAD: unit test fails if I call TGeoGlobalMagField::Instance()
130 // at this point. Something goes wrong in the cleaning of the global
133 if (TGeoGlobalMagField::Instance()->GetField()) {
134 // everything set, but think about storing the currents for
140 // The magnetic field is initialized once at the start
141 // of run. The fields are supposed to be constant througout the
142 // data taking of one run. The run is aborted if the changes
143 // exceed a certain limit.
144 AliGRPManager grpman;
145 if (grpman.ReadGRPEntry() && grpman.SetMagField()) {
152 AliHLTUInt64_t AliHLTMiscImplementation::GetTriggerMask(AliRawReader* rawReader) const
154 // see header file for function documentation
155 if (!rawReader) return 0;
156 AliHLTUInt64_t trgMask=0;
158 const UInt_t* pattern=rawReader->GetTriggerPattern();
159 trgMask=pattern[1]&0xfffffff; // 28 upper bits of the 50 bit mask
161 trgMask|=pattern[0]; // 32 lower bits of the mask
166 Double_t AliHLTMiscImplementation::GetBz()
169 return AliTracker::GetBz();
172 Double_t AliHLTMiscImplementation::GetBz(const Double_t *r)
174 // Returns Bz (kG) at the point "r" .
175 return AliTracker::GetBz(r);
178 void AliHLTMiscImplementation::GetBxByBz(const Double_t r[3], Double_t b[3])
180 // Returns Bx, By and Bz (kG) at the point "r" .
181 return AliTracker::GetBxByBz(r, b);
184 const TClass* AliHLTMiscImplementation::IsAliESDHLTDecision() const
186 // Return the IsA of the AliESDHLTDecision class
187 #ifndef HAVE_NOT_ALIESDHLTDECISION
188 return AliESDHLTDecision::Class();
189 #else // HAVE_NOT_ALIESDHLTDECISION
191 #endif // HAVE_NOT_ALIESDHLTDECISION
194 int AliHLTMiscImplementation::Copy(const AliHLTGlobalTriggerDecision* pDecision, TObject* object) const
196 // Copy HLT global trigger decision to AliESDHLTDecision container
197 if (!pDecision || !object) return -EINVAL;
198 #ifndef HAVE_NOT_ALIESDHLTDECISION
199 AliESDHLTDecision* pESDHLTDecision=NULL;
200 if (object->IsA()==NULL ||
201 object->IsA() != AliESDHLTDecision::Class() ||
202 (pESDHLTDecision=dynamic_cast<AliESDHLTDecision*>(object))==NULL) {
203 // HLTError("can not copy HLT global decision to object of class \"%s\"",
204 // object->IsA()?object->IsA()->GetName():"NULL");
208 pESDHLTDecision->~AliESDHLTDecision();
209 new (pESDHLTDecision) AliESDHLTDecision(pDecision->Result(), pDecision->GetTitle());
211 #endif // HAVE_NOT_ALIESDHLTDECISION