All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GetDetectorType.cxx
Go to the documentation of this file.
1 /**
2  * @file larpandora/LArPandoraInterface/Detectors/LArPandoraDetectorType.cxx
3  *
4  * @brief Implementation of the interface for handling detector-specific details, as well as some helper functions
5  *
6  * $Log: $
7  */
8 
15 
16 #include "cetlib_except/exception.h"
17 
18 #include <limits>
19 #include <set>
20 
21 namespace lar_pandora {
22 
23  LArPandoraDetectorType*
25  {
26  art::ServiceHandle<geo::Geometry const> geo;
27 
28  const unsigned int nPlanes(geo->MaxPlanes());
29  std::set<geo::_plane_proj> planeSet;
30  for (unsigned int iPlane = 0; iPlane < nPlanes; ++iPlane)
31  (void)planeSet.insert(geo->TPC(0, 0).Plane(iPlane).View());
32 
33  if (nPlanes == 3 && planeSet.count(geo::kU) && planeSet.count(geo::kY) &&
34  planeSet.count(geo::kZ)) {
35  return new DUNEFarDetVDThreeView; //TODO Address bare pointer
36  }
37  else if (nPlanes == 3 && planeSet.count(geo::kU) && planeSet.count(geo::kV) &&
38  planeSet.count(geo::kW)) {
39  return new VintageLArTPCThreeView;
40  }
41  else if (nPlanes == 3 && planeSet.count(geo::kU) && planeSet.count(geo::kV) &&
42  planeSet.count(geo::kY)) {
43  return new ICARUS;
44  }
45  else if (nPlanes == 2 && planeSet.count(geo::kW) && planeSet.count(geo::kY)) {
46  return new ProtoDUNEDualPhase;
47  }
48 
49  throw cet::exception("LArPandora") << "LArPandoraDetectorType::GetDetectorType --- unable to "
50  "determine the detector type from the geometry GDML";
51  }
52 
53 } // namespace lar_pandora
Detector interface for an older-style 3view, horizontal drift, single-phase LArTPC (e...
Detector interface for ProtoDUNE dual phase.
Detector interface DUNE&#39;s vertical drift far detector.
Planes which measure V.
Definition: geo_types.h:130
Detector interface for ProtoDUNE dual phase.
Detector interface for DUNE&#39;s vertical drift, 3 view far detector.
Planes which measure Z direction.
Definition: geo_types.h:132
Planes which measure Y direction.
Definition: geo_types.h:133
Detector interface for ICARUS.
Definition: ICARUS.h:20
Planes which measure U.
Definition: geo_types.h:129
Detector interface for a 3view, horizontal drift, single-phase LArTPC.
Detector interface for ICARUS.
LArPandoraDetectorType * GetDetectorType()
Factory class that returns the correct detector type interface.
Planes which measure W (third view for Bo, MicroBooNE, etc).
Definition: geo_types.h:131
Helper functions for extracting detector geometry for use in reconsruction.