/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/MagneticField/MagneticField-00-01-38/src/MucMagneticField.cxx

Go to the documentation of this file.
00001 #include "MagneticField/MucMagneticField.h"
00002 #include <iostream>
00003 #include <fstream>
00004 #include <cstdlib>
00005 #include "CLHEP/Units/PhysicalConstants.h"
00006 using namespace std;
00007 using namespace CLHEP;
00008 
00009 #ifndef BEAN
00010 MucMagneticField::MucMagneticField()
00011 {
00012   path = std::string(getenv( "MAGNETICFIELDROOT" ));
00013 #else
00014 MucMagneticField::MucMagneticField(const std::string Path)
00015 {
00016   path = Path;
00017 #endif
00018   readPar();
00019 }
00020 MucMagneticField::~MucMagneticField()
00021 {
00022 }
00023 void MucMagneticField::getMucField(int part,int layer,int mat,
00024                                      HepPoint3D& r,HepVector3D& b) 
00025 {
00026   double x,y,z,bmf,emf;
00027   x = r.x()/m;
00028   y = r.y()/m;
00029   z = r.z()/m;
00030   //barrel, layer is the number of iron layer, mat=0 iron, mat=1 air
00031   if(part==1)
00032   {
00033     if(layer==0&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx0[i]; }
00034     if(layer==0&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx0[i]; }
00035     if(layer==1&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx1[i]; }
00036     if(layer==1&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx1[i]; } 
00037     if(layer==2&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx2[i]; }
00038     if(layer==2&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx2[i]; }
00039     if(layer==3&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx3[i]; }
00040     if(layer==3&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx3[i]; }
00041     if(layer==4&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx4[i]; }
00042     if(layer==4&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx4[i]; } 
00043     if(layer==5&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx5[i]; }
00044     if(layer==5&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx5[i]; }
00045     if(layer==6&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx6[i]; }
00046     if(layer==6&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx6[i]; }
00047     if(layer==7&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx7[i]; }
00048     if(layer==7&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapx7[i]; }
00049     if(layer==8&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipx8[i]; }  
00050     bmf = bp[0]+bp[1]*x+bp[2]*x*x+bp[3]*z+bp[4]*z*z+bp[5]*z*z*z+bp[6]*z*z*z*z
00051           +bp[7]*z*z*z*z*z+bp[8]*z*z*z*z*z*z+bp[9]*z*z*z*z*z*z*z+bp[10]*y+bp[11]*y*y
00052           +bp[12]*y*y*y+bp[13]*x*z+bp[14]*z*y+bp[15]*x*y+bp[16]*z*y*y+bp[17]*z*z*y; 
00053     b[0] = bmf*tesla;
00054 
00055     if(layer==0&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy0[i]; }
00056     if(layer==0&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy0[i]; }
00057     if(layer==1&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy1[i]; }
00058     if(layer==1&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy1[i]; }
00059     if(layer==2&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy2[i]; }
00060     if(layer==2&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy2[i]; }
00061     if(layer==3&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy3[i]; }
00062     if(layer==3&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy3[i]; }
00063     if(layer==4&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy4[i]; }
00064     if(layer==4&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy4[i]; }
00065     if(layer==5&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy5[i]; }
00066     if(layer==5&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy5[i]; }
00067     if(layer==6&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy6[i]; }
00068     if(layer==6&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy6[i]; }
00069     if(layer==7&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy7[i]; }
00070     if(layer==7&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapy7[i]; }
00071     if(layer==8&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipy8[i]; }
00072     bmf = bp[0]+bp[1]*x+bp[2]*x*x+bp[3]*z+bp[4]*z*z+bp[5]*z*z*z+bp[6]*z*z*z*z
00073           +bp[7]*z*z*z*z*z+bp[8]*z*z*z*z*z*z+bp[9]*z*z*z*z*z*z*z+bp[10]*y+bp[11]*y*y
00074           +bp[12]*y*y*y+bp[13]*x*z+bp[14]*z*y+bp[15]*x*y+bp[16]*z*y*y+bp[17]*z*z*y;
00075     b[1] = bmf*tesla;
00076 
00077     if(layer==0&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz0[i]; }
00078     if(layer==0&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz0[i]; }
00079     if(layer==1&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz1[i]; }
00080     if(layer==1&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz1[i]; }
00081     if(layer==2&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz2[i]; }
00082     if(layer==2&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz2[i]; }
00083     if(layer==3&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz3[i]; }
00084     if(layer==3&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz3[i]; }
00085     if(layer==4&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz4[i]; }
00086     if(layer==4&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz4[i]; }
00087     if(layer==5&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz5[i]; }
00088     if(layer==5&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz5[i]; }
00089     if(layer==6&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz6[i]; }
00090     if(layer==6&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz6[i]; }
00091     if(layer==7&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz7[i]; }
00092     if(layer==7&&mat==1) { for(int i=0; i<18; i++) bp[i] = bapz7[i]; }
00093     if(layer==8&&mat==0) { for(int i=0; i<18; i++) bp[i] = bipz8[i]; }
00094     bmf = bp[0]+bp[1]*x+bp[2]*x*x+bp[3]*z+bp[4]*z*z+bp[5]*z*z*z+bp[6]*z*z*z*z
00095           +bp[7]*z*z*z*z*z+bp[8]*z*z*z*z*z*z+bp[9]*z*z*z*z*z*z*z+bp[10]*y+bp[11]*y*y
00096           +bp[12]*y*y*y+bp[13]*x*z+bp[14]*z*y+bp[15]*x*y+bp[16]*z*y*y+bp[17]*z*z*y;
00097     b[2] = bmf*tesla;
00098   }
00099   //endcaps, layer is the number of iron layer, total 9. m=0 iron, m=1 air
00100   if(part==0)
00101   {
00102     if(layer==0&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx0[i]; }
00103     if(layer==0&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx0[i]; }
00104     if(layer==1&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx1[i]; }
00105     if(layer==1&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx1[i]; }
00106     if(layer==2&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx2[i]; }
00107     if(layer==2&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx2[i]; }
00108     if(layer==3&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx3[i]; }
00109     if(layer==3&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx3[i]; }
00110     if(layer==4&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx4[i]; } 
00111     if(layer==4&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx4[i]; }
00112     if(layer==5&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx5[i]; }
00113     if(layer==5&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx5[i]; }
00114     if(layer==6&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx6[i]; }
00115     if(layer==6&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx6[i]; } 
00116     if(layer==7&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx7[i]; }
00117     if(layer==7&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapx7[i]; }
00118     if(layer==8&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipx8[i]; }
00119     emf = ep[0]+ep[1]*x+ep[2]*x*x+ep[3]*x*x*x+ep[4]*x*x*x*x+ep[5]*x*x*x*x*x+ep[6]*x*x*x*x*x*x
00120           +ep[7]*x*x*x*x*x*x*x+ep[8]*z+ep[9]*y+ep[10]*y*y+ep[11]*y*y*y+ep[12]*x*z+ep[13]*z*y
00121           +ep[14]*y*x+ep[15]*y*x*x+ep[16]*y*y*x;
00122     b[0] = emf*tesla;
00123 
00124     if(layer==0&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy0[i]; }
00125     if(layer==0&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy0[i]; }
00126     if(layer==1&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy1[i]; }
00127     if(layer==1&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy1[i]; }
00128     if(layer==2&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy2[i]; }
00129     if(layer==2&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy2[i]; }
00130     if(layer==3&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy3[i]; }
00131     if(layer==3&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy3[i]; }
00132     if(layer==4&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy4[i]; }
00133     if(layer==4&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy4[i]; }
00134     if(layer==5&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy5[i]; }
00135     if(layer==5&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy5[i]; }
00136     if(layer==6&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy6[i]; }
00137     if(layer==6&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy6[i]; }
00138     if(layer==7&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy7[i]; }
00139     if(layer==7&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapy7[i]; }
00140     if(layer==8&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipy8[i]; }
00141     emf = ep[0]+ep[1]*x+ep[2]*x*x+ep[3]*x*x*x+ep[4]*x*x*x*x+ep[5]*x*x*x*x*x+ep[6]*x*x*x*x*x*x
00142           +ep[7]*x*x*x*x*x*x*x+ep[8]*z+ep[9]*y+ep[10]*y*y+ep[11]*y*y*y+ep[12]*x*z+ep[13]*z*y
00143           +ep[14]*y*x+ep[15]*y*x*x+ep[16]*y*y*x;
00144     b[1] = emf*tesla;
00145 
00146     if(layer==0&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz0[i]; }
00147     if(layer==0&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz0[i]; }
00148     if(layer==1&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz1[i]; }
00149     if(layer==1&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz1[i]; }
00150     if(layer==2&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz2[i]; }
00151     if(layer==2&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz2[i]; }
00152     if(layer==3&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz3[i]; }
00153     if(layer==3&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz3[i]; }
00154     if(layer==4&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz4[i]; }
00155     if(layer==4&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz4[i]; }
00156     if(layer==5&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz5[i]; }
00157     if(layer==5&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz5[i]; }
00158     if(layer==6&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz6[i]; }
00159     if(layer==6&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz6[i]; }
00160     if(layer==7&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz7[i]; }
00161     if(layer==7&&mat==1) { for(int i=0; i<17; i++) ep[i] = aapz7[i]; }
00162     if(layer==8&&mat==0) { for(int i=0; i<17; i++) ep[i] = aipz8[i]; }
00163     emf = ep[0]+ep[1]*x+ep[2]*x*x+ep[3]*x*x*x+ep[4]*x*x*x*x+ep[5]*x*x*x*x*x+ep[6]*x*x*x*x*x*x
00164           +ep[7]*x*x*x*x*x*x*x+ep[8]*z+ep[9]*y+ep[10]*y*y+ep[11]*y*y*y+ep[12]*x*z+ep[13]*z*y
00165           +ep[14]*y*x+ep[15]*y*x*x+ep[16]*y*y*x;
00166     b[2] = emf*tesla; 
00167   }
00168 }
00169 void MucMagneticField::readPar()
00170 {
00171   filename = path +
00172                  std::string( "/dat/barIronpar.txt");
00173   ifstream infile1(filename.c_str(),ios_base::in);
00174   if(infile1) cout<<"*** Read field map: "<<filename<<endl;
00175   for(int i=0; i<18; i++)
00176   {
00177     infile1>>bipx0[i]>>bipy0[i]>>bipz0[i]>>bipx1[i]>>bipy1[i]>>bipz1[i]
00178            >>bipx2[i]>>bipy2[i]>>bipz2[i]>>bipx3[i]>>bipy3[i]>>bipz3[i]
00179            >>bipx4[i]>>bipy4[i]>>bipz4[i]>>bipx5[i]>>bipy5[i]>>bipz5[i]
00180            >>bipx6[i]>>bipy6[i]>>bipz6[i]>>bipx7[i]>>bipy7[i]>>bipz7[i]
00181            >>bipx8[i]>>bipy8[i]>>bipz8[i];
00182   }
00183   
00184   filename = path +
00185                  std::string( "/dat/barAirpar.txt");
00186 
00187   ifstream infile2(filename.c_str(),ios_base::in);
00188   if(infile2) cout<<"*** Read field map: "<<filename<<endl;
00189   for(int j=0; j<18; j++)
00190   {
00191     infile2>>bapx0[j]>>bapy0[j]>>bapz0[j]>>bapx1[j]>>bapy1[j]>>bapz1[j]
00192            >>bapx2[j]>>bapy2[j]>>bapz2[j]>>bapx3[j]>>bapy3[j]>>bapz3[j]
00193            >>bapx4[j]>>bapy4[j]>>bapz4[j]>>bapx5[j]>>bapy5[j]>>bapz5[j]
00194            >>bapx6[j]>>bapy6[j]>>bapz6[j]>>bapx7[j]>>bapy7[j]>>bapz7[j]; 
00195   }
00196 
00197   filename = path +
00198                  std::string( "/dat/endIronpar.txt");
00199 
00200   ifstream infile3(filename.c_str(),ios_base::in);
00201   if(infile3) cout<<"*** Read field map: "<<filename<<endl;
00202   for(int i=0; i<17; i++)
00203   {
00204     infile3>>aipx0[i]>>aipy0[i]>>aipz0[i]>>aipx1[i]>>aipy1[i]>>aipz1[i]
00205            >>aipx2[i]>>aipy2[i]>>aipz2[i]>>aipx3[i]>>aipy3[i]>>aipz3[i]
00206            >>aipx4[i]>>aipy4[i]>>aipz4[i]>>aipx5[i]>>aipy5[i]>>aipz5[i]
00207            >>aipx6[i]>>aipy6[i]>>aipz6[i]>>aipx7[i]>>aipy7[i]>>aipz7[i]
00208            >>aipx8[i]>>aipy8[i]>>aipz8[i];
00209   }
00210 
00211   filename = path +
00212                  std::string( "/dat/endAirpar.txt");
00213 
00214   ifstream infile4(filename.c_str(),ios_base::in);
00215   if(infile4) cout<<"*** Read field map: "<<filename<<endl;
00216   for(int j=0; j<17; j++)
00217   {
00218     infile4>>aapx0[j]>>aapy0[j]>>aapz0[j]>>aapx1[j]>>aapy1[j]>>aapz1[j]
00219            >>aapx2[j]>>aapy2[j]>>aapz2[j]>>aapx3[j]>>aapy3[j]>>aapz3[j]
00220            >>aapx4[j]>>aapy4[j]>>aapz4[j]>>aapx5[j]>>aapy5[j]>>aapz5[j]
00221            >>aapx6[j]>>aapy6[j]>>aapz6[j]>>aapx7[j]>>aapy7[j]>>aapz7[j];
00222   }
00223 }

Generated on Tue Nov 29 23:12:44 2016 for BOSS_7.0.2 by  doxygen 1.4.7