28 #include "FairRootManager.h" 
   29 #include "TClonesArray.h" 
   32 #include "FairMCPoint.h" 
   33 #include "FairRunAna.h" 
   35 #include "TGeoManager.h" 
   38 #include "../../pnddata/SdsData/PndSdsMCPoint.h" 
   39 #include "../../pnddata/SdsData/PndSdsHit.h" 
   41 #include "LSLTrackRep.h" 
   42 #include "FairField.h" 
   48 #include "FairGeanePro.h" 
   49 #include "FairTrackParP.h" 
   55   : FairTask(
"Ideal Pattern Reco"), fPersistence(kFALSE), fUseGeane(kFALSE), fUseMVD(false),
 
   56 fVtx(false),fMCvalue(kFALSE),fVtxName(0),fEventNr(0)
 
   69   FairRootManager* ioman= FairRootManager::Instance();
 
   73       Error(
"PndHypDPatternRecoTask::Init",
"RootManager not instantiated!");
 
   81         TClonesArray* ar=(TClonesArray*) ioman->GetObject(iter->second);
 
   84           Error(
"PndHypDPRTask::Init",
"point-array %s not found!",iter->second.Data());
 
   87           std::cout<<
" hit array "<<iter->second<<std::endl;
 
   96   fMcArray=(TClonesArray*) ioman->GetObject(
"MCTrack");
 
   98     Error(
"PndHypDPRTask::Init",
"mctrack-array not found!");
 
  102   fPointArray=(TClonesArray*) ioman->GetObject(
"HypPoint");
 
  104     Error(
"PndHypDPRTask::Init",
"hit-array not found!");
 
  109     fSdsArray=(TClonesArray*) ioman->GetObject(
"MVDPoint");
 
  111       Error(
"PndHypDPRTask::Init",
"hit-array not found!");
 
  124   std::cout << 
"-I- gGeoManager = "<<
gGeoManager << std::endl;
 
  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;
 
  358   if(ion>1000000000&&(ion<1010000000))
 
  363       cout<<
" ion charge "<<Z<<endl;
 
  368 if((ion>1010000000||ion>1020000000))
 
  376     cout<<L<<
" hypernuclei charge "<<Z<<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
virtual void Exec(Option_t *opt)
virtual InitStatus Init()
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)
std::map< unsigned int, TString > fHitBranchNameMap
TVector3 GetStartVertex() const 
Int_t GetMotherID() const 
~PndHypDPatternRecoTask()
Singleton which provides access to magnetic field for track representations.