1#include "GaudiKernel/MsgStream.h"
2#include "GaudiKernel/AlgFactory.h"
3#include "GaudiKernel/ISvcLocator.h"
4#include "GaudiKernel/SmartDataPtr.h"
5#include "GaudiKernel/IDataProviderSvc.h"
15#include "GaudiKernel/SmartIF.h"
16#include "GaudiKernel/IJobOptionsSvc.h"
18#include "GaudiKernel/Bootstrap.h"
19#include "GaudiKernel/ISvcLocator.h"
20#include "CLHEP/Vector/ThreeVector.h"
21#include "CLHEP/Vector/LorentzVector.h"
22#include "CLHEP/Vector/TwoVector.h"
23using CLHEP::Hep3Vector;
24using CLHEP::Hep2Vector;
25using CLHEP::HepLorentzVector;
26#include "CLHEP/Geometry/Point3D.h"
27#ifndef ENABLE_BACKWARDS_COMPATIBILITY
30#include "CLHEP/Matrix/SymMatrix.h"
49 Algorithm(name, pSvcLocator) {
56 MsgStream log(
msgSvc(), name());
58 log << MSG::INFO <<
"in initialize()" << endmsg;
62 Gaudi::svcLocator()->service(
"TagFilterSvc", tmpSvc);
66 std::cout<<
"init DstReformAlg, m_dstDataType: "<< m_dstDataType <<std::endl;
68 return StatusCode::SUCCESS;
82 if( (dstDataType==2||dstDataType==4) && (tagData0==3) )
84 cmap[tagData0+tagData1].push_back(m_evtNum);
87 cmap[tagData0].push_back(m_evtNum);
90 if (m_dstDataType==1) {
91 evtmap[m_evtNum].push_back(tagData0);
92 evtmap[m_evtNum].push_back(tagData1);
93 evtmap[m_evtNum].push_back(tagData2);
94 evtmap[m_evtNum].push_back(tagData3);
95 evtmap[m_evtNum].push_back(tagData4);
96 }
else if ( (m_dstDataType==2) || (m_dstDataType==3) || (m_dstDataType==4) ) {
102 evtmap[m_evtNum].push_back(tagData1);
103 evtmap[m_evtNum].push_back(tagData2);
104 evtmap[m_evtNum].push_back(tagData3);
105 evtmap[m_evtNum].push_back(tagData4);
106 evtmap[m_evtNum].push_back(tagData5);
107 evtmap[m_evtNum].push_back(tagData6);
108 evtmap[m_evtNum].push_back(tagData7);
109 evtmap[m_evtNum].push_back(tagData8);
110 evtmap[m_evtNum].push_back(tagData9);
118 MsgStream log(
msgSvc(), name());
121 SmartIF<IJobOptionsSvc> iSvc(Gaudi::svcLocator()->service(
"JobOptionsSvc"));
122 if ( iSvc.isValid() ) {
123 const std::vector<const Property*>* ps = iSvc->getProperties(
"EventCnvSvc");
124 std::vector<const Property*>::const_iterator it, end = ps->end();
125 for ( it = ps->begin(); it != end; ++it ) {
126 if ( (*it)->name() ==
"digiRootInputFile" ) {
127 std::string flist=(*it)->toString();
128 std::string::size_type p1 = flist.find(
'"') + 1;
129 std::string::size_type
p2 = flist.find(
'"', p1);
130 fn = flist.substr(p1,
p2-p1);
131 std::cout<<
"input dst file name: "<<fn<<std::endl;
135 TFile*
f1 = TFile::Open(fn.c_str(),
"READ");
136 TFile* f2 = TFile::Open(m_outputFile.c_str(),
"RECREATE");
137 TTree* t1 = (TTree*)
f1->Get(
"Event");
139 log << MSG::INFO <<
"in finalize()" << endmsg;
140 TTree* jt1 = (TTree*)(
f1->Get(
"JobInfoTree"));
141 TTree* jt2 = jt1->CloneTree();
142 TTree* t0 =
new TTree(
"Metadata",
"");
143 Int_t mode = -1, begin = 0, end = 0;
144 t0->Branch(
"mode", &mode,
"mode/I");
145 t0->Branch(
"begin", &begin,
"begin/I");
146 t0->Branch(
"end", &end,
"end/I");
148 for ( std::map<
int, std::vector<long int> >::iterator it = cmap.begin(); it != cmap.end(); ++it ) {
151 end += (it->second).size();
152 std::cout<<
"mode: "<<mode<<
" begin: "<<begin<<
" end: "<<end<<std::endl;
156 TTree* t2 = t1->CloneTree(0);
157 Int_t nEvents = t1->GetEntries();
158 std::cout<<
"Total nEvents: "<<nEvents<<std::endl;
159 Int_t origEntry=0, currEntry=0;
160 UInt_t tagData0, tagData1, tagData2, tagData3, tagData4;
161 UInt_t tagData5, tagData6, tagData7, tagData8;
162 TTree* t3 =
new TTree(
"Entries",
"");
163 t3->Branch(
"origEntry", &origEntry,
"origEntry/I");
164 t3->Branch(
"currEntry", &currEntry,
"currEntry/I");
165 t3->Branch(
"tagData0", &tagData0,
"tagData0/i");
166 t3->Branch(
"tagData1", &tagData1,
"tagData1/i");
167 t3->Branch(
"tagData2", &tagData2,
"tagData2/i");
168 t3->Branch(
"tagData3", &tagData3,
"tagData3/i");
169 t3->Branch(
"tagData4", &tagData4,
"tagData4/i");
170 if ( (m_dstDataType==2) || (m_dstDataType==3) || (m_dstDataType==4) ) {
171 t3->Branch(
"tagData5", &tagData5,
"tagData5/i");
172 t3->Branch(
"tagData6", &tagData6,
"tagData6/i");
173 t3->Branch(
"tagData7", &tagData7,
"tagData7/i");
174 t3->Branch(
"tagData8", &tagData8,
"tagData8/i");
177 for ( std::map<
int, std::vector<long int> >::iterator it = cmap.begin(); it != cmap.end(); ++it ) {
178 int nNt = it->second.size();
179 std::cout <<
"Writing " << nNt <<
"\t events with " << it->first <<
" TagData0..." << std::endl;
180 for (
int i = 0; i < nNt; ++i ) {
181 origEntry=(it->second)[i];
182 t1->GetEntry(origEntry);
183 tagData0=(evtmap[origEntry])[0];
184 tagData1=(evtmap[origEntry])[1];
185 tagData2=(evtmap[origEntry])[2];
186 tagData3=(evtmap[origEntry])[3];
187 tagData4=(evtmap[origEntry])[4];
188 if ( (m_dstDataType==2) || (m_dstDataType==3) || (m_dstDataType==4) ) {
189 tagData5=(evtmap[origEntry])[5];
190 tagData6=(evtmap[origEntry])[6];
191 tagData7=(evtmap[origEntry])[7];
192 tagData8=(evtmap[origEntry])[8];
198 (it->second).clear();
203 return StatusCode::SUCCESS;
std::ofstream m_outputFile
unsigned int getTagData5()
unsigned int getTagData7()
unsigned int getTagData6()
unsigned int getTagData3()
unsigned int getTagData2()
unsigned int getTagData8()
unsigned int getTagData9()
unsigned int getTagData1()
unsigned int getTagData4()
unsigned int getTagData0()