/
QuadrupoleTrapAnalysis.cxx
88 lines (68 loc) · 3.43 KB
/
QuadrupoleTrapAnalysis.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "KSReadFileROOT.h"
#include <limits>
using std::numeric_limits;
using namespace Kassiopeia;
int main()
{
using std::cout;
using std::endl;
katrin::KMessageTable::GetInstance().SetTerminalVerbosity(eDebug);
katrin::KMessageTable::GetInstance().SetLogVerbosity(eDebug);
auto tRootFile = katrin::KRootFile::CreateOutputRootFile("QuadrupoleTrapSimulation.root");
KSReadFileROOT tReader;
tReader.OpenFile(tRootFile);
KSReadRunROOT& tRunReader = tReader.GetRun();
KSReadEventROOT& tEventReader = tReader.GetEvent();
KSReadTrackROOT& tTrackReader = tReader.GetTrack();
KSReadStepROOT& tStepReader = tReader.GetStep();
// KSReadObjectROOT& tWorld = tStepReader.Get( "component_step_world" );
// KSDouble& tLength = tWorld.Get< KSDouble >( "time" );
KSReadObjectROOT& tCell = tStepReader.GetObject("component_step_cell");
auto& tPosition = tCell.Get<KSThreeVector>("guiding_center_position");
auto& tMoment = tCell.Get<KSDouble>("orbital_magnetic_moment");
KSDouble tMinMoment;
KSDouble tMaxMoment;
double tDeviation;
for (tRunReader = 0; tRunReader <= tRunReader.GetLastRunIndex(); tRunReader++) {
for (tEventReader = tRunReader.GetFirstEventIndex(); tEventReader <= tRunReader.GetLastEventIndex();
tEventReader++) {
for (tTrackReader = tEventReader.GetFirstTrackIndex(); tTrackReader <= tEventReader.GetLastTrackIndex();
tTrackReader++) {
tMinMoment = numeric_limits<double>::max();
tMaxMoment = numeric_limits<double>::min();
cout << tTrackReader.GetLastStepIndex()-tTrackReader.GetFirstStepIndex() << endl;
size_t tSteps = 0;
for (tStepReader = tTrackReader.GetFirstStepIndex(); tStepReader <= tTrackReader.GetLastStepIndex();
tStepReader++) {
if (tCell.Valid()) {
if (tSteps == 0) {
cout << "first valid: " << tStepReader.GetStepIndex() << endl;
cout << "first position: " << tPosition.Value() << endl;
cout << "first value: " << tMoment.Value() << endl;
}
tSteps++;
if (tMoment.Value() > tMaxMoment.Value()) {
tMaxMoment = tMoment;
}
if (tMoment.Value() < tMinMoment.Value()) {
tMinMoment = tMoment;
}
}
}
cout << "last valid: " << tStepReader.GetStepIndex() << endl;
cout << "last position: " << tPosition.Value() << endl;
cout << "last value: " << tMoment.Value() << endl;
cout << tSteps << " steps" << endl;
cout << "from " << tTrackReader.GetFirstStepIndex() << " to " << tTrackReader.GetLastStepIndex() << endl;
cout << "max: " << tMaxMoment.Value() << ", min: " << tMinMoment.Value() << endl;
tDeviation = 2.0 * ((tMaxMoment.Value() - tMinMoment.Value()) / (tMaxMoment.Value() + tMinMoment.Value()));
cout << "extrema for track #" << tTrackReader.GetTrackIndex() << ": <" << tDeviation << ">" << endl;
cout << endl;
//break;
}
}
}
tReader.CloseFile();
delete tRootFile;
return 0;
}