00001 00002 // 00003 // DemoRecordModule.cxx 00004 // 00005 // A JobControl Module for demonstrating record construction. 00006 // 00008 #include <iostream> 00009 #include <cassert> 00010 using std::endl; 00011 00012 #include "TClonesArray.h" 00013 #include "TVector3.h" 00014 00015 #include "JobControl/JobCModuleRegistry.h" 00016 #include "JobControl/JobCommand.h" 00017 #include "MessageService/MsgService.h" 00018 #include "MinosObjectMap/MomNavigator.h" 00019 #include "RawData/RawRecord.h" 00020 #include "RawData/RawDaqSnarlHeader.h" 00021 00022 #include "Record/test/DemoNtupleModule.h" 00023 #include "Record/demo/DemoNtupleRecord.h" 00024 00025 ClassImp(DemoNtupleModule) 00026 00027 // Definition of static data members 00028 // ********************************* 00029 00030 CVSID("$Id: DemoNtupleModule.cxx,v 1.4 2005/02/01 18:51:22 tagg Exp $"); 00031 JOBMODULE(DemoNtupleModule, "DemoNtupleModule", 00032 "A module for demonstrating ntuple construction."); 00033 00034 00035 // Definition of methods (alphabetical order) 00036 // *************************************************** 00037 00038 JobCResult DemoNtupleModule::Reco(MomNavigator *mom) { 00039 // 00040 // Purpose: Create ntuple record. 00041 // 00042 // Arguments: none. 00043 // 00044 // Return: none. 00045 // 00046 // Contact: S. Kasahara 00047 // 00048 00049 00050 JobCResult result(JobCResult::kPassed); 00051 MSG("DemoNtuple",Msg::kVerbose) << "DemoNtupleModule::Reco" << endl; 00052 00053 // Check that mom exists. 00054 assert(mom); 00055 00056 // Create a DemoNtupleRecord from a RawRecord (DaqSnarl) 00057 // Should iterate over rawrecords in mom, but this is just a demo 00058 RawRecord *rawRec = dynamic_cast<RawRecord*>(mom->GetFragment("RawRecord")); 00059 if ( !rawRec ) { 00060 MSG("RawRecord",Msg::kWarning) << "No RawRecord in Mom " <<endl; 00061 result.SetWarning().SetFailed(); 00062 return result; 00063 } 00064 00065 const RawDaqSnarlHeader* oldHdr = dynamic_cast<const RawDaqSnarlHeader*> 00066 (rawRec -> GetRawHeader()); 00067 // Use validity context to create header for ntuple record 00068 RecHeader newHdr(oldHdr->GetVldContext()); 00069 00070 // Create new record 00071 DemoNtupleRecord* ntp = new DemoNtupleRecord(newHdr); 00072 ntp -> SetMyData(oldHdr->GetSnarl()); 00073 00074 // For each new vertex, a TVector3 object is created and added to 00075 // the TClonesArray. 00076 int nvectors = 0; 00077 for ( int i = 0; i < 2; i++ ) { 00078 // This uses "new with placement" to reuse previously allocated memory 00079 if ( oldHdr->GetSnarl()%2 == 0 ) { 00080 // just for fun, every other entry has different values 00081 new((ntp->GetVectors())[nvectors++]) TVector3(1,2,3); 00082 } 00083 else { 00084 new((ntp->GetVectors())[nvectors++]) TVector3(4,5,6); 00085 } 00086 } 00087 00088 mom -> AdoptFragment(ntp); 00089 00090 return result; 00091 00092 } 00093 00094 00095 00096 00097
1.3.9.1