1 // $Id: AliHLTTPCClusterTransformation.cxx 41244 2010-05-14 08:13:35Z kkanaki $
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: Kalliopi Kanaki <Kalliopi.Kanaki@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 AliHLTTPCClusterTransformation.cxx
20 @author Kalliopi Kanaki, Sergey Gorbubnov
26 #include "AliHLTTPCClusterTransformation.h"
27 #include "AliHLTTPCTransform.h"
28 #include "AliHLTTPCFastTransform.h"
30 #include "AliCDBPath.h"
31 #include "AliCDBManager.h"
32 #include "AliCDBEntry.h"
33 #include "AliGRPObject.h"
34 #include "AliTPCcalibDB.h"
35 #include "AliTPCTransform.h"
36 #include "AliTPCParam.h"
37 #include "AliTPCRecoParam.h"
38 #include "AliGeomManager.h"
39 #include "AliRunInfo.h"
40 #include "AliEventInfo.h"
41 #include "AliRawEventHeaderBase.h"
47 ClassImp(AliHLTTPCClusterTransformation) //ROOT macro for the implementation of ROOT specific class methods
49 AliRecoParam AliHLTTPCClusterTransformation::fOfflineRecoParam;
51 AliHLTTPCClusterTransformation::AliHLTTPCClusterTransformation()
56 // see header file for class documentation
58 // refer to README to build package
60 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
63 AliHLTTPCClusterTransformation::~AliHLTTPCClusterTransformation()
65 // see header file for class documentation
69 int AliHLTTPCClusterTransformation::Init( double FieldBz, Long_t TimeStamp )
73 if(!AliGeomManager::GetGeometry()){
74 AliGeomManager::LoadGeometry();
77 if(!AliGeomManager::GetGeometry()) return Error(-1,"AliHLTTPCClusterTransformation::Init: Can not initialise geometry");
79 AliTPCcalibDB* pCalib=AliTPCcalibDB::Instance();
81 if(!pCalib ) return Error(-2,"AliHLTTPCClusterTransformation::Init: Calibration not found");
83 pCalib->SetExBField(FieldBz);
85 if( !pCalib->GetTransform() ) return Error(-3,"AliHLTTPCClusterTransformation::Init: No TPC transformation found");
87 // -- Get AliRunInfo variables
89 AliGRPObject tmpGRP, *pGRP=0;
91 AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
93 if(!entry) return Error(-4,"AliHLTTPCClusterTransformation::Init: No GRP object found in data base");
96 TMap* m = dynamic_cast<TMap*>(entry->GetObject()); // old GRP entry
99 //cout<<"Found a TMap in GRP/GRP/Data, converting it into an AliGRPObject"<<endl;
102 pGRP->ReadValuesFromMap(m);
105 //cout<<"Found an AliGRPObject in GRP/GRP/Data, reading it"<<endl;
106 pGRP = dynamic_cast<AliGRPObject*>(entry->GetObject()); // new GRP entry
111 return Error(-5,"AliHLTTPCClusterTransformation::Init: Unknown format of the GRP object in data base");
114 AliRunInfo runInfo(pGRP->GetLHCState(),pGRP->GetBeamType(),pGRP->GetBeamEnergy(),pGRP->GetRunType(),pGRP->GetDetectorMask());
116 evInfo.SetEventType(AliRawEventHeaderBase::kPhysicsEvent);
118 entry=AliCDBManager::Instance()->Get("TPC/Calib/RecoParam");
120 if(!entry) return Error(-6,"AliHLTTPCClusterTransformation::Init: No TPC reco param entry found in data base");
122 TObject *recoParamObj = entry->GetObject();
123 if(!recoParamObj) return Error(-7,"AliHLTTPCClusterTransformation::Init: Empty TPC reco param entry in data base");
125 if (dynamic_cast<TObjArray*>(recoParamObj)) {
126 //cout<<"\n\nSet reco param from AliHLTTPCClusterTransformation: TObjArray found \n"<<endl;
127 fOfflineRecoParam.AddDetRecoParamArray(1,dynamic_cast<TObjArray*>(recoParamObj));
129 else if (dynamic_cast<AliDetectorRecoParam*>(recoParamObj)) {
130 //cout<<"\n\nSet reco param from AliHLTTPCClusterTransformation: AliDetectorRecoParam found \n"<<endl;
131 fOfflineRecoParam.AddDetRecoParam(1,dynamic_cast<AliDetectorRecoParam*>(recoParamObj));
133 return Error(-8,"AliHLTTPCClusterTransformation::Init: Unknown format of the TPC Reco Param entry in the data base");
137 fOfflineRecoParam.SetEventSpecie(&runInfo, evInfo, 0);
141 AliTPCRecoParam* recParam = (AliTPCRecoParam*)fOfflineRecoParam.GetDetRecoParam(1);
143 if( !recParam ) return Error(-9,"AliHLTTPCClusterTransformation::Init: No TPC Reco Param entry found for the given event specification");
146 pCalib->GetTransform()->SetCurrentRecoParam(recParam);
148 // set current time stamp and initialize the fast transformation
150 int err = fFastTransform.Init( pCalib->GetTransform(), TimeStamp );
153 return Error(-10,Form( "AliHLTTPCClusterTransformation::Init: Initialisation of Fast Transformation failed with error %d :%s",err,fFastTransform.GetLastError()) );
159 Bool_t AliHLTTPCClusterTransformation::IsInitialised() const
161 // Is the transformation initialised
162 return fFastTransform.IsInitialised();
165 void AliHLTTPCClusterTransformation::DeInit()
168 fFastTransform.DeInit();
171 Int_t AliHLTTPCClusterTransformation::SetCurrentTimeStamp( Long_t TimeStamp )
173 // Set the current time stamp
175 AliTPCRecoParam* recParam = (AliTPCRecoParam*)fOfflineRecoParam.GetDetRecoParam(1);
176 if( !recParam ) return Error(-1,"AliHLTTPCClusterTransformation::SetCurrentTimeStamp: No TPC Reco Param entry found");
178 AliTPCcalibDB* pCalib=AliTPCcalibDB::Instance();
179 if(!pCalib ) return Error(-2,"AliHLTTPCClusterTransformation::Init: Calibration not found");
181 if( !pCalib->GetTransform() ) return Error(-3,"AliHLTTPCClusterTransformation::SetCurrentTimeStamp: No TPC transformation found");
183 pCalib->GetTransform()->SetCurrentRecoParam(recParam);
185 int err = fFastTransform.SetCurrentTimeStamp( TimeStamp );
187 return Error(-4,Form( "AliHLTTPCClusterTransformation::SetCurrentTimeStamp: SetCurrentTimeStamp to the Fast Transformation failed with error %d :%s",err,fFastTransform.GetLastError()) );
192 void AliHLTTPCClusterTransformation::Print(const char* /*option*/) const
195 fFastTransform.Print();