00001
00002
00003
00004
00005
00006
00008 #include "Digitization/DigiScintHit.h"
00009 #include "Conventions/Munits.h"
00010
00011 #include <TDatabasePDG.h>
00012 #include <TString.h>
00013
00014 #include <iostream>
00015 ClassImp(DigiScintHit)
00016
00017
00018
00019 DigiScintHit::DigiScintHit() :
00020 fStripId(),
00021 fT1(0),
00022 fX1(0),
00023 fY1(0),
00024 fZ1(0),
00025 fT2(0),
00026 fX2(0),
00027 fY2(0),
00028 fZ2(0),
00029 fDS(0),
00030 fDE(0),
00031 fParticleEnergy(0),
00032 fParticlePX1(0),
00033 fParticlePY1(0),
00034 fParticlePZ1(0),
00035 fParticleId(0),
00036 fTrackId(0),
00037 fFailBits(0)
00038 { }
00039
00040
00041
00042 DigiScintHit::DigiScintHit(const DigiScintHit& in) :
00043 TObject(in),
00044 fStripId(in.StripEndId()),
00045 fT1(in.T1()),
00046 fX1(in.X1()),
00047 fY1(in.Y1()),
00048 fZ1(in.Z1()),
00049 fT2(in.T2()),
00050 fX2(in.X2()),
00051 fY2(in.Y2()),
00052 fZ2(in.Z2()),
00053 fDS(in.DS()),
00054 fDE(in.DE()),
00055 fParticleEnergy(in.ParticleEnergy()),
00056 fParticlePX1(in.ParticlePX1()),
00057 fParticlePY1(in.ParticlePY1()),
00058 fParticlePZ1(in.ParticlePZ1()),
00059 fParticleId(in.ParticleId()),
00060 fTrackId(in.TrackId()),
00061 fFailBits(in.FailBits())
00062 {
00063 }
00064
00065
00066
00067 DigiScintHit::DigiScintHit(Int_t trkId, Int_t trkPid, Float_t trkEnergy,
00068 PlexStripEndId sid,
00069 Float_t t1, Float_t x1, Float_t y1, Float_t z1,
00070 Float_t t2, Float_t x2, Float_t y2, Float_t z2,
00071 Float_t ds, Float_t de,
00072 Float_t trkPx1, Float_t trkPy1, Float_t trkPz1) :
00073 fStripId(sid),
00074 fT1(t1),
00075 fX1(x1),
00076 fY1(y1),
00077 fZ1(z1),
00078 fT2(t2),
00079 fX2(x2),
00080 fY2(y2),
00081 fZ2(z2),
00082 fDS(ds),
00083 fDE(de),
00084 fParticleEnergy(trkEnergy),
00085 fParticlePX1(trkPx1),
00086 fParticlePY1(trkPy1),
00087 fParticlePZ1(trkPz1),
00088 fParticleId(trkPid),
00089 fTrackId(trkId),
00090 fFailBits(0)
00091 { }
00092
00093
00094
00095 Float_t DigiScintHit::ParticleKineticEnergy() const
00096 {
00097 TParticlePDG* part = TDatabasePDG::Instance()->GetParticle(ParticleId());
00098 Float_t mass = 0;
00099 if(part)
00100 mass = part->Mass()*Munits::GeV;
00101 return ParticleEnergy()-mass;
00102 }
00103
00104
00105
00106
00107 ostream& operator<<(ostream& os, const DigiScintHit& h)
00108 { return h.FormatToOStream(os); }
00109
00110
00111 void DigiScintHit::Print(Option_t *option) const
00112 {
00113 std::cout << this->AsString(option) << std::endl;
00114 }
00115
00116
00117 std::ostream& DigiScintHit::FormatToOStream(std::ostream& os,
00118 Option_t *option) const
00119 {
00120 os << AsString(option);
00121 return os;
00122 }
00123
00124
00125 const char* DigiScintHit::AsString(Option_t *option) const
00126 {
00127 TParticlePDG* part = TDatabasePDG::Instance()->GetParticle(ParticleId());
00128
00129 switch(option[0]) {
00130 case 'e':
00131 case 'E':
00132 return Form("DigiScintHit Track=%d Particle=%s(%d) E=%.1f GeV K=%f GeV\n"
00133 " Strip: %s\n"
00134 " (%5.2f, %4.3f, %4.3f), %.1f ns\n"
00135 " dE/dx = %.2f MeV / %.1f cm\n",
00136 TrackId(),
00137 (part==0)?"unknown":part->GetName(),
00138 ParticleId(),
00139 ParticleEnergy()/Munits::GeV,
00140 ParticleKineticEnergy()/Munits::GeV,
00141 StripEndId().AsString(),
00142 X1(),Y1(),Z1(),T1()/Munits::ns,
00143 DE()/Munits::MeV,
00144 DS()/Munits::cm
00145 );
00146 case 'o':
00147 return Form("DigiScintHit (Trk %d) (%s) (%.1f GeV) (%.1f MeV/%.1f cm) (Plane %d Strip %d)",
00148 TrackId(),
00149 (part==0)?"unknown":part->GetName(),
00150 ParticleEnergy()/Munits::GeV,
00151 DE()/Munits::MeV,
00152 DS()/Munits::cm,
00153 Plane(),
00154 Strip()
00155 );
00156 default:
00157 return Form("DigiScintHit %s (Trk %4d=%6s %.2f GeV) (%.2f MeV/%.2f cm) %f",
00158 StripEndId().AsString("c"),
00159 TrackId(),
00160 (part==0)?"unknown":part->GetName(),
00161 ParticleEnergy()/Munits::GeV,
00162 DE()/Munits::MeV,
00163 DS()/Munits::cm,
00164 T1()/Munits::ns
00165 );
00166 }
00167 return "";
00168 }
00169
00170
00171
00172