* about the suitability of this software for any purpose. It is *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-
/* $Id$ */
-
+/** @file AliFMDHit.cxx
+ @author Christian Holm Christensen <cholm@nbi.dk>
+ @date Mon Mar 27 12:41:58 2006
+ @brief Hit in the FMD
+ @ingroup FMD_sim
+*/
//____________________________________________________________________
//
// Hits in the FMD
+// Contains information on:
+// Position of hit
+// Momentum of track
+// PID of track
+// Energy loss of track
+// Track #
+// Track path length
+// Track stopping status.
+// Latest changes by Christian Holm Christensen
//
-// Latest changes by Christian Holm Christensen
-//
-#include "AliFMDHit.h" // ALIFMDHIT_H
-#include "AliLog.h" // ALILOG_H
+
#include "Riostream.h" // ROOT_Riostream
+#include <TDatabasePDG.h>
+#include <TMath.h>
+#include <TString.h>
+
+#include "AliFMDHit.h" // ALIFMDHIT_H
+// #include "AliFMDDebug.h" // ALIFMDDEBUG_H ALILOG_H
//____________________________________________________________________
+using std::setw;
+using std::cout;
+using std::endl;
ClassImp(AliFMDHit)
+#if 0
+ ; // This is here to keep Emacs for indenting the next line
+#endif
//____________________________________________________________________
fPz(0),
fPdg(0),
fEdep(0),
- fTime(0)
+ fTime(0),
+ fLength(0),
+ fStop(0)
{
+ // Default CTOR
fX = fY = fZ = 0;
}
Float_t pz,
Float_t edep,
Int_t pdg,
- Float_t t)
+ Float_t t,
+ Float_t l,
+ Bool_t stop)
: AliHit(shunt, track),
fDetector(detector),
fRing(ring),
fPz(pz),
fPdg(pdg),
fEdep(edep),
- fTime(t)
+ fTime(t),
+ fLength(l),
+ fStop(stop)
{
// Normal FMD hit ctor
//
fZ = z;
}
+//____________________________________________________________________
+const char*
+AliFMDHit::GetName() const
+{
+ // Get the name
+ static TString n;
+ n = Form("FMD%d%c[%2d,%3d]", fDetector,fRing,fSector,fStrip);
+ return n.Data();
+}
+
+//____________________________________________________________________
+const char*
+AliFMDHit::GetTitle() const
+{
+ // Get the title
+ static TString t;
+ TDatabasePDG* pdgDB = TDatabasePDG::Instance();
+ TParticlePDG* pdg = pdgDB->GetParticle(fPdg);
+ t = Form("%s (%d): %f MeV / %f cm", (pdg ? pdg->GetName() : "?"),
+ fTrack, fEdep, fLength);
+ return t.Data();
+}
+
+//____________________________________________________________________
+Float_t
+AliFMDHit::P() const
+{
+ // Get the momentum of the particle of the particle that made this
+ // hit.
+ return TMath::Sqrt(fPx * fPx + fPy * fPy + fPz * fPz);
+}
+
+//____________________________________________________________________
+Float_t
+AliFMDHit::M() const
+{
+ // Get the mass of the particle that made this hit.
+ TDatabasePDG* pdgDB = TDatabasePDG::Instance();
+ TParticlePDG* pdg = pdgDB->GetParticle(fPdg);
+ return (pdg ? pdg->Mass() : -1);
+}
+
+//____________________________________________________________________
+Float_t
+AliFMDHit::Q() const
+{
+ // Get the charge of the particle that made this hit.
+ TDatabasePDG* pdgDB = TDatabasePDG::Instance();
+ TParticlePDG* pdg = pdgDB->GetParticle(fPdg);
+ return (pdg ? pdg->Charge() : 0);
+}
+
+
//____________________________________________________________________
void
-AliFMDHit::Print(Option_t* /* option */) const
+AliFMDHit::Print(Option_t* option) const
{
// Print Hit to standard out
cout << "AliFMDHit: FMD"
<< setw(3) << fSector << ","
<< setw(3) << fStrip << "] = "
<< fEdep << endl;
+ TString opt(option);
+ if (opt.Contains("D", TString::kIgnoreCase)) {
+ TDatabasePDG* pdgDB = TDatabasePDG::Instance();
+ TParticlePDG* pdg = pdgDB->GetParticle(fPdg);
+ cout << "\tPDG:\t" << fPdg << " " << (pdg ? pdg->GetName() : "?") << "\n"
+ << "\tP:\t(" << fPx << "," << fPy << "," << fPz << ") "<<P() << "\n"
+ << "\tX:\t" << fX << "," << fY << "," << fZ << "\n"
+ << "\tTrack #:\t" << fTrack << "\tLength:\t"
+ << fLength << "cm\t" << (IsStop() ? "stopped" : "") << std::endl;
+ }
}
//____________________________________________________________________