diff --git a/NPLib/Detectors/Sofia/TSofAtPhysics.cxx b/NPLib/Detectors/Sofia/TSofAtPhysics.cxx
index fa6c7f63e5a24faf20a3b88a5fab494121b07c0e..db82c5a7872e401fb7ca0388c39ea8e902779ea1 100644
--- a/NPLib/Detectors/Sofia/TSofAtPhysics.cxx
+++ b/NPLib/Detectors/Sofia/TSofAtPhysics.cxx
@@ -80,13 +80,20 @@ void TSofAtPhysics::BuildPhysicalEvent() {
   PreTreat();
 
   unsigned int mysizeE = m_PreTreatedData->GetMultiplicity();
+  if(mysizeE != 4)
+    return;
+
+  double E[4]={-1,-1,-1,-1};
   for (UShort_t e = 0; e < mysizeE ; e++) {
-    if(m_PreTreatedData->GetPileUp(e) != 1 && m_PreTreatedData->GetOverflow(e) != 1){
-      AnodeNbr.push_back(m_PreTreatedData->GetAnodeNbr(e));
-      Energy.push_back(m_PreTreatedData->GetEnergy(e));
-    }
+    E[m_PreTreatedData->GetAnodeNbr(e)-1] = m_PreTreatedData->GetEnergy(e);
   }
 
+  if(E[0]>0 && E[1]>0 && E[2]>0 && E[3]>0){
+    for(int i=0; i<4; i++){
+      AnodeNbr.push_back(i+1);
+      Energy.push_back(E[i]);
+    }
+  }
 }
 
 ///////////////////////////////////////////////////////////////////////////
@@ -102,12 +109,12 @@ void TSofAtPhysics::PreTreat() {
 
   unsigned int mysize = m_EventData->GetMultiplicity();
   for (unsigned int i = 0; i < mysize ; ++i) {
-    //double Energy = Cal->ApplyCalibration("SofAt/SEC"+NPL::itoa(m_EventData->GetSectionNbr(i))+"_ANODE"+NPL::itoa(m_EventData->GetAnodeNbr(i))+"_ENERGY",m_EventData->GetEnergy(i));
-  
-    m_PreTreatedData->SetAnodeNbr(m_EventData->GetAnodeNbr(i));
-    m_PreTreatedData->SetEnergy(m_EventData->GetEnergy(i));
-    m_PreTreatedData->SetPileUp(m_EventData->GetPileUp(i));
-    m_PreTreatedData->SetOverflow(m_EventData->GetOverflow(i));
+    if(m_EventData->GetPileUp(i)==0 && m_EventData->GetOverflow(i)==0){ 
+      m_PreTreatedData->SetAnodeNbr(m_EventData->GetAnodeNbr(i));
+      m_PreTreatedData->SetEnergy(m_EventData->GetEnergy(i));
+      m_PreTreatedData->SetPileUp(m_EventData->GetPileUp(i));
+      m_PreTreatedData->SetOverflow(m_EventData->GetOverflow(i));
+    }
   }
 }
 
diff --git a/Projects/s455/Analysis.cxx b/Projects/s455/Analysis.cxx
index 5f16dda5e21e2722eeb0d171ca4d8f86c9a3a683..f33a731ad288ab2dcdc832590078dfaa4fc379ed 100644
--- a/Projects/s455/Analysis.cxx
+++ b/Projects/s455/Analysis.cxx
@@ -78,10 +78,13 @@ void Analysis::FissionFragmentAnalysis(){
 
   double TOF_CC[2];
   double Plastic[2];
+  double PosY[2];
   double Plastic_left = -1;
   double Plastic_right = -1;
   double TOF_left = -1;
   double TOF_right = -1;
+  double TOF_up = -1;
+  double TOF_down = -1;
   double Esec[2];
   double Section[2];
   double E_left = -1;
@@ -90,9 +93,13 @@ void Analysis::FissionFragmentAnalysis(){
   double E2 = -1;
   double E3 = -1;
   double E4 = -1;
+  double E_up = -1;
+  double E_down = -1;
   double L_CC = 8.45;
   double Beta_left = -1;
   double Beta_right = -1;
+  double Beta_up = -1;
+  double Beta_down = -1;
   double Beta_norm = 0.745;
 
   for(int i = 0; i<2; i++){
@@ -100,6 +107,7 @@ void Analysis::FissionFragmentAnalysis(){
     Plastic[i] = -1;
     Esec[i] = -1;
     Section[i] = -1;
+    PosY[i] = -1;
   }
 
 
@@ -107,6 +115,7 @@ void Analysis::FissionFragmentAnalysis(){
     for(unsigned int i=0; i< softofw_size; i++){
       TOF_CC[i] = SofTofW->CalTof[i];
       Plastic[i] = SofTofW->PlasticNbr[i];
+      PosY[i] = SofTofW->CalPosY[i];
 
       Esec[i] = SofTwim->EnergySection[i];
       int sec = SofTwim->SectionNbr[i];
@@ -136,6 +145,15 @@ void Analysis::FissionFragmentAnalysis(){
     TOF_right = TOF_CC[0];
   }
 
+  if(PosY[0]>PosY[1]){
+    TOF_up = TOF_CC[0];
+    TOF_down = TOF_CC[1];
+  }
+  else if(PosY[0]<PosY[1]){
+    TOF_up = TOF_CC[1];
+    TOF_down = TOF_CC[0];
+  }
+
   if(TOF_left != -1 && TOF_right != -1){
     double velocity_left = L_CC/TOF_left;
     double velocity_right = L_CC/TOF_right;
@@ -143,40 +161,87 @@ void Analysis::FissionFragmentAnalysis(){
     Beta_left = velocity_left * m/ns / NPUNITS::c_light;
     Beta_right = velocity_right * m/ns / NPUNITS::c_light;
 
-    if(E1 != -1)
+    if(E1 != -1 && E2==-1){
       E1 = E1 / fcorr_z_beta[0]->Eval(Beta_left) * fcorr_z_beta[0]->Eval(Beta_norm);
-    if(E2 != -1)
-      E2 = E2 / fcorr_z_beta[1]->Eval(Beta_left) * fcorr_z_beta[1]->Eval(Beta_norm);
-    if(E3 != -1)
-      E3 = E3 / fcorr_z_beta[2]->Eval(Beta_right) * fcorr_z_beta[2]->Eval(Beta_norm);
-    if(E4 != -1)
-      E4 = E4 / fcorr_z_beta[3]->Eval(Beta_right) * fcorr_z_beta[3]->Eval(Beta_norm);
-
-    if(E1>0 && E2==-1)
       E_left = E1;
-    else if(E1==-1 && E2>0)
+    }
+    if(E2 != -1 && E1==-1){
+      E2 = E2 / fcorr_z_beta[1]->Eval(Beta_left) * fcorr_z_beta[1]->Eval(Beta_norm);
       E_left = E2;
-    if(E3>0 && E4==-1)
+    }
+    if(E3 != -1 && E4==-1){
+      E3 = E3 / fcorr_z_beta[2]->Eval(Beta_right) * fcorr_z_beta[2]->Eval(Beta_norm);
       E_right = E3;
-    else if(E3==-1 && E4>0)
+    }
+    if(E4 != -1 && E3==-1){
+      E4 = E4 / fcorr_z_beta[3]->Eval(Beta_right) * fcorr_z_beta[3]->Eval(Beta_norm);
       E_right = E4;
-
-    double Zsum = E_left + E_right;
+    }
+  }
   
-    if(E_left != -1 && E_right != -1){
-      SofFF->SetTOF(TOF_left);
-      SofFF->SetTOF(TOF_right);
-      SofFF->SetBeta(Beta_left);
-      SofFF->SetBeta(Beta_right);
-      //SofFF->SetZ(E_left);
-      //SofFF->SetZ(E_right);
-      SofFF->SetZ(E1);
-      SofFF->SetZ(E2);
-      SofFF->SetZ(E3);
-      SofFF->SetZ(E4);
-      SofFF->SetZsum(Zsum);
+  if(TOF_up != -1 && TOF_down != -1){
+    double velocity_down = L_CC/TOF_down;
+    double velocity_up = L_CC/TOF_up;
+
+    Beta_down = velocity_down * m/ns / NPUNITS::c_light;
+    Beta_up = velocity_up * m/ns / NPUNITS::c_light;
+
+    if(E1>0 && E2>0 && E3==-1 && E4==-1){
+      E1 = E1 / fcorr_z_beta[0]->Eval(Beta_down) * fcorr_z_beta[0]->Eval(Beta_norm);
+      E2 = E2 / fcorr_z_beta[1]->Eval(Beta_up) * fcorr_z_beta[1]->Eval(Beta_norm);
+      
+      E_up = E2;
+      E_down = E1;
+    }
+    else if(E1==-1 && E2==-1 && E3>0 && E4>0){
+      E3 = E3 / fcorr_z_beta[2]->Eval(Beta_up) * fcorr_z_beta[2]->Eval(Beta_norm);
+      E4 = E4 / fcorr_z_beta[3]->Eval(Beta_down) * fcorr_z_beta[3]->Eval(Beta_norm);
+      
+      E_up = E4;
+      E_down = E3;
     }
   }
+
+
+  // Z calibration //
+  double p0 = -1.1072;
+  double p1 = 0.27517;
+  double Z1=-1;
+  double Z2=-1;
+  double Zsum=-1;
+  if(E_left!=-1 && E_right!=-1){
+    Z1 = p0 + p1*sqrt(E_left);
+    Z2 = p0 + p1*sqrt(E_right);
+    Zsum = Z1+Z2;
+  }
+  if(E_up!=-1 && E_down!=-1){
+    double Z1 = p0 + p1*sqrt(E_down);
+    double Z2 = p0 + p1*sqrt(E_up);
+    Zsum = Z1+Z2;
+  }
+
+  if(E_left != -1 && E_right != -1){
+    SofFF->SetTOF(TOF_left);
+    SofFF->SetTOF(TOF_right);
+    SofFF->SetBeta(Beta_left);
+    SofFF->SetBeta(Beta_right);
+    SofFF->SetZ(p0+p1*sqrt(E1));
+    SofFF->SetZ(p0+p1*sqrt(E2));
+    SofFF->SetZ(p0+p1*sqrt(E3));
+    SofFF->SetZ(p0+p1*sqrt(E4));
+    SofFF->SetZsum(Zsum);
+  }
+  if(E_up!=-1 && E_down!=-1){
+    SofFF->SetTOF(TOF_down);
+    SofFF->SetTOF(TOF_up);
+    SofFF->SetBeta(Beta_down);
+    SofFF->SetBeta(Beta_up);
+    SofFF->SetZ(p0+p1*sqrt(E1));
+    SofFF->SetZ(p0+p1*sqrt(E2));
+    SofFF->SetZ(p0+p1*sqrt(E3));
+    SofFF->SetZ(p0+p1*sqrt(E4));
+    SofFF->SetZsum(Zsum);
+  }
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -312,8 +377,13 @@ void Analysis::InitParameter(){
   //fDCC   = -30000;
   fDCC   = -10000;
   fK_LS2 = -2.5e-8;
+  //fBrho0 = 12.3255; // 238U run 369
   fBrho0 = 10.8183; // 182Hg
   //fBrho0 = 10.6814; // 180Hg
+  //fBrho0 = 10.8138; // 187Pb
+  //fBrho0 = 11.3418; // 216Th
+  //fBrho0 = 11.2712; // 207Fr
+  //fBrho0 = 10.6814; // 175Pt
 }
 
 ////////////////////////////////////////////////////////////////////////////////