32 int main(
int argc,
char **argv)
37 string fileDescriptor;
51 zap[
'O'] =
make_field(option) =
"KM3NeT",
"Antares";
61 catch(
const exception &error) {
62 FATAL(error.what() << endl);
67 typedef JSplineFunction1S_t JFunction1D_t;
69 JMapList<JPolint1FunctionalMap,
70 JMapList<JPolint1FunctionalGridMap,
71 JMapList<JPolint1FunctionalGridMap> > > JMapList_t;
72 typedef JPDFTable<JFunction1D_t, JMapList_t> JPDF_t;
82 const double TTS = 2.0;
84 const double epsilon = 1.0e-10;
86 const int NUMBER_OF_PDFS =
sizeof(pdf_t)/
sizeof(pdf_t[0]);
88 JPDF_t pdf[NUMBER_OF_PDFS];
90 const JPDF_t::JSupervisor supervisor(
new JPDF_t::JDefaultResult(
JMATH::zero));
92 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
96 const string file_name =
getFilename(fileDescriptor, pdf_t[i]);
98 NOTICE(
"loading PDF from file " << file_name <<
"... " << flush);
100 pdf[i].load(file_name.c_str());
104 pdf[i].setExceptionHandler(supervisor);
107 catch(
const JException& error) {
108 FATAL(error.what() << endl);
117 if (option ==
"KM3NeT") {
119 PMT.push_back(JAngle3D(3.142, 0.000));
120 PMT.push_back(JAngle3D(2.582, 0.524));
121 PMT.push_back(JAngle3D(2.582, 1.571));
122 PMT.push_back(JAngle3D(2.582, 2.618));
123 PMT.push_back(JAngle3D(2.582, 3.665));
124 PMT.push_back(JAngle3D(2.582, 4.712));
125 PMT.push_back(JAngle3D(2.582, 5.760));
126 PMT.push_back(JAngle3D(2.162, 0.000));
127 PMT.push_back(JAngle3D(2.162, 1.047));
128 PMT.push_back(JAngle3D(2.162, 2.094));
129 PMT.push_back(JAngle3D(2.162, 3.142));
130 PMT.push_back(JAngle3D(2.162, 4.189));
131 PMT.push_back(JAngle3D(2.162, 5.236));
132 PMT.push_back(JAngle3D(1.872, 0.524));
133 PMT.push_back(JAngle3D(1.872, 1.571));
134 PMT.push_back(JAngle3D(1.872, 2.618));
135 PMT.push_back(JAngle3D(1.872, 3.665));
136 PMT.push_back(JAngle3D(1.872, 4.712));
137 PMT.push_back(JAngle3D(1.872, 5.760));
138 PMT.push_back(JAngle3D(1.270, 0.000));
139 PMT.push_back(JAngle3D(1.270, 1.047));
140 PMT.push_back(JAngle3D(1.270, 2.094));
141 PMT.push_back(JAngle3D(1.270, 3.142));
142 PMT.push_back(JAngle3D(1.270, 4.189));
143 PMT.push_back(JAngle3D(1.270, 5.236));
144 PMT.push_back(JAngle3D(0.980, 0.524));
145 PMT.push_back(JAngle3D(0.980, 1.571));
146 PMT.push_back(JAngle3D(0.980, 2.618));
147 PMT.push_back(JAngle3D(0.980, 3.665));
148 PMT.push_back(JAngle3D(0.980, 4.712));
149 PMT.push_back(JAngle3D(0.980, 5.760));
151 }
else if (option ==
"Antares") {
153 PMT.push_back(JAngle3D(2.36, +1.05));
154 PMT.push_back(JAngle3D(2.36, 3.14));
155 PMT.push_back(JAngle3D(2.36, -1.05));
159 FATAL(
"Fatal error at detector option " << option << endl);
165 const JRotation3D
R(dir);
168 *i = JDirection3D(*i).rotate(R);
175 TH1D h0(
"L0", NULL, 300, 1.0, 151.0);
176 TH1D
h1(
"L1", NULL, 300, 1.0, 151.0);
179 for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
181 const double R = h0.GetBinCenter(i);
187 V += (pdf[0](
R,
pmt->getTheta(), abs(
pmt->getPhi()), 0.0).V +
188 pdf[1](
R,
pmt->getTheta(), abs(
pmt->getPhi()), 0.0).V +
189 pdf[2](
R,
pmt->getTheta(), abs(
pmt->getPhi()), 0.0).V * E_GeV +
190 pdf[3](
R,
pmt->getTheta(), abs(
pmt->getPhi()), 0.0).V * E_GeV);
193 h0.SetBinContent(i, 1.0 - TMath::PoissonI(0,V));
201 const double Tmin = -15.0;
202 const double Tmax = +250.0;
203 const double dt = 1.0;
206 for (
int i = 1; i <= h1.GetNbinsX(); ++i) {
208 const double R = h1.GetBinCenter(i);
212 for (
double x = Tmin; x <= Tmax; x += dt) {
218 Vi[
pmt] = ((pdf[0](
R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x + TMax_ns).
v +
219 pdf[1](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x + TMax_ns).
v +
220 pdf[2](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x + TMax_ns).
v * E_GeV +
221 pdf[3](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x + TMax_ns).
v * E_GeV)
226 pdf[1](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x).
v +
227 pdf[2](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x).
v * E_GeV +
228 pdf[3](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x).
v * E_GeV));
239 const double y = (pdf[0](
R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x).
f +
240 pdf[1](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x).
f +
241 pdf[2](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x).
f * E_GeV +
242 pdf[3](R,
PMT[
pmt].getTheta(), abs(
PMT[
pmt].getPhi()), x).
f * E_GeV);
245 Y += y * (1.0 - TMath::PoissonI(0, V - Vi[
pmt])) * dt;
250 h1.SetBinContent(i, 1.0 - TMath::PoissonI(0,Y));
Utility class to parse command line options.
direct light from EM showers
then for HISTOGRAM in h0 h1
static const JZero zero
Function object to assign zero value.
Various implementations of functional maps.
esac $JPP_DIR examples JDetector JTransitTime o $OUTPUT_FILE n N $NPE T $TTS_NS d $DEBUG for HISTOGRAM in tts tt2 pmt
Numbering scheme for PDF types.
scattered light from muon
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
scattered light from EM showers
then usage $script[distance] fi case set_variable R
General purpose messaging.
Empty structure for specification of parser element that is not initialised (i.e. does require input)...
Utility class to parse command line options.
JDAQPMTIdentifier PMT
Command line options.
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
int main(int argc, char *argv[])