FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
PndLmdPairFinderTask Class Reference

#include <PndLmdPairFinderTask.h>

Inheritance diagram for PndLmdPairFinderTask:
PndSdsTask PndPersistencyTask

Public Member Functions

void SetParContainers ()
 
 PndLmdPairFinderTask ()
 
 PndLmdPairFinderTask (const char *name)
 
virtual ~PndLmdPairFinderTask ()
 
virtual void SetBranchNames ()
 
virtual InitStatus Init ()
 
virtual InitStatus ReInit ()
 
virtual void Exec (Option_t *opt)
 
virtual void FinishEvent ()
 
virtual void FinishTask ()
 
void setMaxDistance (Double_t value)
 
void ignoreClusters (Bool_t value)
 
virtual void SetInBranchId ()
 
void SetPersistency (Bool_t val=kTRUE)
 
Bool_t GetPersistency ()
 

Protected Member Functions

void Register ()
 
void Reset ()
 
void getStatistics (PndLmdHitPair &candidate)
 
bool pairDistanceValid (PndLmdHitPair &candidate)
 
bool candHitsOverlappingArea (const PndLmdHitPair &candidate)
 
 ClassDef (PndLmdPairFinderTask, 20)
 
 ClassDef (PndSdsTask, 1)
 

Protected Attributes

PndLmdGeometryHelperhelper
 
TClonesArray * digiArray
 
TClonesArray * recoArray
 
TClonesArray * hitPairArray
 
TClonesArray * clusterCandidateArray
 
TString fInRecoBranchName
 
TString fInClusterCandidates
 
std::map< int, TClonesArray * > hitPairMap
 
TString fInBranchName
 
TString fOutBranchName
 
TString fFolderName
 
Int_t fInBranchId
 
Int_t fOutBranchId
 

Private Member Functions

pixelHit getPixelHitFromSdsHit (PndSdsHit *sdsHit)
 

Private Attributes

Int_t noOfGoodPairs
 
Int_t noOfEvents
 
Int_t plane0
 
Int_t plane1
 
Int_t plane2
 
Int_t plane3
 
Int_t eventMissedAllPlanes
 
Int_t noOverlap
 
Int_t distanceTooHigh
 
Int_t sumOfPixelHits
 
Int_t unsuitable
 
Int_t hitsClustered
 
Int_t hitsSinglePixel
 
Int_t noOfCombos
 
Double_t _maxDistance
 
Bool_t _ignoreClusters
 

Detailed Description

Definition at line 24 of file PndLmdPairFinderTask.h.

Constructor & Destructor Documentation

PndLmdPairFinderTask::PndLmdPairFinderTask ( )

Definition at line 38 of file PndLmdPairFinderTask.cxx.

References _ignoreClusters, clusterCandidateArray, digiArray, recoArray, and unsuitable.

38  : // @suppress("Class members should be properly initialized")
39  PndSdsTask("pairfinder") {
40  digiArray = NULL;
41  recoArray = NULL;
42  clusterCandidateArray = NULL;
43  unsuitable = 0;
44  _ignoreClusters = false;
45 
46 }
TClonesArray * clusterCandidateArray
PndLmdPairFinderTask::PndLmdPairFinderTask ( const char *  name)

Definition at line 48 of file PndLmdPairFinderTask.cxx.

References _ignoreClusters, clusterCandidateArray, digiArray, recoArray, and SetName.

48  : // @suppress("Class members should be properly initialized")
49  PndSdsTask("pairfinder with name") {
50  digiArray = NULL;
51  recoArray = NULL;
52  clusterCandidateArray = NULL;
53 
54  if (!strcmp(name, "")) SetName(name);
55  _ignoreClusters = false;
56 }
cout<< "-----------------------------------------------> Quarter VOLUME<<endl;name="QuarterShape";QuarterShape=newTGeoArb8(name,dz,vertQuar);name="Quarter4Vol";TStringmedium="air";QuarterVol=newTGeoVolumeAssembly(name);name="SubunitShape";SubunitShape=newTGeoArb8(name,dz,vertSub);TStringmedium="air";name="SubunitVol";name1="SubunitVol1";name2="SubunitVol2";name3="SubunitVol3";name4="SubunitVol4";name5="SubunitVol5";name6="SubunitVol6";name7="SubunitVol7";name8="SubunitVol8";name9="SubunitVol9";SubunitVol=newTGeoVolumeAssembly(name);SubunitVol1=newTGeoVolumeAssembly(name1);SubunitVol2=newTGeoVolumeAssembly(name2);SubunitVol3=newTGeoVolumeAssembly(name3);SubunitVol4=newTGeoVolumeAssembly(name4);SubunitVol5=newTGeoVolumeAssembly(name5);SubunitVol6=newTGeoVolumeAssembly(name6);SubunitVol7=newTGeoVolumeAssembly(name7);SubunitVol8=newTGeoVolumeAssembly(name8);SubunitVol9=newTGeoVolumeAssembly(name9);name="BoxShape";BoxShape=newTGeoArb8(name,dz,vertBox);TStringmedium="air";name="BoxVol";BoxVol=newTGeoVolumeAssembly(name);name1="BoxVol1";name2="BoxVol2";name3="BoxVol3";name4="BoxVol4";BoxVol1=newTGeoVolumeAssembly(name1);BoxVol2=newTGeoVolumeAssembly(name2);BoxVol3=newTGeoVolumeAssembly(name3);BoxVol4=newTGeoVolumeAssembly(name4);for(Int_tb=0;b<kNumOfBoxes;b++){cout<<""<<endl;cout<<"---------------->BOXnumber:"<<b<<endl;if(b==0){trBox=newTGeoTranslation(tr+kSpaceInSub+kAlveoleThickness+0.5*kSpaceInBox,tr+kSpaceInSub+kAlveoleThickness+0.5*kSpaceInBox,0.);rotBox=newTGeoRotation();rotBox.RotateX(0.465518);rotBox.RotateY(-0.465518);}if(b==1){trBox=newTGeoTranslation(-tr-kSpaceInSub-kAlveoleThickness-0.5*kSpaceInBox,-tr-kSpaceInSub-kAlveoleThickness-0.5*kSpaceInBox,0.);rotBox=newTGeoRotation();rotBox.RotateX(-0.465518);rotBox.RotateY(0.465518);}if(b==2){trBox=newTGeoTranslation(tr+kSpaceInSub+kAlveoleThickness+0.5*kSpaceInBox,-tr-kSpaceInSub-kAlveoleThickness-0.5*kSpaceInBox,0.);rotBox=newTGeoRotation();rotBox.RotateX(-0.465518);rotBox.RotateY(-0.465518);}if(b==3){trBox=newTGeoTranslation(-tr-kSpaceInSub-kAlveoleThickness-0.5*kSpaceInBox,tr+kSpaceInSub+kAlveoleThickness+0.5*kSpaceInBox,0.);rotBox=newTGeoRotation();rotBox.RotateX(0.465518);rotBox.RotateY(0.465518);}TGeoCombiTrans*trrotBox=newTGeoCombiTrans(trBox,rotBox);name="BoxVol";name+=b;trrotBox->SetName(name);trrotBox->RegisterYourself();SubunitVol->AddNode(BoxVol,b,trrotBox);if(b==1){name+=b;trrotBox->SetName(name);trrotBox->RegisterYourself();SubunitVol1->AddNode(BoxVol,b,trrotBox);}if(b==2){name+=b;trrotBox->SetName(name);trrotBox->RegisterYourself();SubunitVol2->AddNode(BoxVol1,b,trrotBox);}if(b==0){name+=b;trrotBox-> SetName(name)
TClonesArray * clusterCandidateArray
TString name
PndLmdPairFinderTask::~PndLmdPairFinderTask ( )
virtual

Definition at line 58 of file PndLmdPairFinderTask.cxx.

58  {
59  std::cout << "PairFinderTask destructor called." << "\n";
60 }

Member Function Documentation

bool PndLmdPairFinderTask::candHitsOverlappingArea ( const PndLmdHitPair candidate)
protected

Definition at line 432 of file PndLmdPairFinderTask.cxx.

References PndLmdHitPair::getId1(), PndLmdHitPair::getId2(), helper, and PndLmdGeometryHelper::isOverlappingArea().

Referenced by Exec().

432  {
433  int firstSensorId, secondSensorId;
434  firstSensorId = candidate.getId1();
435  secondSensorId = candidate.getId2();
436 
437  //same sensor hit?
438  if (firstSensorId == secondSensorId) {
439  return false;
440  }
441  return helper->isOverlappingArea(firstSensorId, secondSensorId);
442 }
PndLmdGeometryHelper * helper
Int_t getId2() const
Definition: PndLmdHitPair.h:60
Int_t getId1() const
Definition: PndLmdHitPair.h:57
bool isOverlappingArea(const int id1, const int id2)
PndSdsTask::ClassDef ( PndSdsTask  ,
 
)
protectedinherited
PndLmdPairFinderTask::ClassDef ( PndLmdPairFinderTask  ,
20   
)
protected
void PndLmdPairFinderTask::Exec ( Option_t *  opt)
virtual

Virtual method Exec

Definition at line 160 of file PndLmdPairFinderTask.cxx.

References pixelHit::_col, pixelHit::_row, PndLmdHitPair::calculateDistance(), candHitsOverlappingArea(), PndLmdHitPair::check(), PndLmdGeometryHelper::getHitLocationInfo(), PndLmdHitPair::getId1(), PndLmdHitPair::getId2(), PndLmdGeometryHelper::getOverlapIdFromSensorIDs(), getPixelHitFromSdsHit(), PndSdsHit::GetPosition(), PndSdsHit::GetSensorID(), getStatistics(), helper, hitPairArray, PndLmdHitPair::isSane(), noOfEvents, noOverlap, pairDistanceValid(), PndLmdHitPair::PrintPair(), recoArray, PndLmdHitPair::setOverlapId(), PndLmdHitPair::setPixelHits(), and unsuitable.

160  {
161 
162  //clear temporary array for next event
163  hitPairArray->Clear();
164 
165  //Int_t nPixels = digiArray->GetEntriesFast();
166  noOfEvents++;
167 
168  //display some kind of progress
169  if ((noOfEvents % 10000) == 0) {
170  cout << "processed " << noOfEvents << "\n";
171  }
172 
173  // ========== loop over recos in recoArray =========
174  Int_t nRecos = recoArray->GetEntriesFast();
175 
176  Int_t storedPairsPerEvent = 0;
177 
178  //try every cluster combination and check
179  for (auto iReco = 0; iReco < nRecos; iReco++) {
180  for (auto jReco = iReco + 1; jReco < nRecos; jReco++) {
181 
182  PndSdsHit *hitOne = (PndSdsHit*) recoArray->At(iReco);
183  PndSdsHit *hitTwo = (PndSdsHit*) recoArray->At(jReco);
184 
185  int id1 = hitOne->GetSensorID();
186  int id2 = hitTwo->GetSensorID();
187 
188  // sort hits so hitOne is ALWAYS upstream
189  auto &infoOne = helper->getHitLocationInfo(id1);
190  auto &infoTwo = helper->getHitLocationInfo(id2);
191 
192  if (infoOne.module_side > infoTwo.module_side) {
193  std::swap(hitOne, hitTwo);
194  id1 = hitOne->GetSensorID();
195  id2 = hitTwo->GetSensorID();
196  }
197 
198  //from here on, the hits are sorted so hitOne is ALWAYS upstream
199  const TVector3 vecOneGlobal = hitOne->GetPosition();
200  const TVector3 vecTwoGlobal = hitTwo->GetPosition();
201 
202  //make PndLmdHitPair and check for data sanity, then store to vector
203  PndLmdHitPair pairCanditate(vecOneGlobal, vecTwoGlobal, id1, id2);
204 
205  //is the candidate even on an overlapping area?
206  if (!candHitsOverlappingArea(pairCanditate)) {
207  noOverlap++;
208  continue;
209  }
210 
211  int overlapId = helper->getOverlapIdFromSensorIDs(pairCanditate.getId1(), pairCanditate.getId2());
212  pairCanditate.setOverlapId(overlapId);
213 
214  pixelHit pixelHitOne = getPixelHitFromSdsHit(hitOne);
215  pixelHit pixelHitTwo = getPixelHitFromSdsHit(hitTwo);
216 
217  pairCanditate.setPixelHits(pixelHitOne._col, pixelHitOne._row, pixelHitTwo._col, pixelHitTwo._row);
218 
219  pairCanditate.calculateDistance();
220  pairCanditate.check();
221 
222  if (!pairCanditate.isSane()) {
223  pairCanditate.PrintPair();
224  cerr << "==== WARNING: ====" << "\n";
225  cerr << "pair seems valid but did not pass sanity check!" << "\n";
226  cerr << "===============================================" << "\n";
227  continue;
228  }
229 
230  //pair must now be sane, in Panda Global and has overlapID et al.
231  if (!pairDistanceValid(pairCanditate)) {
232  unsuitable++;
233  continue;
234  }
235 
236  // if the pair survived to this point, it's valid. store!
237  getStatistics(pairCanditate);
238  new ((*hitPairArray)[storedPairsPerEvent]) PndLmdHitPair(pairCanditate);
239  storedPairsPerEvent++;
240  }
241  }
242  return;
243 }
TVector3 GetPosition() const
Definition: PndSdsHit.h:93
bool pairDistanceValid(PndLmdHitPair &candidate)
void getStatistics(PndLmdHitPair &candidate)
pixelHit getPixelHitFromSdsHit(PndSdsHit *sdsHit)
PndLmdGeometryHelper * helper
const PndLmdHitLocationInfo & getHitLocationInfo(const std::string &volume_path)
Int_t GetSensorID() const
Definition: PndSdsHit.h:90
int getOverlapIdFromSensorIDs(int id1, int id2)
bool candHitsOverlappingArea(const PndLmdHitPair &candidate)
void PndLmdPairFinderTask::FinishEvent ( )
virtual

Definition at line 245 of file PndLmdPairFinderTask.cxx.

245  {
246 }
void PndLmdPairFinderTask::FinishTask ( )
virtual

Definition at line 248 of file PndLmdPairFinderTask.cxx.

References distanceTooHigh, eventMissedAllPlanes, hitsClustered, hitsSinglePixel, noOfCombos, noOfEvents, noOfGoodPairs, noOverlap, plane0, plane1, plane2, plane3, printf(), and sumOfPixelHits.

248  {
249 
250  //also, write statistics
251  Int_t sumOfAllPlanes = plane0 + plane1 + plane2 + plane3;
252  double plane0Percent = ((double) plane0 / noOfGoodPairs) * 100;
253  double plane1Percent = ((double) plane1 / noOfGoodPairs) * 100;
254  double plane2Percent = ((double) plane2 / noOfGoodPairs) * 100;
255  double plane3Percent = ((double) plane3 / noOfGoodPairs) * 100;
256  double allPlanesPercent = ((double) sumOfAllPlanes / noOfGoodPairs) * 100;
257  double clusterRatio = ((double) hitsClustered / (double) (hitsSinglePixel + hitsClustered)) * 100;
258  double pixelsPerEvent = (double) sumOfPixelHits / (double) noOfEvents;
259  double goodPairsPerEvent = (double) noOfGoodPairs / (double) noOfEvents;
260 
261  cout << "\n";
262  cout << "*************************************************************" << "\n";
263  cout << " pair finder done " << "\n";
264  cout << "*************************************************************" << "\n";
265  cout << "\n";
266  cout << " counting statistics:" << "\n";
267  cout << "\n";
268  printf("total events: %d \n", noOfEvents);
269  printf("events that missed all sensors: %d \n", eventMissedAllPlanes);
270  printf("total pixel hits: %d \n", sumOfPixelHits);
271  printf("cluster ratio: %.2f %% \n", clusterRatio);
272  printf("pixel hits per event: %.2f \n", pixelsPerEvent);
273  printf("----------------------------\n");
274  printf("possible hit pair combinations: %d \n", noOfCombos);
275  printf("no overlap: %d \n", noOverlap);
276  printf("distance too high: %d \n", distanceTooHigh);
277  printf("----------------------------\n");
278  printf("good pairs: %d \n", noOfGoodPairs);
279  printf("good pairs per event: %.2f \n", goodPairsPerEvent);
280  printf("----------------------------\n");
281  printf("hits on plane 0: %.2f %% \n", plane0Percent);
282  printf("hits on plane 1: %.2f %%\n", plane1Percent);
283  printf("hits on plane 2: %.2f %%\n", plane2Percent);
284  printf("hits on plane 3: %.2f %%\n", plane3Percent);
285  printf("hits on all planes: %.2f %% (should be 100%%!) \n", allPlanesPercent);
286  cout << "\n";
287  cout << "*************************************************************" << "\n";
288 
289  return;
290 }
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
Bool_t PndPersistencyTask::GetPersistency ( )
inlineinherited

Definition at line 32 of file PndPersistencyTask.h.

References PndPersistencyTask::fPersistency.

Referenced by PndLmdPixelHitProducerFast::GetPersistance(), PndMdtDigitization::Init(), PndMdtHitProducerIdeal::Init(), PndMdtClusterTask::Init(), PndFtsHitProducerRealFast::Init(), PndSttHitProducerRealFast::Init(), PndDiscTaskReconstruction::Init(), PndRichHitProducer::Init(), PndSttHelixHitProducer::Init(), PndDiscTaskPID::Init(), PndIdealTrackFinder::Init(), PndSttMvdGemTracking::Init(), PndMdtTrkProducer::Init(), PndFtsHitProducerRealFull::Init(), PndLmdPixelClusterTask::Init(), PndSttHitProducerRealFull::Init(), PndLmdStripClusterTask::Init(), PndEmcApdHitProducer::Init(), PndMissingPzCleanerTask::Init(), PndEmcMakeRecoHit::Init(), PndEmcMakeClusterOnline::Init(), PndTrackSmearTask::Init(), PndEmcFWEndcapTimebasedWaveforms::Init(), PndSttHitProducerIdeal::Init(), PndEmcFWEndcapDigi::Init(), PndFtsHitProducerIdeal::Init(), PndEmcMakeCluster::Init(), PndMdtPointsToWaveform::Init(), PndDiscTaskDigitization::Init(), PndEmcMakeDigi::Init(), PndSdsTimeWalkCorrTask::Init(), PndLmdPixelHitProducerFast::Init(), PndDrcHitFinder::Init(), PndRichHitFinder::Init(), PndEmcMakeCorr::Init(), PndFtofHitProducerIdeal::Init(), PndEmcHitsToWaveform::Init(), PndSciTDigiTask::Init(), PndDrcHitProducerIdeal::Init(), PndSdsHitProducerIdeal::Init(), PndSciTHitProducerIdeal::Init(), PndEmcHitProducer::Init(), PndRecoMultiKalmanTask2::Init(), PndDrcHitProducerReal::Init(), PndDskFLGHitProducerIdeal::Init(), PndEmcTmpWaveformToDigi::Init(), PndDrcDigiTask::Init(), PndEmcWaveformToDigi::Init(), PndSttMatchTracks::Init(), PndEmcWaveformToCalibratedDigi::Init(), PndTrkTracking2::Init(), PndSttFindTracks::Init(), PndEmcMultiWaveformToCalibratedDigi::Init(), PndDrcTimeDigiTask::Init(), PndRecoKalmanTask2::Init(), PndEmcExpClusterSplitter::Init(), PndSdsNoiseProducer::Init(), PndFtsHoughTrackerTask::Init(), PndEmcPhiBumpSplitter::Init(), PndSdsHybridHitProducer::Init(), PndSdsIdealRecoTask::Init(), PndRecoMultiKalmanTask::Init(), PndSdsIdealClusterTask::Init(), PndRecoKalmanTask::Init(), PndSdsStripHitProducerDif::Init(), PndSdsStripHitProducer::Init(), PndGemDigitize::Init(), PndGemFindHits::Init(), PndSdsPixelClusterTask::Init(), PndSdsStripClusterTask::Init(), PndMvdGemTrackFinderOnHits::Init(), PndBarrelTrackFinder::Init(), PndEmcFullDigiTask::PndEmcFullDigiTask(), PndEmcMakeBump::PndEmcMakeBump(), PndUnassignedHitsTask::RegisterBranches(), PndMvdClusterTask::SetPersistance(), PndMvdDigiTask::SetPersistance(), PndEmcMakeBump::SetStorageOfData(), and PndEmcFullDigiTask::StoreDigi().

32 { return fPersistency; }
pixelHit PndLmdPairFinderTask::getPixelHitFromSdsHit ( PndSdsHit sdsHit)
private

Definition at line 336 of file PndLmdPairFinderTask.cxx.

References _ignoreClusters, clusterCandidateArray, col, digiArray, exit(), PndSdsHit::GetClusterIndex(), PndSdsCluster::GetClusterSize(), PndSdsCluster::GetDigiIndex(), PndSdsDigiPixel::GetPixelColumn(), PndSdsDigiPixel::GetPixelRow(), PndSdsDigi::GetSensorID(), hitsClustered, hitsSinglePixel, i, row, and sumOfPixelHits.

Referenced by Exec().

336  {
337 
338  pixelHit result;
339  int hitSensorId;
340  double row, col;
341 
342  int clusterIndex = sdsHit->GetClusterIndex();
343 
344  std::vector<pixelCluster> clusters;
345  PndSdsClusterPixel *clusterPixelCand = (PndSdsClusterPixel*) clusterCandidateArray->At(clusterIndex);
346 
347  int noOfClusters = clusterPixelCand->GetClusterSize();
348 
349  for (int iCluster = 0; iCluster < noOfClusters; iCluster++) {
350 
351  PndSdsDigiPixel* mcPixel = (PndSdsDigiPixel*) digiArray->At(
352  clusterPixelCand->GetDigiIndex(iCluster));
353 
354  if (!mcPixel) {
355  exit(1);
356  }
357 
358  hitSensorId = mcPixel->GetSensorID();
359 
360  col = mcPixel->GetPixelColumn();
361  row = mcPixel->GetPixelRow();
362 
363  //skip decoding errors
364  if (col < 0 || row < 0) {
365  continue;
366  }
367  else {
368  clusters.push_back(pixelCluster(pixelHit(hitSensorId, col, row)));
369  }
370  }
371 
372  sumOfPixelHits += clusters.size();
373 
374  //all hits are present in clusters
375 
376  /*
377  * ============ find clusters ============
378  * input: vector<pixelCluster>
379  * output vector<pixelCluster>
380  *
381  * algorithm: Hierarchical Clustering Algorithm, see https://en.wikipedia.org/wiki/Hierarchical_clustering
382  * start by putting every pixel hit in a separate cluster (done above).
383  * then merge every two clusters that are close enough (1-2 pixels, may be open to adjustment).
384  * terminate if no more clusters can be merged or after N iterations for N pixel hits.
385  * all remaining clusters contain every pixel hit.
386  */
387 
388  //for every cluster, check every other cluster
389  for (size_t i = 0; i < clusters.size(); i++) {
390  //clusters are interchangeable, check every pair only once
391  for (size_t j = i + 1; j < clusters.size(); j++) {
392 
393  //clusters must be on same sensor
394  if (clusters[i]._sensorId != clusters[j]._sensorId) {
395  continue;
396  }
397 
398  if (clusters[i].isNeighbour(clusters[j])) {
399  clusters[i].merge(clusters[j]);
400  clusters.erase(clusters.begin() + j);
401  j--;
402  }
403  }
404  }
405 
406  //calculate cluster centers and discard large clusters
407  //for statistis: count cluster ratio
408  for (size_t i = 0; i < clusters.size(); i++) {
409  clusters[i].calculateCenter();
410 
411  if (clusters[i].clusterSize > 1) {
412  hitsClustered++;
413 
414  if (_ignoreClusters || clusters[i].clusterSize > 3) {
415  clusters.erase(clusters.begin() + i);
416  /*
417  * this is important! when you erase cluster i, cluster i+1 becomes cluster i, but the first i
418  * becomes i+1 itself.
419  * that means, cluster i (former i+1) never gets checked in the first line of the outer for loop!
420  */
421  i--;
422  }
423  }
424  else {
425  hitsSinglePixel++;
426  }
427  }
428  return pixelHit(hitSensorId, clusters[0].centerCol, clusters[0].centerRow);
429 
430 }
int row
Definition: anaLmdDigi.C:67
Int_t GetPixelRow() const
Int_t GetClusterSize() const
Definition: PndSdsCluster.h:39
Int_t GetSensorID() const
Definition: PndSdsDigi.h:59
Int_t i
Definition: run_full.C:25
exit(0)
Int_t GetPixelColumn() const
int col
Definition: anaLmdDigi.C:67
TClonesArray * clusterCandidateArray
Int_t GetDigiIndex(Int_t i) const
Definition: PndSdsCluster.h:40
Data class to store the digi output of a pixel module.
Int_t GetClusterIndex() const
Definition: PndSdsHit.h:94
void PndLmdPairFinderTask::getStatistics ( PndLmdHitPair candidate)
protected

Definition at line 306 of file PndLmdPairFinderTask.cxx.

References PndLmdGeometryHelper::getHitLocationInfo(), PndLmdHitPair::getId1(), helper, noOfGoodPairs, PndLmdHitLocationInfo::plane, plane0, plane1, plane2, and plane3.

Referenced by Exec().

306  {
307 
308  //check for overlap
309  int fplane;
310 
311  auto &infoOne = helper->getHitLocationInfo(candidate.getId1());
312  fplane = infoOne.plane;
313 
314  //count events per plane
315  switch (fplane) {
316  case 0:
317  plane0++;
318  break;
319  case 1:
320  plane1++;
321  break;
322  case 2:
323  plane2++;
324  break;
325  case 3:
326  plane3++;
327  break;
328  default:
329  //should never happen, can only indicate decoding error
330  cerr << "WARNING: hit was deemed suitable but plane number is " << fplane << "\n";
331  cerr << "This should not happen!" << "\n";
332  }
333  noOfGoodPairs++;
334 }
PndLmdGeometryHelper * helper
const PndLmdHitLocationInfo & getHitLocationInfo(const std::string &volume_path)
Int_t getId1() const
Definition: PndLmdHitPair.h:57
void PndLmdPairFinderTask::ignoreClusters ( Bool_t  value)
inline

Definition at line 70 of file PndLmdPairFinderTask.h.

70  {
71  _ignoreClusters = value;
72  }
InitStatus PndLmdPairFinderTask::Init ( )
virtual

Virtual method Init

Definition at line 62 of file PndLmdPairFinderTask.cxx.

References _maxDistance, clusterCandidateArray, digiArray, distanceTooHigh, eventMissedAllPlanes, PndSdsTask::fFolderName, PndSdsTask::fInBranchName, fInClusterCandidates, fInRecoBranchName, PndSdsTask::fOutBranchName, PndLmdGeometryHelper::getInstance(), helper, hitPairArray, hitsClustered, hitsSinglePixel, noOfCombos, noOfEvents, noOfGoodPairs, noOverlap, plane0, plane1, plane2, plane3, recoArray, SetBranchNames(), sumOfPixelHits, and unsuitable.

62  {
63 
64  noOfGoodPairs = 0;
65  noOfEvents = noOfCombos = 0;
67  hitsSinglePixel = 0;
68  hitsSinglePixel = 0;
71  plane0 = plane1 = plane2 = plane3 = 0;
72 
73  fInBranchName = "LMDPixelDigis";
74  fInRecoBranchName = "LMDHitsPixel";
75  fOutBranchName = "LMDPixelPairs";
76  fInClusterCandidates = "LMDPixelClusterCand";
77 
78  fFolderName = "pndsim";
79 
80  _maxDistance = 1250e-4;
81 
83 
84  FairRootManager* ioman = FairRootManager::Instance();
85 
86  if (!ioman) {
87  std::cout << "-E- LmdPairFinder::Init: " << "RootManager not instantiated!" << "\n";
88  return kFATAL;
89  }
90 
91  digiArray = (TClonesArray*) ioman->GetObject(fInBranchName);
92  recoArray = (TClonesArray*) ioman->GetObject(fInRecoBranchName);
93  clusterCandidateArray = (TClonesArray*) ioman->GetObject(fInClusterCandidates);
94 
95  if (!digiArray) {
96  std::cout << "-W- LmdPairFinder::Init: " << "ERROR, branch name " << fInBranchName
97  << " could not found!" << "\n";
98  return kERROR;
99  }
100 
101  if (!recoArray) {
102  std::cout << "-W- LmdPairFinder::Init: " << "ERROR, branch name " << fInRecoBranchName
103  << " not found!" << "\n";
104  return kERROR;
105  }
106 
107  if (!clusterCandidateArray) {
108  std::cout << "-W- LmdPairFinder::Init: " << "ERROR, branch name " << fInClusterCandidates
109  << " not found!" << "\n";
110  return kERROR;
111  }
112 
113  hitPairArray = new TClonesArray("PndLmdHitPair");
114  ioman->Register("PndLmdHitPair", "PndLmd", hitPairArray, kTRUE);
115 
117 
118  std::cout << "LmdPairFinder::Init(): Initialization successful." << "\n";
119  return kSUCCESS;
120 }
TString fOutBranchName
Definition: PndSdsTask.h:40
static PndLmdGeometryHelper & getInstance()
TClonesArray * clusterCandidateArray
PndLmdGeometryHelper * helper
TString fInBranchName
Definition: PndSdsTask.h:39
TString fFolderName
Definition: PndSdsTask.h:41
bool PndLmdPairFinderTask::pairDistanceValid ( PndLmdHitPair candidate)
protected

Definition at line 295 of file PndLmdPairFinderTask.cxx.

References _maxDistance, distanceTooHigh, and PndLmdHitPair::getDistance().

Referenced by Exec().

295  {
296 
297  //check distance squared
298  double distance = candidate.getDistance();
299  if (distance > _maxDistance) {
300  distanceTooHigh++;
301  return false;
302  }
303  return true;
304 }
Double_t getDistance() const
void PndLmdPairFinderTask::Register ( )
protected

Definition at line 292 of file PndLmdPairFinderTask.cxx.

292  {
293 }
InitStatus PndLmdPairFinderTask::ReInit ( )
virtual

Definition at line 126 of file PndLmdPairFinderTask.cxx.

126  {
127  return InitStatus();
128 }
void PndLmdPairFinderTask::Reset ( )
protected

Definition at line 444 of file PndLmdPairFinderTask.cxx.

444  {
445 }
void PndLmdPairFinderTask::SetBranchNames ( )
virtual

Take default naming

Implements PndSdsTask.

Definition at line 122 of file PndLmdPairFinderTask.cxx.

References PndSdsTask::fInBranchName.

Referenced by Init().

122  {
123  std::cout << "branch names set to " << fInBranchName << "\n";
124 }
TString fInBranchName
Definition: PndSdsTask.h:39
virtual void PndSdsTask::SetInBranchId ( )
inlinevirtualinherited

Reimplemented in PndSdsStripClusterTask, PndSdsPixelClusterTask, and PndSdsIdealClusterTask.

Definition at line 30 of file PndSdsTask.h.

References PndSdsTask::fInBranchId, PndSdsTask::fInBranchName, PndSdsTask::fOutBranchId, and PndSdsTask::fOutBranchName.

Referenced by PndSdsTimeWalkCorrTask::Init(), PndSdsRecoTask::Init(), PndSdsIdealRecoTask::Init(), PndLmdStripHitProducer::SetBranchNames(), PndMvdHitProducerIdeal::SetBranchNames(), PndLmdHybridHitProducer::SetBranchNames(), PndMvdHybridHitProducer::SetBranchNames(), and PndMvdStripHitProducer::SetBranchNames().

30  {
31  FairRootManager *ioman = FairRootManager::Instance();
32  fInBranchId = ioman->GetBranchId(fInBranchName);
33  fOutBranchId = ioman->GetBranchId(fOutBranchName);
34  std::cout << "InBranchId: " << fInBranchId << " for Branch: " << fInBranchName.Data() << std::endl;
35  std::cout << "OutBranchId: " << fOutBranchId << " for Branch: " << fOutBranchName.Data() << std::endl;
36  }
Int_t fInBranchId
Definition: PndSdsTask.h:43
TString fOutBranchName
Definition: PndSdsTask.h:40
Int_t fOutBranchId
Definition: PndSdsTask.h:44
TString fInBranchName
Definition: PndSdsTask.h:39
void PndLmdPairFinderTask::setMaxDistance ( Double_t  value)
inline

Definition at line 66 of file PndLmdPairFinderTask.h.

66  {
67  _maxDistance = value;
68  }
void PndLmdPairFinderTask::SetParContainers ( )

Definition at line 130 of file PndLmdPairFinderTask.cxx.

References PndLmdContFact::GetAlignParNames(), PndGeoHandling::Instance(), rtdb, PndGeoHandling::SetParContainers(), and TString.

130  {
131 
132  FairRun* ana;
133  FairRuntimeDb* rtdb;
134 
135  std::cout << "PndLmdPixelClusterTask::SetParContainers() " << "\n";
136  // Get Base Container
137  ana = FairRun::Instance();
138  rtdb = ana->GetRuntimeDb();
139 
140  PndLmdContFact* themvdcontfact = (PndLmdContFact*) rtdb->getContFactory("PndLmdContFact");
141  //read params for lumi alignment
142  TList* theAlignLMDContNames = themvdcontfact->GetAlignParNames();
143  Info("SetParContainers()", "AlignLMD The container names list contains %i entries",
144  theAlignLMDContNames->GetEntries());
145  TIter cfAlIter(theAlignLMDContNames);
146  while (TObjString* contname = (TObjString*) cfAlIter()) {
147  TString parsetname = contname->String();
148  Info("SetParContainers()", "%s", parsetname.Data());
149  }
150 
152 }
TList * GetAlignParNames()
virtual void SetParContainers()
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
static PndGeoHandling * Instance()
void PndPersistencyTask::SetPersistency ( Bool_t  val = kTRUE)
inlineinherited

Definition at line 31 of file PndPersistencyTask.h.

References PndPersistencyTask::fPersistency, and val.

Referenced by barrelTrackFinder(), digi_complete(), digi_complete_newSTT(), digiOnly_complete(), PndBarrelTrackFinder::PndBarrelTrackFinder(), PndCATracking::PndCATracking(), PndDrcHitFinder::PndDrcHitFinder(), PndEmc2DLocMaxFinder::PndEmc2DLocMaxFinder(), PndEmcExpClusterSplitter::PndEmcExpClusterSplitter(), PndEmcFullDigiTask::PndEmcFullDigiTask(), PndEmcFWEndcapDigi::PndEmcFWEndcapDigi(), PndEmcFWEndcapTimebasedWaveforms::PndEmcFWEndcapTimebasedWaveforms(), PndEmcHitProducer::PndEmcHitProducer(), PndEmcHitsToWaveform::PndEmcHitsToWaveform(), PndEmcMakeBump::PndEmcMakeBump(), PndEmcMakeCluster::PndEmcMakeCluster(), PndEmcMakeClusterOnline::PndEmcMakeClusterOnline(), PndEmcMakeDigi::PndEmcMakeDigi(), PndEmcMakeRecoHit::PndEmcMakeRecoHit(), PndEmcMultiWaveformToCalibratedDigi::PndEmcMultiWaveformToCalibratedDigi(), PndEmcPhiBumpSplitter::PndEmcPhiBumpSplitter(), PndEmcTmpWaveformToDigi::PndEmcTmpWaveformToDigi(), PndEmcWaveformToCalibratedDigi::PndEmcWaveformToCalibratedDigi(), PndEmcWaveformToDigi::PndEmcWaveformToDigi(), PndFtofHitProducerIdeal::PndFtofHitProducerIdeal(), PndFtsCATracking::PndFtsCATracking(), PndFtsHitProducerIdeal::PndFtsHitProducerIdeal(), PndFtsHitProducerRealFast::PndFtsHitProducerRealFast(), PndFtsHitProducerRealFull::PndFtsHitProducerRealFull(), PndFtsHoughTrackerTask::PndFtsHoughTrackerTask(), PndGemDigitize::PndGemDigitize(), PndGemFindHits::PndGemFindHits(), PndIdealTrackFinder::PndIdealTrackFinder(), PndLmdPixelClusterTask::PndLmdPixelClusterTask(), PndLmdPixelHitProducerFast::PndLmdPixelHitProducerFast(), PndMdtClusterTask::PndMdtClusterTask(), PndMdtDigitization::PndMdtDigitization(), PndMdtHitProducerIdeal::PndMdtHitProducerIdeal(), PndMdtPointsToWaveform::PndMdtPointsToWaveform(), PndMdtTrkProducer::PndMdtTrkProducer(), PndMissingPzCleanerTask::PndMissingPzCleanerTask(), PndMvdGemTrackFinderOnHits::PndMvdGemTrackFinderOnHits(), PndMvdHitProducerIdeal::PndMvdHitProducerIdeal(), PndMvdPixelClusterTask::PndMvdPixelClusterTask(), PndMvdTimeWalkCorrTask::PndMvdTimeWalkCorrTask(), PndMvdToPix4ClusterTask::PndMvdToPix4ClusterTask(), PndRecoKalmanTask::PndRecoKalmanTask(), PndRecoKalmanTask2::PndRecoKalmanTask2(), PndRecoMultiKalmanTask::PndRecoMultiKalmanTask(), PndRecoMultiKalmanTask2::PndRecoMultiKalmanTask2(), PndRichHitFinder::PndRichHitFinder(), PndRichHitProducer::PndRichHitProducer(), PndSciTDigiTask::PndSciTDigiTask(), PndSciTHitProducerIdeal::PndSciTHitProducerIdeal(), PndSdsHitProducerIdeal::PndSdsHitProducerIdeal(), PndSdsHybridHitProducer::PndSdsHybridHitProducer(), PndSdsIdealClusterTask::PndSdsIdealClusterTask(), PndSdsIdealRecoTask::PndSdsIdealRecoTask(), PndSdsNoiseProducer::PndSdsNoiseProducer(), PndSdsPixelClusterTask::PndSdsPixelClusterTask(), PndSdsStripClusterTask::PndSdsStripClusterTask(), PndSdsStripHitProducer::PndSdsStripHitProducer(), PndSdsTimeWalkCorrTask::PndSdsTimeWalkCorrTask(), PndSttFindTracks::PndSttFindTracks(), PndSttHelixHitProducer::PndSttHelixHitProducer(), PndSttHitProducerIdeal::PndSttHitProducerIdeal(), PndSttHitProducerRealFast::PndSttHitProducerRealFast(), PndSttHitProducerRealFull::PndSttHitProducerRealFull(), PndSttMatchTracks::PndSttMatchTracks(), PndSttMvdGemTracking::PndSttMvdGemTracking(), PndTrackSmearTask::PndTrackSmearTask(), PndTrkTracking2::PndTrkTracking2(), reco(), reco_complete(), reco_complete_gf2(), reco_complete_newSTT(), reco_complete_sec(), recoideal_complete(), PndMvdClusterTask::SetPersistance(), PndMvdDigiTask::SetPersistance(), PndLmdPixelHitProducerFast::SetPersistance(), PndSdsHitProducerIdeal::SetPersistance(), PndSttMvdGemTracking::SetPersistenc(), PndMdtClusterTask::SetPersistence(), PndSttHelixHitProducer::SetPersistence(), PndMissingPzCleanerTask::SetPersistence(), PndFtsHitProducerRealFast::SetPersistence(), PndFtsHitProducerRealFull::SetPersistence(), PndSttHitProducerIdeal::SetPersistence(), PndSttHitProducerRealFull::SetPersistence(), PndSttHitProducerRealFast::SetPersistence(), PndFtsHitProducerIdeal::SetPersistence(), PndTrackSmearTask::SetPersistence(), PndSciTHitProducerIdeal::SetPersistence(), PndIdealTrackFinder::SetPersistence(), PndSttMatchTracks::SetPersistence(), PndSttFindTracks::SetPersistence(), PndFtsHoughTrackerTask::SetPersistence(), PndTrkTracking2::SetPersistence(), PndEmcMakeRecoHit::SetStorageOfData(), PndEmcMakeClusterOnline::SetStorageOfData(), PndEmcFWEndcapDigi::SetStorageOfData(), PndEmcFWEndcapTimebasedWaveforms::SetStorageOfData(), PndEmcMakeDigi::SetStorageOfData(), PndMdtPointsToWaveform::SetStorageOfData(), PndEmc2DLocMaxFinder::SetStorageOfData(), PndEmcMakeCluster::SetStorageOfData(), PndEmcHitsToWaveform::SetStorageOfData(), PndEmcMakeBump::SetStorageOfData(), PndEmcTmpWaveformToDigi::SetStorageOfData(), PndEmcWaveformToDigi::SetStorageOfData(), PndEmcWaveformToCalibratedDigi::SetStorageOfData(), PndEmcMultiWaveformToCalibratedDigi::SetStorageOfData(), PndEmcExpClusterSplitter::SetStorageOfData(), PndEmcPhiBumpSplitter::SetStorageOfData(), standard_tracking(), and PndEmcFullDigiTask::StoreDigi().

31 { fPersistency = val; }
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11

Member Data Documentation

Bool_t PndLmdPairFinderTask::_ignoreClusters
private

Definition at line 40 of file PndLmdPairFinderTask.h.

Referenced by getPixelHitFromSdsHit(), and PndLmdPairFinderTask().

Double_t PndLmdPairFinderTask::_maxDistance
private

Definition at line 38 of file PndLmdPairFinderTask.h.

Referenced by Init(), and pairDistanceValid().

TClonesArray* PndLmdPairFinderTask::clusterCandidateArray
protected

Definition at line 83 of file PndLmdPairFinderTask.h.

Referenced by getPixelHitFromSdsHit(), Init(), and PndLmdPairFinderTask().

TClonesArray* PndLmdPairFinderTask::digiArray
protected

Definition at line 80 of file PndLmdPairFinderTask.h.

Referenced by getPixelHitFromSdsHit(), Init(), and PndLmdPairFinderTask().

Int_t PndLmdPairFinderTask::distanceTooHigh
private

Definition at line 32 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), Init(), and pairDistanceValid().

Int_t PndLmdPairFinderTask::eventMissedAllPlanes
private

Definition at line 31 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), and Init().

TString PndSdsTask::fFolderName
protectedinherited
Int_t PndSdsTask::fInBranchId
protectedinherited
TString PndSdsTask::fInBranchName
protectedinherited
TString PndLmdPairFinderTask::fInClusterCandidates
protected

Definition at line 86 of file PndLmdPairFinderTask.h.

Referenced by Init().

TString PndLmdPairFinderTask::fInRecoBranchName
protected

Definition at line 85 of file PndLmdPairFinderTask.h.

Referenced by Init().

Int_t PndSdsTask::fOutBranchId
protectedinherited

Definition at line 44 of file PndSdsTask.h.

Referenced by PndSdsTask::SetInBranchId().

TString PndSdsTask::fOutBranchName
protectedinherited
PndLmdGeometryHelper* PndLmdPairFinderTask::helper
protected

Definition at line 78 of file PndLmdPairFinderTask.h.

Referenced by candHitsOverlappingArea(), Exec(), getStatistics(), and Init().

TClonesArray* PndLmdPairFinderTask::hitPairArray
protected

Definition at line 82 of file PndLmdPairFinderTask.h.

Referenced by Exec(), and Init().

std::map<int, TClonesArray*> PndLmdPairFinderTask::hitPairMap
protected

Definition at line 88 of file PndLmdPairFinderTask.h.

Int_t PndLmdPairFinderTask::hitsClustered
private

Definition at line 35 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getPixelHitFromSdsHit(), and Init().

Int_t PndLmdPairFinderTask::hitsSinglePixel
private

Definition at line 35 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getPixelHitFromSdsHit(), and Init().

Int_t PndLmdPairFinderTask::noOfCombos
private

Definition at line 36 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), and Init().

Int_t PndLmdPairFinderTask::noOfEvents
private

Definition at line 29 of file PndLmdPairFinderTask.h.

Referenced by Exec(), FinishTask(), and Init().

Int_t PndLmdPairFinderTask::noOfGoodPairs
private

Definition at line 29 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getStatistics(), and Init().

Int_t PndLmdPairFinderTask::noOverlap
private

Definition at line 31 of file PndLmdPairFinderTask.h.

Referenced by Exec(), FinishTask(), and Init().

Int_t PndLmdPairFinderTask::plane0
private

Definition at line 30 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getStatistics(), and Init().

Int_t PndLmdPairFinderTask::plane1
private

Definition at line 30 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getStatistics(), and Init().

Int_t PndLmdPairFinderTask::plane2
private

Definition at line 30 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getStatistics(), and Init().

Int_t PndLmdPairFinderTask::plane3
private

Definition at line 30 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getStatistics(), and Init().

TClonesArray* PndLmdPairFinderTask::recoArray
protected

Definition at line 81 of file PndLmdPairFinderTask.h.

Referenced by Exec(), Init(), and PndLmdPairFinderTask().

Int_t PndLmdPairFinderTask::sumOfPixelHits
private

Definition at line 33 of file PndLmdPairFinderTask.h.

Referenced by FinishTask(), getPixelHitFromSdsHit(), and Init().

Int_t PndLmdPairFinderTask::unsuitable
private

Definition at line 34 of file PndLmdPairFinderTask.h.

Referenced by Exec(), Init(), and PndLmdPairFinderTask().


The documentation for this class was generated from the following files: