/* *==================================================================== * * CBM Level 1 Reconstruction * * Authors: I.Kisel, S.Gorbunov * * e-mail : ikisel@kip.uni-heidelberg.de * *==================================================================== * * L1 Monte Carlo information * *==================================================================== */ #ifndef CbmL1MCTrack_H #define CbmL1MCTrack_H #include "PerformanceConstants.h" #include "CbmL1MCPoint.h" #include using std::vector; class CbmL1Track; class CbmL1MCTrack { public: double mass, q, p, x, y, z, px, py, pz; int ID, mother_ID, pdg; vector Points; // indices of pints in L1::vMCPoints vector StsHits; // indices of hits in algo->vStsHits or L1::vStsHits CbmL1MCTrack(){}; CbmL1MCTrack(int _ID):ID(_ID){}; // CbmL1MCTrack(double mass, double q, TVector3 vr, TLorentzVector vp, int ID, int mother_ID, int pdg); // CbmL1MCTrack(TmpMCPoints &mcPoint, TVector3 vr, TLorentzVector vp, int ID, int mother_ID); bool IsPrimary(){return mother_ID < 0;}; bool IsReconstructable(){return isReconstructable;}; int NStations(){return nStations;}; void Init(); void AddRecoTrack(CbmL1Track* rTr){rTracks.push_back(rTr);} vector< CbmL1Track* >& GetRecoTracks(){ return rTracks;} int GetNClones(){ return rTracks.size() - 1;} bool IsReconstructed(){ return rTracks.size(); } void AddTouchTrack(CbmL1Track* tTr){tTracks.push_back(tTr);} bool IsDisturbed(){ return tTracks.size(); } friend class Performance; friend class L1AlgoInputMCData; int nMCContStations; // number of consecutive stations with mcPoints int nHitContStations; // number of consecutive stations with hits int maxNStaMC; // max number of mcPoints on station int maxNSensorMC; // max number of mcPoints with same z int maxNStaHits; // max number of hits on station int nStations; // number of stations with hits bool isReconstructable; // void CalculateMCCont(); // void CalculateHitCont(); // void CalculateMaxNStaHits(); // void CalculateMaxNStaMC(); void CalculateIsReconstructable(); private: // next members filled and used in Performance vector< CbmL1Track* > rTracks; // array of assosiated recoTracks vector< CbmL1Track* > tTracks; // array of recoTracks wich aren't assosiated with this mcTrack, but use some hits from it. }; inline void CbmL1MCTrack::CalculateIsReconstructable() { bool f = 1; // reject very slow tracks from analysis f &= (p > PerformanceConstants::MinRecoMom); // detected at least in 4 stations // f &= (nMCContStations >= 4); // f &= (nStations >= L1->MinNStations); // QA definition // f &= (nHitContStations >= Performance::MinNStations); // L1 definition f &= (nMCContStations >= PerformanceConstants::MinNStations); // new L1 definition // maximul 4 layers for a station. // f &= (maxNStaHits <= 4); f &= (maxNStaMC <= 4); // f &= (maxNSensorMC <= 1); isReconstructable = f; } // bool CbmL1MCTrack::IsReconstructable() #endif