ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

////////////////////////////////////////////////////////////////////////////
// AliTPCExBBShape class                                                  //
////////////////////////////////////////////////////////////////////////////

#include <AliMagF.h>
#include "TGeoGlobalMagField.h"
#include "AliTPCcalibDB.h"
#include "AliTPCParam.h"
#include "AliLog.h"

#include "AliTPCExBBShape.h"

AliTPCExBBShape::AliTPCExBBShape()
  : AliTPCCorrection("exb_bshape","ExB B-shape"),
    fC1(0.),fC2(0.),
    fBField(0)
{
  //
  // default constructor
  //
}

AliTPCExBBShape::~AliTPCExBBShape() {
  //
  // virtual destructor
  //
}

void AliTPCExBBShape::Init() {
  //
  // Initialization funtion
  //
  
  AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
  if (!magF) AliError("Magneticd field - not initialized");
  Double_t bzField = magF->SolenoidField()/10.; //field in T
  SetBField(magF);
  AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
  if (!param) AliError("Parameters - not initialized");
  Double_t vdrift = param->GetDriftV()/1000000.; // [cm/us]   // From dataBase: to be updated: per second (ideally)
  Double_t ezField = 400; // [V/cm]   // to be updated: never (hopefully)
  Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ; 
  // Correction Terms for effective omegaTau; obtained by a laser calibration run
  SetOmegaTauT1T2(wt,fT1,fT2);


}

void AliTPCExBBShape::Update(const TTimeStamp &/*timeStamp*/) {
  //
  // Update function 
  //
  AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
  if (!magF) AliError("Magneticd field - not initialized");
  Double_t bzField = magF->SolenoidField()/10.; //field in T
  SetBField(magF);
  AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
  if (!param) AliError("Parameters - not initialized");
  Double_t vdrift = param->GetDriftV()/1000000.; // [cm/us]   // From dataBase: to be updated: per second (ideally)
  Double_t ezField = 400; // [V/cm]   // to be updated: never (hopefully)
  Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ; 
  // Correction Terms for effective omegaTau; obtained by a laser calibration run
  SetOmegaTauT1T2(wt,fT1,fT2);


}



void AliTPCExBBShape::GetCorrection(const Float_t x[],const Short_t roc,Float_t dx[]) {
  //
  // Calculates the space point corrections of the B field inperfections (B field shape) 
  //

  if (!fBField) {
    for (Int_t j=0;j<3;++j) dx[j]=0.;
    return;
  }

  const Double_t xStart[3]={ x[0], x[1], x[2] };
  const Double_t xEnd[3]={ x[0],  x[1],  roc%36<18?fgkTPCZ0:-fgkTPCZ0 };

  Double_t intBStart[3];
  Double_t intBEnd[3];

  fBField->GetTPCRatInt(xStart,intBStart);
  fBField->GetTPCRatInt(xEnd,  intBEnd  );

  const Float_t intBxOverBz=(intBEnd[0]-intBStart[0]);
  const Float_t intByOverBz=(intBEnd[1]-intBStart[1]);
  
  dx[0]=fC2*intBxOverBz-fC1*intByOverBz;
  dx[1]=fC1*intBxOverBz+fC2*intByOverBz;
  dx[2]=0.;


}

void AliTPCExBBShape::GetBxAndByOverBz(const Float_t x[],const Short_t roc,Float_t BxByOverBz[]) {
  //
  // This function is purely for calibration purposes
  // Returns the via AliMagF obtaind B field integrals  
  // 

  if (!fBField) {
    for (Int_t j=0;j<3;++j) BxByOverBz[j]=0.;
    return;
  }

  const Double_t xStart[3]={ x[0], x[1], x[2] };
  const Double_t xEnd[3]={ x[0],  x[1],  roc%36<18?fgkTPCZ0:-fgkTPCZ0 };

  Double_t intBStart[3];
  Double_t intBEnd[3];

  fBField->GetTPCRatInt(xStart,intBStart);
  fBField->GetTPCRatInt(xEnd,  intBEnd  );

  const Float_t intBxOverBz=(intBEnd[0]-intBStart[0]);
  const Float_t intByOverBz=(intBEnd[1]-intBStart[1]);
  
  BxByOverBz[0]=intBxOverBz;
  BxByOverBz[1]=intByOverBz;

}

void AliTPCExBBShape::Print(Option_t* option) const {
  //
  // Print function to check the settings (e.g. voltage offsets)
  // option=="a" prints details of the B field settings and the 
  // C0 and C1 coefficents (for calibration purposes)
  //
  TString opt = option; opt.ToLower();
  printf("%s\t%s\n - B field settings:\n",GetTitle(),GetName());
  fBField->Print(option);
  //  printf(" - B field: X-Twist: %1.5lf rad, Y-Twist: %1.5lf rad \n",fBField->Print(option));
  if (opt.Contains("a")) { // Print all details  
    printf(" - T1: %1.4f, T2: %1.4f \n",fT1,fT2);
    printf(" - C1: %1.4f, C2: %1.4f \n",fC1,fC2);
  }    
}

Double_t AliTPCExBBShape::GetBFieldXYZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType){
  //
  // return B field at given x,y,z
  // 
  AliMagF* field = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
  if (!field) return 0;
  Double_t xyz[3]={gx,gy,gz};
  Double_t bxyz[3]={0};
  field->Field(xyz,bxyz);
  //
  Double_t r=TMath::Sqrt(gx*gx+gy*gy);
  //  Double_t b=TMath::Sqrt(bxyz[0]*bxyz[0]+bxyz[1]*bxyz[1]);
  if (axisType==0) {
    return (xyz[0]*bxyz[1]-xyz[1]*bxyz[0])/(bxyz[2]*r);
  }
  if (axisType==1){
    return (xyz[0]*bxyz[0]+xyz[1]*bxyz[1])/(bxyz[2]*r);
  }
  if (axisType==2) return bxyz[2];
  if (axisType==3) return bxyz[0];
  if (axisType==4) return bxyz[1];
  if (axisType==5) return bxyz[2];
  return bxyz[2];
}
 AliTPCExBBShape.cxx:1
 AliTPCExBBShape.cxx:2
 AliTPCExBBShape.cxx:3
 AliTPCExBBShape.cxx:4
 AliTPCExBBShape.cxx:5
 AliTPCExBBShape.cxx:6
 AliTPCExBBShape.cxx:7
 AliTPCExBBShape.cxx:8
 AliTPCExBBShape.cxx:9
 AliTPCExBBShape.cxx:10
 AliTPCExBBShape.cxx:11
 AliTPCExBBShape.cxx:12
 AliTPCExBBShape.cxx:13
 AliTPCExBBShape.cxx:14
 AliTPCExBBShape.cxx:15
 AliTPCExBBShape.cxx:16
 AliTPCExBBShape.cxx:17
 AliTPCExBBShape.cxx:18
 AliTPCExBBShape.cxx:19
 AliTPCExBBShape.cxx:20
 AliTPCExBBShape.cxx:21
 AliTPCExBBShape.cxx:22
 AliTPCExBBShape.cxx:23
 AliTPCExBBShape.cxx:24
 AliTPCExBBShape.cxx:25
 AliTPCExBBShape.cxx:26
 AliTPCExBBShape.cxx:27
 AliTPCExBBShape.cxx:28
 AliTPCExBBShape.cxx:29
 AliTPCExBBShape.cxx:30
 AliTPCExBBShape.cxx:31
 AliTPCExBBShape.cxx:32
 AliTPCExBBShape.cxx:33
 AliTPCExBBShape.cxx:34
 AliTPCExBBShape.cxx:35
 AliTPCExBBShape.cxx:36
 AliTPCExBBShape.cxx:37
 AliTPCExBBShape.cxx:38
 AliTPCExBBShape.cxx:39
 AliTPCExBBShape.cxx:40
 AliTPCExBBShape.cxx:41
 AliTPCExBBShape.cxx:42
 AliTPCExBBShape.cxx:43
 AliTPCExBBShape.cxx:44
 AliTPCExBBShape.cxx:45
 AliTPCExBBShape.cxx:46
 AliTPCExBBShape.cxx:47
 AliTPCExBBShape.cxx:48
 AliTPCExBBShape.cxx:49
 AliTPCExBBShape.cxx:50
 AliTPCExBBShape.cxx:51
 AliTPCExBBShape.cxx:52
 AliTPCExBBShape.cxx:53
 AliTPCExBBShape.cxx:54
 AliTPCExBBShape.cxx:55
 AliTPCExBBShape.cxx:56
 AliTPCExBBShape.cxx:57
 AliTPCExBBShape.cxx:58
 AliTPCExBBShape.cxx:59
 AliTPCExBBShape.cxx:60
 AliTPCExBBShape.cxx:61
 AliTPCExBBShape.cxx:62
 AliTPCExBBShape.cxx:63
 AliTPCExBBShape.cxx:64
 AliTPCExBBShape.cxx:65
 AliTPCExBBShape.cxx:66
 AliTPCExBBShape.cxx:67
 AliTPCExBBShape.cxx:68
 AliTPCExBBShape.cxx:69
 AliTPCExBBShape.cxx:70
 AliTPCExBBShape.cxx:71
 AliTPCExBBShape.cxx:72
 AliTPCExBBShape.cxx:73
 AliTPCExBBShape.cxx:74
 AliTPCExBBShape.cxx:75
 AliTPCExBBShape.cxx:76
 AliTPCExBBShape.cxx:77
 AliTPCExBBShape.cxx:78
 AliTPCExBBShape.cxx:79
 AliTPCExBBShape.cxx:80
 AliTPCExBBShape.cxx:81
 AliTPCExBBShape.cxx:82
 AliTPCExBBShape.cxx:83
 AliTPCExBBShape.cxx:84
 AliTPCExBBShape.cxx:85
 AliTPCExBBShape.cxx:86
 AliTPCExBBShape.cxx:87
 AliTPCExBBShape.cxx:88
 AliTPCExBBShape.cxx:89
 AliTPCExBBShape.cxx:90
 AliTPCExBBShape.cxx:91
 AliTPCExBBShape.cxx:92
 AliTPCExBBShape.cxx:93
 AliTPCExBBShape.cxx:94
 AliTPCExBBShape.cxx:95
 AliTPCExBBShape.cxx:96
 AliTPCExBBShape.cxx:97
 AliTPCExBBShape.cxx:98
 AliTPCExBBShape.cxx:99
 AliTPCExBBShape.cxx:100
 AliTPCExBBShape.cxx:101
 AliTPCExBBShape.cxx:102
 AliTPCExBBShape.cxx:103
 AliTPCExBBShape.cxx:104
 AliTPCExBBShape.cxx:105
 AliTPCExBBShape.cxx:106
 AliTPCExBBShape.cxx:107
 AliTPCExBBShape.cxx:108
 AliTPCExBBShape.cxx:109
 AliTPCExBBShape.cxx:110
 AliTPCExBBShape.cxx:111
 AliTPCExBBShape.cxx:112
 AliTPCExBBShape.cxx:113
 AliTPCExBBShape.cxx:114
 AliTPCExBBShape.cxx:115
 AliTPCExBBShape.cxx:116
 AliTPCExBBShape.cxx:117
 AliTPCExBBShape.cxx:118
 AliTPCExBBShape.cxx:119
 AliTPCExBBShape.cxx:120
 AliTPCExBBShape.cxx:121
 AliTPCExBBShape.cxx:122
 AliTPCExBBShape.cxx:123
 AliTPCExBBShape.cxx:124
 AliTPCExBBShape.cxx:125
 AliTPCExBBShape.cxx:126
 AliTPCExBBShape.cxx:127
 AliTPCExBBShape.cxx:128
 AliTPCExBBShape.cxx:129
 AliTPCExBBShape.cxx:130
 AliTPCExBBShape.cxx:131
 AliTPCExBBShape.cxx:132
 AliTPCExBBShape.cxx:133
 AliTPCExBBShape.cxx:134
 AliTPCExBBShape.cxx:135
 AliTPCExBBShape.cxx:136
 AliTPCExBBShape.cxx:137
 AliTPCExBBShape.cxx:138
 AliTPCExBBShape.cxx:139
 AliTPCExBBShape.cxx:140
 AliTPCExBBShape.cxx:141
 AliTPCExBBShape.cxx:142
 AliTPCExBBShape.cxx:143
 AliTPCExBBShape.cxx:144
 AliTPCExBBShape.cxx:145
 AliTPCExBBShape.cxx:146
 AliTPCExBBShape.cxx:147
 AliTPCExBBShape.cxx:148
 AliTPCExBBShape.cxx:149
 AliTPCExBBShape.cxx:150
 AliTPCExBBShape.cxx:151
 AliTPCExBBShape.cxx:152
 AliTPCExBBShape.cxx:153
 AliTPCExBBShape.cxx:154
 AliTPCExBBShape.cxx:155
 AliTPCExBBShape.cxx:156
 AliTPCExBBShape.cxx:157
 AliTPCExBBShape.cxx:158
 AliTPCExBBShape.cxx:159
 AliTPCExBBShape.cxx:160
 AliTPCExBBShape.cxx:161
 AliTPCExBBShape.cxx:162
 AliTPCExBBShape.cxx:163
 AliTPCExBBShape.cxx:164
 AliTPCExBBShape.cxx:165
 AliTPCExBBShape.cxx:166
 AliTPCExBBShape.cxx:167
 AliTPCExBBShape.cxx:168
 AliTPCExBBShape.cxx:169
 AliTPCExBBShape.cxx:170
 AliTPCExBBShape.cxx:171
 AliTPCExBBShape.cxx:172
 AliTPCExBBShape.cxx:173
 AliTPCExBBShape.cxx:174
 AliTPCExBBShape.cxx:175
 AliTPCExBBShape.cxx:176
 AliTPCExBBShape.cxx:177
 AliTPCExBBShape.cxx:178
 AliTPCExBBShape.cxx:179
 AliTPCExBBShape.cxx:180
 AliTPCExBBShape.cxx:181