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

rr2fmwk.cc File Reference

#include <getopt.h>
#include <string>
#include <iostream>
#include "TChain.h"
#include "TParticle.h"
#include "REROOT_Classes/REROOT_Event.h"
#include "REROOT_Classes/REROOT_GAFKey.h"
#include "REROOT_Classes/REROOT_NeuKin.h"
#include "REROOT_Classes/REROOT_FLSHit.h"
#include "REROOT_Classes/REROOT_StdHep.h"
#include "EventDataModel/DataBucket.h"
#include "EventDataModel/EventHandle.h"
#include "IoModules/ReadWriteModule.h"

Go to the source code of this file.

Functions

void doHeader (edm::EventHandle &evt, REROOT_Event *rrEvent)
void doNeuKin (edm::EventHandle &evt, REROOT_Event *rrEvent)
void doStdHep (edm::EventHandle &evt, REROOT_Event *rrEvent)
void doFLSHits (edm::EventHandle &evt, REROOT_Event *rrEvent)
int main (int argc, char **argv)


Detailed Description

Program to convert from reroot format to "FMWK" format
Author:
messier@indiana.edu
Version:
Id
rr2fmwk.cc,v 1.5 2007/05/23 19:43:46 messier Exp

Definition in file rr2fmwk.cc.


Function Documentation

void doFLSHits edm::EventHandle evt,
REROOT_Event *  rrEvent
[static]
 

Definition at line 85 of file rr2fmwk.cc.

References edm::EventHandle::DetSim().

Referenced by main().

00086 {
00087   // Push the FLSHits - make a sub folder for each new track id
00088   int            nflshit;
00089   int            itrack;
00090   char           folder[256];
00091   REROOT_FLSHit* flshit;
00092     
00093   if (evt.DetSim().GetFolder("flshit")==0) {
00094     evt.DetSim().MakeFolder("flshit");
00095   }
00096 
00097   nflshit = rrEvent->n_flshits();
00098   for (int j=0; j<nflshit; ++j) {
00099     flshit = (REROOT_FLSHit*)(*rrEvent->flshits())[j];
00100 
00101     // Take the absolute value of the track id. GMINOS flags hits from
00102     // secondary particles with negative track id's
00103     itrack = abs(flshit->ITrack());
00104     
00105     sprintf(folder,"flshit/flshit%d",itrack);
00106     if (evt.DetSim().GetFolder(folder)==0) {
00107       evt.DetSim().MakeFolder(folder);
00108     }
00109     evt.DetSim().Put(*flshit,folder);
00110   }
00111 }

void doHeader edm::EventHandle evt,
REROOT_Event *  rrEvent
[static]
 

Definition at line 25 of file rr2fmwk.cc.

References edm::EventHandle::Header().

Referenced by main().

00026 {
00027   int ngafkey = rrEvent->n_gafkeys();
00028   if (ngafkey!=1) abort();
00029   
00030   REROOT_GAFKey* gafkey;
00031   gafkey = (REROOT_GAFKey*)(*rrEvent->gafkeys())[0];
00032   evt.Header().SetRun(gafkey->RunNo());
00033   evt.Header().SetSubrun(0);
00034   evt.Header().SetEvent(gafkey->EventNo());
00035 }

void doNeuKin edm::EventHandle evt,
REROOT_Event *  rrEvent
[static]
 

Definition at line 39 of file rr2fmwk.cc.

References edm::EventHandle::MC().

Referenced by main().

00040 {
00041   // Push the NeuKin data structure over
00042   int            nneukin;
00043   REROOT_NeuKin* neukin;
00044   nneukin = rrEvent->n_neukins();
00045   if (evt.MC().GetFolder("neukin")==0) {
00046     evt.MC().MakeFolder("neukin");
00047   }
00048   for (int j=0; j<nneukin; ++j) {
00049     neukin = (REROOT_NeuKin*)(*rrEvent->neukins())[j];
00050     evt.MC().Put(*neukin,"neukin");
00051   }
00052 }

void doStdHep edm::EventHandle evt,
REROOT_Event *  rrEvent
[static]
 

Definition at line 56 of file rr2fmwk.cc.

References edm::EventHandle::DetSim().

Referenced by main().

00057 {
00058   // Push the STDHEP particle stack. In the interest of forward
00059   // compatibility translate the REROOT_StdHep object to ROOT's
00060   // TParticle
00061   REROOT_StdHep* stdhep;
00062   int nstdhep = rrEvent->n_stdheps();
00063   for (int j=0; j<nstdhep; ++j) {
00064     stdhep = (REROOT_StdHep*)(*rrEvent->stdheps())[j];
00065     TParticle p(stdhep->IdHEP(),
00066                 stdhep->IstHEP(),
00067                 stdhep->FirstParent(),
00068                 stdhep->LastParent(),
00069                 stdhep->FirstChild(),
00070                 stdhep->LastChild(),
00071                 stdhep->Px(),
00072                 stdhep->Py(),
00073                 stdhep->Pz(),
00074                 stdhep->E(),
00075                 0.1*stdhep->Xmm(), // convert positions to units of cm
00076                 0.1*stdhep->Ymm(),
00077                 0.1*stdhep->Zmm(),
00078                 stdhep->Tprod());
00079     evt.DetSim().Put(p,".");
00080   }
00081 }

int main int  argc,
char **  argv
 

Definition at line 115 of file rr2fmwk.cc.

References edm::EventHandle::Clear(), io::ReadWriteModule::Close(), doFLSHits(), doHeader(), doNeuKin(), doStdHep(), io::ReadWriteModule::GetEvent(), io::ReadWriteModule::SetOutputFileName(), and io::ReadWriteModule::WriteEvent().

00116 {
00117   int verbose = 0;
00118   int indx;
00119   int nevt = -1;
00120   const char* opts = "n:o:vh";
00121   static struct option longopt[] = {
00122     {"nevt",    required_argument, 0, 'n'},
00123     {"output",  required_argument, 0, 'o'},
00124     {"verbose", no_argument,       0, 'v'},
00125     {"help",    no_argument,       0, 'h'}
00126   };
00127   
00128   int ch;
00129   std::string outfile = "out.root";
00130   while ((ch = getopt_long(argc, argv, opts, longopt, &indx))!=-1) {
00131     switch (ch) {
00132     case 'n': nevt    = atoi(optarg); break;
00133     case 'o': outfile = optarg; break;
00134     case 'v': verbose = 1;      break;
00135     case 'h': 
00136       std::cout << 
00137         "\n" <<
00138         "Usage: rr2fmwk [options] reroot.root\n" <<
00139         "  where reroot.root in an input reroot file and [options] are:\n" <<
00140         "  --nevt, -n [N]            : Process first N events in file\n" <<
00141         "  --outfile, -o [file.root] : Name of output file\n" <<
00142         "  --verbose, -v             : Print lots of debugging info.\n" <<
00143         std::endl;
00144       exit(0);
00145       break;
00146     }
00147   }
00148   argc -= optind;
00149   argv += optind;
00150   if (verbose) {
00151     std::cout 
00152       << "Start conversion of " << argc << " files to fmwk format.\n"
00153       << "Results stored in file " << outfile << std::endl;
00154   }
00155   
00156   // Loop over remaining command line arguments (file names) and
00157   // convert them
00158   REROOT_Event* rrEvent = new REROOT_Event();
00159   TChain*       rrTree  = new TChain("GEVT");
00160   rrTree->SetBranchAddress("REROOT_Event", &rrEvent);
00161   for (int i=0; i<argc; ++i) {
00162     if (verbose) {
00163       std::cout << 
00164         "Convert data file " << argv[i] << " to fmwk." << std::endl;
00165     }
00166     rrTree->AddFile(argv[i]);
00167   }
00168   
00169   // Open the output file
00170   io::ReadWriteModule* iomod = new io::ReadWriteModule();
00171   iomod->SetOutputFileName(outfile.c_str());
00172   
00173   // Open the reroot file stream and pull in the data
00174   if (nevt<0) nevt = rrTree->GetEntries();
00175   if (verbose) {
00176     std::cout << "Converting " << nevt << " events." << std::endl;
00177   }
00178   for (int i=0; i<nevt; ++i) {
00179     rrTree->GetEntry(i);
00180     
00181     // Get a handle to the output event
00182     edm::EventHandle& evt = iomod->GetEvent();
00183     evt.Clear();
00184 
00185     // Push over each relevant REROOT data bank
00186     doHeader (evt, rrEvent);
00187     doNeuKin (evt, rrEvent);
00188     doStdHep (evt, rrEvent);
00189     doFLSHits(evt, rrEvent);
00190     
00191     // Done filling output event. Write to stream.
00192     iomod->WriteEvent();
00193     if (verbose) {
00194       std::cout << "Event " << i << " complete." << std::endl;
00195     }
00196   }
00197   iomod->Close();
00198 
00199   return 0;
00200 }


Generated on Sat Oct 11 02:35:30 2008 for NOvA Offline by  doxygen 1.3.9.1