Jpp  18.3.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JPrintDetector.cc File Reference

Auxiliary program to print detector file in human friendly format. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <set>
#include <iterator>
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JDetectorAddressMap.hh"
#include "JDetector/JDetectorSupportkit.hh"
#include "JDetector/JModule.hh"
#include "JMath/JConstants.hh"
#include "JTools/JRange.hh"
#include "JSystem/JDateAndTime.hh"
#include "JGeometry3D/JGeometry3DToolkit.hh"
#include "JGeometry3D/JCylinder3D.hh"
#include "JGeometry3D/JQuaternion3D.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to print detector file in human friendly format.

Author
mdejong

Definition in file JPrintDetector.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 58 of file JPrintDetector.cc.

59 {
60  using namespace std;
61  using namespace JPP;
62 
63  string detectorFile;
64  string option;
65  int debug;
66 
67  try {
68 
69  JParser<> zap("Auxiliary program to print detector file in human friendly format.");
70 
71  zap['a'] = make_field(detectorFile);
72  zap['O'] = make_field(option) =
73 
74  default_t,
75 
76  pmts_t,
77  modules_t,
78  geometry_t,
79 
80  comment_t,
81  header_t,
82  version_t,
83  identifier_t,
84  can_t,
85  center_t,
86  summary_t,
87 
88  HEADER_t,
89  VERSION_t,
90  IDENTIFIER_t,
91  CAN_t,
92  CENTER_t,
93  SUMMARY_t;
94 
95  zap['d'] = make_field(debug) = 1;
96 
97  zap(argc, argv);
98  }
99  catch(const exception &error) {
100  FATAL(error.what() << endl);
101  }
102 
103 
104  JDetector detector;
105 
106  try {
107  load(detectorFile, detector);
108  }
109  catch(const JException& error) {
110  FATAL(error);
111  }
112 
113  if (option == default_t) {
114 
115  cout << detector << endl;
116 
117  } else if (option == modules_t) {
118 
119  const JDetectorBuilder& demo = getDetectorBuilder(detector.getID());
120 
121  for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
122 
123  cout << "Module";
124  cout << ' ' << noshowpos << setw(8) << right << module->getID();
125  cout << ' ' << noshowpos << setw(3) << right << module->getString();
126  cout << ' ' << noshowpos << setw(2) << right << module->getFloor();
127  cout << ' ' << FIXED(7,2) << module->getX();
128  cout << ' ' << FIXED(7,2) << module->getY();
129  cout << ' ' << FIXED(7,2) << module->getZ();
130  cout << ' ' << FIXED(8,2) << module->getT0();
131 
132  if (module->getFloor() != 0) {
133  {
134  JModule buffer = demo.getModule(module->getID(), module->getLocation());
135 
136  const JQuaternion3D Q = getRotation(buffer, *module);
138 
139  const double phi = (JVector3Z_t.getDot(q1.twist) >= 0.0 ? +1.0 : -1.0) * q1.twist.getAngle();
140 
141  cout << ' ' << FIXED(7,2) << phi;
142  }
143  {
144  const JQuaternion3D Q = module->getQuaternion();
146 
147  const double phi = (JVector3Z_t.getDot(q1.twist) >= 0.0 ? +1.0 : -1.0) * q1.twist.getAngle();
148 
149  cout << ' ' << FIXED(7,2) << phi;
150  }
151  }
152 
153  cout << endl;
154  }
155 
156  } else if (option == pmts_t) {
157 
158  for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
159  for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
160  cout << "PMT";
161  cout << ' ' << noshowpos << setw(8) << right << pmt->getID();
162  cout << ' ' << FIXED(7,2) << pmt->getX();
163  cout << ' ' << FIXED(7,2) << pmt->getY();
164  cout << ' ' << FIXED(7,2) << pmt->getZ();
165  cout << ' ' << FIXED(6,3) << pmt->getDX();
166  cout << ' ' << FIXED(6,3) << pmt->getDY();
167  cout << ' ' << FIXED(6,3) << pmt->getDZ();
168  cout << ' ' << FIXED(8,2) << pmt->getT0();
169  cout << ' ' << noshowpos << setw(8) << right << pmt->getStatus();
170  cout << endl;
171  }
172  }
173 
174  } else if (option == geometry_t) {
175 
176  cout << "Maximal distance [m] = " << FIXED(6,1) << getMaximalDistance(detector) << endl;
177  cout << "Maximal time [ns] = " << FIXED(6,1) << getMaximalTime (detector) << endl;
178 
179  } else if (option == comment_t) {
180 
181  cout << detector.comment << endl;
182 
183  } else if (option == header_t ||
184  option == HEADER_t) {
185 
186  if (option == header_t) {
187 
188  cout << detector.getProperties() << endl;
189  cout << "name = " << (isARCADetector(detector) ? "ARCA" :
190  isORCADetector(detector) ? "ORCA" :
191  "unknown") << endl;
192  cout << "validity = "
193  << JDateAndTime(detector.getLowerLimit(), true).toString() << ' '
194  << JDateAndTime(detector.getUpperLimit(), true).toString() << endl;
195 
196  } else {
197 
198  cout << "set_variable UTM_EAST " << FIXED(12,2) << detector.getUTMEast() << ";" << endl;
199  cout << "set_variable UTM_NORTH " << FIXED(12,2) << detector.getUTMNorth() << ";" << endl;
200  cout << "set_variable UTM_Z " << FIXED(12,2) << detector.getUTMZ() << ";" << endl;
201  cout << "set_variable UTM_ZONE " << FIXED(12,2) << detector.getUTMZone() << ";" << endl;
202  cout << "set_variable UTM_WGS " << FIXED(12,2) << detector.getWGS() << ";" << endl;
203  }
204 
205  } else if (option == version_t ||
206  option == VERSION_t) {
207 
208  if (option == version_t) {
209 
210  cout << detector.getVersion() << endl;
211 
212  } else {
213 
214  cout << "set_variable DETECTOR_VERSION " << detector.getVersion() << ";" << endl;
215  }
216 
217  } else if (option == identifier_t ||
218  option == IDENTIFIER_t) {
219 
220  if (option == identifier_t) {
221 
222  cout << "Detector " << detector.getID() << endl;
223 
224  } else {
225 
226  cout << "set_variable DETECTOR_ID " << detector.getID() << ";" << endl;
227  }
228 
229  } else if (option == can_t ||
230  option == CAN_t) {
231 
232  const JCylinder3D cylinder(detector.begin(), detector.end());
233 
234  const double V = (cylinder.getZmax() - cylinder.getZmin()) * PI * cylinder.getRadius() * cylinder.getRadius();
235  const double D = getMaximalDistance(detector);
236 
237  if (option == can_t) {
238 
239  cout << "X = " << FIXED(7,1) << cylinder.getX() << endl;
240  cout << "Y = " << FIXED(7,1) << cylinder.getY() << endl;
241  cout << "Zmin = " << FIXED(7,1) << cylinder.getZmin() << endl;
242  cout << "Zmax = " << FIXED(7,1) << cylinder.getZmax() << endl;
243  cout << "Radius = " << FIXED(7,1) << cylinder.getRadius() << endl;
244  cout << "Depth = " << FIXED(7,1) << detector.getUTMZ() << endl;
245  cout << "Volume = " << SCIENTIFIC(12,3) << V << endl;
246  cout << "Distance = " << FIXED(9,3) << D << endl;
247 
248  } else {
249 
250  cout << "set_variable CAN_X_M " << FIXED(7,1) << cylinder.getX() << ";" << endl;
251  cout << "set_variable CAN_Y_M " << FIXED(7,1) << cylinder.getY() << ";" << endl;
252  cout << "set_variable CAN_ZMIN_M " << FIXED(7,1) << cylinder.getZmin() << ";" << endl;
253  cout << "set_variable CAN_ZMAX_M " << FIXED(7,1) << cylinder.getZmax() << ";" << endl;
254  cout << "set_variable CAN_RADIUS_M " << FIXED(7,1) << cylinder.getRadius() << ";" << endl;
255  cout << "set_variable CAN_DEPTH_M " << FIXED(7,1) << detector.getUTMZ() << ";" << endl;
256  cout << "set_variable CAN_VOLUME_M3 " << SCIENTIFIC(12,3) << V << ";" << endl;
257  cout << "set_variable CAN_DISTANCE_M " << FIXED(9,3) << D << ";" << endl;
258  }
259 
260  } else if (option == center_t ||
261  option == CENTER_t) {
262 
263  const JCenter3D center(detector.begin(), detector.end());
264 
265  if (option == center_t) {
266 
267  cout << "center = ";
268  cout << showpos << FIXED(8,3) << center.getX() << ' ';
269  cout << showpos << FIXED(8,3) << center.getY() << ' ';
270  cout << showpos << FIXED(8,3) << center.getZ() << endl;
271 
272  } else {
273 
274  cout << "set_variable CENTER_X_M " << FIXED(7,1) << center.getX() << ";" << endl;
275  cout << "set_variable CENTER_Y_M " << FIXED(7,1) << center.getY() << ";" << endl;
276  cout << "set_variable CENTER_Z_M " << FIXED(7,1) << center.getZ() << ";" << endl;
277  }
278 
279  } else if (option == summary_t ||
280  option == SUMMARY_t) {
281 
282  const int numberOfStrings = getNumberOfStrings(detector);
283  const int numberOfFloors = getNumberOfFloors (detector);
284  const int numberOfModules = getNumberOfModules(detector);
285  const int numberOfPMTs = getNumberOfPMTs (detector);
286 
287  typedef JTOOLS::JRange<int> JRange_t;
288 
289  const JRange_t string(make_array(detector.begin(), detector.end(), &JModule::getString));
290  const JRange_t floor (make_array(detector.begin(), detector.end(), &JModule::getFloor));
291 
293 
294  for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
295  strings.insert(module->getString());
296  }
297 
298  if (option == summary_t) {
299 
300  cout << "Number of strings = " << setw(4) << numberOfStrings << endl;
301  cout << "Number of floors = " << setw(4) << numberOfFloors << endl;
302  cout << "Number of modules = " << setw(4) << numberOfModules << endl;
303  cout << "Number of PMTs = " << setw(4) << numberOfPMTs << endl;
304  cout << "First string = " << setw(4) << string.first << endl;
305  cout << "Last string = " << setw(4) << string.second << endl;
306  cout << "First floor = " << setw(4) << floor .first << endl;
307  cout << "Last floor = " << setw(4) << floor .second << endl;
308 
309  } else {
310 
311  cout << "set_variable NUMBER_OF_STRINGS " << setw(4) << numberOfStrings << ";" << endl;
312  cout << "set_variable NUMBER_OF_FLOORS " << setw(4) << numberOfFloors << ";" << endl;
313  cout << "set_variable NUMBER_OF_MODULES " << setw(4) << numberOfModules << ";" << endl;
314  cout << "set_variable NUMBER_OF_PMTS " << setw(4) << numberOfPMTs << ";" << endl;
315  cout << "set_variable FIRST_STRING " << setw(4) << string.first << ";" << endl;
316  cout << "set_variable LAST_STRING " << setw(4) << string.second << ";" << endl;
317  cout << "set_variable FIRST_FLOOR " << setw(4) << floor .first << ";" << endl;
318  cout << "set_variable LAST_FLOOR " << setw(4) << floor .second << ";" << endl;
319  cout << "set_array STRINGS ";
320  copy(strings.begin(), strings.end(), ostream_iterator<int>(cout, " "));
321  cout << endl;
322  }
323  }
324 }
bool isORCADetector(const JDetectorHeader &header)
Check if given detector header is compatible with that of ORCA.
Utility class to parse command line options.
Definition: JParser.hh:1514
Q(UTCMax_s-UTCMin_s)-livetime_s
bool isARCADetector(const JDetectorHeader &header)
Check if given detector header is compatible with tat of ARCA.
int getNumberOfPMTs(const JModule &module)
Get number of PMTs.
static JRotation getRotation
Function object to get rotation matrix to go from first to second module.
then usage $script< detector specific pre-calibration script >< option > nAuxiliary script to make scan of pre stretching of detector strings(see JEditDetector)." "\nPossible options
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
static const JModuleCounter getNumberOfModules
Function object to count unique modules.
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
JMODEL::JString getString(const JFit &fit)
Get model parameters of string.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
Definition: JVectorize.hh:54
int getNumberOfFloors(const JDetector &detector)
Get number of floors.
then awk string
static const double PI
Mathematical constants.
double getMaximalTime(const double R_Hz)
Get maximal time for given rate.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
#define FATAL(A)
Definition: JMessage.hh:67
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
static const JVector3D JVector3Z_t(0, 0, 1)
unit z-vector
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:162
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector.
double getDot(const JVector3D &vector) const
Get dot product.
Definition: JVector3D.hh:282
do set_variable DETECTOR_TXT $WORKDIR detector
JDetectorBuilder & getDetectorBuilder()
Get detector builder.
Auxiliary data structure for decomposition of quaternion in twist and swing quaternions.
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:486
do echo Generating $dir eval D
Definition: JDrawLED.sh:53
int debug
debug level