19 #ifndef TPCDigiProcessor_h
20 #define TPCDigiProcessor_h 1
22 #include <marlin/Processor.h>
27 #include <gsl/gsl_rng.h>
29 #ifdef MARLIN_USE_AIDA
31 #include <marlin/AIDAProcessor.h>
32 #include <AIDA/IHistogramFactory.h>
33 #include <AIDA/ICloud1D.h>
44 #include <AIDA/AIDA.h>
52 #include <EVENT/LCCollection.h>
53 #include <IMPL/LCCollectionVec.h>
54 #include <EVENT/MCParticle.h>
55 #include <EVENT/SimTrackerHit.h>
56 #include <IMPL/TrackerHitImpl.h>
57 #include <UTIL/CellIDEncoder.h>
59 #include "CLHEP/Vector/TwoVector.h"
65 using namespace lcio ;
66 using namespace marlin ;
67 #ifdef MARLIN_USE_AIDA
68 using namespace AIDA ;
138 virtual void init() ;
142 virtual void processRunHeader( LCRunHeader* run ) ;
146 virtual void processEvent( LCEvent * evt ) ;
149 virtual void check( LCEvent * evt ) ;
156 void writeVoxelToHit(
Voxel_tpc* aVoxel) ;
157 void writeMergedVoxelsToHit( std::vector <Voxel_tpc*>* hitList ) ;
158 void plotHelixHitResidual(MCParticle *mcp, CLHEP::Hep3Vector *thisPointRPhi);
159 double getPadPhi( CLHEP::Hep3Vector* thisPointRPhi, CLHEP::Hep3Vector* firstPointRPhi, CLHEP::Hep3Vector* middlePointRPhi, CLHEP::Hep3Vector* lastPointRPhi);
160 double getPadTheta( CLHEP::Hep3Vector* firstPointRPhi, CLHEP::Hep3Vector* middlePointRPhi, CLHEP::Hep3Vector* lastPointRPhi );
166 std::string _padRowHitColName{};
167 std::string _spacePointColName{};
168 std::string _lowPtHitscolName{};
173 std::string _TPCTrackerHitsCol{};
174 std::string _outRelColName{};
176 bool _use_raw_hits_to_store_simhit_pointer{};
178 int _rejectCellID0{};
184 EVENT::MCParticle* _mcp{};
185 EVENT::MCParticle* _previousMCP{};
186 EVENT::MCParticle* _nextMCP{};
187 EVENT::MCParticle* _nMinus2MCP{};
188 EVENT::MCParticle* _nPlus2MCP{};
190 SimTrackerHit* _SimTHit{};
191 SimTrackerHit* _previousSimTHit{};
192 SimTrackerHit* _nextSimTHit{};
193 SimTrackerHit* _nPlus2SimHit{};
194 SimTrackerHit* _nMinus2SimHit{};
199 bool _dontEncodeSide{};
201 float _pointResoRPhi0{};
202 float _pointResoPadPhi{};
207 float _pointResoZ0{};
211 float _binningRPhi{};
212 float _doubleHitResZ{};
213 float _doubleHitResRPhi{};
218 std::vector< std::vector <Voxel_tpc *> > _tpcRowHits{};
219 std::map< Voxel_tpc *,SimTrackerHit *> _tpcHitMap{};
220 std::vector<float> _length{};
225 CellIDEncoder<TrackerHitImpl>* _cellid_encoder{};
228 int _NBackgroundSimTPCHits{};
229 int _NPhysicsSimTPCHits{};
230 int _NPhysicsAbove02GeVSimTPCHits{};
231 int _NPhysicsAbove1GeVSimTPCHits{};
234 int _NLostPhysicsTPCHits{};
235 int _NLostPhysicsAbove02GeVPtTPCHits{};
236 int _NLostPhysicsAbove1GeVPtTPCHits{};
241 IAnalysisFactory * _AF{};
242 ITreeFactory * _TRF{};
244 IHistogramFactory * _HF{};
245 IHistogram1D * _phiDiffHisto{};
246 IHistogram1D * _thetaDiffHisto{};
247 IHistogram1D * _phiRelHisto{};
248 IHistogram1D * _thetaRelHisto{};
250 IHistogram1D * _phiDistHisto{};
251 IHistogram1D * _rPhiPullHisto{};
252 IHistogram1D * _rPhiDiffHisto{};
253 IHistogram1D * _zDiffHisto{};
254 IHistogram1D * _zPullHisto{};
255 IHistogram2D * _zSigmaVsZHisto{};
256 IHistogram1D * _zSigmaHisto{};
257 IHistogram1D * _rPhiSigmaHisto{};
258 IHistogram1D * _radiusCheckHisto{};
259 IHistogram1D * _ResidualsRPhiHisto{};
261 IHistogram1D * _NSimTPCHitsHisto{};
262 IHistogram1D * _NBackgroundSimTPCHitsHisto{};
263 IHistogram1D * _NPhysicsSimTPCHitsHisto{};
264 IHistogram1D * _NPhysicsAbove02GeVSimTPCHitsHisto{};
265 IHistogram1D * _NPhysicsAbove1GeVSimTPCHitsHisto{};
266 IHistogram1D * _NRecTPCHitsHisto{};
268 IHistogram1D * _NLostPhysicsTPCHitsHisto{};
269 IHistogram1D * _NLostPhysicsAbove02GeVPtTPCHitsHisto{};
270 IHistogram1D * _NLostPhysicsAbove1GeVPtTPCHitsHisto{};
271 IHistogram1D * _NRevomedHitsHisto{};
273 IHistogram1D * _NKeptPhysicsTPCHitsHistoPercent{};
274 IHistogram1D * _NKeptPhysicsAbove02GeVPtTPCHitsHistoPercent{};
275 IHistogram1D * _NKeptPhysicsAbove1GeVPtTPCHitsHistoPercent{};
virtual Processor * newProcessor()
std::vector< LCCollection * > LCCollectionVec