Clusterer_module.cc
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 // Class: Clusterer
3 // Module Type: filter
4 // File: Clusterer_module.cc
5 //
6 // Generated at Mon Feb 4 15:13:21 2013 by Jan Zirnstein using artmod
7 // from art v1_02_06.
8 ////////////////////////////////////////////////////////////////////////
9 
14 
18 
19 namespace novaddt {
20  class Clusterer;
21 }
22 
24 public:
25  explicit Clusterer(fhicl::ParameterSet const & p);
26  virtual ~Clusterer();
27 
28  bool filter(art::Event & e) override;
29 
30 private:
31 
34  bool _trigflag;
35 
36 };
37 
38 
40 :
41 // Initialize member data here.
42  _hlabel(p.get< std::string>("hlist_label")),
43  _instan(p.get< std::string>("hlist_instance")),
44  _trigflag(false)
45 {
46  // Call appropriate Produces<>() functions here.
47  produces< std::vector<novaddt::Cluster> >();
48  produces< art::Assns<novaddt::Cluster, novaddt::HitList> >();
49 }
50 
52 {
53  // Clean up dynamic memory and other resources here.
54 }
55 
57 {
58  // Grab the vector of hitlists from the EDS
60  e.getByLabel(_hlabel, _instan, lists);
61 
62  // This is what is being put into the EDS
63  std::unique_ptr<std::vector<novaddt::Cluster>> product(new std::vector<Cluster>);
64  std::unique_ptr<art::Assns<novaddt::Cluster, novaddt::HitList> >
66 
67  // How many groups of hits are we dealing with?
68  unsigned int ngroups = lists->size();
69  if (!ngroups) {
70  _trigflag = false;
71  e.put(std::move(product));
72  e.put(std::move(assn));
73  return _trigflag;
74  }
75 
76  // Loop over each group, make a cluster
77  for(size_t i = 0; i != ngroups; ++i){
78  // novaddt::HitList hits = (*i);
79  art::Ptr<novaddt::HitList> hl(lists,i);
80  novaddt::TDC lowt = (*hl)[0].TDC();
81  novaddt::TDC hight= (*hl)[0].TDC();
82  novaddt::Plane lowp = (*hl)[0].Plane();
83  novaddt::Plane highp= (*hl)[0].Plane();
84  uint32_t asum = 0;
85  novaddt::Cell lowxc = (*hl)[0].Cell();
86  novaddt::Cell lowyc = (*hl)[0].Cell();
87  novaddt::Cell highxc= (*hl)[0].Cell();
88  novaddt::Cell highyc= (*hl)[0].Cell();
89 
90  for(auto const& hit: *hl){
91  // Figure out earliest and latest time
92  if (hit.TDC().val < lowt) lowt = hit.TDC().val;
93  else if(hight < hit.TDC().val) hight = hit.TDC().val;
94 
95  // Figure out smallest and largest cell in each view
96  if (daqchannelmap::X_VIEW==hit.View().val){
97  if (hit.Cell().val < lowxc) lowxc = hit.Cell().val;
98  else if(highxc < hit.Cell().val) highxc = hit.Cell().val;
99  }
100  if (daqchannelmap::Y_VIEW==hit.View().val){
101  if (hit.Cell().val < lowyc) lowyc = hit.Cell().val;
102  else if(highyc < hit.Cell().val) highyc = hit.Cell().val;
103  }
104 
105  // Figure out starting and ending plane of Cluster
106  if (hit.Plane().val < lowp) lowp = hit.Plane().val;
107  else if(highp < hit.Plane().val) highp = hit.Plane().val;
108 
109  // Increment the ADC sum by the ADC value of the hit
110  asum = asum + hit.ADC().val;
111 
112  } // End of loop over hits in a hitlist
113 
114  // Make the Cluster
115  novaddt::Cluster clust(lowxc, lowyc, highxc, highyc, lowp, highp, lowt, hight, asum);
116 
117  // Add the Cluster to the vector if it's 3D (might change this later)
118  if (!(lowxc.val == highxc.val || lowyc.val == highyc.val)){
119  product->push_back(clust);
120  //Making Association with the hit list with the cluster
121  util::CreateAssn(*this, e, *(product.get()), hl,*(assn.get()));
122  }
123 
124  } // End of loops over hitlists
125 
126  // Check the size of the vector of Clusters
127  _trigflag = (product->size() > 0);
128 
129  // Put the vector of Clusters into the event
130  //e.put(std::move(product),"Clusters");
131  e.put(std::move(product));
132  e.put(std::move(assn));
133 
134  // Return appropriate flag
135  return _trigflag;
136 }
137 
static bool CreateAssn(art::EDProducer const &prod, art::Event &evt, std::vector< T > &a, art::Ptr< U > b, art::Assns< T, U > &assn, size_t indx=UINT_MAX, std::string const &instance=std::string())
Create a 1 to 1 association between a new product and one already in the event.
const char * p
Definition: xmltok.h:285
value_type val
Definition: BaseProducts.h:109
Cell()=default
DEFINE_ART_MODULE(TestTMapFile)
Clusterer(fhicl::ParameterSet const &p)
Identifier for the Y measuring view of the detector (side)
ProductID put(std::unique_ptr< PROD > &&product)
Definition: Event.h:102
TDC()=default
Identifier for the X measuring view of the detector (top)
bool filter(art::Event &e) override
Plane()=default
::xsd::cxx::tree::string< char, simple_type > string
Definition: Database.h:154
T product(std::vector< T > dims)
bool getByLabel(std::string const &label, std::string const &productInstanceName, Handle< PROD > &result) const
Definition: DataViewImpl.h:344
Definition: event.h:1
Float_t e
Definition: plot.C:35
Definition: fwd.h:28