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

SimCheck.cxx

Go to the documentation of this file.
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" // For JOBMODULE macro
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   // Get the simsnarl.
00055   while( ( tobj = fragiter.Next() ) ) {
00056     simsnarl = dynamic_cast<SimSnarlRecord*>(tobj);
00057     if(simsnarl) break;
00058   }
00059   
00060   // Verify there IS a simsnarl.
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   //const TObjArray* pelist = 
00072   //  dynamic_cast<const TObjArray*>(simsnarl->FindTemporary(0,"DigiListPe"));
00073 
00074   //if(!pelist) return JobCResult::kFailed;
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 //gmi These unused declarations are giving an error in GCC 4.4.0
00106 //gmi  set_intersection(hits.begin(),hits.end(),
00107 //gmi              sighits.begin(), sighits.end(),
00108 //gmi              inserter(intersection,intersection.begin()) );
00109 //gmi
00110 //gmi  set_difference(hits.begin(), hits.end(),          
00111 //gmi            sighits.begin(), sighits.end(),
00112 //gmi            inserter(difference1,difference1.begin()) );
00113 //gmi
00114 //gmi  set_difference(sighits.begin(), sighits.end(),
00115 //gmi            hits.begin(), hits.end(),               
00116 //gmi            inserter(difference2,difference2.begin()) );
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; // kNoDecision, kFailed, etc.
00127 }
00128 
00129 //......................................................................
00130 
00131 const Registry& SimCheck::DefaultConfig() const
00132 {
00136   static Registry r; // Default configuration for module
00137 
00138   // Set name of config
00139   std::string name = this->GetName();
00140   name += ".config.default";
00141   r.SetName(name.c_str());
00142 
00143   // Set values in configuration
00144   r.UnLockValues();
00145   r.LockValues();
00146 
00147   return r;
00148 }
00149 
00150 //......................................................................
00151 
00152 void SimCheck::Config(const Registry& )
00153 {
00157 }
00158 

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