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

NtpFitSAModule.cxx

Go to the documentation of this file.
00001 
00002 //
00003 // NtpFitSAModule.cxx
00004 //
00005 // A JobControl Module for filling an NtpFitSA
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 //   Definition of static data members
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 // Definition of methods (alphabetical order)
00049 // ***************************************************
00050 
00051 
00052 //......................................................................
00053 
00054 const Registry& NtpFitSAModule::DefaultConfig() const {
00055   //
00056   // Purpose: Method to return default configuration.
00057   //
00058   // Arguments: none.
00059   //
00060   // Return: Registry containing default configuration
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");      // Name of the output list
00073 
00074   r.LockValues();
00075 
00076   return r;
00077 }
00078 
00079 //......................................................................
00080 
00081 void NtpFitSAModule::Config(const Registry& /* r */) {
00082   //
00083   // Purpose: Configure the module given a registry.
00084   //
00085   // Arguments: Registry to use to configure the module.
00086   //
00087   // Return: none.
00088   //
00089 
00090   TracerSA trace("NtpFitSAModule::Config(const Registry&)");
00091 
00092   //  Int_t tmpi;
00093   //  Double_t tmpd;
00094   //  const Char_t* tmps;
00095 
00096 
00097 }
00098 
00099 //......................................................................
00100 
00101 JobCResult NtpFitSAModule::Reco(MomNavigator *mom) {
00102   //
00103   //  Purpose:  Create and fill ntuple record.
00104   //
00105   //  Arguments: mom.
00106   //
00107   //  Return: status.
00108   //
00109 
00110     TracerSA trace("NtpFitSAModule::Reco(MomNavigator*)");
00111 
00112     JobCResult result(JobCResult::kPassed); // The default result
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     // Check if there actually are records in mom before trying to use them!
00120     if ( !rawrec || !cndrec ) {
00121       return JobCResult::kFailed;
00122     }
00123 
00124     // Extract header from CandRecord and use this to create RecCandHeader
00125     // and NtpSRRecord.
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);  // pass record to mom to own
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             // increment number of tracks
00160             (ntprec->ntrack)++;
00161             // get array from cand handle
00162             const TClonesArray& fits = fitsahandle->GetFits();
00163             NtpFitSA* ntpfitsa;
00164             for (Int_t i = 0; i<fits.GetEntriesFast(); i++) {
00165                 // Uses new with placement to efficiently create strip ntp
00166                 ntpfitsa = new((fitsaarray)[nfitsa++]) NtpFitSA(*(NtpFitSA*) fits[i]);
00167                 // Transport information from CandFitTrackSA to fitsa ntp
00168                 //(*ntpfitsa) = fitsahandle->GetNtpFitSA();
00169             }
00170         }
00171     }
00172 }
00173 
00174 
00175 

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