00001
00002
00003
00004
00006 #include <cassert>
00007
00008
00009 #include "MessageService/MsgService.h"
00010 #include "MinosObjectMap/MomNavigator.h"
00011 #include "JobControl/JobCModuleRegistry.h"
00012
00013 #include "Algorithm/AlgFactory.h"
00014 #include "Algorithm/AlgHandle.h"
00015 #include "Algorithm/AlgConfig.h"
00016
00017 #include "CandData/CandRecord.h"
00018 #include "Candidate/CandContext.h"
00019 #include "RecoBase/CandTrack.h"
00020 #include "RecoBase/CandTrackHandle.h"
00021 #include "RecoBase/CandTrackListHandle.h"
00022 #include "RawData/RawRecord.h"
00023 #include "RawData/RawDaqSnarlHeader.h"
00024
00025 #include "CandFitTrackCam/FitTrackCamListModule.h"
00026 #include "CandFitTrackCam/CandFitTrackCamListHandle.h"
00027 #include "CandFitTrackCam/CandFitTrackCamList.h"
00028
00029 JOBMODULE(FitTrackCamListModule, "FitTrackCamListModule", "Track Fitter");
00030 CVSID("$Id: FitTrackCamListModule.cxx,v 1.12 2010/01/06 18:44:00 rhatcher Exp $");
00031
00033 FitTrackCamListModule::FitTrackCamListModule()
00034 {
00035 fAlgName="AlgFitTrackCamList";
00036 fAlgConfig="default";
00037
00038 fAlgFitName="AlgFitTrackCam";
00039
00040 fListIn="CandTrackSRList";
00041
00042 }
00044
00045
00047 FitTrackCamListModule::~FitTrackCamListModule()
00048 {
00049 }
00051
00052
00054 void FitTrackCamListModule::BeginJob()
00055 {
00056 MSG("FitTrackCamListModule", Msg::kDebug) << " Track Fitter startup complete " << endl;
00057 }
00059
00060
00062 void FitTrackCamListModule::EndJob()
00063 {
00064 }
00066
00067
00069 JobCResult FitTrackCamListModule::Reco(MomNavigator* mom)
00070 {
00071 JobCResult result(JobCResult::kPassed);
00072
00073 const char* alg_name = 0;
00074 const char* alg_config_name = 0;
00075 const char* algfit_name = 0;
00076
00077
00078 CandRecord *candrec = dynamic_cast<CandRecord *> (mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00079 if(!candrec)
00080 {
00081 MSG("FitTrackCamListModule", Msg::kWarning) << " Failed to Find CandRecord " << endl;
00082 return result.SetFailed();
00083 }
00084
00085
00086 RawRecord *rr = dynamic_cast<RawRecord *>(mom->GetFragment("RawRecord",0,"DaqSnarl"));
00087 if(rr==0){
00088 MSG("FitTrackCamListModule", Msg::kWarning) << " Failed to Find RawRecord " << endl;
00089 return result.SetFailed();
00090 }
00091
00092
00093 else {
00094 const RawDaqSnarlHeader* hdr = dynamic_cast<const RawDaqSnarlHeader*>(rr->GetRawHeader());
00095 if(hdr){
00096 MSG("FitTrackCamListModule", Msg::kDebug) << "Run, Snarl: "<<hdr->GetRun()<<", "<< hdr->GetSnarl()<<endl;
00097 }
00098 }
00099
00100
00101
00102 CandTrackListHandle* track_list = dynamic_cast<CandTrackListHandle*>(candrec->FindCandHandle("CandTrackListHandle",fListIn.Data()));
00103
00104 if( !track_list || (track_list && track_list->GetNDaughters()<1) )
00105 {
00106
00107 if(!track_list) {
00108 MSG("FitTrackCamListModule", Msg::kDebug) << " Failed to Find " << fListIn.Data() << endl;}
00109 else if(track_list && track_list->GetNDaughters()<1) {
00110 MSG("FitTrackCamListModule", Msg::kDebug) << " No tracks found. Empty " << fListIn.Data() << endl;}
00111
00112
00113 return JobCResult::kAOK;
00114 }
00115
00116
00117 AlgFactory &af = AlgFactory::GetInstance();
00118 alg_name=fAlgName.Data(); alg_config_name=fAlgConfig.Data();
00119 AlgHandle adlh = af.GetAlgHandle(alg_name,alg_config_name);
00120
00121 algfit_name=fAlgFitName.Data();
00122 AlgHandle adlhfit = af.GetAlgHandle(algfit_name,alg_config_name);
00123
00124 AlgConfig &algfit = adlhfit.GetAlgConfig();
00125
00126 algfit.UnLockValues();
00127 algfit.UnLockKeys();
00128 int fSet;
00129 if(!algfit.Get("UseGeoSwimmer",fSet)) {
00130 algfit.Set("UseGeoSwimmer",fUseGeoSwimmer);
00131 }
00132 algfit.LockValues();
00133 algfit.LockKeys();
00134
00135 CandContext cx(this, mom);
00136 cx.SetCandRecord(candrec);
00137 cx.SetDataIn(track_list);
00138 CandFitTrackCamListHandle cftlh = CandFitTrackCamList::MakeCandidate(adlh, cx);
00139 cftlh.SetName(fListOut.Data());
00140 cftlh.SetTitle(TString("Created by FitTrackCamListModule"));
00141 candrec->SecureCandHandle(cftlh);
00142
00143 return JobCResult::kPassed;
00144 }
00146
00147
00149 const char* FitTrackCamListModule::GetName() const
00150 {
00151 const char* tmps = "FitTrackCamListModule";
00152 return tmps;
00153 }
00155
00156
00158 const Registry& FitTrackCamListModule::DefaultConfig() const
00159 {
00160
00161
00162
00163 static Registry r;
00164
00165
00166 std::string name = this->GetName();
00167 name += ".config.default";
00168 r.SetName(name.c_str());
00169
00170
00171 r.UnLockValues();
00172 r.Set("NameListIn","CandTrackSRList");
00173 r.Set("NameListOut","CandFitTrackCamList");
00174 r.Set("FitTrackCamAlgorithm","AlgFitTrackCamList");
00175 r.Set("FitTrackCamAlgConfig","default");
00176 r.Set("UseGeoSwimmer",1);
00177 r.LockValues();
00178
00179 return r;
00180 }
00182
00183
00185 void FitTrackCamListModule::Config(const Registry& r)
00186 {
00187
00188
00189
00190
00191 const char* tmps;
00192 int tmpi;
00193 if (r.Get("NameListIn",tmps)) { fListIn = tmps; }
00194 if (r.Get("NameListOut",tmps)) { fListOut = tmps; }
00195 if (r.Get("FitTrackCamAlgorithm",tmps)) { fAlgName = tmps; }
00196 if (r.Get("FitTrackCamAlgConfig",tmps)) { fAlgConfig = tmps; }
00197 if (r.Get("UseGeoSwimmer",tmpi)) { fUseGeoSwimmer = tmpi; }
00198
00199 }