3 #include <fwk/CentralConfig.h>
4 #include <fwk/LocalCoordinateSystem.h>
5 #include <fwk/MagneticFieldModel.h>
7 #include <det/Detector.h>
8 #include <rdet/RDetector.h>
10 #include <utl/Branch.h>
11 #include <utl/ErrorLogger.h>
12 #include <utl/Reader.h>
13 #include <utl/config.h>
14 #include <utl/Point.h>
15 #include <utl/Vector.h>
16 #include <utl/UTCDateTime.h>
17 #include <utl/CorrelationMatrix.h>
18 #include <utl/NumericalErrorPropagation.h>
20 #include <evt/Event.h>
21 #include <evt/ShowerRecData.h>
22 #include <evt/ShowerRRecData.h>
23 #include <evt/ShowerSRecData.h>
24 #include <evt/ShowerFRecData.h>
25 #include <evt/ShowerSimData.h>
27 #include <revt/REvent.h>
28 #include <revt/Station.h>
29 #include <revt/Header.h>
30 #include <revt/StationRecData.h>
31 #include <revt/StationSimData.h>
32 #include <revt/StationTriggerData.h>
33 #include <revt/StationHeader.h>
35 #include <sevt/SEvent.h>
37 #include <fevt/FEvent.h>
39 #include <fevt/EyeRecData.h>
41 #include <fdet/FDetector.h>
63 topBranch.
GetChild(
"SignalSearchWindowStart").
GetData(fSignalSearchWindowStart);
64 topBranch.
GetChild(
"SignalSearchWindowStop").
GetData(fSignalSearchWindowStop);
65 topBranch.
GetChild(
"FilenameWindowSettings").
GetData(fFilenameWindowSettings);
66 topBranch.
GetChild(
"SignalSearchWindowOffset").
GetData(fSignalSearchWindowOffset);
67 topBranch.
GetChild(
"ReferenceCorePosition").
GetData(fReferenceCorePosition);
69 topBranch.
GetChild(
"SetSignalSearchWindowRelativeTo").
GetData(fSetSignalSearchWindowRelativeTo);
70 topBranch.
GetChild(
"UseSimulationMagneticField").
GetData(fUseSimulationMagneticField);
71 topBranch.
GetChild(
"SetCoordinateOriginTo").
GetData(fSetCoordinateOriginTo);
73 const string whichEye = topBranch.
GetChild(
"UsedEye").
Get<
string>();
78 if (whichEye ==
"HECO")
81 fExternalShowerGeometries = topBranch.
GetChild(
"ExternalShowerGeometries");
83 fConsiderSdUncertainity = (topBranch.
GetChild(
"ConsiderSdUncertainity").
Get<
string>() ==
"yes");
84 fConsiderFdUncertainity = (topBranch.
GetChild(
"ConsiderFdUncertainity").
Get<
string>() ==
"yes");
87 info <<
"\n\tSet reference Core / Axis to: " << fReferenceCorePosition <<
" / " << fReferenceAxis
88 <<
"\n\tDetermine signal seach window from: " << fSetSignalSearchWindowRelativeTo
89 <<
"\n\tSignalSeachWindow(Start/Stop) in ns: " << fSignalSearchWindowStart <<
" / " << fSignalSearchWindowStop
90 <<
"\n\tNoiseWindow(Start/Stop) in ns: " << fNoiseWindowStart <<
" / " << fNoiseWindowStop <<
"\n";
104 return eContinueLoop;
108 REvent& rEvent =
event.GetREvent();
116 ShowerRRecData& showerrrec =
event.GetRecShower().GetRRecShower();
118 if (fInfoLevel > eInfoFinal) {
121 info <<
"Event Running ID: " << rEvent.
GetHeader().
GetId() <<
" Run: "
134 if (fSetCoordinateOriginTo ==
"RdBaryCenter") {
136 VModule::ResultFlag resultCoordinateOrigin = ComputeCoordinateOrigin(rEvent, coordinateOrigin);
137 if (resultCoordinateOrigin !=
eSuccess) {
138 WARNING(
"Coordinate Origin could not be determined!");
139 return resultCoordinateOrigin;
142 showerrrec.
SetParameter(eCoordinateOriginX, coordinateOrigin.
GetX(referenceCS));
143 showerrrec.
SetParameter(eCoordinateOriginY, coordinateOrigin.
GetY(referenceCS));
144 showerrrec.
SetParameter(eCoordinateOriginZ, coordinateOrigin.
GetZ(referenceCS));
145 }
else if (fSetCoordinateOriginTo ==
"SDCore") {
148 ERROR(
"No SRecShower available but SDCore specified in the settings.");
152 ShowerSRecData& showersrec =
event.GetRecShower().GetSRecShower();
154 showerrrec.
SetParameter(eCoordinateOriginX, coordinateOrigin.
GetX(referenceCS));
155 showerrrec.
SetParameter(eCoordinateOriginY, coordinateOrigin.
GetY(referenceCS));
156 showerrrec.
SetParameter(eCoordinateOriginZ, coordinateOrigin.
GetZ(referenceCS));
157 }
else if (fSetCoordinateOriginTo ==
"MCCore") {
160 ERROR(
"No SimShower available but MCCore specified in the settings.");
164 coordinateOrigin =
event.GetSimShower().GetPosition();
165 showerrrec.
SetParameter(eCoordinateOriginX, coordinateOrigin.
GetX(referenceCS));
166 showerrrec.
SetParameter(eCoordinateOriginY, coordinateOrigin.
GetY(referenceCS));
167 showerrrec.
SetParameter(eCoordinateOriginZ, coordinateOrigin.
GetZ(referenceCS));
168 }
else if (fSetCoordinateOriginTo ==
"FDCore") {
170 ERROR(
"No FEvent available but FDCore specified in the settings!");
171 return eContinueLoop;
174 FEvent& fdEvent =
event.GetFEvent();
175 for (
auto eyeIter = fdEvent.
EyesBegin(ComponentSelector::eHasData);
176 eyeIter != fdEvent.
EyesEnd(ComponentSelector::eHasData); ++eyeIter) {
177 if (eyeIter->GetId() != fWhichEye)
182 ERROR(
"Eye has no RecData or FRecShower but FDCore specified in the settings!");
183 return eContinueLoop;
188 showerrrec.
SetParameter(eCoordinateOriginX, coordinateOrigin.
GetX(referenceCS));
189 showerrrec.
SetParameter(eCoordinateOriginY, coordinateOrigin.
GetY(referenceCS));
190 showerrrec.
SetParameter(eCoordinateOriginZ, coordinateOrigin.
GetZ(referenceCS));
192 }
else if (fSetCoordinateOriginTo ==
"External") {
193 std::vector<double> external_core;
194 fExternalShowerGeometries.GetChild(
"ExternalShowerGeometry", {{
"id",
event.GetHeader().GetId()}})
195 .GetChild(
"ShowerCore").GetData(external_core);
196 coordinateOrigin =
utl::Point(external_core[0], external_core[1], external_core[2], referenceCS);
197 showerrrec.
SetParameter(eCoordinateOriginX, coordinateOrigin.
GetX(referenceCS));
198 showerrrec.
SetParameter(eCoordinateOriginY, coordinateOrigin.
GetY(referenceCS));
199 showerrrec.
SetParameter(eCoordinateOriginZ, coordinateOrigin.
GetZ(referenceCS));
202 ERROR(
"No coordinate origin was set!");
207 if (fReferenceCorePosition ==
"SD") {
209 }
else if (fReferenceCorePosition ==
"FD") {
212 }
else if (fReferenceCorePosition ==
"MC") {
214 }
else if (fReferenceCorePosition ==
"RD") {
216 }
else if (fReferenceCorePosition ==
"RDCoordinateOrigin") {
218 }
else if (fReferenceCorePosition ==
"External") {
220 std::vector<double> external_core;
221 fExternalShowerGeometries.GetChild(
"ExternalShowerGeometry", {{
"id",
event.GetHeader().GetId()}})
222 .GetChild(
"ShowerCore").GetData(external_core);
223 showerrrec.
SetParameter(revt::eExternalCoreX, external_core[0]);
224 showerrrec.
SetParameter(revt::eExternalCoreY, external_core[1]);
225 showerrrec.
SetParameter(revt::eExternalCoreZ, external_core[2]);
229 if (fReferenceAxis ==
"SD") {
231 }
else if (fReferenceAxis ==
"FD") {
234 }
else if (fReferenceAxis ==
"MC") {
236 }
else if (fReferenceAxis ==
"RD") {
238 }
else if (fReferenceAxis ==
"External") {
241 std::vector<double> external_axis;
242 fExternalShowerGeometries.GetChild(
"ExternalShowerGeometry", {{
"id",
event.GetHeader().GetId()}})
243 .GetChild(
"ShowerAxis").GetData(external_axis);
244 showerrrec.
SetParameter(revt::eExternalShowerAxisX, external_axis[0]);
245 showerrrec.
SetParameter(revt::eExternalShowerAxisY, external_axis[1]);
246 showerrrec.
SetParameter(revt::eExternalShowerAxisZ, external_axis[2]);
248 ERROR(
"No valid Reference Direction was choosen. Check configuration.");
255 Vector localMagneticField;
256 if (fUseSimulationMagneticField) {
258 ERROR(
"No SimShower available but MCCore specified in the settings.");
265 coordinateOriginCS, Vector::kSpherical);
273 showerrrec.
SetParameter(eMagneticFieldVectorX, localMagneticField.
GetX(coordinateOriginCS));
274 showerrrec.
SetParameter(eMagneticFieldVectorY, localMagneticField.
GetY(coordinateOriginCS));
275 showerrrec.
SetParameter(eMagneticFieldVectorZ, localMagneticField.
GetZ(coordinateOriginCS));
279 for (
auto& station : rEvent.StationsRange()) {
281 if (station.HasRecData()) {
282 WARNING(
"A REvent station has already RecData. This should not be the case."
283 " Check what is going on.");
285 if (station.GetRecData().HasParameter(eTraceStartTime)) {
286 ERROR(
"eTraceStartTime is already set in StationRecData. This should not be the case."
287 " Check what is going on!");
293 station.MakeRecData();
298 const TimeInterval traceStartTime = station.GetRawTraceStartTime() - reventTime;
299 station.GetRecData().SetParameter(eTraceStartTime, traceStartTime,
false);
300 station.SetRawTraceStartTimeLocked();
304 if (fSetSignalSearchWindowRelativeTo ==
"User") {
305 searchWindowStatus = SetSignalSearchWindowManual(event);
306 }
else if (fSetSignalSearchWindowRelativeTo ==
"SD") {
307 searchWindowStatus = SetSignalSearchWindowFromSD(event);
308 }
else if (fSetSignalSearchWindowRelativeTo ==
"FD") {
309 searchWindowStatus = SetSignalSearchWindowFromFD(event);
310 }
else if (fSetSignalSearchWindowRelativeTo ==
"MC") {
311 searchWindowStatus = SetSignalSearchWindowFromMC(event);
312 }
else if (fSetSignalSearchWindowRelativeTo ==
"External") {
313 searchWindowStatus = SetSignalSearchWindowFromExternal(event);
314 }
else if (fSetSignalSearchWindowRelativeTo ==
"File") {
315 searchWindowStatus = SetSignalSearchWindowFromFile(event);
318 ERROR(
"Unspecified setting for the choice of the SignalSearchWindow. Aborting ...");
324 return searchWindowStatus;
331 RdEventInitializer::Finish()
338 RdEventInitializer::ComputeCoordinateOrigin(
const REvent& rEvent,
339 Point& coordinateOrigin)
342 const det::Detector& detector = det::Detector::GetInstance();
346 const Point siteOrigin(0, 0, 0, siteCS);
347 Vector barySum(0, 0, 0, siteCS);
352 for (
const auto& station : rEvent.StationsRange()) {
358 barySum /= nStations;
359 coordinateOrigin = siteOrigin + barySum;
366 RdEventInitializer::SetSignalSearchWindowManual(
Event& event)
369 REvent& rEvent =
event.GetREvent();
371 for (
auto& station : rEvent.StationsRange()) {
372 station.GetRecData().SetParameter(eNoiseWindowStart, fNoiseWindowStart,
false);
373 station.GetRecData().SetParameter(eNoiseWindowStop, fNoiseWindowStop,
false);
374 station.GetRecData().SetParameter(eSignalSearchWindowStart, fSignalSearchWindowStart,
false);
375 station.GetRecData().SetParameter(eSignalSearchWindowStop, fSignalSearchWindowStop,
false);
383 RdEventInitializer::SetSignalSearchWindowFromFile(
evt::Event& event)
386 REvent& rEvent =
event.GetREvent();
393 fin.open(fFilenameWindowSettings.c_str(), ios::in);
394 fin.getline(line, 256);
395 std::vector<std::vector<double> > vWindowSettings;
397 INFODebug(
"loop through file... filename = ");
400 WARNING(
"File could not be opened");
405 std::vector<double> vTmp;
407 double signalSearchWindowStart, signalSearchWindowStop, noiseWindowStart, noiseWindowStop;
408 fin >> windowId >> signalSearchWindowStart >> signalSearchWindowStop >> noiseWindowStart
410 fin.getline(line, 256);
411 vTmp.push_back(signalSearchWindowStart);
412 vTmp.push_back(signalSearchWindowStop);
413 vTmp.push_back(noiseWindowStart);
414 vTmp.push_back(noiseWindowStop);
415 vWindowSettings.push_back(vTmp);
418 oinfo << windowId <<
"\t" << signalSearchWindowStart <<
"\t" << signalSearchWindowStop
419 <<
"\t" << noiseWindowStart <<
"\t" << noiseWindowStop << endl;
428 detector.
Update(eventTime);
431 for (
auto& station : rEvent.StationsRange()) {
433 bool isGermanHardware =
false;
434 if ((!station.HasStationHeader())
436 isGermanHardware =
true;
437 INFODebug(
"station " + std::to_string(station.GetId()) +
" has German hardware");
439 INFODebug(
"station " + std::to_string(station.GetId()) +
" does not have German hardware");
442 if (fInfoLevel == eInfoDebug) {
444 oinfo <<
"TriggerSource Flag = " << station.GetTriggerData().GetTriggerSource();
451 double signalSearchWindowStart, signalSearchWindowStop, noiseWindowStart, noiseWindowStop;
453 if (isGermanHardware) {
458 signalSearchWindowStart = vWindowSettings[0][0];
459 signalSearchWindowStop = vWindowSettings[0][1];
460 noiseWindowStart = vWindowSettings[0][2];
461 noiseWindowStop = vWindowSettings[0][3];
462 INFODebug(
"German self-triggered station");
465 signalSearchWindowStart = vWindowSettings[1][0];
466 signalSearchWindowStop = vWindowSettings[1][1];
467 noiseWindowStart = vWindowSettings[1][2];
468 noiseWindowStop = vWindowSettings[1][3];
469 INFODebug(
"German externally triggered station");
472 signalSearchWindowStart = vWindowSettings[4][0];
473 signalSearchWindowStop = vWindowSettings[4][1];
474 noiseWindowStart = vWindowSettings[4][2];
475 noiseWindowStop = vWindowSettings[4][3];
476 INFODebug(
"Dutch scintillator triggered station, AERA II");
477 }
else if (eventTime < time) {
478 signalSearchWindowStart = vWindowSettings[2][0];
479 signalSearchWindowStop = vWindowSettings[2][1];
480 noiseWindowStart = vWindowSettings[2][2];
481 noiseWindowStop = vWindowSettings[2][3];
482 INFODebug(
"Dutch self-triggered station, AERA I, before November");
483 }
else if (eventTime < timeAERAHWv3) {
484 signalSearchWindowStart = vWindowSettings[3][0];
485 signalSearchWindowStop = vWindowSettings[3][1];
486 noiseWindowStart = vWindowSettings[3][2];
487 noiseWindowStop = vWindowSettings[3][3];
488 INFODebug(
"Dutch self-triggered station, AERA I, after November");
489 }
else if (eventTime < timeAERAII) {
490 signalSearchWindowStart = vWindowSettings[5][0];
491 signalSearchWindowStop = vWindowSettings[5][1];
492 noiseWindowStart = vWindowSettings[5][2];
493 noiseWindowStop = vWindowSettings[5][3];
494 INFODebug(
"Dutch self-triggered station, AERA I, v3 data format");
496 signalSearchWindowStart = vWindowSettings[6][0];
497 signalSearchWindowStop = vWindowSettings[6][1];
498 noiseWindowStart = vWindowSettings[6][2];
499 noiseWindowStop = vWindowSettings[6][3];
500 INFODebug(
"Dutch self-triggered station, AERA II");
503 station.GetRecData().SetParameter(eNoiseWindowStart, noiseWindowStart,
false);
504 station.GetRecData().SetParameter(eNoiseWindowStop, noiseWindowStop,
false);
505 station.GetRecData().SetParameter(eSignalSearchWindowStart, signalSearchWindowStart,
false);
506 station.GetRecData().SetParameter(eSignalSearchWindowStop, signalSearchWindowStop,
false);
516 RdEventInitializer::SetSignalSearchWindowFromSD(
evt::Event& event)
519 if (!event.
HasSEvent() || !
event.HasRecShower() || !
event.GetRecShower().HasSRecShower()) {
520 ERROR(
"No Sd Event or no SD reconstruction will continue."
521 " Maybe you should use non hybrid RdEventInitializer");
522 return eContinueLoop;
525 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
527 REvent& rEvent =
event.GetREvent();
530 const ShowerSRecData& showersrec =
event.GetRecShower().GetSRecShower();
532 TimeInterval RelativesCoreTime = sCoreTime - reventTime;
537 const double zenith = SdAxis.
GetTheta(coreCS);
539 for (
auto& station : rEvent.StationsRange()) {
542 Vector VecDistanceToSdCore = stationPosition - sCore;
545 double projVec = -SdAxis.
GetX(coreCS) * VecDistanceToSdCore.
GetX(coreCS)
546 - SdAxis.
GetY(coreCS) * VecDistanceToSdCore.
GetY(coreCS)
547 - SdAxis.
GetZ(coreCS) * VecDistanceToSdCore.
GetZ(coreCS);
551 const double expectedtime = double(RelativesCoreTime) + relativePulseTime
552 - station.GetRecData().GetParameter(eTraceStartTime) + fSignalSearchWindowOffset;
554 if (std::isnan(expectedtime)) {
555 if (fInfoLevel > eInfoFinal)
556 ERROR(
"Expected time for pulse is Nan, Skip to next event");
558 return eContinueLoop;
562 if (fConsiderSdUncertainity && !showersrec.
HasParameterCovariance(sevt::eShowerAxisX, sevt::eShowerAxisX) &&
566 ERROR(
"No error given in Sd shower reco! cannot set signal window from Sd uncertainity."
567 " Event is ignored!!!");
568 return eContinueLoop;
571 double deltaTimeSdUncert = 0;
572 if (fConsiderSdUncertainity) {
583 double sig2_projVec =
584 SdAxis.
GetX(coreCS) * SdAxis.
GetX(coreCS) * CoreErr_X * CoreErr_X
585 + VecDistanceToSdCore.
GetX(coreCS) * VecDistanceToSdCore.
GetX(coreCS) * sig2_Axis_x
586 + SdAxis.
GetY(coreCS) * SdAxis.
GetY(coreCS) * CoreErr_Y * CoreErr_Y
587 + VecDistanceToSdCore.
GetY(coreCS) * VecDistanceToSdCore.
GetY(coreCS) * sig2_Axis_y
589 * (SdAxis.
GetX(coreCS) * SdAxis.
GetY(coreCS) * CoreCov_XY
590 + VecDistanceToSdCore.
GetX(coreCS) * VecDistanceToSdCore.
GetY(coreCS)
594 deltaTimeSdUncert =
sqrt(
595 sig2_relativePulseTime +
double(sCoreTimeError) *
double(sCoreTimeError));
597 if (std::isnan(deltaTimeSdUncert)) {
598 if (fInfoLevel > eInfoFinal)
599 ERROR(
"Estimated arrival time uncertainty for a pulse is Nan, Skip to next event");
601 return eContinueLoop;
610 const double increase = (62.11 *
utl::m + 8.05 *
utl::m * cos(zenith)
613 const double searchWindowStart = expectedtime - deltaTimeSdUncert + fSignalSearchWindowStart - increase;
614 const double searchWindowStop = expectedtime + deltaTimeSdUncert + fSignalSearchWindowStop + increase;
618 station.GetRecData().SetParameter(eSignalSearchWindowStart, searchWindowStart,
false);
619 station.GetRecData().SetParameter(eSignalSearchWindowStop, searchWindowStop,
false);
623 station.GetRecData().SetParameter(eNoiseWindowStart, fNoiseWindowStart,
false);
624 station.GetRecData().SetParameter(eNoiseWindowStop, fNoiseWindowStop,
false);
633 RdEventInitializer::SetSignalSearchWindowFromExternal(
evt::Event& event)
637 ERROR(
"No RecEvent, may-be you should review RdEventInitializer");
638 return eContinueLoop;
641 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
644 REvent& rEvent =
event.GetREvent();
648 event.MakeRecShower();
652 event.GetRecShower().MakeRRecShower();
657 std::vector<double> external_core;
658 fExternalShowerGeometries.GetChild(
"ExternalShowerGeometry", {{
"id",
event.GetHeader().GetId()}})
659 .GetChild(
"ShowerCore").GetData(external_core);
660 utl::Point sCore =
utl::Point(external_core[0], external_core[1], external_core[2], referenceCS);
662 std::vector<double> external_axis;
663 fExternalShowerGeometries.GetChild(
"ExternalShowerGeometry", {{
"id",
event.GetHeader().GetId()}})
664 .GetChild(
"ShowerAxis").GetData(external_axis);
668 std::vector<double> external_core_time;
669 fExternalShowerGeometries.GetChild(
"ExternalShowerGeometry", {{
"id",
event.GetHeader().GetId()}})
670 .GetChild(
"CoreTime").GetData(external_core_time);
673 TimeInterval RelativesCoreTime = sCoreTime - reventTime;
674 const double zenith = SdAxis.
GetTheta(coreCS);
676 for (
auto& station : rEvent.StationsRange()) {
679 Vector VecDistanceToSdCore = stationPosition - sCore;
681 double projVec = -SdAxis.
GetX(coreCS) * VecDistanceToSdCore.
GetX(coreCS)
682 - SdAxis.
GetY(coreCS) * VecDistanceToSdCore.
GetY(coreCS)
683 - SdAxis.
GetZ(coreCS) * VecDistanceToSdCore.
GetZ(coreCS);
687 const double expectedtime = double(RelativesCoreTime) + relativePulseTime
688 - station.GetRecData().GetParameter(eTraceStartTime) + fSignalSearchWindowOffset;
690 if (std::isnan(expectedtime)) {
691 if (fInfoLevel > eInfoFinal) {
692 WARNING(
"Expected time for pulse is Nan, Skip to next event");
694 return eContinueLoop;
702 const double increase = (62.11 *
utl::m + 8.05 *
utl::m * cos(zenith)
705 const double searchWindowStart = expectedtime + fSignalSearchWindowStart - increase;
706 const double searchWindowStop = expectedtime + fSignalSearchWindowStop + increase;
710 station.GetRecData().SetParameter(eSignalSearchWindowStart, searchWindowStart,
false);
711 station.GetRecData().SetParameter(eSignalSearchWindowStop, searchWindowStop,
false);
715 station.GetRecData().SetParameter(eNoiseWindowStart, fNoiseWindowStart,
false);
716 station.GetRecData().SetParameter(eNoiseWindowStop, fNoiseWindowStop,
false);
726 RdEventInitializer::SetSignalSearchWindowFromFD(
evt::Event& event)
730 ERROR(
"No FEvent available but SetSignalSearchWindowFromFD specified in the settings!");
731 return eContinueLoop;
734 FEvent& fdEvent =
event.GetFEvent();
735 for (
auto eyeIter = fdEvent.
EyesBegin(ComponentSelector::eHasData);
736 eyeIter != fdEvent.
EyesEnd(ComponentSelector::eHasData); ++eyeIter) {
738 if (eyeIter->GetId() != fWhichEye)
743 ERROR(
"Eye has no RecData or FRecShower but FD SetSignalSearchWindowFromFD specified in the settings!");
744 return eContinueLoop;
747 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
748 REvent& rEvent =
event.GetREvent();
759 TimeInterval RelativefdCoreTime = fdCoreTime - reventTime;
764 for (
auto& station : rEvent.StationsRange()) {
767 Vector VecDistanceToFdCore = stationPosition - fCore;
769 double projVec = -FdAxis.
GetX(coreCS) * VecDistanceToFdCore.
GetX(coreCS)
770 - FdAxis.
GetY(coreCS) * VecDistanceToFdCore.
GetY(coreCS)
771 - FdAxis.
GetZ(coreCS) * VecDistanceToFdCore.
GetZ(coreCS);
775 const double expectedtime = double(RelativefdCoreTime) + relativePulseTime
776 - station.GetRecData().GetParameter(eTraceStartTime) + fSignalSearchWindowOffset;
780 if (fConsiderFdUncertainity) {
781 const fdet::Eye& detEye = det::Detector::GetInstance().GetFDetector().GetEye(eye.
GetId());
786 const double rp = eyeRec.
GetRp();
790 const double theta_sdp = sdp.
GetTheta(eyeCS);
791 const double phi_sdp = sdp.
GetPhi(eyeCS);
801 std::vector<utl::Parameter> coreParameters;
802 coreParameters.emplace_back(rp, rp_err);
803 coreParameters.emplace_back(chi0, chi0_err);
804 coreParameters.emplace_back(theta_sdp, theta_sdp_err);
805 coreParameters.emplace_back(phi_sdp, phi_sdp_err);
807 coreCorrelations.
Set(0, 1, corr_chi0rp);
808 coreCorrelations.
Set(0, 2, 0.);
809 coreCorrelations.
Set(0, 3, 0.);
810 coreCorrelations.
Set(1, 2, 0.);
811 coreCorrelations.
Set(1, 3, 0.);
812 coreCorrelations.
Set(2, 3, corr_tp);
823 double CoreCov_XY = CorrXY * CoreErr_X * CoreErr_Y;
826 double sig2_projVec = FdAxis.
GetX(coreCS) * FdAxis.
GetX(coreCS) * CoreErr_X * CoreErr_X
827 + VecDistanceToFdCore.
GetX(coreCS) * VecDistanceToFdCore.
GetX(coreCS) * sig2_Axis_x
828 + FdAxis.
GetY(coreCS) * FdAxis.
GetY(coreCS) * CoreErr_Y * CoreErr_Y
829 + VecDistanceToFdCore.
GetY(coreCS) * VecDistanceToFdCore.
GetY(coreCS) * sig2_Axis_y
830 + 2 * (FdAxis.
GetX(coreCS) * FdAxis.
GetY(coreCS) * CoreCov_XY);
835 sig2_relativePulseTime +
double(fdCoreTimeError) *
double(fdCoreTimeError));
838 if (std::isnan(expectedtime)) {
839 if (fInfoLevel > eInfoFinal) {
840 WARNING(
"Expected time for pulse is Nan, Skip to next event");
842 return eContinueLoop;
845 const double searchWindowStart = expectedtime - sig_tot + fSignalSearchWindowStart;
846 const double searchWindowStop = expectedtime + sig_tot + fSignalSearchWindowStop;
848 station.GetRecData().SetParameter(eSignalSearchWindowStart, searchWindowStart,
false);
849 station.GetRecData().SetParameter(eSignalSearchWindowStop, searchWindowStop,
false);
850 station.GetRecData().SetParameter(eNoiseWindowStart, fNoiseWindowStart,
false);
851 station.GetRecData().SetParameter(eNoiseWindowStop, fNoiseWindowStop,
false);
862 RdEventInitializer::SetSignalSearchWindowFromMC(
evt::Event& event)
865 REvent& rEvent =
event.GetREvent();
866 for (
auto& station : rEvent.StationsRange()) {
867 auto& stationRecData = station.GetRecData();
868 auto& stationSimData = station.GetSimData();
870 if (!stationSimData.HasParameter(eSignalTime)) {
871 ERROR(
"eSignalTime not set but SetSignalSearchWindowFromMC is used."
872 " Please run RdStationSimPulseFinder before.");
876 if (stationSimData.GetParameter(eSignalTime) == 0 &&
877 stationSimData.GetParameter(eSignal) == 0) {
878 ERROR(
"eSignalTime not set but SetSignalSearchWindowFromMC is used."
879 " Please run RdStationSimPulseFinder before.");
883 const double traceStartTime = stationSimData.GetParameter(eTraceStartTime);
884 const double simPulseTime = stationSimData.GetParameter(eSignalTime) - traceStartTime;
885 stationRecData.SetParameter(eSignalSearchWindowStart, simPulseTime + fSignalSearchWindowStart);
886 stationRecData.SetParameter(eSignalSearchWindowStop, simPulseTime + fSignalSearchWindowStop);
887 stationRecData.SetParameter(eNoiseWindowStart, fNoiseWindowStart);
888 stationRecData.SetParameter(eNoiseWindowStop, fNoiseWindowStop);
Branch GetTopBranch() const
unsigned int GetId() const
double GetCorrelationXY() const
void Update(const utl::TimeStamp &time, const bool invData=true, const bool invComp=true, const bool forceRadio=false)
Update detector: deletes currently constructed stations and sets new time.
void SetParameter(Parameter i, double value, bool lock=true)
double GetRpError() const
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
Detector description interface for Station-related data.
Fluorescence Detector Eye Event.
Interface class to access to the SD Reconstruction of a Shower.
const std::vector< double > & GetPropagatedErrors() const
bool HasRecShower() const
Interface class to access to the Radio part of an event.
double GetTheta(const CoordinateSystemPtr &coordinateSystem) const
zenith (theta) angle in spherical coordinates
double GetChiZero() const
ShowerRecData & GetRecShower()
Interface class to access to the RD Reconstruction of a Shower.
bool HasSimShower() const
EyeIterator EyesEnd(const ComponentSelector::Status status)
double GetParameterCovariance(const Parameter q1, const Parameter q2) const
const utl::Vector & GetCoreError() const
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
Detector description interface for Eye-related data.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
utl::CoordinateSystemPtr GetSiteCoordinateSystem() const
Get the coordinate system for the site.
const utl::Vector & GetAxisError() const
Error on shower axis.
double GetSDPPhiError() const
double GetTZeroError() const
double GetChiZeroError() const
A TimeStamp holds GPS second and nanosecond for some event.
Detector description interface for RDetector-related data.
Interface class to access Shower Simulated parameters.
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
void Set(const int iPar, const int jPar, const double corr)
#define INFOIntermediate(y)
Class representing a document branch.
double GetMagneticFieldStrength() const
Get the absolute strength of the Earth's magnetic field used in CORSIKA/REAS simulation.
double GetX(const CoordinateSystemPtr &coordinateSystem) const
utl::CoordinateSystemPtr GetEyeCoordinateSystem() const
Returns the Eye Coordinate system.
const utl::TimeStamp & GetCoreTime() const
time when shower front passes through the core point
static MagneticFieldModel & instance()
double GetMagneticFieldZenith() const
Get the zenith angle (Auger convention, limited btw. 0 and 90 deg) of the Earth's magnetic field used...
bool HasRRecShower() const
Header & GetHeader()
access to REvent Header
Top of the hierarchy of the detector description interface.
bool HasFRecShower() const
Check if reconstructed shower info has been allocated.
void SetWhichEye(const unsigned int eye)
evt::ShowerFRecData & GetFRecShower()
Reconstructed shower info for this eye.
EyeIterator EyesBegin(const ComponentSelector::Status status)
static utl::Vector GetMagneticFieldVector(const utl::Point &position, const utl::TimeStamp &time)
returns the magnetic field at a specific place at a specific time
const CorrelationMatrix & GetPropagatedCorrelations() const
double GetSDPCorrThetaPhi() const
const utl::Vector & GetAxis() const
#define WARNING(message)
Macro for logging warning messages.
void GetData(bool &b) const
Overloads of the GetData member template function.
double Get(const int iPar, const int jPar) const
Top of Fluorescence Detector event hierarchy.
Eye-specific shower reconstruction data.
const utl::AxialVector & GetSDP() const
void SetReferenceAxisFlag(const ReferenceAxis refAxisFlag)
Set a flag to select a reference axis.
double GetRpChi0Correlation() const
double GetY(const CoordinateSystemPtr &coordinateSystem) const
const utl::TimeInterval & GetCoreTimeError() const
constexpr double kSpeedOfLight
A TimeInterval is used to represent time elapsed between two events.
ResultFlag
Flag returned by module methods to the RunController.
unsigned long GetGPSSecond() const
GPS second.
Interface class to access to Fluorescence reconstruction of a Shower.
const utl::Point & GetCorePosition() const
void SetReferenceCoreFlag(const ReferenceCorePosition refCoreFlag)
Set a flag to select a reference core.
const rdet::RDetector & GetRDetector() const
double GetMagneticFieldAzimuth() const
Get the azimuth angle of the Earth's magnetic field used in CORSIKA/REAS simulation.
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
utl::Point GetPosition() const
Tank position in Site Cartesian Coordinates.
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
#define ERROR(message)
Macro for logging error messages.
const Station & GetStation(const int stationId) const
Get station by Station Id.
const utl::Point & GetCorePosition() const
Shower core as reconstructed by the FD or FD eye.
bool HasSRecShower() const
TimeStamp GetTimeStamp() const
bool HasParameterCovariance(const Parameter q1, const Parameter q2) const
const utl::TimeStamp & GetCoreTime() const
time when shower front passes through the core point
fevt::EyeRecData & GetRecData()
Reconstructed data for this eye.
double GetSDPThetaError() const
const utl::Vector & GetAxis() const
Shower Axis as reconstructed by the FD or FD eye.