BOSS 7.1.1
BESIII Offline Software System
Loading...
Searching...
No Matches
RootCnvSvc.cxx
Go to the documentation of this file.
1#define RootCnvSvc_CXX
2#include <iostream>
3#include "GaudiKernel/SmartIF.h"
4#include "GaudiKernel/SvcFactory.h"
5
6#include "GaudiKernel/MsgStream.h"
7#include "GaudiKernel/ISvcLocator.h"
8#include "GaudiKernel/IDataProviderSvc.h"
9#include "GaudiKernel/IDataManagerSvc.h"
10#include "GaudiKernel/RegistryEntry.h"
11#include "GaudiKernel/GenericAddress.h"
12
13#include "RawEvent/DigiEvent.h"
14#include "DstEvent/DstEvent.h"
15#include "McTruth/McEvent.h"
16#include "TrigEvent/TrigEvent.h"//caogf
17#include "HltEvent/HltEvent.h"//fucd
19
23
24
30#include "RootCnvSvc/EventCnv.h"
32#include "RootCnvSvc/Mc/McCnv.h"
46
64
74
75
78
83
86
87#include <math.h>
88
89using namespace std;
90
91// RCS Id for identification of object version
92static const char* rcsid = "$Id: RootCnvSvc.cxx,v 1.74 2022/02/21 22:04:49 maqm Exp $";
93
94DECLARE_COMPONENT(RootCnvSvc)
95
96// Instantiation of a static factory class used by clients to create
97// instances of this service
98//static const SvcFactory<RootCnvSvc> s_RootCnvSvcFactory;
99//const ISvcFactory& RootCnvSvcFactory = s_RootCnvSvcFactory;
100
101RootCnvSvc::RootCnvSvc(const std::string& name, ISvcLocator* svc)
102 : ConversionSvc(name, svc, ROOT_StorageType), m_minSplit(1), m_evtsel(0)
103{
104 StatusCode sc;
105 MsgStream log(msgSvc(), "RootCnvSvc");
106 log << MSG::DEBUG << "RootCnvSvc::constructor" << endreq;
107
108 IService* isvc = 0;
109 sc = serviceLocator()->getService ("RootEvtSelector", isvc, false);
110 if (!sc.isSuccess()) sc = serviceLocator()->getService ("EventSelector", isvc, false);
111 if (sc.isSuccess()) {
112 sc = isvc->queryInterface(IID_IRootEvtSelector, (void**)&m_evtsel);
113 }
114 if(sc.isFailure()) {
115 log << MSG::WARNING << "Unable to start event selector service within RootCnvSvc" << endreq;
116 }
117
118 m_rootInterface= RootInterface::Instance(log);
119 if (!m_rootInterface) log << MSG::ERROR << "Unable to start Root service within RootCnvSvc" << endreq;
120
121
122
123 //Digi
124 declareProperty("digiTreeName", m_dtreeName="Event"); //"Rec"->"Event"
125
126 declareProperty("digiRootInputFile",m_difileName);
127 //if (m_difileName.size()==0){
128 // m_difileName.push_back("digi.root");
129 //}
130 declareProperty("digiRootOutputFile",m_dofileName = "");
131
132 // Split mode for writing the TTree [0,99]
133 declareProperty("digiSplitMode", m_dsplitMode=m_minSplit);
134 // Buffer size for writing ROOT data
135 declareProperty("digiBufferSize", m_dbufSize=3200000);
136 // ROOT default compression
137 declareProperty("digiCompressionLevel", m_dcompressionLevel=1);
138 declareProperty("selectFromTag", m_selectFromTag=0);
139 declareProperty("tagInputFile", m_tagInputFile);
140 //declareProperty("tagFileFormat", m_tagFileFormat=1);
141
142 declareProperty("readETS", m_readETS = false);
143}
144
146 // Purpose and Method: Setup GLAST's Event Converter Service.
147 // Associate RootCnvSvc with the EventDataSvc
148 // Associate the list of known converters with this RootCnvSvc
149 // configure map of leaves
150
151 MsgStream log(msgSvc(), name());
152 log << MSG::DEBUG << "RootCnvSvc::initialize" << endreq;
153 StatusCode status = ConversionSvc::initialize();
154 if ( status.isSuccess() ) {
155 // ISvcLocator* svclocator = serviceLocator(); [unused for now]
156 IDataProviderSvc *pIDP = 0;
157 // Set event data service
158 status = service("EventDataSvc", pIDP, true);
159 if ( status.isSuccess() ) {
160 status = setDataProvider ( pIDP );
161 }
162 else {
163 return status;
164 }
165
166
167 // Add converters to the service
168 status = addConverters();
169 if ( !status.isSuccess() ) {
170 log << MSG::ERROR << "Unable to add converters to the service" << endreq;
171 return status;
172 }
173
174
175 // Now we have to configure the map of leaves
176 // Which should contain the association of converters with
177 // paths on the TDS
178 for (LeafMap::iterator k = m_leaves.begin(); k != m_leaves.end(); k++ ) {
179 std::string path = (*k).first;
180 for (LeafMap::iterator j = m_leaves.begin(); j != m_leaves.end(); j++ ) {
181 std::string path2 = (*j).first;
182 std::string pp = (*j).first.substr(0, (*j).first.rfind("/"));
183 if ( path == pp && path != (*j).first ) {
184 (*k).second->push_back((*j).second);
185 }
186 }
187 }
188 }
189
190 // get properties and tell RootInterface about files
191 status=initFiles();
192
193 m_rootInterface->setSelectFromTag(m_selectFromTag);
194 if ( m_selectFromTag && m_tagInputFile.empty() ) {
195 m_tagInputFile = m_difileName;
196 }
197 m_rootInterface->setTagInputFile(m_tagInputFile);
198 //m_rootInterface->setTagFileFormat(m_tagFileFormat);
199
200 return status;
201}
202
204 MsgStream log(msgSvc(), name());
205 log << MSG::DEBUG << "RootCnvSvc::finalize" << endreq;
206
207 ConversionSvc::finalize();
208 // log << MSG::INFO<<"this is the end of RootCnvsvc finalize"<<endreq;
209 for (LeafMap::iterator k = m_leaves.begin(); k != m_leaves.end(); k++ ) {
210 delete (*k).second;
211 }
212 m_leaves.erase(m_leaves.begin(), m_leaves.end());
213
214 return m_rootInterface->finalize();
215}
216
217StatusCode RootCnvSvc::initFiles () {
218 MsgStream log(msgSvc(), name());
219 log << MSG::DEBUG << "RootCnvSvc::initFiles" << endreq;
220 StatusCode sc=StatusCode::SUCCESS;
221
222 // Use the Job options service to set the Algorithm's parameters
223 // This will retrieve parameters set in the job options file
224 setProperties();
225
226 //Read inpout files files from job options
227 int nSize = m_difileName.size();
228 log<<MSG::INFO<<"Root Input files "<<nSize<<endreq;
229 if(nSize == 0){
230 log<<MSG::INFO<<"Unable to find input file"<<endreq;
231 //return StatusCode::FAILURE;
232 }
233
234 for(int i = 0;i<nSize;i++){
235 facilities::Util::expandEnvVar(&m_difileName[i]);
236 /*std::string s=m_difileName[i];
237 std::vector<int> wildcardPos;
238 for(int pos=0;pos<s.size();pos++) {
239 pos=s.find_first_of('?',pos);
240 if(pos!=-1) {
241 wildcardPos.push_back(pos);
242 }
243 else{
244 break;
245 }
246 }
247 if(wildcardPos.size()!=0) {
248 int nEnd=facilities::Util::catchOptionVal(&s)+1;
249 int maxNo=pow(10.,(int)wildcardPos.size());
250 if(nEnd!=0&&nEnd<maxNo) maxNo=nEnd;
251 int nStart=facilities::Util::catchOptionVal(&s,0,"&(",")");
252 int i=1;
253 if(nStart!=-1) i=nStart;
254 if(nStart>nEnd) log<<MSG::WARNING<<"file's StartNo>EndNo"<<endreq;
255 for(;i<maxNo;i++){
256 std::vector<int>::iterator it=wildcardPos.end();
257 int id=i;
258 while(it!=wildcardPos.begin()){
259 it--;
260 char c=id%10+48;
261 id /=10;
262 s.replace((*it),1,1,c);
263 }
264 if(access(s.c_str(),0)!=-1) {
265 sc = m_rootInterface->addInput(m_dtreeName,s);
266 if (sc.isFailure()) return sc;
267 }
268 }
269 }
270 else {*/
271 sc = m_rootInterface->addInput(m_dtreeName,m_difileName[i]);
272 if (sc.isFailure()) return sc;
273 // }
274 }
275
276 //facilities::Util::expandEnvVar(&m_difileName[0]);
277 //sc = m_rootInterface->addInput(m_dtreeName,m_difileName[0]);
278 //if (sc.isFailure()) return sc;
279
280
281 //Digi
282 //facilities::Util::expandEnvVar(&m_difileName);
283 facilities::Util::expandEnvVar(&m_dofileName);
284 // sc = m_rootInterface->addInput(m_dtreeName,m_difileName);
285 // if (sc.isFailure()) return sc;
286
287 if (m_dsplitMode<m_minSplit) {
288 log << MSG::WARNING << "RootCnvSvc::initFiles Recon splitlevel cant be lower than "<<m_minSplit<<", reset" << endreq;
289 m_dsplitMode=m_minSplit;
290 }
291
292 if( "" != m_dofileName ){
293 sc=m_rootInterface->addOutput(m_dtreeName,m_dofileName,m_dsplitMode,m_dbufSize,m_dcompressionLevel);
294 }else{
295 log << MSG::WARNING << "No specified digiRootOutputFile!" << endreq;
296 }
297
298 return sc;
299}
300
301
302StatusCode RootCnvSvc::declareObject(const Leaf& leaf) {
303 // Purpose and Method: Callback from each of the individual converters that allows
304 // association of TDS path and converter.
305 MsgStream log(msgSvc(), name());
306 log << MSG::DEBUG << "RootCnvSvc::declareObject " << leaf.path << " classid: " << leaf.clid << endreq;
307 Leaf* ll = new Leaf(leaf);
308 std::pair<LeafMap::iterator, bool> p = m_leaves.insert(LeafMap::value_type( leaf.path, ll) );
309 if( p.second ) {
310 return StatusCode::SUCCESS;
311 }
312 delete ll;
313 return StatusCode::FAILURE;
314}
315
316/// Update state of the service
317StatusCode RootCnvSvc::updateServiceState(IOpaqueAddress* pAddress) {
318
319 // not sure about the use of recid or bank...
320 MsgStream log(msgSvc(), name());
321
322 log << MSG::DEBUG << "RootCnvSvc::updateServiceState" << endreq;
323
324 StatusCode status = INVALID_ADDRESS;
325 IRegistry* ent = pAddress->registry();
326 if ( 0 != ent ) {
327 SmartIF<IDataManagerSvc> iaddrReg(dataProvider());
328 // if ( 0 != iaddrReg ) {
329 status = StatusCode::SUCCESS;
330 std::string path = ent->identifier();
331 LeafMap::iterator itm = m_leaves.find(path);
332 if ( itm != m_leaves.end() ) {
333 Leaf* leaf = (*itm).second;
334 if ( 0 != leaf ) {
335 for ( Leaf::iterator il = leaf->begin(); il != leaf->end(); il++ ) {
336 IOpaqueAddress* newAddr = 0;
337 unsigned long ipars[2] = {0, 0}; //
338 if (m_evtsel) ipars[0]=m_evtsel->getRecId();
339
340 std::string spars[3]={(*il)->path,(*il)->treename,(*il)->branchname};
341
342 StatusCode ir =createAddress(ROOT_StorageType,
343 (*il)->clid,
344 spars,
345 ipars,
346 newAddr);
347 log << MSG::DEBUG << "RootCnvSvc::updateService " << " ***** " <<
348 (*il)->clid << " ***** " << (*il)->path <<endreq;
349
350 if ( ir.isSuccess() ) {
351 ir = iaddrReg->registerAddress((*il)->path, newAddr);
352 if ( !ir.isSuccess() ) {
353 newAddr->release();
354 status = ir;
355 }
356 }
357 }
358 }
359 }
360 }
361 return StatusCode::SUCCESS;
362 }
363
364 StatusCode RootCnvSvc::queryInterface(const InterfaceID& riid, void** ppvInterface) {
365
366 if ( IID_IRootCnvSvc == riid ) {
367 *ppvInterface = (RootCnvSvc*)this;
368 }
369 else {
370 // Interface is not directly availible: try out a base class
371 return ConversionSvc::queryInterface(riid, ppvInterface);
372 }
373 addRef();
374 return StatusCode::SUCCESS;
375 }
376
377 StatusCode RootCnvSvc::createAddress(long int svc_type,
378 const CLID& clid,
379 const std::string* spars,
380 const unsigned long* ipars,
381 IOpaqueAddress*& refpAddress)
382 {
383 MsgStream log( msgSvc(), name() );
384
385 if (svc_type != repSvcType() ) {
386 log << MSG::ERROR << "RootCnvSvc::bad storage type" << svc_type << endreq;
387 return StatusCode::FAILURE;
388 }
389
390 std::string path = spars[0];
391 std::string treename = spars[1];
392 std::string branchname = spars[2];
393 int entry=ipars[0];
394 if (path.size()==0) path="/Event";
395 refpAddress = new RootAddress(ROOT_StorageType,
396 clid,
397 path,treename,branchname,entry);
398 return StatusCode::SUCCESS;
399 }
400
401
402 StatusCode RootCnvSvc::commitOutput(const std::string& output, bool do_commit)
403 {
404
405
406
407 MsgStream log( msgSvc(), name() );
408 log << MSG::INFO << "RootCnvSvc::commitOutput starts." << endreq;
409
410 StatusCode sc=m_rootInterface->fillTrees();
411 if (sc.isFailure())
412 log << MSG::ERROR << "No Root tree was filled" << endreq;
413
414 // objects must be cleared after fill
415 else{
416 TObject* oEvtHeader = m_evtheaderCnv->getWriteObject();
417 if (oEvtHeader) oEvtHeader->Clear();
418 TObject* oEvtNavigator = m_evtnavigatorCnv->getWriteObject();
419 if (oEvtNavigator) oEvtNavigator->Clear();
420 TObject* o=m_dCnv->getWriteObject();
421 if (o) o->Clear();
422 TObject* oDst=m_dstCnv->getWriteObject();
423 if (oDst) oDst->Clear();
424 TObject* oMc=m_mcCnv->getWriteObject();
425 if (oMc) oMc->Clear();
426 TObject* oRecTrack=m_rectrackCnv->getWriteObject();
427 if (oRecTrack) oRecTrack->Clear();
428 TObject* oEvtRecEvent = m_evtRecCnv->getWriteObject();
429 if (oEvtRecEvent) oEvtRecEvent->Clear();
430 TObject* oTrig = m_trigCnv->getWriteObject();
431 if(oTrig) oTrig->Clear();
432 TObject* oHlt = m_hltCnv->getWriteObject();
433 if(oHlt) oHlt->Clear();
434 }
435 m_common.clear();
436
437 return sc;
438 }
439
440 StatusCode RootCnvSvc::createAddress(DataObject *obj,IOpaqueAddress*& newAddr) {
441
442 // create address for this object
443 MsgStream log(msgSvc(), name());
444
445
446 log << MSG::DEBUG << "RootCnvSvc::createAddress"<<endreq;
447
448 StatusCode status = INVALID_ADDRESS;
449 IRegistry* ent = obj->registry();
450
451 if ( 0 != ent ) {
452 SmartIF<IDataManagerSvc> iaddrReg(dataProvider());
453 std::string path = ent->identifier();
454 LeafMap::iterator itm = m_leaves.find(path);
455
456
457 if ( itm != m_leaves.end() ) {
458 Leaf* leaf = (*itm).second;
459 if ( 0 != leaf ) {
460 std::string spars[3] ;
461 spars[0]=path;
462 spars[1]=leaf->treename;
463 spars[2]=leaf->branchname;
464
465
466 unsigned long ipars[2] ={0,0};
467 if (m_evtsel) ipars[0]=m_evtsel->getRecId();
468
469 status=addressCreator()->createAddress(ROOT_StorageType,leaf->clid,spars,ipars,newAddr);
470 if ( status.isSuccess() ) {
471 status = iaddrReg->registerAddress((IRegistry*)0,path, newAddr);
472 if ( !status.isSuccess() ) {
473 newAddr->release();
474 }
475 }
476 return StatusCode::SUCCESS;
477 }
478 }
479 }
480 return status;
481 }
482
483 StatusCode RootCnvSvc::createAddress(std::string path,IOpaqueAddress*& newAddr) {
484
485 // create address for this object
486 MsgStream log(msgSvc(), name());
487
488 StatusCode status;
489 LeafMap::iterator itm = m_leaves.find(path);
490 SmartIF<IDataManagerSvc> iaddrReg(dataProvider());
491 if ( itm != m_leaves.end() ) {
492 Leaf* leaf = (*itm).second;
493 if ( 0 != leaf ) {
494 std::string spars[3] ;
495 spars[0]=path;
496 spars[1]=leaf->treename;
497 spars[2]=leaf->branchname;
498
499 unsigned long ipars[2] = {0,0};
500 if (m_evtsel) ipars[0]=m_evtsel->getRecId();
501 status=addressCreator()->createAddress(ROOT_StorageType,leaf->clid,spars,ipars,newAddr);
502 if ( status.isSuccess() ) {
503 status = iaddrReg->registerAddress((IRegistry*)0,path, newAddr);
504 if ( !status.isSuccess() ) {
505 newAddr->release();
506 }
507 }
508 return StatusCode::SUCCESS;
509 }
510 }
511
512
513 return StatusCode::FAILURE;
514 }
515
516
517 /// Add converters to the service
518 StatusCode RootCnvSvc::addConverters () {
519 MsgStream log(msgSvc(), name());
520 declareObject(Leaf(EventModel::Dst::DstMdcDedxCol, MdcDedxCnv::classID(), "Event", "m_mdcDedxCol"));
522 declareObject(Leaf(EventModel::Digi::EmcDigiCol, EmcDigiCnv::classID(), "Event", "m_emcDigiCol"));
523 declareObject(Leaf(EventModel::MC::EmcMcHitCol, EmcMcHitCnv::classID(), "Event", "m_emcMcHitCol"));
524 declareObject(Leaf(EventModel::Dst::DstEmcShowerCol, EmcTrackCnv::classID(), "Event", "m_emcTrackCol"));
525
526 declareObject(Leaf("/Event", EventCnv::classID(), "", ""));
527 if ( m_readETS ) {
528 declareObject(Leaf(EventModel::EventHeader, EvtHeaderCnv::classID(), "Event", "m_runId:m_eventId:m_time:m_eventTag:m_flag1:m_flag2:m_etsT1:m_etsT2"));
529 }
530 else {
531 declareObject(Leaf(EventModel::EventHeader, EvtHeaderCnv::classID(), "Event", "m_runId:m_eventId:m_time:m_eventTag:m_flag1:m_flag2"));
532 }
533 declareObject(Leaf(EventModel::Navigator, EvtNavigatorCnv::classID(), "Event", "m_mcMdcMcHits:m_mcMdcTracks:m_mcEmcMcHits:m_mcEmcRecShowers"));
534 declareObject(Leaf(EventModel::Dst::DstExtTrackCol, ExtTrackCnv::classID(), "Event", "m_extTrackCol"));
536 declareObject(Leaf(EventModel::MC::McParticleCol, McParticleCnv::classID(), "Event", "m_mcParticleCol"));
537 declareObject(Leaf(EventModel::Digi::MdcDigiCol, MdcDigiCnv::classID(), "Event", "m_mdcDigiCol"));
538 declareObject(Leaf(EventModel::Dst::DstMdcKalTrackCol, MdcKalTrackCnv::classID(), "Event", "m_mdcKalTrackCol"));
539 declareObject(Leaf(EventModel::MC::MdcMcHitCol, MdcMcHitCnv::classID(), "Event", "m_mdcMcHitCol"));
540 declareObject(Leaf(EventModel::Dst::DstMdcTrackCol, MdcTrackCnv::classID(), "Event", "m_mdcTrackCol"));
541 declareObject(Leaf(EventModel::Digi::MucDigiCol, MucDigiCnv::classID(), "Event", "m_mucDigiCol"));
542 declareObject(Leaf(EventModel::MC::MucMcHitCol, MucMcHitCnv::classID(), "Event", "m_mucMcHitCol"));
543 declareObject(Leaf(EventModel::Dst::DstMucTrackCol, MucTrackCnv::classID(), "Event", "m_mucTrackCol"));
544 declareObject(Leaf(EventModel::Digi::Event, DigiCnv::classID(), "Event", "m_fromMc"));
545 declareObject(Leaf(EventModel::Digi::TofDigiCol, TofDigiCnv::classID(), "Event", "m_tofDigiCol"));
546 declareObject(Leaf(EventModel::MC::TofMcHitCol, TofMcHitCnv::classID(), "Event", "m_tofMcHitCol"));
547 declareObject(Leaf(EventModel::Dst::DstTofTrackCol, TofTrackCnv::classID(), "Event", "m_tofTrackCol"));
548 //declareObject(Leaf("/Event/Digi/LumiDigiCol", LumiDigiCnv::classID(), "Event", "m_lumiDigiCol"));
549 declareObject(Leaf(EventModel::Digi::LumiDigiCol, LumiDigiCnv::classID(), "Event", "m_lumiDigiCol"));
550
552 declareObject(Leaf(EventModel::Trig::TrigData, TrigDataCnv::classID(), "Event", "m_trigData"));
553
555 declareObject(Leaf(EventModel::Hlt::HltRawCol, HltRawCnv::classID(), "Event", "m_hltRawCol"));
556 declareObject(Leaf(EventModel::Hlt::HltInf, HltInfCnv::classID(), "Event", "m_hltInf"));
557 declareObject(Leaf(EventModel::Hlt::DstHltInf, DstHltInfCnv::classID(), "Event", "m_dstHltInf"));
558
560
561 declareObject(Leaf(EventModel::Recon::RecMdcTrackCol, RecMdcTrackCnv::classID(), "Event", "m_recMdcTrackCol"));
562 declareObject(Leaf(EventModel::Recon::RecMdcHitCol, RecMdcHitCnv::classID(), "Event", "m_recMdcHitCol"));
565 declareObject(Leaf(EventModel::Recon::RecMdcDedxCol, RecMdcDedxCnv::classID(),"Event", "m_recMdcDedxCol"));
567
568 declareObject(Leaf(EventModel::Recon::RecEsTimeCol, RecEvTimeCnv::classID(),"Event", "m_recEvTimeCol"));
569 declareObject(Leaf(EventModel::Recon::RecTofTrackCol, RecTofTrackCnv::classID(), "Event", "m_recTofTrackCol"));
570 declareObject(Leaf(EventModel::Recon::RecBTofCalHitCol, RecBTofCalHitCnv::classID(), "Event", "m_recBTofCalHitCol"));
571 declareObject(Leaf(EventModel::Recon::RecETofCalHitCol, RecETofCalHitCnv::classID(), "Event", "m_recETofCalHitCol"));
572 declareObject(Leaf(EventModel::Recon::RecEmcHitCol, RecEmcHitCnv::classID(), "Event", "m_recEmcHitCol"));
573 declareObject(Leaf(EventModel::Recon::RecEmcClusterCol, RecEmcClusterCnv::classID(), "Event", "m_recEmcClusterCol"));
574 declareObject(Leaf(EventModel::Recon::RecEmcShowerCol, RecEmcShowerCnv::classID(), "Event", "m_recEmcShowerCol"));
575 declareObject(Leaf(EventModel::Recon::RecMucTrackCol, RecMucTrackCnv::classID(), "Event", "m_recMucTrackCol"));
577 declareObject(Leaf(EventModel::Recon::RecExtTrackCol, RecExtTrackCnv::classID(),"Event", "m_recExtTrackCol"));
578 declareObject(Leaf(EventModel::Recon::RecZddChannelCol, RecZddChannelCnv::classID(), "Event", "m_recZddChannelCol"));
581 declareObject(Leaf(EventModel::EvtRec::EvtRecTrackCol, EvtRecTrackCnv::classID(), "Event", "m_evtRecTrackCol"));
583 declareObject(Leaf(EventModel::EvtRec::EvtRecVeeVertexCol, EvtRecVeeVertexCnv::classID(), "Event", "m_evtRecVeeVertexCol"));
584 declareObject(Leaf(EventModel::EvtRec::EvtRecPi0Col, EvtRecPi0Cnv::classID(), "Event", "m_evtRecPi0Col"));
585 declareObject(Leaf(EventModel::EvtRec::EvtRecEtaToGGCol, EvtRecEtaToGGCnv::classID(), "Event", "m_evtRecEtaToGGCol"));
586 declareObject(Leaf(EventModel::EvtRec::EvtRecDTagCol, EvtRecDTagCnv::classID(), "Event", "m_evtRecDTagCol"));
587
588 return StatusCode::SUCCESS;
589
590 }
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per saves r n generator level $ !Flag for chat level in output
Definition FoamA.h:89
const long int ROOT_StorageType
const InterfaceID IID_IRootCnvSvc
IMessageSvc * msgSvc()
static const CLID & classID()
Definition DigiCnv.h:25
static TDigiEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition DigiCnv.h:35
static const CLID & classID()
Definition DstCnv.h:25
static TDstEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition DstCnv.h:36
static const CLID & classID()
static const CLID & classID()
Definition EmcDigiCnv.h:24
static const CLID & classID()
Definition EmcMcHitCnv.h:24
static const CLID & classID()
Definition EmcTrackCnv.h:20
static const CLID & classID()
Definition EventCnv.h:26
static TEvtHeader * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
static const CLID & classID()
static TEvtNavigator * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
static const CLID & classID()
static TEvtRecObject * getWriteObject()
Definition EvtRecCnv.h:26
static const CLID & classID()
Definition EvtRecCnv.h:20
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
Definition ExtTrackCnv.h:20
static THltEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition HltCnv.h:35
static const CLID & classID()
Definition HltCnv.h:25
static const CLID & classID()
Definition HltInfCnv.h:25
static const CLID & classID()
Definition HltRawCnv.h:24
static const CLID & classID()
Definition LumiDigiCnv.h:20
static TMcEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition McCnv.h:35
static const CLID & classID()
Definition McCnv.h:25
static const CLID & classID()
static const CLID & classID()
Definition MdcDedxCnv.h:20
static const CLID & classID()
Definition MdcDigiCnv.h:24
static const CLID & classID()
static const CLID & classID()
Definition MdcMcHitCnv.h:24
static const CLID & classID()
Definition MdcTrackCnv.h:20
static const CLID & classID()
Definition MucDigiCnv.h:20
static const CLID & classID()
Definition MucMcHitCnv.h:24
static const CLID & classID()
Definition MucTrackCnv.h:20
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static const CLID & classID()
static TRecTrackEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition RecTrackCnv.h:36
static const CLID & classID()
Definition RecTrackCnv.h:26
static const CLID & classID()
Definition of a Root address, derived from IOpaqueAddress.
Definition RootAddress.h:21
object regrouping CLID and pathname with treename/branchname
Definition RootCnvSvc.h:48
std::string path
Definition RootCnvSvc.h:50
std::string treename
Definition RootCnvSvc.h:51
std::string branchname
Definition RootCnvSvc.h:52
Root Event Conversion Service which coordinates all of our converters.
Definition RootCnvSvc.h:41
virtual StatusCode createAddress(long int svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress)
create address containing ROOT treename, branchname, entry number
virtual StatusCode initialize()
virtual StatusCode updateServiceState(IOpaqueAddress *pAddress)
Update state of the service.
virtual StatusCode commitOutput(const std::string &output, bool do_commit)
Commit pending output (fill the TTrees).
virtual StatusCode declareObject(const Leaf &leaf)
Associates a path on TDS with a particular converter.
virtual StatusCode finalize()
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface)
Override inherited queryInterface due to enhanced interface.
int getRecId() const
virtual StatusCode finalize()
virtual void setTagInputFile(std::vector< std::string > input)
virtual StatusCode addInput(const std::string &treename, const std::string &file)
add input tree to the list
static RootInterface * Instance(MsgStream log)
singleton behaviour
virtual StatusCode addOutput(const std::string &treename, const std::string &file, int splitx, int bufsize, int compression)
add output tree to the list
virtual StatusCode fillTrees()
fill in all trees
virtual void setSelectFromTag(bool temp)
static const CLID & classID()
Definition TofDigiCnv.h:20
static const CLID & classID()
Definition TofMcHitCnv.h:24
static const CLID & classID()
Definition TofTrackCnv.h:20
static const CLID & classID()
Definition TrigCnv.h:25
static TTrigEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
Definition TrigCnv.h:35
static const CLID & classID()
Definition TrigDataCnv.h:25
static int expandEnvVar(std::string *toExpand, const std::string &openDel=std::string("$("), const std::string &closeDel=std::string(")"))
_EXTERN_ std::string Event
Definition EventModel.h:56
_EXTERN_ std::string MdcDigiCol
Definition EventModel.h:57
_EXTERN_ std::string MucDigiCol
Definition EventModel.h:60
_EXTERN_ std::string LumiDigiCol
Definition EventModel.h:61
_EXTERN_ std::string EmcDigiCol
Definition EventModel.h:58
_EXTERN_ std::string TofDigiCol
Definition EventModel.h:59
_EXTERN_ std::string Event
Definition EventModel.h:128
_EXTERN_ std::string DstEmcShowerCol
Definition EventModel.h:134
_EXTERN_ std::string DstMdcKalTrackCol
Definition EventModel.h:130
_EXTERN_ std::string DstExtTrackCol
Definition EventModel.h:136
_EXTERN_ std::string DstMdcDedxCol
Definition EventModel.h:132
_EXTERN_ std::string DstTofTrackCol
Definition EventModel.h:133
_EXTERN_ std::string DstMdcTrackCol
Definition EventModel.h:129
_EXTERN_ std::string DstMucTrackCol
Definition EventModel.h:135
_EXTERN_ std::string EvtRecPi0Col
Definition EventModel.h:123
_EXTERN_ std::string Event
Definition EventModel.h:115
_EXTERN_ std::string EvtRecPrimaryVertex
Definition EventModel.h:120
_EXTERN_ std::string EvtRecEvent
Definition EventModel.h:116
_EXTERN_ std::string EvtRecVeeVertexCol
Definition EventModel.h:121
_EXTERN_ std::string EvtRecEtaToGGCol
Definition EventModel.h:124
_EXTERN_ std::string EvtRecDTagCol
Definition EventModel.h:122
_EXTERN_ std::string EvtRecTrackCol
Definition EventModel.h:117
_EXTERN_ std::string Event
Definition EventModel.h:72
_EXTERN_ std::string HltInf
Definition EventModel.h:74
_EXTERN_ std::string HltRawCol
Definition EventModel.h:73
_EXTERN_ std::string DstHltInf
Definition EventModel.h:75
_EXTERN_ std::string EmcMcHitCol
Definition EventModel.h:46
_EXTERN_ std::string MucMcHitCol
Definition EventModel.h:47
_EXTERN_ std::string MdcMcHitCol
Definition EventModel.h:44
_EXTERN_ std::string TofMcHitCol
Definition EventModel.h:45
_EXTERN_ std::string McParticleCol
Definition EventModel.h:41
_EXTERN_ std::string Event
Definition EventModel.h:39
_EXTERN_ std::string RecMdcKalHelixSegCol
Definition EventModel.h:91
_EXTERN_ std::string RecEmcClusterCol
Definition EventModel.h:102
_EXTERN_ std::string MucRecHitCol
Definition EventModel.h:105
_EXTERN_ std::string RecETofCalHitCol
Definition EventModel.h:99
_EXTERN_ std::string RecBTofCalHitCol
Definition EventModel.h:98
_EXTERN_ std::string RecExtTrackCol
Definition EventModel.h:93
_EXTERN_ std::string RecMdcDedxCol
Definition EventModel.h:88
_EXTERN_ std::string RecZddChannelCol
Definition EventModel.h:108
_EXTERN_ std::string RecTofTrackCol
Definition EventModel.h:97
_EXTERN_ std::string RecEsTimeCol
Definition EventModel.h:92
_EXTERN_ std::string RecEmcHitCol
Definition EventModel.h:101
_EXTERN_ std::string RecMdcTrackCol
Definition EventModel.h:86
_EXTERN_ std::string RecMdcDedxHitCol
Definition EventModel.h:89
_EXTERN_ std::string Event
Definition EventModel.h:84
_EXTERN_ std::string RecMdcKalTrackCol
Definition EventModel.h:90
_EXTERN_ std::string RecMucTrackCol
Definition EventModel.h:106
_EXTERN_ std::string RecMdcHitCol
Definition EventModel.h:85
_EXTERN_ std::string RecEmcShowerCol
Definition EventModel.h:103
_EXTERN_ std::string TrigData
Definition EventModel.h:68
_EXTERN_ std::string Event
Definition EventModel.h:66