69 JParser<> zap(
"Auxiliary program to print detector file in human friendly format.");
99 catch(
const exception &error) {
100 FATAL(error.what() << endl);
109 catch(
const JException& error) {
113 if (option == default_t) {
117 }
else if (option == modules_t) {
121 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++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();
132 if (module->getFloor() != 0) {
134 JModule buffer = demo.getModule(module->getID(), module->getLocation());
139 const double phi = (
JVector3Z_t.
getDot(q1.twist) >= 0.0 ? +1.0 : -1.0) * q1.twist.getAngle();
141 cout <<
' ' <<
FIXED(7,2) << phi;
144 const JQuaternion3D Q = module->getQuaternion();
147 const double phi = (
JVector3Z_t.
getDot(q1.twist) >= 0.0 ? +1.0 : -1.0) * q1.twist.getAngle();
149 cout <<
' ' <<
FIXED(7,2) << phi;
156 }
else if (option == pmts_t) {
158 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
159 for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++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();
174 }
else if (option == geometry_t) {
179 }
else if (option == comment_t) {
183 }
else if (option == header_t ||
184 option == HEADER_t) {
186 if (option == header_t) {
188 cout <<
detector.getProperties() << endl;
192 cout <<
"validity = "
193 << JDateAndTime(
detector.getLowerLimit(),
true).toString() <<
' '
194 << JDateAndTime(
detector.getUpperLimit(),
true).toString() << endl;
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;
205 }
else if (option == version_t ||
206 option == VERSION_t) {
208 if (option == version_t) {
210 cout <<
detector.getVersion() << endl;
214 cout <<
"set_variable DETECTOR_VERSION " <<
detector.getVersion() <<
";" << endl;
217 }
else if (option == identifier_t ||
218 option == IDENTIFIER_t) {
220 if (option == identifier_t) {
222 cout <<
"Detector " <<
detector.getID() << endl;
226 cout <<
"set_variable DETECTOR_ID " <<
detector.getID() <<
";" << endl;
229 }
else if (option == can_t ||
234 const double V = (cylinder.getZmax() - cylinder.getZmin()) *
PI * cylinder.getRadius() * cylinder.getRadius();
237 if (option == can_t) {
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;
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;
260 }
else if (option == center_t ||
261 option == CENTER_t) {
265 if (option == center_t) {
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;
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;
279 }
else if (option == summary_t ||
280 option == SUMMARY_t) {
295 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
296 strings.insert(module->getString());
297 modules.insert(module->getID());
300 if (option == summary_t) {
302 cout <<
"Number of strings = " << setw(4) << numberOfStrings << endl;
303 cout <<
"Number of floors = " << setw(4) << numberOfFloors << endl;
304 cout <<
"Number of modules = " << setw(4) << numberOfModules << endl;
305 cout <<
"Number of PMTs = " << setw(4) << numberOfPMTs << endl;
306 cout <<
"First string = " << setw(4) <<
string.first << endl;
307 cout <<
"Last string = " << setw(4) <<
string.second << endl;
308 cout <<
"First floor = " << setw(4) << floor .first << endl;
309 cout <<
"Last floor = " << setw(4) << floor .second << endl;
313 cout <<
"set_variable NUMBER_OF_STRINGS " << setw(4) << numberOfStrings <<
";" << endl;
314 cout <<
"set_variable NUMBER_OF_FLOORS " << setw(4) << numberOfFloors <<
";" << endl;
315 cout <<
"set_variable NUMBER_OF_MODULES " << setw(4) << numberOfModules <<
";" << endl;
316 cout <<
"set_variable NUMBER_OF_PMTS " << setw(4) << numberOfPMTs <<
";" << endl;
317 cout <<
"set_variable FIRST_STRING " << setw(4) <<
string.first <<
";" << endl;
318 cout <<
"set_variable LAST_STRING " << setw(4) <<
string.second <<
";" << endl;
319 cout <<
"set_variable FIRST_FLOOR " << setw(4) << floor .first <<
";" << endl;
320 cout <<
"set_variable LAST_FLOOR " << setw(4) << floor .second <<
";" << endl;
321 cout <<
"set_array STRINGS ";
322 copy(strings.begin(), strings.end(), ostream_iterator<int>(cout,
" "));
324 cout <<
"set_array MODULES ";
325 copy(modules.begin(), modules.end(), ostream_iterator<int>(cout,
" "));
bool isORCADetector(const JDetectorHeader &header)
Check if given detector header is compatible with that of ORCA.
Utility class to parse command line options.
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.
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
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
int getNumberOfFloors(const JDetector &detector)
Get number of floors.
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.
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.
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.
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.
do echo Generating $dir eval D