28 const char*
const default_t =
"default";
30 const char*
const modules_t =
"modules";
31 const char*
const pmts_t =
"pmts";
32 const char*
const geometry_t =
"geometry";
34 const char*
const comment_t =
"comment";
35 const char*
const header_t =
"header";
36 const char*
const identifier_t =
"identifier";
37 const char*
const version_t =
"version";
38 const char*
const can_t =
"can";
39 const char*
const center_t =
"center";
40 const char*
const summary_t =
"summary";
42 const char*
const HEADER_t =
"HEADER";
43 const char*
const IDENTIFIER_t =
"IDENTIFIER";
44 const char*
const VERSION_t =
"VERSION";
45 const char*
const CAN_t =
"CAN";
46 const char*
const CENTER_t =
"CENTER";
47 const char*
const SUMMARY_t =
"SUMMARY";
57 int main(
int argc,
char **argv)
68 JParser<> zap(
"Auxiliary program to print detector file in human friendly format.");
98 catch(
const exception &error) {
99 FATAL(error.what() << endl);
108 catch(
const JException& error) {
112 if (option == default_t) {
116 }
else if (option == modules_t) {
120 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
123 cout <<
' ' << noshowpos << setw(8) << right << module->getID();
124 cout <<
' ' << noshowpos << setw(3) << right << module->getString();
125 cout <<
' ' << noshowpos << setw(2) << right << module->getFloor();
126 cout <<
' ' <<
FIXED(7,2) << module->getX();
127 cout <<
' ' <<
FIXED(7,2) << module->getY();
128 cout <<
' ' <<
FIXED(7,2) << module->getZ();
129 cout <<
' ' <<
FIXED(8,2) << module->getT0();
131 if (module->getFloor() != 0) {
133 JModule buffer =
getModule(demo.get(module->getID()), module->getID(), module->getLocation());
140 cout <<
' ' <<
FIXED(7,2) << phi;
143 const JQuaternion3D
Q = module->getQuaternion();
148 cout <<
' ' <<
FIXED(7,2) << phi;
155 }
else if (option == pmts_t) {
157 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
158 for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
160 cout <<
' ' << noshowpos << setw(8) << right << pmt->getID();
161 cout <<
' ' <<
FIXED(7,2) << pmt->getX();
162 cout <<
' ' <<
FIXED(7,2) << pmt->getY();
163 cout <<
' ' <<
FIXED(7,2) << pmt->getZ();
164 cout <<
' ' <<
FIXED(6,3) << pmt->getDX();
165 cout <<
' ' <<
FIXED(6,3) << pmt->getDY();
166 cout <<
' ' <<
FIXED(6,3) << pmt->getDZ();
167 cout <<
' ' <<
FIXED(8,2) << pmt->getT0();
168 cout <<
' ' << noshowpos << setw(8) << right << pmt->getStatus();
173 }
else if (option == geometry_t) {
178 }
else if (option == comment_t) {
182 }
else if (option == header_t ||
183 option == HEADER_t) {
185 if (option == header_t) {
187 cout <<
detector.getProperties() << endl;
191 cout <<
"validity = "
192 << JDateAndTime(
detector.getLowerLimit(),
true).toString() <<
' '
193 << JDateAndTime(
detector.getUpperLimit(),
true).toString() << endl;
197 cout <<
"set_variable UTM_EAST " <<
FIXED(12,2) <<
detector.getUTMEast() <<
";" << endl;
198 cout <<
"set_variable UTM_NORTH " <<
FIXED(12,2) <<
detector.getUTMNorth() <<
";" << endl;
199 cout <<
"set_variable UTM_Z " <<
FIXED(12,2) <<
detector.getUTMZ() <<
";" << endl;
200 cout <<
"set_variable UTM_ZONE " <<
FIXED(12,2) <<
detector.getUTMZone() <<
";" << endl;
201 cout <<
"set_variable UTM_WGS " <<
FIXED(12,2) <<
detector.getWGS() <<
";" << endl;
204 }
else if (option == version_t ||
205 option == VERSION_t) {
207 if (option == version_t) {
209 cout <<
detector.getVersion() << endl;
213 cout <<
"set_variable DETECTOR_VERSION " <<
detector.getVersion() <<
";" << endl;
216 }
else if (option == identifier_t ||
217 option == IDENTIFIER_t) {
219 if (option == identifier_t) {
221 cout <<
"Detector " <<
detector.getID() << endl;
225 cout <<
"set_variable DETECTOR_ID " <<
detector.getID() <<
";" << endl;
228 }
else if (option == can_t ||
233 const double V = (cylinder.getZmax() - cylinder.getZmin()) *
PI * cylinder.getRadius() * cylinder.getRadius();
236 if (option == can_t) {
238 cout <<
"X = " <<
FIXED(7,1) << cylinder.getX() << endl;
239 cout <<
"Y = " <<
FIXED(7,1) << cylinder.getY() << endl;
240 cout <<
"Zmin = " <<
FIXED(7,1) << cylinder.getZmin() << endl;
241 cout <<
"Zmax = " <<
FIXED(7,1) << cylinder.getZmax() << endl;
242 cout <<
"Radius = " <<
FIXED(7,1) << cylinder.getRadius() << endl;
243 cout <<
"Depth = " <<
FIXED(7,1) <<
detector.getUTMZ() << endl;
244 cout <<
"Volume = " <<
SCIENTIFIC(12,3) << V << endl;
245 cout <<
"Distance = " <<
FIXED(9,3) << D << endl;
249 cout <<
"set_variable CAN_X_M " <<
FIXED(7,1) << cylinder.getX() <<
";" << endl;
250 cout <<
"set_variable CAN_Y_M " <<
FIXED(7,1) << cylinder.getY() <<
";" << endl;
251 cout <<
"set_variable CAN_ZMIN_M " <<
FIXED(7,1) << cylinder.getZmin() <<
";" << endl;
252 cout <<
"set_variable CAN_ZMAX_M " <<
FIXED(7,1) << cylinder.getZmax() <<
";" << endl;
253 cout <<
"set_variable CAN_RADIUS_M " <<
FIXED(7,1) << cylinder.getRadius() <<
";" << endl;
254 cout <<
"set_variable CAN_DEPTH_M " <<
FIXED(7,1) <<
detector.getUTMZ() <<
";" << endl;
255 cout <<
"set_variable CAN_VOLUME_M3 " <<
SCIENTIFIC(12,3) << V <<
";" << endl;
256 cout <<
"set_variable CAN_DISTANCE_M " <<
FIXED(9,3) << D <<
";" << endl;
259 }
else if (option == center_t ||
260 option == CENTER_t) {
264 if (option == center_t) {
267 cout << showpos <<
FIXED(8,3) << center.getX() <<
' ';
268 cout << showpos <<
FIXED(8,3) << center.getY() <<
' ';
269 cout << showpos <<
FIXED(8,3) << center.getZ() << endl;
273 cout <<
"set_variable CENTER_X_M " <<
FIXED(7,1) << center.getX() <<
";" << endl;
274 cout <<
"set_variable CENTER_Y_M " <<
FIXED(7,1) << center.getY() <<
";" << endl;
275 cout <<
"set_variable CENTER_Z_M " <<
FIXED(7,1) << center.getZ() <<
";" << endl;
278 }
else if (option == summary_t ||
279 option == SUMMARY_t) {
293 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
294 strings.insert(module->getString());
297 if (option == summary_t) {
299 cout <<
"Number of strings = " << setw(4) << numberOfStrings << endl;
300 cout <<
"Number of floors = " << setw(4) << numberOfFloors << endl;
301 cout <<
"Number of modules = " << setw(4) << numberOfModules << endl;
302 cout <<
"Number of PMTs = " << setw(4) << numberOfPMTs << endl;
303 cout <<
"First string = " << setw(4) <<
string.first << endl;
304 cout <<
"Last string = " << setw(4) <<
string.second << endl;
305 cout <<
"First floor = " << setw(4) << floor .first << endl;
306 cout <<
"Last floor = " << setw(4) << floor .second << endl;
310 cout <<
"set_variable NUMBER_OF_STRINGS " << setw(4) << numberOfStrings <<
";" << endl;
311 cout <<
"set_variable NUMBER_OF_FLOORS " << setw(4) << numberOfFloors <<
";" << endl;
312 cout <<
"set_variable NUMBER_OF_MODULES " << setw(4) << numberOfModules <<
";" << endl;
313 cout <<
"set_variable NUMBER_OF_PMTS " << setw(4) << numberOfPMTs <<
";" << endl;
314 cout <<
"set_variable FIRST_STRING " << setw(4) <<
string.first <<
";" << endl;
315 cout <<
"set_variable LAST_STRING " << setw(4) <<
string.second <<
";" << endl;
316 cout <<
"set_variable FIRST_FLOOR " << setw(4) << floor .first <<
";" << endl;
317 cout <<
"set_variable LAST_FLOOR " << setw(4) << floor .second <<
";" << endl;
318 cout <<
"set_array STRINGS ";
319 copy(strings.begin(), strings.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
int main(int argc, char *argv[])
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)
Data structure for detector geometry and calibration.
JMODEL::JString getString(const JFit &fit)
Get model parameters of string.
I/O formatting auxiliaries.
JQuaternion3D twist
rotation around parallel axis
#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.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
General purpose messaging.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
double getAngle() const
Get rotation angle.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Auxiliary class to define a range between two values.
Utility class to parse command line options.
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
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
const JModule & getModule(const JDetector &detector, const JModuleLocation &location)
find module with a given string and floor number
Data structure for optical module.