Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JMechanics.hh
Go to the documentation of this file.
1#ifndef __JACOUSTICS__JMECHANICS__
2#define __JACOUSTICS__JMECHANICS__
3
4#include <istream>
5#include <ostream>
6#include <fstream>
7#include <iomanip>
8#include <string>
9#include <map>
10#include <cmath>
11
12#include "JSystem/JStat.hh"
13
15#include "JLang/JManip.hh"
16#include "JLang/JException.hh"
17
18#include "Jeep/JeepToolkit.hh"
19#include "Jeep/JComment.hh"
20
21
22/**
23 * \file
24 *
25 * Mechanical modelling of string.
26 * \author mdejong
27 */
28namespace JACOUSTICS {}
29namespace JPP { using namespace JACOUSTICS; }
30
31namespace JACOUSTICS {
32
33 using JEEP::JComment;
35
36
37 /**
38 * Auxiliary data structure for parameters of mechanical model.\n
39 * This data structure provides for the implementation of the effective height conform the mechanical model of string.
40 */
41 struct JMechanics {
42 /**
43 * Default constructor.
44 */
46 a(0.0),
47 b(0.0)
48 {}
49
50
51 /**
52 * Constructor.
53 *
54 * \param a logarithmic term
55 * \param b linear term
56 */
57 JMechanics(const double a,
58 const double b) :
59 a(a),
60 b(b)
61 {}
62
63
64 /**
65 * Get effective height for given actual height.
66 *
67 * \param height height
68 * \return height
69 */
70 double getHeight(const double height) const
71 {
72 return height + this->b * log(1.0 - this->a * height);
73 }
74
75
76 /**
77 * Read parameters from input stream.
78 *
79 * \param in input stream
80 * \param parameters parameters
81 * \return input stream
82 */
83 friend inline std::istream& operator>>(std::istream& in, JMechanics& parameters)
84 {
85 return in >> parameters.a >> parameters.b;
86 }
87
88
89 /**
90 * Write parameters to output stream.
91 *
92 * \param out output stream
93 * \param parameters parameters
94 * \return output stream
95 */
96 friend inline std::ostream& operator<<(std::ostream& out, const JMechanics& parameters)
97 {
98 return out << FIXED(7,5) << parameters.a << ' '
99 << FIXED(7,3) << parameters.b;
100 }
101
102 double a; //!< <tt>0 <= a < (maximal height)⁻1;</tt> [m^-1]
103 double b; //!< <tt>0 <= b;</tt> [m]
104 };
105
106
107 /**
108 * Auxiliary data structure for mechanical model parameters of strings in a given detector.
109 *
110 * Note that the JDetectorMechanics::WILDCARD acts as default value for the string number.
111 */
113 public std::map<int, JMechanics>
114 {
115 enum {
116 WILDCARD = -1 //!< wild card for string number.
117 };
118
119
120 /**
121 * Get file name with mechanical model parameters for given detector identifier.
122 *
123 * \param id detector identifier
124 * \return file name
125 */
126 static std::string getFilename(const int id)
127 {
128 return MAKE_STRING("mechanics_" << FILL(8,'0') << id << ".txt");
129 }
130
131
132 /**
133 * Load mechanical model parameters from file.
134 *
135 * \param file_name file name
136 */
137 void load(const std::string& file_name)
138 {
139 std::ifstream in(file_name.c_str());
140
141 if (!in) {
142 THROW(JFileOpenException, "File not opened for reading: " << file_name);
143 }
144
145 in >> *this;
146
147 in.close();
148 }
149
150
151 /**
152 * Load mechanical model parameters for given detector identifier.
153 *
154 * \param id detector identifier
155 */
156 void load(const int id)
157 {
158 load(getFilename(id));
159 }
160
161
162 /**
163 * Get mechanical parameters for given string.
164 *
165 * \param string string number
166 * \return mechanical parameters
167 */
168 const JMechanics& operator()(const int string) const
169 {
170 static const JMechanics mechanics;
171
172 const_iterator p;
173
174 if ((p = this->find(string)) != this->end())
175 return p->second;
176 else if ((p = this->find(WILDCARD)) != this->end())
177 return p->second;
178 else
179 return mechanics;
180 }
181
182
183 /**
184 * Read detector mechanics from input.
185 *
186 * \param in input stream
187 * \param object detector mechanics
188 * \return input stream
189 */
190 friend inline std::istream& operator>>(std::istream& in, JDetectorMechanics& object)
191 {
192 using namespace JPP;
193
194 JStringStream is(in);
195
196 if (getFileStatus(is.str().c_str())) {
197 is.load();
198 }
199
200 object.clear();
201
202 is >> object.comment;
203
204 int string;
205 JMechanics mechanics;
206
207 while (is >> string >> mechanics) {
208 object[string] = mechanics;
209 }
210
211 return in;
212 }
213
214
215 /**
216 * Write detector mechanics to output.
217 *
218 * \param out output stream
219 * \param object detector mechanics
220 * \return output stream
221 */
222 friend inline std::ostream& operator<<(std::ostream& out, const JDetectorMechanics& object)
223 {
224 using namespace std;
225
226 out << object.comment;
227
228 for (JDetectorMechanics::const_iterator i = object.begin(); i != object.end(); ++i) {
229 out << setw(4) << i->first << ' ' << i->second << endl;
230 }
231
232 return out;
233 }
234
236 };
237
238
239 /**
240 * Function object to get string mechanics.
241 */
243}
244
245#endif
Exceptions.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
I/O manipulators.
#define MAKE_STRING(A)
Make string.
Definition JPrint.hh:63
File status.
Auxiliary methods for handling file names, type names and environment.
Exception for opening of file.
Wrapper class around STL stringstream class to facilitate optional loading of data from file.
void load()
Load data from file with name corresponding to current contents.
Auxiliary classes and methods for acoustic position calibration.
static JDetectorMechanics getMechanics
Function object to get string mechanics.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for sequence of same character.
Definition JManip.hh:330
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
Auxiliary data structure for mechanical model parameters of strings in a given detector.
void load(const int id)
Load mechanical model parameters for given detector identifier.
void load(const std::string &file_name)
Load mechanical model parameters from file.
const JMechanics & operator()(const int string) const
Get mechanical parameters for given string.
@ WILDCARD
wild card for string number.
static std::string getFilename(const int id)
Get file name with mechanical model parameters for given detector identifier.
friend std::istream & operator>>(std::istream &in, JDetectorMechanics &object)
Read detector mechanics from input.
friend std::ostream & operator<<(std::ostream &out, const JDetectorMechanics &object)
Write detector mechanics to output.
Auxiliary data structure for parameters of mechanical model.
Definition JMechanics.hh:41
double a
0 <= a < (maximal height)⁻1; [m^-1]
double b
0 <= b; [m]
JMechanics(const double a, const double b)
Constructor.
Definition JMechanics.hh:57
friend std::istream & operator>>(std::istream &in, JMechanics &parameters)
Read parameters from input stream.
Definition JMechanics.hh:83
friend std::ostream & operator<<(std::ostream &out, const JMechanics &parameters)
Write parameters to output stream.
Definition JMechanics.hh:96
double getHeight(const double height) const
Get effective height for given actual height.
Definition JMechanics.hh:70
JMechanics()
Default constructor.
Definition JMechanics.hh:45
Auxiliary class for comment.
Definition JComment.hh:43