diff --git a/NPLib/Detectors/Sofia/GladFieldMap.cxx b/NPLib/Detectors/Sofia/GladFieldMap.cxx index 8c8719def0ef8f882e33a641c574f885ed257b83..794d309a9c2144148ad7ebec9c972ed0b0595472 100644 --- a/NPLib/Detectors/Sofia/GladFieldMap.cxx +++ b/NPLib/Detectors/Sofia/GladFieldMap.cxx @@ -48,9 +48,9 @@ GladFieldMap::GladFieldMap() { m_bin = 50; m_Current = 2135.; m_Scale = m_Current/3583.81; - m_Glad_Entrance = TVector3(0,0,2774.); - m_Glad_TurningPoint = TVector3(0,0,2774.+1654); - m_Tilt = 14.*deg; + m_Glad_Entrance = TVector3(0,0,-1.135*m); + m_Glad_TurningPoint = TVector3(0,0,0); + m_Tilt = -14.*deg; m_B = m_Scale*m_Bmax; for(int i=0; i<81; i++){ for(int j=0; j<41; j++){ @@ -71,9 +71,9 @@ GladFieldMap::GladFieldMap() { m_Nx= 0; m_Ny= 0; m_Nz= 0; - m_CentralTheta = 20.*deg; - m_MWPC3_POS = TVector3(-1436.,0,7852); - m_Angle_MWPC3 = 20.*deg; + m_CentralTheta = -20.*deg; + m_MWPC3_POS = TVector3(-1436.,0,3402); + m_Angle_MWPC3 = -20.*deg; m_R_MWPC3 = 4199.; m_InitPos = TVector3(0,0,0); @@ -92,7 +92,7 @@ double GladFieldMap::Delta(const double* parameter){ static vector<TVector3> pos; pos = Propagate(parameter[0], m_InitPos, m_InitDir, false); - //pos.back().RotateY(-m_Angle_MWPC3+m_Tilt); + pos.back().RotateY(-m_CentralTheta+m_Tilt); diff = pos.back() - m_FinalPos; //cout << pos.back().X() << " " << pos.back().Z() << endl; @@ -103,7 +103,7 @@ double GladFieldMap::Delta(const double* parameter){ double GladFieldMap::FindBrho(TVector3 Pos_init, TVector3 Dir_init, TVector3 Pos_final){ if(!m_BrhoScan) - BrhoScan(1.,20,0.2,TVector3(0,0,0), TVector3(0,0,1)); + BrhoScan(6,11,0.1,TVector3(0,0,-2500), TVector3(0,0,1)); m_InitPos = Pos_init; m_InitDir = Dir_init; @@ -119,7 +119,7 @@ double GladFieldMap::FindBrho(TVector3 Pos_init, TVector3 Dir_init, TVector3 Pos m_min->Clear(); m_min->SetPrecision(1e-6); m_min->SetMaxFunctionCalls(1000); - m_min->SetLimitedVariable(0,"B",param[0],0.1,1,20); + m_min->SetLimitedVariable(0,"B",param[0],0.1,6,11); m_min->Minimize(); return m_min->X()[0]; @@ -137,11 +137,11 @@ TGraph* GladFieldMap::BrhoScan(double Brho_min, double Brho_max, double Brho_ste unsigned int i=0; //TVector3 pos = TVector3(0,0,0); //TVector3 dir = TVector3(0,0,1); - //pos.RotateY(m_Tilt); - //dir.RotateY(m_Tilt); + pos.RotateY(m_Tilt); + dir.RotateY(m_Tilt); for(double Brho=Brho_min; Brho<Brho_max; Brho+=Brho_step){ vector<TVector3> vPos = Propagate(Brho, pos, dir, false); - //vPos.back().RotateY(-m_Angle_MWPC3); + vPos.back().RotateY(-m_CentralTheta); m_BrhoScan->SetPoint(i++,vPos.back().X(),Brho); //cout << vPos.back().X() << " " << Brho << endl; diff --git a/Projects/s455/Analysis.cxx b/Projects/s455/Analysis.cxx index 182eeecd558ecb1c350f22e1e295522033c7f31c..b275e42e599d4715ec43f207a40cb989a8b9b12b 100644 --- a/Projects/s455/Analysis.cxx +++ b/Projects/s455/Analysis.cxx @@ -103,14 +103,18 @@ void Analysis::Init(){ m_GladField = new GladFieldMap(); m_GladField->SetCurrent(2135.); - m_GladField->SetGladEntrance(0, 0.02*m, 2.774*m + 0.5405*m); - m_GladField->SetGladTurningPoint(0, 0.02*m, 2.774*m + 0.5405*m + 1.135*m); - m_GladField->SetGladTiltAngle(14.*deg); - m_GladField->LoadMap("GladFieldMap.dat"); - m_GladField->SetCentralTheta(20.*deg); + //m_GladField->SetGladEntrance(0, 0.02*m, 2.774*m + 0.5405*m); + m_GladField->SetGladEntrance(0, 0, -1.135*m); + //m_GladField->SetGladTurningPoint(0, 0.02*m, 2.774*m + 0.5405*m + 1.135*m); + m_GladField->SetGladTurningPoint(0, 0, 0); + m_GladField->SetGladTiltAngle(-14.*deg); + m_GladField->LoadMap("GladFieldMap_50mm.dat"); + m_GladField->SetBin(50); + m_GladField->SetCentralTheta(-20.*deg); - double Z_MWPC3 = 7.852*m; - double X_MWPC3 = -(Z_MWPC3 - m_GladField->GetGladTurningPoint().Z())*tan(m_GladField->GetCentralTheta()); + //double Z_MWPC3 = 7.852*m; + double Z_MWPC3 = 3.402*m; + double X_MWPC3 = (Z_MWPC3 - m_GladField->GetGladTurningPoint().Z())*tan(m_GladField->GetCentralTheta()); m_GladField->Set_MWPC3_Position(X_MWPC3,0,Z_MWPC3); InitParameter(); @@ -586,16 +590,19 @@ void Analysis::FissionFragmentAnalysis(){ // *** Calculation Theta_out *** // - double Theta0 = m_GladField->GetCentralTheta(); + double DistanceStartToG = 2.774*m + 0.5405*m +1.135*m; + double DistanceStartToA = 2.3155*m; + double DistanceStartToMW2 = 2.651*m; + double Theta0 = 20.*deg;//m_GladField->GetCentralTheta(); double XA = 0; - double ZA = 2315.5; + double ZA = DistanceStartToA - DistanceStartToG; double ZG = m_GladField->GetGladTurningPoint().Z(); double ZMW3 = m_GladField->Get_MWPC3_Position().Z(); double XMW3 = m_GladField->Get_MWPC3_Position().X(); - double ZMW2 = 2651; + double ZMW2 = DistanceStartToMW2 - DistanceStartToG; double X3lab = 0; double Z3lab = 0;; - double Tilt = m_GladField->GetGladTiltAngle();;//14.*deg; + double Tilt = 14.*deg;//; TVector3 vZ = TVector3(0,0,1); double XC = 0; double ZC = 0; @@ -613,18 +620,19 @@ void Analysis::FissionFragmentAnalysis(){ XC = (XA+(ZG-ZA)*tan(TofHit[i].theta_in)) / (1-tan(Tilt)*tan(TofHit[i].theta_in)); ZC = ZG + XC*tan(Tilt); TVector3 vC = TVector3(XC,0,ZC); - TofHit[i].xc = XC; TofHit[i].yc = (ZC/8592.)*TofHit[i].y; TofHit[i].zc = ZC; int ix, iy; - ix = (int)(TofHit[0].xc - m_GladField->GetXmin())/50; - iy = (int)(TofHit[0].yc -20. - m_GladField->GetYmin())/50; + ix = (int)(TofHit[0].xc - m_GladField->GetXmin())/m_GladField->GetBin(); + iy = (int)(TofHit[0].yc - m_GladField->GetYmin())/m_GladField->GetBin(); TofHit[i].Leff = m_GladField->GetLeff(ix,iy); X3lab = TofHit[i].x3*cos(Theta0) + XMW3; Z3lab = TofHit[i].x3*sin(Theta0) + ZMW3; + TVector3 vE = TVector3(X3lab, 0, Z3lab); + TVector3 dir = TVector3(sin(TofHit[i].theta_in), 0, cos(TofHit[i].theta_in)); TofHit[i].x3lab = X3lab; TofHit[i].z3lab = Z3lab; TVector3 vOut = TVector3(X3lab-XC,0,Z3lab-ZC); @@ -632,7 +640,8 @@ void Analysis::FissionFragmentAnalysis(){ TofHit[i].theta_out = angle; TofHit[i].psi = TofHit[i].theta_in - TofHit[i].theta_out; TofHit[i].rho = TofHit[i].Leff/(2*sin(0.5*TofHit[i].psi)*cos(Tilt-0.5*TofHit[i].psi)); - TofHit[i].Brho = MagB*TofHit[i].rho; + //TofHit[i].Brho = MagB*TofHit[i].rho; + TofHit[i].Brho = m_GladField->FindBrho(vA,dir,vE); // *** Extrapolate to B position *** // double ZI = ZG - TofHit[i].Leff/(2*cos(Tilt));