#include <TGeoMatrix.h>
#include "AliLog.h"
-#include "AliTracker.h"
-#include "AliCodeTimer.h"
#include "AliTRDtransform.h"
#include "AliTRDcluster.h"
ClassImp(AliTRDtransform)
+AliTRDgeometry* AliTRDtransform::fgGeo = NULL;
+
//_____________________________________________________________________________
-//AliTRDtransform::AliTRDtransform()
-// :AliTransform()
AliTRDtransform::AliTRDtransform()
:TObject()
- ,fGeo(0x0)
,fDetector(0)
,fParam(0x0)
,fCalibration(0x0)
,fCalVdriftROC(0x0)
,fCalT0ROC(0x0)
,fCalPRFROC(0x0)
- ,fCalVdriftDet(0x0)
- ,fCalT0Det(0x0)
+ ,fkCalVdriftDet(0x0)
+ ,fkCalT0Det(0x0)
,fCalVdriftDetValue(0)
,fCalT0DetValue(0)
,fSamplingFrequency(0)
// AliTRDtransform default constructor
//
+ if(!fgGeo){
+ fgGeo = new AliTRDgeometry();
+ if (!fgGeo->CreateClusterMatrixArray()) {
+ AliError("Could not get transformation matrices\n");
+ }
+ }
+
+ fParam = AliTRDCommonParam::Instance();
+ if (!fParam) {
+ AliError("Could not get common parameters\n");
+ }
+ fSamplingFrequency = fParam->GetSamplingFrequency();
+
+ fCalibration = AliTRDcalibDB::Instance();
+ if (!fCalibration) {
+ AliError("Cannot find calibration object");
+ }
+
+ // Get the calibration objects for the global calibration
+ fkCalVdriftDet = fCalibration->GetVdriftDet();
+ fkCalT0Det = fCalibration->GetT0Det();
+
}
//_____________________________________________________________________________
-//AliTRDtransform::AliTRDtransform(Int_t det)
-// :AliTransform()
AliTRDtransform::AliTRDtransform(Int_t det)
:TObject()
- ,fGeo(0x0)
,fDetector(0)
,fParam(0x0)
,fCalibration(0x0)
,fCalVdriftROC(0x0)
,fCalT0ROC(0x0)
,fCalPRFROC(0x0)
- ,fCalVdriftDet(0x0)
- ,fCalT0Det(0x0)
+ ,fkCalVdriftDet(0x0)
+ ,fkCalT0Det(0x0)
,fCalVdriftDetValue(0)
,fCalT0DetValue(0)
,fSamplingFrequency(0)
// AliTRDtransform constructor for a given detector
//
- fGeo = new AliTRDgeometry();
- if (!fGeo->CreateClusterMatrixArray()) {
- AliError("Could not get transformation matrices\n");
+ if(!fgGeo){
+ fgGeo = new AliTRDgeometry();
+ if (!fgGeo->CreateClusterMatrixArray()) {
+ AliError("Could not get transformation matrices\n");
+ }
}
fParam = AliTRDCommonParam::Instance();
}
// Get the calibration objects for the global calibration
- fCalVdriftDet = fCalibration->GetVdriftDet();
- fCalT0Det = fCalibration->GetT0Det();
+ fkCalVdriftDet = fCalibration->GetVdriftDet();
+ fkCalT0Det = fCalibration->GetT0Det();
SetDetector(det);
}
//_____________________________________________________________________________
-//AliTRDtransform::AliTRDtransform(const AliTRDtransform &t)
-// :AliTransform(t)
AliTRDtransform::AliTRDtransform(const AliTRDtransform &t)
:TObject(t)
- ,fGeo(0x0)
,fDetector(t.fDetector)
,fParam(0x0)
,fCalibration(0x0)
,fCalVdriftROC(0x0)
,fCalT0ROC(0x0)
,fCalPRFROC(0x0)
- ,fCalVdriftDet(0x0)
- ,fCalT0Det(0x0)
+ ,fkCalVdriftDet(0x0)
+ ,fkCalT0Det(0x0)
,fCalVdriftDetValue(0)
,fCalT0DetValue(0)
,fSamplingFrequency(0)
// AliTRDtransform copy constructor
//
- if (fGeo) {
- delete fGeo;
- }
- fGeo = new AliTRDgeometry();
- fGeo->CreateClusterMatrixArray();
-
fParam = AliTRDCommonParam::Instance();
if (!fParam) {
AliError("Could not get common parameters\n");
if (!fCalibration) {
AliError("Cannot find calibration object");
}
- fCalVdriftDet = fCalibration->GetVdriftDet();
- fCalT0Det = fCalibration->GetT0Det();
+ fkCalVdriftDet = fCalibration->GetVdriftDet();
+ fkCalT0Det = fCalibration->GetT0Det();
}
// AliTRDtransform destructor
//
- if (fGeo) {
- delete fGeo;
+}
+
+//_____________________________________________________________________________
+AliTRDtransform &AliTRDtransform::operator=(const AliTRDtransform &t)
+{
+ //
+ // Assignment operator
+ //
+
+ if (this != &t) {
+ ((AliTRDtransform &) t).Copy(*this);
}
+ return *this;
+
+}
+
+//_____________________________________________________________________________
+void AliTRDtransform::Copy(TObject &t) const
+{
+ //
+ // Copy function
+ //
+
+ ((AliTRDtransform &) t).fDetector = fDetector;
+ ((AliTRDtransform &) t).fParam = AliTRDCommonParam::Instance();
+ ((AliTRDtransform &) t).fCalibration = AliTRDcalibDB::Instance();
+ if (fCalibration) {
+ ((AliTRDtransform &) t).fkCalVdriftDet = fCalibration->GetVdriftDet();
+ ((AliTRDtransform &) t).fkCalT0Det = fCalibration->GetT0Det();
+ }
+ else {
+ ((AliTRDtransform &) t).fkCalVdriftDet = 0;
+ ((AliTRDtransform &) t).fkCalT0Det = 0;
+ }
+ ((AliTRDtransform &) t).fCalVdriftROC = 0x0;
+ ((AliTRDtransform &) t).fCalT0ROC = 0x0;
+ ((AliTRDtransform &) t).fCalPRFROC = 0x0;
+ ((AliTRDtransform &) t).fCalVdriftDetValue = 0;
+ ((AliTRDtransform &) t).fCalT0DetValue = 0;
+ ((AliTRDtransform &) t).fSamplingFrequency = 0;
+ ((AliTRDtransform &) t).fPadPlane = 0x0;
+ ((AliTRDtransform &) t).fZShiftIdeal = 0;
+ ((AliTRDtransform &) t).fMatrix = 0x0;
+
}
//_____________________________________________________________________________
fCalPRFROC = fCalibration->GetPRFROC(det);
// Get the detector wise defined calibration values
- fCalVdriftDetValue = fCalVdriftDet->GetValue(det);
- fCalT0DetValue = fCalT0Det->GetValue(det);
+ fCalVdriftDetValue = fkCalVdriftDet->GetValue(det);
+ fCalT0DetValue = fkCalT0Det->GetValue(det);
// Shift needed to define Z-position relative to middle of chamber
- Int_t layer = fGeo->GetLayer(det);
- Int_t stack = fGeo->GetStack(det);
- fPadPlane = fGeo->GetPadPlane(layer,stack);
+ Int_t layer = fgGeo->GetLayer(det);
+ Int_t stack = fgGeo->GetStack(det);
+ fPadPlane = fgGeo->GetPadPlane(layer,stack);
fZShiftIdeal = 0.5 * (fPadPlane->GetRow0() + fPadPlane->GetRowEnd());
// Get the current transformation matrix
- fMatrix = fGeo->GetClusterMatrix(det);
+ fMatrix = fgGeo->GetClusterMatrix(det);
}
Double_t vd = fCalVdriftDetValue * fCalVdriftROC->GetValue(col,row);
// t0
Double_t t0 = fCalT0DetValue + fCalT0ROC->GetValue(col,row);
+ t0 /= fSamplingFrequency;
// ExB correction
Double_t exb = AliTRDCommonParam::Instance()->GetOmegaTau(vd);
c->SetSigmaZ2(fPadPlane->GetRowSize(row)*fPadPlane->GetRowSize(row)/12.);
return kTRUE;
+
}
//_____________________________________________________________________________
if (setDet) SetDetector(c->GetDetector());
Transform(c);
+
}