All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
sbndcode/sbndcode/OpDetReco/OpFlash/FlashFinder/FlashFinderFMWKInterface.cxx
Go to the documentation of this file.
1 #ifndef __FLASHFINDERFMWKINTERFACE_CXX__
2 #define __FLASHFINDERFMWKINTERFACE_CXX__
3 
4 #include "art/Framework/Core/EDProducer.h"
5 #include "art/Framework/Core/ModuleMacros.h"
6 #include "art/Framework/Principal/Event.h"
7 #include "art/Framework/Principal/Handle.h"
8 #include "art/Framework/Principal/Run.h"
9 #include "art/Framework/Principal/SubRun.h"
10 #include "canvas/Utilities/InputTag.h"
11 #include "fhiclcpp/ParameterSet.h"
12 #include "messagefacility/MessageLogger/MessageLogger.h"
13 #include "art_root_io/TFileService.h"
16 
17 namespace lightana {
18 
19  std::vector<size_t> ListOpChannels(int cryostat) {
20  std::vector<size_t> res;
21  ::art::ServiceHandle<geo::Geometry> geo;
22  if(cryostat<0) {
23  for(size_t opch=0; opch<geo->MaxOpChannel(); ++opch) {
24  if(geo->IsValidOpChannel(opch)) continue;
25  res.push_back(opch);
26  }
27  }else{
28  auto const& bbox = geo->Cryostat(cryostat).Boundaries();
29  for(size_t opch=0; opch<geo->MaxOpChannel(); ++opch) {
30  if(geo->IsValidOpChannel(opch)) continue;
31  auto const& pt = geo->OpDetGeoFromOpChannel(opch).GetCenter();
32  if(!bbox.ContainsPosition(pt)) continue;
33  res.push_back(opch);
34  }
35  }
36  return res;
37  }
38 
39  std::vector<size_t> ListOpDets(int cryostat) {
40  std::vector<size_t> res;
41  ::art::ServiceHandle<geo::Geometry> geo;
42  if(cryostat<0) {
43  for(size_t opdet=0; opdet<geo->NOpDets(); ++opdet) {
44  res.push_back(opdet);
45  }
46  }else{
47  auto const& bbox = geo->Cryostat(cryostat).Boundaries();
48  for(size_t opdet=0; opdet<geo->NOpDets(); ++opdet) {
49  auto const& pt = geo->OpDetGeoFromOpDet(opdet).GetCenter();
50  if(!bbox.ContainsPosition(pt)) continue;
51  res.push_back(opdet);
52  }
53  }
54  return res;
55  }
56 
57  size_t NOpDets(int cryostat) {
58  ::art::ServiceHandle<geo::Geometry> geo;
59  if(cryostat<0)
60  return geo->NOpDets();
61  else
62  return geo->Cryostat(cryostat).NOpDet();
63  }
64 
65  std::vector<size_t> ListOpChannelsByTPC(int tpc) {
66  std::vector<size_t> res;
67  ::art::ServiceHandle<geo::Geometry> geo;
68  if(tpc<0) {
69  for(size_t opch=0; opch<geo->MaxOpChannel(); ++opch) {
70  if(geo->IsValidOpChannel(opch)) continue;
71  res.push_back(opch);
72  }
73  }else{
74  // auto const& bbox = geo->TPC(tpc).BoundingBox();
75  for(size_t opch=0; opch<geo->MaxOpChannel(); ++opch) {
76  if(!geo->IsValidOpChannel(opch)) continue;
77  auto const& pt = geo->OpDetGeoFromOpChannel(opch).GetCenter();
78  // std::cout << "pt: " << pt.X() << ", " << pt.Y() << ", " << pt.Z() << std::endl;
79  // if(!bbox.ContainsPosition(pt)) continue;
80  if(pt.X() < 0 && tpc == 0) {
81  res.push_back(opch);
82  }
83  if(pt.X() > 0 && tpc == 1) {
84  res.push_back(opch);
85  }
86  }
87  }
88  return res;
89  }
90 
91  std::vector<int> PDNamesToList(std::vector<std::string> pd_names) {
92 
93  std::vector<int> out_ch_v;
94 
95  opdet::sbndPDMapAlg pds_map;
96 
97  for (auto name : pd_names) {
98  auto ch_v = pds_map.getChannelsOfType(name);
99  out_ch_v.insert(out_ch_v.end(), ch_v.begin(), ch_v.end());
100  }
101 
102  return out_ch_v;
103 
104  }
105 
106  size_t OpDetFromOpChannel(size_t opch) {
107  ::art::ServiceHandle<geo::Geometry> geo;
108  return geo->OpDetFromOpChannel(opch);
109  }
110 
111  void OpDetCenterFromOpChannel(size_t opch, double *xyz) {
112  ::art::ServiceHandle<geo::Geometry> geo;
113  geo->OpDetGeoFromOpChannel(opch).GetCenter(xyz);
114  }
115 
116 }
117 #endif
118 
std::vector< int > PDNamesToList(std::vector< std::string > pd_names)
std::vector< int > getChannelsOfType(std::string pdname) const
then echo fcl name
art framework interface to geometry description