#include #include #include #include #include #include "TROOT.h" #include "TFile.h" #include "TH1D.h" #include "JDB/JSupport.hh" #include "JDB/JAHRS.hh" #include "JDB/JAHRSCalibration_t.hh" #include "JROOT/JManager.hh" #include "JSupport/JMultipleFileScanner.hh" #include "JGeometry3D/JRotation3D.hh" #include "JGeometry3D/JQuaternion3D.hh" #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * * Program to plot AHRS data. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; JMultipleFileScanner inputFile; JLimit_t& numberOfEvents = inputFile.getLimit(); string ahrsFile; string outputFile; int debug; try { JParser<> zap("Program to plot AHRS data."); zap['f'] = make_field(inputFile, "output of JConvertDB -q ahrs"); zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['A'] = make_field(ahrsFile, "output of JAHRSCalibration") = ""; zap['o'] = make_field(outputFile) = "ahrs.root"; zap['d'] = make_field(debug) = 2; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } JAHRSCalibration_t calibration; if (ahrsFile != "") { calibration.load(ahrsFile.c_str()); } JManager HA(new TH1D("%.A", NULL, 100, 0.0, 2.0)); JManager HB(new TH1D("%.B", NULL, 100, 0.0, 2.0)); while (inputFile.hasNext()) { STATUS("counter " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl); const JAHRS* parameters = inputFile.next(); double A0 = parameters->AHRS_A0; double A1 = parameters->AHRS_A1; double A2 = parameters->AHRS_A2; double H0 = parameters->AHRS_H0; double H1 = parameters->AHRS_H1; double H2 = parameters->AHRS_H2; if (calibration.has(parameters->DOMID)) { const JAHRSCalibration& cal = calibration.get(parameters->DOMID); A0 -= cal.ACC_OFFSET_X; A1 -= cal.ACC_OFFSET_Y; A2 -= cal.ACC_OFFSET_Z; JMatrix3D(cal.ACC_ROT_XX, cal.ACC_ROT_XY, cal.ACC_ROT_XZ, cal.ACC_ROT_YX, cal.ACC_ROT_YY, cal.ACC_ROT_YZ, cal.ACC_ROT_ZX, cal.ACC_ROT_ZY, cal.ACC_ROT_ZZ).transform(A0, A1, A2); H0 -= 0.5 * (cal.MAG_XMIN + cal.MAG_XMAX); H1 -= 0.5 * (cal.MAG_YMIN + cal.MAG_YMAX); H2 -= 0.5 * (cal.MAG_ZMIN + cal.MAG_ZMAX); JMatrix3D(cal.MAG_ROT_XX, cal.MAG_ROT_XY, cal.MAG_ROT_XZ, cal.MAG_ROT_YX, cal.MAG_ROT_YY, cal.MAG_ROT_YZ, cal.MAG_ROT_ZX, cal.MAG_ROT_ZY, cal.MAG_ROT_ZZ).transform(H0, H1, H2); } HA[parameters->DOMID]->Fill(sqrt(A0 * A0 + A1 * A1 + A2 * A2)); HB[parameters->DOMID]->Fill(sqrt(H0 * H0 + H1 * H1 + H2 * H2)); } STATUS(endl); TFile out(outputFile.c_str(), "recreate"); out << HA << HB; out.Write(); out.Close(); }