00001
00002
00003
00004
00005
00006
00008 #include <iostream>
00009 #include <cassert>
00010
00011 using namespace std;
00012
00013 #include "TParticle.h"
00014 #include "TClonesArray.h"
00015
00016 #include "MessageService/MsgService.h"
00017 #include "JobControl/JobCModuleRegistry.h"
00018 #include "JobControl/JobCommand.h"
00019 #include "MinosObjectMap/MomNavigator.h"
00020
00021 #include "Algorithm/AlgFactory.h"
00022 #include "Algorithm/AlgConfig.h"
00023 #include "Algorithm/AlgHandle.h"
00024 #include "CandData/CandRecord.h"
00025 #include "CandData/CandHeader.h"
00026 #include "RawData/RawRecord.h"
00027 #include "RecoBase/CandFitTrackListHandle.h"
00028 #include "RawData/RawDaqSnarlHeader.h"
00029 #include "Candidate/CandContext.h"
00030 #include "JobControl/JobCModuleRegistry.h"
00031 #include "MCNtuple/NtpMCRecord.h"
00032 #include "MCNtuple/NtpMCStdHep.h"
00033
00034 #include "CandFitTrackSA/CandFitTrackSAHandle.h"
00035 #include "CandFitTrackSA/Ntp/NtpFitSARecord.h"
00036 #include "CandFitTrackSA/Ntp/NtpFitSA.h"
00037 #include "CandFitTrackSA/NtpModule/NtpFitSAModule.h"
00038 #include "CandFitTrackSA/TracerSA.h"
00039
00040
00041
00042
00043 CVSID("$Id: NtpFitSAModule.cxx,v 1.5 2009/05/04 19:33:49 arms Exp $");
00044 JOBMODULE(NtpFitSAModule, "NtpFitSAModule",
00045 "A module for filling FitSA ntuple records.");
00046
00047
00048
00049
00050
00051
00052
00053
00054 const Registry& NtpFitSAModule::DefaultConfig() const {
00055
00056
00057
00058
00059
00060
00061
00062
00063 TracerSA trace("NtpFitSAModule::DefaultConfig()");;
00064
00065 static Registry r;
00066 std::string name = this->JobCModule::GetName();
00067 name += ".config.default";
00068 r.SetName(name.c_str());
00069
00070 r.UnLockValues();
00071
00072 r.Set("ListOut", "CandFitTrackSAList");
00073
00074 r.LockValues();
00075
00076 return r;
00077 }
00078
00079
00080
00081 void NtpFitSAModule::Config(const Registry& ) {
00082
00083
00084
00085
00086
00087
00088
00089
00090 TracerSA trace("NtpFitSAModule::Config(const Registry&)");
00091
00092
00093
00094
00095
00096
00097 }
00098
00099
00100
00101 JobCResult NtpFitSAModule::Reco(MomNavigator *mom) {
00102
00103
00104
00105
00106
00107
00108
00109
00110 TracerSA trace("NtpFitSAModule::Reco(MomNavigator*)");
00111
00112 JobCResult result(JobCResult::kPassed);
00113
00114 const RawRecord* rawrec = dynamic_cast<const RawRecord*>(mom->GetFragment("RawRecord","","DaqSnarl"));
00115
00116 CandRecord* cndrec = dynamic_cast<CandRecord*>
00117 (mom->GetFragment("CandRecord","PrimaryCandidateRecord"));
00118
00119
00120 if ( !rawrec || !cndrec ) {
00121 return JobCResult::kFailed;
00122 }
00123
00124
00125
00126 const CandHeader* cndhdr = cndrec -> GetCandHeader();
00127 const RawDaqSnarlHeader* rawhdr = dynamic_cast<const RawDaqSnarlHeader*> (rawrec -> GetRawHeader());
00128 RecCandHeader ntphdr(rawhdr->GetVldContext(),rawhdr->GetRun(),
00129 rawhdr->GetSubRun(),rawhdr->GetRunType(),rawhdr->GetErrorCode(),
00130 rawhdr->GetSnarl(),rawhdr->GetTrigSrc(),rawhdr->GetTimeFrameNum(), rawhdr->GetRemoteSpillType(),
00131 cndhdr->GetEvent());
00132
00133 NtpFitSARecord* ntprec = new NtpFitSARecord(ntphdr);
00134
00135 this -> FillNtpFitSA(ntprec, cndrec);
00136
00137 mom -> AdoptFragment(ntprec);
00138
00139 return result;
00140 }
00141
00142
00143 void NtpFitSAModule::FillNtpFitSA(NtpFitSARecord* ntprec, const CandRecord* cndrec) {
00144
00145
00146 TracerSA trace("NtpFitSA::FillNtpFitSA(NtpFitSARecord* ,const CandRecord*)");
00147
00148 TClonesArray& fitsaarray = *(ntprec->fitsa);
00149
00150 const CandFitTrackListHandle *fitsalisthandle = dynamic_cast <const CandFitTrackListHandle*>
00151 (cndrec->FindCandHandle("",GetConfig().GetCharString("ListOut")));
00152
00153 if ( fitsalisthandle ) {
00154
00155 Int_t nfitsa = 0;
00156
00157 TIter fitsaItr(fitsalisthandle->GetDaughterIterator());
00158 while ( const CandFitTrackSAHandle* fitsahandle = dynamic_cast<const CandFitTrackSAHandle*> (fitsaItr())) {
00159
00160 (ntprec->ntrack)++;
00161
00162 const TClonesArray& fits = fitsahandle->GetFits();
00163 NtpFitSA* ntpfitsa;
00164 for (Int_t i = 0; i<fits.GetEntriesFast(); i++) {
00165
00166 ntpfitsa = new((fitsaarray)[nfitsa++]) NtpFitSA(*(NtpFitSA*) fits[i]);
00167
00168
00169 }
00170 }
00171 }
00172 }
00173
00174
00175