/* * NicaCbmMCTrack.cxx * * Created on: 20 wrz 2018 * Author: Daniel Wielanek * E-mail: daniel.wielanek@gmail.com * Warsaw University of Technology, Faculty of Physics */ #include "NicaCbmMCTrack.h" NicaCbmMCTrack::NicaCbmMCTrack() :fNPoints(0){ } void NicaCbmMCTrack::Update(CbmMCTrack* mc,Double_t charge) { GetMomentum()->SetPxPyPzE(mc->GetPx(), mc->GetPy(), mc->GetPz(), mc->GetEnergy()); SetMotherIndex(mc->GetMotherId()); if(GetMotherIndex()>-1){ SetPrimary(kFALSE); }else{ SetPrimary(kTRUE); } SetStatus(0); SetCharge(charge); SetPdg(mc->GetPdgCode()); GetStartPosition()->SetXYZT(mc->GetStartX(),mc->GetStartY(),mc->GetStartZ(),mc->GetStartT()); SetNPoints(kRef, mc->GetNPoints(kRef)); SetNPoints(kMvd, mc->GetNPoints(kMvd)); SetNPoints(kSts, mc->GetNPoints(kSts)); SetNPoints(kRich, mc->GetNPoints(kRich)); SetNPoints(kMuch, mc->GetNPoints(kMuch)); SetNPoints(kTrd, mc->GetNPoints(kTrd)); SetNPoints(kTof, mc->GetNPoints(kTof)); SetNPoints(kEcal, mc->GetNPoints(kEcal)); SetNPoints(kPsd, mc->GetNPoints(kPsd)); } NicaCbmMCTrack::~NicaCbmMCTrack() { } void NicaCbmMCTrack::SetNPoints(Int_t iDet, Int_t nPoints) { switch(iDet){ case kRef:{ if ( nPoints < 0 ) nPoints = 0; else if ( nPoints > 1 ) nPoints = 1; fNPoints = ( fNPoints & ( ~ 1 ) ) | nPoints; }break; case kMvd:{ if ( nPoints < 0 ) nPoints = 0; else if ( nPoints > 7 ) nPoints = 7; fNPoints = ( fNPoints & ( ~ ( 7 << 1 ) ) ) | ( nPoints << 1 ); }break; case kSts:{ if ( nPoints < 0 ) nPoints = 0; else if ( nPoints > 31 ) nPoints = 31; fNPoints = ( fNPoints & ( ~ ( 31 << 4 ) ) ) | ( nPoints << 4 ); }break; case kRich:{ if ( nPoints < 0 ) nPoints = 0; else if ( nPoints > 1 ) nPoints = 1; fNPoints = ( fNPoints & ( ~ ( 1 << 9 ) ) ) | ( nPoints << 9 ); }break; case kMuch:{ if ( nPoints < 0 ) nPoints = 0; else if ( nPoints > 31 ) nPoints = 31; fNPoints = ( fNPoints & ( ~ ( 31 << 10 ) ) ) | ( nPoints << 10 ); }break; case kTrd:{ if( nPoints < 0 ) nPoints = 0; else if ( nPoints > 31 ) nPoints = 31; fNPoints = ( fNPoints & ( ~ ( 31 << 15 ) ) ) | ( nPoints << 15 ); }break; case kTof:{ if ( nPoints < 0 ) nPoints = 0; else if ( nPoints > 15 ) nPoints = 15; fNPoints = ( fNPoints & ( ~ ( 15 << 20 ) ) ) | ( nPoints << 20 ); }break; case kEcal:{ if( nPoints < 0 ) nPoints = 0; else if ( nPoints > 1 ) nPoints = 1; fNPoints = ( fNPoints & ( ~ ( 1 << 24 ) ) ) | ( nPoints << 24 ); }break; case kPsd:{ if ( nPoints < 0 ) nPoints = 0; else if ( nPoints > 1 ) nPoints = 1; fNPoints = ( fNPoints & ( ~ ( 1 << 25 ) ) ) | ( nPoints << 25 ); }break; } } Int_t NicaCbmMCTrack::GetNPoints(ECbmModuleId detId) const { switch(detId){ case kRef: return ( fNPoints & 1); break; case kMvd:{ return ( (fNPoints & ( 7 << 1) ) >> 1); }break; case kSts:{ return ( (fNPoints & (31 << 4) ) >> 4); }break; case kRich:{ return ( (fNPoints & ( 1 << 9) ) >> 9); }break; case kMuch:{ return ( (fNPoints & (31 << 10) ) >> 10); }break; case kTrd:{ return ( (fNPoints & (31 << 15) ) >> 15); }break; case kTof:{ return ( (fNPoints & (15 << 20) ) >> 20); }break; case kEcal:{ return ( (fNPoints & ( 1 << 24) ) >> 24); }break; case kPsd:{ return ( (fNPoints & ( 1 << 25) ) >> 25); }break; default: return 0; break; } } void NicaCbmMCTrack::CopyData(NicaTrack *other) { NicaMCTrack::CopyData(other); this->fNPoints = ((NicaCbmMCTrack*)other)->fNPoints; }