SEvent/Station.h
Go to the documentation of this file.
1 #ifndef _sevt_Station_h_
2 #define _sevt_Station_h_
3 
4 #include <utl/ShadowPtr.h>
5 #include <utl/AugerException.h>
6 #include <utl/MultiTrace.h>
7 #include <utl/TimeStamp.h>
8 #include <utl/Trace.h>
9 #include <utl/ClassHelpers.h>
10 
11 #include <sevt/Scintillator.h>
12 #include <sevt/StationConstants.h>
13 #include <sevt/SignalSegment.h>
14 #include <sevt/StationSimData.h>
15 #include <sevt/StationRecData.h>
16 #include <sevt/StationTriggerData.h>
17 #include <sevt/StationCalibData.h>
18 #include <sevt/StationGPSData.h>
19 #include <sevt/PMT.h>
20 #include <sevt/SmallPMTData.h>
21 
22 #include <sdet/PMTConstants.h>
23 
24 #include <boost/iterator/indirect_iterator.hpp>
25 #include <boost/iterator/filter_iterator.hpp>
26 #include <vector>
27 #include <utility>
28 
29 
30 namespace sevt {
31 
32  class SEvent;
33 
34 
41  class Station {
42 
43  private:
44  typedef std::vector<PMT*>::iterator InternalPMTPtrIterator;
45  typedef std::vector<PMT*>::const_iterator InternalConstPMTPtrIterator;
46 
48  typedef boost::indirect_iterator<InternalPMTPtrIterator, PMT&> InternalPMTIterator;
49 
51  typedef boost::indirect_iterator<InternalConstPMTPtrIterator, const PMT&> InternalConstPMTIterator;
52 
53  public:
54  Station(const Station& station) { *this = station; }
55  Station& operator=(const Station& station);
56 
58 
61 
63  int GetId() const { return fId; }
64 
66 
67  bool HasPMT(const unsigned int pmtId) const;
69 
70  void MakePMT(const unsigned int pmtId, const int stationId,
72 
74  PMT& GetPMT(const unsigned int pmtId) { return OFFLINE_CAST_CONST_METHOD(GetPMT(pmtId)); }
75  const PMT& GetPMT(const unsigned int pmtId) const;
76 
78  const PMT& GetScintillatorPMT() const;
79 
81  const PMT& GetSmallPMT() const;
82 
84  unsigned int GetNPMTs(const sdet::PMTConstants::PMTType type = sdet::PMTConstants::eAnyType) const;
85 
87  typedef boost::filter_iterator<PMTFilter, InternalPMTIterator> PMTIterator;
88 
90  typedef boost::filter_iterator<PMTFilter, InternalConstPMTIterator> ConstPMTIterator;
91 
94  { return PMTIterator(PMTFilter(type), fPMTs.begin(), fPMTs.end()); }
95 
98  { return PMTIterator(PMTFilter(type), fPMTs.end(), fPMTs.end()); }
99 
102  { return ConstPMTIterator(PMTFilter(type), fPMTs.begin(), fPMTs.end()); }
103 
106  { return ConstPMTIterator(PMTFilter(type), fPMTs.end(), fPMTs.end()); }
107 
110 
112 
113 
115  utl::TimeStamp GetTraceStartTime() const { return fTraceStartTime; }
116 
118 
119  void SetTraceStartTime(const utl::TimeStamp& Time) { fTraceStartTime = Time; }
120 
123  { return fTrace.GetTrace(source); }
125  { return fTrace.GetTrace(source); }
130  { return fTrace.HasLabel(source); }
131 
139 
141 
144  const sevt::StationSimData& GetSimData() const { return *fSimData; }
146  void MakeSimData();
148  bool HasSimData() const { return bool(fSimData); }
149 
152  const sevt::StationRecData& GetRecData() const { return *fRecData; }
154  void MakeRecData();
156  bool HasRecData() const { return bool(fRecData); }
157 
162  void MakeTriggerData();
164  bool HasTriggerData() const { return bool(fTriggerData); }
165 
168  const sevt::StationCalibData& GetCalibData() const { return *fCalibData; }
170  void MakeCalibData();
172  bool HasCalibData() const { return bool(fCalibData); }
173 
176  const sevt::StationGPSData& GetGPSData() const { return *fGPSData; }
178  void MakeGPSData();
180  bool HasGPSData() const { return bool(fGPSData); }
182 
184 
191 
193  void SetCandidate();
195  void SetRejected(const int reason);
197  void SetSilent();
198 
199  int GetRejectionStatus() const { return fRejectionStatus; }
200  //void ClearRejectionStatus() { fRejectionStatus = StationConstants::eNoRejection; }
201 
202  // T2Life functions
203  int GetT2Life() const { return fT2Life; }
205  void SetT2Life(const int t) { fT2Life = t; }
206 
207  bool IsT2Life() const { return fT2Life > 0; }
208  bool IsT2Life120() const { return fT2Life == 2; }
209 
210  // BottomUp delay functions
211  double GetBottomUpResidual() const { return fBottomUpResidual; }
212  void SetBottomUpResidual(const double d) { fBottomUpResidual = d; }
213 
217  bool IsSmallPMTSaturation() const { return fSmallPMTSaturation; }
218 
219  void SetLowGainSaturation(const bool sat = true) { fSaturation[sdet::PMTConstants::eLowGain] = sat; }
220  void SetHighGainSaturation(const bool sat = true) { fSaturation[sdet::PMTConstants::eHighGain] = sat; }
221  void SetSmallPMTSaturation(const bool sat = true) { fSmallPMTSaturation = sat; }
223 
225  const SignalSegmentCollection& GetSignals() const { return fSignals; }
226 
227  bool IsUUB() const;
228 
229  bool IsCyclone() const { return fIsCyclone; }
230  void SetIsCyclone(const bool cy = true) { fIsCyclone = cy; }
231 
233  const Scintillator& GetScintillator() const { return *fScintillator; }
234  bool HasScintillator() const { return bool(fScintillator); }
235 
237  const SmallPMTData& GetSmallPMTData() const { return *fSmallPMTData; }
238  bool HasSmallPMTData() const { return bool(fSmallPMTData); }
239 
240  /* Add particle is located in the Station and not StationSimData
241  as it is necessary for particle counting in the WCD and Scintillator
242  to access the IsHit functions for both. The particle list is
243  only stored in StationSimData and is not accessible via the Scintillator
244  or ScintillatorSimData */
245  void AddParticle(const utl::Particle& particle);
246 
247  private:
248  Station(const int stationId);
249  ~Station();
250 
251  int fId = 0;
252  std::vector<PMT*> fPMTs;
262  bool fSmallPMTSaturation = false;
264 
265  // T2Life
266  // 0: not active acc. to T2Life
267  // 1: T2
268  // 2: T2-120
269  int fT2Life = 2;
270 
271  double fBottomUpResidual = 0;
272 
274 
277 
278  bool fIsUUB = false;
279  bool fIsCyclone = false;
280 
281  friend class sevt::SEvent;
282 
283  };
284 
285 
287  public:
288  bool operator()(const Station& station)
289  { return station.IsCandidate(); }
290  };
291 
292 
294  public:
295  bool operator()(const Station& station)
296  { return station.IsSilent(); }
297  };
298 
299 
301  public:
302  RejectedStationFilter(const int statusMask)
303  : fStatusMask(statusMask) { }
304 
305  bool operator()(const Station& station)
306  { return station.GetRejectionStatus() & fStatusMask; }
307 
308  private:
309  int fStatusMask = 0;
310  };
311 
312 }
313 
314 
315 #endif
#define OFFLINE_MAKE_BOTH_ITERATOR_RANGES_ARG(_Iterator_, _ConstIterator_, _NamePrefix_, _Arg_)
Definition: IteratorRange.h:69
utl::ShadowPtr< StationRecData > fRecData
Class to access station level reconstructed data.
bool HasPMT(const unsigned int pmtId) const
Check if a particular PMT object exists.
pointer with built-in initialization, deletion, deep copying
Definition: ShadowPtr.h:163
utl::ShadowPtr< SmallPMTData > fSmallPMTData
std::vector< PMT * >::iterator InternalPMTPtrIterator
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::iterator, LabeledObjectType > Iterator
Definition: MultiObject.h:78
bool operator()(const Station &station)
Station Level Simulated Data
int GetId() const
Get the station Id.
class to hold data at PMT level
Definition: SEvent/PMT.h:28
utl::TimeStamp fTraceStartTime
total (shower and background)
bool HasCalibData() const
Check whether calibration data object exists.
void MakeSimData()
Make station simulated data object.
void SetBottomUpResidual(const double d)
Interface class to access to the SD part of an event.
Definition: SEvent.h:39
Describes a particle for Simulation.
Definition: Particle.h:26
utl::ShadowPtr< StationSimData > fSimData
Station(const Station &station)
PMTIterator PMTsBegin(const sdet::PMTConstants::PMTType type=sdet::PMTConstants::eWaterCherenkovLarge)
begin PMT iterator for read/write
bool HasTriggerData() const
Check whether trigger data object exists.
void SetCandidate()
Set candidate station flag.
const sevt::StationSimData & GetSimData() const
bool fSmallPMTSaturation
bool IsSmallPMTSaturation() const
sevt::StationRecData & GetRecData()
Get station level reconstructed data.
void SetT2Life(const int t)
0 = dead, 1 = 1sec alive, 2 = 120sec alive
void SetTraceStartTime(const utl::TimeStamp &Time)
Set absolute start time of the VEM trace.
SignalSegmentCollection fSignals
const sevt::StationRecData & GetRecData() const
boost::indirect_iterator< InternalConstPMTPtrIterator, const PMT & > InternalConstPMTIterator
Iterator over station for read.
bool IsT2Life() const
boost::filter_iterator< PMTFilter, InternalPMTIterator > PMTIterator
Iterator over station for read/write.
void MakeTriggerData()
Make trigger data object.
Iterator Begin()
Definition: MultiObject.h:83
bool operator()(const Station &station)
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::const_iterator, LabeledObjectType > ConstIterator
Definition: MultiObject.h:81
bool IsHighGainSaturation() const
bool IsSilent() const
Check if the station is silent.
bool HasSmallPMTData() const
bool IsCandidate() const
Check if the station is a candidate.
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
utl::TraceD & GetVEMTrace(const StationConstants::SignalComponent source=StationConstants::eTotal)
signal trace calibrated in [VEM charge]
StationConstants::ReconstructionStatus fReconstructionStatus
bool IsCyclone() const
void SetIsCyclone(const bool cy=true)
const Scintillator & GetScintillator() const
const SmallPMTData & GetSmallPMTData() const
utl::ShadowPtr< StationGPSData > fGPSData
const sevt::StationTriggerData & GetTriggerData() const
class to hold data at Station level
utl::MultiTraceD::ConstIterator ConstVEMTraceIterator
utl::MultiTraceD::Iterator VEMTraceIterator
an iterator over VEM traces of different components
void SetLowGainSaturation(const bool sat=true)
bool HasSimData() const
Check whether station simulated data exists.
void SetRejected(const int reason)
Set rejected station flag.
ConstPMTIterator PMTsEnd(const sdet::PMTConstants::PMTType type=sdet::PMTConstants::eWaterCherenkovLarge) const
end PMT iterator for read
const utl::TraceD & GetVEMTrace(const StationConstants::SignalComponent source=StationConstants::eTotal) const
#define OFFLINE_CAST_CONST_METHOD(_Method_)
Definition: ClassHelpers.h:51
SmallPMTData & GetSmallPMTData()
ConstVEMTraceIterator VEMTracesEnd() const
Station Calibration data
class to hold data for station SPMT
Definition: SmallPMTData.h:18
PMTIterator PMTsEnd(const sdet::PMTConstants::PMTType type=sdet::PMTConstants::eWaterCherenkovLarge)
end PMT iterator for read/write
bool IsT2Life120() const
void MakeVEMTrace(const StationConstants::SignalComponent source=StationConstants::eTotal)
Make a VEM trace object.
std::vector< PMT * > fPMTs
sevt::StationGPSData & GetGPSData()
Get GPS data for the station.
bool HasVEMTrace(const StationConstants::SignalComponent source=StationConstants::eTotal) const
Check whether VEM trace exists.
Scintillator & GetScintillator()
int GetT2Life() const
const SignalSegmentCollection & GetSignals() const
void AddParticle(const utl::Particle &particle)
Station & operator=(const Station &station)
boost::indirect_iterator< InternalPMTPtrIterator, PMT & > InternalPMTIterator
Iterator over station for read/write.
bool IsUUB() const
sevt::StationCalibData & GetCalibData()
Get calibration data for the station.
bool HasGPSData() const
Check whether GPS data object edists.
double fBottomUpResidual
utl::MultiTraceD fTrace
void MakeRecData()
Make station reconstructed data object.
bool IsLowGainSaturation() const
Check which gains are saturated.
std::vector< SignalSegment > SignalSegmentCollection
Definition: SignalSegment.h:33
class to hold data for station Scintillator
VEMTraceIterator VEMTracesBegin()
First VEM trace.
double GetBottomUpResidual() const
RejectedStationFilter(const int statusMask)
int GetRejectionStatus() const
PMT & GetPMT(const unsigned int pmtId)
Retrive a PMT by Id.
PMT & GetScintillatorPMT()
bool HasRecData() const
Check whether station reconstructed data exists.
Station Trigger Data description
unsigned int GetNPMTs(const sdet::PMTConstants::PMTType type=sdet::PMTConstants::eAnyType) const
Number of pmts.
bool operator()(const Station &station)
Trace< T > & GetTrace(const int label=0)
Returns the trace for /par source.
Definition: MultiTrace.h:70
utl::TimeStamp GetTraceStartTime() const
Get absolute start time of the VEM trace.
struct particle_info particle[80]
bool HasScintillator() const
utl::ShadowPtr< Scintillator > fScintillator
boost::filter_iterator< PMTFilter, InternalConstPMTIterator > ConstPMTIterator
Iterator over station for read.
bool fSaturation[sdet::PMTConstants::eNumberOfGains]
VEMTraceIterator VEMTracesEnd()
Last VEM trace.
void MakePMT(const unsigned int pmtId, const int stationId, const sdet::PMTConstants::PMTType type=sdet::PMTConstants::eWaterCherenkovLarge)
sevt::StationSimData & GetSimData()
Get simulated data at station level.
void SetSmallPMTSaturation(const bool sat=true)
Iterator End()
Definition: MultiObject.h:85
ConstPMTIterator PMTsBegin(const sdet::PMTConstants::PMTType type=sdet::PMTConstants::eWaterCherenkovLarge) const
begin PMT iterator for read
PMT & GetSmallPMT()
ConstVEMTraceIterator VEMTracesBegin() const
sevt::StationTriggerData & GetTriggerData()
Get Trigger data for the station.
void MakeGPSData()
Make GPS data object.
const sevt::StationGPSData & GetGPSData() const
SignalSegmentCollection & GetSignals()
const sevt::StationCalibData & GetCalibData() const
void SetHighGainSaturation(const bool sat=true)
bool IsRejected() const
Check if the station is rejected.
std::vector< PMT * >::const_iterator InternalConstPMTPtrIterator
void MakeCalibData()
Make calibration data object.
utl::ShadowPtr< StationCalibData > fCalibData
bool HasLabel(const int label) const
Definition: MultiObject.h:91
utl::ShadowPtr< StationTriggerData > fTriggerData
void SetSilent()
Set silent station flag.

, generated on Tue Sep 26 2023.