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"
29 #include "AliTPCcalibDB.h"
30 #include "AliTPCTransform.h"
31 #include "AliTPCParam.h"
32 #include "AliTPCRecoParam.h"
33 #include "AliGeomManager.h"
34 //#include "Riostream.h"
36 ClassImp(AliHLTTPCClusterTransformation) //ROOT macro for the implementation of ROOT specific class methods
38 AliHLTTPCClusterTransformation::AliHLTTPCClusterTransformation()
40 fOfflineTransform(NULL),
41 fOfflineTPCParam( NULL ),
44 // see header file for class documentation
46 // refer to README to build package
48 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
52 for( int i=0; i<9; i++ ) fAliR[i] = 0;
58 AliHLTTPCClusterTransformation::AliHLTTPCClusterTransformation(const AliHLTTPCClusterTransformation&)
60 fOfflineTransform(NULL),
61 fOfflineTPCParam( NULL ),
64 // copy constructor prohibited
68 for( int i=0; i<9; i++ ) fAliR[i] = 0;
74 AliHLTTPCClusterTransformation& AliHLTTPCClusterTransformation::operator=(const AliHLTTPCClusterTransformation&)
76 // assignment operator prohibited
80 AliHLTTPCClusterTransformation::~AliHLTTPCClusterTransformation()
82 // see header file for class documentation
83 //delete fOfflineTransform;
87 int AliHLTTPCClusterTransformation::Init( double FieldBz, UInt_t TimeStamp )
91 //delete fOfflineTransform;
92 fOfflineTransform = 0;
95 AliTPCcalibDB* pCalib=AliTPCcalibDB::Instance();
97 if(!pCalib ) return -1;
99 pCalib->SetExBField(FieldBz);
101 if(!AliGeomManager::GetGeometry()){
102 AliGeomManager::LoadGeometry();
105 if( !pCalib->GetTransform() ) return -2;
107 //fOfflineTransform = new AliTPCTransform (*pCalib->GetTransform());
108 fOfflineTransform = pCalib->GetTransform();
109 fOfflineTransform->SetCurrentRecoParam( AliTPCRecoParam::GetHLTParam() );
110 fOfflineTransform->SetCurrentTimeStamp( TimeStamp );
111 fOfflineTPCParam = pCalib->GetParameters();
112 if( !fOfflineTPCParam ) return -3;
114 fOfflineTPCParam->Update();
115 fOfflineTPCParam->ReadGeoMatrices();
122 for( int i=0; i<9; i++ ) fAliR[i] = 0;
131 void AliHLTTPCClusterTransformation::SetCurrentTimeStamp( UInt_t TimeStamp )
133 // Set the current time stamp
134 if( fOfflineTransform ) fOfflineTransform->SetCurrentTimeStamp( TimeStamp );
138 int AliHLTTPCClusterTransformation::Transform( int Slice, int Row, float Pad, float Time, float XYZ[] )
140 // Convert row, pad, time to X Y Z
142 Int_t sector=-99, thisrow=-99;
143 AliHLTTPCTransform::Slice2Sector( Slice, Row, sector, thisrow);
145 if( !fOfflineTransform ){
146 AliHLTTPCTransform::Raw2Local( XYZ, sector, thisrow, Pad, Time);
147 if(Slice>17) XYZ[1]= - XYZ[1];
151 Int_t iSector[1]= {sector};
152 Double_t x[3] = { thisrow, Pad, Time };
153 fOfflineTransform->Transform(x,iSector,0,1);
155 if( sector!= fLastSector ){
156 if( fOfflineTPCParam && sector<fOfflineTPCParam->GetNSector() ){
157 TGeoHMatrix *alignment = fOfflineTPCParam->GetClusterMatrix( sector );
159 const Double_t *tr = alignment->GetTranslation();
160 const Double_t *rot = alignment->GetRotationMatrix();
162 for( int i=0; i<3; i++ ) fAliT[i] = tr[i];
163 for( int i=0; i<9; i++ ) fAliR[i] = rot[i];
170 for( int i=0; i<9; i++ ) fAliR[i] = 0;
175 fLastSector = sector;
177 // alignment->LocalToMaster( x, y);
179 XYZ[0] = fAliT[0] + x[0]*fAliR[0] + x[1]*fAliR[1] + x[2]*fAliR[2];
180 XYZ[1] = fAliT[1] + x[0]*fAliR[3] + x[1]*fAliR[4] + x[2]*fAliR[5];
181 XYZ[2] = fAliT[2] + x[0]*fAliR[6] + x[1]*fAliR[7] + x[2]*fAliR[8];