/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus
*
* MAUS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MAUS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MAUS. If not, see .
*
*/
// C headers
#include
// Other headers
#include "Config/MiceModule.hh"
#include "src/common_cpp/DataStructure/SciFiEvent.hh"
#include "src/common_cpp/DataStructure/SciFiSpacePoint.hh"
#include "src/common_cpp/DataStructure/SciFiCluster.hh"
#include "src/common_cpp/Recon/SciFi/SciFiSpacePointRec.hh"
#include "gtest/gtest.h"
namespace MAUS {
class SciFiSpacePointRecTest : public ::testing::Test {
protected:
SciFiSpacePointRecTest() {}
virtual ~SciFiSpacePointRecTest() {}
virtual void SetUp() {}
virtual void TearDown() {}
};
TEST_F(SciFiSpacePointRecTest, test_process) {
int tracker = 1;
int station = 2;
int plane = 0;
int channel = 106;
double npe = 3.2;
double time = 12.2;
ThreeVector direction(0.0, 0.0, 1.0);
ThreeVector position(1.0, 2.0, 3.0);
SciFiCluster *Cluster = new SciFiCluster();
Cluster->set_tracker(tracker);
Cluster->set_station(station);
Cluster->set_plane(plane);
Cluster->set_channel(channel);
Cluster->set_npe(npe);
Cluster->set_time(time);
Cluster->set_direction(direction);
Cluster->set_position(position);
SciFiEvent event;
event.add_cluster(Cluster);
SciFiSpacePointRec test;
test.process(event);
int size = event.spacepoints().size();
EXPECT_EQ(0., size);
SciFiCluster *Cluster2 = new SciFiCluster();
Cluster2->set_tracker(tracker);
Cluster2->set_station(station);
Cluster2->set_plane(1);
Cluster2->set_channel(channel);
Cluster->set_npe(npe);
Cluster2->set_time(time);
Cluster2->set_direction(direction);
Cluster2->set_position(position);
}
TEST_F(SciFiSpacePointRecTest, test_duplet_radius) {
SciFiSpacePointRec a_test;
SciFiCluster* c1 = new SciFiCluster();
SciFiCluster* c2 = new SciFiCluster();
ThreeVector pos1(5.78222, -11.6053, -751.132);
ThreeVector pos2(-50.6352, -0.604, -749.828);
ThreeVector dir1(-0.866025, -0.5, 0);
ThreeVector dir2(0.866025, -0.5, 0);
c1->set_direction(dir1);
c2->set_direction(dir2);
c1->set_position(pos1);
c2->set_position(pos2);
bool test_1 = a_test.duplet_within_radius(c1, c2);
EXPECT_TRUE(test_1);
ThreeVector pos3(300.0, -11.6053, -751.132);
ThreeVector pos4(300.0, -0.604, -749.828);
c1->set_direction(pos3);
c2->set_direction(pos4);
bool test_2 = a_test.duplet_within_radius(c1, c2);
EXPECT_FALSE(test_2);
}
TEST_F(SciFiSpacePointRecTest, test_clusters_arent_used) {
SciFiCluster* c1 = new SciFiCluster();
SciFiCluster* c2 = new SciFiCluster();
SciFiCluster* c3 = new SciFiCluster();
SciFiSpacePointRec a_test;
bool expect_true_triplets = a_test.clusters_are_not_used(c1, c2, c3);
bool expect_true_duplets = a_test.clusters_are_not_used(c1, c2);
EXPECT_TRUE(expect_true_triplets);
EXPECT_TRUE(expect_true_duplets);
c1->set_used(true);
bool expect_false_triplets = a_test.clusters_are_not_used(c1, c2, c3);
bool expect_false_duplets = a_test.clusters_are_not_used(c1, c2);
EXPECT_FALSE(expect_false_triplets);
EXPECT_FALSE(expect_false_duplets);
}
TEST_F(SciFiSpacePointRecTest, test_kuno_test) {
SciFiCluster* c1 = new SciFiCluster();
SciFiCluster* c2 = new SciFiCluster();
SciFiCluster* c3 = new SciFiCluster();
c1->set_tracker(0);
c2->set_tracker(0);
c3->set_tracker(0);
c1->set_station(1);
c2->set_station(1);
c3->set_station(1);
c1->set_plane(0);
c2->set_plane(1);
c3->set_plane(2);
c1->set_channel(106);
c2->set_channel(106);
c3->set_channel(106);
SciFiSpacePointRec a_test;
bool expect_true = a_test.kuno_accepts(c1, c2, c3);
EXPECT_TRUE(expect_true);
c1->set_station(4);
bool expect_false = a_test.kuno_accepts(c1, c2, c3);
EXPECT_FALSE(expect_false);
}
TEST_F(SciFiSpacePointRecTest, test_make_cluster_container) {
SciFiEvent event;
// Create 12 clusters belonging to dif planes...
int tracker = 0;
int station = 1;
int plane = 0;
for ( int i = 0; i < 60; ++i ) {
SciFiCluster* cluster = new SciFiCluster();
cluster->set_tracker(tracker);
cluster->set_station(station);
cluster->set_plane(plane);
event.add_cluster(cluster);
tracker < 1 ? tracker += 1 : 0;
station < 5 ? station += 1 : 1;
plane < 2 ? plane += 1 : 0;
}
std::vector clusters[2][6][3];
SciFiSpacePointRec a_test;
a_test.make_cluster_container(event, clusters);
for ( int tracker = 0; tracker < 1; ++tracker ) {
for ( int station = 1; station < 6; ++station ) {
for ( int plane = 0; plane < 3; ++plane ) {
int numb_clusters = clusters[tracker][station][plane].size();
for ( int clust_i = 0; clust_i < numb_clusters; ++clust_i ) {
SciFiCluster* cluster = (clusters[tracker][station][plane])[clust_i];
int cluster_tracker = cluster->get_tracker();
int cluster_station = cluster->get_station();
int cluster_plane = cluster->get_plane();
EXPECT_EQ(tracker, cluster_tracker);
EXPECT_EQ(station, cluster_station);
EXPECT_EQ(plane, cluster_plane);
}
}
}
}
}
/*
TEST_F(SciFiSpacePointRecTest, test_builds) {
SciFiCluster* c1 = new SciFiCluster();
SciFiCluster* c2 = new SciFiCluster();
SciFiCluster* c3 = new SciFiCluster();
c1->set_spill(1);
c1->set_event(1);
c1->set_npe(3.);
c2->set_npe(3.);
c3->set_npe(3.);
SciFiSpacePoint* triplet(c1, c2, c3);
SciFiSpacePointRec a_test;
a_test.build_triplet(triplet);
_tracker = clust1->get_tracker();
_station = clust1->get_station();
}
*/
} // ~namespace MAUS