FMD module
[u/mrichter/AliRoot.git] / FMD / FMDsim / AliFMDHit.cxx
1 /**************************************************************************
2  * Copyright(c) 2004, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15 /* $Id$ */
16 /** @file    AliFMDHit.cxx
17     @author  Christian Holm Christensen <cholm@nbi.dk>
18     @date    Mon Mar 27 12:41:58 2006
19     @brief   Hit in the FMD
20     @ingroup FMD_sim
21 */
22 //____________________________________________________________________
23 //
24 //  Hits in the FMD 
25 //  Contains information on:
26 //      Position of hit
27 //      Momentum of track
28 //      PID of track
29 //      Energy loss of track
30 //      Track #
31 //      Track path length
32 //      Track stopping status. 
33 //  Latest changes by Christian Holm Christensen
34 //
35
36 #include "Riostream.h"          // ROOT_Riostream
37 #include <TDatabasePDG.h>
38 #include <TMath.h>
39 #include <TString.h>
40
41 #include "AliFMDHit.h"          // ALIFMDHIT_H
42 // #include "AliFMDDebug.h"             // ALIFMDDEBUG_H ALILOG_H
43
44 //____________________________________________________________________
45 using std::setw;
46 using std::cout;
47 using std::endl;
48 ClassImp(AliFMDHit)
49 #if 0
50   ; // This is here to keep Emacs for indenting the next line
51 #endif
52
53
54 //____________________________________________________________________
55 AliFMDHit::AliFMDHit()
56   : fDetector(0), 
57     fRing(0), 
58     fSector(0), 
59     fStrip('\0'), 
60     fPx(0),
61     fPy(0),
62     fPz(0),
63     fPdg(0),
64     fEdep(0), 
65     fTime(0), 
66     fLength(0), 
67     fStop(0)
68 {
69   // Default CTOR
70   fX = fY = fZ = 0;
71 }
72   
73
74 //____________________________________________________________________
75 AliFMDHit::AliFMDHit(Int_t    shunt, 
76                      Int_t    track, 
77                      UShort_t detector, 
78                      Char_t   ring, 
79                      UShort_t sector, 
80                      UShort_t strip, 
81                      Float_t  x, 
82                      Float_t  y, 
83                      Float_t  z,
84                      Float_t  px, 
85                      Float_t  py, 
86                      Float_t  pz,
87                      Float_t  edep,
88                      Int_t    pdg,
89                      Float_t  t, 
90                      Float_t  l, 
91                      Bool_t   stop)
92   : AliHit(shunt, track),
93     fDetector(detector), 
94     fRing(ring), 
95     fSector(sector), 
96     fStrip(strip), 
97     fPx(px),
98     fPy(py),
99     fPz(pz),
100     fPdg(pdg),
101     fEdep(edep), 
102     fTime(t), 
103     fLength(l), 
104     fStop(stop)
105 {
106   // Normal FMD hit ctor
107   // 
108   // Parameters:
109   // 
110   //    shunt     ???
111   //    track     Track #
112   //    detector  Detector # (1, 2, or 3)                      
113   //    ring      Ring ID ('I' or 'O')
114   //    sector    Sector # (For inner/outer rings: 0-19/0-39)
115   //    strip     Strip # (For inner/outer rings: 0-511/0-255)
116   //    x         Track's X-coordinate at hit
117   //    y         Track's Y-coordinate at hit
118   //    z         Track's Z-coordinate at hit
119   //    px        X-component of track's momentum 
120   //    py        Y-component of track's momentum
121   //    pz        Z-component of track's momentum
122   //    edep      Energy deposited by track
123   //    pdg       Track's particle Id #
124   //    t         Time when the track hit 
125   // 
126   fX = x;
127   fY = y;
128   fZ = z;
129 }
130
131 //____________________________________________________________________
132 const char*
133 AliFMDHit::GetName() const 
134
135   // Get the name 
136   static TString n;
137   n = Form("FMD%d%c[%2d,%3d]", fDetector,fRing,fSector,fStrip);
138   return n.Data();
139 }
140
141 //____________________________________________________________________
142 const char*
143 AliFMDHit::GetTitle() const 
144
145   // Get the title 
146   static TString t;
147   TDatabasePDG* pdgDB = TDatabasePDG::Instance();
148   TParticlePDG* pdg   = pdgDB->GetParticle(fPdg);
149   t = Form("%s (%d): %f MeV / %f cm", (pdg ? pdg->GetName() : "?"), 
150            fTrack, fEdep, fLength);
151   return t.Data();
152 }
153
154 //____________________________________________________________________
155 Float_t
156 AliFMDHit::P() const 
157 {
158   // Get the momentum of the particle of the particle that made this
159   // hit. 
160   return TMath::Sqrt(fPx * fPx + fPy * fPy + fPz * fPz);
161 }
162
163 //____________________________________________________________________
164 Float_t
165 AliFMDHit::M() const 
166 {
167   // Get the mass of the particle that made this hit. 
168   TDatabasePDG* pdgDB = TDatabasePDG::Instance();
169   TParticlePDG* pdg   = pdgDB->GetParticle(fPdg);
170   return (pdg ? pdg->Mass() : -1);
171 }
172
173 //____________________________________________________________________
174 Float_t
175 AliFMDHit::Q() const
176 {
177   // Get the charge of the particle that made this hit. 
178   TDatabasePDG* pdgDB = TDatabasePDG::Instance();
179   TParticlePDG* pdg   = pdgDB->GetParticle(fPdg);
180   return (pdg ? pdg->Charge() : 0);
181 }
182
183
184 //____________________________________________________________________
185 void
186 AliFMDHit::Print(Option_t* option) const 
187 {
188   // Print Hit to standard out 
189   cout << "AliFMDHit: FMD" 
190        << fDetector << fRing << "[" 
191        << setw(3) << fSector << ","
192        << setw(3) << fStrip << "] = " 
193        << fEdep << endl;
194   TString opt(option);
195   if (opt.Contains("D", TString::kIgnoreCase)) {
196     TDatabasePDG* pdgDB = TDatabasePDG::Instance();
197     TParticlePDG* pdg   = pdgDB->GetParticle(fPdg);
198     cout << "\tPDG:\t" << fPdg << " " << (pdg ? pdg->GetName() : "?") << "\n"
199          << "\tP:\t(" << fPx << "," << fPy << "," << fPz << ") "<<P() << "\n" 
200          << "\tX:\t" << fX << "," << fY << "," << fZ << "\n" 
201          << "\tTrack #:\t" << fTrack << "\tLength:\t" 
202          << fLength << "cm\t" << (IsStop() ? "stopped" : "") << std::endl;
203   }
204 }
205
206 //____________________________________________________________________
207 //
208 // EOF
209 //