93 {
94 MsgStream log(
msgSvc(), name() );
95
96 std::string fn;
97
98 auto iProp = service<IProperty>( "EventCnvSvc" );
99 if ( iProp )
100 {
101 iProp->getProperty( "digiRootInputFile", fn ).ignore();
102 std::string::size_type
p1 = fn.find(
'\'' ) + 1;
103 std::string::size_type
p2 = fn.find(
'\'',
p1 );
104 fn = fn.substr(
p1,
p2 -
p1 );
105 std::cout << "input dst file name: " << fn << std::endl;
106 }
107
108 TFile*
f1 = TFile::Open( fn.c_str(),
"READ" );
109 TFile* f2 = TFile::Open( m_outputFile.c_str(), "RECREATE" );
110 TTree* t1 = (TTree*)
f1->Get(
"Event" );
111
112 log << MSG::INFO << "in finalize()" << endmsg;
113 TTree* jt1 = (TTree*)(
f1->Get(
"JobInfoTree" ) );
114 TTree* jt2 = jt1->CloneTree();
115 TTree* t0 = new TTree( "Metadata", "" );
116 Int_t mode = -1, begin = 0, end = 0;
117 t0->Branch( "mode", &mode, "mode/I" );
118 t0->Branch( "begin", &begin, "begin/I" );
119 t0->Branch( "end", &end, "end/I" );
120
121 for ( std::map<int, std::vector<long int>>::iterator it = cmap.begin(); it != cmap.end();
122 ++it )
123 {
124 mode = it->first;
125 begin = end;
126 end += ( it->second ).size();
127 std::cout << "mode: " << mode << " begin: " << begin << " end: " << end << std::endl;
128 t0->Fill();
129 }
130
131 TTree* t2 = t1->CloneTree( 0 );
132 Int_t nEvents = t1->GetEntries();
133 std::cout << "Total nEvents: " << nEvents << std::endl;
134 Int_t origEntry = 0, currEntry = 0;
135 UInt_t tagData0, tagData1, tagData2, tagData3, tagData4;
136 UInt_t tagData5, tagData6, tagData7, tagData8;
137 TTree* t3 = new TTree( "Entries", "" );
138 t3->Branch( "origEntry", &origEntry, "origEntry/I" );
139 t3->Branch( "currEntry", &currEntry, "currEntry/I" );
140 t3->Branch( "tagData0", &tagData0, "tagData0/i" );
141 t3->Branch( "tagData1", &tagData1, "tagData1/i" );
142 t3->Branch( "tagData2", &tagData2, "tagData2/i" );
143 t3->Branch( "tagData3", &tagData3, "tagData3/i" );
144 t3->Branch( "tagData4", &tagData4, "tagData4/i" );
145 if ( ( m_dstDataType == 2 ) || ( m_dstDataType == 3 ) || ( m_dstDataType == 4 ) )
146 {
147 t3->Branch( "tagData5", &tagData5, "tagData5/i" );
148 t3->Branch( "tagData6", &tagData6, "tagData6/i" );
149 t3->Branch( "tagData7", &tagData7, "tagData7/i" );
150 t3->Branch( "tagData8", &tagData8, "tagData8/i" );
151 }
152
153 for ( std::map<int, std::vector<long int>>::iterator it = cmap.begin(); it != cmap.end();
154 ++it )
155 {
156 int nNt = it->second.size();
157 std::cout << "Writing " << nNt << "\t events with " << it->first << " TagData0..."
158 << std::endl;
159 for ( int i = 0; i < nNt; ++i )
160 {
161 origEntry = ( it->second )[i];
162 t1->GetEntry( origEntry );
163 tagData0 = ( evtmap[origEntry] )[0];
164 tagData1 = ( evtmap[origEntry] )[1];
165 tagData2 = ( evtmap[origEntry] )[2];
166 tagData3 = ( evtmap[origEntry] )[3];
167 tagData4 = ( evtmap[origEntry] )[4];
168 if ( ( m_dstDataType == 2 ) || ( m_dstDataType == 3 ) || ( m_dstDataType == 4 ) )
169 {
170 tagData5 = ( evtmap[origEntry] )[5];
171 tagData6 = ( evtmap[origEntry] )[6];
172 tagData7 = ( evtmap[origEntry] )[7];
173 tagData8 = ( evtmap[origEntry] )[8];
174 }
175 t2->Fill();
176 t3->Fill();
177 currEntry++;
178 }
179 ( it->second ).clear();
180 }
181
182 f2->Write();
183 f2->Close();
184 return StatusCode::SUCCESS;
185}