1 #ifndef MMHITFINDERPROCESSOR_H
2 #define MMHITFINDERPROCESSOR_H
5 #include "marlin/Processor.h"
6 #include "marlin/Global.h"
10 #include "EVENT/LCCollection.h"
11 #include "IMPL/LCCollectionVec.h"
12 #include "EVENT/TrackerPulse.h"
15 #include "gear/TPCParameters.h"
25 #include "ChannelCorrectionListener.h"
26 #include "TPCConditionsListener.h"
29 #include <AIDA/AIDA.h>
30 #include <marlin/AIDAProcessor.h>
31 #include <AIDA/IHistogramFactory.h>
32 #include <AIDA/IHistogram1D.h>
35 #include <Minuit2/FCNBase.h>
39 #include <Minuit2/MnUserParameters.h>
40 #include <Minuit2/MnMigrad.h>
41 #include <Minuit2/FunctionMinimum.h>
42 #include <Minuit2/Minuit2Minimizer.h>
44 #include "Math/Minimizer.h"
45 #include "Math/Factory.h"
46 #include "Math/Functor.h"
87 virtual Processor* newProcessor(){
94 virtual void processRunHeader(EVENT::LCRunHeader* run) ;
96 virtual void check(EVENT::LCEvent * evt) ;
102 static double calcRowDep(
const double * x,
int index,
int row)
106 return (
double)(row*row)*x[3*index] + (
double)(row)*x[3*index + 1] + x[3*index + 2];
112 static const std::vector<double> calcParArray(
const double * x,
int nPar,
int nMod,
int modIndex,
int rowIndex)
115 std::vector<double> retVal(nPar);
120 for(
int i = 0; i < nPar; i++)
122 retVal[i] = calcRowDep(x, i*nMod + modIndex, rowIndex);
127 for(
int i = 0; i < nPar; i++)
129 retVal[i] = x[i*nMod + modIndex];
133 else if(rowIndex >= 0)
135 for(
int i = 0; i < nPar; i++)
137 retVal[i] = calcRowDep(x, i, rowIndex);
143 for(
int i = 0; i < nPar; i++)
159 _thePulses.push_back(max);
164 void addPulse(
const EVENT::TrackerPulse* aPulse,
bool left)
167 _thePulses.push_front(aPulse);
169 _thePulses.push_back(aPulse);
172 const EVENT::TrackerPulse* getMaximumPulse()
const{
176 double getMaxCharge()
const {
return _maxPulse->getCharge(); };
178 int getNumberOfPulses()
const {
return _thePulses.size(); };
180 const std::deque<const EVENT::TrackerPulse*>& getPulses()
const{
184 int getQuality()
const {
return qualityFlag; };
185 void setQuality(
int q) { qualityFlag = q; };
190 std::deque<const EVENT::TrackerPulse*> _thePulses;
193 const EVENT::TrackerPulse* _maxPulse;
199 std::string _inputTrackerPulsesCollectionName ;
200 std::string _outputTrackerHitsCollectionName ;
201 std::string _outputTrackerHitPulsesCollectionName ;
202 std::string _inputTPCConditionsCollectionName;
205 std::vector<int> _moduleListParam;
207 bool _outputHitsPersistent;
210 int _maxEmptyChannelsOverride;
211 int _maxDeadChannelsOverride;
212 int _minHitSizeOverride;
213 float _minMaxPulseSliceHeightOverride;
214 float _maxTimeSpreadOverride;
215 float _driftVelocity;
217 std::string _rootFileName;
218 std::string _prfType;
220 std::vector<float> _parVec;
224 std::vector<int> _centreColListParam;
225 std::vector<int> _deadRowListParam;
230 bool _selectCentralCols;
231 bool _calibrationRun;
242 std::set<int> _moduleList;
243 std::map<int, std::set<int> > _deadRowList;
244 std::map<int, int > _centreColList;
245 std::map<int, int > _moduleMap;
247 ROOT::Minuit2::Minuit2Minimizer* min;
250 std::map<int, AIDA::IHistogram1D *> numberOfPulsesPerHit;
251 std::map<int, AIDA::IHistogram1D *> averagePulsesPerHitPerRow;
252 std::map<int, AIDA::IHistogram1D *> numberOfHitsPerEvent;
253 std::map<int, AIDA::IHistogram1D *> chiSquareDistrubtionOfHits;
254 std::map<int, AIDA::IHistogram1D *> hitFitResults;
255 std::map<int, AIDA::IHistogram1D *> hitDistribution;
256 std::map<int, AIDA::IHistogram1D *> hitErrorDistribution;
257 std::map<int, AIDA::IHistogram1D *> hitShapes;
260 std::map<int, std::vector<int> > numberOfHitsInRow;
261 std::map<int, std::vector<int> > numberOfPulsesInRow;
267 typedef std::map<int, std::vector<MMHitFinderProcessor::HitCandidate> > SortedHitMap;
268 typedef std::map<int, std::map<int, std::vector<TrackerPulse*> > > SortedPulseMap;
277 void _sortPulses ( EVENT::LCCollection*,
const gear::TPCParameters&, SortedPulseMap& );
282 void _findHitCandidates ( SortedPulseMap&,
const gear::TPCParameters&, SortedHitMap& );
286 void _createHitCollection ( SortedHitMap&,
const gear::TPCParameters&, IMPL::LCCollectionVec* );
300 EVENT::TrackerPulse* _findHighestPulseInRow ( std::vector<EVENT::TrackerPulse*>& );
303 std::vector<EVENT::TrackerPulse*>& );
Definition: MMHitFinderProcessor.h:82
Definition: MMHitFinderProcessor.h:152
virtual void processEvent(EVENT::LCEvent *evt)
Definition: MMHitFinderProcessor.cc:319