42 inline double getRange(
const double E,
const double l_abs)
44 const double precision = 1.0e-6;
45 const double y0 = 1.0e-3;
50 for (
int i = 0; i != 1000; ++i) {
52 const double x = 0.5 * (xmin + xmax);
53 const double R = 1.0e3 *
pow(10.0, x);
55 const double y = E * 2.0e-9 * exp(-R/l_abs) / R;
57 if (fabs(y - y0) <= precision) {
76int main(
int argc,
char **argv)
88 size_t numberOfEvents;
98 double ZMax_m = 150.0;
112 JParser<> zap(
" Auxiliary program to write signal acoustic data.");
114 zap[
'a'] =
make_field(detectorFile,
"detector.");
118 zap[
'E'] =
make_field(E_GeV,
"neutrino energy [GeV]");
119 zap[
'R'] =
make_field(run,
"run number") = -1;
120 zap[
'T'] =
make_field(T_s,
"time interval between events [s]");
125 zap[
'W'] =
make_field(
id,
"waveform identifier");
131 catch(
const exception &error) {
132 FATAL(error.what() << endl);
136 gRandom->SetSeed(seed);
147 const double RMax_m =
getRange(E_GeV, parameters.l_abs);
152 TH1D h1(
"h1", NULL, 60, 6.0, 12.0);
154 for (Int_t i = 1; i <= h1.GetXaxis()->GetNbins(); ++i) {
156 const double x = h1.GetXaxis()->GetBinCenter(i);
157 const double E =
pow(10.0, x);
158 const double R =
getRange(E, parameters.l_abs);
160 h1.SetBinContent(i, R);
176 for (
size_t i = 0; i != numberOfEvents; ++i) {
186 gRandom->Sphere(x, y, z, 1.0);
192 const double t0 = T_s * i;
194 size_t number_of_hits = 0;
196 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
198 if (module->getFloor() != 0) {
205 if (sqrt(P.
getX()*P.
getX() + P.
getY()*P.
getY()) <= RMax_m && fabs(P.
getZ()) <= parameters.ZMax_m) {
207 const JReceiver receiver(module->getID(), module->getPosition(), module->getT0() * 1.0e-9);
212 toa.
TOA_NS = llrint(1E9*receiver.
putT(t0 + t1));
221 STATUS(
"event: " << setw(6) << i <<
' '
222 <<
FIXED(12,2) << t0 <<
' '
229 << setw(4) << number_of_hits << endl);
ROOT TTree parameter settings.
Data structure for detector geometry and calibration.
Recording of objects on file according a format that follows from the file name extension.
General purpose messaging.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse parameter values.
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
Auxiliary class to define a range between two values.
int main(int argc, char **argv)
Utility class to parse parameter values.
double getY() const
Get y position.
double getX() const
Get x position.
double getZmin() const
Get minimal z position.
double getZmax() const
Get maximal z position.
Data structure for position in three dimensions.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
double getY() const
Get y position.
JVector3D & add(const JVector3D &vector)
Add vector.
double getDistance(const JVector3D &pos) const
Get distance to point.
double getZ() const
Get z position.
JVector3D & sub(const JVector3D &vector)
Subtract vector.
double getX() const
Get x position.
Data structure for normalised vector in three dimensions.
double getDY() const
Get y direction.
double getDX() const
Get x direction.
double getDZ() const
Get z direction.
int getID() const
Get identifier.
Utility class to parse command line options.
Auxiliary classes and methods for acoustic position calibration.
static const JSoundVelocity getSoundVelocity(1541.0, -17.0e-3, -2000.0)
Function object for velocity of sound.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
T pow(const T &x, const double y)
Power .
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary classes and methods for ROOT I/O.
range_type getRange(TAxis *pAxis)
Get range of given axis.
Auxiliary data structure for floating point format specification.
Type definition of range.
double putT(const double t_s) const
Get uncorrected time.
Implementation for depth dependend velocity of sound.
virtual double getTime(const double D_m, const double z1, const double z2) const override
Get propagation time of sound.
Time-of-arrival data from acoustic piezo sensor or hydrophone.
uint32_t DOMID
DAQ run number.
int64_t TOA_NS
Unique ID of the waveform that best described the signal around TOA_NS.
uint32_t QUALITYFACTOR
The ticks (16ns) part of the DAQ frame timestamp.
uint32_t QUALITYNORMALISATION
A measure of how good the waveform match was to the signal.
int32_t WAVEFORMID
DOM unique identifeir.
int32_t RUN
detector identifier
Empty structure for specification of parser element that is initialised (i.e. does not require input)...