58 int main(
int argc,
char **argv)
62 using namespace KM3NETDAQ;
79 JParser<> zap(
"Example program to test chi2 calculations of co-variance matrix including direction uncertainty.");
84 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
96 catch(
const exception& error) {
97 FATAL(error.what() << endl);
101 using namespace KM3NETDAQ;
106 const unsigned int NUMBER_OF_HITS = 6;
107 const double STANDARD_DEVIATIONS = 3.0;
108 const double HIT_OFF = 1.0e3 * sigma_ns*sigma_ns;
129 TH1D h0(
"h0", NULL, 40, 0.0, 20.0);
130 TH1D
h1(
"h1", NULL, 40, 0.0, 20.0);
132 TH1D p0(
"p0", NULL, 20, 0.0, 1.0);
133 TH1D
p1(
"p1", NULL, 20, 0.0, 1.0);
140 for ( ; x < 10.0; x += 1.0) {
X.push_back(x); }
141 for ( ; x < 25.0; x += 2.0) {
X.push_back(x); }
142 for ( ; x < 100.0; x += 5.0) {
X.push_back(x); }
145 TProfile n0(
"n0", NULL,
X.size() - 1,
X.data());
146 TProfile n1(
"n1", NULL,
X.size() - 1,
X.data());
155 while (inputFile.hasNext()) {
157 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
162 const Evt*
event = ps;
168 if (muon != event->mc_trks.end()) {
177 const double theta = alpha_deg *
PI / 180.0;
178 const double phi = gRandom->Uniform(0.0, 2*
PI);
187 buildL2(*tev, moduleRouter, back_inserter(data));
189 data.erase(unique(data.begin(), data.end(), equal_to<JDAQModuleIdentifier>()), data.end());
210 sort(i->second.begin(), i->second.end(), less<JHit>());
212 data.push_back(i->second[0]);
219 data.erase(
clusterizeWeight(data.begin(), data.end(), match3B), data.end());
224 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
228 data.erase(
clusterizeWeight(data.begin(), data.end(), match1D), data.end());
238 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
239 i->sub(tz.getPosition());
247 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
252 if (data.size() >= NUMBER_OF_HITS + numberOfOutliers) {
254 JData_t::iterator __end = data.end();
256 for (
int n = 0;
n < numberOfOutliers &&
distance(data.begin(), __end) > NUMBER_OF_HITS; ++
n) {
259 JData_t::iterator kill = __end;
261 for (JData_t::iterator i = data.begin(); i != __end; ++i) {
263 const double y = fabs(i->getT() - tz.getT(*i)) / sigma_ns;
271 if (ymax >= STANDARD_DEVIATIONS)
272 iter_swap(kill, --__end);
277 const double chi2 =
getChi2(tz, data.begin(), __end, sigma_ns);
278 const int N =
distance(data.begin(), __end);
281 p0.Fill(TMath::Prob(chi2, N));
282 n0.Fill((
double) data.size(), (double) N / (
double) data.size());
286 if (data.size() >= NUMBER_OF_HITS + numberOfOutliers) {
291 V.
set(tz, data.begin(), data.end(), alpha_deg, sigma_ns);
292 Y.
set(tz, data.begin(), data.end());
296 unsigned int N = data.size();
298 for (
int n = 0; n < numberOfOutliers && N > NUMBER_OF_HITS; ++
n, --
N) {
303 for (
unsigned int i = 0; i != V.
size(); ++i) {
305 const double y =
getChi2(Y, V, i);
313 if (ymax >= STANDARD_DEVIATIONS * STANDARD_DEVIATIONS)
319 const double chi2 = V.
getDot(Y);
322 p1.Fill(TMath::Prob(chi2, N));
323 n1.Fill((
double) data.size(), (double) N / (
double) data.size());
Router for direct addressing of PMT data in detector data structure.
Data structure for angles in three dimensions.
Utility class to parse command line options.
int main(int argc, char *argv[])
ROOT TTree parameter settings of various packages.
Match operator for Cherenkov light from muon with given direction.
void set(const JVector3D &pos, T __begin, T __end, const double alpha, const double sigma)
Set co-variance matrix.
Algorithms for hit clustering and sorting.
Synchronously read DAQ events and Monte Carlo events (and optionally other events).
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
JPMTIdentifier getIdentifier(const JPMTAddress &address) const
Get identifier of PMT.
static double getDot(const variance &first, const variance &second)
Get dot product.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Recording of objects on file according a format that follows from the file name extension.
Router for direct addressing of module data in detector data structure.
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
then for HISTOGRAM in h0 h1
const JPMT & getPMT(const JPMTAddress &address) const
Get PMT.
JVertex3D & add(const JVertex3D &value)
Addition operator.
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
double getTime(const Hit &hit)
Get true time of hit.
void update(const size_t k, const double value)
Update inverted matrix at given diagonal element.
Basic data structure for time and time over threshold information of hit.
static struct JTRIGGER::@76 clusterizeWeight
Anonymous struct for weighed clustering of hits.
Data structure for detector geometry and calibration.
bool is_noise(const Hit &hit)
Verify hit origin.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
Basic data structure for L0 hit.
int first
index of module in detector data structure
Auxiliary class for defining the range of iterations of objects.
Determination of the time residual vector of hits for a track along z-axis (JFIT::JLine1Z).
Match operator for Cherenkov light from muon in any direction.
JDirection3D getDirection(const Vec &dir)
Get direction.
Data structure for vector in three dimensions.
Determination of the co-variance matrix of hits for a track along z-axis (JFIT::JLine1Z).
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Data structure for PMT geometry and calibration.
JPosition3D getPosition(const Vec &pos)
Get position.
then break fi done getCenter read X Y Z let X
double putTime() const
Get Monte Carlo time minus DAQ/trigger time.
static const double PI
Mathematical constants.
void set(const JLine1Z &track, T __begin, T __end)
Set time residual vector.
Direct access to PMT in detector data structure.
General purpose messaging.
Auxiliary include file for time conversion between DAQ/trigger hit and Monte Carlo hit...
void invert()
Invert matrix according LDU decomposition.
Direct access to module in detector data structure.
size_t size() const
Get dimension of matrix.
Data structure for L2 parameters.
then echo Variable JPP_DIR undefined exit fi source $JPP_DIR setenv sh $JPP_DIR set_variable NORTH set_variable EAST set_variable SOUTH set_variable WEST set_variable WORKDIR tmp set_variable R set_variable CT set_variable YMAX set_variable YMIN if do_usage *then usage $script[distance] fi case set_variable R
const double getSpeedOfLight()
Get speed of light.
Address of PMT in detector data structure.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Utility class to parse command line options.
Data structure for L0 hit.
alias put_queue eval echo n
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
Data structure for fit of straight line paralel to z-axis.
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector
General purpose class for multiple pointers.
double getChi2(const double P)
Get chi2 corresponding to given probability.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
then usage $script[input file[working directory[option]]] nWhere option can be N
const JPMTAddress & getAddress(const JObjectID &id) const
Get address of PMT.
Basic data structure for L1 hit.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
3D match criterion with road width.