/* 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 .
*
*/
#include
#include "src/common_cpp/Utils/Globals.hh"
#include "src/common_cpp/Globals/GlobalsManager.hh"
#include "src/common_cpp/JsonCppProcessors/SpillProcessor.hh"
#include "src/common_cpp/DataStructure/ReconEvent.hh"
#include "src/map/MapCppTrackerPRSeed/MapCppTrackerPRSeed.hh"
#include "Utils/Exception.hh"
#include "src/common_cpp/Utils/CppErrorHandler.hh"
#include "src/common_cpp/API/PyWrapMapBase.hh"
#include "src/common_cpp/Recon/Kalman/KalmanTrack.hh"
namespace MAUS {
PyMODINIT_FUNC init_MapCppTrackerPRSeed(void) {
PyWrapMapBase::PyWrapMapBaseModInit
("MapCppTrackerPRSeed", "", "", "", "");
}
MapCppTrackerPRSeed::MapCppTrackerPRSeed()
: MapBase("MapCppTrackerPRSeed") {
}
MapCppTrackerPRSeed::~MapCppTrackerPRSeed() {
}
void MapCppTrackerPRSeed::_birth(const std::string& argJsonConfigDocument) {
if (!Globals::HasInstance()) {
GlobalsManager::InitialiseGlobals(argJsonConfigDocument);
}
// Json::Value *json = Globals::GetConfigurationCards();
}
void MapCppTrackerPRSeed::_death() {}
void MapCppTrackerPRSeed::_process(Data* data) const {
Spill *spill = data->GetSpill();
/* return if not physics spill */
if (spill->GetDaqEventType() != "physics_event")
return;
if (spill->GetReconEvents()) {
for (unsigned int k = 0; k < spill->GetReconEvents()->size(); k++) {
SciFiEvent *event = spill->GetReconEvents()->at(k)->GetSciFiEvent();
if (!event) {
continue;
}
event->clear_seeds();
const SciFiHelicalPRTrackPArray& helical = event->helicalprtracks();
const SciFiStraightPRTrackPArray& straight = event->straightprtracks();
SciFiSeedPArray seeds;
for (SciFiHelicalPRTrackPArray::const_iterator it = helical.begin();
it != helical.end(); ++it) {
seeds.push_back(_make_helical_seed(*it));
}
for (SciFiStraightPRTrackPArray::const_iterator it = straight.begin();
it != straight.end(); ++it) {
seeds.push_back(_make_straight_seed(*it));
}
event->set_seeds(seeds);
}
} else {
std::cout << "No recon events found\n";
}
}
SciFiSeed* MapCppTrackerPRSeed::_make_helical_seed(SciFiHelicalPRTrack* helical) const {
ThreeVector position = helical->get_seed_position();
ThreeVector momentum = helical->get_seed_momentum();
TMatrixD vector(5, 1);
TMatrixD covariance(5, 5);
vector(0, 0) = position.x();
vector(1, 0) = momentum.x();
vector(2, 0) = position.y();
vector(3, 0) = momentum.y();
vector(4, 0) = helical->get_charge() / momentum.z();
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 5; ++j) {
covariance(i, j) = 0.0;
}
}
covariance(0, 0) = 100.0;
covariance(1, 1) = 100.0;
covariance(2, 2) = 100.0;
covariance(3, 3) = 100.0;
covariance(4, 4) = 2.5e-7;
SciFiSeed* seed = new SciFiSeed();
seed->setTracker(helical->get_tracker());
seed->setStateVector(vector);
seed->setCovariance(covariance);
seed->setPRTrackTobject(helical);
seed->setAlgorithm(1);
return seed;
}
SciFiSeed* MapCppTrackerPRSeed::_make_straight_seed(SciFiStraightPRTrack* straight) const {
ThreeVector position = straight->get_seed_position();
ThreeVector momentum = straight->get_seed_momentum();
TMatrixD vector(4, 1);
TMatrixD covariance(4, 4);
vector(0, 0) = position.x();
vector(1, 0) = momentum.x()/momentum.z();
vector(2, 0) = position.y();
vector(3, 0) = momentum.y()/momentum.z();
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
covariance(i, j) = 0.0;
}
}
covariance(0, 0) = 100.0;
covariance(1, 1) = 100.0;
covariance(2, 2) = 100.0;
covariance(3, 3) = 1.0;
SciFiSeed* seed = new SciFiSeed();
seed->setTracker(straight->get_tracker());
seed->setStateVector(vector);
seed->setCovariance(covariance);
seed->setPRTrackTobject(straight);
seed->setAlgorithm(0);
return seed;
}
} // ~namespace MAUS