#include "TMath.h"
-#include "AliFieldMap.h"
+//#include "AliFieldMap.h"
#include "AliMagF.h"
#include "TTreeStream.h"
#include "AliTPCExBFirst.h"
ClassImp(AliTPCExBFirst)
const Double_t AliTPCExBFirst::fgkEM=1.602176487e-19/9.10938215e-31;
-const Double_t AliTPCExBFirst::fgkDriftField=40.e3;
+const Double_t AliTPCExBFirst::fgkDriftField=-40.e3;
AliTPCExBFirst::AliTPCExBFirst()
: fDriftVelocity(0),
// drift velocity. Since some kind of lookuptable is created the
// number of its meshpoints can be supplied.
//
- ConstructCommon(0,bField);
+ // ConstructCommon(0,bField);
+ ConstructCommon(bField);
SetInstance(this);
}
+/*
AliTPCExBFirst::AliTPCExBFirst(const AliFieldMap *bFieldMap,
Double_t driftVelocity)
: fDriftVelocity(driftVelocity),
ConstructCommon(bFieldMap,0);
}
+*/
AliTPCExBFirst::~AliTPCExBFirst() {
//
}
}
-void AliTPCExBFirst::ConstructCommon(const AliFieldMap *bFieldMap,
+
+void AliTPCExBFirst::ConstructCommon(//const AliFieldMap *bFieldMap,
const AliMagF *bField) {
//
// THIS IS PRIVATE! (a helper for the constructor)
Double_t bx=0.,by=0.;
for (int k=0;k<fkNZ;++k) {
x[2]=fkZMin+k*(fkZMax-fkZMin)/(fkNZ-1);
- Float_t b[3];
+ Double_t b[3];
// the x is not const in the Field function...
- Float_t xt[3];
+ Double_t xt[3];
for (int l=0;l<3;++l) xt[l]=x[l];
// that happens due to the lack of a sophisticated class design:
- if (bFieldMap!=0)
- bFieldMap->Field(xt,b);
- else
- bField->Field(xt,b);
+ // if (bFieldMap!=0)
+ // bFieldMap->Field(xt,b);
+ // else
+ ((AliMagF*)bField)->Field(xt,b);
bx+=b[0]/10.;
by+=b[1]/10.;
fkMeanBx[(k*fkNY+j)*fkNX+i]=bx;
fkMeanBz/=nBz;
}
+
void AliTPCExBFirst::GetMeanFields(Double_t rx,Double_t ry,Double_t rz,
Double_t *Bx,Double_t *By) const {
//
double s0x=fkMeanBx[yi1*fkNX+xi1]*dx1*dy1
+fkMeanBx[yi2*fkNX+xi1]*dx1*dy
- +fkMeanBx[yi1*fkNX+xi2]*dx *dy
- +fkMeanBx[yi2*fkNX+xi2]*dx *dy1;
+ +fkMeanBx[yi1*fkNX+xi2]*dx *dy1
+ +fkMeanBx[yi2*fkNX+xi2]*dx *dy;
double s0y=fkMeanBy[yi1*fkNX+xi1]*dx1*dy1
+fkMeanBy[yi2*fkNX+xi1]*dx1*dy
- +fkMeanBy[yi1*fkNX+xi2]*dx *dy
- +fkMeanBy[yi2*fkNX+xi2]*dx *dy1;
+ +fkMeanBy[yi1*fkNX+xi2]*dx *dy1
+ +fkMeanBy[yi2*fkNX+xi2]*dx *dy;
Int_t zi0=zi1-1;
double snmx,snmy;
if (zi0>=0) {
snmx=fkMeanBx[(zi0*fkNY+yi1)*fkNX+xi1]*dx1*dy1
+fkMeanBx[(zi0*fkNY+yi2)*fkNX+xi1]*dx1*dy
- +fkMeanBx[(zi0*fkNY+yi1)*fkNX+xi2]*dx *dy
- +fkMeanBx[(zi0*fkNY+yi2)*fkNX+xi2]*dx *dy1;
+ +fkMeanBx[(zi0*fkNY+yi1)*fkNX+xi2]*dx *dy1
+ +fkMeanBx[(zi0*fkNY+yi2)*fkNX+xi2]*dx *dy;
snmy=fkMeanBy[(zi0*fkNY+yi1)*fkNX+xi1]*dx1*dy1
+fkMeanBy[(zi0*fkNY+yi2)*fkNX+xi1]*dx1*dy
- +fkMeanBy[(zi0*fkNY+yi1)*fkNX+xi2]*dx *dy
- +fkMeanBy[(zi0*fkNY+yi2)*fkNX+xi2]*dx *dy1;
+ +fkMeanBy[(zi0*fkNY+yi1)*fkNX+xi2]*dx *dy1
+ +fkMeanBy[(zi0*fkNY+yi2)*fkNX+xi2]*dx *dy;
}
else
snmx=snmy=0.;
double snx=fkMeanBx[(zi1*fkNY+yi1)*fkNX+xi1]*dx1*dy1
+fkMeanBx[(zi1*fkNY+yi2)*fkNX+xi1]*dx1*dy
- +fkMeanBx[(zi1*fkNY+yi1)*fkNX+xi2]*dx *dy
- +fkMeanBx[(zi1*fkNY+yi2)*fkNX+xi2]*dx *dy1;
+ +fkMeanBx[(zi1*fkNY+yi1)*fkNX+xi2]*dx *dy1
+ +fkMeanBx[(zi1*fkNY+yi2)*fkNX+xi2]*dx *dy;
double sny=fkMeanBy[(zi1*fkNY+yi1)*fkNX+xi1]*dx1*dy1
+fkMeanBy[(zi1*fkNY+yi2)*fkNX+xi1]*dx1*dy
- +fkMeanBy[(zi1*fkNY+yi1)*fkNX+xi2]*dx *dy
- +fkMeanBy[(zi1*fkNY+yi2)*fkNX+xi2]*dx *dy1;
+ +fkMeanBy[(zi1*fkNY+yi1)*fkNX+xi2]*dx *dy1
+ +fkMeanBy[(zi1*fkNY+yi2)*fkNX+xi2]*dx *dy;
double snpx=fkMeanBx[(zi2*fkNY+yi1)*fkNX+xi1]*dx1*dy1
+fkMeanBx[(zi2*fkNY+yi2)*fkNX+xi1]*dx1*dy
- +fkMeanBx[(zi2*fkNY+yi1)*fkNX+xi2]*dx *dy
- +fkMeanBx[(zi2*fkNY+yi2)*fkNX+xi2]*dx *dy1;
+ +fkMeanBx[(zi2*fkNY+yi1)*fkNX+xi2]*dx *dy1
+ +fkMeanBx[(zi2*fkNY+yi2)*fkNX+xi2]*dx *dy;
double snpy=fkMeanBy[(zi2*fkNY+yi1)*fkNX+xi1]*dx1*dy1
+fkMeanBy[(zi2*fkNY+yi2)*fkNX+xi1]*dx1*dy
- +fkMeanBy[(zi2*fkNY+yi1)*fkNX+xi2]*dx *dy
- +fkMeanBy[(zi2*fkNY+yi2)*fkNX+xi2]*dx *dy1;
+ +fkMeanBy[(zi2*fkNY+yi1)*fkNX+xi2]*dx *dy1
+ +fkMeanBy[(zi2*fkNY+yi2)*fkNX+xi2]*dx *dy;
+
+
+
*Bx=0.5*(((snpx-2.*snx+snmx)*dz+2.*(snx-snmx))*dz+snx-s0x+snmx);
*By=0.5*(((snpy-2.*sny+snmy)*dz+2.*(sny-snmy))*dz+sny-s0y+snmy);
//TODO: make this nice