15 ev.gname =
"protodune_geo";
16 ev.fullname =
"protodunev7";
26 for (
Index icry=0; icry<ev.ncry; ++icry ) {
27 for (
Index itpc=0; itpc<ev.ntpc; ++itpc ) {
28 for (
Index ipla=0; ipla<ev.npla; ++ipla ) {
31 ev.view[icry][itpc][0] =
geo::kU;
32 ev.view[icry][itpc][1] =
geo::kV;
33 ev.view[icry][itpc][2] =
geo::kZ;
37 resize(ev.nwirPerPlane, ev.ntpc, ev.npla, 0);
38 ev.nwirPerPlane[0][0] = 1148;
39 ev.nwirPerPlane[0][1] = 1148;
40 ev.nwirPerPlane[0][2] = 480;
41 for (
Index itpc=1; itpc<ev.ntpc; ++itpc ) {
42 for (
Index ipla=0; ipla<ev.npla; ++ipla ) ev.nwirPerPlane[itpc][ipla] = ev.nwirPerPlane[0][ipla];
45 resize(ev.nchaPerRop, ev.nrop, 0);
46 ev.nchaPerRop[0] = 800;
47 ev.nchaPerRop[1] = 800;
48 ev.nchaPerRop[2] = 480;
49 ev.nchaPerRop[3] = 480;
50 for (
Index irop=0; irop<ev.nrop; ++irop ) ev.nchaPerApa += ev.nchaPerRop[irop];
51 ev.nchatot = ev.napa*ev.nchaPerApa;
56 for (
Index icry=0; icry<ev.ncry; ++icry ) {
57 for (
Index iapa=0; iapa<ev.napa; ++iapa ) {
58 for (
Index irop=0; irop<ev.nrop; ++irop ) {
59 for (
Index kcha=0; kcha<ev.nchaPerRop[irop]; ++kcha ) {
60 ev.chacry[icha] = icry;
61 ev.chaapa[icha] = iapa;
62 ev.charop[icha] = irop;
70 for (
Index icry=0; icry<ev.ncry; ++icry ) {
71 for (
Index iapa=0; iapa<ev.napa; ++iapa ) {
72 for (
Index irop=0; irop<ev.nrop; ++irop ) {
73 ev.firstchan[icry][iapa][irop] = chan;
74 chan += ev.nchaPerRop[irop];
79 #include "setProtoDuneSpacePoints.dat" 82 ev.nopdet = 10*ev.napa - 2 + 2*16;
84 ev.nopdetcha.resize(ev.nopdet, 4);
85 for (
Index icha=29; icha<=60; ++icha ) ev.nopdetcha[icha] = 1;
87 vector<Index> firstChan = {
88 144, 148, 152, 156, 160, 164, 168, 172, 176, 180,
89 240, 244, 248, 252, 256, 260, 276, 280, 284, 216,
90 220, 224, 228, 192, 232, 196, 200, 236, 204, 264,
91 264, 265, 265, 266, 266, 267, 267, 268, 269, 270,
92 271, 272, 273, 274, 275, 132, 132, 133, 133, 134,
93 134, 135, 135, 136, 137, 138, 139, 140, 141, 142,
94 143, 0, 4, 8, 12, 16, 20, 24, 28, 32,
95 36, 48, 52, 56, 60, 64, 68, 72, 76, 80,
96 84, 96, 100, 104, 108, 112, 116, 120, 124, 128
98 ev.opdetcha.resize(ev.nopdet);
101 for (
Index iodt=0; iodt<ev.nopdet; ++iodt ) {
102 ev.opdetcha[iodt].resize(ev.nopdetcha[iodt]);
103 icha = firstChan[iodt];
104 for (
Index ioch=0; ioch<ev.nopdetcha[iodt]; ++ioch ) {
105 ev.opdetcha[iodt][ioch] = icha++;
109 ev.nopchaHardware = ncha;
110 ev.nopcha = ncha - 8;
116 const string myname =
"setExpectedValuesSpacePoints: ";
117 string ofname =
"setExpectedValuesSpacePoints.dat";
118 cout << myname <<
"Writing " << ofname <<
endl;
121 double crypos[3] = {0.0};
123 double cxlo = crypos[0] - crygeo.
HalfWidth();
124 double cxhi = crypos[0] + crygeo.
HalfWidth();
125 double cylo = crypos[1] - crygeo.
HalfHeight();
126 double cyhi = crypos[1] + crygeo.
HalfHeight();
127 double czlo = crypos[2] - 0.5*crygeo.
Length();
128 double czhi = crypos[2] + 0.5*crygeo.
Length();
129 cout <<
"Cryostat limits: " 130 <<
"(" << cxlo <<
", " << cylo <<
", " << czlo <<
"), " 131 <<
"(" << cxhi <<
", " << cyhi <<
", " << czhi <<
")" <<
endl;
135 ofstream
fout(ofname.c_str());
136 for (
double zf : zfs ) {
137 double z = czlo + zf*(czhi-czlo);
138 for (
double yf : yfs ) {
139 double y = cylo + yf*(cyhi-cylo);
140 for (
double xf : xfs ) {
141 double x = cxlo + xf*(cxhi-cxlo);
142 double xyz[3] = {
x,
y, z};
143 cout <<
" (" << x <<
", " << y <<
", " << z <<
")" <<
endl;
145 unsigned int itpc = tpcid.
TPC;
146 if ( itpc == TPCID::InvalidID )
continue;
148 unsigned int npla = tpcgeo.
Nplanes();
149 fout <<
" ev.posXyz.push_back(SpacePoint(" << x <<
", " << y <<
", " << z <<
"));" <<
endl;
150 for (
unsigned int ipla=0; ipla<npla; ++ipla ) {
153 fout <<
" ev.posTpc.push_back(" << itpc <<
");" <<
endl;
154 fout <<
" ev.posPla.push_back(" << ipla <<
");" <<
endl;
155 fout <<
" ev.posWco.push_back(" << xwire <<
");" <<
endl;
geo::Length_t WireCoordinate(double YPos, double ZPos, geo::PlaneID const &planeid) const
Returns the index of the nearest wire to the specified position.
unsigned int Nplanes() const
Number of planes in this tpc.
The data type to uniquely identify a Plane.
Geometry information for a single TPC.
Planes which measure Z direction.
Geometry information for a single cryostat.
void resize(Vector< T > &vec1, Index n1, const V &val)
void setExpectedValuesSpacePoints(Geometry *pgeo)
void setExpectedValues(ExpectedValues &ev)
geo::TPCID FindTPCAtPosition(double const worldLoc[3]) const
Returns the ID of the TPC at specified location.
constexpr ChannelID_t InvalidChannelID
ID of an invalid channel.
Signal from induction planes.
double HalfWidth() const
Half width of the cryostat [cm].
CryostatGeo const & Cryostat(geo::CryostatID const &cryoid) const
Returns the specified cryostat.
The geometry of one entire detector, as served by art.
The data type to uniquely identify a TPC.
double HalfHeight() const
Half height of the cryostat [cm].
void LocalToWorld(const double *cryo, double *world) const
Transform point from local cryostat frame to world frame.
TPCGeo const & TPC(unsigned int const tpc=0, unsigned int const cstat=0) const
Returns the specified TPC.
TPCID_t TPC
Index of the TPC within its cryostat.
constexpr Point origin()
Returns a origin position with a point of the specified type.
double Length() const
Length of the cryostat [cm].
QTextStream & endl(QTextStream &s)
Signal from collection planes.