/// /// @primary authors: S.Gorbunov; I.Kisel /// @ authors: H.Pabst et al. (Intel); M.Zyzak; I.Kulakov /// #include #include #include #include "fit.h" using namespace std; void readInput( int nThreads, int nTracksPerThread ){ fstream FileGeo, FileTracks, FileMCTracks; FileGeo.open( "data/geo.dat", std::ios::in ); if ( ! FileGeo.is_open() ) cout<<"Open geo.dat fails"<> z >> Bx >> By >> Bz; Hz[i] = z; H[i][0] = Bx; H[i][1] = By; H[i][2] = Bz; // cout<<"Input Magnetic field:"<> nStations; // cout<<"Input "<> ist; if( ist!=i ) { cout << "Corrupted geo.dat file" << endl; exit(1); } FileGeo >> vStations.z[i] >> vStations.thick[i] >> vStations.RL[i] >> vStations.UInfo.sigma2[i] >> vStations.VInfo.sigma2[i]; vStations.UInfo.sigma2[i] *= vStations.UInfo.sigma2[i]; vStations.VInfo.sigma2[i] *= vStations.VInfo.sigma2[i]; vStations.UInfo.sigma216[i] = vStations.UInfo.sigma2[i]*16.f; vStations.VInfo.sigma216[i] = vStations.VInfo.sigma2[i]*16.f; if( i < 2 ){ // mvd //TODO From Geo File!!! vStations.UInfo.cos_phi[i] = 1.f; vStations.UInfo.sin_phi[i] = 0.f; vStations.VInfo.cos_phi[i] = 0.f; vStations.VInfo.sin_phi[i] = 1.f; } else{ vStations.UInfo.cos_phi[i] = 1.f; // 0 degree vStations.UInfo.sin_phi[i] = 0.f; vStations.VInfo.cos_phi[i] = 0.9659258244f; // 15 degree vStations.VInfo.sin_phi[i] = 0.2588190521f; } ftype idet = vStations.UInfo.cos_phi[i]*vStations.VInfo.sin_phi[i] - vStations.UInfo.sin_phi[i]*vStations.VInfo.cos_phi[i]; idet = 1.f/(idet*idet); vStations.XYInfo.C00[i] = ( vStations.VInfo.sin_phi[i]*vStations.VInfo.sin_phi[i]*vStations.UInfo.sigma2[i] + vStations.UInfo.sin_phi[i]*vStations.UInfo.sin_phi[i]*vStations.VInfo.sigma2[i] )*idet; vStations.XYInfo.C10[i] =-( vStations.VInfo.sin_phi[i]*vStations.VInfo.cos_phi[i]*vStations.UInfo.sigma2[i] + vStations.UInfo.sin_phi[i]*vStations.UInfo.cos_phi[i]*vStations.VInfo.sigma2[i] )*idet; vStations.XYInfo.C11[i] = ( vStations.VInfo.cos_phi[i]*vStations.VInfo.cos_phi[i]*vStations.UInfo.sigma2[i] + vStations.UInfo.cos_phi[i]*vStations.UInfo.cos_phi[i]*vStations.VInfo.sigma2[i] )*idet; // vStations.zhit[i] = vStations.z[i] - vStations.thick[i]/2.f; vStations.zhit[i] = vStations.z[i]; vStations.RadThick[i] = vStations.thick[i]/vStations.RL[i]; vStations.logRadThick[i] = log(vStations.RadThick[i]); int N=0; FileGeo >> N; // cout << N << " field coeff." <> mx[j]; for( int j=0; j> my[j]; for( int j=0; j> mz[j]; vStations.initMap( i, mx, my, mz ); } { // field intergals with respect to Last station ftype z0 = vStations.z[nStations-1]; ftype sy = 0., Sy = 0.; for( int i=nStations-1; i>=0; i-- ){ ftype dz = vStations.z[i]-z0; ftype Hy = vStations.mapY[i][0]; Sy += dz*sy + dz*dz*Hy/2.f; sy += dz*Hy; vStations.SyL[i] = Sy; z0 = vStations.z[i]; } } { // field intergals with respect to First station ftype z0 = vStations.z[0]; ftype sy = 0., Sy = 0.; for( int i=0; i