195           const double     sigma_m,
 
  207      center.setPosition(
JPosition3D(center.getX(), center.getY(), 0.0));
 
  220      if (this->hasModule(module.
getID()) && range(module.
getFloor())) {
 
  251        const double tx  =  
model.tx;
 
  252        const double tz  =  sqrt((1.0 + tx) * (1.0 - tx));
 
  260        const double ty  =  
model.ty;
 
  261        const double tz  =  sqrt((1.0 + ty) * (1.0 - ty));
 
  294  string             detectorFile_a;
 
  295  string             detectorFile_b;
 
  296  bool               overwriteDetector;
 
  305    JParser<> zap(
"Auxiliary program to align two detectors.");
 
  307    zap[
'a'] = 
make_field(detectorFile_a,      
"detector - subject to alignment (option -A)");
 
  308    zap[
'b'] = 
make_field(detectorFile_b,      
"detector - reference for alignment");
 
  309    zap[
'A'] = 
make_field(overwriteDetector,   
"overwrite detector file provided through '-a' with modified positions.");
 
  310    zap[
'T'] = 
make_field(tripodFile,          
"tripods")                               = 
"";
 
  312    zap[
'O'] = 
make_field(option,              
"keep strings vertical");
 
  318  catch(
const exception &error) {
 
  319    FATAL(error.what() << endl);
 
  323  if (overwriteDetector) {
 
  324    if (tripodFile == 
"") {
 
  325      FATAL(
"No tripod file.");
 
  334    load(detectorFile_a, detector_a);
 
  341    load(detectorFile_b, detector_b);
 
  348  const JFit_t fit(detector_b, sigma_m, option, range);
 
  352  for (JDetector::const_iterator module = detector_a.begin(); module != detector_a.end(); ++module) {
 
  353    if (fit.hasModule(module->
getID())) {
 
  354      data.push_back(*module);
 
  366  simplex.
step.resize(6);
 
  368  simplex.
step[0] = 
JModel_t(0.01, 0.00, 0.00, 0.0,    0.0, 0.0);
 
  369  simplex.
step[1] = 
JModel_t(0.00, 0.01, 0.00, 0.0,    0.0, 0.0);
 
  370  simplex.
step[2] = 
JModel_t(0.00, 0.00, 0.01, 0.0,    0.0, 0.0);
 
  371  simplex.
step[3] = 
JModel_t(0.00, 0.00, 0.00, 5.0e-4, 0.0, 0.0);
 
  372  simplex.
step[4] = 
JModel_t(0.00, 0.00, 0.00, 0.0, 1.0e-4, 0.0);
 
  373  simplex.
step[5] = 
JModel_t(0.00, 0.00, 0.00, 0.0, 0.0, 1.0e-4);
 
  375  const double chi2 = simplex(fit, data.begin(), data.end());
 
  378  cout << 
"chi2/NDF " << 
FIXED(7,3) << chi2 << 
'/' << (detector_a.size() - simplex.
step.size()) << endl;
 
  380  cout << 
"model:" << endl;
 
  382  cout << 
"x    " << 
FIXED(7,3) << simplex.
value.x   << endl;
 
  383  cout << 
"y    " << 
FIXED(7,3) << simplex.
value.y   << endl;
 
  384  cout << 
"z    " << 
FIXED(7,3) << simplex.
value.z   << endl;
 
  385  cout << 
"phi  " << 
FIXED(9,5) << simplex.
value.phi << endl;
 
  386  cout << 
"Tx   " << 
FIXED(9,5) << simplex.
value.tx  << endl;
 
  387  cout << 
"Ty   " << 
FIXED(9,5) << simplex.
value.ty  << endl;
 
  390  if (overwriteDetector) {
 
  392    NOTICE(
"Store alignment data on files " << detectorFile_a << 
" and " << tripodFile << endl);
 
  396    for (JDetector::iterator module = detector_a.begin(); module != detector_a.end(); ++module) {
 
  401      module->add(p2 - p1);
 
  405      store(detectorFile_a, detector_a);
 
  413    tripods.
load(tripodFile.c_str());
 
  422      tripod->add(p2 - 
p1);
 
  425    tripods.
store(tripodFile.c_str());
 
 
int main(int argc, char **argv)
 
Data structure for detector geometry and calibration.
 
Base class for data structures with artithmetic capabilities.
 
General purpose messaging.
 
Direct access to module in detector data structure.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Auxiliary class to define a range between two values.
 
Data structure for tripod.
 
int getFloor() const
Get floor number.
 
Router for direct addressing of module data in detector data structure.
 
Data structure for a composite optical module.
 
Simple fit method based on Powell's algorithm, see reference: Numerical Recipes in C++,...
 
std::vector< JModel_t > step
 
Data structure for position in three dimensions.
 
JPosition3D & rotate(const JRotation3D &R)
Rotate.
 
const JPosition3D & getPosition() const
Get position.
 
double getDistanceSquared(const JVector3D &pos) const
Get squared of distance to point.
 
int getID() const
Get identifier.
 
Utility class to parse command line options.
 
const JUTMPosition & getUTMPosition() const
Get UTM position.
 
JPosition3D getPosition(const Vec &pos)
Get position.
 
const JModule & getModule(const JType< JDetector_t > type, const int id, const JLocation &location=JLocation())
Get module according given detector type.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
 
void model(JModel_t &value)
Auxiliary function to constrain model during fit.
 
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
 
std::iterator_traits< T >::value_type getAverage(T __begin, T __end)
Get average.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.
 
Type definition of range.
 
Auxiliary wrapper for I/O of container with optional comment (see JComment).
 
void store(const char *file_name) const
Store to output file.
 
void load(const char *file_name)
Load from input file.
 
Auxiliary base class for aritmetic operations of derived class types.