9 #include <fwk/CentralConfig.h>
10 #include <fwk/CoordinateSystemRegistry.h>
12 #include <utl/Reader.h>
13 #include <utl/ErrorLogger.h>
14 #include <utl/UTMPoint.h>
16 #include <evt/Event.h>
17 #include <evt/ShowerRecData.h>
18 #include <evt/ShowerFRecData.h>
20 #include <fevt/Telescope.h>
22 #include <fevt/FEvent.h>
23 #include <fevt/Pixel.h>
24 #include <fevt/PixelRecData.h>
25 #include <fevt/EyeRecData.h>
26 #include <fevt/EyeHeader.h>
27 #include <fevt/TelescopeRecData.h>
28 #include <fevt/FdComponentSelector.h>
30 #include <det/Detector.h>
33 #include <fdet/Channel.h>
34 #include <fdet/Pixel.h>
35 #include <fdet/FDetector.h>
36 #include <fdet/FTimeFitModel.h>
38 #include <utl/MathConstants.h>
39 #include <utl/PhysicalConstants.h>
40 #include <utl/Transformation.h>
45 #include <utl/ReferenceEllipsoid.h>
46 #include <fwk/LocalCoordinateSystem.h>
47 #include <evt/ShowerRecData.h>
53 #include <evt/ShowerSRecData.h>
54 #include <sevt/SEvent.h>
55 #include <sevt/Station.h>
56 #include <sevt/StationTriggerData.h>
57 #include <sevt/StationRecData.h>
58 #include <sevt/EventTrigger.h>
59 #include <sdet/SDetector.h>
60 #include <sdet/Station.h>
65 #include <evt/Header.h>
80 using namespace FdAxisFinderOG;
84 double FdAxisFinder::fChi2 =0;
85 unsigned int FdAxisFinder::fNDof=0;
89 int FdAxisFinder::fDebuging;
94 bool FdAxisFinder::fIsCeleste =
false;
95 bool FdAxisFinder::fIsRamiro =
false;
102 CentralConfig::GetInstance()->
GetTopBranch(
"FdAxisFinder");
105 ERROR(
"Could not find branch FdAxisFinder");
115 int timeFitModelSwitch;
119 switch (timeFitModelSwitch) {
127 ERROR(
"Invalid input parameter for TimeFitModel");
131 fMinimumTimeExtension = 500 *
ns;
136 info <<
"Parameters:\n"
137 " tolerance: " << fTolerance /
degree <<
" deg.\n"
138 " min no. pixels: " << fMinPixels <<
"\n"
139 " t_i deviation limit: " << fSigmasLimit <<
" sigmas";
149 if (fSelectAndRecLasers && !CheckForLasers(event))
150 return eContinueLoop;
152 fMinuitFailed =
false;
160 unsigned int neyes = 0;
161 for (eyeiter = fevent.
EyesBegin(ComponentSelector::eHasData);
162 eyeiter != fevent.
EyesEnd(ComponentSelector::eHasData);
175 this->FillPoints(eye);
178 if (!
fSDP.GetMag2()) {
179 WARNING(
"This eye has no valid SDP!");
184 if (det::Detector::GetInstance().GetFDetector().GetEye(eye).IsVirtual())
190 cout <<
" All pixels in this Eye were triggered within "<< fMinimumTimeExtension<<
" ns\n";
191 cout <<
" This event may be a Blob in the mirror \n";
199 if (fSelectAndRecLasers)
210 while ( ReadmitPixel(eye)) {
211 if (fSelectAndRecLasers)
225 while ( RejectPixel(eye)) {
226 if (fSelectAndRecLasers)
238 if (
abs (fChi0) >
kPi ) {
239 fChi0 -= int ( fChi0 / (2*
kPi) )* 2*
kPi;
240 if ( fChi0 < 0 ) fChi0 += 2*
kPi;
241 if ( fChi0 >
kPi ) fChi0 -= 2*
kPi;
254 double rRpT0 = fCovariance[2][1]/
fRpError/fT0Error;
255 double rRpChi0 = fCovariance[2][0]/
fRpError/fChi0Error;
256 double rChi0T0 = fCovariance[0][1]/fChi0Error/fT0Error;
266 telIt != eye.
TelescopesEnd(ComponentSelector::eHasData); ++telIt)
268 if (!telIt->HasRecData())
269 telIt->MakeRecData();
282 det::Detector::GetInstance().GetFDetector().GetEye(eye).GetEyeCoordinateSystem();
287 Vector vertical(0,0,1,eyeCS);
291 Transformation rot (Transformation::Rotation(-fChi0, sdp, eyeCS));
293 Vector axis (rot* horizontalInSDP);
297 det::Detector::GetInstance().GetSiteCoordinateSystem();
301 info <<
"Axis(Theta,Phi)(siteCS): " << axis.
GetTheta(siteCS)/
degree
306 Vector core_eye_vec =
fRp / sin(
kPi - fChi0) * horizontalInSDP;
309 det::Detector::GetInstance().GetFDetector().GetEye(eye).GetPosition();
311 Point core = eyeposition + core_eye_vec;
314 cout <<
"Core (x,y)(eyeCS) " << core.
GetX(eyeCS)<<
","
315 << core.
GetY(eyeCS)<<
" [m]" << endl;
317 cout <<
"Core (x,y)(siteCS) " << core.
GetX(siteCS)<<
","
318 << core.
GetY(siteCS)<<
" [m]" << endl;
327 recshower.
SetCoreTime(fCurEye->GetHeader().GetTimeStamp() -
334 info <<
"T_0=" << fT0/
ns <<
" +/- " << fT0Error/
ns <<
" ns, "
335 <<
"Chi_O=" << fChi0/
degree <<
" +/- " << fChi0Error/
degree <<
" deg, "
343 return eContinueLoop;
354 TMinuit theMinuit(npar);
356 theMinuit.SetPrintLevel(-1);
357 theMinuit.SetFCN(FdAxisFinder::MinuitFitFunc);
359 double arglist[
npar];
364 theMinuit.mnexcm(
"SET ERR", arglist, 1, ierflag);
367 ERROR(
"Minuit SET ERR failed");
369 static double vstart[
npar];
370 static double step[
npar];
373 vstart[0] = fChi0First;
374 vstart[1] = fT0First;
375 vstart[2] = fRpFirst;
381 theMinuit.mnparm(0,
"Chi0", vstart[0], step[0], 0, 0, ierflag);
382 theMinuit.mnparm(1,
"T0", vstart[1], step[1], 0, 0, ierflag);
383 theMinuit.mnparm(2,
"Rp", vstart[2], step[2], 0, 0, ierflag);
387 theMinuit.mnexcm(
"MIGRAD", arglist, 2, ierflag);
390 ERROR(
"Minuit MIGRAD failed");
391 fMinuitFailed =
true;
394 theMinuit.mnexcm(
"HESSE", arglist, 2, ierflag);
398 double fmin, fedm, errdef;
401 theMinuit.mnstat(fmin, fedm, errdef, npari, nparx, istat);
403 theMinuit.mnexcm(
"MINOS", arglist, 2, ierflag);
404 theMinuit.mnstat(fmin, fedm, errdef, npari, nparx, istat);
406 WARNING(
"Neither HESSE nor MINOS found accurate covariance matrix");
408 theMinuit.GetParameter(0, fChi0, fChi0Error);
409 theMinuit.GetParameter(1, fT0, fT0Error);
411 theMinuit.mnemat(&fCovariance[0][0], 3);
413 if (fDebuging == 1) {
414 cout <<
"TO " << fT0 <<
" +/- " << fT0Error <<
"\n"
415 "ChiO " << fChi0/
degree <<
" +/- " << fChi0Error/
degree <<
"\n"
419 fChi2 = theMinuit.fAmin;
426 double min_t_i = 10e6;
432 det::Detector::GetInstance().GetFDetector().GetEye(eye);
445 det::Detector::GetInstance().GetFDetector().GetPixel(evtpixel);
448 if (AngleWithSDP < fTolerance)
463 det::Detector::GetInstance().GetFDetector().GetPixel(evtpixel);
465 det::Detector::GetInstance().GetFDetector().GetChannel(evtpixel);
478 cout <<
"PixId: " << evtpixel.
GetId() <<
" t_i " << t_i <<
" ti err " << t_i_Err <<
'\n';
481 if (
fSDP.GetMag2()) {
484 pixeldir.TransformTo(CS);
485 Vector vertical(0,0,1, CS, Vector::kCartesian);
487 horizontalWithinSDP /= horizontalWithinSDP.
GetMag();
490 chi_i_vector.TransformTo(CS);
492 chi_i_vector /= chi_i_vector.
GetMag();
493 const double chi_i =
Angle(chi_i_vector, horizontalWithinSDP);
509 if (
abs(max_t_i - min_t_i) < fMinimumTimeExtension)
515 FdAxisFinder::MinuitFitFunc(
int& ,
double* ,
double& f,
521 unsigned int ndof = 0;
523 const double& chi_0 = par[0];
524 const double& t_0 = par[1];
525 const double& r_p = par[2];
529 det::Detector::GetInstance().GetFDetector().GetEye(*fCurEye).GetEyeCoordinateSystem();
530 const double sdpTheta =
fSDP.GetTheta(eyeCS);
531 const int eyeID = fCurEye->GetId();
537 const int telID = iter->GetTelescopeId();
541 const double chi_i = pixrec.
GetChi_i();
543 const double t_expected = timeFitModel.
GetTimeAtAperture(t_0, r_p, chi_0, chi_i, sdpTheta, eyeID, telID);
544 const double tmp = t_i - t_expected;
546 chisq += tmp*tmp / (t_i_Err * t_i_Err);
557 FdAxisFinder::MinuitFitFuncLaser(
int& ,
double* ,
double& f,
563 unsigned int ndof = 0;
565 const double& chi_0 = par[0];
566 const double& t_0 = par[1];
574 det::Detector::GetInstance().GetSiteCoordinateSystem();
581 det::Detector::GetInstance().GetFDetector().GetEye(*fCurEye).GetPosition();
589 Point clf(0,0,0, clfCs);
593 Point xlf(0,0,0, xlfCs);
605 Vector vertical_eye(0,0,1, EyeCS);
606 Vector eye_LaserFacility = LaserFacility - ThisEye;
611 horizontalInSDP /= horizontalInSDP.
GetR(EyeCS);
614 Vector LaserOrientation1(rot1 * horizontalInSDP);
615 LaserOrientation1 /= LaserOrientation1.
GetR(EyeCS);
618 Vector newSDP =
Cross(eye_LaserFacility, LaserOrientation1);
625 horizontalInSDP =
Cross(
fSDP, vertical_eye);
626 horizontalInSDP /= horizontalInSDP.GetR(EyeCS);
629 Vector LaserOrientation(rot2 * horizontalInSDP);
630 LaserOrientation /= LaserOrientation.
GetR(EyeCS);
632 const double beta =
Angle(eye_LaserFacility, LaserOrientation);
634 r_p = eye_LaserFacility.
GetR(EyeCS) * sin(beta);
640 det::Detector::GetInstance().GetFDetector().GetEye(*fCurEye).GetEyeCoordinateSystem();
641 double sdpTheta =
fSDP.GetTheta(eyeCS);
642 int eyeID = fCurEye->GetId();
648 const int telID = iter->GetTelescopeId();
652 const double chi_i = pixrec.
GetChi_i();
654 const double t_expected = timeFitModel.
GetTimeAtAperture(t_0, r_p, chi_0, chi_i, sdpTheta, eyeID, telID);
655 const double tmp = t_i - t_expected;
657 chisq += tmp*tmp / (t_i_Err * t_i_Err);
668 FdAxisFinder::Finish()
681 det::Detector::GetInstance().GetFDetector().GetEye(eye).GetEyeCoordinateSystem();
683 int eyeID = eye.
GetId();
684 double sdpTheta =
fSDP.GetTheta(eyeCS);
699 const double t_expected = timeFitModel.
GetTimeAtAperture(fT0First, fRpFirst, fChi0First, chi_i, sdpTheta, eyeID, telID);
701 const double tmp = t_i - t_expected;
702 const double time_residue = tmp / (t_i_Err) ;
725 double m[3][4] = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
736 const Pixel& pixel = *iter;
745 const double chimed = 0.5 * (chimin + chimax);
750 const Pixel& pixel = *iter;
755 const double x = pixrec.
GetChi_i() - chimed;
762 m[0][2] += weight*x*x*0.5;
763 m[0][3] += weight*t_i;
765 m[1][1] += weight*x*x;
766 m[1][2] += 0.5*weight*x*x*x;
767 m[1][3] += weight*t_i*x;
769 m[2][1] += weight*x*x*x;
770 m[2][2] += 0.5*weight*x*x*x*x;
771 m[2][3] += weight*t_i*x*x;
775 for (
int k = 0; k < 2; ++k)
776 for (
int i = k+1; i < 3; ++i) {
777 const double temp = m[i][k]/m[k][k];
778 for (
int j = 0; j < 4; ++j)
779 m[i][j] -= temp * m[k][j];
783 const double a2 = m[2][3]/m[2][2];
784 const double a1 = (m[1][3] - m[1][2]*a2)/m[1][1];
785 const double a0 = (m[0][3] - m[0][1]*a1 - m[0][2]*a2)/m[0][0];
786 fChi0First = chimed + 2*atan(-a2/a1);
788 fT0First = a0 - 2*a2*a1*a1/(a1*a1+a2*a2);
791 cout <<
"First Guess: Chi0 "<< fChi0First/
degree <<
" Rp "
792 << fRpFirst <<
" T0 " << fT0First << endl;
805 int ReadmittedPixels = 0;
807 det::Detector::GetInstance().GetFDetector().GetEye(eye).GetEyeCoordinateSystem();
809 int eyeID = eye.
GetId();
810 double sdpTheta =
fSDP.GetTheta(eyeCS);
820 const unsigned int pixel_id = evtpixel.
GetId();
824 bool timefit_pixel =
false;
827 if (pixel_id == iter->GetId()) {
828 timefit_pixel =
true;
837 const double chi_i = pixrec.
GetChi_i();
842 double t_expected = timeFitModel.
GetTimeAtAperture(fT0,
fRp, fChi0, chi_i, sdpTheta, eyeID, telID);
843 double tmp = t_i - t_expected;
844 double time_residue = tmp / (t_i_Err);
847 det::Detector::GetInstance().GetFDetector().GetPixel(evtpixel);
854 if ( fabs(time_residue) < 13 && AngleWithSDP < fTolerance) {
858 cout <<
"readmitting pixel " << evtpixel.
GetId() <<
" for the Timing Fit\n";
862 return ReadmittedPixels > 0;
874 int RejectedPixels = 0;
875 double residue_max = 0;
876 int residue_max_pixid = -1;
877 int residue_max_telid = -1;
880 det::Detector::GetInstance().GetFDetector().GetEye(eye).GetEyeCoordinateSystem();
882 int eyeID = eye.
GetId();
883 double sdpTheta =
fSDP.GetTheta(eyeCS);
902 const double t_expected =
905 const double temp = t_i - t_expected;
906 const double time_residue = temp / t_i_Err;
908 cout <<
"time chisq_i: " << (temp * temp ) / (t_i_Err * t_i_Err) <<
" pixelid " << evtpixel.
GetId()
909 <<
" delta t: " << temp <<
" ti error: " << t_i_Err <<
" N Sigmas away: " << time_residue <<
"\n";
911 if ( fabs(time_residue) > residue_max) {
912 residue_max = fabs(time_residue);
913 residue_max_pixid = evtpixel.
GetId();
914 residue_max_telid = telid;
936 const int pixid = evtpixel.
GetId();
937 if (telid == residue_max_telid && pixid == residue_max_pixid) {
946 return RejectedPixels > 0;
955 TMinuit theMinuit(npar);
957 theMinuit.SetPrintLevel(-1);
958 theMinuit.SetFCN(FdAxisFinder::MinuitFitFuncLaser);
960 double arglist[
npar];
965 theMinuit.mnexcm(
"SET ERR", arglist, 1, ierflag);
968 ERROR(
"Minuit SET ERR failed");
970 static double vstart[
npar];
971 static double step[
npar];
974 vstart[0] = fChi0First;
975 vstart[1] = fT0First;
980 theMinuit.mnparm(0,
"Chi0", vstart[0], step[0], 0, 0, ierflag);
981 theMinuit.mnparm(1,
"T0", vstart[1], step[1], 0, 0, ierflag);
985 theMinuit.mnexcm(
"MIGRAD", arglist, 2, ierflag);
988 ERROR(
"Minuit MIGRAD failed");
989 fMinuitFailed =
true;
991 theMinuit.GetParameter(0, fChi0, fChi0Error);
992 theMinuit.GetParameter(1, fT0, fT0Error);
1002 det::Detector::GetInstance().GetSiteCoordinateSystem();
1009 det::Detector::GetInstance().GetFDetector().GetEye(eye).GetPosition();
1017 Point clf(0,0,0, clfCs);
1021 Point xlf(0,0,0, xlfCs);
1027 Point LaserFacility;
1029 LaserFacility = clf;
1031 LaserFacility = xlf;
1033 Vector vertical_eye(0,0,1, EyeCS);
1034 Vector eye_LaserFacility = LaserFacility - ThisEye;
1039 horizontalInSDP /= horizontalInSDP.
GetR(EyeCS);
1041 Vector LaserOrientation1 (rot1* horizontalInSDP);
1042 LaserOrientation1 /= LaserOrientation1.
GetR(EyeCS);
1045 Vector newSDP =
cross(eye_LaserFacility,LaserOrientation1);
1052 horizontalInSDP =
cross(
fSDP,vertical_eye);
1053 horizontalInSDP /= horizontalInSDP.GetR(EyeCS);
1056 Vector LaserOrientation (rot2* horizontalInSDP);
1057 LaserOrientation /= LaserOrientation.
GetR(EyeCS);
1059 double beta =
Angle(eye_LaserFacility, LaserOrientation);
1061 fRp = eye_LaserFacility.
GetR(EyeCS) * sin(beta);
1065 if (fDebuging == 1) {
1066 cout <<
"TO " << fT0 <<
" +/- " << fT0Error <<
"\n"
1067 "ChiO " << fChi0/
degree <<
" +/- " << fChi0Error/
degree <<
"\n"
1071 fChi2 = theMinuit.fAmin;
1078 bool ItIsLaser =
false;
1087 int MaxDiff = 500000;
1088 bool IsCLFLaser =
false;
1089 bool IsXLFLaser =
false;
1092 if (fSelectAndRecLasers == 1) {
1093 if (fabs(GPSNano - 500000000) < MaxDiff)
1095 if (fabs(GPSNano - 700000000) < MaxDiff)
1098 if (IsCLFLaser || IsXLFLaser)
1105 if (fSelectAndRecLasers == 2) {
1106 if (fabs(GPSNano - 250000000) < MaxDiff) {
1111 }
else if (fabs(GPSNano - 350000000) < MaxDiff) {
1126 cout <<
" don't have SEvent" << endl;
1138 if (!sditer->HasRecData())
1141 if (!sditer->HasRecData())
1151 "==============================================\n"
1154 if (fIsCeleste && IsCLFLaser) {
1155 cout <<
" This is a CLF event\n";
1158 if (fIsRamiro && IsXLFLaser) {
1159 cout <<
" This is a XLF event\n";
1162 if (!(fIsCeleste && IsCLFLaser) && !(fIsRamiro && IsXLFLaser)) {
1163 cout <<
" This is NOT a hybrid laser event\n"
1164 " (skipping event)\n";
1169 "==============================================\n"
AxialVector cross(const Vector &l, const Vector &r)
vector cross product
Telescope & GetTelescope(const unsigned int telescopeId, const ComponentSelector::Status status=ComponentSelector::eHasData)
Retrieve Telescope by Id, throw exception if not existent.
Branch GetTopBranch() const
AxialVector Cross(const Vector &l, const Vector &r)
unsigned int GetId() const
PixelIterator RemoveTimeFitPixel(PixelIterator it)
Remove a pixel from the list of Time Fit pixels.
const utl::Vector & GetDirection() const
pointing direction of this pixel
void SetChiZero(const double chiZero, const double error)
StationIterator StationsEnd()
End of all stations.
int GetId() const
Get the station Id.
void SetModel(const Model m)
double Angle(const double theta1, const double phi1, const double theta2, const double phi2)
Description of the electronic channel for the 480 channels of the crate.
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
unsigned int GetTimeOffset() const
Time offset of this Telescope compared to fevt::Header::GetTime [ns].
Fluorescence Detector Eye Event.
PixelIterator PulsedPixelsEnd()
double GetR(const CoordinateSystemPtr &coordinateSystem) const
radius r in spherical coordinates coordinates (distance to origin)
Interface class to access to the SD part of an event.
double GetTheta(const CoordinateSystemPtr &coordinateSystem) const
zenith (theta) angle in spherical coordinates
Class to hold and convert a point in geodetic coordinates.
double GetCentroidError() const
void SetCorePosition(const utl::Point &core)
EyeIterator EyesEnd(const ComponentSelector::Status status)
void SetTimeFitCorrelations(double rRpT0, double rRpChi0, double rChi0T0)
#define INFO(message)
Macro for logging informational messages.
void SetT_i(const double t_i, const double error)
void SetTimeFitCorrelations(const double rRpT0, const double rRpChi0, const double rChi0T0)
void SetRp(const double rp, const double error)
void Init()
Initialise the registry.
Detector description interface for Eye-related data.
boost::filter_iterator< ComponentSelector, AllEyeIterator > EyeIterator
selective Eye iterators
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
PixelIterator PulsedPixelsBegin()
bool IsCandidate() const
Check if the station is a candidate.
A TimeStamp holds GPS second and nanosecond for some event.
boost::indirect_iterator< ConstInternalPixelIterator, const Pixel & > ConstPixelIterator
Const iterator over pixels used in reconstruction.
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
unsigned int GetId() const
Class representing a document branch.
class to hold data at Station level
void MakeFRecShower()
Allocate reconstructed shower info.
Reference ellipsoids for UTM transformations.
PixelIterator SDPPixelsBegin()
Fluorescence Detector Pixel event.
double GetX(const CoordinateSystemPtr &coordinateSystem) const
void SetCoreTime(const utl::TimeStamp &coreTime, const utl::TimeInterval &coreTimeErr)
utl::CoordinateSystemPtr GetEyeCoordinateSystem() const
Returns the Eye Coordinate system.
TelescopeIterator TelescopesEnd()
first available tel of status eHasData (DEPRECATED)
utl::TimeInterval GetT_i() const
void SetAxis(const utl::Vector &axis)
double abs(const SVector< n, T > &v)
bool HasFRecShower() const
Check if reconstructed shower info has been allocated.
evt::ShowerFRecData & GetFRecShower()
Reconstructed shower info for this eye.
EyeIterator EyesBegin(const ComponentSelector::Status status)
void SetChiZero(const double chiZero, const double error)
void SetTimeFitChiSquare(const double tfitChi2, const unsigned int ndof)
Telescope-specific shower reconstruction data.
boost::filter_iterator< ComponentSelector, AllTelescopeIterator > TelescopeIterator
selective Telescope iterators
#define WARNING(message)
Macro for logging warning messages.
void GetData(bool &b) const
Overloads of the GetData member template function.
Top of Fluorescence Detector event hierarchy.
Eye-specific shower reconstruction data.
TelescopeIterator TelescopesBegin()
first available tel of status eHasData (DEPRECATED)
double GetInterval() const
Get the time interval as a double (in Auger base units)
const utl::AxialVector & GetSDP() const
unsigned int GetTelescopeId() const
void MakeRecData()
Make station reconstructed data object.
unsigned int GetNTimeFitPixels() const
Get number of Time Fit pixels.
boost::indirect_iterator< InternalPixelIterator, fevt::Pixel & > PixelIterator
Iterator over pixels used in reconstruction.
double GetY(const CoordinateSystemPtr &coordinateSystem) const
constexpr double kSpeedOfLight
A TimeInterval is used to represent time elapsed between two events.
ResultFlag
Flag returned by module methods to the RunController.
double GetFADCBinSize() const
double GetGPSNanoSecond() const
GPS nanosecond.
void SetTZero(const double tzero, const double error)
StationIterator StationsBegin()
Beginning of all stations.
double GetTotalCharge() const
integrated pulse charge
void SetTimeFitChiSquare(const double tfitChi2, const unsigned int ndof)
PixelIterator TimeFitPixelsEnd()
Interface class to access to Fluorescence reconstruction of a Shower.
void SetRp(const double rp, const double error)
utl::TimeInterval GetT_iError() const
boost::indirect_iterator< InternalStationIterator, Station & > StationIterator
Iterator over all stations.
utl::CoordinateSystemPtr Get(const std::string &id)
Get a well-known Coordinate System.
double GetTimeAtAperture(const double t0, const double rp, const double chi0, const double chi_i, const double thetaSDP, const int eye, const int tel) const
void SetTZero(const double tzero, const double error)
PixelIterator SDPPixelsEnd()
void AddTimeFitPixel(fevt::Pixel &pixel)
add a pixel to the list of Time Fit pixels
double GetNanoSecond() const
Get integer number of nanoseconds past seconds boundary.
double GetCentroid() const
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
PixelIterator TimeFitPixelsBegin()
Point GetPoint(const CoordinateSystemPtr &theCS=CoordinateSystemPtr()) const
Get a cartesian point from an UTMPoint.
#define ERROR(message)
Macro for logging error messages.
Fluorescence Detector Pixel Reconstructed Data.
void SetChi_i(const double chi_i)
PixelRecData & GetRecData()
fevt::EyeRecData & GetRecData()
Reconstructed data for this eye.