00001 #include "MCint.h" 00002 #include "Mint.h" 00003 #include "Jint.h" 00004 00005 #include <JobControl/JobC.h> 00006 #include <MinosObjectMap/MomNavigator.h> 00007 #include <Plex/PlexStripEndId.h> 00008 #include <Plex/PlexHandle.h> 00009 #include <UgliGeometry/UgliGeomHandle.h> 00010 #include <CandDigit/CandDigitListHandle.h> 00011 #include <CandDigit/CandDigitHandle.h> 00012 #include <Record/SimSnarlRecord.h> 00013 #include <RerootExodus/RerootExodus.h> 00014 #include <REROOT_Classes/REROOT_FLSHit.h> 00015 #include <REROOT_Classes/REROOT_FLSDigit.h> 00016 #include <REROOT_Classes/REROOT_StdHep.h> 00017 00018 #include <Digitization/DigiScintHit.h> 00019 00020 #include <DataUtil/CDL2STL.h> 00021 using namespace DataUtil; 00022 00023 #include <TClonesArray.h> 00024 #include <TParticle.h> 00025 00026 #include <map> 00027 #include <vector> 00028 using namespace std; 00029 00030 MCint::MCint(Mint& mint) 00031 : fMint(mint) 00032 , fDirty(false) 00033 { 00034 } 00035 00036 MCint::~MCint() 00037 { 00038 } 00039 00040 void MCint::Update() 00041 { 00042 fDirty = true; 00043 } 00044 void MCint::Clear() 00045 { 00046 fScintHits.clear(); 00047 } 00048 00049 template <class T> 00050 static void clones_array_to_vector(const TClonesArray& ca, vector<T*>& v) 00051 { 00052 unsigned int siz = ca.GetLast()+1; 00053 v.clear(); 00054 v.reserve(siz); 00055 for (unsigned int ind=0; ind<siz; ++ind) { 00056 T* t = dynamic_cast<T*>(ca.UncheckedAt(ind)); 00057 if (!t) continue; 00058 v.push_back(t); 00059 } 00060 if (siz != v.size()) { 00061 cerr << "Warning: not all elements of TClonesArray were of the right type\n"; 00062 } 00063 } 00064 void MCint::GetData() 00065 { 00066 if (!fDirty) return; 00067 this->Clear(); 00068 00069 const MomNavigator& mom = fMint.GetJobC().Mom; 00070 SimSnarlRecord* ssr = dynamic_cast<SimSnarlRecord*>(mom.GetFragment("SimSnarlRecord")); 00071 if (!ssr) { 00072 cerr << "No SimSnarlRecord in this data\n"; 00073 return; 00074 } 00075 00076 const TClonesArray* arr = dynamic_cast<const TClonesArray*> 00077 (ssr->FindComponent("TClonesArray","DigiScintHits")); 00078 if (!arr) { 00079 cerr << "No DigiScintHit TClonesArray in this data\n"; 00080 return; 00081 } 00082 00083 clones_array_to_vector(*arr,fScintHits); 00084 fDirty = false; 00085 } 00086 00087 const vector<DigiScintHit*>& MCint::GetScintHits() 00088 { 00089 this->GetData(); 00090 return fScintHits; 00091 } 00092
1.3.9.1