3 #include <boost/lexical_cast.hpp>
5 #include <det/Detector.h>
6 #include <cdet/Station.h>
7 #include <cdet/CDetector.h>
9 #include <sdet/Station.h>
10 #include <utl/ErrorLogger.h>
12 #include <utl/Point.h>
14 #include <utl/GeometryUtilities.h>
15 #include <utl/UTMPoint.h>
16 #include <utl/TimeStamp.h>
17 #include <utl/UTCDateTime.h>
18 #include <utl/TimeRange.h>
19 #include <utl/TimeInterval.h>
20 #include <utl/Reader.h>
21 #include <utl/AugerUnits.h>
22 #include <utl/CoordinateSystem.h>
23 #include <utl/AugerCoordinateSystem.h>
24 #include <utl/ReferenceEllipsoid.h>
25 #include <fwk/LocalCoordinateSystem.h>
35 Station::Station(
const int id) :
37 ,fStationIdString(boost::lexical_cast<string>(id))
92 Detector::GetInstance().GetSDetector().GetStation(
fId).GetCommissionTimeRange();
96 GetStationData(timeString,
"commission",
"stationList",
"commission time");
98 boost::lexical_cast<
UTCDateTime>(timeString).GetTimeStamp();
99 GetStationData(timeString,
"decommission",
"stationList",
"commission time");
101 boost::lexical_cast<UTCDateTime>(timeString).GetTimeStamp();
117 Detector::GetInstance().GetSDetector().GetStation(
fId).GetPosition();
128 GetStationData(ellipsoid,
"ellipsoid",
"stationList",
"ellipsoid for UTM conversion");
129 fEllipsoid = ReferenceEllipsoid::GetEllipsoidIDFromString(ellipsoid);
131 GetStationData(band,
"band",
"stationList",
"band for UTM conversion");
133 GetStationData(zone,
"zone",
"stationList",
"zone for UTM conversion");
164 vector<double> coords;
165 GetRPCData(boost::lexical_cast<string>(
id),coords,
"RPCPosition",
"rpc_positions",
"RPC coordinates");
170 const sdet::Station & station = Detector::GetInstance().GetSDetector().GetStation(
fId);
174 const double halfHeight = station.
GetHeight()/2.;
177 fRPCPositions.insert(make_pair(
id,
Point(coords[0], coords[1], coords[2]-halfHeight-thickness, CS)));
190 double rotation = 0.0;
191 GetRPCData(boost::lexical_cast<string>(
id),rotation,
"RPCRotation",
"rpc_positions",
"RPC rotation");
208 det::Detector::GetInstance().GetSDetector().GetStation(
fId).GetLocalCoordinateSystem();
434 const unsigned int chamberId = int(
id/10000);
435 const unsigned int padId =
id - chamberId*10000;
443 const unsigned int row = int((padId-1)/nPadsX) + 1;
444 const unsigned int col = padId - int((row-1)*nPadsX);
447 const float padX = -sizeX/2.0 + (col-1)*padSizeX + padSizeX/2.0;
448 const float padY = -sizeY/2.0 + (row-1)*padSizeY + padSizeY/2.0;
449 const float padZ = 0.0*
meter;
454 return Point(padX,padY,padZ,rpcCS);
476 unsigned int rpcId = 0;
478 for (
unsigned int i = 1; i < nRPC+1; ++i) {
486 if (
abs(posX) < rpcSizeX/2.0 &&
abs(posY) < rpcSizeY/2.0 &&
abs(posZ) < rpcSizeZ/2.0) {
494 if (
abs(posX) < rpcSizeX/2.0 &&
abs(posY) < rpcSizeY/2.0) {
495 int col = int((posX-(-rpcSizeX/2.0))/padSizeX) + 1;
496 int row = int((posY-(-rpcSizeY/2.0))/padSizeY) + 1;
498 if (row > 0 && col > 0)
499 padId = (row-1)*numPadsX + col;
502 if (rpcId > 0 && padId > 0)
503 padId = 10000*rpcId + padId;
535 for (
size_t i = 0; i < data.size() && i < inGrid.size(); ++i)
544 return inGrid[index];
553 err <<
"Did not find requested component: '" << msg
utl::Validated< std::string > fName
utl::Validated< double > fRPCSizeY
double GetPadArea() const
Detector description interface for Station-related data.
utl::Validated< double > fPadArea
utl::Validated< int > fNumberPadsX
Time interval defined by two TimeStamps.
unsigned int GetPadId(const utl::Point &position) const
utl::ReferenceEllipsoid::EllipsoidID fEllipsoid
const utl::TimeRange & GetCommissionTimeRange() const
Station commission time range.
utl::CoordinateSystemPtr GetRPCCoordinateSystem(unsigned int id) const
utl::Validated< utl::Point > fPosition
Class to hold and convert a point in geodetic coordinates.
std::map< unsigned int, double > fRPCRotations
utl::Validated< utl::TimeRange > fCommissionTimeRange
double GetPadSizeY() const
std::string fStationIdString
int GetNumberPadsX() const
RPC readout parameters.
utl::Validated< double > fTankSupportOuterFootDistanceToCenter
double GetRPCSizeX() const
Dimensions of the RPC chamber.
bool IsInGrid(const cdet::CDetectorConstants::GridIndex index=cdet::CDetectorConstants::eStandard) const
Tells whether the station is in the regular triangular grid.
std::vector< double > GetTankSupportOuterFootBaseDimensions() const
Base class for exceptions trying to access non-existing components.
det::VManager::Status GetStationData(T &requestedData, const std::string &property, const std::string &component, const std::string &errorMsg, const bool throwOnFailure=true) const
std::map< unsigned int, utl::Point > fRPCPositions
utl::Point GetPosition() const
Station position in Site Cartesian Coordinates.
utl::Validated< double > fRPCSizeX
utl::Validated< std::vector< double > > fTankSupportOuterFootBaseDimensions
A TimeStamp holds GPS second and nanosecond for some event.
utl::Validated< double > fPadSizeY
const std::string & GetName() const
Station name.
class to hold data at Pad level
unsigned int GetId() const
Return Id of the Pad.
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
std::vector< double > GetRPCHousingInnerDimensions() const
Size of the RPC aluminum housing.
utl::Validated< std::vector< double > > fTankSupportOuterFootDimensions
std::vector< double > GetTankSupportOuterFootDimensions() const
double GetX(const CoordinateSystemPtr &coordinateSystem) const
utl::Point GetPadPosition(const cevt::Pad &pad) const
Pad position relative to center of the tank.
utl::Validated< double > fPadSizeX
utl::Validated< double > fDeadTime
int GetNumberRPCChambers() const
Number of RPC Chambers.
constexpr double nanosecond
std::vector< double > GetTankSupportCentralFootDimensions() const
utl::Validated< InGridType > fInGrid
double abs(const SVector< n, T > &v)
double GetRPCSizeY() const
utl::Validated< int > fNumberRPCChambers
utl::CoordinateSystemPtr fReferenceSystem
utl::CoordinateSystemPtr GetLocalCoordinateSystem() const
Get the Auger reference system centered on the tank.
double GetHeight() const
Height of the tank (water only)
std::vector< unsigned int > GetListPadIds() const
RPC readout parameters.
det::VManager::Status GetRPCData(const std::string &id, T &requestedData, const std::string &property, const std::string &component, const std::string &errorMsg, const bool throwOnFailure=true) const
double GetDeadTime() const
utl::Validated< std::vector< double > > fRPCHousingThickness
utl::Validated< int > fNumberPadsY
utl::Validated< std::vector< double > > fTankSupportCentralFootDimensions
std::map< unsigned int, utl::CoordinateSystemPtr > fRPCCoordinateSystems
std::vector< double > GetRPCHousingThickness() const
Thickness of walls of the RPC aluminum housing.
std::vector< double > GetTankSupportCentralFootBaseDimensions() const
double GetTankSupportOuterFootDistanceToCenter() const
double GetY(const CoordinateSystemPtr &coordinateSystem) const
double GetThickness() const
Thickness of the tank walls.
const utl::Point & GetRPCPosition(const unsigned int id) const
RPC position.
std::bitset< CDetectorConstants::kGridIndexSize > InGridType
utl::Validated< std::vector< double > > fTankSupportCentralFootBaseDimensions
double GetRPCRotation(const unsigned int id) const
RPC rotation around its Z axis (axis perpendicular to RPC plane.
void SetValid(const bool valid=true)
void NotFoundAndThrow(const std::string &msg) const
int GetNumberPadsY() const
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
utl::Validated< std::vector< unsigned int > > fListPadIds
RPC readout parameters.
utl::Validated< std::vector< double > > fTankSupportTopSlabDimensions
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
Point GetPoint(const CoordinateSystemPtr &theCS=CoordinateSystemPtr()) const
Get a cartesian point from an UTMPoint.
double GetPadSizeX() const
utl::Validated< std::vector< double > > fRPCHousingInnerDimensions
std::vector< double > GetTankSupportTopSlabDimensions() const