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));
 
  289 int main(
int argc, 
char **argv)
 
  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)
 
const JModule & getModule(const JDetector &detector, const JModuleLocation &location)
find module with a given string and floor number
 
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.
 
JModule & add(const JVector3D &pos)
Add position.
 
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.
 
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.
 
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.
 
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.
 
JModel_t & sub(const JModel_t &model)
Subtract model.
 
JModel_t & add(const JModel_t &model)
Add model.
 
JModel_t & div(const double factor)
Scale model.
 
JModel_t & negate()
Negate model.
 
JModel_t & mul(const double factor)
Scale model.