#ifndef OrbitalInfoStruct_h
#define OrbitalInfoStruct_h

struct cOrbitalInfo {

  ULong64_t abstime; //< Absolute Time
  // EM: added On Board Time and CPU Packet Number
  ULong64_t obt; //< On Board Time
  ULong64_t pkt_num; //< CPU packet number

  // Position
  Float_t lon; // degree from -180 to 180
  Float_t lat; // degree from -90 to 90
  Float_t alt; // meters

  // Magnetic field

  // components (gauss)
  Float_t Bnorth;
  Float_t Beast;
  Float_t Bdown;

  // abs value (guass)
  Float_t Babs;

  // Minimum along the field line (that is at the magnetic equator)
  Float_t BB0;

  // Distance of the magnetic equator in earth radii
  Float_t L; 

  // Dipolar magnetic coordinates
  Float_t londip; // degrees from -180 to 180
  Float_t latdip; // degrees from -90 to 90
  Float_t altdip; // meters

  // Corrected magnetic coordinates
  Float_t loncgm; // degrees from -180 to 180
  Float_t latcgm; // degrees from -90 to 90
  Float_t altcgm; // meters

  // Corrected B min magnetic coordinates
  Float_t loncbm; // degrees from -180 to 180
  Float_t latcbm; // degrees from -90 to 90
  Float_t altcbm; // meters

  Float_t cutoff[20];

  // Quaternions
  Float_t q0, q1, q2, q3;

  // Euler angles (nadir reference frame)
  Float_t theta, phi, etha;

  // Euler angles (local field reference frame)
    //  Float_t thetamag, phimag, ethamag;
    Int_t mode;

  // Useful?
    //  Int_t goodAttitude[5];

  void InitcOrbitalInfo(){
    abstime = 0;
    obt     = 0;
    pkt_num = 0;
  }
};

#endif
