clas12root
Loading...
Searching...
No Matches
region_particle.h
Go to the documentation of this file.
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6
7/*
8 * File: region_particle.h
9 * Author: dglazier
10 *
11 */
12
13#ifndef REGION_PARTICLE_H
14#define REGION_PARTICLE_H
15
16#include "clas12defs.h"
17#include "particle.h"
18#include "ftbparticle.h"
19#include "covmatrix.h"
20#include "calorimeter.h"
21#include "scintillator.h"
22#include "tracker.h"
23#include "utracker.h"
24#include "traj.h"
25#include "event.h"
26#include "cherenkov.h"
27#include "rich.h"
28#include "forwardtagger.h"
29#include "mcparticle.h"
30#include "mcmatch.h"
31
32
33namespace clas12 {
34
36
37
38 public:
39
40 region_particle()=default;
41
42 // region_particle(par_ptr pars,covmat_ptr cm);
43 // //For region_ft
44 // region_particle(par_ptr pars,covmat_ptr cm, ft_ptr ftp);
45 // //For region_cdet
46 // region_particle(par_ptr pars,covmat_ptr cm,
47 // scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj);
48 // //For region_fdet
49 // region_particle(par_ptr pars,covmat_ptr cm, cal_ptr calp,
50 // scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj, cher_ptr chp);
51 //For all regions
53 scint_ptr scp, trck_ptr trp, utrck_ptr utrp, traj_ptr trj,
55 rich_ptr rich,mcpar_ptr mcp=nullptr);
56
57 virtual ~region_particle() =default;
58
62 virtual bool sort(){
63 _pentry=_parts->getEntry();
64 //check if allowed by particle-bank filters
67 //check for covariance matrix
68 if(_covmat)_pcmat=_covmat->getIndex(_pentry);
69 if(_mcpart)_pmc=_mcpart->match_to(_pentry);
70 return true;
71 }
72
73 //solve FTB ambiguity at this stage
74 int getPid() const{
75 _parts->setEntry(_pentry);
76 if(_ftbparts==nullptr) return _parts->getPid();
77 return _useFTBPid*_ftbparts->getRows()?_ftbparts->getPid():_parts->getPid();
78 }
79 float getVt() const{
80 _parts->setEntry(_pentry);
81 if(_ftbparts==nullptr) return _parts->getVt();
82 auto vt = _useFTBPid*_ftbparts->getRows()?_ftbparts->getVt():_parts->getVt();
83 if(vt==-1)return getStartTime();
84 else return vt;
85 }
86 int getStatus() const{
87 _parts->setEntry(_pentry);
88 if(_ftbparts==nullptr) return _parts->getStatus();
89 return _useFTBPid*_ftbparts->getRows()?_ftbparts->getStatus():_parts->getStatus();
90 }
91 float getChi2Pid() const{
92 _parts->setEntry(_pentry);
93 if(_ftbparts==nullptr) return _parts->getChi2Pid();
94 return _useFTBPid*_ftbparts->getRows()?_ftbparts->getChi2Pid():_parts->getChi2Pid();
95 }
96 float getBeta() const{
97 _parts->setEntry(_pentry);
98 if(_ftbparts==nullptr) return _parts->getBeta();
99 return _useFTBPid*_ftbparts->getRows()?_ftbparts->getBeta():_parts->getBeta();
100 }
101
102
103 virtual double getTime() const=0;
104 virtual double getPath() const=0;
105 virtual double getDetEnergy() const=0;
106 virtual double getDeltaEnergy() const=0;
107 virtual short getSector() const=0;
108
109 event_ptr event() const{return _event;};
110 const par_ptr par() const{_parts->setEntry(_pentry);return _parts;};
111 ftbpar_ptr ftbpar() const{_ftbparts->setEntry(_pentry);return _ftbparts;};
112 covmat_ptr covmat() const{_covmat->setIndex(_pcmat);return _covmat;};
113 virtual cal_ptr cal(ushort lay) const{_cal->setIndex(-1);return _cal;};
114 virtual scint_ptr sci(ushort lay) const{_scint->setIndex(-1);return _scint;};
115 virtual trck_ptr trk(ushort lay) const{_trck->setIndex(-1);return _trck;};
116 virtual utrck_ptr utrk(ushort lay) const{_utrck->setIndex(-1);return _utrck;};
117 virtual traj_ptr traj(ushort det,ushort layer=0) const{_traj->setIndex(-1);return _traj;};
118 virtual cher_ptr che(ushort lay) const{_cher->setIndex(-1);return _cher;};
119 virtual rich_ptr rich() const{ _rich->setIndex(-1);return _rich;}
120
121 virtual ft_ptr ft(ushort lay) const{_ft->setIndex(-1);return _ft;};
122
123 const CovMatrix* cmat() const{_covmat->setIndex(_pcmat);return _covmat->matrix();};
124
125 mcpar_ptr mc() const{_mcpart->setMatchEntry(_pentry,_pmc);return _mcpart;};
126
127 short getIndex()const {return _pentry;}
128
129 short getRegion() const {return _region;}
130 double getTheta() const;
131 double getPhi() const;
132 double getP() const{
133 _parts->setEntry(_pentry);
134 if(_ftbparts==nullptr) return _parts->getP();
135 return _useFTBPid*_ftbparts->getRows()?_parts->getFTBP():_parts->getP(); }
136 double getPx() const{
137 _parts->setEntry(_pentry);
138 if(_ftbparts==nullptr) return _parts->getPx();
139 return _useFTBPid*_ftbparts->getRows()?_parts->getFTBPx():_parts->getPx(); }
140 double getPy() const{
141 _parts->setEntry(_pentry);
142 if(_ftbparts==nullptr) return _parts->getPy();
143 return _useFTBPid*_ftbparts->getRows()?_parts->getFTBPy():_parts->getPy(); }
144 double getPz() const{
145 _parts->setEntry(_pentry);
146 if(_ftbparts==nullptr) return _parts->getPz();
147 return _useFTBPid*_ftbparts->getRows()?_parts->getFTBPz():_parts->getPz(); }
148 double getStartTime() const{
149 if(_ftbparts==nullptr) return _event->getStartTime();
150 return _useFTBPid*_event->getFTBStartTime()?_event->getFTBStartTime():_event->getStartTime(); }
151
152 double getCalcMass() const;
153 double getGamma() const;
154 double getDeltaTime() const;
155 double getBetaFromP() const;
156 double getPdgMass() const;
157
159
160 double getMCThetaDiff() const {return getTheta()-mc()->getTheta();}
161 double getMCPhiDiff() const {return getPhi()-mc()->getPhi();}
162 double getMCPDiff() const {return getP()-mc()->getP();}
163
167 bool const& isAllowed() const {
168 if(_ftbparts==nullptr) return _allowed;
169 return _useFTBPid*_ftbparts->getRows() ? _allowed_ftb : _allowed;
170 }
171
172 //if(_parts->getCharge())
173 protected:
174
178 bool const bankAllowsRow(int const& row, hipo::bank const* bank) const {
179 // NOTE: `hipo::bank::getRowList()` returns the list of rows which are _allowed_ by `hipo::bank::filter()`; for example,
180 // `hipo::bank::filter` is used by iguana fiducial cut algorithms to select particles from `REC::Particle`
181 if(bank!=nullptr && bank->getRows()>0)
182 return std::find(bank->getRowList().begin(), bank->getRowList().end(), row) != bank->getRowList().end();
183 return false;
184 }
185
186 par_ptr _parts={nullptr};
189 ft_ptr _ft={nullptr};
190 cal_ptr _cal={nullptr};
191 scint_ptr _scint={nullptr};
192 trck_ptr _trck={nullptr};
193 utrck_ptr _utrck={nullptr};
194 traj_ptr _traj={nullptr};
195 cher_ptr _cher={nullptr};
196 event_ptr _event={nullptr};
197 rich_ptr _rich={nullptr};
198 // mcmatch_ptr _mcmatch={nullptr};
200
201
202 //particle index
203 short _pentry=-1;
204 short _pmc=-1;
205 short _pcmat=-1;
206 short _region=-1;
207 short _useFTBPid=0;
208
209 // filter status (from `hipo::bank::filter`)
210 bool _allowed{true}; // allowed by `_parts`, i.e., `REC::Particle`
211 bool _allowed_ftb{true}; // allowed by `_ftbparts`, i.e., `RECFT::Particle`
212 };
213 //pointer "typedef"
215 using region_part_uptr=std::unique_ptr<clas12::region_particle>;
216
217
218}
219
220#endif /* REGION_PARTICLE_H */
float getP() const noexcept
Definition mcparticle.h:65
float getTheta() const noexcept
Definition mcparticle.h:71
float getPhi() const noexcept
Definition mcparticle.h:78
Definition region_particle.h:35
event_ptr event() const
Definition region_particle.h:109
bool _allowed_ftb
Definition region_particle.h:211
mcpar_ptr mc() const
Definition region_particle.h:125
cal_ptr _cal
Definition region_particle.h:190
double getGamma() const
Definition region_particle.cpp:96
virtual cher_ptr che(ushort lay) const
Definition region_particle.h:118
int getPid() const
Definition region_particle.h:74
utrck_ptr _utrck
Definition region_particle.h:193
double getP() const
Definition region_particle.h:132
virtual short getSector() const =0
scint_ptr _scint
Definition region_particle.h:191
short _pmc
Definition region_particle.h:204
cher_ptr _cher
Definition region_particle.h:195
virtual double getPath() const =0
double getPdgMass() const
Definition region_particle.cpp:112
double getPx() const
Definition region_particle.h:136
short _useFTBPid
Definition region_particle.h:207
virtual ft_ptr ft(ushort lay) const
Definition region_particle.h:121
short _pcmat
Definition region_particle.h:205
ftbpar_ptr _ftbparts
Definition region_particle.h:187
double getDeltaTime() const
Definition region_particle.cpp:101
rich_ptr _rich
Definition region_particle.h:197
double getTheta() const
Definition region_particle.cpp:62
traj_ptr _traj
Definition region_particle.h:194
event_ptr _event
Definition region_particle.h:196
ft_ptr _ft
Definition region_particle.h:189
virtual ~region_particle()=default
float getChi2Pid() const
Definition region_particle.h:91
double getMCThetaDiff() const
Definition region_particle.h:160
short getRegion() const
Definition region_particle.h:129
short _pentry
Definition region_particle.h:203
virtual utrck_ptr utrk(ushort lay) const
Definition region_particle.h:116
double getPy() const
Definition region_particle.h:140
double getMCPDiff() const
Definition region_particle.h:162
void useFTBPid()
Definition region_particle.h:158
ftbpar_ptr ftbpar() const
Definition region_particle.h:111
trck_ptr _trck
Definition region_particle.h:192
virtual traj_ptr traj(ushort det, ushort layer=0) const
Definition region_particle.h:117
virtual double getDeltaEnergy() const =0
const par_ptr par() const
Definition region_particle.h:110
bool const bankAllowsRow(int const &row, hipo::bank const *bank) const
Definition region_particle.h:178
const CovMatrix * cmat() const
Definition region_particle.h:123
virtual double getDetEnergy() const =0
mcpar_ptr _mcpart
Definition region_particle.h:199
virtual cal_ptr cal(ushort lay) const
Definition region_particle.h:113
float getBeta() const
Definition region_particle.h:96
double getCalcMass() const
Definition region_particle.cpp:76
virtual scint_ptr sci(ushort lay) const
Definition region_particle.h:114
bool const & isAllowed() const
Whether or not this region_particle is allowed.
Definition region_particle.h:167
int getStatus() const
Definition region_particle.h:86
short _region
Definition region_particle.h:206
par_ptr _parts
Definition region_particle.h:186
double getStartTime() const
Definition region_particle.h:148
covmat_ptr covmat() const
Definition region_particle.h:112
virtual bool sort()
Definition region_particle.h:62
virtual rich_ptr rich() const
Definition region_particle.h:119
double getMCPhiDiff() const
Definition region_particle.h:161
double getPhi() const
Definition region_particle.cpp:70
double getPz() const
Definition region_particle.h:144
bool _allowed
Definition region_particle.h:210
covmat_ptr _covmat
Definition region_particle.h:188
double getBetaFromP() const
Definition region_particle.cpp:107
short getIndex() const
Definition region_particle.h:127
virtual double getTime() const =0
float getVt() const
Definition region_particle.h:79
virtual trck_ptr trk(ushort lay) const
Definition region_particle.h:115
Definition calextras.cpp:10
clas12::calorimeter * cal_ptr
Definition calorimeter.h:225
clas12::rich * rich_ptr
Definition rich.h:255
clas12::cherenkov * cher_ptr
Definition cherenkov.h:99
clas12::particle * par_ptr
Definition particle.h:118
clas12::ftbparticle * ftbpar_ptr
Definition ftbparticle.h:87
clas12::region_particle * region_part_ptr
Definition region_particle.h:214
clas12::traj * traj_ptr
Definition traj.h:93
clas12::mcparticle * mcpar_ptr
Definition mcparticle.h:144
std::vector< std::vector< float > > CovMatrix
Definition covmatrix.h:24
clas12::covmatrix * covmat_ptr
Definition covmatrix.h:87
clas12::utracker * utrck_ptr
Definition utracker.h:103
clas12::forwardtagger * ft_ptr
Definition forwardtagger.h:115
clas12::event * event_ptr
Definition event.h:74
clas12::scintillator * scint_ptr
Definition scintillator.h:133
clas12::tracker * trck_ptr
Definition tracker.h:73
std::unique_ptr< clas12::region_particle > region_part_uptr
Definition region_particle.h:215