00001
00002
00003
00004
00005
00006
00007
00008
00010
00011
00012
00013
00014
00015
00016
00017
00019
00020 #include <cassert>
00021
00022 #include "Algorithm/AlgFactory.h"
00023 #include "Algorithm/AlgHandle.h"
00024 #include "CandData/CandHeader.h"
00025 #include "CandData/CandRecord.h"
00026 #include "CandDigit/CandDigitHandle.h"
00027 #include "CandDigit/CandDigitList.h"
00028 #include "CandDigit/CandDigitListHandle.h"
00029 #include "CandDigit/FilterDigitListModule.h"
00030 #include "Candidate/CandContext.h"
00031 #include "JobControl/JobCModuleRegistry.h"
00032 #include "JobControl/JobCommand.h"
00033 #include "MessageService/MsgService.h"
00034 #include "MinosObjectMap/MomNavigator.h"
00035
00036 ClassImp(FilterDigitListModule)
00037
00038
00039 CVSID("$Id: FilterDigitListModule.cxx,v 1.1 2003/02/15 00:38:38 gmieg Exp $");
00040 JOBMODULE(FilterDigitListModule, "FilterDigitListModule",
00041 "Filters CandDigits from CandDigitList");
00042
00043
00044 FilterDigitListModule::FilterDigitListModule()
00045 {
00046 MSG("DFilt", Msg::kVerbose) << "FilterDigitListModule::Constructor\n";
00047 }
00048
00049
00050 FilterDigitListModule::~FilterDigitListModule()
00051 {
00052 MSG("DFilt", Msg::kVerbose) << "FilterDigitListModule::Destructor\n";
00053 }
00054
00055
00056 void FilterDigitListModule::BeginJob()
00057 {
00058 MSG("DFilt", Msg::kVerbose) << "FilterDigitListModule::BeginJob\n";
00059 }
00060
00061
00062 void FilterDigitListModule::Config(const Registry& )
00063 {
00064 MSG("DFilt", Msg::kDebug) << "FilterDigitListModule::Config" << endl;
00065 }
00066
00067
00068 const Registry& FilterDigitListModule::DefaultConfig() const
00069 {
00070 MSG("DFilt", Msg::kDebug)
00071 << "FilterDigitListModule::DefaultConfig" << endl;
00072
00073 static Registry r;
00074
00075 std::string name = this->JobCModule::GetName();
00076 name += ".config.default";
00077 r.SetName(name.c_str());
00078
00079 r.UnLockValues();
00080 r.Set("NameListIn", "canddigitlist");
00081 r.Set("NameListOut", "canddigitlist");
00082 r.Set("TitleListOut",
00083 "Created by FilterDigitListModule from CandDigitList");
00084 r.Set("FilterDigitListAlgorithm", "AlgFilterDigitList");
00085 r.Set("FilterDigitListAlgConfig", "default");
00086 r.Set("SwitchPersToTemp", 0);
00087 r.LockValues();
00088
00089 return r;
00090 }
00091
00092
00093 JobCResult FilterDigitListModule::Reco(MomNavigator *mom)
00094 {
00095 JobCResult result(JobCResult::kPassed);
00096
00097 MSG("DFilt", Msg::kVerbose) << "FilterDigitListModule::Reco" << endl;
00098
00099
00100 const char *tmps = 0;
00101 Int_t tmpi = 0;
00102
00103 const char *namelistin = 0;
00104 const char *namelistout = 0;
00105 const char *titlelistout = 0;
00106 const char *filterdigitlistalgorithm = 0;
00107 const char *filterdigitlistalgconfig = 0;
00108 Int_t switchperstotemp = 0;
00109
00110 Registry &r = GetConfig();
00111 if (r.Get("NameListIn", tmps)) namelistin = tmps;
00112 if (r.Get("NameListOut", tmps)) namelistout = tmps;
00113 if (r.Get("TitleListOut", tmps)) titlelistout = tmps;
00114 if (r.Get("FilterDigitListAlgorithm", tmps))
00115 filterdigitlistalgorithm = tmps;
00116 if (r.Get("FilterDigitListAlgConfig", tmps))
00117 filterdigitlistalgconfig = tmps;
00118 if (r.Get("SwitchPersToTemp", tmpi)) switchperstotemp = tmpi;
00119
00120
00121 CandRecord *candrec = dynamic_cast<CandRecord *>
00122 (mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00123 if (candrec == 0) {
00124 MSG("DFilt", Msg::kWarning) << "No PrimaryCandidateRecord in MOM."
00125 << endl;
00126 result.SetWarning().SetFailed();
00127 return result;
00128 }
00129
00130
00131 MSG("DFilt", Msg::kVerbose)
00132 << "CandDigitListHandle *cdlh = dynamic_cast<CandDigitListHandle *>"
00133 << " (candrec->FindCandHandle(\"CandDigitListHandle\", "
00134 << namelistin << "));" << endl;
00135
00136 CandDigitListHandle *cdlh = dynamic_cast<CandDigitListHandle *>
00137 (candrec->FindCandHandle("CandDigitListHandle",namelistin));
00138
00139 if (cdlh == 0) {
00140 MSG("DFilt", Msg::kWarning)
00141 << "No CandDigitListHandle named " << namelistin
00142 << " in CandRecord." << endl;
00143 result.SetWarning().SetFailed();
00144 return result;
00145 }
00146
00147 MSG("DFilt", Msg::kDebug) << "CandContext cx(this);" << endl;
00148 CandContext cx(this, mom);
00149
00150 MSG("DFilt", Msg::kDebug) << "cx.SetDataIn(cdlh);" << endl;
00151 cx.SetDataIn(cdlh);
00152
00153
00154 MSG("DFilt", Msg::kDebug)
00155 << "Get Singleton instance of AlgFactory." << endl
00156 << "AlgFactory &af = AlgFactory::GetInstance();" << endl;
00157 AlgFactory &af = AlgFactory::GetInstance();
00158
00159
00160 MSG("DFilt", Msg::kDebug)
00161 << "Get AlgHandle to FilterDigitList Algorithm and AlgConfig." << endl
00162 << "AlgHandle addlh = af.GetAlgHandle(" << filterdigitlistalgorithm
00163 << ", " << filterdigitlistalgconfig << ");" << endl;
00164 AlgHandle addlh = af.GetAlgHandle(filterdigitlistalgorithm,
00165 filterdigitlistalgconfig);
00166
00167 MSG("DFilt", Msg::kDebug)
00168 << "cddlh = CandDigitList::MakeCandidate(addlh, cx);" << endl;
00169 CandDigitListHandle cddlh = CandDigitList::MakeCandidate(addlh, cx);
00170 cddlh.SetName(namelistout);
00171 cddlh.SetTitle(titlelistout);
00172
00173
00174 MSG("DFilt", Msg::kDebug) << "candrec->SecureCandHandle(cddlh);"
00175 << endl;
00176 candrec->SecureCandHandle(cddlh);
00177
00178
00179 if (switchperstotemp) candrec->SwitchCandHandlePersToTemp(cdlh);
00180
00181 return result;
00182 }