989
1007
ui->plot_position_yz->replot();
1012
// plot helical tracks
1014
// - load parent geometry mice module (needed for helical track transformations)
1015
std::stringstream modulePath;
1016
if (getenv("EV_GEOM_HOME"))
1017
modulePath << getenv("EV_GEOM_HOME") << "/ParentGeometryFile.dat";
1019
modulePath << getenv("MAUS_ROOT_DIR") << "/files/geometry/download/ParentGeometryFile.dat";
1021
// - Adam's fix (redirecting stdout/stderr)
1022
std::ostream* stdout = new std::ofstream();
1023
stdout->rdbuf(std::cout.rdbuf());
1024
std::ostream* stderr = new std::ofstream();
1025
stderr->rdbuf(std::cerr.rdbuf());
1028
mm = new MiceModule(modulePath.str());
1029
std::cout.rdbuf(stdout->rdbuf());
1030
std::cerr.rdbuf(stderr->rdbuf());
1031
} catch(MAUS::Exceptions::Exception e) {
1032
std::cerr << "Caught exception while building MiceModules" << std::endl;
1036
// this file should be included in the release so no try/catch neccessary
1037
modulePath << getenv("MAUS_ROOT_DIR") << "/src/utilities/event-viewer/ParentGeometryFile.dat";
1038
mm = new MiceModule(modulePath.str());
1039
std::cout.rdbuf(stdout->rdbuf());
1040
std::cerr.rdbuf(stderr->rdbuf());
1043
// --- fetch US tracker global geometry
1044
mmTrackerUS = mm->findModulesByName ("ParentGeometryFile.dat/Tracker0.dat");
1046
// - get TrackerRef0 position
1047
double trackerRef0posX = mmTrackerUS[0]->daughter(0)->globalPosition().x();
1048
double trackerRef0posY = mmTrackerUS[0]->daughter(0)->globalPosition().y();
1049
double trackerRef0posZ = mmTrackerUS[0]->daughter(0)->globalPosition().z();
1051
// - get rotation matrix
1052
double xx = mmTrackerUS[0]->globalRotation().xx();
1053
double xy = mmTrackerUS[0]->globalRotation().xy();
1054
double xz = mmTrackerUS[0]->globalRotation().xz();
1055
double yx = mmTrackerUS[0]->globalRotation().yx();
1056
double yy = mmTrackerUS[0]->globalRotation().yy();
1057
double yz = mmTrackerUS[0]->globalRotation().yz();
1058
double zx = mmTrackerUS[0]->globalRotation().zx();
1059
double zy = mmTrackerUS[0]->globalRotation().zy();
1060
double zz = mmTrackerUS[0]->globalRotation().zz();
1062
// - fill matrix elements (for VectorTransform)
1063
std::vector<double> matrixElements;
1064
matrixElements.push_back(xx);
1065
matrixElements.push_back(xy);
1066
matrixElements.push_back(xz);
1067
matrixElements.push_back(yx);
1068
matrixElements.push_back(yy);
1069
matrixElements.push_back(yz);
1070
matrixElements.push_back(zx);
1071
matrixElements.push_back(zy);
1072
matrixElements.push_back(zz);
1074
// - dimensions (y coordinate is length)
1075
Hep3Vector dimensions = mmTrackerUS[0]->dimensions();
1076
double trackerLength = dimensions.y();
1078
// - plot upstream helical track
1079
QCPCurve upstream_helix_xz_plane(ui->plot_position_xz->xAxis, ui->plot_position_xz->yAxis);
1080
QCPCurve upstream_helix_yz_plane(ui->plot_position_yz->xAxis, ui->plot_position_yz->yAxis);
1081
QVector<double> upstream_helix_x, upstream_helix_y, upstream_helix_z; // vectors to hold z coordinates array and coresponding values from projections to XZ and YZ planes
1082
double circle_x0 = evEvent.scifiUSTrackerHelicalTrackParameters[0];
1083
double circle_y0 = evEvent.scifiUSTrackerHelicalTrackParameters[1];
1084
double radius = evEvent.scifiUSTrackerHelicalTrackParameters[2];
1085
double dsdz = evEvent.scifiUSTrackerHelicalTrackParameters[3];
1086
double line_dz_c = evEvent.scifiUSTrackerHelicalTrackParameters[4];
1087
double posZ = evEvent.scifiUSTrackerHelicalTrackParameters[7];
1089
double zUSLocal = posZ;
1090
int zStep = trackerLength/300;
1091
while (zUSLocal < trackerLength) {
1092
zUSLocal += zStep; // z value in tracker local reference system
1093
double upstream_helix_x_value = circle_x0 + (radius*qCos((1/radius)*(dsdz*zUSLocal+line_dz_c))); // x value in tracker local reference system
1094
double upstream_helix_y_value = circle_y0 + (radius*qSin((1/radius)*(dsdz*zUSLocal+line_dz_c))); // y value in tracker local reference system
1096
// - transformation to global coordinate system (not exactly correct but accurate enough (?!) for visual representation)
1097
std::vector<double> vSpacePoint = {upstream_helix_x_value, upstream_helix_y_value, zUSLocal};
1098
VectorTransform trans(vSpacePoint);
1099
trans.Rotate(matrixElements, "reg");
1100
trans.Translate(trackerRef0posX, trackerRef0posY, trackerRef0posZ, "reg");
1102
upstream_helix_x.push_back(trans.GetX());
1103
upstream_helix_y.push_back(trans.GetY());
1104
upstream_helix_z.push_back(trans.GetZ());
1107
upstream_helix_xz_plane.setData(upstream_helix_z, upstream_helix_x);
1108
upstream_helix_yz_plane.setData(upstream_helix_z, upstream_helix_y);
1111
// --- fetch DS tracker global geometry
1112
mmTrackerDS = mm->findModulesByName ("ParentGeometryFile.dat/Tracker1.dat");
1114
// - get TrackerRef1 position
1115
double trackerRef1posX = mmTrackerDS[0]->daughter(0)->globalPosition().x();
1116
double trackerRef1posY = mmTrackerDS[0]->daughter(0)->globalPosition().y();
1117
double trackerRef1posZ = mmTrackerDS[0]->daughter(0)->globalPosition().z();
1119
// - get rotation matrix
1120
xx = mmTrackerDS[0]->globalRotation().xx();
1121
xy = mmTrackerDS[0]->globalRotation().xy();
1122
xz = mmTrackerDS[0]->globalRotation().xz();
1123
yx = mmTrackerDS[0]->globalRotation().yx();
1124
yy = mmTrackerDS[0]->globalRotation().yy();
1125
yz = mmTrackerDS[0]->globalRotation().yz();
1126
zx = mmTrackerDS[0]->globalRotation().zx();
1127
zy = mmTrackerDS[0]->globalRotation().zy();
1128
zz = mmTrackerDS[0]->globalRotation().zz();
1130
// - fill matrix elements (for VectorTransform)
1131
matrixElements.clear();
1132
matrixElements.push_back(xx);
1133
matrixElements.push_back(xy);
1134
matrixElements.push_back(xz);
1135
matrixElements.push_back(yx);
1136
matrixElements.push_back(yy);
1137
matrixElements.push_back(yz);
1138
matrixElements.push_back(zx);
1139
matrixElements.push_back(zy);
1140
matrixElements.push_back(zz);
1142
// - plot downstream helical track
1143
QCPCurve downstream_helix_xz_plane(ui->plot_position_xz->xAxis, ui->plot_position_xz->yAxis);
1144
QCPCurve downstream_helix_yz_plane(ui->plot_position_yz->xAxis, ui->plot_position_yz->yAxis);
1145
QVector<double> downstream_helix_x, downstream_helix_y, downstream_helix_z; // vectors to hold z coordinates array and coresponding values from projections to XZ and YZ planes
1146
circle_x0 = evEvent.scifiDSTrackerHelicalTrackParameters[0];
1147
circle_y0 = evEvent.scifiDSTrackerHelicalTrackParameters[1];
1148
radius = evEvent.scifiDSTrackerHelicalTrackParameters[2];
1149
dsdz = evEvent.scifiDSTrackerHelicalTrackParameters[3];
1150
line_dz_c = evEvent.scifiDSTrackerHelicalTrackParameters[4];
1151
posZ = evEvent.scifiDSTrackerHelicalTrackParameters[7];
1154
while (zUSLocal < trackerLength) {
1155
zUSLocal += zStep; // z value in tracker local reference system
1156
double downstream_helix_x_value = circle_x0 + (radius*qCos((1/radius)*(dsdz*zUSLocal+line_dz_c))); // x value in tracker local reference system
1157
double downstream_helix_y_value = circle_y0 + (radius*qSin((1/radius)*(dsdz*zUSLocal+line_dz_c))); // y value in tracker local reference system
1159
// - transformation to global coordinate system (not exactly correct but accurate enough for visual representation)
1160
std::vector<double> vSpacePoint = {downstream_helix_x_value, downstream_helix_y_value, zUSLocal};
1161
VectorTransform trans(vSpacePoint);
1162
trans.Rotate(matrixElements, "reg");
1163
trans.Translate(trackerRef1posX, trackerRef1posY, trackerRef1posZ, "reg");
1165
downstream_helix_x.push_back(trans.GetX());
1166
downstream_helix_y.push_back(trans.GetY());
1167
downstream_helix_z.push_back(trans.GetZ());
1170
downstream_helix_xz_plane.setData(downstream_helix_z, downstream_helix_x);
1171
downstream_helix_yz_plane.setData(downstream_helix_z, downstream_helix_y);
993
1175
QVector<double> tof2_x, tof2_y, tof2_z;
994
1176
MAUS::ThreeVector tof2 = evEvent.tofPoints[2];