8 #ifndef _DTrackCandidate_factory_CDC_
9 #define _DTrackCandidate_factory_CDC_
15 #include "TDirectory.h"
17 #include <JANA/JFactory.h>
32 const char*
Tag(
void){
return "CDC";}
44 WIRE_DIRECTION_AXIAL = 0,
45 WIRE_DIRECTION_STEREOLEFT = 1,
46 WIRE_DIRECTION_STEREORIGHT = 2
89 bool Are_AllHitsOnRingShared(
const DCDCSuperLayerSeed* locCDCSuperLayerSeed,
int locRing)
const;
90 inline void Get_Hits(vector<DCDCTrkHit*>& locHits)
const
93 for(
size_t loc_i = 0; loc_i < dCDCRingSeeds.size(); ++loc_i)
94 locHits.insert(locHits.end(), dCDCRingSeeds[loc_i].hits.begin(), dCDCRingSeeds[loc_i].hits.end());
115 void Strip_StereoSuperLayerSeed(
unsigned int locSuperLayer);
117 void Truncate_Circle(
unsigned int locNewLastSuperLayer);
120 void Get_AllStereoSuperLayerSeeds(vector<DCDCSuperLayerSeed*>& locStereoSuperLayerSeeds);
121 unsigned int Get_NumStereoSuperLayerSeeds(
void);
159 void BracketMinimumChisq(
double &a,
double &b,
double &
c,
double &chi2a,
double &chi2b,
double &chi2c);
160 double FindMinimumChisq(
double a,
double b,
double c,
double &lambda);
161 double ChiXY(
double lambda);
179 typedef vector<vector<DCDCRingSeed> >::iterator
ringiter;
183 jerror_t brun(JEventLoop *locEventLoop, int32_t runnumber);
184 jerror_t evnt(JEventLoop *locEventLoop, uint64_t eventnumber);
189 void Reset_Pools(
void);
196 jerror_t Get_CDCHits(JEventLoop* loop);
197 void Find_SuperLayerSeeds(vector<DCDCTrkHit*>& locSuperLayerHits,
unsigned int locSuperLayer);
198 void Link_RingSeeds(vector<DCDCRingSeed*>& parent,
ringiter ring,
ringiter ringend,
unsigned int locSuperLayer,
unsigned int locNumPreviousRingsWithoutHit);
200 double MinDist2(
const vector<DCDCTrkHit*>& locInnerSeedHits,
const vector<DCDCTrkHit*>& locOuterSeedHits);
201 void Reject_SuperLayerSeeds_HighSeedDensity(
unsigned int locSuperLayer);
202 void Calc_SuperLayerPhiRange(
DCDCSuperLayerSeed* locSuperLayerSeed,
double& locSeedFirstPhi,
double& locSeedLastPhi);
203 bool Check_IfPhiRangesOverlap(
double locFirstSeedPhi,
double locLastSeedPhi,
double locTargetFirstPhi,
double locTargetLastPhi);
206 void Set_SpiralLinkParams(
void);
209 bool SearchFor_SpiralTurn_ManyHitsAdjacentRing(
DCDCSuperLayerSeed* locSuperLayerSeed1,
DCDCSuperLayerSeed* locSuperLayerSeed2,
int locRingToCheck,
int locMinStrawsAdjacentRing,
int& locMaxSpiralNumHits);
212 void Print_SuperLayerSeeds(
void);
215 bool Build_TrackCircles(vector<DCDCTrackCircle*>& locCDCTrackCircles);
216 bool Link_SuperLayers(vector<DCDCTrackCircle*>& locCDCTrackCircles,
unsigned int locOuterSuperLayer);
217 void Link_SuperLayers_FromAxial(vector<DCDCTrackCircle*>& locCDCTrackCircles,
unsigned int locOuterSuperLayer,
unsigned int locInnerSuperLayer);
218 void Link_SuperLayers_FromStereo(vector<DCDCTrackCircle*>& locCDCTrackCircles,
unsigned int locOuterSuperLayer,
unsigned int locInnerSuperLayer);
219 bool Link_SuperLayers_FromStereo_ToAxial(vector<DCDCTrackCircle*>& locCDCTrackCircles,
unsigned int locOuterSuperLayer,
unsigned int locInnerSuperLayer);
220 void Link_SuperLayers_FromStereo_ToStereo(vector<DCDCTrackCircle*>& locCDCTrackCircles,
unsigned int locOuterSuperLayer,
unsigned int locInnerSuperLayer);
221 bool Check_IfShouldAttemptLink(
const DCDCSuperLayerSeed* locSuperLayerSeed,
bool locInnerSeedFlag);
227 void Print_TrackCircles(vector<DCDCTrackCircle*>& locCDCTrackCircles);
229 void Reject_DefiniteSpiralArms(vector<DCDCTrackCircle*>& locCDCTrackCircles);
230 void Drop_IncompleteGroups(vector<DCDCTrackCircle*>& locCDCTrackCircles);
231 void Fit_Circles(vector<DCDCTrackCircle*>& locCDCTrackCircles,
bool locFitOnlyIfNullFitFlag,
bool locAddStereoLayerIntersectionsFlag,
bool locFitDuringLinkingFlag =
false);
235 void Handle_StereoAndFilter(vector<DCDCTrackCircle*>& locCDCTrackCircles,
bool locFinalPassFlag);
236 void Truncate_TrackCircles(vector<DCDCTrackCircle*>& locCDCTrackCircles);
237 void Set_HitBitPattern_Axial(vector<DCDCTrackCircle*>& locCDCTrackCircles);
238 void Filter_TrackCircles_Axial(vector<DCDCTrackCircle*>& locCDCTrackCircles);
241 bool Calc_StereoPosition(
const DCDCWire *wire,
const DHelicalFit* fit,
DVector3 &pos,
double &var_z,
double& locPhiStereo,
double d = 0.0);
244 bool Select_CDCSuperLayerSeeds(
DCDCTrackCircle* locCDCTrackCircle,
bool locFinalPassFlag);
245 void Select_ThetaZStereoHits(
const DCDCTrackCircle* locCDCTrackCircle,
int locInnerSeedSeriesIndex,
int locOuterSeedSeriesIndex,
bool locFinalPassFlag, vector<DCDCTrkHit*>& locComboHits);
246 void Calc_StereoHitDeltaPhis(
unsigned int locSuperLayer, vector<DCDCTrkHit*>& locHits,
const DCDCTrackCircle* locCDCTrackCircle, vector<pair<DCDCTrkHit*, double> >& locDeltaPhis);
247 double MinDeltaPhi(
const vector<DCDCTrkHit*>& locInnerSeedHits,
const vector<DCDCTrkHit*>& locOuterSeedHits);
249 bool Find_ThetaZ(
const DHelicalFit* locFit,
const vector<DCDCTrkHit*>& locStereoHits,
double& locTheta,
double& locZ,
double& locChiSqPerNDF);
250 bool Find_ThetaZ_Regression(
const DHelicalFit* locFit,
const vector<DCDCTrkHit*>& locStereoHits,
double& locTheta,
double& locZ,
double& locChiSqPerNDF);
251 bool Find_Theta(
const DHelicalFit* locFit,
const vector<DCDCTrkHit*>& locStereoHits,
double& locTheta,
double& locThetaMin,
double& locThetaMax,
double& locChiSqPerNDF);
252 bool Find_Z(
const DHelicalFit* locFit,
const vector<DCDCTrkHit*>& locStereoHits,
double locThetaMin,
double locThetaMax,
double& locZ);
253 void Set_HitBitPattern_All(vector<DCDCTrackCircle*>& locCDCTrackCircles);
254 void Filter_TrackCircles_Stereo(vector<DCDCTrackCircle*>& locCDCTrackCircles);
257 void Add_UnusedHits(vector<DCDCTrackCircle*>& locCDCTrackCircles);
323 #endif // _DTrackCandidate_factory_CDC_
unsigned char dSuperLayer
float dWeightedChiSqPerDF
double dFactorForSenseOfRotation
const DMagneticFieldMap * dMagneticField
vector< unsigned int > dNumStrawsPerRing
float dWeightedChiSqPerDF_Stereo
double MAX_COMMON_HIT_FRACTION
size_t MAX_DCDCTrkHitPoolSize
bool dValidStereoHitPosFlag
unsigned int MIN_STRAWS_DEFINITE_SPIRAL_TURN
unsigned int MIN_STRAWS_ADJACENT_TO_SPIRAL_TURN
vector< DHelicalFit * > dHelicalFitPool_Available
signed char dSpiralTurnRing
vector< const DCDCTrackCircle * > dTruncationSourceCircles
vector< DCDCTrkHit * > cdctrkhits
unsigned int SEED_DENSITY_BIN_STRAW_WIDTH
vector< vector< DCDCSuperLayerSeed * > > dSuperLayerSeeds_InnerStereo
vector< vector< DCDCSuperLayerSeed * > > dSuperLayerSeeds_OuterStereo
vector< DCDCTrkHit * > hits
bool ENABLE_DEAD_HV_BOARD_LINKING
unsigned int MAX_SEEDS_IN_STRAW_BIN
unsigned int MAX_ALLOWED_CDC_HITS
wire_direction_t dWireOrientation
vector< DCDCRingSeed > dCDCRingSeeds
unsigned int MAX_STRAWS_BETWEEN_LINK_SPIRAL_TURN
map< DCDCTrkHit *, unsigned int > dStereoHitNumUsedMap
unsigned int MIN_STRAWS_POTENTIAL_SPIRAL_TURN
vector< unsigned int > HitBitPattern
vector< DCDCTrkHit * > dCDCTrkHitPool_All
vector< DCDCSuperLayerSeed * > dSuperLayerSeeds_Axial
double Dist2(DCDCTrkHit *trkhit) const
size_t MAX_HelicalFitPoolSize
void Get_Hits(vector< DCDCTrkHit * > &locHits) const
unsigned int MIN_PRUNED_STEREO_HITS
double MIN_CIRCLE_ASYMMETRY
vector< DHelicalFit * > dHelicalFitPool_All
vector< vector< DCDCTrkHit * > > cdchits_by_superlayer
vector< DCDCTrkHit * > dCDCTrkHitPool_Available
double MAX_UNUSED_HIT_LINK_ANGLE
vector< vector< DCDCSuperLayerSeed * > > dSuperLayerSeeds
size_t MAX_DCDCSuperLayerSeedPoolSize
unsigned int MAX_SUPERLAYER_NEW_TRACK
size_t MAX_DCDCTrackCirclePoolSize
signed char dDefiniteSpiralTurnRingFlag
unsigned int MAX_ALLOWED_TRACK_CIRCLES
vector< DCDCTrackCircle * > dCDCTrackCirclePool_Available
vector< vector< DCDCRingSeed > >::iterator ringiter
unsigned int MIN_SEED_HITS
bool dHasNonTruncatedSeedsFlag_InnerStereo
vector< DCDCTrackCircle * > dCDCTrackCirclePool_All
bool dHasNonTruncatedSeedsFlag_OuterStereo
vector< DCDCSuperLayerSeed * > dCDCSuperLayerSeedPool_All
signed char dSpiralTurnRingFlag
signed char dSpiralTurnRing
DTrackCandidate_factory_CDC()
vector< DCDCSuperLayerSeed * > dCDCSuperLayerSeedPool_Available
double MAX_SEED_TIME_DIFF
map< unsigned int, vector< pair< double, double > > > dRejectedPhiRegions
unsigned int MAX_NUM_RINGSEED_RINGS_SKIPABLE
unsigned int dNumSeedDensityPhiBins
map< int, DSpiralParams_t > dSpiralLinkParams
vector< unsigned int > superlayer_boundaries