1 #include <utl/config.h>
7 #include <fwk/CentralConfig.h>
8 #include <fwk/LocalCoordinateSystem.h>
9 #include <fwk/CoordinateSystemRegistry.h>
11 #include <det/Detector.h>
13 #include <mdet/MDetector.h>
14 #include <mdet/Counter.h>
15 #include <mdet/Scintillator.h>
17 #include <evt/Event.h>
18 #include <evt/ShowerSimData.h>
19 #include <evt/ShowerRecData.h>
20 #include <evt/ShowerSRecData.h>
22 #include <mevt/MEvent.h>
23 #include <mevt/Counter.h>
24 #include <mevt/CounterSimData.h>
26 #include <utl/Branch.h>
27 #include <utl/ErrorLogger.h>
28 #include <utl/UTCDateTime.h>
29 #include <utl/TimeStamp.h>
30 #include <utl/CoordinateSystemPtr.h>
31 #include <utl/ReferenceEllipsoid.h>
32 #include <utl/Point.h>
33 #include <utl/Vector.h>
34 #include <utl/UTMPoint.h>
35 #include <utl/Particle.h>
36 #include <utl/AugerUnits.h>
37 #include <utl/MathConstants.h>
38 #include <utl/PhysicalConstants.h>
39 #include <utl/PhysicalFunctions.h>
55 fDetector(&det::Detector::GetInstance()),
56 fMdDetector(&fDetector->GetMDetector()),
57 fReferenceCS(fDetector->GetReferenceCoordinateSystem())
65 const auto& inMdEvent = inEvent.
GetMEvent();
66 auto& outMdEvent = outEvent.GetMDEvent();
76 auto& outMdShower = outMdEvent.GetMdRecShower();
80 outMdShower.SetBetaFixed(inMdShower.IsBetaFixed());
81 outMdShower.SetCoreFixedLdf(inMdShower.IsCoreFixedLdf());
82 outMdShower.SetGeometryReconstructed(inMdShower.IsGeometryReconstructed());
83 outMdShower.SetCoreFixedGeo(inMdShower.IsCoreFixedGeo());
84 outMdShower.SetCurvatureFixed(inMdShower.IsCurvatureFixed());
91 WARNING(
"Distances from the MD counters to the core will not be set because the event was not reconstructed with the MD.");
96 for (
auto inCounter = inMdEvent.CountersBegin(); inCounter != inMdEvent.CountersEnd(); ++inCounter)
97 outMdEvent.AddCounter(
MakeCounter(*inCounter, recShowerPlaneCS));
102 for (
auto inCounter = inMdEvent.CountersBegin(); inCounter != inMdEvent.CountersEnd(); ++inCounter) {
103 if (inCounter->HasSimData())
104 outMdEvent.AddSimCounter(
MakeSimCounter(*inCounter, showerPlaneCS));
115 const auto& inMdEvent = inEvent.
GetMEvent();
117 outMdEvent.SetNumberOfCandidates(nCandidates);
121 if (inMdShower.HasMLDF()) {
122 outMdEvent.SetRecLevel(eHasMdLDF);
124 }
else if (nCandidates > 0) {
125 outMdEvent.SetRecLevel(eHasTriggeredMdStations);
127 outMdEvent.SetRecLevel(eNoMdEvent);
139 const auto& axis1 = inMdShower.
GetAxis();
140 TVector3 axis2(0,0,1);
141 axis2.SetTheta(axis1.GetTheta(coreCS));
142 axis2.SetPhi(axis1.GetPhi(coreCS));
143 outMdShower.SetAxisCoreCS(axis2);
148 outMdShower.SetAzimuthError(inMdShower.
GetPhiError());
156 outMdShower.SetCurvatureRadius(radius, dradius);
160 const auto& ldfTable = inMdShower.
GetMLDF();
162 std::vector<double> rhos;
164 std::vector<double> values;
166 for (
size_t i = 0; i < n; i += 2) {
167 const double x = ldfTable[i].X();
168 const double y = ldfTable[i].Y();
174 outMdShower.SetTabulatedValues(rhos, values);
199 outMdShower.SetCoreNorthingEastingCorrelation(inMdShower.
GetCorrelationXY());
208 MdRecCounter outCounter;
211 const unsigned int counterId = inCounter.
GetId();
212 outCounter.SetId(counterId);
217 outCounter.SetSdPartnerId(detCounter.GetAssociatedTankId());
221 outCounter.SetCandidate();
223 outCounter.SetSilent();
225 outCounter.SetRejected();
229 const bool recDataFlag = inCounter.
HasRecData();
230 outCounter.SetRecDataFlag(recDataFlag);
237 if (detCounter.IsDense())
238 outCounter.SetIsDense();
272 if (outCounter.IsADCCalibratedLG()) {
284 if (outCounter.IsADCCalibratedHG()) {
295 const auto& counterPosition = detCounter.GetPosition();
299 if (recShowerPlaneCS) {
300 const double rho = counterPosition.GetRho(recShowerPlaneCS) /
m;
301 const double azimuth = counterPosition.GetPhi(recShowerPlaneCS) /
utl::deg;
302 const double delta = counterPosition.GetZ(recShowerPlaneCS) /
m;
303 outCounter.SetSPDistance(rho, 0);
304 outCounter.SetSPAzimuth(azimuth, 0);
305 outCounter.SetSPDelta(delta, 0);
310 outCounter.SetT50(signalT50.GetGPSSecond(), signalT50.GetGPSNanoSecond());
317 const unsigned int moduleId = inModule->GetId();
318 const MdRecModule outModule =
MakeModule(*inModule, detCounter.GetModule(moduleId), recShowerPlaneCS);
319 outCounter.AddModule(outModule);
330 MdRecModule outModule;
331 const unsigned int moduleId = inModule.
GetId();
332 outModule.SetId(moduleId);
336 outModule.SetCandidate();
338 outModule.SetSilent();
340 outModule.SetRejected();
348 const auto& inRecData = inModule.
GetRecData();
352 outModule.SetSegmentation(inRecData.GetSegmentation());
354 double sampleNanos = 0;
355 int numberOfSamples = 0;
357 if (!mdetModule.
IsSiPM()) {
365 outModule.SetSampleTime(sampleNanos);
366 outModule.SetNumberOfSamples(numberOfSamples);
370 if (inRecData.HasChannelsOn()) {
371 const auto& inChannelsOn = inRecData.GetChannelsOn();
372 outModule.GetChannelsOn().assign(inChannelsOn.Begin(), inChannelsOn.End());
373 outModule.SetChannelsOnBinning(inChannelsOn.GetBinning());
376 if (inRecData.HasChannelsOnStartTime()) {
377 const auto& t = inRecData.GetChannelsOnStartTime();
378 outModule.SetChannelsOnStartTime(t.GetGPSSecond(), t.GetGPSNanoSecond());
382 outModule.GetPatternMatchTimes() = inRecData.GetPatternMatchTimes();
385 if (inRecData.HasMeanMuonsVsTime()) {
386 const auto& inMeanMuonsVsTime = inRecData.GetMeanMuonsVsTime();
387 outModule.SetMeanMuonsVsTime(inMeanMuonsVsTime.Begin(), inMeanMuonsVsTime.End());
389 if (inRecData.HasNumberOfMuonsVsTime()) {
390 const auto& inNumberOfMuonsVsTime = inRecData.GetNumberOfMuonsVsTime();
391 outModule.SetNumberOfMuonsVsTime(inNumberOfMuonsVsTime.Begin(), inNumberOfMuonsVsTime.End());
395 outModule.SetNumberOfEstimatedMuons(inRecData.GetNumberOfEstimatedMuons());
396 outModule.SetNumberOfMuonsErrorHigh(inRecData.GetNumberOfMuonsErrorHigh());
397 outModule.SetNumberOfMuonsErrorLow(inRecData.GetNumberOfMuonsErrorLow());
398 outModule.SetNumberOfMuonsLowLimit(inRecData.GetNumberOfMuonsLowLimit());
400 outModule.SetMeanMuons(inRecData.GetMeanMuons());
401 outModule.SetMeanMuonsErrorHigh(inRecData.GetMeanMuonsErrorHigh());
402 outModule.SetMeanMuonsErrorLow(inRecData.GetMeanMuonsErrorLow());
403 outModule.SetMeanMuonsLowLimit(inRecData.GetMeanMuonsLowLimit());
405 outModule.SetMuonDensity(inRecData.GetMuonDensity());
406 outModule.SetMuonDensityErrorHigh(inRecData.GetMuonDensityErrorHigh());
407 outModule.SetMuonDensityErrorLow(inRecData.GetMuonDensityErrorLow());
409 outModule.SetMeanMuonDensity(inRecData.GetMeanMuonDensity());
410 outModule.SetMeanMuonDensityErrorHigh(inRecData.GetMeanMuonDensityErrorHigh());
411 outModule.SetMeanMuonDensityErrorLow(inRecData.GetMeanMuonDensityErrorLow());
413 outModule.SetLDFResidual(inRecData.GetLDFResidual());
416 const auto& modulePosition = mdetModule.
GetPosition();
420 if (recShowerPlaneCS) {
421 const double rho = modulePosition.
GetRho(recShowerPlaneCS) /
m;
422 const double azimuth = modulePosition.GetPhi(recShowerPlaneCS) /
utl::deg;
423 const double delta = modulePosition.GetZ(recShowerPlaneCS) /
m;
424 outModule.SetSPDistance(rho, 0);
425 outModule.SetSPAzimuth(azimuth, 0);
426 outModule.SetSPDelta(delta, 0);
433 outModule.SetDynodeTrace(std::vector<unsigned short int>(t.Begin(), t.End()));
439 outModule.SetIntegratorATrace(std::vector<unsigned short int>(t.Begin(), t.End()));
444 outModule.SetIntegratorBTrace(std::vector<unsigned short int>(t.Begin(), t.End()));
450 if (inRecData.IsADCCalibratedLG()) {
451 outModule.SetMeanChargeMuonLG(inRecData.GetMeanChargeMuonLG());
452 outModule.SetStdDevChargeMuonLG(inRecData.GetStdDevChargeMuonLG());
454 outModule.SetNumberOfEstimatedMuonsADCLG(inRecData.GetNumberOfEstimatedMuonsADCLG());
455 outModule.SetNumberOfMuonsADCErrorHighLG(inRecData.GetNumberOfMuonsADCErrorHighLG());
456 outModule.SetNumberOfMuonsADCErrorLowLG(inRecData.GetNumberOfMuonsADCErrorLowLG());
458 outModule.SetMuonDensityLG(inRecData.GetMuonDensityLG());
459 outModule.SetMuonDensityErrorHighLG(inRecData.GetMuonDensityErrorHighLG());
460 outModule.SetMuonDensityErrorLowLG(inRecData.GetMuonDensityErrorLowLG());
461 outModule.SetTotalChargeLG(inRecData.GetTotalChargeLG());
464 if (inRecData.IsADCCalibratedHG()) {
465 outModule.SetMeanChargeMuonHG(inRecData.GetMeanChargeMuonHG());
466 outModule.SetStdDevChargeMuonHG(inRecData.GetStdDevChargeMuonHG());
468 outModule.SetNumberOfEstimatedMuonsADCHG(inRecData.GetNumberOfEstimatedMuonsADCHG());
469 outModule.SetNumberOfMuonsADCErrorHighHG(inRecData.GetNumberOfMuonsADCErrorHighHG());
470 outModule.SetNumberOfMuonsADCErrorLowHG(inRecData.GetNumberOfMuonsADCErrorLowHG());
472 outModule.SetMuonDensityHG(inRecData.GetMuonDensityHG());
473 outModule.SetMuonDensityErrorHighHG(inRecData.GetMuonDensityErrorHighHG());
474 outModule.SetMuonDensityErrorLowHG(inRecData.GetMuonDensityErrorLowHG());
475 outModule.SetTotalChargeHG(inRecData.GetTotalChargeHG());
480 const auto outChannel =
MakeChannel(*inChannel, mdetModule);
481 outModule.AddChannel(outChannel);
492 MdRecChannel outChannel;
495 const unsigned int channelId = inChannel.
GetId();
496 outChannel.SetId(channelId);
498 outChannel.SetScintillatorId(scintillatorId);
500 outChannel.SetPixelId(pixelId);
503 outChannel.SetMask(inChannel.
IsMasked());
507 const auto& trace = inChannel.
GetTrace();
508 outChannel.SetNumberOfBins(trace.GetSize());
513 outChannel.SetTraceStartTime(t.GetGPSSecond(), t.GetGPSNanoSecond());
518 outChannel.SetTrace(std::vector<char>(trace.Begin(), trace.End()));
524 const auto& channelRecData = inChannel.
GetRecData();
526 outChannel.GetPatternMatchTimes().assign(channelRecData.PatternMatchBinsBegin(), channelRecData.PatternMatchBinsEnd());
537 MdSimCounter outCounter;
542 const auto& cSimData = inCounter.
GetSimData();
544 outCounter.SetId(inCounter.
GetId());
545 outCounter.SetSdPartnerId(detCounter.GetAssociatedTankId());
546 outCounter.SetInsideRMinFlag(cSimData.IsInsideMinRadius());
548 outCounter.SetSPDelta(sPos.GetZ(showerPlaneCS) /
m);
549 outCounter.SetSPDistance(sPos.GetRho(showerPlaneCS) /
m);
550 outCounter.SetSPAzimuth(sPos.GetPhi(showerPlaneCS) /
utl::deg);
553 const int mId = mIt->GetId();
554 const auto& detModule = detCounter.GetModule(mId);
557 const double areaPerModule = mIt->HasRecData() ?
558 mIt->GetRecData().GetActiveArea() : detModule.GetArea();
560 outCounter.SetAreaByModule(areaPerModule, mIt->GetId());
562 for (
auto chIt = mIt->ChannelsBegin(); chIt != mIt->ChannelsEnd(); ++chIt) {
563 const int chId = chIt->GetId();
564 const int scId = detModule.ChannelToScintillatorId(chId);
565 if (mIt->HasScintillator(scId)) {
566 const auto& scintillator = mIt->GetScintillator(scId);
567 if (scintillator.HasSimData()) {
569 MdSimScintillator myscint;
570 const auto& scintSimData = scintillator.GetSimData();
571 const int injmu = scintSimData.GetNumberOfInjectedMuons();
572 const int ccmu = scintSimData.GetNumberOfCornerClippingMuons();
573 const int electrons = scintSimData.GetNumberOfElectrons();
574 myscint.SetNumberOfInjectedMuons(injmu);
575 myscint.SetNumberOfCornerClippingMuons(ccmu);
576 myscint.SetNumberOfElectrons(electrons);
578 myscint.SetChannelId(chId);
579 myscint.SetPixelId(detModule.ChannelToPixelId(chId));
580 myscint.SetModuleId(mId);
582 for (
auto pIt = scintSimData.SPEPulsesBegin(); pIt != scintSimData.SPEPulsesEnd(); ++pIt) {
583 myscint.AddSPEPulse(pIt->fMu, pIt->fSigma, pIt->fAmplitude, pIt->fDestPixelId);
585 for (
auto pIt = scintSimData.PEPulsesBegin(); pIt != scintSimData.PEPulsesEnd(); ++pIt) {
586 myscint.AddPEPulse(pIt->fT0, pIt->fAmplitude1, pIt->fAmplitude2, pIt->fAmplitude3, pIt->fRiseTime,
587 pIt->fFallTime1, pIt->fFallTime2, pIt->fFallTime3, pIt->fDestPixelId);
590 double sumKinEnergy = 0;
591 double sumKinEnergyMuons = 0;
594 for (
auto pIt = scintSimData.ParticlesBegin(); pIt != scintSimData.ParticlesEnd(); ++pIt) {
595 const double kinEnergy = pIt->GetKineticEnergy();
596 sumKinEnergy += kinEnergy;
597 const auto pType = pIt->GetType();
600 sumKinEnergyMuons += kinEnergy;
602 (pTypes.empty() ||
utl::Is(pType).In(pTypes))) {
608 myscint.SetKineticEnergy(sumKinEnergy);
609 myscint.SetMuonKineticEnergy(sumKinEnergyMuons);
611 myscint.SetEnergyDeposit(scintSimData.GetEnergyDeposit());
612 myscint.SetEnergyDepositMuons(scintSimData.GetEnergyDepositMuons());
614 outCounter.AddSimScintillator(myscint);
637 const double theta = rAxis.GetTheta(coreCS);
638 const double phi = rAxis.GetPhi(coreCS);
640 const auto& recShowerPlaneCS =
642 return recShowerPlaneCS;
651 const auto& detModule = detCounter.
GetModule(mId);
653 const auto& detScint = detModule.GetScintillator(scintId);
657 const auto pc = pos.GetCoordinates(counterCS);
658 const TVector3 positionStationCS(pc.get<0>(), pc.get<1>(), pc.get<2>());
659 const auto pm = pos.GetCoordinates(moduleCS);
660 const TVector3 positionModuleCS(pm.get<0>(), pm.get<1>(), pm.get<2>());
661 const auto ps = pos.GetCoordinates(scintCS);
662 const TVector3 positionScintillatorCS(ps.get<0>(), ps.get<1>(), ps.get<2>());
664 const double zenithStationCS = direction.
GetTheta(counterCS);
665 const double azimuthStationCS = direction.
GetPhi(counterCS);
666 const double azimuthModuleCS = direction.
GetPhi(moduleCS);
667 const double azimuthScintCS = direction.
GetPhi(scintCS);
674 myScint.AddParticle(zenithStationCS, azimuthStationCS,
675 azimuthModuleCS, azimuthScintCS,
676 positionStationCS, positionModuleCS, positionScintillatorCS,
677 kineticEnergy, source, type);
double GetTimeResidualSpread() const
double GetReferenceDistance() const
bool IsCandidate() const
The muon counter status.
double GetNumberOfMuonsErrorHighHG() const
double GetNumberOfMuonsErrorHighLG() const
unsigned int GetNPoints() const
void SetLdfReconstructed(bool flag=true)
const utl::TimeStamp & GetCoreTime() const
const Module & GetModule(const int mId) const
Retrieve by id a constant module.
utl::TimeStamp GetTraceStartTime() const
Return the timestamp associated with the start of the trace. The timestamp of the first bin of the tr...
mevt::MEvent & GetMEvent()
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
double GetLDFResidual() const
The LDF residual of the counter is calculated as the sum of the estimated muons of the associated mod...
double GetMeanMuonsLowLimit() const
IsProxy< T > Is(const T &x)
double GetThetaPhiCorrelation() const
bool HasIntegratorBTrace() const
Base class for all exceptions used in the auger offline code.
double GetNumberOfEstimatedMuonsLG() const
The number of estimated muons with the ADC is calculated as the sum of the estimated muons of the ass...
const utl::Vector & GetReferenceAxis() const
**void SetActiveArea(const double area)
bool HasRecData() const
Counter is flagged has having reconstructed data if at least one of its associated modules has recons...
Counter level event data.
bool HasRecShower() const
bool HasDynodeTrace() const
Describes a particle for Simulation.
double GetAngleChi2() const
double GetTheta(const CoordinateSystemPtr &coordinateSystem) const
zenith (theta) angle in spherical coordinates
double GetT50Error() const
double GetMeanMuonDensityErrorLow() const
ShowerRecData & GetRecShower()
double GetPhiError() const
bool HasT50() const
The median of the arrival time of muons in GPS sec, ns All modules associated to the counter are cons...
double GetMeanMuonDensityErrorHigh() const
bool HasSimShower() const
utl::CoordinateSystemPtr GetLocalCoordinateSystem() const
Local system based on position and configured rotations.
const utl::Point & GetReferenceCorePosition() const
ChannelRecData & GetRecData()
double GetMdSdAngle() const
int ChannelToPixelId(const int cId) const
double GetActiveAreaLG() const
double GetNumberOfMuonsErrorHigh() const
utl::Point GetPosition() const
bool IsADCCalibratedLG() const
Check if the counter ADC LG channel is calibrated.
void AddParticle(const utl::Particle &p, const mdet::Counter &c, const int moduleId, const int scintId, MdSimScintillator &ms) const
bool IsRejected() const
Check if the counter is rejected.
Base class for exceptions trying to access non-existing components.
const otoa::Config & fConfig
MD2ADST(const otoa::Config &config)
double GetMeanMuonDensity() const
double GetMuonDensityHG() const
bool IsSilent() const
Check if the counter is silent.
double GetMuonDensityErrorLowLG() const
MdRecChannel MakeChannel(const mevt::Channel &c, const mdet::Module &m) const
double GetMuonDensityErrorHighLG() const
double GetActiveAreaHG() const
const utl::Vector & GetAxis() const
unsigned int GetAngleNdof() const
int ChannelToScintillatorId(const int cId) const
const utl::Vector & GetCoreError() const
double GetActiveArea() const
utl::TraceUSI & GetDynodeTrace()
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
double GetNMuRefSystematics() const
double GetMuonDensity() const
The density measured by a counter is the calculated as the number of estimated muons over the active ...
double GetTimeResidual() const
Residual of geometry fit.
double GetMeanMuons() const
bool IsADCCalibratedHG() const
Check if the counter ADC HG channel is calibrated.
double GetMLDFNdof() const
double GetTimeResidualMean() const
void FillMEvent(const evt::Event &e, MDEvent &me) const
double GetMuonDensityErrorLowHG() const
double GetX(const CoordinateSystemPtr &coordinateSystem) const
utl::CoordinateSystemPtr GetShowerPlaneCS(const evt::ShowerMRecData &sr) const
const mdet::MDetector * fMdDetector
double GetNumberOfMuonsLowLimit() const
The lower limit to the number of muons in a counter.
const utl::TabulatedFunctionErrors & GetMLDF() const
double GetMeanSampleRatePeriod() const
Mean electronic sample rate period.
Converts an Offline event to ADST.
ChannelConstIterator ChannelsBegin() const
void FillRecShower(const evt::ShowerMRecData &sr, MdRecShower &mr) const
ShowerSimData & GetSimShower()
MdSimCounter MakeSimCounter(const mevt::Counter &c, const utl::CoordinateSystemPtr &showerPlaneCS) const
bool HasTraceStartTime() const
double GetMuonDensityErrorHighHG() const
double GetMeanSampleRatePeriod() const
Mean electronic sample rate period.
unsigned int GetNumberOfChannelsOn() const
void Convert(const evt::Event &inEvent, RecEvent &outEvent) const
double GetNumberOfMuonsErrorLowHG() const
bool StoreMDInjectedParticles() const
#define WARNING(message)
Macro for logging warning messages.
const utl::Point & GetCorePosition() const
utl::TraceUSI & GetIntegratorATrace()
bool HasMRecShower() const
bool HasIntegratorATrace() const
double GetCurvature() const
unsigned int GetBufferLength() const
Number of bins of the buffer.
const FrontEnd & GetFrontEnd() const
ModuleConstIterator ModulesBegin() const
Root detector of the muon detector hierarchy.
double GetRho(const CoordinateSystemPtr &coordinateSystem) const
radius r in cylindrical coordinates (distance to z axis)
double GetMLDFChi2() const
double GetMuonDensityErrorHigh() const
double GetNumberOfMuonsErrorLow() const
double GetKineticEnergy() const
Get kinetic energy of the particle.
utl::CoordinateSystemPtr fReferenceCS
ShowerMRecData & GetMRecShower()
void SetBinning(const double binning)
double GetY(const CoordinateSystemPtr &coordinateSystem) const
ChannelConstIterator ChannelsEnd() const
double GetMeanMuonsErrorLow() const
int GetId() const
The id of the counter.
ModuleConstIterator ModulesEnd() const
unsigned long GetGPSSecond() const
GPS second.
double GetGPSNanoSecond() const
GPS nanosecond.
double GetPlaneFrontDelay() const
Delay of the couner wrt to a plane front oriented with the reconstructed shower axis.
ModuleRecData & GetRecData()
Source GetSource() const
Source of the particle (eg. shower or background)
double GetCurvatureError() const
const FrontEndSiPM & GetFrontEndSiPM() const
double GetNumberOfEstimatedMuons() const
The number of estimated muons of the counter is calculated as the sum of the estimated muons of the a...
Channel level event data.
bool StoreMDTraces() const
utl::TimeStamp GetSignalT50() const
const std::set< int > & StoreMDParticleTypes() const
double GetMeanMuonsErrorHigh() const
const Point & GetPosition() const
Position of the particle.
double GetNMuRefError() const
MdRecCounter MakeCounter(const mevt::Counter &c, const utl::CoordinateSystemPtr &cs) const
MdRecModule MakeModule(const mevt::Module &em, const mdet::Module &dm, const utl::CoordinateSystemPtr &cs) const
double GetMuonDensityLG() const
Interface class to access to the Muon Reconstruction of a Shower.
double GetThetaError() const
TVector3 ToTVector3(const T &v, const utl::CoordinateSystemPtr &cs, const double unit=1)
double GetMuonDensityErrorLow() const
utl::TraceUSI & GetIntegratorBTrace()
const Counter & GetCounter(int id) const
Retrieve Counter by id.
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
CounterSimData & GetSimData()
#define ERROR(message)
Macro for logging error messages.
const Vector & GetDirection() const
Unit vector giving particle direction.
double GetNumberOfEstimatedMuonsHG() const
unsigned int GetNumberOfCandidateCounters() const
double GetT502SdStart() const
Nanoseconds between the MD t50 and the SD signal start time (md t50-sd start)
const std::string & GetMessage() const
Retrieve the message from the exception.
double GetBetaSystematics() const
double GetNumberOfMuonsErrorLowLG() const
utl::CoordinateSystemPtr GetShowerCoordinateSystem() const
double GetBetaError() const
double GetMLDFLikelihood() const
double GetCorrelationXY() const
unsigned int GetBufferLength() const
Number of bins of the buffer.