1 #ifndef ANALYSIS_RECO_H 2 #define ANALYSIS_RECO_H 4 #include "AnitaEventReconstructor.h" 5 #include "InterferometricMap.h" 6 #include "InterferometryCache.h" 7 #include "CrossCorrelator.h" 8 #include "AnalysisSettings.h" 12 class DeconvolutionMethod;
13 class ResponseManager;
21 class InterferometryCache;
313 Double_t peakPhiDeg, Double_t peakThetaDeg, std::vector<double>& dts);
375 void wavesInCoherent(std::vector<const AnalysisWaveform*>& waves, std::vector<Double_t>& dts, std::vector<TGraphAligned*>& grs);
411 size_t checkWavesAndDtsMatch(std::vector<const AnalysisWaveform*>& waves, std::vector<Double_t>& dts);
426 std::vector<double>& I, std::vector<double>& Q, std::vector<double>& U, std::vector<double>& V);
489 ANALYSIS_SETTING(Int_t, Debug);
504 ANALYSIS_SETTING(Int_t, CoherentDeltaPhi);
521 ANALYSIS_SETTING(Int_t, WhichResponseDir);
536 ANALYSIS_SETTING(Int_t, UseOffAxisDelay);
552 ANALYSIS_SETTING(Int_t, ResponseNPad);
569 ANALYSIS_SETTING(Int_t, NumPeaks);
584 ANALYSIS_SETTING(Double_t, CoherentDtNs);
599 ANALYSIS_SETTING(Double_t, SlopeFitStartFreqGHz);
614 ANALYSIS_SETTING(Double_t, SlopeFitEndFreqGHz);
630 ANALYSIS_SETTING(Double_t, MeanPowerFlagLowFreqGHz);
645 ANALYSIS_SETTING(Double_t, MeanPowerFlagHighFreqGHz);
660 ANALYSIS_SETTING(Int_t, FillChannelInfo);
675 ANALYSIS_SETTING(Int_t, FillSpectrumInfo);
690 ANALYSIS_SETTING(Int_t, FillUnfiltered);
706 ANALYSIS_SETTING(Int_t, InstantaneousStokes);
739 ANALYSIS_SETTING(Int_t, DrawNPeaks)
767 ENUM_ANALYSIS_SETTING(DrawDomain, DrawDomain)
784 ANALYSIS_SETTING(Int_t, DrawCoherent)
801 ANALYSIS_SETTING(Int_t, DrawDedispersed)
818 ANALYSIS_SETTING(Int_t, DrawXPol)
835 ANALYSIS_SETTING(Int_t, DrawXPolDedispersed)
AnalysisWaveform * getCoherentFiltered(AnitaPol::AnitaPol_t pol, Int_t peakInd=0, bool xPol=false)
Coherently summed filtered (un-deconvolved) waveform accessor for external processes. Only works once per event processed as ownership is transferred to the function caller.
const std::vector< int > & phiSectorToCoherentAnts(int peakPhiSector)
Get a list of antenna indices (in a std::vector) for a coherently averaged waveform based from the ph...
void process(const FilteredAnitaEvent *fEv, AnitaEventSummary *sum, NoiseMonitor *noiseMonitor=NULL, TruthAnitaEvent *truth=NULL)
static Int_t directlyInsertGeometry(TString pathToLindasFile, AnitaPol::AnitaPol_t pol)
FilterStrategy * fMinDecoFilter
Minimum filter with an appended deconvolution filter.
std::vector< Double_t > fPhiArrayDeg[AnitaPol::kNotAPol]
Local copies of the antenna azimuth positions (in degrees) from AnitaGeomTool.
FilteredAnitaEvent * fEvMinDeco
Filtered event produced with the fMinDecoFilter.
AnalysisWaveform * fCoherentFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol][AnitaPol::kNotAPol]
Copies of the coherently summed waveforms from the most recently processed event. ...
void directionAndAntennasToDeltaTs(const std::vector< Int_t > &theAnts, AnitaPol::AnitaPol_t pol, Double_t peakPhiDeg, Double_t peakThetaDeg, std::vector< double > &dts)
From a list of antennas, get a set of dts relative to the first antenna.
AnalysisWaveform * getCoherent(AnitaPol::AnitaPol_t pol, Int_t peakInd=0, bool xPol=false)
Coherently summed (un-filtered, un-deconvolved) waveform accessor for external processes. Only works once per event processed as ownership is transferred to the function caller.
std::vector< double > f_dIDeconvolvedFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous I for each source direction for the dedispersed filtered waveform.
std::vector< Double_t > fZArray[AnitaPol::kNotAPol]
Local copies of the antenna z positions (metres) from AnitaGeomTool.
Adu5Pat – The ADU5 Position and Attitude Data.
std::vector< double > f_dQDeconvolvedFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous Q for each source direction for the dedispersed filtered waveform.
CrossCorrelator * fCrossCorr
CrossCorrelator generates the set of cross-correlations required to make an InterferometricMap.
InterferometryCache fDtCache
Caches antenna delays as a function of incoming angle, for quickly making an Interferometric map...
Does the event reconstruction, and produces a summary of it.
std::vector< double > f_dVDeconvolvedFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous V for each source direction for the dedispersed filtered waveform.
void fillPowerFlags(const FilteredAnitaEvent *fEv, AnitaEventSummary::EventFlags &flags)
Double_t relativeOffAxisDelay(AnitaPol::AnitaPol_t pol, Int_t ant1, Int_t ant2, Double_t phiDeg) const
Get the off axis delay between two antennas for a given phi angle.
static void setTriggerInfoFromPeakPhi(const RawAnitaHeader *header, AnitaPol::AnitaPol_t pol, Int_t peakPhiSector, AnitaEventSummary::PointingHypothesis &peak)
Calculate and fill the info the AnitaEventSummary relating the compatibility of the hardware trigger ...
std::vector< double > f_dVCoherentFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous V for each source direction for the coherent filtered waveform.
std::vector< double > f_dUCoherentFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous U for each source direction for the coherent filtered waveform.
InterferometricMap * getZoomMap(AnitaPol::AnitaPol_t pol, UInt_t peakInd=0)
Get a pointer to a finely binned interferometric map stored in memory, once called, you own this InterferometricMap and must delete it.
void reconstructZoom(AnitaPol::AnitaPol_t pol, Int_t peakIndex, Double_t zoomCenterPhiDeg, Double_t zoomCenterThetaDeg, const Adu5Pat *pat=NULL)
produce and store a finely binned interferometric map, (overwrites fineMaps)
A filter strategy defines the sets of filters that are used and provides some introspection abilities...
Double_t getDeltaTExpected(AnitaPol::AnitaPol_t pol, Int_t ant1, Int_t ant2, Double_t phiWave, Double_t thetaWave) const
Get the expected delay between antenna pairs for a given direction.
AnalysisWaveform * getDeconvolved(AnitaPol::AnitaPol_t pol, Int_t peakInd=0, bool xPol=false)
Coherently summed (un-filtered) deconvolved waveform accessor for external processes. Only works once per event processed as ownership is transferred to the function caller.
AnitaEventSummary fSummary
A copy of the AnitaEventSummary from the most recently processed event.
static void fillChannelInfo(const FilteredAnitaEvent *fEv, AnitaEventSummary *sum)
Calculate and fill the numbers for Peng's ChannelInfo object.
Namespace which wraps everything in the library.
AnalysisReco()
Constructor.
FilteredAnitaEvent * fEvMin
Filtered event produced with the fMinFilter.
void reconstruct(AnitaPol::AnitaPol_t pol, const Adu5Pat *pat=NULL)
produce and store the coarsely binned interferometric map, (overwrites coarseMaps) ...
Double_t singleAntennaOffAxisDelay(Double_t deltaPhiDeg) const
const AnitaEventSummary & lastSummary()
AnalysisWaveform * fDeconvolved[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol][AnitaPol::kNotAPol]
Copies of the dedispersed, unfiltered coherently summed waveform from the most recently processed eve...
size_t checkWavesAndDtsMatch(std::vector< const AnalysisWaveform *> &waves, std::vector< Double_t > &dts)
Bounds checking for coherent averaging. Checks input vectors are the same length and zero pads/trims ...
AnalysisWaveform * fCoherent[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol][AnitaPol::kNotAPol]
Copies of the unfiltered, coherently summed waveform from the most recently processed event...
FilteredAnitaEvent * getEvMinDeco()
UInt_t fCurrentEventNumber
Assigned at the start of process(), helpful for printing warning/info messages.
void initializeInternals()
Sets default values and zeros pointers for dynamically initialised heap members.
void fillWaveformInfo(AnitaPol::AnitaPol_t pol, Int_t peakInd, AnitaEventSummary::WaveformInfo &info, const FilteredAnitaEvent *fEv, AnalysisWaveform **waveStore, InterferometricMap *h, NoiseMonitor *noiseMonitor, std::vector< double > &I, std::vector< double > &Q, std::vector< double > &U, std::vector< double > &V)
std::vector< Double_t > fRArray[AnitaPol::kNotAPol]
Local copies of the antenna radial positions (metres) from AnitaGeomTool.
FilterStrategy * fMinFilter
Minimum set of filters (no filers, or just ALFA filters for ANITA-3)
AnalysisWaveform * fDeconvolvedFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol][AnitaPol::kNotAPol]
Copies of the dedispersed, filtered coherently summed waveform from the most recently processed event...
bool fSpawnedCrossCorrelator
Did I initialize a CrossCorrelator for fCrossCorr, or was I given a CrossCorrelator initialized by so...
FilteredAnitaEvent * fEvDeco
FilteredEvent produced by appending a deconvolution filter to the filter strategy passed to process()...
TruthAnitaEvent – The Truth ANITA Event.
virtual ~AnalysisReco()
Destructor.
void drawSummary(TPad *wholePad, AnitaPol::AnitaPol_t pol)
Draw everything interesting onto a TPad.
AnalysisWaveform * coherentlySum(const FilteredAnitaEvent *fEv, AnitaPol::AnitaPol_t pol, const std::vector< Int_t > &theAnts, Double_t peakPhiDeg, Double_t peakThetaDeg, Double_t *biggestPeakToPeak=NULL, double *forceT0=NULL)
Make a coherently summed waveform for a given polarization, set of antennas in a particular direction...
FilteredAnitaEvent * getEvDeco()
void nicelyDeleteInternalFilteredEvents()
does NULL pointer checking deletion on the internally generated FilteredAnitaEvents, fEvMin, fEvMinDeco, fEvDeco
std::vector< double > f_dQCoherentFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous Q for each source direction for the coherent filtered waveform.
A class to take in FiteredAnitaEvents and cross-correlate nearby channels.
std::vector< double > f_dUDeconvolvedFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous U for each source direction for the dedispersed filtered waveform.
InterferometricMap * coarseMaps[AnitaPol::kNotAPol]
The coarsely binned InterferometricMap from the most recently processed event.
Class to cache the deltaTs or parts of their calculation for fast map making.
void chooseAntennasForCoherentlySumming(int coherentDeltaPhi)
Generate a set of antennas to use to generate the coherent waveform.
Int_t fLastCoherentDeltaPhi
Used to figure out if we need to recalculate the cached values related to coherently summing waveform...
void wavesInCoherent(std::vector< const AnalysisWaveform *> &waves, std::vector< Double_t > &dts, std::vector< TGraphAligned *> &grs)
Generate a new set of TGraphAligned such that the peaks are aligned,.
AnalysisWaveform * getDeconvolvedFiltered(AnitaPol::AnitaPol_t pol, Int_t peakInd=0, bool xPol=false)
Coherently summed filtered deconvolved waveform accessor for external processes. Only works once per ...
Common analysis format between UCorrelator and Acclaim.
std::vector< Int_t > fPhiSectorToAnts[NUM_PHI]
Which antennas to use to make coherently summed waveforms depending on the phi-sector of the peak...
InterferometricMap * getMap(AnitaPol::AnitaPol_t pol)
Get a pointer to the coarsely binned interferometric map stored in memory, once called, you own this InterferometricMap and must delete it.
void insertPhotogrammetryGeometry()
Inserts the photogrammetry geometry from AnitaGeomTool into this classes copy of the antenna position...
This class is intended to store all the necessary data about an ANITA event for filtering and analysi...
CrossCorrelator * getCrossCorrelator()
FilteredAnitaEvent * getEvMin()
enum AnitaPol::EAnitaPol AnitaPol_t
Polarisation enumeration.
std::vector< double > f_dICoherentFiltered[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
Instantaneous I for each source direction for the coherent filtered waveform.
Int_t fCurrentRun
Assigned at the start of process(), helpful for printing warning/info messages.
InterferometricMap * fineMaps[AnitaPol::kNotAPol][AnitaEventSummary::maxDirectionsPerPol]
The finely binned InterferometricMap from the most recently processed event.