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

#include <PndMdtDigiProducer.h>

Inheritance diagram for PndMdtDigiProducer:

Public Member Functions

 PndMdtDigiProducer ()
 
 ~PndMdtDigiProducer ()
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *opt)
 
PndMdtDigiAddDigiBox (Int_t detID, TVector3 &pos, std::vector< Int_t > pointList)
 
PndMdtDigiAddDigiStrip (Int_t detID, TVector3 &pos, std::vector< Int_t > pointList)
 
void SetStripMode (Bool_t mode=kTRUE)
 

Private Member Functions

 ClassDef (PndMdtDigiProducer, 1)
 

Private Attributes

Bool_t fStripMode
 
Float_t fBarrelStart
 Strip Mode. More...
 
Float_t fEndcapStart
 
Float_t fMFStart
 
TClonesArray * fPointArray
 
TClonesArray * fDigiBoxArray
 
TClonesArray * fDigiStripArray
 

Detailed Description

Definition at line 12 of file PndMdtDigiProducer.h.

Constructor & Destructor Documentation

PndMdtDigiProducer::PndMdtDigiProducer ( )

Default constructor

Definition at line 32 of file PndMdtDigiProducer.cxx.

References fStripMode.

32  :
33  FairTask(" MDT Digi Producer") {
34  fStripMode = kTRUE;
35 }
PndMdtDigiProducer::~PndMdtDigiProducer ( )

Destructor

Definition at line 39 of file PndMdtDigiProducer.cxx.

39 { }

Member Function Documentation

PndMdtDigi * PndMdtDigiProducer::AddDigiBox ( Int_t  detID,
TVector3 &  pos,
std::vector< Int_t >  pointList 
)

Definition at line 210 of file PndMdtDigiProducer.cxx.

References fDigiBoxArray.

Referenced by Exec().

211 {
212  // It fills the PndMdtDigi category
213  TClonesArray& clref = *fDigiBoxArray;
214  Int_t size = clref.GetEntriesFast();
215  return new(clref[size]) PndMdtDigi(detID, pos, pointList);
216 }
TVector3 pos
TClonesArray * fDigiBoxArray
PndMdtDigi * PndMdtDigiProducer::AddDigiStrip ( Int_t  detID,
TVector3 &  pos,
std::vector< Int_t >  pointList 
)

Definition at line 221 of file PndMdtDigiProducer.cxx.

References fDigiStripArray.

Referenced by Exec().

222 {
223  // It fills the PndMdtDigi category
224 
225  TClonesArray& clref = *fDigiStripArray;
226  Int_t size = clref.GetEntriesFast();
227  return new(clref[size]) PndMdtDigi(detID, pos, pointList);
228 }
TVector3 pos
TClonesArray * fDigiStripArray
PndMdtDigiProducer::ClassDef ( PndMdtDigiProducer  ,
 
)
private
void PndMdtDigiProducer::Exec ( Option_t *  opt)
virtual

Virtual method Exec

Definition at line 102 of file PndMdtDigiProducer.cxx.

References AddDigiBox(), AddDigiStrip(), Double_t, fBarrelStart, fDigiBoxArray, fDigiStripArray, fEndcapStart, fMFStart, fPointArray, fStripMode, PndMdtPoint::GetLayerID(), PndMdtPoint::GetModule(), PndMdtPoint::GetPosIn(), PndMdtPoint::GetSector(), gGeoManager, and point.

103 {
104  // Reset output array
105  fDigiBoxArray->Delete();
106  if (fStripMode) fDigiStripArray->Delete();
107 
108  map<Int_t, std::vector <Int_t> > mapStripPoint; // PointIds with same DetId - strip
109  map<Int_t, std::vector <Int_t> > mapBoxPoint; // PointIds with same DetId - box
110  map<Int_t, TVector3> mapStripPos; // Position for strip
111  map<Int_t, TVector3> mapBoxPos; // Position for box
112 
113  mapStripPoint.clear();
114  mapBoxPoint.clear();
115  mapStripPos.clear();
116  mapBoxPos.clear();
117 
118  TVector3 mdtSize(0.5, 0.5, 0.5);
119 
120  // Loop over MdtPoints
121  Int_t nPoints = fPointArray->GetEntriesFast();
122  PndMdtPoint *point = 0;
123  TVector3 inPos, outPos, meanPos;
124 
125  for (Int_t iPoint=0; iPoint<nPoints; iPoint++) {
126  point = (PndMdtPoint*) fPointArray->At(iPoint);
127  if (point->GetEnergyLoss()==0) continue;
128 
129  point->Position(inPos);
130  outPos = point->GetPosIn();
131 
132  if ((inPos-outPos).Mag()<0.2) continue; // skipped points
133 
134  meanPos = 0.5*(inPos+outPos);
135  gGeoManager->FindNode(meanPos.X(), meanPos.Y(), meanPos.Z()); // TGeoNode *mdtNode = (TGeoNode*) //[R.K.03/2017] unused variable
136  TGeoMatrix *mdtMat = (TGeoMatrix*)gGeoManager->GetCurrentMatrix();
137  const Double_t *matM = mdtMat->GetTranslation();
138  TVector3 tubePos(matM[0], matM[1], matM[2]);
139  TVector3 stripPos1, stripPos2;
140  Int_t stripNum1 = -10, stripNum2 = -10, stripId1 = -10, stripId2 = -10;
141  if (point->GetModule()==1)
142  {
143  stripNum1 = (Int_t)(fBarrelStart - point->GetZ()-0.25);
144  stripNum2 = (Int_t)(fBarrelStart - point->GetZ()+0.25);
145  if (stripNum1<0) stripNum1 = 0;
146  if (stripNum2<0) stripNum2 = 0;
147  stripPos1.SetXYZ(matM[0], matM[1], fBarrelStart - stripNum1 - 0.5);
148  stripPos2.SetXYZ(matM[0], matM[1], fBarrelStart - stripNum2 - 0.5);
149  }
150  if (point->GetModule()==2)
151  {
152  stripNum1 = (Int_t)(fEndcapStart - point->GetX()-0.25);
153  stripNum2 = (Int_t)(fEndcapStart - point->GetX()+0.25);
154  if (stripNum1<0) stripNum1 = 0;
155  if (stripNum2<0) stripNum2 = 0;
156  stripPos1.SetXYZ(fEndcapStart - stripNum1 - 0.5, matM[1], matM[2]);
157  stripPos2.SetXYZ(fEndcapStart - stripNum2 - 0.5, matM[1], matM[2]);
158  }
159  if (point->GetModule()==3)
160  {
161  stripNum1 = (Int_t)(fMFStart - point->GetX()-0.25);
162  stripNum2 = (Int_t)(fMFStart - point->GetX()+0.25);
163  if (stripNum1<0) stripNum1 = 0;
164  if (stripNum2<0) stripNum2 = 0;
165  stripPos1.SetXYZ(fMFStart - stripNum1 - 0.5, matM[1], matM[2]);
166  stripPos2.SetXYZ(fMFStart - stripNum2 - 0.5, matM[1], matM[2]);
167  }
168 
169  stripId1 = stripNum1 + 1000*point->GetLayerID() + 100000*point->GetSector() + 1000000*point->GetModule();
170  stripId2 = stripNum2 + 1000*point->GetLayerID() + 100000*point->GetSector() + 1000000*point->GetModule();
171 
172  if (fStripMode)
173  {
174  mapBoxPoint[point->GetDetectorID()].push_back(iPoint);
175  mapBoxPos[point->GetDetectorID()] = tubePos;
176  mapStripPoint[stripId1].push_back(iPoint);
177  mapStripPos[stripId1] = stripPos1;
178  if (stripNum1!=stripNum2)
179  {
180  mapStripPoint[stripId2].push_back(iPoint);
181  mapStripPos[stripId2] = stripPos2;
182  }
183  }
184  else
185  {
186  mapBoxPoint[point->GetDetectorID()].push_back(iPoint);
187  mapBoxPos[point->GetDetectorID()] = stripPos1;
188  }
189 
190  } // Loop over MdtPoints
191 
192  map<Int_t, std::vector <Int_t> >::const_iterator boxIter;
193  for( boxIter = mapBoxPoint.begin(); boxIter != mapBoxPoint.end(); ++boxIter)
194  {
195  AddDigiBox((*boxIter).first, mapBoxPos[(*boxIter).first], (*boxIter).second);
196  }
197  map<Int_t, std::vector <Int_t> >::const_iterator stripIter;
198  for( stripIter = mapStripPoint.begin(); stripIter != mapStripPoint.end(); ++stripIter)
199  {
200  AddDigiStrip((*stripIter).first, mapStripPos[(*stripIter).first], (*stripIter).second);
201  }
202 
203 
204 
205 }
TClonesArray * fDigiStripArray
PndMdtDigi * AddDigiStrip(Int_t detID, TVector3 &pos, std::vector< Int_t > pointList)
PndMdtDigi * AddDigiBox(Int_t detID, TVector3 &pos, std::vector< Int_t > pointList)
TClonesArray * fDigiBoxArray
TGeoManager * gGeoManager
TClonesArray * fPointArray
Short_t GetSector() const
Definition: PndMdtPoint.h:54
Double_t
TClonesArray * point
Definition: anaLmdDigi.C:29
Float_t fBarrelStart
Strip Mode.
TVector3 GetPosIn() const
Definition: PndMdtPoint.h:47
Short_t GetLayerID() const
Definition: PndMdtPoint.h:55
Short_t GetModule() const
Definition: PndMdtPoint.h:53
InitStatus PndMdtDigiProducer::Init ( )
virtual

Virtual method Init

Definition at line 45 of file PndMdtDigiProducer.cxx.

References Double_t, fBarrelStart, fDigiBoxArray, fDigiStripArray, fEndcapStart, fMFStart, fPointArray, fStripMode, and gGeoManager.

45  {
46 
47  cout << "-I- PndMdtDigiProducer::Init: "
48  << "INITIALIZATION *********************" << endl;
49 
50  //FairRun* sim = FairRun::Instance(); //[R.K. 01/2017] unused variable?
51  //FairRuntimeDb* rtdb=sim->GetRuntimeDb(); //[R.K. 01/2017] unused variable?
52 
53  // Get RootManager
54  FairRootManager* ioman = FairRootManager::Instance();
55  if ( ! ioman ) {
56  cout << "-E- PndMdtDigiProducer::Init: "
57  << "RootManager not instantiated!" << endl;
58  return kFATAL;
59  }
60 
61  // Get input array
62  fPointArray = (TClonesArray*) ioman->GetObject("MdtPoint");
63  if ( ! fPointArray ) {
64  cout << "-W- PndMdtDigiProducer::Init: "
65  << "No MdtPoint array!" << endl;
66  return kERROR;
67  }
68 
69  // Create and register output array
70  fDigiBoxArray = new TClonesArray("PndMdtDigi");
71  ioman->Register("MdtDigiBox","Mdt",fDigiBoxArray,kTRUE);
72 
73  if (fStripMode)
74  {
75  fDigiStripArray = new TClonesArray("PndMdtDigi");
76  ioman->Register("MdtDigiStrip","Mdt",fDigiStripArray,kTRUE);
77  }
78 
79  TGeoVolume *volBarrel = (TGeoVolume*)gGeoManager->FindVolumeFast("MdtBarrel");
80  TGeoBBox *boxBarrel = (TGeoBBox*)volBarrel->GetShape();
81  const Double_t *orBarrel = boxBarrel->GetOrigin();
82  fBarrelStart = orBarrel[2]+boxBarrel->GetDZ();
83  TGeoVolume *volEndcap = (TGeoVolume*)gGeoManager->FindVolumeFast("MdtEndcap");
84  TGeoBBox *boxEndcap = (TGeoBBox*)volEndcap->GetShape();
85  const Double_t *orEndcap = boxEndcap->GetOrigin();
86  fEndcapStart = orEndcap[0]+boxEndcap->GetDX();
87  TGeoVolume *volMF = (TGeoVolume*)gGeoManager->FindVolumeFast("MdtMF");
88  TGeoBBox *boxMF = (TGeoBBox*)volMF->GetShape();
89  const Double_t *orMF = boxMF->GetOrigin();
90  fMFStart = orMF[0]+boxMF->GetDX();
91 
92  cout << "-I- PndMdtDigiProducer: Intialization successfull" << endl;
93 
94  return kSUCCESS;
95 
96 }
TClonesArray * fDigiStripArray
TClonesArray * fDigiBoxArray
TGeoManager * gGeoManager
TClonesArray * fPointArray
Double_t
Float_t fBarrelStart
Strip Mode.
void PndMdtDigiProducer::SetStripMode ( Bool_t  mode = kTRUE)
inline

Definition at line 35 of file PndMdtDigiProducer.h.

References fStripMode, and mode.

35 { fStripMode = mode; };
Int_t mode
Definition: autocutx.C:47

Member Data Documentation

Float_t PndMdtDigiProducer::fBarrelStart
private

Strip Mode.

Definition at line 41 of file PndMdtDigiProducer.h.

Referenced by Exec(), and Init().

TClonesArray* PndMdtDigiProducer::fDigiBoxArray
private

Output array of PndMdtDigi

Definition at line 49 of file PndMdtDigiProducer.h.

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

TClonesArray* PndMdtDigiProducer::fDigiStripArray
private

Definition at line 50 of file PndMdtDigiProducer.h.

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

Float_t PndMdtDigiProducer::fEndcapStart
private

Definition at line 42 of file PndMdtDigiProducer.h.

Referenced by Exec(), and Init().

Float_t PndMdtDigiProducer::fMFStart
private

Definition at line 43 of file PndMdtDigiProducer.h.

Referenced by Exec(), and Init().

TClonesArray* PndMdtDigiProducer::fPointArray
private

Input array of PndMdtPoint

Definition at line 46 of file PndMdtDigiProducer.h.

Referenced by Exec(), and Init().

Bool_t PndMdtDigiProducer::fStripMode
private

Definition at line 35 of file PndMdtDigiProducer.h.

Referenced by Exec(), Init(), PndMdtDigiProducer(), and SetStripMode().


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