Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

DigiScintHit.cxx

Go to the documentation of this file.
00001 
00002 // $Id: DigiScintHit.cxx,v 1.9 2009/05/19 15:05:12 kasahara Exp $
00003 //
00004 // Methods for simulated scintillator hits
00005 //
00006 // messier@indiana.edu
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': // (E)xtended printout.
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': // old
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 ""; // Keep compiler happy.
00168 }
00169 
00170 
00171 
00172 

Generated on Mon Feb 15 11:06:37 2010 for loon by  doxygen 1.3.9.1