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

DemoNtupleModule.cxx

Go to the documentation of this file.
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 

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