18 #define ansi_escape ((char)0x1b)
19 #define ansi_bold ansi_escape<<"[1m"
20 #define ansi_normal ansi_escape<<"[0m"
21 #define ansi_red ansi_escape<<"[31m"
22 #define ansi_green ansi_escape<<"[32m"
23 #define ansi_blue ansi_escape<<"[34m"
26 #define ONE_OVER_SQRT12 0.288675
29 pair<double,const DCDCTrackHit *>b){
30 if (a.second->wire->ring!=b.second->wire->ring)
31 return (a.second->wire->ring>b.second->wire->ring);
32 return (a.first>b.first);
35 pair<double,const DFDCPseudo *>b){
36 if (a.second->wire->layer!=b.second->wire->layer)
37 return (a.second->wire->layer>b.second->wire->layer);
38 return (a.first>b.first);
50 gPARMS->SetDefaultParameter(
"TRKFIT:HS_DEBUG_LEVEL",
HS_DEBUG_LEVEL,
"Debug verbosity level for hit selector used in track fitting (0=no debug messages)");
51 gPARMS->SetDefaultParameter(
"TRKFIT:MAKE_DEBUG_TREES",
MAKE_DEBUG_TREES,
"Create a TTree with debugging info on hit selection for the FDC and CDC");
56 loop->GetJApplication()->Lock();
58 cdchitsel= (TTree*)gROOT->FindObject(
"cdchitsel");
60 cdchitsel =
new TTree(
"cdchitsel",
"CDC Hit Selector");
61 cdchitsel->Branch(
"H", &
cdchitdbg,
"fit_type/I:p/F:theta:mass:sigma:mom_factor:x:y:z:s:s_factor:itheta02:itheta02s:itheta02s2:dist:doca:resi:sigma_total:chisq:prob");
64 jerr<<
" !!! WARNING !!!"<<endl;
65 jerr<<
"It appears that the cdchitsel TTree is already defined."<<endl;
66 jerr<<
"This is probably means you are running with multiple threads."<<endl;
67 jerr<<
"To avoid complication, filling of the hit selector debug"<<endl;
68 jerr<<
"trees will be disabled for this thread."<<endl;
73 fdchitsel= (TTree*)gROOT->FindObject(
"fdchitsel");
75 fdchitsel =
new TTree(
"fdchitsel",
"FDC Hit Selector");
76 fdchitsel->Branch(
"H", &
fdchitdbg,
"fit_type/I:p/F:theta:mass:sigma_anode:sigma_cathode:mom_factor_anode:mom_factor_cathode:x:y:z:s:s_factor_anode:s_factor_cathode:itheta02:itheta02s:itheta02s2:dist:doca:resi:u:u_cathodes:resic:sigma_anode_total:sigma_cathode_total:chisq:prob:prob_anode:prob_cathode:pull_anode:pull_cathode");
79 jerr<<
" !!! WARNING !!!"<<endl;
80 jerr<<
"It appears that the fdchitsel TTree is already defined."<<endl;
81 jerr<<
"This is probably means you are running with multiple threads."<<endl;
82 jerr<<
"To avoid complication, filling of the hit selector debug"<<endl;
83 jerr<<
"trees will be disabled for this thread."<<endl;
88 loop->GetJApplication()->Unlock();
106 vector<pair<double,const DCDCTrackHit*> >cdchits_tmp;
122 double one_over_beta =
sqrt(1.0+my_mass*my_mass/(p*p));
143 double g = 0.350/
sqrt(log(2.0));
146 double mom_factor = 1.0+exp(-p_over_g*p_over_g);
149 int old_straw=1000,old_ring=1000;
152 double MIN_HIT_PROB = 0.05;
153 vector<const DCDCTrackHit*>::const_iterator iter;
154 for(iter=cdchits_in.begin(); iter!=cdchits_in.end(); iter++){
177 double tof = s*one_over_beta/29.98;
178 dist = (hit->
tdrift - tof)*55E-4;
188 double sigma_total =
sigma;
189 double s_factor = 1.0;
191 s_factor = 1.0 + s/50.0;
192 sigma_total *= s_factor;
196 double resi = dist - doca;
198 double chisq=resi*resi/(sigma_total*sigma_total);
201 double probability = TMath::Prob(chisq, 1);
202 if(probability>=MIN_HIT_PROB){
203 pair<double,const DCDCTrackHit*>myhit;
204 myhit.first=probability;
206 cdchits_tmp.push_back(myhit);
237 static bool printed_first =
false;
239 _DBG_<<
"=== Printing first entry for CDC hit selector debug tree ==="<<endl;
261 printed_first =
true;
268 jerr<<
"s="<<s<<
" doca="<<doca<<
" dist="<<dist<<
" resi="<<resi<<
" sigma="<<sigma_total<<
" prob="<<probability<<endl;
280 old_straw=1000,old_ring=1000;
281 for (
unsigned int i=0;i<cdchits_tmp.size();i++){
282 if (cdchits_tmp[i].second->wire->ring!=old_ring ||
283 abs(cdchits_tmp[i].second->wire->straw-old_straw)==1){
284 cdchits_out.push_back(cdchits_tmp[i].second);
286 old_straw=cdchits_tmp[i].second->wire->straw;
287 old_ring=cdchits_tmp[i].second->wire->ring;
297 vector<pair<double,const DFDCPseudo*> >fdchits_tmp;
318 double mom_factor = 1.0;
319 if(p<1.0)mom_factor = 1.0/p;
326 double mass_factor=my_mass/0.13957;
327 if (my_mass<0.13957) mass_factor=1.;
330 double MIN_HIT_PROB = 0.01;
332 vector<const DFDCPseudo*>::const_iterator iter;
333 for(iter=fdchits_in.begin(); iter!=fdchits_in.end(); iter++){
339 double doca=rt->
DistToRT(fdc_pos,&s);
342 double fdc_var=mom_factor*mom_factor*mass_factor*mass_factor*(1.0*1.0+0.3*0.3)/12.;
344 if (fit_type==
kHelical) fdc_var*=25.;
345 double chisq=doca*doca/fdc_var;
346 double MAX_HIT_DOCA = 30;
347 double probability = (doca<MAX_HIT_DOCA)?TMath::Prob(chisq, 1):0.;
348 if(probability>=MIN_HIT_PROB){
349 pair<double,const DFDCPseudo*>myhit;
350 myhit.first=probability;
352 fdchits_tmp.push_back(myhit);
402 jerr<<
"s="<<s<<
" doca="<<doca<<
" chisq="<<chisq<<
" prob="<<probability<<endl;
413 int old_layer=1000,old_wire=1000;
414 for (
unsigned int i=0;i<fdchits_tmp.size();i++){
415 if (fdchits_tmp[i].second->wire->layer!=old_layer ||
416 abs(fdchits_tmp[i].second->wire->wire-old_wire)==1){
417 fdchits_out.push_back(fdchits_tmp[i].second);
419 old_wire=fdchits_tmp[i].second->wire->wire;
420 old_layer=fdchits_tmp[i].second->wire->layer;
DVector2 xy
rough x,y coordinates in lab coordinate system
const swim_step_t * GetLastSwimStep(void) const
DVector3 GetLastDOCAPoint(void) const
const DFDCWire * wire
DFDCWire for this wire.
DTrackHitSelectorALT1(jana::JEventLoop *loop)
class DFDCPseudo: definition for a reconstructed point in the FDC
The DTrackHitSelector class is a base class for algorithms that will select hits from the drift chamb...
void GetFDCHits(fit_type_t fit_type, const DReferenceTrajectory *rt, const vector< const DFDCPseudo * > &fdchits_in, vector< const DFDCPseudo * > &fdchits_out, int N=20) const
static bool DTrackHitSelector_fdchit_cmp(pair< double, const DFDCPseudo * >a, pair< double, const DFDCPseudo * >b)
void GetCDCHits(fit_type_t fit_type, const DReferenceTrajectory *rt, const vector< const DCDCTrackHit * > &cdchits_in, vector< const DCDCTrackHit * > &cdchits_out, int N=20) const
double DistToRT(double x, double y, double z) const
Double_t sigma[NCHANNELS]
double GetMass(void) const
static bool DTrackHitSelector_cdchit_cmp(pair< double, const DCDCTrackHit * >a, pair< double, const DCDCTrackHit * >b)
virtual ~DTrackHitSelectorALT1()