X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliMagFMaps.cxx;h=f8eb71ebf662bff657b5d796a9b75af8c3dbf568;hb=67bda69e920ab25628f022a4e8b3a624eb77abef;hp=46055aaeea39c95ad0d6f808d4b2e31d724a7115;hpb=177a7fabdc03be32fcfd7c0388aee3f0a2b57124;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliMagFMaps.cxx b/STEER/AliMagFMaps.cxx index 46055aaeea3..f8eb71ebf66 100644 --- a/STEER/AliMagFMaps.cxx +++ b/STEER/AliMagFMaps.cxx @@ -24,34 +24,35 @@ #include #include -#include #include "AliFieldMap.h" #include "AliMagFMaps.h" - ClassImp(AliMagFMaps) + //_______________________________________________________________________ AliMagFMaps::AliMagFMaps(): fSolenoid(0), - fL3Option(0), - fFieldRead(0) + fSolenoidUser(0.), + fL3Option(0) { // // Default constructor // + // + // Don't replicate field information in gAlice fFieldMap[0] = fFieldMap[1] = fFieldMap[2] = 0; } //_______________________________________________________________________ -AliMagFMaps::AliMagFMaps(const char *name, const char *title, const Int_t integ, - const Float_t factor, const Float_t fmax, const Int_t map, - const Int_t l3): - AliMagF(name,title,integ,factor,fmax), +AliMagFMaps::AliMagFMaps(const char *name, const char *title, Int_t integ, + Float_t factor, Float_t fmax, Int_t map, + Int_t l3): + AliMagFC(name,title,integ,factor,fmax), fSolenoid(0), - fL3Option(l3), - fFieldRead(0) + fSolenoidUser(0), + fL3Option(l3) { // // Standard constructor @@ -60,9 +61,7 @@ AliMagFMaps::AliMagFMaps(const char *name, const char *title, const Int_t integ, fFieldMap[0] = 0; fMap = map; fL3Option = l3; - ReadField(); - fFieldRead = 1; // // Don't replicate field information in gAlice for (Int_t i = 0; i < 3; i++) fFieldMap[i]->SetWriteEnable(0); @@ -71,10 +70,9 @@ AliMagFMaps::AliMagFMaps(const char *name, const char *title, const Int_t integ, //_______________________________________________________________________ AliMagFMaps::AliMagFMaps(const AliMagFMaps &magf): - AliMagF(magf), + AliMagFC(magf), fSolenoid(0), - fL3Option(0), - fFieldRead(0) + fL3Option(0) { // // Copy constructor @@ -100,20 +98,18 @@ void AliMagFMaps::ReadField() // // don't read twice // - if (fFieldRead) return; - fFieldRead = 1; + if (!fgReadField) return; + fgReadField = 0; // char* fname; TFile* file = 0; if (fMap == k2kG) { - if (fL3Option) { - fSolenoid = 2.; - fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/L3B02.root"); - file = new TFile(fname); - fFieldMap[0] = dynamic_cast(file->Get("L3B02")); - file->Close(); - delete file; - } + fSolenoid = 2.; + fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/L3B02.root"); + file = new TFile(fname); + fFieldMap[0] = dynamic_cast(file->Get("L3B02")); + file->Close(); + delete file; fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/DipB02.root"); file = new TFile(fname); fFieldMap[1] = dynamic_cast(file->Get("DipB02")); @@ -125,17 +121,13 @@ void AliMagFMaps::ReadField() fFieldMap[2] = dynamic_cast(file->Get("ExtB02")); file->Close(); delete file; - } else if (fMap == k4kG) { - if (fL3Option) { - fSolenoid = 4.; - fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/L3B04.root"); - file = new TFile(fname); - fFieldMap[0] = dynamic_cast(file->Get("L3B04")); - file->Close(); - delete file; - } - + fSolenoid = 4.; + fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/L3B04.root"); + file = new TFile(fname); + fFieldMap[0] = dynamic_cast(file->Get("L3B04")); + file->Close(); + delete file; fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/DipB04.root"); file = new TFile(fname); fFieldMap[1] = dynamic_cast(file->Get("DipB04")); @@ -148,15 +140,12 @@ void AliMagFMaps::ReadField() file->Close(); delete file; } else if (fMap == k5kG) { - if (fL3Option) { - fSolenoid = 5.; - fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/L3B05.root"); - file = new TFile(fname); - fFieldMap[0] = dynamic_cast(file->Get("L3B05")); - file->Close(); - delete file; - } - + fSolenoid = 5.; + fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/L3B05.root"); + file = new TFile(fname); + fFieldMap[0] = dynamic_cast(file->Get("L3B05")); + file->Close(); + delete file; fname = gSystem->ExpandPathName("$(ALICE_ROOT)/data/maps/DipB05.root"); file = new TFile(fname); fFieldMap[1] = dynamic_cast(file->Get("DipB05")); @@ -168,29 +157,10 @@ void AliMagFMaps::ReadField() fFieldMap[2] = dynamic_cast(file->Get("ExtB05")); file->Close(); delete file; - - } - - if (!fL3Option) { - // - // Dummy L3 map - fFieldMap[0] = new AliFieldMap(); - fFieldMap[0] -> SetLimits(-800., 800., -800., 800., -700., 700.); - switch(fMap) { - case k2kG: - fSolenoid = 2.; - break; - case k4kG: - fSolenoid = 4.; - break; - case k5kG: - fSolenoid = 5.; - break; - case k0kG: - fSolenoid = 0.; - break; - } } + + if (!fL3Option) fSolenoidUser = fSolenoid; + } //_______________________________________________________________________ @@ -204,85 +174,67 @@ Float_t AliMagFMaps::SolenoidField() const } //_______________________________________________________________________ -void AliMagFMaps::Field(Float_t *x, Float_t *b) +void AliMagFMaps::Field(Float_t *x, Float_t *b) const { // // Method to calculate the magnetic field // // --- find the position in the grid --- - if (!fFieldRead) ReadField(); + + + // if (!fFieldRead) ReadField(); + + // + // Field Maps have been calculated for the coordinate system in which + // the Muon Spectrometer is placed at z > 0 + // Transform coordinates corresponingly + // b[0]=b[1]=b[2]=0; + Float_t xm[3]; + xm[0] = - x[0]; + xm[1] = x[1]; + xm[2] = - x[2]; + AliFieldMap* map = 0; - if (fFieldMap[0]->Inside(x[0], x[1], x[2])) { + if (fFieldMap[0]->Inside(xm[0], xm[1], xm[2])) { map = fFieldMap[0]; - if (!fL3Option) { + Float_t r = TMath::Sqrt(xm[0] * xm[0] + xm[1] * xm[1]); + + if (!fL3Option && TMath::Abs(xm[2]) < 370. && r < 550.) { // - // Constant L3 field, if this option was selected + // Constant L3 field , if this option was selected // - b[2] = fSolenoid; + b[2] = - fSolenoid; return; - } - } else if (fFieldMap[1]->Inside(x[0], x[1], x[2])) { - map = fFieldMap[1]; - } else if (fFieldMap[2]->Inside(x[0], x[1], x[2])) { - map = fFieldMap[2]; + } + } else if (fFieldMap[1]->Inside(xm[0], xm[1], xm[2])) { + map = fFieldMap[1]; + } else if (fFieldMap[2]->Inside(xm[0], xm[1], xm[2])) { + map = fFieldMap[2]; } if(map){ - map->Field(x,b); + map->Field(xm,b); + b[0] = - b[0]; + b[2] = - b[2]; + } else { - //This is the ZDC part - Float_t rad2=x[0]*x[0]+x[1]*x[1]; - if(x[2]>kCORBEG2 && x[2]kZ1BEG && x[2]kZ2BEG && x[2]kZ3BEG && x[2]kZ4BEG && x[2]kD1BEG && x[2]kD2BEG && x[2]ReadBuffer(R__b, this); - fFieldRead = 0; + ReadField(); } else { AliMagFMaps::Class()->WriteBuffer(R__b, this); }