{
  ///////////////////////////////
  // Process up to strip level //
  ///////////////////////////////
  //Link dynamic libraries
  gSystem->Load("libDetSim");  
  gSystem->Load("libPhotonTransport");
  gSystem->Load("libNumericalMethods");
  gSystem->Load("libFilterDigitSR");
  gSystem->Load("libAltDeMux");

  gSystem->Load("libRecoBase");
  gSystem->Load("libCandStripSR");
  gSystem->Load("libCandSliceSR");
  gSystem->Load("libCandTrackSR");
  gSystem->Load("libSwimmer");
  gSystem->Load("libCandFitTrackCam");
  
  JobC jc;

  //Input Parameters
  jc.Input.Set("Format=reroot");

  //Create path
  jc.Path.Create("Reco",
		 "RerootToTruthModule::Get "
		 "PhotonTransport::Get "
		 "DetSim::Get "
		 "DigitListModule::Get "
		 "DigitListModule::Reco "
		 "DeMuxDigitListModule::Reco "
		 "DeMuxModule::Ana "
		 "StripSRListModule::Reco "
		 "SliceSRListModule::Reco "
		 "TrackSRListModule::Reco "
		 "FitTrackCamListModule::Reco "
		 "FitTrackCamAnalysisModule::Ana "
		 );

  // Set up RerootExodus to build the event as MC (instead of Reroot)
  RerootExodus::SetVldSimFlag(SimFlag::kMC);

  // Set Ugli to use only database.
  UgliLoanPool::SetAlwaysUseDbi(true);

  ////////////////////////
  // Get the AlgFactory //
  //////////////////////////////////////////////////////////////////////////////////////
  // configure demultiplexer
  AlgFactory &af = AlgFactory::GetInstance();
  af.Register("AlgDeMuxDigitList", "devel");
  AlgHandle ah = af.GetAlgHandle("AlgDeMuxDigitList", "devel");
  AlgConfig &acd = ah.GetAlgConfig();
  acd.UnLockValues();
  acd.Set("DeMuxAlgorithm", "AlgAltDeMux");
  acd.Set("DeMuxAlgConfig", "default");
  acd.LockValues();
  acd.LockKeys();
  //////////////////////////////////////////////////////////////////////////////////////

  //////////////////////
  // PHOTON TRANSPORT //
  //////////////////////////////////////////////////////////////////////////////////////
  JobCModule& photon =  jc.Path("Reco").Mod("PhotonTransport");

  /////////////////////////////////////
  // DETSIM Configuration Parameters //
  //////////////////////////////////////////////////////////////////////////////////////
  JobCModule& detsim = jc.Path("Reco").Mod("DetSim");

  ///////////////////////
  // THE RECONSTRUCTION//
  //////////////////////////////////////////////////////////////////////////////////////
  jc.Path("Reco").Mod("DigitListModule").Set("ListsToMake=3");                           //Write both canddigitlist and candmcdigitlist.

  jc.Path("Reco").Mod("DeMuxDigitListModule").Set("DeMuxDigitListAlgConfig=devel");
  jc.Path("Reco").Mod("DeMuxDigitListModule").Set("NameListIn=canddigitlist");
  jc.Path("Reco").Mod("DeMuxDigitListModule").Set("NameListOut=altdemux");

  jc.Path("Reco").Mod("StripSRListModule").Set("ListIn=altdemux");
  jc.Path("Reco").Mod("SliceSRListModule").Set("SliceListAlgConfig=FarBeam");

  jc.Path("Reco").Mod("TrackSRListModule").Set("TrackListAlgConfig=FarBeam");
  jc.Path("Reco").Mod("FitTrackCamListModule").Set("NameListIn=CandTrackSRList");
  ////////////////////////////////////////////////////////////////////////////////////// 
 
  jc.Path("Reco").SetAllFilters(1);
 
  //Configure the message service
  jc.Msg.SetLevel("Calib","Fatal");
  jc.Msg.SetLevel("Dbi","Fatal");
  jc.Msg.SetLevel("Raw","Fatal");
  jc.Msg.SetLevel("Alg","Error");
  jc.Msg.SetLevel("Ugli","Info");
  jc.Msg.SetLevel("AlgAltDeMux","Fatal");
  jc.Msg.SetLevel("AltDeMux","Fatal");
  jc.Msg.SetLevel("DetSim","Fatal");
//  jc.Msg.SetLevel("AlgFitTrackCam","Debug");
//  jc.Msg.SetLevel("AlgFitTrackCam","Verbose");

//  jc.Input.Next(190);

  jc.Path("Reco").Run();
  jc.Path("Reco").Report();
  
  //Get Message Statistics
  jc.Msg.Stats();
}
