diff --git a/src/Reweight/MINERvAWeightCalcs.cxx b/src/Reweight/MINERvAWeightCalcs.cxx
index 6cbc7ef..00953a4 100644
--- a/src/Reweight/MINERvAWeightCalcs.cxx
+++ b/src/Reweight/MINERvAWeightCalcs.cxx
@@ -1,478 +1,554 @@
 #ifdef __MINERVA_RW_ENABLED__
 #ifdef __GENIE_ENABLED__
 
 #include "MINERvAWeightCalcs.h"
 #include "BaseFitEvt.h"
 
 namespace nuisance {
 namespace reweight {
 
 
 //*******************************************************
 MINERvAReWeight_QE::MINERvAReWeight_QE() {
   //*******************************************************
   fTwk_NormCCQE = 0.0;
   fDef_NormCCQE = 1.0;
   fCur_NormCCQE = fDef_NormCCQE;
 }
 
 MINERvAReWeight_QE::~MINERvAReWeight_QE(){};
 
 double MINERvAReWeight_QE::CalcWeight(BaseFitEvt* evt) {
   // Check GENIE
   if (evt->fType != kGENIE) return 1.0;
 
   // Extract the GENIE Record
   GHepRecord* ghep = static_cast<GHepRecord*>(evt->genie_event->event);
   const Interaction* interaction = ghep->Summary();
   const InitialState& init_state = interaction->InitState();
   const ProcessInfo& proc_info = interaction->ProcInfo();
   const Target& tgt = init_state.Tgt();
 
   // If the event is not QE this Calc doesn't handle it
   if (!proc_info.IsQuasiElastic()) return 1.0;
 
   // WEIGHT CALCULATIONS -------------
   double w = 1.0;
 
   // CCQE Dial
   if (!proc_info.IsWeakCC()) w *= fCur_NormCCQE;
 
   // Return Combined Weight
   return w;
 }
 
 void MINERvAReWeight_QE::SetDialValue(std::string name, double val) {
   SetDialValue(Reweight::ConvDial(name, kCUSTOM), val);
 }
 
 void MINERvAReWeight_QE::SetDialValue(int rwenum, double val) {
   // Check Handled
   int curenum = rwenum % 1000;
   if (!IsHandled(curenum)) return;
 
   // Set Values
   if (curenum == kMINERvARW_NormCCQE) {
     fTwk_NormCCQE = val;
     fCur_NormCCQE = fDef_NormCCQE + fTwk_NormCCQE;
   }
 
   // Define Tweaked
   fTweaked = ((fTwk_NormCCQE != 0.0));
 }
 
 bool MINERvAReWeight_QE::IsHandled(int rwenum) {
   int curenum = rwenum % 1000;
 
   switch (curenum) {
     case kMINERvARW_NormCCQE:
       return true;
     default:
       return false;
   }
 }
 
 
 //*******************************************************
 MINERvAReWeight_MEC::MINERvAReWeight_MEC() {
   //*******************************************************
   fTwk_NormCCMEC = 0.0;
   fDef_NormCCMEC = 1.0;
   fCur_NormCCMEC = fDef_NormCCMEC;
 }
 
 MINERvAReWeight_MEC::~MINERvAReWeight_MEC(){};
 
 double MINERvAReWeight_MEC::CalcWeight(BaseFitEvt* evt) {
   // Check GENIE
   if (evt->fType != kGENIE) return 1.0;
 
   // Extract the GENIE Record
   GHepRecord* ghep = static_cast<GHepRecord*>(evt->genie_event->event);
   const Interaction* interaction = ghep->Summary();
   const InitialState& init_state = interaction->InitState();
   const ProcessInfo& proc_info = interaction->ProcInfo();
   const Target& tgt = init_state.Tgt();
 
   // If the event is not MEC this Calc doesn't handle it
   if (!proc_info.IsMEC()) return 1.0;
 
   // WEIGHT CALCULATIONS -------------
   double w = 1.0;
 
   // CCMEC Dial
   if (!proc_info.IsWeakCC()) w *= fCur_NormCCMEC;
 
   // Return Combined Weight
   return w;
 }
 
 void MINERvAReWeight_MEC::SetDialValue(std::string name, double val) {
   SetDialValue(Reweight::ConvDial(name, kCUSTOM), val);
 }
 
 void MINERvAReWeight_MEC::SetDialValue(int rwenum, double val) {
   // Check Handled
   int curenum = rwenum % 1000;
   if (!IsHandled(curenum)) return;
 
   // Set Values
   if (curenum == kMINERvARW_NormCCMEC) {
     fTwk_NormCCMEC = val;
     fCur_NormCCMEC = fDef_NormCCMEC + fTwk_NormCCMEC;
   }
 
   // Define Tweaked
   fTweaked = ((fTwk_NormCCMEC != 0.0));
 }
 
 bool MINERvAReWeight_MEC::IsHandled(int rwenum) {
   int curenum = rwenum % 1000;
 
   switch (curenum) {
     case kMINERvARW_NormCCMEC:
       return true;
     default:
       return false;
   }
 }
 
 //*******************************************************
 MINERvAReWeight_RES::MINERvAReWeight_RES() {
   //*******************************************************
   fTwk_NormCCRES = 0.0;
   fDef_NormCCRES = 1.0;
   fCur_NormCCRES = fDef_NormCCRES;
 }
 
 MINERvAReWeight_RES::~MINERvAReWeight_RES(){};
 
 double MINERvAReWeight_RES::CalcWeight(BaseFitEvt* evt) {
 
   // std::cout << "Caculating RES" << std::endl;
   // Check GENIE
   if (evt->fType != kGENIE) return 1.0;
 
   // Extract the GENIE Record
   GHepRecord* ghep = static_cast<GHepRecord*>(evt->genie_event->event);
   const Interaction* interaction = ghep->Summary();
   const InitialState& init_state = interaction->InitState();
   const ProcessInfo& proc_info = interaction->ProcInfo();
   const Target& tgt = init_state.Tgt();
 
   // If the event is not RES this Calc doesn't handle it
   if (!proc_info.IsResonant()) return 1.0;
 
   // WEIGHT CALCULATIONS -------------
   double w = 1.0;
 
   // CCRES Dial
   if (proc_info.IsWeakCC()) w *= fCur_NormCCRES;
 
   // Return Combined Weight
   return w;
 }
 
 void MINERvAReWeight_RES::SetDialValue(std::string name, double val) {
   SetDialValue(Reweight::ConvDial(name, kCUSTOM), val);
 }
 
 void MINERvAReWeight_RES::SetDialValue(int rwenum, double val) {
   // Check Handled
   int curenum = rwenum % 1000;
   if (!IsHandled(curenum)) return;
 
   // Set Values
   if (curenum == kMINERvARW_NormCCRES) {
     fTwk_NormCCRES = val;
     fCur_NormCCRES = fDef_NormCCRES + fTwk_NormCCRES;
   }
 
   // Define Tweaked
   fTweaked = ((fTwk_NormCCRES != 0.0));
 }
 
 bool MINERvAReWeight_RES::IsHandled(int rwenum) {
   int curenum = rwenum % 1000;
 
   switch (curenum) {
     case kMINERvARW_NormCCRES:
       return true;
     default:
       return false;
   }
 }
 
 //*******************************************************
 RikRPA::RikRPA() {
   //*******************************************************
 
   // - Syst : kMINERvA_RikRPA_ApplyRPA
   // - Type : Binary
   // - Limits : 0.0 (false) -> 1.0 (true)
   // - Default : 0.0
   fApplyDial_RPACorrection = false;
 
   // - Syst : kMINERvA_RikRPA_LowQ2
   // - Type : Absolute
   // - Limits : 1.0 -> 1.0
   // - Default : 0.0
   // - Frac Error : 100%
   fDefDial_RPALowQ2 = 0.0;
   fCurDial_RPALowQ2 = fDefDial_RPALowQ2;
   fErrDial_RPALowQ2 = 0.0;
 
   // - Syst : kMINERvA_RikRPA_HighQ2
   // - Type : Absolute
   // - Limits : 1.0 -> 1.0
   // - Default : 0.0
   // - Frac Error : 100%
   fDefDial_RPAHighQ2 = 0.0;
   fCurDial_RPAHighQ2 = fDefDial_RPAHighQ2;
   fErrDial_RPAHighQ2 = 1.0;
 
-  fEventWeights = new double[5];
+  
+
+  // - Syst : kMINERvA_RikRESRPA_ApplyRPA
+  // - Type : Binary
+  // - Limits : 0.0 (false) -> 1.0 (true)
+  // - Default : 0.0
+  fApplyDial_RESRPACorrection = false;
 
+  // - Syst : kMINERvA_RikRESRPA_LowQ2
+  // - Type : Absolute
+  // - Limits : 1.0 -> 1.0
+  // - Default : 0.0
+  // - Frac Error : 100%
+  fDefDial_RESRPALowQ2 = 0.0;
+  fCurDial_RESRPALowQ2 = fDefDial_RESRPALowQ2;
+  fErrDial_RESRPALowQ2 = 0.0;
+
+  // - Syst : kMINERvA_RikRESRPA_HighQ2
+  // - Type : Absolute
+  // - Limits : 1.0 -> 1.0
+  // - Default : 0.0
+  // - Frac Error : 100%
+  fDefDial_RESRPAHighQ2 = 0.0;
+  fCurDial_RESRPAHighQ2 = fDefDial_RESRPAHighQ2;
+  fErrDial_RESRPAHighQ2 = 1.0;
+
+
+  // Setup Calculators
+  fEventWeights = new double[5];
   for (size_t i = 0; i < kMaxCalculators; i++) {
     fRPACalculators[i] = NULL;
   }
 
   fTweaked = false;
 }
 
 RikRPA::~RikRPA() {
   //  delete fEventWeights;
 
   //  for (size_t i = 0; i < kMaxCalculators; i++) {
   //    if (fRPACalculators[i]) delete fRPACalculators[i];
   //    fRPACalculators[i] = NULL;
   //  }
 }
 
 double RikRPA::CalcWeight(BaseFitEvt* evt) {
   // LOG(FIT) << "Calculating RikRPA" << std::endl;
   // Return 1.0 if not tweaked
   if (!fTweaked) return 1.0;
 
   double w = 1.0;
 
   // Extract the GENIE Record
   GHepRecord* ghep = static_cast<GHepRecord*>(evt->genie_event->event);
   const Interaction* interaction = ghep->Summary();
   const InitialState& init_state = interaction->InitState();
   const ProcessInfo& proc_info = interaction->ProcInfo();
   // const Kinematics &   kine       = interaction->Kine();
   // const XclsTag &      xcls       = interaction->ExclTag();
   const Target& tgt = init_state.Tgt();
 
   // If not QE return 1.0
   // LOG(FIT) << "RikRPA : Event QE = " << proc_info.IsQuasiElastic() <<
   // std::endl;
   if (!tgt.IsNucleus()) return 1.0;
-  if (!proc_info.IsQuasiElastic()) return 1.0;
+  if (!proc_info.IsQuasiElastic() && !proc_info.IsResonant()) return 1.0;
 
   // Extract Beam and Target PDG
   GHepParticle* neutrino = ghep->Probe();
   int bpdg = neutrino->Pdg();
 
   GHepParticle* target = ghep->Particle(1);
   assert(target);
   int tpdg = target->Pdg();
 
   // Find the enum we need
   int calcenum = GetRPACalcEnum(bpdg, tpdg);
   if (calcenum == -1) return 1.0;
 
   // Check we have the RPA Calc setup for this enum
   // if not, set it up at that point
   if (!fRPACalculators[calcenum]) SetupRPACalculator(calcenum);
   weightRPA* rpacalc = fRPACalculators[calcenum];
   if (!rpacalc) {
     THROW("Failed to grab the RPA Calculator : " << calcenum);
   }
 
   // Extract Q0-Q3
   GHepParticle* fsl = ghep->FinalStatePrimaryLepton();
   const TLorentzVector& k1 = *(neutrino->P4());
   const TLorentzVector& k2 = *(fsl->P4());
   double q0 = fabs((k1 - k2).E());
   double q3 = fabs((k1 - k2).Vect().Mag());
   double Q2 = fabs((k1 - k2).Mag2());
 
-  // Now use q0-q3 and RPA Calculator to fill fWeights
-  //LOG(FIT) << "Getting Weights = " << q0 << " " << q3 << std::endl;
-  rpacalc->getWeight(q0, q3, fEventWeights);
+  // Quasielastic
+  if (proc_info.IsQuasiElastic()){
 
-  // Apply Interpolation (for the time being simple linear)
+    // Now use q0-q3 and RPA Calculator to fill fWeights
+    rpacalc->getWeight(q0, q3, fEventWeights);
 
-  // Syst Application : kMINERvA_RikRPA_ApplyRPA
-  if (fApplyDial_RPACorrection) {
-    w *= fEventWeights[0];  // CV
-  }
+    if (fApplyDial_RPACorrection) {
+      w *= fEventWeights[0];  // CV
+    }
 
-  /*
-  LOG(FIT) << " fCurDial_RPALowQ2  = " << fCurDial_RPALowQ2
-           << " fCurDial_RPAHighQ2 = " << fCurDial_RPAHighQ2 << " Weights "
-           << fEventWeights[0] << " " << fEventWeights[1] << " "
-           << fEventWeights[2] << " " << fEventWeights[3] << " "
-           << fEventWeights[4] << std::endl;
-  */
-  // Syst Application : kMINERvA_RikRPA_LowQ2
-  if (fabs(fCurDial_RPALowQ2) > 0.0) {
-    double interpw = fEventWeights[0];
-
-    if (fCurDial_RPALowQ2 > 0.0 && Q2 < 2.0) {
-      interpw = fEventWeights[0] - (fEventWeights[0] - fEventWeights[1]) *
-                                       fCurDial_RPALowQ2;  // WLow+    } else if
-    } else if (fCurDial_RPALowQ2 < 0.0 && Q2 < 2.0) {
-      interpw = fEventWeights[0] - (fEventWeights[2] - fEventWeights[0]) *
-                                       fCurDial_RPALowQ2;  // WLow-
+    // Syst Application : kMINERvA_RikRPA_LowQ2
+    if (fabs(fCurDial_RPALowQ2) > 0.0) {
+      double interpw = fEventWeights[0];
+      
+      if (fCurDial_RPALowQ2 > 0.0 && Q2 < 2.0) {
+	interpw = fEventWeights[0] - (fEventWeights[0] - fEventWeights[1]) *
+	  fCurDial_RPALowQ2;  // WLow+    } else if
+      } else if (fCurDial_RPALowQ2 < 0.0 && Q2 < 2.0) {
+	interpw = fEventWeights[0] - (fEventWeights[2] - fEventWeights[0]) *
+	  fCurDial_RPALowQ2;  // WLow-
+      }
+      w *= interpw / fEventWeights[0];  // Div by CV again
+    }
+    
+    // Syst Application : kMINERvA_RikRPA_HighQ2
+    if (fabs(fCurDial_RPAHighQ2) > 0.0) {
+      double interpw = fEventWeights[0];
+      
+      if (fCurDial_RPAHighQ2 > 0.0) {
+	interpw = fEventWeights[0] - (fEventWeights[0] - fEventWeights[3]) *
+	  fCurDial_RPAHighQ2;  // WHigh+   
+	
+      } else if (fCurDial_RPAHighQ2 < 0.0) {
+        interpw = fEventWeights[0] - (fEventWeights[4] - fEventWeights[0]) *
+	  fCurDial_RPAHighQ2;  // WHigh-
+      }
+      w *= interpw / fEventWeights[0];  // Div by CV again
     }
-    w *= interpw / fEventWeights[0];  // Div by CV again
   }
 
-  // Syst Application : kMINERvA_RikRPA_HighQ2
-  if (fabs(fCurDial_RPAHighQ2) > 0.0) {
-    double interpw = fEventWeights[0];
+  // Resonant Events
+  if (proc_info.IsResonant()){
+
+    // Now use Q2 and RESRPA Calculator to fill fWeights
+    double CV = rpacalc->getWeight(Q2);
+
+    if (fApplyDial_RESRPACorrection) {
+      w *= CV; //fEventWeights[0];  // CVa
+    }
+
+    /*
+    // Syst Application : kMINERvA_RikRESRPA_LowQ2
+    if (fabs(fCurDial_RESRPAHighQ2) > 0.0) {
+      double interpw = fEventWeights[0];
+      
+      if (fCurDial_RESRPAHighQ2 > 0.0) {
+	interpw = fEventWeights[0] - (fEventWeights[0] - fEventWeights[3]) *
+	  fCurDial_RESRPAHighQ2;  // WHigh+
+	
+      } else if (fCurDial_RESRPAHighQ2 < 0.0) {
+	interpw = fEventWeights[0] - (fEventWeights[4] - fEventWeights[0]) *
+	  fCurDial_RESRPAHighQ2;  // WHigh-
+      }
+      w *= interpw / fEventWeights[0];  // Div by CV again
+    }
+
+    // Syst Application : kMINERvA_RikRESRPA_HighQ2
+    if (fabs(fCurDial_RESRPAHighQ2) > 0.0) {
+      double interpw = fEventWeights[0];
 
-    if (fCurDial_RPAHighQ2 > 0.0) {
-      interpw = fEventWeights[0] - (fEventWeights[0] - fEventWeights[3]) *
-                                       fCurDial_RPAHighQ2;  // WHigh+   
+      if (fCurDial_RESRPAHighQ2 > 0.0) {
+        interpw = fEventWeights[0] - (fEventWeights[0] - fEventWeights[3]) *
+          fCurDial_RESRPAHighQ2;  // WHigh+
 
-    } else if (fCurDial_RPAHighQ2 < 0.0) {
+      } else if (fCurDial_RESRPAHighQ2 < 0.0) {
         interpw = fEventWeights[0] - (fEventWeights[4] - fEventWeights[0]) *
-                                         fCurDial_RPAHighQ2;  // WHigh-
+          fCurDial_RESRPAHighQ2;  // WHigh-
+      }
+      w *= interpw / fEventWeights[0];  // Div by CV again
     }
-    w *= interpw / fEventWeights[0];  // Div by CV again
+    */
   }
 
   // LOG(FIT) << "RPA Weight = " << w << std::endl;
   return w;
 }  // namespace reweight
 
 void RikRPA::SetDialValue(std::string name, double val) {
   SetDialValue(Reweight::ConvDial(name, kCUSTOM), val);
 }
 
 void RikRPA::SetDialValue(int rwenum, double val) {
   int curenum = rwenum % 1000;
 
   // Check Handled
   if (!IsHandled(curenum)) return;
-  if (curenum == kMINERvARW_RikRPA_ApplyRPA)
-    fApplyDial_RPACorrection = (val > 0.5);
-  if (curenum == kMINERvARW_RikRPA_LowQ2) fCurDial_RPALowQ2 = val;
-  if (curenum == kMINERvARW_RikRPA_HighQ2) fCurDial_RPAHighQ2 = val;
+  if (curenum == kMINERvARW_RikRPA_ApplyRPA) fApplyDial_RPACorrection = (val > 0.5);
+  if (curenum == kMINERvARW_RikRPA_LowQ2)    fCurDial_RPALowQ2 = val;
+  if (curenum == kMINERvARW_RikRPA_HighQ2)   fCurDial_RPAHighQ2 = val;
+  if (curenum == kMINERvARW_RikRESRPA_ApplyRPA) fApplyDial_RESRPACorrection = (val > 0.5);
+  if (curenum == kMINERvARW_RikRESRPA_LowQ2)    fCurDial_RESRPALowQ2 = val;
+  if (curenum == kMINERvARW_RikRESRPA_HighQ2)   fCurDial_RESRPAHighQ2 = val;
+  
 
   // Assign flag to say stuff has changed
   fTweaked = (fApplyDial_RPACorrection ||
               fabs(fCurDial_RPAHighQ2 - fDefDial_RPAHighQ2) > 0.0 ||
-              fabs(fCurDial_RPALowQ2 - fDefDial_RPALowQ2) > 0.0);
+              fabs(fCurDial_RPALowQ2 - fDefDial_RPALowQ2) > 0.0 ||
+	      fApplyDial_RESRPACorrection ||
+	      fabs(fCurDial_RESRPAHighQ2 - fDefDial_RESRPAHighQ2) > 0.0 ||
+	      fabs(fCurDial_RESRPALowQ2 - fDefDial_RESRPALowQ2) > 0.0);
+  
 }
 
 bool RikRPA::IsHandled(int rwenum) {
   int curenum = rwenum % 1000;
   switch (curenum) {
-    case kMINERvARW_RikRPA_ApplyRPA:
-      return true;
-    case kMINERvARW_RikRPA_LowQ2:
-      return true;
-    case kMINERvARW_RikRPA_HighQ2:
-      return true;
-    default:
-      return false;
+  case kMINERvARW_RikRESRPA_ApplyRPA:
+    return true;
+  case kMINERvARW_RikRESRPA_LowQ2:
+    return true;
+  case kMINERvARW_RikRESRPA_HighQ2:
+    return true;
+  case kMINERvARW_RikRPA_ApplyRPA:
+    return true;
+  case kMINERvARW_RikRPA_LowQ2:
+    return true;
+  case kMINERvARW_RikRPA_HighQ2:
+    return true;
+  default:
+    return false;
   }
 }
 
 void RikRPA::SetupRPACalculator(int calcenum) {
   std::string rwdir = FitPar::GetDataBase() + "/reweight/MINERvA/RikRPA/";
   std::string fidir = "";
   switch (calcenum) {
     case kNuMuC12:
       fidir = "outNievesRPAratio-nu12C-20GeV-20170202.root";
       break;
 
     case kNuMuO16:
       fidir = "outNievesRPAratio-nu16O-20GeV-20170202.root";
       break;
 
     case kNuMuAr40:
       fidir = "outNievesRPAratio-nu40Ar-20GeV-20170202.root";
       break;
 
     case kNuMuCa40:
       fidir = "outNievesRPAratio-nu40Ca-20GeV-20170202.root";
       break;
 
     case kNuMuFe56:
       fidir = "outNievesRPAratio-nu56Fe-20GeV-20170202.root";
       break;
 
     case kNuMuBarC12:
       fidir = "outNievesRPAratio-anu12C-20GeV-20170202.root";
       break;
 
     case kNuMuBarO16:
       fidir = "outNievesRPAratio-anu16O-20GeV-20170202.root";
       break;
 
     case kNuMuBarAr40:
       fidir = "outNievesRPAratio-anu40Ar-20GeV-20170202.root";
       break;
 
     case kNuMuBarCa40:
       fidir = "outNievesRPAratio-anu40Ca-20GeV-20170202.root";
       break;
 
     case kNuMuBarFe56:
       fidir = "outNievesRPAratio-anu56Fe-20GeV-20170202.root";
       break;
   }
 
   LOG(FIT) << "Loading RPA CALC : " << fidir << std::endl;
   TDirectory* olddir = gDirectory;
 
   std::cout << "***********************************************" << std::endl;
   std::cout << "Loading a new weightRPA calculator" << std::endl;
   std::cout << "Authors:  Rik Gran, Heidi Schellman" << std::endl;
   std::cout << "Citation: arXiv:1705.02932 [hep-ex]" << std::endl;
   std::cout << "***********************************************" << std::endl;
 
   fRPACalculators[calcenum] = new weightRPA(rwdir + "/" + fidir);
   olddir->cd();
   return;
 }
 
 int RikRPA::GetRPACalcEnum(int bpdg, int tpdg) {
   if (bpdg == 14 && tpdg == 1000060120)
     return kNuMuC12;
   else if (bpdg == 14 && tpdg == 1000080160)
     return kNuMuO16;
   else if (bpdg == 14 && tpdg == 1000180400)
     return kNuMuAr40;
   else if (bpdg == 14 && tpdg == 1000200400)
     return kNuMuCa40;
   else if (bpdg == 14 && tpdg == 1000280560)
     return kNuMuFe56;
   else if (bpdg == -14 && tpdg == 1000060120)
     return kNuMuBarC12;
   else if (bpdg == -14 && tpdg == 1000080160)
     return kNuMuBarO16;
   else if (bpdg == -14 && tpdg == 1000180400)
     return kNuMuBarAr40;
   else if (bpdg == -14 && tpdg == 1000200400)
     return kNuMuBarCa40;
   else if (bpdg == -14 && tpdg == 1000280560)
     return kNuMuBarFe56;
   else {
     ERROR(WRN, "Unknown beam and target combination for RPA Calcs! "
                    << bpdg << " " << tpdg);
   }
 
   return -1;
 }
 
 }  // namespace reweight
 }  // namespace nuisance
 #endif
 #endif
diff --git a/src/Reweight/MINERvAWeightCalcs.h b/src/Reweight/MINERvAWeightCalcs.h
index 5bedfd3..540795a 100644
--- a/src/Reweight/MINERvAWeightCalcs.h
+++ b/src/Reweight/MINERvAWeightCalcs.h
@@ -1,136 +1,148 @@
 #ifndef MINERVA_WEIGHT_CALCS
 #define MINERVA_WEIGHT_CALCS
 
 #include <string>
 
 #ifdef __MINERVA_RW_ENABLED__
 #ifdef __GENIE_ENABLED__
 #include "Conventions/Units.h"
 #include "EVGCore/EventRecord.h"
 #include "FitEvent.h"
 #include "FitParameters.h"
 #include "GHEP/GHepParticle.h"
 #include "GHEP/GHepRecord.h"
 #include "GHEP/GHepUtils.h"
 #include "GeneralUtils.h"
 #include "NUISANCESyst.h"
 #include "NUISANCEWeightCalcs.h"
 #include "Ntuple/NtpMCEventRecord.h"
 #include "PDG/PDGUtils.h"
 #include "WeightUtils.h"
 #include "weightRPA.h"
 using namespace genie;
 class BaseFitEvt;
 
 
 namespace nuisance {
 namespace reweight {
 
 // MEC Dials
 class MINERvAReWeight_QE : public NUISANCEWeightCalc {
  public:
   MINERvAReWeight_QE();
   virtual ~MINERvAReWeight_QE();
 
   double CalcWeight(BaseFitEvt* evt);
   void SetDialValue(std::string name, double val);
   void SetDialValue(int rwenum, double val);
   bool IsHandled(int rwenum);
 
   double fTwk_NormCCQE;
   double fCur_NormCCQE;
   double fDef_NormCCQE;
     bool fTweaked;
 
 };
 
 
 // MEC Dials
 class MINERvAReWeight_MEC : public NUISANCEWeightCalc {
  public:
   MINERvAReWeight_MEC();
   virtual ~MINERvAReWeight_MEC();
 
   double CalcWeight(BaseFitEvt* evt);
   void SetDialValue(std::string name, double val);
   void SetDialValue(int rwenum, double val);
   bool IsHandled(int rwenum);
 
   double fTwk_NormCCMEC;
   double fCur_NormCCMEC;
   double fDef_NormCCMEC;
     bool fTweaked;
 
 };
 
 // RES Dials
 class MINERvAReWeight_RES : public NUISANCEWeightCalc {
  public:
    MINERvAReWeight_RES();
    virtual ~MINERvAReWeight_RES();
 
    double CalcWeight(BaseFitEvt* evt);
    void SetDialValue(std::string name, double val);
    void SetDialValue(int rwenum, double val);
    bool IsHandled(int rwenum);
 
    double fTwk_NormCCRES;
    double fCur_NormCCRES;
    double fDef_NormCCRES;
     bool fTweaked;
 
  };
 
 /// RPA Weight Calculator that applies RPA systematics
 /// to GENIE events. GENIE EVENTS ONLY!
 class RikRPA : public NUISANCEWeightCalc {
 public:
 	RikRPA();
 	~RikRPA();
 
 	double CalcWeight(BaseFitEvt* evt);
 	void SetDialValue(std::string name, double val);
 	void SetDialValue(int rwenum, double val);
 	bool IsHandled(int rwenum);
 
 	void SetupRPACalculator(int calcenum);
 	int GetRPACalcEnum(int bpdg, int tpdg);
 
 	bool   fApplyDial_RPACorrection;
 
 	double fTwkDial_RPALowQ2;
 	double fDefDial_RPALowQ2;
 	double fCurDial_RPALowQ2;
 	double fErrDial_RPALowQ2;
 
 	double fTwkDial_RPAHighQ2;
 	double fDefDial_RPAHighQ2;
 	double fCurDial_RPAHighQ2;
 	double fErrDial_RPAHighQ2;
+	
+	bool   fApplyDial_RESRPACorrection;
+
+        double fTwkDial_RESRPALowQ2;
+        double fDefDial_RESRPALowQ2;
+        double fCurDial_RESRPALowQ2;
+        double fErrDial_RESRPALowQ2;
+
+        double fTwkDial_RESRPAHighQ2;
+        double fDefDial_RESRPAHighQ2;
+        double fCurDial_RESRPAHighQ2;
+        double fErrDial_RESRPAHighQ2;
 
 	double* fEventWeights;
 	bool fTweaked;
 
 	const static int kMaxCalculators = 10;
 	enum rpacalcenums {
 		kNuMuC12,
 		kNuMuO16,
 		kNuMuAr40,
 		kNuMuCa40,
 		kNuMuFe56,
 		kNuMuBarC12,
 		kNuMuBarO16,
 		kNuMuBarAr40,
 		kNuMuBarCa40,
 		kNuMuBarFe56
 	};
 	weightRPA* fRPACalculators[kMaxCalculators];
 };
 
 };  // namespace reweight
 };  // namespace nuisance
 
 #endif // __GENIE_ENABLED__
 #endif //__MINERVA_RW_ENABLED__
 
 #endif
diff --git a/src/Reweight/NUISANCESyst.h b/src/Reweight/NUISANCESyst.h
index 3fec5a7..dfc84e2 100644
--- a/src/Reweight/NUISANCESyst.h
+++ b/src/Reweight/NUISANCESyst.h
@@ -1,58 +1,62 @@
 #ifndef NUISANCESyst_H
 #define NUISANCESyst_H
 #include "GeneralUtils.h"
 
 namespace Reweight {
 
 enum NUISANCESyst {
 	kUnkownNUISANCEDial = 0,
 	kGaussianCorr_CCQE_norm,
 	kGaussianCorr_CCQE_tilt,
 	kGaussianCorr_CCQE_Pq0,
 	kGaussianCorr_CCQE_Wq0,
 	kGaussianCorr_CCQE_Pq3,
 	kGaussianCorr_CCQE_Wq3,
 	kGaussianCorr_2p2h_norm,
 	kGaussianCorr_2p2h_tilt,
 	kGaussianCorr_2p2h_Pq0,
 	kGaussianCorr_2p2h_Wq0,
 	kGaussianCorr_2p2h_Pq3,
 	kGaussianCorr_2p2h_Wq3,
 	kGaussianCorr_2p2h_PPandNN_norm,
 	kGaussianCorr_2p2h_PPandNN_tilt,
 	kGaussianCorr_2p2h_PPandNN_Pq0,
 	kGaussianCorr_2p2h_PPandNN_Wq0,
 	kGaussianCorr_2p2h_PPandNN_Pq3,
 	kGaussianCorr_2p2h_PPandNN_Wq3,
 	kGaussianCorr_2p2h_NP_norm,
 	kGaussianCorr_2p2h_NP_tilt,
 	kGaussianCorr_2p2h_NP_Pq0,
 	kGaussianCorr_2p2h_NP_Wq0,
 	kGaussianCorr_2p2h_NP_Pq3,
 	kGaussianCorr_2p2h_NP_Wq3,
 	kGaussianCorr_CC1pi_norm,
 	kGaussianCorr_CC1pi_tilt,
 	kGaussianCorr_CC1pi_Pq0,
 	kGaussianCorr_CC1pi_Wq0,
 	kGaussianCorr_CC1pi_Pq3,
 	kGaussianCorr_CC1pi_Wq3,
 	kGaussianCorr_AllowSuppression,
 
 	kModeNorm_NormRES,
 
 	kMINERvARW_NormCCQE,
 	kMINERvARW_NormCCMEC,
 	kMINERvARW_NormCCRES,
 
 	kMINERvARW_RikRPA_ApplyRPA,
-    kMINERvARW_RikRPA_LowQ2,
-    kMINERvARW_RikRPA_HighQ2,
+	kMINERvARW_RikRPA_LowQ2,
+	kMINERvARW_RikRPA_HighQ2,
+
+	kMINERvARW_RikRESRPA_ApplyRPA,
+        kMINERvARW_RikRESRPA_LowQ2,
+	kMINERvARW_RikRESRPA_HighQ2,
 
 	kNUISANCEDial_LAST
 };
 
 int ConvertNUISANCEDial(std::string type);
 std::string ConvNUISANCEDial(int type);
 
 };
 #endif