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

MCint.cxx

Go to the documentation of this file.
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 

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