#include <string>
#include <iostream>
#include <iomanip>
#include <cmath>

#include "TROOT.h"
#include "TFile.h"

#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/MultiHead.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "km3net-dataformat/definitions/trkmembers.hh"

#include "JSupport/JFileRecorder.hh"
#include "JSupport/JSupport.hh"

#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"


/**
 * \file
 *
 * Auxiliary program to generate particles.
 * \author mdejong
 */
int main(int argc, char **argv)
{
  using namespace std;
  using namespace JPP;

  Trk trk;

  JFileRecorder<JAAnetTypes_t> outputFile;
  size_t   numberOfEvents;
  int      debug;

  try {

    JParser<> zap("Auxiliary program to generate particles.");

    zap['o'] = make_field(outputFile)          = "gedanken.root";
    zap['n'] = make_field(numberOfEvents)      = 1;
    zap['P'] = make_field(trk.pos,  "position");
    zap['D'] = make_field(trk.dir,  "direction")   = Vec(0.0, 0.0, 1.0);
    zap['E'] = make_field(trk.E,    "energy [GeV]");
    zap['T'] = make_field(trk.type, "particle type (PDG)");
    zap['d'] = make_field(debug)               = 2;

    zap(argc, argv);
  }
  catch(const exception& error) {
    FATAL(error.what() << endl);
  }

  trk.dir.normalize();

  trk.status = TRK_ST_FINALSTATE;

  Head header;

  outputFile.open();
    
  outputFile.put(header);

  Evt evt;

  evt.mc_trks.push_back(trk);

  for (size_t counter = 0; counter != numberOfEvents; ++counter) {

    STATUS("event: " << setw(10) << counter << '\r'); DEBUG(endl);

    outputFile.put(evt);
  }
  STATUS(endl);

  outputFile.close();
}