74{
   77 
   79 
   81  string          usr;
   82  string          pwd;
   83  string          cookie;
   84  string          detectorFile;
   86  JRange_t        validity;
   87  JRange_t        range;
   88  double          precision;
   90 
   91  try {
   92 
   93    JParser<> zap(
"Auxiliary program to decompose detector to separate calibrations.");
 
   94 
   99    zap[
'a'] = 
make_field(detectorFile, 
"detector file");
 
  101                          "\nFile name should contain wild card \'" << FILENAME_WILDCARD << "\' or"\
  104                                                                              &JCalibrationType::nick_name));
  105    zap[
'V'] = 
make_field(validity,     
"validity range UTC [s], e.g. \"<UTC min> <UTC max>\"")  = JRange_t(UTC_INVALID_S, UTC_INVALID_S);
 
  106    zap[
'r'] = 
make_field(range,        
"run range e.g. \"<first run> <last run>\"")             = JRange_t(RUN_INVALID,   RUN_INVALID);
 
  107    zap[
'p'] = 
make_field(precision,    
"precision for match with reference module")             = 1.0e-5;
 
  109 
  110    zap(argc, argv);
  111  }
  112  catch(const exception &error) {
  113    FATAL(error.what() << endl);
 
  114  }
  115 
  116 
  117 
  119 
  120  try {
  122  }
  125  }
  126 
  128    FATAL(
"No detector address map for detector identier " << 
detector.getID() << endl);
 
  129  }
  130 
  132 
  133  string userid = "";
  134  string detoid = "";
  135  string locid  = "";
  136 
  137  try {
  138 
  139    JDB::reset(usr, pwd, cookie);
  140 
  141    {
  143 
  144      for (
JPersons object; rs >> object; ) {
 
  145        userid  = object.OID;
  146      }
  147 
  148      rs.Close();
  149    }
  150    {
  152    
  154        locid   = object.LOCATIONID;
  155        detoid  = object.OID;
  156      }
  157 
  158      rs.Close();
  159    }
  160 
  161    if (range.getLowerLimit() != RUN_INVALID && validity.getLowerLimit() == UTC_INVALID_S) {
  162 
  164    
  165      for (
JRuns object; rs >> object; ) {
 
  166        validity.setLowerLimit(object.UNIXJOBSTART / 1000);
  167      }
  168 
  169      rs.Close();   
  170    }
  171 
  172    if (range.getUpperLimit() != RUN_INVALID && validity.getUpperLimit() == UTC_INVALID_S) {
  173 
  175    
  176      for (
JRuns object; rs >> object; ) {
 
  177        validity.setUpperLimit(object.UNIXJOBEND   / 1000);
  178      }
  179 
  180      rs.Close();   
  181    }
  182  }
  183  catch(const exception& error) {
  184    FATAL(error.what() << endl);
 
  185  }
  186 
  187 
  188  
  189 
  190  for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  191 
  192    if (module->getFloor() != 0) {
  193 
  195 
  196      const JRotation3D R = getRotation(buffer, *module);
 
  197 
  199 
  200      if (!JModule::compare(buffer, *module, precision)) {
  201 
  202        for (size_t i = 0; i != module->size(); ++i) {
  203          DEBUG(
"PMT " << setw(2) << i << 
' ' 
  207        }
  208        
  209        FATAL(
"Module " << setw(10) <<  module->getID() << 
' ' << module->getLocation() << 
" incompatible with reference." << endl);
 
  210      }
  211    }
  212  }
  213 
  214  const json header = { { UserId_t,      userid        },
 
  215                        { TypeId_t,      
json()        },
 
  216                        { LocationId_t,  locid         },
  217                        { DetOID_t,      detoid        },
  220                        getJSon(ValidFrom_t,    validity.getLowerLimit()),
  221                        getJSon(ValidThrough_t, validity.getUpperLimit()) };
  222 
  223  const json error  = { {Message_t,   
""            },
 
  224                        {Code_t,      OK_t          },
  225                        {Arguments_t, json::array() } };
  226 
  227 
  229 
  231  js[Error_t]                              = 
json(error); 
 
  232 
  234 
  236 
  237    for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  238      for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
  240      }
  241    }
  242 
  243    js[Data_t][0]                          = 
json(header);
 
  244    js[Data_t][0][PMTT0s_t]                = 
json(data);    
 
  245 
  247  }
  248 
  250 
  252 
  253    for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  254 
  255      const JModule& buffer = demo.
getModule(module->getID(), module->getLocation());
 
  256 
  259      else
  261    }
  262 
  263    js[Data_t][0]                          = 
json(header);
 
  264    js[Data_t][0][BasePositions_t]         = 
json(data[0]);
 
  265    js[Data_t][0][DOMPositions_t]          = 
json(data[1]);
 
  266 
  268  }
  269 
  271 
  273 
  274    for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  275 
  276      const JModule& buffer = demo.
getModule(module->getID(), module->getLocation());
 
  277 
  278      if (module->getFloor() != 0) {
  280      }
  281    }
  282 
  283    js[Data_t][0]                          = 
json(header);
 
  284    js[Data_t][0][DOMRotations_t]          = 
json(data);    
 
  285 
  287  }
  288 
  290 
  292 
  293    for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  294 
  295      if (module->getFloor() == 0)
  297      else
  299    }
  300 
  301    js[Data_t][0]                          = 
json(header);
 
  302    js[Data_t][0][BaseAcousticT0_t]        = 
json(data[0]);    
 
  303    js[Data_t][0][DOMAcousticT0_t]         = 
json(data[1]);    
 
  304 
  306  }
  307 
  309 
  311 
  312    for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  313      if (module->getFloor() == 0)
  315      else
  317    }
  318 
  319    js[Data_t][0]                          = 
json(header);
 
  320    js[Data_t][0][BaseCompassRotations_t]  = 
json(data[0]);    
 
  321    js[Data_t][0][DOMCompassRotations_t]   = 
json(data[1]);    
 
  322 
  324  }
  325 
  327 
  328    js[Data_t][0]                          = 
json(header);
 
  329 
  330    {
  332 
  333      for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  334        for (JModule::const_iterator pmt = module->begin(); pmt != module->end(); ++pmt) {
  336        }
  337      }
  338 
  339      js[Data_t][0][PMTStatusInfo_t ]      = 
json(data);
 
  340    }
  341    {
  343 
  344      for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  345        if (module->getFloor() == 0)
  347        else
  349      }
  350 
  351      js[Data_t][0][BaseStatusInfo_t]      = 
json(data[0]);
 
  352      js[Data_t][0][DOMStatusInfo_t]       = 
json(data[1]);
 
  353    }
  354 
  356  }
  357 
  358  return 0;
  359}
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Data structure for time calibration.
 
int getFloor() const
Get floor number.
 
Data structure for a composite optical module.
 
void rotate(const JRotation3D &R)
Rotate module.
 
Utility class to parse command line options.
 
JDirection3D getDirection(const Vec &dir)
Get direction.
 
JPosition3D getPosition(const Vec &pos)
Get position.
 
double getDot(const JNeutrinoDirection &first, const JNeutrinoDirection &second)
Dot product.
 
ResultSet & getResultSet(const std::string &query)
Get result set.
 
std::vector< JServer > getServernames()
Get list of names of available database servers.
 
JDetectorBuilder & getDetectorBuilder()
Get detector builder.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
JCalibration getCalibration(const JCalibration &first, const JCalibration &second)
Get calibration to go from first to second calibration.
 
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
 
bool hasDetectorAddressMap(const int id)
Check if detector address map is available.
 
std::string setWildCard(const std::string &file_name, const std::string &value)
Get file name by setting wild card to given value.
 
bool hasWildCard(const std::string &file_name)
Check presence of wild card.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.
 
Wrapper class for server name.
 
Template definition for getting table specific selector.
 
Auxiliary data structure for compass rotation.
 
Auxiliary interface for building detector.
 
const JModule & getModule(const int id=-1, const JLocation &location=JLocation()) const
Get module.
 
Auxiliary data structure for module time calibration.
 
Auxiliary data structure for module position.
 
Auxiliary data structure for module rotation.
 
Auxiliary data structure for module status.
 
Auxiliary data structure for PMT time calibration.
 
Auxiliary data structure for PMT status.
 
Auxiliary data structure for streaming of STL containers.
 
Auxiliary data structure for correspondence between nick and full name of calibration types.
 
Auxiliary class for date and time.
 
std::string toString() const
Get ASCII formatted date and time.