123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- // -------------------------------------------------------------------------
- // ----- FairMCTrack source file -----
- // ----- Created 03/08/04 by V. Friese -----
- // ----- adopted for NICA/MPD 29/03/10 (litvin) -----
- // ----- adopted for NICA/MPD 20/12/19 (ABychkov) -----
- // -------------------------------------------------------------------------
- #include "MpdMCTrack.h"
- #include <iostream>
- using std::cout;
- using std::endl;
- // ----- Default constructor -------------------------------------------
- MpdMCTrack::MpdMCTrack()// {
- // fPdgCode = fNPoints = 0;
- // fMotherId = -1;
- // fPx = fPy = fPz = 0.;
- // fStartX = fStartY = fStartZ = fStartT = 0.;
- // }
- : TObject(),
- fPdgCode(0),
- fMotherId(-1),
- fPx(0.),
- fPy(0.),
- fPz(0.),
- fStartX(0.),
- fStartY(0.),
- fStartZ(0.),
- fStartT(0.),
- fNPoints(0)
- {
- fPolar[0] = fPolar[1] = fPolar[2] = 0.0;
- }
- // -------------------------------------------------------------------------
- // ----- Standard constructor ------------------------------------------
- MpdMCTrack::MpdMCTrack(Int_t pdgCode, Int_t motherId, Double_t px,
- Double_t py, Double_t pz, Double_t x, Double_t y,
- Double_t z, Double_t t, Int_t nPoints = 0)
- : TObject() {
- fPdgCode = pdgCode;
- fMotherId = motherId;
- fPx = px;
- fPy = py;
- fPz = pz;
- fStartX = x;
- fStartY = y;
- fStartZ = z;
- fStartT = t;
- // if (nPoints >= 0) fNPoints = nPoints;
- // else fNPoints = 0;
- fNPoints = nPoints;
- fPolar[0] = fPolar[1] = fPolar[2] = 0.0;
- }
- // -------------------------------------------------------------------------
- // ----- Copy constructor ----------------------------------------------
- MpdMCTrack::MpdMCTrack(const MpdMCTrack& track) // {
- // *this = track;
- // }
- : TObject(track),
- fPdgCode(track.fPdgCode),
- fMotherId(track.fMotherId),
- fPx(track.fPx),
- fPy(track.fPy),
- fPz(track.fPz),
- fStartX(track.fStartX),
- fStartY(track.fStartY),
- fStartZ(track.fStartZ),
- fStartT(track.fStartT),
- fNPoints(track.fNPoints)
- {
- for (Int_t i = 0; i < 3; ++i) fPolar[i] = track.fPolar[i];
- }
- // -------------------------------------------------------------------------
- // ----- Constructor from TParticle ------------------------------------
- MpdMCTrack::MpdMCTrack(TParticle* part)
- : TObject(){
- fPdgCode = part->GetPdgCode();
- fMotherId = part->GetMother(0);
- fPx = part->Px();
- fPy = part->Py();
- fPz = part->Pz();
- fStartX = part->Vx();
- fStartY = part->Vy();
- fStartZ = part->Vz();
- fStartT = part->T()*1e09;
- fNPoints = 0;
- TVector3 polar3;
- part->GetPolarisation(polar3);
- for (Int_t i = 0; i < 3; ++i) fPolar[i] = polar3[i];
- fWeight = part->GetWeight();
- }
- // -------------------------------------------------------------------------
-
- // ----- Destructor ----------------------------------------------------
- MpdMCTrack::~MpdMCTrack() { }
- // -------------------------------------------------------------------------
- // ----- Public method Print -------------------------------------------
- void MpdMCTrack::Print(Int_t trackId) const {
- cout << "Track " << trackId << ", mother : " << fMotherId << ", Type "
- << fPdgCode << ", momentum (" << fPx << ", " << fPy << ", " << fPz
- << ") GeV" << endl;
- cout << " STS " << GetNPoints(kSTS) << ", TPC " << GetNPoints(kTPC)
- << ", TOF " << GetNPoints(kTOF) << ", ETOF " << GetNPoints(kETOF)
- << ", FFD " << GetNPoints(kFFD) << ", ECT " << GetNPoints(kECT)
- << ", ECAL " << GetNPoints(kECAL) << ", NDET " << GetNPoints(kNDET)
- << ", CPC " << GetNPoints(kCPC) << ", BBC " << GetNPoints(kBBC)
- << ", ZDC " << GetNPoints(kZDC) << ", FSA " << GetNPoints(kFSA)
- << ", BMD " << GetNPoints(kBMD) << ", MCORD " << GetNPoints(kMCORD) << endl;
- }
- // -------------------------------------------------------------------------
- // ----- Public method GetMass -----------------------------------------
- Double_t MpdMCTrack::GetMass() const {
- if ( TDatabasePDG::Instance() ) {
- TParticlePDG* particle = TDatabasePDG::Instance()->GetParticle(fPdgCode);
- if ( particle ) return particle->Mass();
- else return 0.;
- }
- return 0.;
- }
- // -------------------------------------------------------------------------
- // ----- Public method GetRapidity -------------------------------------
- Double_t MpdMCTrack::GetRapidity() const {
- Double_t e = GetEnergy();
- Double_t y = 0.5 * TMath::Log( (e+fPz) / (e-fPz) );
- return y;
- }
- // -------------------------------------------------------------------------
- // ----- Public method GetNPoints --------------------------------------
- Int_t MpdMCTrack::GetNPoints(DetectorIdMPD detId) const {
- //kSTS, kTPC, kTOF, kETOF, kFD, kECT, kECAL, kNDET, kCPC, kBBC, kZDC, kFSA, kBMD,KMCORD
- if (( detId <= kMCORD ) && ( detId >= kSTS ))
- return ( fNPoints & (1 << detId));
- else {
- cout << "-E- FairMCTrack::GetNPoints: Unknown detector ID "
- << detId << endl;
- return 0;
- }
- }
- // -------------------------------------------------------------------------
- // ----- Public method SetNPoints --------------------------------------
- void MpdMCTrack::SetNPoints(Int_t iDet, Int_t nPoints) {
- //kSTS, kTPC, kTOF, kETOF, kFD, kECT, kECAL, kNDET, kCPC, kBBC, kZDC, kFSA, kBMD,KMCORD
- Int_t mpd_nPoints = (nPoints>0)*(1 << iDet);
- if (( iDet <= kMCORD ) && ( iDet >= kSTS )) {
- fNPoints = ( fNPoints & ( ~ (1 << iDet) ) ) | mpd_nPoints;
- }
- else cout << "-E- FairMCTrack::SetNPoints: Unknown detector ID "
- << iDet << endl;
- }
- // -------------------------------------------------------------------------
- ClassImp(MpdMCTrack)
|