61 long long int Tmax_s = 600;
63 double sigma_deg = 1.0;
64 double stdev = numeric_limits<double>::max();
65 int numberOfOutliers = 0;
67 bool overwriteDetector;
80 JParser<> zap(
"Program to calibrate in situ AHRS.");
82 zap[
'f'] =
make_field(inputFile,
"output of JConvertDB -q ahrs");
83 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
86 zap[
'c'] =
make_field(ahrsFile,
"output of JAHRSCalibration");
93 catch(
const exception &error) {
94 FATAL(error.what() << endl);
131 JManager_t H0(
new TH1D(
"%.twist", NULL, 100, 0.0, 5.0));
132 JManager_t H1(
new TH1D(
"%.swing", NULL, 250, 0.0, 2.5));
133 JManager_t HN(
new TH1D(
"%.count", NULL, 100, -0.5, 99.5));
137 range.getLength() + 1,
range.getLowerLimit() - 0.5,
range.getUpperLimit() + 0.5);
139 for (Int_t i = 1; i <= h2.GetXaxis()->GetNbins(); ++i) {
140 h2.GetXaxis()->SetBinLabel(i,
MAKE_CSTRING(
string.at(i-1)));
142 for (Int_t i = 1; i <= h2.GetYaxis()->GetNbins(); ++i) {
146 TH2D* h1 = (TH2D*) h2.Clone(
"h1");
155 for (JMultipleFileScanner_t::const_iterator file_name = inputFile.begin(); file_name != inputFile.end(); ++file_name) {
157 STATUS(
"processing file " << *file_name << endl);
165 if (
is_valid(*parameters) && router.hasModule(parameters->
DOMID)) {
166 data[router.getModule(parameters->
DOMID).getString()].push_back(*parameters);
172 sort(i->second.begin(), i->second.end(),
make_comparator(&JAHRS::UNIXTIME));
176 long long int t1 = p->UNIXTIME;
177 long long int t2 = t1;
181 for ( ; p != i->second.end() && p->UNIXTIME < t1 + Tmax_s * 1000; t2 = (p++)->UNIXTIME) {
183 if (calibration.has(p->DOMID)) {
185 const JModule& module = router.getModule(p->DOMID);
189 const JCompass compass(*p, calibration.get(p->DOMID));
193 buffer.push_back(
JHit(p->DOMID, module.
getZ(),
Q, sigma_deg));
198 if (buffer.size() > JModel::NUMBER_OF_PARAMETERS) {
202 const JLocation& location = router.getModule(hit->getID());
211 for (
int ns = 0; ns != numberOfOutliers; ++ns) {
229 if (xmax > stdev * sigma_deg) {
231 const JLocation& location = router.getModule(out->getID());
243 cout <<
"remove " << location <<
' '
249 swap(*out, *--__end);
261 simplex.step.resize(4);
268 const double chi2 = simplex(
getChi2, buffer.begin(), __end);
269 const int ndf =
distance(buffer.begin(), __end) * 4 - simplex.step.size();
287 H0[hit->getID()]->Fill(
getAngle(q1.twist, q2.twist));
288 H1[hit->getID()]->Fill(
getAngle(q1.swing, q2.swing));
294 count[hit->getID()] += 1;
298 HN[i->first]->Fill(i->second);
310 for (JManager_t* p : { &H0, &H1, &HN }) {
311 for (JManager_t::iterator i = p->begin(); i != p->end(); ++i) {
319 if (overwriteDetector) {
321 NOTICE(
"Store calibration data on file " << detectorFile << endl);
323 if (
detector.setToLatestVersion()) {
324 NOTICE(
"Set detector version to " <<
detector.getVersion() << endl);
static int debug
debug level (default is off).
Utility class to parse command line options.
double getAngle(const JQuaternion3D &first, const JQuaternion3D &second)
Get space angle between quanternions.
Q(UTCMax_s-UTCMin_s)-livetime_s
This class represents a rotation around the x-axis.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
int getFloor() const
Get floor number.
Data structure for a composite optical module.
JQuaternion3D getConjugate() const
Get conjugate of this quaternion.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
#define gmake_property(A)
macro to convert (template) parameter to JPropertiesElement object
Router for direct addressing of module data in detector data structure.
Utility class to parse parameter values.
JEvt getEvt(const JHead &header, const JModel &model)
Get event.
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
#define MAKE_CSTRING(A)
Make C-string.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Long64_t counter_type
Type definition for counter.
Auxiliary data structure for floating point format specification.
floor_range getRangeOfFloors(const JDetector &detector)
Get range of floors.
Template spacialisation for averaging quaternions.
const JQuaternion3D & getQuaternion() const
Get quaternion.
static const int COMPASS_DISABLE
Enable (disable) use of compass if this status bit is 0 (1);.
Model for fit to acoustics data.
Auxiliary data structure for chi2 evaluation.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
void setQuaternion(const JQuaternion3D &quaternion)
Set quaternion.
Logical location of module.
bool has(const int bit) const
Test PMT status.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
This class represents a rotation around the z-axis.
bool is_valid(const json &js)
Check validity of JSon data.
Data structure for compass in three dimensions.
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
static const double PI
Mathematical constants.
int getIndex()
Get index for user I/O manipulation.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
Data structure for unit quaternion in three dimensions.
z range($ZMAX-$ZMIN)< $MINIMAL_DZ." fi fi typeset -Z 4 STRING typeset -Z 2 FLOOR JPlot1D -f $
int getString() const
Get string number.
Auxiliary base class for list of file names.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Router for mapping of string identifier to index.
General purpose class for object reading from a list of file names.
This class represents a rotation around the y-axis.
static const JVector3D JVector3Z_t(0, 0, 1)
unit z-vector
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
Auxiliary class to map module identifier to AHRS calibration.
do set_variable DETECTOR_TXT $WORKDIR detector
Auxiliary data structure for decomposition of quaternion in twist and swing quaternions.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
double getZ() const
Get z position.
Auxiliary data structure to check validity of AHRS data.