00001
00002
00003
00004
00005
00006
00007
00008 #include "SimCheck.h"
00009 #include "MessageService/MsgService.h"
00010 #include "MinosObjectMap/MomNavigator.h"
00011 #include "JobControl/JobCModuleRegistry.h"
00012
00013 #include "Digitization/DigiScintHit.h"
00014 #include "Digitization/DigiPE.h"
00015 #include "Digitization/DigiSignal.h"
00016 #include "Record/SimSnarlRecord.h"
00017
00018 #include <set>
00019
00020 using namespace std;
00021
00022 JOBMODULE(SimCheck, "SimCheck",
00023 "SimCheck");
00024 CVSID("$Id: SimCheck.cxx,v 1.3 2009/02/28 21:46:12 gmieg Exp $");
00025
00026
00027 SimCheck::SimCheck()
00028 {
00032 }
00033
00034
00035 SimCheck::~SimCheck()
00036 {
00040 }
00041
00042
00043
00044 JobCResult SimCheck::Ana(const MomNavigator* mom)
00045 {
00049
00050 SimSnarlRecord* simsnarl = 0;
00051 TObject* tobj;
00052 TIter fragiter = mom->FragmentIter();
00053
00054
00055 while( ( tobj = fragiter.Next() ) ) {
00056 simsnarl = dynamic_cast<SimSnarlRecord*>(tobj);
00057 if(simsnarl) break;
00058 }
00059
00060
00061 if(!simsnarl) {
00062 MSG("Photon",Msg::kError) << "No SimSnarl found. You must run RerootToTruthModule()!" << endl;
00063 return JobCResult::kFailed;
00064 }
00065
00066
00067 const TObjArray* hitlist =
00068 dynamic_cast<const TObjArray*>(simsnarl->FindComponent(0,"DigiScintHits"));
00069 if(!hitlist) return JobCResult::kFailed;
00070
00071
00072
00073
00074
00075
00076 const TObjArray* signallist =
00077 dynamic_cast<const TObjArray*>(simsnarl->FindComponent(0,"DigiSignal"));
00078 if(!signallist) return JobCResult::kFailed;
00079
00080 std::set<const DigiScintHit*> hits;
00081 std::set<const DigiScintHit*> sighits;
00082 std::set<const DigiScintHit*> intersection;
00083 std::set<const DigiScintHit*> difference1;
00084 std::set<const DigiScintHit*> difference2;
00085
00086
00087 TIter hitarrayIter(hitlist);
00088 while( (tobj = hitarrayIter.Next()) ) {
00089 const DigiScintHit* scinthit = dynamic_cast<const DigiScintHit*>(tobj);
00090 if(scinthit) {
00091 hits.insert(scinthit);
00092 }
00093 }
00094
00095 TIter sigarrayIter(signallist);
00096 while( (tobj = sigarrayIter.Next()) ) {
00097 const DigiSignal* signal = dynamic_cast<const DigiSignal*>(tobj);
00098 if(signal) {
00099 for(UInt_t i=0; i<signal->GetNumberOfHits(); i++) {
00100 sighits.insert(signal->GetHit(i));
00101 }
00102 }
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 cout << "SimCheck-----------------------------------" << endl;
00119 cout << "In Hit list: " << hits.size() << endl;
00120 cout << "In DigiSignals: " << sighits.size() << endl;
00121 cout << "Intersection: " << intersection.size() << endl;
00122 cout << "Diff1: " << difference1.size() << endl;
00123 cout << "Diff2: " << difference2.size() << endl;
00124
00125
00126 return JobCResult::kPassed;
00127 }
00128
00129
00130
00131 const Registry& SimCheck::DefaultConfig() const
00132 {
00136 static Registry r;
00137
00138
00139 std::string name = this->GetName();
00140 name += ".config.default";
00141 r.SetName(name.c_str());
00142
00143
00144 r.UnLockValues();
00145 r.LockValues();
00146
00147 return r;
00148 }
00149
00150
00151
00152 void SimCheck::Config(const Registry& )
00153 {
00157 }
00158