AliTPCExBBShape::AliTPCExBBShape()
: AliTPCCorrection("exb_bshape","ExB B-shape"),
fC1(0.),fC2(0.),
+ fScaling(1.),
fBField(0)
{
//
//
}
+
+
+
+Bool_t AliTPCExBBShape::AddCorrectionCompact(AliTPCCorrection* corr, Double_t weight){
+ //
+ // Add correction and make them compact
+ // Assumptions:
+ // - origin of distortion/correction are additive
+ // - only correction ot the same type supported ()
+ if (corr==NULL) {
+ AliError("Zerro pointer - correction");
+ return kFALSE;
+ }
+ AliTPCExBBShape* corrC = dynamic_cast<AliTPCExBBShape *>(corr);
+ if (corrC == NULL) {
+ AliError(TString::Format("Inconsistent class types: %s\%s",IsA()->GetName(),corr->IsA()->GetName()).Data());
+ return kFALSE;
+ }
+ fScaling= weight;
+ //
+ return kTRUE;
+}
+
+
void AliTPCExBBShape::Init() {
//
// Initialization funtion
fBField->GetTPCRatInt(xStart,intBStart);
fBField->GetTPCRatInt(xEnd, intBEnd );
- const Float_t intBxOverBz=(intBEnd[0]-intBStart[0]);
- const Float_t intByOverBz=(intBEnd[1]-intBStart[1]);
+ const Float_t intBxOverBz=fScaling*(intBEnd[0]-intBStart[0]);
+ const Float_t intByOverBz=fScaling*(intBEnd[1]-intBStart[1]);
dx[0]=fC2*intBxOverBz-fC1*intByOverBz;
dx[1]=fC1*intBxOverBz+fC2*intByOverBz;
fBField->GetTPCRatInt(xStart,intBStart);
fBField->GetTPCRatInt(xEnd, intBEnd );
- const Float_t intBxOverBz=(intBEnd[0]-intBStart[0]);
- const Float_t intByOverBz=(intBEnd[1]-intBStart[1]);
+ const Float_t intBxOverBz=fScaling*(intBEnd[0]-intBStart[0]);
+ const Float_t intByOverBz=fScaling*(intBEnd[1]-intBStart[1]);
BxByOverBz[0]=intBxOverBz;
BxByOverBz[1]=intByOverBz;
class AliTPCExBBShape : public AliTPCCorrection {
public:
AliTPCExBBShape();
- virtual ~AliTPCExBBShape();
+ virtual ~AliTPCExBBShape();
+ virtual Bool_t AddCorrectionCompact(AliTPCCorrection* corr, Double_t weight);
// initialization and update functions
virtual void Init();
virtual void Print(Option_t* option="") const;
static Double_t GetBFieldXYZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType);
-
+ Double_t GetScaling() const {return fScaling;}
private:
Float_t fC1; // coefficient C1 (compare Jim Thomas's notes for definitions)
Float_t fC2; // coefficient C2 (compare Jim Thomas's notes for definitions)
-
+ Float_t fScaling; // scaling factor to rescale distortion - for tests purposes only
AliMagF *fBField; // pointer to magnetic field
AliTPCExBBShape & operator =(const AliTPCExBBShape &); // dummy assignment operator