8 const bool relSmearing,
10 const std::string& tracks){
15 smearingfile_ = std::make_shared<TFile>(smearingfile.c_str());
18 throw std::invalid_argument(
"Provided input smearing file does not exists");
25 throw std::invalid_argument(
"Top and Bottom smearing histograms not found in smearing file");
29 std::cout<<
"Setting up random engine with seed "<<seed<<std::endl;
30 generator_ = std::make_shared<std::default_random_engine>(seed);
32 normal_ = std::make_shared<std::normal_distribution<double>>(0.,1.);
38 double p = track.getP();
39 double nhits = track.getTrackerHitCount();
40 bool isTop = track.getTanLambda() > 0. ? true :
false;
44 std::cout<<
"Track nhits="<<nhits<<
" bin="<<binN<<std::endl;
48 std::cout<<
"Track nhits="<<nhits<<
" bin="<<binN<<
" rounding to bin=1"<< std::endl;
51 throw std::invalid_argument(
"Bin not found in smearing histogram");
54 double rel_smear = (*normal_)(*generator_);
71 std::cout<<
"Track isTop: "<<isTop<<
" nHits: "<<nhits<<
" p: "<<p<<
" deltaP=" << sp<<
" p'="<<psmear<<std::endl;
84 double unsmeared_magnitude = trk.
getP();
85 for (
double& coordinate : momentum)
86 coordinate *= (smeared_magnitude/unsmeared_magnitude);
std::vector< double > getMomentum()
void setMomentum(double bfield=0.52)