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

PndSdsChargedWeightedPixelMapping: Gets a vector of DigiHits and calculates the cluster center weighted with the charge. More...

#include <PndMQMvdChargeWeightedPixelMapping.h>

Inheritance diagram for PndMQMvdChargeWeightedPixelMapping:
PndMQSdsChargeWeightedPixelMapping PndMQSdsPixelBackMapping

Public Member Functions

 PndMQMvdChargeWeightedPixelMapping (Int_t verbose=0)
 
 PndMQMvdChargeWeightedPixelMapping (PndGeoHandling *geo, Int_t verbose=0)
 
 PndMQMvdChargeWeightedPixelMapping (PndGeoHandling *geo, PndSdsPixelDigiPar *digiPar, PndSdsTotDigiPar *totPar)
 
virtual void SetDigiPar (PndSdsPixelDigiPar *par)
 
virtual void SetTotPar (PndSdsTotDigiPar *par)
 
void SetChargeConverter ()
 
PndSdsHit GetCluster (std::vector< PndSdsDigiPixel * > &pixelArray)
 Main function of class to calculate the PndSdsHit out of the given PndSdsDigis. More...
 
void SetVerbose (Int_t level)
 
virtual void SetGeoHandling (PndGeoHandling *geo)
 

Public Attributes

PndSdsPixelDigiParfDigiPar
 
PndSdsTotDigiParfTotDigiPar
 
PndGeoHandlingfGeoH
 
Int_t fVerbose
 

Protected Attributes

PndSdsChargeConversionfChargeConverter
 
Double_t flx
 
Double_t fly
 
Int_t fcols
 
Int_t frows
 

Detailed Description

PndSdsChargedWeightedPixelMapping: Gets a vector of DigiHits and calculates the cluster center weighted with the charge.

PndMQMvdChargeWeightedPixelMapping.h

Author
T.Stockmanns t.sto.nosp@m.ckma.nosp@m.nns@f.nosp@m.z-ju.nosp@m.elich.nosp@m..de

Definition at line 13 of file PndMQMvdChargeWeightedPixelMapping.h.

Constructor & Destructor Documentation

PndMQMvdChargeWeightedPixelMapping::PndMQMvdChargeWeightedPixelMapping ( Int_t  verbose = 0)

Definition at line 6 of file PndMQMvdChargeWeightedPixelMapping.cxx.

References fDigiPar, fTotDigiPar, PndMQSdsPixelBackMapping::fVerbose, rtdb, SetChargeConverter(), and verbose.

9  FairRun* ana = FairRun::Instance();
10  FairRuntimeDb* rtdb=ana->GetRuntimeDb();
11  fDigiPar = (PndSdsPixelDigiPar*)(rtdb->getContainer("MVDPixelDigiPar"));
12  fTotDigiPar = (PndSdsTotDigiPar*)(rtdb->getContainer("MVDPixelTotDigiPar"));
13 
15 
16 }
#define verbose
Charge Digitization Parameter Class for SDS.
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
Digitization Parameter Class for SDS-Pixel part.
PndMQMvdChargeWeightedPixelMapping::PndMQMvdChargeWeightedPixelMapping ( PndGeoHandling geo,
Int_t  verbose = 0 
)

Definition at line 18 of file PndMQMvdChargeWeightedPixelMapping.cxx.

References fDigiPar, fTotDigiPar, PndMQSdsPixelBackMapping::fVerbose, rtdb, SetChargeConverter(), and verbose.

20  fVerbose = verbose;
21  FairRun* ana = FairRun::Instance();
22  FairRuntimeDb* rtdb=ana->GetRuntimeDb();
23  fDigiPar = (PndSdsPixelDigiPar*)(rtdb->getContainer("MVDPixelDigiPar"));
24  fTotDigiPar = (PndSdsTotDigiPar*)(rtdb->getContainer("MVDPixelTotDigiPar"));
25 
27 
28 }
#define verbose
Charge Digitization Parameter Class for SDS.
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
Digitization Parameter Class for SDS-Pixel part.
PndMQMvdChargeWeightedPixelMapping::PndMQMvdChargeWeightedPixelMapping ( PndGeoHandling geo,
PndSdsPixelDigiPar digiPar,
PndSdsTotDigiPar totPar 
)

Member Function Documentation

PndSdsHit PndMQSdsChargeWeightedPixelMapping::GetCluster ( std::vector< PndSdsDigiPixel * > &  pixelArray)
virtualinherited

Main function of class to calculate the PndSdsHit out of the given PndSdsDigis.

Implements PndMQSdsPixelBackMapping.

Definition at line 15 of file PndMQSdsChargeWeightedPixelMapping.cxx.

References col, count, PndSdsChargeConversion::DigiValueToCharge(), Double_t, PndMQSdsChargeWeightedPixelMapping::fChargeConverter, PndMQSdsChargeWeightedPixelMapping::fcols, PndMQSdsPixelBackMapping::fGeoH, PndMQSdsChargeWeightedPixelMapping::flx, PndMQSdsChargeWeightedPixelMapping::fly, PndMQSdsChargeWeightedPixelMapping::frows, PndMQSdsPixelBackMapping::fVerbose, PndMQSdsChargeWeightedPixelMapping::GetSensorDimensions(), PndGeoHandling::GetSensorDimensionsShortId(), i, PndGeoHandling::LocalToMasterErrorsShortId(), PndGeoHandling::LocalToMasterShortId(), offset(), pos, row, PndSdsHit::SetCov(), sqrt(), and t.

Referenced by PndMQMvdPixelDigiProcessorBursts::ProcessData(), and PndMQFileSinkBursts::Run().

16 {
17  Double_t col = 0, row = 0, charge = 0;
18  Double_t tempCol = 0, tempRow = 0;
19  std::vector<Double_t> timeValues;
20  std::vector<Double_t> timeValueErrors;
21 
22  Int_t count = 0, mcindex=-1;
23  //Double_t local[2], master[2];
24  //TODO: Get away from default 10 Frontends per column?
25 
26  if (pixelArray.size() == 1){
27  if (fChargeConverter->DigiValueToCharge(*pixelArray[0]) > 0){
28  col = pixelArray[0]->GetPixelColumn() + ((Int_t)(pixelArray[0]->GetFE()%10)) * fcols;
29  if (col < 0){
30  col -= 0.5;
31  col += frows / 2;
32  }
33  else col += 0.5;
34  row = pixelArray[0]->GetPixelRow()+ (pixelArray[0]->GetFE()/10) * frows;
35  if (row < 0){
36  row -= 0.5;
37  row += flx /2;
38  }
39  else row += 0.5;
40  if (fVerbose > 1)
41  std::cout << "GetCluster:col/row " << col << " " << row << std::endl;
42  count = 1;
43  charge = fChargeConverter->DigiValueToCharge(*pixelArray[0]);
44  for(Int_t mcI = 0; mcI<pixelArray[0]->GetNIndices();mcI++){
45  if (pixelArray[0]->GetIndex(mcI) > -1) {
46  mcindex = pixelArray[0]->GetIndex(mcI);
47  break;
48  }
49  }
50  timeValues.push_back(pixelArray[0]->GetTimeStamp());
51  timeValueErrors.push_back(pixelArray[0]->GetTimeStampError());
52  }
53  }
54  else {
55  //cout << "Multiple Hits!" << std::endl;
56  for (UInt_t i = 0; i < pixelArray.size(); i++){
57  //cout << "ActCol / Row" << col << " " << row << " added Col/Row " << pixelArray[i].GetPixelColumn() << " " << pixelArray[i].GetPixelRow() << endl;
58  if (fChargeConverter->DigiValueToCharge(*pixelArray[i]) > 0){
59  tempCol = pixelArray[i]->GetPixelColumn() + (Int_t)(pixelArray[0]->GetFE()%10) * fcols;
60  tempRow = pixelArray[i]->GetPixelRow() + pixelArray[0]->GetFE()/10 * frows;
61  col += (tempCol*fChargeConverter->DigiValueToCharge(*pixelArray[i]));
62  row += (tempRow*fChargeConverter->DigiValueToCharge(*pixelArray[i]));
63  charge += fChargeConverter->DigiValueToCharge(*pixelArray[i]);
64  timeValues.push_back(pixelArray[i]->GetTimeStamp());
65  timeValueErrors.push_back(pixelArray[i]->GetTimeStampError());
66  count++;
67  if(mcindex < 0){
68  for(Int_t mcI = 0; mcI<pixelArray[i]->GetNIndices();mcI++){
69  if (pixelArray[i]->GetIndex(mcI) > -1) {
70  mcindex = pixelArray[i]->GetIndex(mcI);
71  break;
72  }
73  }
74  }//mcindex
75 
76  }
77  }
78  if (count > 0){
79  if (charge > 0){
80  col /= charge;
81  row /= charge;
82  }
83  col += 0.5;
84  row += 0.5;
85  }
86  else col = row = 0;
87  }
88  if (fVerbose > 1){
89  std::cout << "Col: " << col << " Row: " << row << std::endl;
90  }
91 
92  TVector3 offset = GetSensorDimensions(pixelArray[0]->GetSensorID());
93  TVector3 locpos( col*flx - offset.X(), row*fly - offset.Y(), 0);
94  TVector3 pos = fGeoH->LocalToMasterShortId(locpos,pixelArray[0]->GetSensorID());
95 
96  Double_t errZ = 2.*fGeoH->GetSensorDimensionsShortId(pixelArray[0]->GetSensorID()).Z();
97  TMatrixD locCov(3,3);
98  locCov[0][0]=flx*flx/12.;
99  locCov[1][1]=fly*fly/12.;
100  locCov[2][2]=errZ*errZ/12;
101  TMatrixD hitCov=fGeoH->LocalToMasterErrorsShortId(locCov,pixelArray[0]->GetSensorID());
102  TVector3 dpos(sqrt(hitCov[0][0]),sqrt(hitCov[1][1]),sqrt(hitCov[2][2]));
103  //std::cout << "-I- PndMQSdsChargeWeightedPixelMapping Error DPos: " << dpos.x() << " " << dpos.y() << " " << dpos.z() << std::endl;
104 
105  Double_t meanTime = 0;
106  //Double_t meanTimeError = 0;
107  Double_t sumVar = 0;
108 
109  for (UInt_t t = 0; t < timeValues.size(); t++){
110  meanTime += timeValues[t] / (timeValueErrors[t] * timeValueErrors[t]);
111  sumVar += 1/(timeValueErrors[t] * timeValueErrors[t]);
112  }
113 
114  if (sumVar > 0)
115  meanTime /= sumVar;
116 
117 
118 
119  PndSdsHit thehit(pixelArray[0]->GetDetID(),pixelArray[0]->GetSensorID(), pos, dpos, -1, charge, pixelArray.size(),mcindex);
120  thehit.SetCov(hitCov);
121  thehit.SetTimeStamp(meanTime);
122  thehit.SetTimeStampError(1/sumVar);
123  //std::cout << "-I- PndMQSdsChargeWeightedPixelMapping TimeStamp: " << tempTime/count << std::endl;
124  return thehit;
125 }
int row
Definition: anaLmdDigi.C:67
TVector3 pos
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
int col
Definition: anaLmdDigi.C:67
TVector3 offset(2, 0, 0)
virtual Double_t DigiValueToCharge(Double_t digi)=0
Converts a given digitized charge into charge in electrons.
TVector3 GetSensorDimensionsShortId(Int_t shortId)
TMatrixD LocalToMasterErrorsShortId(const TMatrixD &local, const Int_t &shortId)
Double_t
TVector3 LocalToMasterShortId(const TVector3 &local, const Int_t &shortId)
TTree * t
Definition: bump_analys.C:13
int count
void SetCov(TMatrixD cov)
Definition: PndSdsHit.cxx:70
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
void PndMQMvdChargeWeightedPixelMapping::SetChargeConverter ( )

Definition at line 37 of file PndMQMvdChargeWeightedPixelMapping.cxx.

References PndMQSdsChargeWeightedPixelMapping::fChargeConverter, PndMQSdsChargeWeightedPixelMapping::fcols, fDigiPar, PndMQSdsChargeWeightedPixelMapping::flx, PndMQSdsChargeWeightedPixelMapping::fly, PndMQSdsChargeWeightedPixelMapping::frows, fTotDigiPar, PndMQSdsPixelBackMapping::fVerbose, PndSdsPixelDigiPar::GetChargeConvMethod(), PndSdsTotDigiPar::GetChargingTime(), PndSdsTotDigiPar::GetClockFrequency(), PndSdsTotDigiPar::GetConstCurrent(), PndSdsPixelDigiPar::GetFECols(), PndSdsPixelDigiPar::GetFERows(), PndSdsPixelDigiPar::GetNoise(), PndSdsPixelDigiPar::GetThreshold(), PndSdsPixelDigiPar::GetXPitch(), and PndSdsPixelDigiPar::GetYPitch().

Referenced by PndMQMvdChargeWeightedPixelMapping().

38 {
39  LOG(INFO) << "ChargeConversionMethod: " << fDigiPar->GetChargeConvMethod() << " " << fDigiPar->GetThreshold() << FairLogger::endl;
40  if (fDigiPar->GetChargeConvMethod() == 0){
41  if(fVerbose>0) Info("PndMQMvdChargeWeightedPixelMapping","ideal charge conversion");
43  }
44  else if (fDigiPar->GetChargeConvMethod() == 1){
45  if(fVerbose>0) Info("PndMQMvdChargeWeightedPixelMapping","use TOT charge conversion");
51  fVerbose);
52  }
53  else {
54  Fatal("PndMQMvdChargeWeightedPixelMapping", "conversion method not defined!");
55  }
56  flx = fDigiPar->GetXPitch();
57  fly = fDigiPar->GetYPitch();
60  LOG(INFO) << "ChargeConversionMethod: " << fDigiPar->GetChargeConvMethod() << " " << fChargeConverter << FairLogger::endl;
61 }
Double_t GetXPitch() const
Int_t GetChargeConvMethod() const
Double_t GetConstCurrent() const
Double_t GetNoise() const
Double_t GetClockFrequency() const
Int_t GetFERows() const
Int_t GetFECols() const
Double_t GetYPitch() const
Double_t GetChargingTime() const
Double_t GetThreshold() const
virtual void PndMQMvdChargeWeightedPixelMapping::SetDigiPar ( PndSdsPixelDigiPar par)
inlinevirtual

Definition at line 21 of file PndMQMvdChargeWeightedPixelMapping.h.

References fDigiPar, and par.

Referenced by PndMQMvdPixelDigiProcessorBursts::SetParameters().

21 {fDigiPar = par;}
Double_t par[3]
virtual void PndMQSdsPixelBackMapping::SetGeoHandling ( PndGeoHandling geo)
inlinevirtualinherited
virtual void PndMQMvdChargeWeightedPixelMapping::SetTotPar ( PndSdsTotDigiPar par)
inlinevirtual
void PndMQSdsPixelBackMapping::SetVerbose ( Int_t  level)
inlineinherited

Member Data Documentation

PndSdsChargeConversion* PndMQSdsChargeWeightedPixelMapping::fChargeConverter
protectedinherited
Int_t PndMQSdsChargeWeightedPixelMapping::fcols
protectedinherited
PndSdsPixelDigiPar* PndMQMvdChargeWeightedPixelMapping::fDigiPar
PndGeoHandling* PndMQSdsPixelBackMapping::fGeoH
inherited
Double_t PndMQSdsChargeWeightedPixelMapping::flx
protectedinherited
Double_t PndMQSdsChargeWeightedPixelMapping::fly
protectedinherited
Int_t PndMQSdsChargeWeightedPixelMapping::frows
protectedinherited
PndSdsTotDigiPar* PndMQMvdChargeWeightedPixelMapping::fTotDigiPar
Int_t PndMQSdsPixelBackMapping::fVerbose
inherited

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