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

#include <PndLmdDigiProducer.h>

Inheritance diagram for PndLmdDigiProducer:

Public Member Functions

 PndLmdDigiProducer ()
 
 PndLmdDigiProducer (Int_t k, SensorSegment segment=kLEFT)
 
 PndLmdDigiProducer (Double_t k, SensorSide side=kTOP)
 
 ~PndLmdDigiProducer ()
 
virtual void SetParContainers ()
 
virtual InitStatus Init ()
 
virtual InitStatus ReInit ()
 
virtual void Exec (Option_t *opt)
 
void AddDigi (Int_t &iStrip, Int_t iPoint, Int_t detID, TString detName, Int_t fe, Int_t channel, Double_t charge)
 
void SetParamSet ()
 

Private Member Functions

void Register ()
 
void ReSet ()
 
void ProduceHits ()
 
Bool_t SelectSensorParams (TString detname)
 
 ClassDef (PndLmdDigiProducer, 5)
 

Private Attributes

PndLmdDigiParafDigiParTrap
 
PndLmdDigiParafCurrentDigiPar
 
PndLmdDigiStripstemp
 
PndLmdCalStripfStripCalTrapLeft
 
PndLmdCalStripfStripCalTrapRight
 
PndLmdCalStripfCurrentStripCalLeft
 
PndLmdCalStripfCurrentStripCalRight
 
PndLmdCalStripfStripCalTrapCircle
 
PndLmdCalStripfCurrentStripCalCircle
 
SensorSegment fSegment
 
SensorSide fSide
 
TString fBranchName
 
TClonesArray * fPointArray
 
TClonesArray * fStripArray
 
PndLmdGeoHandling * fGeoH
 

Detailed Description

Definition at line 32 of file PndLmdDigiProducer.h.

Constructor & Destructor Documentation

PndLmdDigiProducer::PndLmdDigiProducer ( )

Definition at line 35 of file PndLmdDigiProducer.cxx.

References fBranchName.

35  : FairTask("Pnd LMD Digi Producer")
36 {
37  fBranchName = "PndLmdMCPoint";
38 }
PndLmdDigiProducer::PndLmdDigiProducer ( Int_t  k,
SensorSegment  segment = kLEFT 
)

Definition at line 40 of file PndLmdDigiProducer.cxx.

References fBranchName, and fSegment.

41  :FairTask("Pnd LMD Digi Producer")
42 {
43  fBranchName = "PndLmdMCPoint";
44 // fDigiParTrap = digipar;
45  fSegment = segment;
46  }
SensorSegment fSegment
PndLmdDigiProducer::PndLmdDigiProducer ( Double_t  k,
SensorSide  side = kTOP 
)

Definition at line 48 of file PndLmdDigiProducer.cxx.

References fBranchName, and fSide.

49  :FairTask("Pnd LMD Digi Producer")
50  {
51  fBranchName = "PndLmdMCPoint";
52  // fDigiParTrap = digipar;
53  fSide = side;
54  }
PndLmdDigiProducer::~PndLmdDigiProducer ( )

Definition at line 57 of file PndLmdDigiProducer.cxx.

References fGeoH.

58 {
59  delete fGeoH;
60  }
PndLmdGeoHandling * fGeoH

Member Function Documentation

void PndLmdDigiProducer::AddDigi ( Int_t &  iStrip,
Int_t  iPoint,
Int_t  detID,
TString  detName,
Int_t  fe,
Int_t  channel,
Double_t  charge 
)

Definition at line 241 of file PndLmdDigiProducer.cxx.

References Bool_t, fe, fStripArray, PndLmdDigiStrips::GetChannel(), PndLmdDigiStrips::GetDetID(), PndLmdDigiStrips::GetDetName(), and PndLmdDigiStrips::GetFe().

Referenced by Exec().

243 {
244  Bool_t found = kFALSE;
245  PndLmdDigiStrips* aDigi= 0;
246  for(Int_t skr=0;skr<iStrip && found==kFALSE;skr++){
247  aDigi = (PndLmdDigiStrips*)fStripArray->At(skr);
248  if(aDigi->GetDetID()==detID,
249  aDigi->GetDetName()==detName,
250  aDigi->GetFe()==fe,
251  aDigi->GetChannel()==channel)
252  {
253  // aDigi->AddCharge(charge);
254  // aDigi->AddIndex(iPoint);
255  found=kTRUE;
256  }
257  }
258 
259  if(found == kFALSE){
260  new((*fStripArray)[iStrip]) PndLmdDigiStrips(iPoint,detID,detName,fe,channel,charge);
261  iStrip++;
262  }
263 }
Int_t GetChannel() const
Int_t GetDetID() const
TString GetDetName() const
Int_t GetFe() const
int fe
Definition: anaLmdDigi.C:67
TClonesArray * fStripArray
PndLmdDigiProducer::ClassDef ( PndLmdDigiProducer  ,
 
)
private
void PndLmdDigiProducer::Exec ( Option_t *  opt)
virtual

Definition at line 127 of file PndLmdDigiProducer.cxx.

References AddDigi(), PndLmdCalStrip::CalChannelFromStrip(), PndLmdCalStrip::CalFeFromStrip(), PndLmdCalStrip::DigiStripFromPoint(), Double_t, fCurrentDigiPar, fCurrentStripCalLeft, fCurrentStripCalRight, fDigiParTrap, fGeoH, fPointArray, fStripArray, fStripCalTrapLeft, fStripCalTrapRight, fVerbose, PndLmdDigiPara::GetNrFeChannels(), PndLmdDigiPara::GetNrLeftFe(), point, and pos.

128 {
129  //reset the output array
130  fStripArray->Clear();
131 
132  //define variables
133  PndLmdMCPoint* point = NULL;
134 
135  Int_t nPoint = fPointArray->GetEntriesFast();
136  if(fVerbose>0){
137  std::cout<<"the Nr of points is"<<nPoints<<std::endl;
138  }
139 
140  //loop all points in an event
141  Int_t iStrip = 0;
142  for(Int_t iPoint = 0;iPoint<nPoints;iPoint++)
143  {
144  point = (PndLmdMCPoint*)fPointArray->At(iPoint);
145  if(! point){
146  std::cout<<"No point !"<<std::endl;
147  continue;
148  }
149 
153 
154  //transform the point from global coordinate to local coordinate
155  TVector3 posInL = fGeoH->MasterToLocalId(point->GetEntryPoint(),point->GetDetName());
156  TVector3 posOutL = fGeoH->MasterToLocalId(point->GetExitPoint(),point->GetDetName());
157  //std::cout<<"the point in global coordinate is "<<point->GetEntryPoint().X()<<","<<point->GetEntryPoint().Y()
158  //<<","<<point->GetEntryPoint().Z()<<std::endl;
159  std::cout<<"the Entry point in local coordinate is "<<posInL.X()<<","<<posInL.Y()<<","<<posInL.Z()<<std::endl;
160  std::cout<<"the Exit point in local coordinate is "<<posOutL.X()<<","<<posOutL.Y()<<","<<posOutL.Z()<<std::endl;
161 
162  Double_t eLoss = point->GetEnergyLoss();
163  std::cout<<"the eLoss of this point is: "<<eLoss<<endl;
164 
165  TVector3 pos,pos1 = posInL + posOutL;
166  pos.SetXYZ(pos1.X()/2.,pos1.Y()/2.,pos1.Z()/2.);
167  //for Left segment
168  if(pos.X()>0)
169  {
170  // std::cout<<"Hits on Left segment"<<std::endl;
171 
172  //calculate the cluster strips fired
173  std::vector<PndLmdStrips> leftStrips =
174  fCurrentStripCalLeft->DigiStripFromPoint(posInL.X(),posInL.Y(),posInL.Z(),
175  posOutL.X(),posOutL.Y(),posOutL.Z(),
176  eLoss);
177  if(leftStrips.size()!=0){
178  for(std::vector<PndLmdStrips>::const_iterator kit=leftStrips.begin();kit!=leftStrips.end();++kit)
179  {//register the strips fired
180  AddDigi(iStrip,iPoint,kLMDHitsStrip,point->GetDetName(),
181  fCurrentStripCalLeft->CalFeFromStrip(kit->GetIndex()),
182  fCurrentStripCalLeft->CalChannelFromStrip(kit->GetIndex()),
183  kit->GetCharge());
184  Int_t chan1 = (fCurrentStripCalLeft->CalFeFromStrip(kit->GetIndex()))*(fCurrentDigiPar->GetNrFeChannels())
185  +( fCurrentStripCalLeft->CalChannelFromStrip(kit->GetIndex()));
186 
187  cout<<"the iPoint is: "<<iPoint<<endl;
188  cout<<"the iStrip is :"<<iStrip-1<<endl;
189  cout<<"the channel is :"<<chan1<<endl;
190  cout<<"the information of digis: "<<point->GetDetName()<<","<<kit->GetCharge()<<endl;
191  cout<<endl;
192 
193  }
194  }else std::cout<<"the left segment is empty"<<std::endl;
195 
196  }else{// std::cout<<"Hits on Right segment"<<std::endl;
197  std::vector<PndLmdStrips> rightStrips =
198  fCurrentStripCalRight->DigiStripFromPoint(posInL.X(),posInL.Y(),posInL.Z(),
199  posOutL.X(),posOutL.Y(),posOutL.Z(),
200  eLoss);
201  // cout<<"Call the calStrip class to get digi successfully"<<endl;
202 
203  if(rightStrips.size()!=0){
204  for(std::vector<PndLmdStrips>::const_iterator kit=rightStrips.begin();
205  kit!=rightStrips.end();++kit){
206  //register the strips fired
207  AddDigi(iStrip,iPoint,kLMDHitsStrip,point->GetDetName(),
209  fCurrentStripCalRight->CalChannelFromStrip(kit->GetIndex()),
210  kit->GetCharge());
212  +(fCurrentStripCalLeft->CalChannelFromStrip(kit->GetIndex()));
213 
214 /*
215  new((*fStripArray)[iStrip]) PndLmdDigiStrips(iPoint,kLMDHitsStrip,point->GetDetName(),
216  fCurrentStripCalRight->CalFeFromStrip(kit->GetIndex())+fCurrentDigiPar->GetNrLeftFe(),
217  fCurrentStripCalRight->CalChannelFromStrip(kit->GetIndex()),
218  kit->GetCharge());
219  iStrip++;
220 */
221  // cout<<endl;
222  cout<<"the iPoint is: "<<iPoint<<endl;
223  cout<<"the iStrip is :"<<iStrip-1<<endl;
224  cout<<"the channel is :"<<chan2<<endl;
225  cout<<"the information of digis: "<<point->GetDetName()<<","<<kit->GetCharge()<<endl;
226  cout<<endl;
227 
228  }
229  }else std::cout<<"the right segment is empty"<<std::endl;
230 
231  }//judge the hits on left segment or right segment, then calculate strips
232 
233  }//loop all points for one event
234 
235  // if(fVerbose>0)
236  std::cout<<"-I- PndLmdDigiProducer: "<<nPoints<<" PndLmdMCPoint, "
237  <<iStrip<<" PndLmdDigis"<<std::endl<<std::endl;
238 
239 }//public method for Exec
TVector3 pos
PndLmdCalStrip * fCurrentStripCalLeft
int fVerbose
Definition: poormantracks.C:24
PndLmdDigiPara * fCurrentDigiPar
std::vector< PndLmdStrips > DigiStripFromPoint(Double_t inx, Double_t iny, Double_t inz, Double_t outx, Double_t outy, Double_t outz, Double_t eloss)
TClonesArray * fPointArray
PndLmdGeoHandling * fGeoH
void AddDigi(Int_t &iStrip, Int_t iPoint, Int_t detID, TString detName, Int_t fe, Int_t channel, Double_t charge)
Double_t
PndLmdCalStrip * fCurrentStripCalRight
Int_t CalFeFromStrip(Int_t stripNr)
TClonesArray * point
Definition: anaLmdDigi.C:29
PndLmdDigiPara * fDigiParTrap
PndLmdCalStrip * fStripCalTrapLeft
Int_t GetNrFeChannels() const
Int_t CalChannelFromStrip(Int_t stripNr)
Int_t GetNrLeftFe() const
TClonesArray * fStripArray
PndLmdCalStrip * fStripCalTrapRight
InitStatus PndLmdDigiProducer::Init ( )
virtual

Definition at line 79 of file PndLmdDigiProducer.cxx.

References fBranchName, fDigiParTrap, fGeoH, fPointArray, fStripArray, fStripCalTrapLeft, fStripCalTrapRight, gGeoManager, PndLmdDigiPara::print(), and PndLmdCalStrip::print().

80 {
81  FairRun* ana = FairRun::Instance();
82  FairRootManager* ioman = FairRootManager::Instance();
83 
84  fGeoH = new PndLmdGeoHandling(gGeoManager);
85 
86  if(! ioman)
87  {
88  std::cout<<"-E- PndLmdDigiProducer::Init :"
89  <<" The FariRootManager is not initialized!"<<std::endl;
90  return kFATAL;
91  }
92 
93  //input array initialization
94  fPointArray = (TClonesArray*)ioman->GetObject(fBranchName);
95  if(! fPointArray)
96  {
97  std::cout<<"-E- PndLmdDigiProducer::Init :"
98  <<"No PndLmdMCPoint Array"<<std::endl;
99  return kERROR;
100  }
101 
102  //creat and register output array
103  fStripArray = new TClonesArray("PndLmdDigiStrips");
104  ioman->Register("LMDStripDigis","LMD",fStripArray,kTRUE);
105 
106  if(! fDigiParTrap)
107  {
108  std::cout<<"-E- PndLmdDigiProducer::DigiParTrap Container doesn't exist!"<<std::endl;
109  return kERROR;
110  }
111 //print the digipar parameters for check
112  fDigiParTrap->print();
113 
115  cout<<"the digi paras for left segment!"<<endl;
117 
119  cout<<"the digi paras for right segment!"<<endl;
121 
122  std::cout<<"the PndLmdDigiProcuder initialized successfully!"<<std::endl;
123 
124  return kSUCCESS;
125 }
TClonesArray * fPointArray
PndLmdGeoHandling * fGeoH
TGeoManager * gGeoManager
PndLmdDigiPara * fDigiParTrap
PndLmdCalStrip * fStripCalTrapLeft
void print() const
TClonesArray * fStripArray
PndLmdCalStrip * fStripCalTrapRight
void PndLmdDigiProducer::ProduceHits ( )
private
void PndLmdDigiProducer::Register ( )
private
InitStatus PndLmdDigiProducer::ReInit ( )
virtual

Definition at line 72 of file PndLmdDigiProducer.cxx.

References SetParContainers().

73 {
75  return kSUCCESS;
76 }
virtual void SetParContainers()
void PndLmdDigiProducer::ReSet ( )
private
Bool_t PndLmdDigiProducer::SelectSensorParams ( TString  detname)
private
void PndLmdDigiProducer::SetParamSet ( )
void PndLmdDigiProducer::SetParContainers ( )
virtual

Definition at line 62 of file PndLmdDigiProducer.cxx.

References fDigiParTrap, and rtdb.

Referenced by ReInit().

63 {
64  FairRun* ana = FairRun::Instance();
65  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
66  fDigiParTrap = (PndLmdDigiPara*)(rtdb->getContainer("LmdStripDigiParaTrap"));
67  //if(!fDigiParTrap) cout<<"The digi parameters has been set to container!"<<endl;
68  //fDigiParTrap->print();
69  }
PndLmdDigiPara * fDigiParTrap
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66

Member Data Documentation

TString PndLmdDigiProducer::fBranchName
private

Definition at line 76 of file PndLmdDigiProducer.h.

Referenced by Init(), and PndLmdDigiProducer().

PndLmdDigiPara* PndLmdDigiProducer::fCurrentDigiPar
private

Definition at line 60 of file PndLmdDigiProducer.h.

Referenced by Exec().

PndLmdCalStrip* PndLmdDigiProducer::fCurrentStripCalCircle
private

Definition at line 71 of file PndLmdDigiProducer.h.

PndLmdCalStrip* PndLmdDigiProducer::fCurrentStripCalLeft
private

Definition at line 67 of file PndLmdDigiProducer.h.

Referenced by Exec().

PndLmdCalStrip* PndLmdDigiProducer::fCurrentStripCalRight
private

Definition at line 68 of file PndLmdDigiProducer.h.

Referenced by Exec().

PndLmdDigiPara* PndLmdDigiProducer::fDigiParTrap
private

Definition at line 59 of file PndLmdDigiProducer.h.

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

PndLmdGeoHandling* PndLmdDigiProducer::fGeoH
private

Definition at line 89 of file PndLmdDigiProducer.h.

Referenced by Exec(), Init(), and ~PndLmdDigiProducer().

TClonesArray* PndLmdDigiProducer::fPointArray
private

Definition at line 79 of file PndLmdDigiProducer.h.

Referenced by Exec(), and Init().

SensorSegment PndLmdDigiProducer::fSegment
private

Definition at line 73 of file PndLmdDigiProducer.h.

Referenced by PndLmdDigiProducer().

SensorSide PndLmdDigiProducer::fSide
private

Definition at line 74 of file PndLmdDigiProducer.h.

Referenced by PndLmdDigiProducer().

TClonesArray* PndLmdDigiProducer::fStripArray
private

Definition at line 81 of file PndLmdDigiProducer.h.

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

PndLmdCalStrip* PndLmdDigiProducer::fStripCalTrapCircle
private

Definition at line 70 of file PndLmdDigiProducer.h.

PndLmdCalStrip* PndLmdDigiProducer::fStripCalTrapLeft
private

Definition at line 65 of file PndLmdDigiProducer.h.

Referenced by Exec(), and Init().

PndLmdCalStrip* PndLmdDigiProducer::fStripCalTrapRight
private

Definition at line 66 of file PndLmdDigiProducer.h.

Referenced by Exec(), and Init().

PndLmdDigiStrips* PndLmdDigiProducer::temp
private

Definition at line 62 of file PndLmdDigiProducer.h.


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