CheckGeometry_module.cc
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 // Class: CheckGeometry
3 // Module Type: analyzer
4 // File: CheckGeometry_module.cc
5 //
6 // Generated at Tue Jan 6 22:27:12 2015 by Tingjun Yang using artmod
7 // from cetpkgsupport v1_07_00.
8 ////////////////////////////////////////////////////////////////////////
15 #include "art_root_io/TFileService.h"
17 #include "fhiclcpp/ParameterSet.h"
21 #include "TCanvas.h"
22 #include "TBox.h"
23 #include "TH2F.h"
24 #include "TLine.h"
25 #include "TLatex.h"
26 #include "TLegend.h"
27 
28 #include <iostream>
29 #include <vector>
30 
31 //constexpr unsigned short kMaxAuxDets = 100; // unused
32 //constexpr unsigned short kMaxTkIDs = 100; // unused
33 
34 namespace dune {
35  class CheckGeometry;
36 }
37 
39 public:
40  explicit CheckGeometry(fhicl::ParameterSet const & p);
41  // The destructor generated by the compiler is fine for classes
42  // without bare pointers or other resource use.
43 
44  // Plugins should not be copied or assigned.
45  CheckGeometry(CheckGeometry const &) = delete;
46  CheckGeometry(CheckGeometry &&) = delete;
47  CheckGeometry & operator = (CheckGeometry const &) = delete;
49 
50  // Required functions.
51  void analyze(art::Event const & e) override;
52 
53  // Selected optional functions.
54  void reconfigure(fhicl::ParameterSet const & p) ;
55 
56 private:
57 
58  // Declare member data here.
59 
60 };
61 
62 
64  :
65  EDAnalyzer(p)
66 {
67  reconfigure(p);
68 }
69 
71 {
72 
74 
75  //std::cout<<"channel = "<<geo->PlaneWireToChannel(0,600,1)<<std::endl;
76 
77  TCanvas *can = new TCanvas("c1","c1");
78  can->cd();
79  std::vector<TBox*> TPCBox;
80  std::vector<TLine*> Wires;
81 
82  double minx = 1e9;
83  double maxx = -1e9;
84  double miny = 1e9;
85  double maxy = -1e9;
86  double minz = 1e9;
87  double maxz = -1e9;
88 
89  int nwires = 0;
90  std::vector<int> nwires_tpc(geo->NTPC());
91  for (size_t i = 0; i<geo->NTPC(); ++i) nwires_tpc[i] = 0;
92  for (size_t t = 0; t<geo->NTPC(); ++t){
93  //if (t%2==0) continue;
94  double local[3] = {0.,0.,0.};
95  double world[3] = {0.,0.,0.};
96  const geo::TPCGeo &tpc = geo->TPC(t);
97  tpc.LocalToWorld(local,world);
98  if (minx>world[0]-tpc.ActiveHalfWidth())
99  minx = world[0]-tpc.ActiveHalfWidth();
100  if (maxx<world[0]+tpc.ActiveHalfWidth())
101  maxx = world[0]+tpc.ActiveHalfWidth();
102  if (miny>world[1]-tpc.ActiveHalfHeight())
103  miny = world[1]-tpc.ActiveHalfHeight();
104  if (maxy<world[1]+tpc.ActiveHalfHeight())
105  maxy = world[1]+tpc.ActiveHalfHeight();
106  if (minz>world[2]-tpc.ActiveLength()/2.)
107  minz = world[2]-tpc.ActiveLength()/2.;
108  if (maxz<world[2]+tpc.ActiveLength()/2.)
109  maxz = world[2]+tpc.ActiveLength()/2.;
110 // std::cout<<t<<" "<<world[0]-tpc.ActiveHalfWidth()
111 // <<" "<<world[0]+tpc.ActiveHalfWidth()
112 // <<" "<<world[1]-tpc.ActiveHalfHeight()
113 // <<" "<<world[1]+tpc.ActiveHalfHeight()
114 // <<" "<<world[2]-tpc.ActiveLength()/2.
115 // <<" "<<world[2]+tpc.ActiveLength()/2.<<std::endl;
116 
117  TPCBox.push_back(new TBox(world[2]-tpc.ActiveLength()/2.,
118  world[1]-tpc.ActiveHalfHeight(),
119  world[2]+tpc.ActiveLength()/2.,
120  world[1]+tpc.ActiveHalfHeight()));
121  TPCBox.back()->SetFillStyle(0);
122  TPCBox.back()->SetLineStyle(2);
123  TPCBox.back()->SetLineWidth(2);
124  TPCBox.back()->SetLineColor(16);
125 
126  for (size_t p = 0; p<geo->Nplanes(t);++p){
127  for (size_t w = 0; w<geo->Nwires(p,t); ++w){
128  ++nwires;
129  ++nwires_tpc[t];
130  double xyz0[3];
131  double xyz1[3];
132  unsigned int c = 0;
133 // if ((t==7&&p==0&&w==192)||
134 // (t==7&&p==1&&w==112)||
135 // (t==7&&p==2&&w==0)){
136 // if (true){
137  if ((t==2||t==6||t==10)&&p==0&&w%10==0){
138  geo->WireEndPoints(c,t,p,w,xyz0,xyz1);
139  Wires.push_back(new TLine(xyz0[2],xyz0[1],xyz1[2],xyz1[1]));
140  }
141  //std::cout<<t<<" "<<p<<" "<<w<<" "<<xyz0[0]<<" "<<xyz0[1]<<" "<<xyz0[2]<<std::endl;
142  }
143  }
144  }
145 
146  TH2F *frame = new TH2F("frame",";z (cm);y (cm)",100,minz,maxz,100,miny,maxy);
147  frame->SetStats(0);
148  frame->Draw();
149  for (auto box: TPCBox) box->Draw();
150  for (auto wire: Wires) wire->Draw();
151  can->Print("wires.pdf");
152  std::cout<<"N wires = "<<nwires<<std::endl;
153  for (size_t i = 0; i<geo->NTPC(); ++i){
154  std::cout<<"TPC "<<i<<" has "<<nwires_tpc[i]<<" wires"<<std::endl;
155  }
156 
157  //CRT
158  std::vector<TBox*> CRTBox0;
159  std::vector<TBox*> CRTBox1;
160  std::vector<std::vector<TBox*>> CRTStrips(2);
161  std::vector<int> modules0;
162  std::vector<int> modules1;
163  std::vector<TText *> text0;
164  std::vector<TText *> text1;
165  std::vector<double> module_x(32);
166  std::vector<double> module_y(32);
167  std::vector<double> module_z(32);
168  std::vector<double> pixel_x(32);
169  std::vector<double> pixel_y(32);
170  std::vector<double> pixel_z(32);
171  for (unsigned int i = 0; i < geo->NAuxDets(); ++i){
172  auto& auxdet = geo->AuxDet(i);
173  double xyz[3];
174  auxdet.GetCenter(xyz);
175  //std::cout<<"Aux "<<i<<" "<<xyz[0]<<" "<<xyz[1]<<" "<<xyz[2]<<" "<<auxdet.HalfWidth1()<<" "<<auxdet.HalfHeight()<<" "<<auxdet.Length()/2<<std::endl;
176  double auxdet0[3] = {-auxdet.HalfWidth1(), auxdet.HalfHeight(), -auxdet.Length()/2};
177  double world0[3];
178  auxdet.LocalToWorld(auxdet0, world0);
179  double auxdet1[3] = {auxdet.HalfWidth1(), auxdet.HalfHeight(), auxdet.Length()/2};
180  double world1[3];
181  auxdet.LocalToWorld(auxdet1, world1);
182  module_x[i] = (world0[0]+world1[0])/2;
183  module_y[i] = (world0[1]+world1[1])/2;
184  module_z[i] = (world0[2]+world1[2])/2;
185  std::cout<<"CRT module "<<i<<" x = "<<module_x[i]<<" y = "<<module_y[i]<<" z = "<<module_z[i]<<std::endl;
186  if (xyz[2] < 0){ //front
187  CRTBox0.push_back(new TBox(world0[0],world0[1],world1[0],world1[1]));
188  CRTBox0.back()->SetFillStyle(0);
189  //CRTBox0.back()->SetLineStyle(i/8+1);
190  CRTBox0.back()->SetLineColor(i%8+1);
191  if (i%8+1==5){
192  CRTBox0.back()->SetLineColor(kOrange);
193  }
194  CRTBox0.back()->SetLineWidth(2);
195  modules0.push_back(i);
196  text0.push_back(new TText((world0[0]+world1[0])/2,(world0[1]+world1[1])/2,Form("%d",i)));
197  text0.back()->SetTextColor(i%8+1);
198  if (i%8+1==5){
199  text0.back()->SetTextColor(kOrange);
200  }
201 
202  }
203  else{
204  CRTBox1.push_back(new TBox(world0[0],world0[1],world1[0],world1[1]));
205  CRTBox1.back()->SetFillStyle(0);
206  //CRTBox1.back()->SetLineStyle(i/8+1);
207  CRTBox1.back()->SetLineColor(i%8+1);
208  if (i%8+1==5){
209  CRTBox1.back()->SetLineColor(kOrange);
210  }
211  CRTBox1.back()->SetLineWidth(2);
212  modules1.push_back(i);
213  text1.push_back(new TText((world0[0]+world1[0])/2,(world0[1]+world1[1])/2,Form("%d",i)));
214  text1.back()->SetTextColor(i%8+1);
215  if (i%8+1==5){
216  text1.back()->SetTextColor(kOrange);
217  }
218  }
219  if (i==0){
220  //std::cout<<"Aux "<<i<<" has "<<auxdet.NSensitiveVolume()<<std::endl;
221  }
222  }
223 
224  //Get the pixel map
225  std::vector< std::pair <int,int> > vect;
226  vect.push_back( std::make_pair(1,2));
227  vect.push_back( std::make_pair(0,2));
228  vect.push_back( std::make_pair(15,13));
229  vect.push_back( std::make_pair(14,13));
230  vect.push_back( std::make_pair(14,12));
231  vect.push_back( std::make_pair(9,11));
232  vect.push_back( std::make_pair(9,10));
233  vect.push_back( std::make_pair(8,10));
234  vect.push_back( std::make_pair(7,5));
235  vect.push_back( std::make_pair(6,5));
236  vect.push_back( std::make_pair(6,4));
237  vect.push_back( std::make_pair(1,3));
238  vect.push_back( std::make_pair(0,3));
239  vect.push_back( std::make_pair(15,12));
240  vect.push_back( std::make_pair(8,11));
241  vect.push_back( std::make_pair(7,4));
242  vect.push_back( std::make_pair(17,18));
243  vect.push_back( std::make_pair(16,18));
244  vect.push_back( std::make_pair(31,29));
245  vect.push_back( std::make_pair(30,29));
246  vect.push_back( std::make_pair(30,28));
247  vect.push_back( std::make_pair(25,27));
248  vect.push_back( std::make_pair(25,26));
249  vect.push_back( std::make_pair(24,26));
250  vect.push_back( std::make_pair(23,21));
251  vect.push_back( std::make_pair(22,21));
252  vect.push_back( std::make_pair(22,20));
253  vect.push_back( std::make_pair(17,19));
254  vect.push_back( std::make_pair(16,19));
255  vect.push_back( std::make_pair(31,28));
256  vect.push_back( std::make_pair(24,27));
257  vect.push_back( std::make_pair(23,20));
258  //module map
259  std::vector<size_t> fChannelMap;
260  fChannelMap.push_back(24);
261  fChannelMap.push_back(25);
262  fChannelMap.push_back(30);
263  fChannelMap.push_back(18);
264  fChannelMap.push_back(15);
265  fChannelMap.push_back(7);
266  fChannelMap.push_back(13);
267  fChannelMap.push_back(12);
268  fChannelMap.push_back(11);
269  fChannelMap.push_back(10);
270  fChannelMap.push_back(6);
271  fChannelMap.push_back(14);
272  fChannelMap.push_back(19);
273  fChannelMap.push_back(31);
274  fChannelMap.push_back(26);
275  fChannelMap.push_back(27);
276  fChannelMap.push_back(22);
277  fChannelMap.push_back(23);
278  fChannelMap.push_back(29);
279  fChannelMap.push_back(17);
280  fChannelMap.push_back(8);
281  fChannelMap.push_back(0);
282  fChannelMap.push_back(3);
283  fChannelMap.push_back(2);
284  fChannelMap.push_back(5);
285  fChannelMap.push_back(4);
286  fChannelMap.push_back(1);
287  fChannelMap.push_back(9);
288  fChannelMap.push_back(16);
289  fChannelMap.push_back(28);
290  fChannelMap.push_back(20);
291  fChannelMap.push_back(21);
292 
293  for (size_t i = 0; i<32; ++i){
294  int module[2];
295  double x[2];
296  double y[2];
297  double z[2];
298  double x0[2];
299  double x1[2];
300 // double y0[2];
301 // double y1[2];
302  module[0] = fChannelMap[vect[i].first];
303  module[1] = fChannelMap[vect[i].second];
304  for (size_t j = 0; j<2; ++j){
305  auto& auxdet = geo->AuxDet(module[j]);
306  double xyz[3];
307  auxdet.GetCenter(xyz);
308  x[j] = xyz[0];
309  y[j] = xyz[1];
310  z[j] = xyz[2];
311  double auxdet0[3] = {-auxdet.HalfWidth1(), auxdet.HalfHeight(), -auxdet.Length()/2};
312  double world0[3];
313  auxdet.LocalToWorld(auxdet0, world0);
314  double auxdet1[3] = {auxdet.HalfWidth1(), auxdet.HalfHeight(), auxdet.Length()/2};
315  double world1[3];
316  auxdet.LocalToWorld(auxdet1, world1);
317  x0[j] = world0[0];
318  x1[j] = world1[0];
319 // y0[j] = world0[1];
320 // y1[j] = world1[1];
321  }
322  if (std::abs(x0[0]-x1[0])<std::abs(x0[1]-x1[1])){
323  pixel_x[i] = x[0];
324  pixel_y[i] = y[1];
325  }
326  else{
327  pixel_x[i] = x[1];
328  pixel_y[i] = y[0];
329  }
330  pixel_z[i] = (z[0]+z[1])/2;
331  }
332 
333  TLatex tex;
334  tex.SetTextSize(0.02);
335 
336  TH2F *frcrt0 = new TH2F("frcrt0","Upstream;x(cm);y(cm)",100,-300, 600, 100, -100, 650);
337  TH2F *frcrt1 = new TH2F("frcrt1","Downstream;x(cm);y(cm)",100,-400, 450, 100, -200, 600);
338  frcrt0->SetStats(0);
339  frcrt1->SetStats(0);
340  TCanvas *cancrt = new TCanvas("cancrt","cancrt",1600,800);
341  cancrt->Divide(2,1);
342  cancrt->cd(1);
343  frcrt0->DrawCopy();
344  TLegend *leg0 = new TLegend(0.7,0.1,0.9,0.9);
345  leg0->SetFillStyle(0);
346  for (size_t i = 0; i< CRTBox0.size(); ++i){
347  CRTBox0[i]->Draw();
348  text0[i]->Draw();
349  leg0->AddEntry(CRTBox0[i], Form("Module %d",modules0[i]), "l");
350  }
351  //leg0->Draw();
352  for (int i = 0; i<16; ++i){
353  //tex.DrawLatex(pixel_x[i], pixel_y[i], Form("CH %d",i));
354  }
355  TLatex tt;
356  tt.SetTextSize(0.02);
357  for (unsigned int i = 0; i < geo->NAuxDets(); ++i){
358  auto& auxdet = geo->AuxDet(i);
359  double xyz[3];
360  auxdet.GetCenter(xyz);
361  if (xyz[2] < 0){ //front
362  if (auxdet.HalfWidth1()>auxdet.HalfHeight()){//horizontal
363  for (int j = 0; j<1; ++j){
364  auto& auxdetsen = auxdet.SensitiveVolume(j);
365  //std::cout<<i<<" "<<j<<" "<<auxdetsen.HalfWidth1()<<" "<<auxdetsen.HalfHeight()<<" "<<auxdetsen.Length()/2<<std::endl;
366  double auxdetsen0[3] = {0,0,auxdetsen.Length()/2-20};
367  double world0[3];
368  auxdetsen.LocalToWorld(auxdetsen0,world0);
369  //std::cout<<i<<" "<<j<<" "<<world0[0]<<" "<<world0[1]<<std::endl;
370  tt.SetTextColor(i%8+1);
371  tt.DrawLatex(world0[0], world0[1], Form("%d",j));
372  }
373  }
374  }
375  }
376 
377  cancrt->cd(2);
378  frcrt1->DrawCopy();
379  TLegend *leg1 = new TLegend(0.7,0.1,0.9,0.9);
380  leg1->SetFillStyle(0);
381  for (size_t i = 0; i< CRTBox1.size(); ++i){
382  CRTBox1[i]->Draw();
383  text1[i]->Draw();
384  leg1->AddEntry(CRTBox1[i], Form("Module %d",modules1[i]), "l");
385  }
386  //leg1->Draw();
387  for (int i = 16; i<32; ++i){
388  //tex.DrawLatex(pixel_x[i], pixel_y[i], Form("CH %d",i));
389  }
390 
391  for (unsigned int i = 0; i < geo->NAuxDets(); ++i){
392  auto& auxdet = geo->AuxDet(i);
393  double xyz[3];
394  auxdet.GetCenter(xyz);
395  if (xyz[2] > 0){ //front
396  for (int j = 0; j<1; ++j){
397  auto& auxdetsen = auxdet.SensitiveVolume(j);
398  //std::cout<<i<<" "<<j<<" "<<auxdetsen.HalfWidth1()<<" "<<auxdetsen.HalfHeight()<<" "<<auxdetsen.Length()/2<<std::endl;
399  double auxdetsen0[3] = {0,0,auxdetsen.Length()/2-20};
400  double world0[3];
401  auxdetsen.LocalToWorld(auxdetsen0,world0);
402  //std::cout<<i<<" "<<j<<" "<<world0[0]<<" "<<world0[1]<<std::endl;
403  tt.SetTextColor(i%8+1);
404  tt.DrawLatex(world0[0], world0[1], Form("%d",j));
405  }
406  }
407  }
408 
409  tt.SetTextColor(1);
410  for (int i = 0; i<2; ++i){
411  auto& auxdet = geo->AuxDet(i*2);
412  for (size_t j = 0; j<auxdet.NSensitiveVolume(); ++j){
413  auto& auxdetsen = auxdet.SensitiveVolume(j);
414  double world0[3] = {0};
415  double world1[3] = {0};
416  double auxdet0[3] = {-auxdetsen.HalfWidth1(),
417  -auxdetsen.HalfHeight(),
418  0};
419  double auxdet1[3] = {auxdetsen.HalfWidth1(),
420  auxdetsen.HalfHeight(),
421  0};
422  auxdetsen.LocalToWorld(auxdet0, world0);
423  auxdetsen.LocalToWorld(auxdet1, world1);
424 // std::cout<<world0[0]<<" "<<world0[1]<<" "<<world0[2]<<std::endl;
425 // std::cout<<world1[0]<<" "<<world1[1]<<" "<<world1[2]<<std::endl;
426  if (i==0){
427  CRTStrips[i].push_back(new TBox(world0[1], world0[2], world1[1], world1[2]));
428  }
429  else {
430  CRTStrips[i].push_back(new TBox(world0[0], world0[2], world1[0], world1[2]));
431  }
432  CRTStrips[i].back()->SetFillStyle(0);
433  CRTStrips[i].back()->SetLineWidth(2);
434  }
435  }
436  //std::cout<<CRTStrips[0].size()<<" "<<CRTStrips[1].size()<<std::endl;
437  TH2D *frstp[2];
438  TCanvas *cstp[2];
439  for (int i = 0; i<2; ++i){
440  cstp[i] = new TCanvas(Form("cstp_%d",i), Form("cstp_%d",i), 1000,500);
441  double minx = 1e10;
442  double maxx = -1e10;
443  double miny = 1e10;
444  double maxy = -1e10;
445  for (size_t j = 0; j<CRTStrips[i].size(); ++j){
446  if (minx>CRTStrips[i][j]->GetX1()) minx = CRTStrips[i][j]->GetX1();
447  if (minx>CRTStrips[i][j]->GetX2()) minx = CRTStrips[i][j]->GetX2();
448  if (maxx<CRTStrips[i][j]->GetX1()) maxx = CRTStrips[i][j]->GetX1();
449  if (maxx<CRTStrips[i][j]->GetX2()) maxx = CRTStrips[i][j]->GetX2();
450  if (miny>CRTStrips[i][j]->GetY1()) miny = CRTStrips[i][j]->GetY1();
451  if (miny>CRTStrips[i][j]->GetY2()) miny = CRTStrips[i][j]->GetY2();
452  if (maxy<CRTStrips[i][j]->GetY1()) maxy = CRTStrips[i][j]->GetY1();
453  if (maxy<CRTStrips[i][j]->GetY2()) maxy = CRTStrips[i][j]->GetY2();
454  }
455  frstp[i] = new TH2D(Form("frstp_%d",i),Form("frstp_%d",i),100,minx-10,maxx+10,100,miny-1,maxy+1);
456  frstp[i]->SetStats(0);
457  if (i==0) frstp[i]->SetTitle("Horizontal module (offline module 0);y(cm);z(cm)");
458  else frstp[i]->SetTitle("Vertical module (offline module 2);x(cm);z(cm)");
459  frstp[i]->Draw();
460  for (size_t j = 0; j<CRTStrips[i].size(); ++j){
461  CRTStrips[i][j]->Draw();
462  }
463  auto& auxdet = geo->AuxDet(i*2);
464  for (size_t j = 0; j<auxdet.NSensitiveVolume(); ++j){
465  auto& auxdetsen = auxdet.SensitiveVolume(j);
466  double xyz[3];
467  auxdetsen.GetCenter(xyz);
468  if (i==0) tt.DrawLatex(xyz[1]-0.5, xyz[2], Form("%d",int(j)));
469  else tt.DrawLatex(xyz[0]-0.5, xyz[2], Form("%d",int(j)));
470  }
471  cstp[i]->Print(Form("cstp_%d.png",i));
472  }
473  std::ofstream outfile("pixel.txt");
474  for (int i = 0; i<32; ++i){
475  outfile<<pixel_x[i]<<" "<<pixel_y[i]<<" "<<pixel_z[i]<<std::endl;
476  }
477  outfile.close();
478 
479  cancrt->Print("crt.pdf");
480  cancrt->Print("crt.png");
481 
482  //convert channel number to t/p/w
483  outfile.clear();
484  outfile.open("channelmap.txt");
485  for (size_t i = 0; i<geo->Nchannels(); ++i){
486  auto wire = geo->ChannelToWire(i)[0];
487  outfile<<i<<" "<<wire.TPC<<" "<<wire.Plane<<" "<<wire.Wire<<std::endl;
488  }
489 
490 }
491 
493 {
494  // Implementation of optional member function here.
495 }
496 
CheckGeometry & operator=(CheckGeometry const &)=delete
double ActiveHalfHeight() const
Half height (associated with y coordinate) of active TPC volume [cm].
Definition: TPCGeo.h:99
AuxDetSensitiveGeo const & SensitiveVolume(size_t sv) const
Definition: AuxDetGeo.h:171
Geometry information for a single TPC.
Definition: TPCGeo.h:38
CheckGeometry(fhicl::ParameterSet const &p)
std::vector< geo::WireID > ChannelToWire(raw::ChannelID_t const channel) const
Returns a list of wires connected to the specified TPC channel.
EDAnalyzer(fhicl::ParameterSet const &pset)
Definition: EDAnalyzer.h:25
unsigned int Nwires(unsigned int p, unsigned int tpc=0, unsigned int cstat=0) const
Returns the total number of wires in the specified plane.
art framework interface to geometry description
unsigned int Nchannels() const
Returns the number of TPC readout channels in the detector.
void analyze(art::Event const &e) override
Definition: type_traits.h:61
T abs(T value)
unsigned int Nplanes(unsigned int tpc=0, unsigned int cstat=0) const
Returns the total number of wire planes in the specified TPC.
const double e
#define DEFINE_ART_MODULE(klass)
Definition: ModuleMacros.h:67
double ActiveHalfWidth() const
Half width (associated with x coordinate) of active TPC volume [cm].
Definition: TPCGeo.h:95
void reconfigure(fhicl::ParameterSet const &p)
p
Definition: test.py:223
AuxDetGeo const & AuxDet(unsigned int const ad=0) const
Returns the specified auxiliary detector.
double ActiveLength() const
Length (associated with z coordinate) of active TPC volume [cm].
Definition: TPCGeo.h:103
unsigned int NTPC(unsigned int cstat=0) const
Returns the total number of TPCs in the specified cryostat.
void WireEndPoints(geo::WireID const &wireid, double *xyzStart, double *xyzEnd) const
Fills two arrays with the coordinates of the wire end points.
list x
Definition: train.py:276
TPCGeo const & TPC(unsigned int const tpc=0, unsigned int const cstat=0) const
Returns the specified TPC.
TCEvent evt
Definition: DataStructs.cxx:7
LArSoft geometry interface.
Definition: ChannelGeo.h:16
void LocalToWorld(const double *tpc, double *world) const
Transform point from local TPC frame to world frame.
Definition: TPCGeo.h:563
void GetCenter(double *xyz, double localz=0.0) const
Return the center position of an AuxDet.
QTextStream & endl(QTextStream &s)
unsigned int NAuxDets() const
Returns the number of auxiliary detectors.
void GetCenter(double *xyz, double localz=0.0) const
Return the center position of an AuxDet.
Definition: AuxDetGeo.cxx:62