133 std::cout<<
"PndHypDPatternRecoTask::Exec"<<std::endl;
135 if(
fTrackArray==0) Fatal(
"PndHypDPatternReco::Exec)",
"No TrackArray");
139 std::map<unsigned int,GFTrackCand*> candmap;
140 std::cout<<
"<<<<< Event "<<
fEventNr++<<
" <<<"<<std::endl;
144 std::map<unsigned int,TClonesArray*>::iterator iter=
fHitBranchMap.begin();
151 for(Int_t ip=0; ip<np; ++ip){
166 if(point==0)
continue;
168 unsigned int id=point->GetTrackID();
170 if(
id>10000)
continue;
172 if(candmap[
id]==NULL){
179 candmap[id]->
addHit(iter->first,ip);
188 std::map<unsigned int,GFTrackCand*>::iterator candIter=candmap.begin();
189 while(candIter!=candmap.end()){
201 Error(
"PndHypDPRTask::Exec",
"MCTrack Id=&i not found!",candIter->first);
209 std::cout<<
" particle "<<pdg<<std::endl;
217 else{ q=TDatabasePDG::Instance()->GetParticle(pdg)->Charge()/3.;
231 std::cout<<
" pion prim "<<mc->
GetMotherID()<<std::endl;
232 std::cout<<
" pion vertex "<<vtx.X()<<
" "<<vtx.Y()<<
" "<<vtx.Z()<<std::endl;
234 VolName =
gGeoManager->FindNode(vtx.X(),vtx.Y(),vtx.Z())->GetName();
236 std::cout<<
" vol name "<<VolName.Data()<<std::endl;
238 if(!(VolName.Contains(
fVtxName.Data())))
244 std::cout<<
" vol name "<<VolName.Data()<<
" "<<
fVtxName.Data()<<std::endl;
252 unsigned int detId, hitId;
254 cand->
getHit(0, detId, hitId);
257 FairMCPoint* pointF=(FairMCPoint*)
fPointArray->At(myHit->GetRefIndex());
260 Error(
"PndHypDPRTask::Exec",
"MCTrack Id=&i not found!",candIter->first);
264 std::cout <<
"Detector no. " << detId <<std::endl;
267 pointF->Position(pos);
268 pointF->Momentum(mom);
274 mom=mc->
GetMomentum()+TVector3(gRandom->Gaus(0,pre),
275 gRandom->Gaus(0,pre),
276 gRandom->Gaus(0,pre));
278 std::cout <<
"MC starting values " << mom.Mag()<<std::endl;
282 Error(
"PndHypDPRTask::Exec",
"Momentum is zero!",candIter->first);
287 TVector3 poserr(0.01,0.01,0.005);
288 TVector3 momerr=0.3*
mom;
289 momerr+=TVector3(0.1,0.1,0.1);
291 TVector3 u(1.,0.,0.);
293 TVector3
v(0.,1.,0.);
299 fField= FairRunAna::Instance()->GetField();
318 TVector3 dir=mom.Unit();
319 double dxdz=dir.X()/dir.Z();
320 double dydz=dir.Y()/dir.Z();
321 double qp=q/mom.Mag();
322 rep=
new LSLTrackRep(pos.Z(),pos.X(),pos.Y(),dxdz,dydz,qp,
323 poserr.X(),poserr.Y(),0.1,0.1,0.1,
b);
337 Error(
"PndHypDPRTask::Exec",
"Momentum is zero!",candIter->first);
348 std::cout<<
fTrackArray->GetEntriesFast()<<
" tracks created"<<std::endl;
Int_t GetChargeIon(Int_t ion)
Base Class for genfit track representations. Defines interface for track parameterizations.
Detector plane genfit geometry class.
Track object for genfit. genfit algorithms work on these objects.
std::map< unsigned int, TClonesArray * > fHitBranchMap
unsigned int getNHits() const
TVector3 GetMomentum() const
TClonesArray * fTrackArray
void setCandidate(const GFTrackCand &cand, bool doreset=false)
set track candidate
TGeoManager * gGeoManager
void getHit(unsigned int i, unsigned int &detId, unsigned int &hitId) const
Get detector ID and cluster index (hitId) for hit number i.
Track candidate – a list of cluster indices.
TClonesArray * fPointArray
void addHit(unsigned int detId, unsigned int hitId, double rho=0., unsigned int planeId=0)
TVector3 GetStartVertex() const
Int_t GetMotherID() const
Singleton which provides access to magnetic field for track representations.