#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) |
Definition in file rr2fmwk.cc.
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
1.3.9.1