00001 #include "Simulation/MCDigitInfo.h"
00002
00003 using namespace sim;
00004 ClassImp(MCDigitInfo);
00005
00006 MCDigitInfo::MCDigitInfo() :
00007 fMCInfo(0)
00008 { }
00009
00010
00011
00012 MCDigitInfo::~MCDigitInfo() { }
00013
00014
00015
00016 void MCDigitInfo::PushFraction(int i, unsigned short trackid, float fraction)
00017 {
00018 unsigned int ui = i;
00019 if (fMCInfo.size()<ui+1) fMCInfo.resize(ui+1);
00020
00021 std::pair<unsigned short, float> tempcomp;
00022 tempcomp.first = trackid;
00023 tempcomp.second = fraction;
00024
00025 fMCInfo[ui].Push(tempcomp);
00026
00027 return;
00028 }
00029
00030
00031
00032 void MCDigitInfo::NormalizeFraction(int i)
00033 {
00034 char msg[256];
00035 sprintf(msg,"MCDigitInfo::MCInfo(%d) out of range!",i);
00036 unsigned int ui = i;
00037 assert_jobc(i>=0 && (ui<fMCInfo.size()),msg);
00038
00039 fMCInfo[ui].NormalizeFraction();
00040
00041 return;
00042 }
00043
00044
00045 unsigned int MCDigitInfo::NTracks(unsigned int i) const
00046 {
00047
00048 unsigned int ui = i;
00049 if(ui>=fMCInfo.size()) return 0;
00050
00051 return fMCInfo[ui].NComponents();
00052
00053 }
00054
00055
00056 HitProfile MCDigitInfo::GetProfile(unsigned int i) const
00057 {
00058 char msg[256];
00059 sprintf(msg,"MCDigitInfo::MCInfo(%d) out of range!",i);
00060 unsigned int ui = i;
00061 assert_jobc(ui<fMCInfo.size(),msg);
00062
00063 return fMCInfo[ui];
00064 }
00065
00066
00067 void MCDigitInfo::GetFraction(unsigned int i, unsigned int j, unsigned short &trackid, float &fraction) const
00068 {
00069 trackid = 0;
00070 fraction = 0.;
00071
00072 unsigned int ui = i;
00073 if(ui>=fMCInfo.size()) return;
00074
00075 if(j<fMCInfo[ui].NComponents()) {
00076 trackid = fMCInfo[ui].TrackId(j);
00077 fraction = fMCInfo[ui].Fraction(j);
00078 }
00079
00080 return;
00081 }
00082
00083
00084
00085
00086 bool MCDigitInfo::GetFraction(unsigned int i, unsigned int j, std::pair<unsigned short, float> &component) const
00087 {
00088 if(i>=fMCInfo.size()) return false;
00089
00090 if(j>=fMCInfo[i].NComponents() ) return false;
00091
00092 component = fMCInfo[i].Component(j);
00093
00094 return true;
00095 }
00096
00098