{

  //
  //  Steering script to test raster signal decoding
  //

  Int_t RunNumber=52947;
  char* RunFileNamePattern="/cache/mss/hallc/daq04/raw/daq04_52947.log.0";


  // Open the database
  //
  gHcParms->Define("gen_run_number", "Run Number", RunNumber);
  gHcParms->AddString("g_ctp_database_filename", "DBASE/raster_test.database");
  gHcParms->Load(gHcParms->GetString("g_ctp_database_filename"), RunNumber);


  // Open and load parameter files
  //
  gHcParms->Load(gHcParms->GetString("g_ctp_kinematics_filename"), RunNumber);
  gHcParms->Load(gHcParms->GetString("g_ctp_parm_filename"));
  // parameters not found in usual engine parameter files
  gHcParms->Load("PARAM/hcana.param");


  //  Generate db_cratemap to correspond to map file contents
  //  make_cratemap.pl scripts reads a Hall C style MAP file and output a
  //  Hall A style crate map DB file
  //
  char command[100];
  sprintf(command,"./make_cratemap.pl < %s > db_cratemap.dat",gHcParms->GetString("g_decode_map_filename"));
  system(command);


  // Load the Hall C style detector map
  //
  gHcDetectorMap=new THcDetectorMap();
  gHcDetectorMap->Load(gHcParms->GetString("g_decode_map_filename"));


  // Set up the equipment to be analyzed.
  //
  // HMS and its detectors
  THaApparatus* HMS = new THcHallCSpectrometer("H","HMS");
  gHaApps->Add( HMS );
  // Add hodoscope
  HMS->AddDetector( new THcHodoscope("hod", "Hodoscope" ));
  HMS->AddDetector( new THcShower("cal", "Shower" ));
  HMS->AddDetector( new THcDC("dc", "Drift Chambers" ));
  HMS->AddDetector( new THcAerogel("aero", "Aerogel Cerenkov" ));
  HMS->AddDetector( new THcCherenkov("cher", "Gas Cerenkov" ));


  // Beamline and its detectors
  THaApparatus * BEAM = new THcRasteredBeam("RB","Rastered Beamline");
  gHaApps->Add( BEAM );


  // Set up the analyzer - we use the standard one,
  // but this could be an experiment-specific one as well.
  // The Analyzer controls the reading of the data, executes
  // tests/cuts, loops over Acpparatus's and PhysicsModules,
  // and executes the output routines.
  //
  THcAnalyzer* analyzer = new THcAnalyzer;


  // A simple event class to be output to the resulting tree.
  // Creating your own descendant of THaEvent is one way of
  // defining and controlling the output.
  //
  THaEvent* event = new THaEvent;


  // Define the run(s) that we want to analyze.
  // We just set up one, but this could be many.
  //
  char RunFileName[100];
  sprintf(RunFileName,RunFileNamePattern,RunNumber);
  THaRun* run = new THaRun(RunFileName);


  // Eventually need to learn to skip over, or properly analyze
  // the pedestal events
  //
  run->SetEventRange(1,2000);//  Physics Event number, does not
                           // include scaler or control events

  // Define the analysis parameters
  //
  analyzer->SetEvent(event);
  analyzer->SetOutFile("raster_compare_52947.root");
  analyzer->SetOdefFile("output_bpw.def");
  analyzer->SetCutFile("hodtest_cuts.def");        // optional
  analyzer->SetCountMode(2);// Counter event number same as gen_event_ID_number

  // File to record cuts accounting information
  //  analyzer->SetSummaryFile("summary_example.log"); // optional

  // start the actual analysis
  //
  analyzer->Process(run);
  analyzer->PrintReport("report.template","report.out");
}