BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcNavigation.h
Go to the documentation of this file.
1#include "AIDA/IHistogram1D.h"
2#include "CLHEP/Vector/ThreeVector.h"
3#include "GaudiKernel/Algorithm.h"
4#include "GaudiKernel/NTuple.h"
5#include "HepPDT/ParticleDataTable.hh"
6#include "MagneticField/IMagneticFieldSvc.h"
7#include "McTruth/McParticle.h"
8#include "McTruth/MdcMcHit.h"
9#include "MdcGeomSvc/IMdcGeomSvc.h"
10#include "MdcGeomSvc/MdcGeoLayer.h"
11#include "MdcGeomSvc/MdcGeoWire.h"
12#include "MdcRecEvent/RecMdcHit.h"
13#include "MdcRecEvent/RecMdcTrack.h"
14#include "RawDataProviderSvc/RawDataProviderSvc.h"
15#include <math.h>
16#include <string>
17#include <vector>
18
19class MdcDetector;
20class TH1F;
21class TH2F;
22
23class MdcNavigation : public Algorithm {
24public:
25 MdcNavigation( const std::string& name, ISvcLocator* pSvcLocator );
26 StatusCode initialize();
27 StatusCode execute();
28 StatusCode finalize();
29 StatusCode beginRun();
30
31private:
32 // calculate momentum using helix parameters of fitted track
33 Hep3Vector momentum( const RecMdcTrack* trk );
34 StatusCode bookNTuple();
35 StatusCode fillInit();
36 StatusCode fillRecTrack( const RecMdcTrack* it, int mcTkNum, int recTkNum );
37 StatusCode fillRecHits( RecMdcHitCol& hitCol );
38 StatusCode fillEvent();
39 StatusCode skipMcParticle( const Event::McParticle* it, int nKindSkiped, int* keepedPart );
40 double poca( const MdcDigi* aDigi, const HepVector helixPar, const HepSymMatrix errMat );
41 double probab( const int& ndof, const double& chisq );
42
43 HepPDT::ParticleDataTable* m_particleTable;
44 RawDataProviderSvc* m_rawDataProviderSvc;
45 IMagneticFieldSvc* m_pIMF;
46
47 bool m_poca;
48 bool m_debug;
49 const MdcDetector* m_gm;
50 int havedigi[43][288];
51 short multiTdcCount[43][288];
52 bool m_hist;
53 int m_mc;
54 bool m_doSag;
55 bool m_rawData;
56 int m_maxMdcDigi;
57 bool m_keepBadTdc;
58 bool m_dropHot;
59 bool m_keepUnmatch;
60 long t_eventNo;
61 long t_runNo;
62 double t_t0;
63 double t_t0Stat;
64 double t_t0Truth;
65 int t_nTk;
66 int t_recTkNum;
67 int t_mcTkNum;
68 int t_trkRecoTk;
69 int t_curlTk;
70 int t_patRecTk;
71 int t_xRecTk;
72 int m_nMcHit;
73 int* keepedParticles;
74 double m_d0Cut;
75 double m_z0Cut;
76 double nNoise;
77 long nDigiTk[100];
78 long digiLayer[100]; // mc digi per track; 50 track/event most
79
80 NTuple::Tuple* g_tupleMc;
81 NTuple::Tuple* g_tupleRec;
82 NTuple::Tuple* g_tupleEvt;
83
84 AIDA::IHistogram1D* g_layerEff;
85 NTuple::Item<double> m_na_p;
86 NTuple::Item<double> m_na_pt;
87 NTuple::Item<double> m_na_pz;
88 NTuple::Item<double> m_na_d0;
89 NTuple::Item<double> m_na_phi0;
90 NTuple::Item<double> m_na_cpa;
91 NTuple::Item<double> m_na_z0;
92 NTuple::Item<double> m_na_tanl;
93 NTuple::Item<double> m_na_q;
94 NTuple::Item<double> m_na_d0E;
95 NTuple::Item<double> m_na_phi0E;
96 NTuple::Item<double> m_na_cpaE;
97 NTuple::Item<double> m_na_z0E;
98 NTuple::Item<double> m_na_tanlE;
99
100 NTuple::Item<double> m_na_dP;
101 NTuple::Item<double> m_na_dPt;
102 NTuple::Item<double> m_na_dPz;
103 NTuple::Item<double> m_na_dD0;
104 NTuple::Item<double> m_na_dPhi0;
105 NTuple::Item<double> m_na_dCpa;
106 NTuple::Item<double> m_na_dZ0;
107 NTuple::Item<double> m_na_dTanl;
108
109 NTuple::Item<double> m_na_d0Res;
110 NTuple::Item<double> m_na_phi0Res;
111 NTuple::Item<double> m_na_cpaRes;
112 NTuple::Item<double> m_na_z0Res;
113 NTuple::Item<double> m_na_tanlRes;
114
115 NTuple::Item<long> m_na_nHit;
116 NTuple::Item<long> m_na_nDigi;
117 NTuple::Item<double> m_na_nEvtNoise;
118 NTuple::Item<double> m_na_nAct;
119 NTuple::Item<double> m_na_nNoise;
120 NTuple::Item<double> m_na_nMatch;
121 NTuple::Item<double> m_na_nSt;
122 NTuple::Item<double> m_na_nDof;
123 NTuple::Item<double> m_na_fiTerm;
124 NTuple::Item<double> m_na_chi2;
125 NTuple::Item<double> m_na_chi2Dof;
126 NTuple::Item<double> m_na_chi2Prob;
127 NTuple::Item<double> m_na_mcTkNum;
128 NTuple::Item<double> m_na_mcTkId;
129 NTuple::Item<double> m_na_recTkNum;
130
131 NTuple::Item<double> m_na_mcpid;
132 NTuple::Item<double> m_na_mcp;
133 NTuple::Item<double> m_na_mcpt;
134 NTuple::Item<double> m_na_mcpx;
135 NTuple::Item<double> m_na_mcpy;
136 NTuple::Item<double> m_na_mcpz;
137 NTuple::Item<double> m_na_mcd0;
138 NTuple::Item<double> m_na_mcphi0;
139 NTuple::Item<double> m_na_mcz0;
140 NTuple::Item<double> m_na_mctheta;
141 NTuple::Item<double> m_na_mccpa;
142 NTuple::Item<double> m_na_mcq;
143 NTuple::Item<double> m_na_mcfifin;
144 NTuple::Item<double> m_na_mcflag;
145 NTuple::Item<long> m_na_tkStat;
146
147 NTuple::Item<long> m_na_tkId;
148 NTuple::Item<double> m_na_evtNo;
149 NTuple::Array<double> m_na_resid;
150 NTuple::Array<double> m_na_driftD;
151 NTuple::Array<long> m_na_act;
152 NTuple::Array<double> m_na_driftT;
153 NTuple::Array<double> m_na_doca;
154 NTuple::Array<double> m_na_entra;
155 NTuple::Array<double> m_na_zhit;
156 NTuple::Array<double> m_na_chi2add;
157 NTuple::Array<double> m_na_flaglr;
158 NTuple::Array<double> m_na_hitStat;
159 NTuple::Array<double> m_na_Tdc;
160 NTuple::Array<double> m_na_Adc;
161 NTuple::Array<double> m_na_layer;
162 NTuple::Array<double> m_na_wire;
163 NTuple::Array<double> m_na_gwire;
164 NTuple::Array<double> m_na_hitTkId;
165 NTuple::Array<double> m_na_digiTkId;
166 NTuple::Array<double> m_na_digiLayer;
167
168 NTuple::Item<double> m_na_t2mcp;
169 NTuple::Item<double> m_na_t2mcpt;
170 NTuple::Item<double> m_na_t2mcphi;
171 NTuple::Item<double> m_na_t2mctheta;
172 NTuple::Item<double> m_na_t2tanl;
173 NTuple::Item<double> m_na_t2recTkNum;
174 NTuple::Item<double> m_na_t2mcTkNum;
175 NTuple::Item<double> m_na_t2p;
176 NTuple::Item<double> m_na_t2pt;
177
178 NTuple::Item<double> m_na_t3recTk;
179 NTuple::Item<double> m_na_t3mcTk;
180 NTuple::Item<long> m_na_t3TrkReco;
181 NTuple::Item<long> m_na_t3Curl;
182 NTuple::Item<long> m_na_t3PatRec;
183 NTuple::Item<long> m_na_t3XRec;
184 NTuple::Item<double> m_na_t3evtNo;
185 NTuple::Item<double> m_na_t3t0;
186 NTuple::Item<double> m_na_t3t0Truth;
187 NTuple::Item<double> m_na_t3t0Stat;
188 NTuple::Item<double> m_na_t3timing;
189
190 NTuple::Item<long> m_na_t3runNo;
191 NTuple::Item<long> m_na_t3nDigi;
192 NTuple::Array<long> m_na_t3layer;
193 NTuple::Array<long> m_na_t3wire;
194 NTuple::Array<long> m_na_t3gwire;
195 NTuple::Array<double> m_na_t3rt;
196 NTuple::Array<double> m_na_t3rtNot0;
197 NTuple::Array<double> m_na_t3rc;
198 NTuple::Array<double> m_na_t3phi;
199 NTuple::Array<double> m_na_t3xMid;
200 NTuple::Array<double> m_na_t3yMid;
201 NTuple::Array<long> m_na_t3ovfl;
202 NTuple::Array<long> m_na_t3tNum;
203};
**********INTEGER nmxhep !maximum number of particles DOUBLE PRECISION vhep INTEGER jdahep COMMON hepevt $ !serial number $ !number of particles $ !status code $ !particle ident KF $ !parent particles $ !childreen particles $ !four momentum
StatusCode initialize()
StatusCode execute()
StatusCode finalize()
StatusCode beginRun()
MdcNavigation(const std::string &name, ISvcLocator *pSvcLocator)