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

#include <PndLmdDigiQTask.h>

Inheritance diagram for PndLmdDigiQTask:

Public Member Functions

 PndLmdDigiQTask (const PndLmdDigiQTask &)=delete
 
 PndLmdDigiQTask (TString digiBranch="LMDPixelDigis")
 
 ~PndLmdDigiQTask ()
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *opt)
 
virtual void Finish ()
 
void SetWriteMC (bool wr)
 

Private Member Functions

 ClassDef (PndLmdDigiQTask, 2)
 

Private Attributes

TString fDigiName
 
TClonesArray * fMCHits
 
TClonesArray * fMCTracks
 
TClonesArray * fDigis
 
TClonesArray * fDigiQ
 
int fEventNr
 
bool fWriteAllMC
 
PndLmdGeometryHelperlmd_geo_helper
 

Detailed Description

Definition at line 32 of file PndLmdDigiQTask.h.

Constructor & Destructor Documentation

PndLmdDigiQTask::PndLmdDigiQTask ( const PndLmdDigiQTask )
delete

Default constructor

PndLmdDigiQTask::PndLmdDigiQTask ( TString  digiBranch = "LMDPixelDigis")

Definition at line 47 of file PndLmdDigiQTask.cxx.

References fDigiName, and fWriteAllMC.

47  :
48  FairTask("Digis Quality Task for PANDA Lmd"), fEventNr(0), lmd_geo_helper(
50  fWriteAllMC = false;
51  fDigiName = digiBranch;
52 }
static PndLmdGeometryHelper & getInstance()
PndLmdGeometryHelper & lmd_geo_helper
PndLmdDigiQTask::~PndLmdDigiQTask ( )

Destructor

Definition at line 55 of file PndLmdDigiQTask.cxx.

55  {
56 }

Member Function Documentation

PndLmdDigiQTask::ClassDef ( PndLmdDigiQTask  ,
 
)
private
void PndLmdDigiQTask::Exec ( Option_t *  opt)
virtual

Virtual method Exec

Set elastic/inelastic flag ----------------------------------------------——


Definition at line 110 of file PndLmdDigiQTask.cxx.

References fabs(), fDigiQ, fDigis, fEventNr, fMCHits, fMCTracks, fVerbose, PndLmdGeometryHelper::getHitLocationInfo(), PndSdsDigi::GetIndex(), PndMCTrack::GetMomentum(), PndMCTrack::GetMotherID(), PndSdsDigi::GetNIndices(), PndMCTrack::GetPdgCode(), PndSdsDigi::GetSensorID(), i, lmd_geo_helper, MCPoint, PndLmdDigiQ::SetEvT(), PndLmdDigiQ::SetFlBkg(), PndLmdDigiQ::SetFlSig(), PndLmdDigiQ::SetHalf(), PndLmdDigiQ::SetMCtrkID(), PndLmdDigiQ::SetModule(), PndLmdDigiQ::SetPDG(), PndLmdDigiQ::SetPlane(), PndLmdDigiQ::SetSide(), and PndLmdDigiQ::SetThMC().

110  {
111  FairRootManager* ioman = FairRootManager::Instance();
112  double glEvTime = ioman->GetEventTime();
113  fDigiQ->Delete();
114  //const int nMCHits = fMCHits->GetEntriesFast(); //[R.K. 01/2017] unused variable
115  const int nDigis = fDigis->GetEntriesFast();
116  const int nParticles = fMCTracks->GetEntriesFast();
117 
119  bool elfl = false;
120  int sumID = 0;
121  //int TotCharge=0; //[R.K. 01/2017] unused variable
122  for (Int_t iN = 0; iN < nParticles; iN++) {
123 
124  PndMCTrack *mctrk = (PndMCTrack*) fMCTracks->At(iN);
125  //int glPDG = mctrk->GetPdgCode(); //[R.K. 01/2017] unused variable
126  Int_t mcID = mctrk->GetPdgCode();
127  int motherid = mctrk->GetMotherID();
128  if (motherid < 0) {
129  sumID += fabs(mcID);
130  }
131  }
132  if (sumID == 4424)
133  elfl = true;
135 
136  for (Int_t i = 0; i < nDigis; i++) {
137  PndSdsDigiPixel* DigiPoint = (PndSdsDigiPixel*) (fDigis->At(i)); // read digi hit
138  TClonesArray& clref = *fDigiQ;
139  Int_t size = clref.GetEntriesFast();
140  PndLmdDigiQ *digiq = new (clref[size]) PndLmdDigiQ(*DigiPoint, elfl);
141  int nmchits = DigiPoint->GetNIndices(); // number of PndSdsMCPoint(s) contributing to digi
142  int sensorID = DigiPoint->GetSensorID();
143  auto const& digi_info(lmd_geo_helper.getHitLocationInfo(sensorID));
144 
145  for (Int_t j = 0; j < nmchits; j++) {
146  int mcind = DigiPoint->GetIndex(j);
147  PndSdsMCPoint* MCPoint = (PndSdsMCPoint*) (fMCHits->At(mcind));
148  int MCtrk = MCPoint->GetTrackID();
149  PndMCTrack *mctrk = (PndMCTrack*) fMCTracks->At(MCtrk);
150  int glPDG = mctrk->GetPdgCode(); // barp: -2212
151  digiq->SetMCtrkID(MCtrk);
152  digiq->SetPDG(glPDG);
153  digiq->SetPlane(digi_info.plane);
154  digiq->SetHalf(digi_info.detector_half);
155  digiq->SetModule(digi_info.module);
156  digiq->SetSide(digi_info.module_side);
157  digiq->SetEvT(glEvTime);
158  int movID = mctrk->GetMotherID(); // primary: <0
159  TVector3 MomMC = mctrk->GetMomentum();
160  double thMC = MomMC.Theta();
161  digiq->SetThMC(thMC);
162  if (glPDG == -2212 && movID < 0 && elfl)
163  digiq->SetFlSig();
164  else
165  digiq->SetFlBkg();
166  }
167  }
168  if (fVerbose > 2)
169  cout << "PndLmdDigiQTask::Exec END!" << endl;
170  fEventNr++;
171 }
int fVerbose
Definition: poormantracks.C:24
Int_t GetSensorID() const
Definition: PndSdsDigi.h:59
Int_t i
Definition: run_full.C:25
void SetThMC(double th)
Definition: PndLmdDigiQ.h:37
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
Int_t GetIndex(int i=0) const
Definition: PndSdsDigi.h:63
TFile * MCPoint
Definition: anaLmdDigi.C:25
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
PndLmdGeometryHelper & lmd_geo_helper
TClonesArray * fDigis
void SetMCtrkID(int id)
Definition: PndLmdDigiQ.h:38
void SetPDG(int pdgcode)
Definition: PndLmdDigiQ.h:32
TClonesArray * fMCTracks
void SetPlane(int pl)
Definition: PndLmdDigiQ.h:33
TClonesArray * fMCHits
const PndLmdHitLocationInfo & getHitLocationInfo(const std::string &volume_path)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void SetEvT(double t)
Definition: PndLmdDigiQ.h:39
void SetSide(int side)
Definition: PndLmdDigiQ.h:36
void SetFlSig()
Definition: PndLmdDigiQ.h:30
TClonesArray * fDigiQ
void SetModule(int mod)
Definition: PndLmdDigiQ.h:35
void SetFlBkg()
Definition: PndLmdDigiQ.h:31
Data class to store the digi output of a pixel module.
Int_t GetNIndices() const
Definition: PndSdsDigi.h:64
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
void SetHalf(int hf)
Definition: PndLmdDigiQ.h:34
void PndLmdDigiQTask::Finish ( )
virtual

Definition at line 173 of file PndLmdDigiQTask.cxx.

173  {
174 }
InitStatus PndLmdDigiQTask::Init ( )
virtual

Virtual method Init

Definition at line 59 of file PndLmdDigiQTask.cxx.

References fDigiQ, fDigis, fMCHits, and fMCTracks.

Referenced by runLumiPixel8DigiQA().

59  {
60 
61  // Get RootManager
62  FairRootManager* ioman = FairRootManager::Instance();
63  if (!ioman) {
64  std::cout << "-E- PndLmdDigiQTask::Init: "
65  << "RootManager not instantiated!" << std::endl;
66  return kFATAL;
67  }
68 
69  // fMCHeader = (TClonesArray*) ioman->GetObject("MCEventHeader.");
70  // if ( !fMCHeader) {
71  // std::cout << "-W- PndLmdDigiQTask::Init: "<< "No MCEventHeader "<<" object!" << std::endl;
72  // return kERROR;
73  // }
74 
75  //Get MC points
76  fMCHits = (TClonesArray*) ioman->GetObject("LMDPoint");
77  if (!fMCHits) {
78  std::cout << "-W- PndLmdDigiQTask::Init: " << "No LMDPoint" << " array!"
79  << std::endl;
80  return kERROR;
81  }
82 
83  //Get MC tracks
84  fMCTracks = (TClonesArray*) ioman->GetObject("MCTrack");
85  if (!fMCTracks) {
86  std::cout << "-W- PndLmdDigiQTask::Init: " << "No MCTrack" << " array!"
87  << std::endl;
88  return kERROR;
89  }
90 
91  //Get digis
92  fDigis = (TClonesArray*) ioman->GetObject("LMDPixelDigis");
93  if (!fDigis) {
94  std::cout << "-W- PndLmdDigiQTask::Init: " << "No LMDPixelDigis"
95  << " array!" << std::endl;
96  return kERROR;
97  }
98 
99  fDigiQ = new TClonesArray("PndLmdDigiQ");
100  ioman->Register("LMDPixelDigisQ", "DigiQ", fDigiQ, kTRUE);
101 
102  //FairRun* fRun = FairRun::Instance(); //[R.K. 01/2017] unused variable?
103  //FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); //[R.K. 01/2017] unused variable
104 
105  return kSUCCESS;
106 }
TClonesArray * fDigis
TClonesArray * fMCTracks
TClonesArray * fMCHits
TClonesArray * fDigiQ
void PndLmdDigiQTask::SetWriteMC ( bool  wr)
inline

Definition at line 56 of file PndLmdDigiQTask.h.

References fWriteAllMC.

56 {fWriteAllMC = wr;}

Member Data Documentation

TString PndLmdDigiQTask::fDigiName
private

Definition at line 60 of file PndLmdDigiQTask.h.

Referenced by PndLmdDigiQTask().

TClonesArray* PndLmdDigiQTask::fDigiQ
private

Definition at line 71 of file PndLmdDigiQTask.h.

Referenced by Exec(), and Init().

TClonesArray* PndLmdDigiQTask::fDigis
private

Definition at line 63 of file PndLmdDigiQTask.h.

Referenced by Exec(), and Init().

int PndLmdDigiQTask::fEventNr
private

Definition at line 73 of file PndLmdDigiQTask.h.

Referenced by Exec().

TClonesArray* PndLmdDigiQTask::fMCHits
private

Definition at line 61 of file PndLmdDigiQTask.h.

Referenced by Exec(), and Init().

TClonesArray* PndLmdDigiQTask::fMCTracks
private

Definition at line 62 of file PndLmdDigiQTask.h.

Referenced by Exec(), and Init().

bool PndLmdDigiQTask::fWriteAllMC
private

Definition at line 78 of file PndLmdDigiQTask.h.

Referenced by PndLmdDigiQTask(), and SetWriteMC().

PndLmdGeometryHelper& PndLmdDigiQTask::lmd_geo_helper
private

Definition at line 80 of file PndLmdDigiQTask.h.

Referenced by Exec().


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