23 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
30 Prod_actor *fProducer;
32 Cons_actor *fConsumer;
39 std::string fPathProd;
40 std::string fPathFilt;
41 std::string fPathCons;
59 virtual Bool_t
Init(
const Char_t *rootafp)
63 virtual Bool_t
Init(Int_t which_run,
const char *experiment,
const char *which_adf_data, Option_t *opt_adf_pattern)
68 virtual Bool_t Init();
69 virtual Bool_t Run(UInt_t max_loop =
kMaxUInt_t);
72 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
87 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
98 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
102 fLog.SetProcessMethod(
"Init");
105 NarvalInterface::process_config(fPathProd.data(),&err);
107 fLog <<
warning <<
" in NarvalInterface::process_config " <<
nline;
113 Prod_actor::process_config(fPathProd.data(),&err);
115 fLog <<
error <<
" in process_config for Producer " <<
dolog;
118 fProducer =
new Prod_actor();
119 fProducer->process_initialise(&err);
121 fLog <<
error <<
" in process_initialise for Producer " <<
dolog;
126 Filt_actor::process_config(fPathFilt.data(),&err);
128 fLog << err <<
" in process_config for Filter " <<
dolog;
131 fFilter =
new Filt_actor() ;
132 fFilter->process_initialise(&err);
134 fLog <<
error <<
" in process_initialise for Filter " <<
dolog;
139 Cons_actor::process_config(fPathCons.data(),&err);
141 fLog <<
error <<
" in process_config for Consumer " <<
dolog;
144 fConsumer =
new Cons_actor();
145 fConsumer->process_initialise(&err);
147 fLog <<
error <<
" in process_initialise for Consumer " <<
dolog;
151 fLog <<
dolog;
return true;
155 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
158 printf(
"************** EMULATOR MAIN LOOP ************** \n");
161 UInt_t nb_loop = 0u, err = 0u, nb_try = 0;
162 while ( err == 0u ) {
165 if ( fProducer->ProcessBlock(fBProd) != 0u )
167 if ( fBProd.GetSize() == 0u ) {
181 if ( fFilter->ProcessBlock(fBProd,fBFilt) != 0u )
183 if ( fBFilt.GetSize() == 0u )
189 if ( fConsumer->ProcessBlock(fBFilt) != 0u )
193 if ( nb_loop == max_loop )
196 printf(
"nb_loop %d error %d\n",nb_loop,err);
197 printf(
"************** EMULATOR MAIN LOOP ************** \n");
201 template <
typename Prod_actor,
typename Cons_actor>
208 Prod_actor *fProducer;
209 Cons_actor *fConsumer;
215 std::string fPathProd;
216 std::string fPathCons;
224 {
return fProducer; }
227 {
return fConsumer; }
230 {
return fConsumer; }
233 {
return fProducer; }
236 virtual Bool_t
Init(
const Char_t *rootafp)
240 virtual Bool_t
Init(Int_t which_run,
const char *experiment,
const char *which_adf_data,
const char *run_name_pattern, Option_t *opt_adf_pattern)
244 virtual Bool_t
Init();
248 template <
typename Prod_actor,
typename Cons_actor>
261 template <
typename Prod_actor,
typename Cons_actor>
270 template <
typename Prod_actor,
typename Cons_actor>
274 fLog.SetProcessMethod(
"Init");
277 NarvalInterface::process_config(fPathProd.data(),&err);
279 fLog <<
warning <<
" in NarvalInterface::process_config " <<
nline;
285 Prod_actor::process_config(fPathProd.data(),&err);
287 fLog <<
error <<
" in process_config for Producer " <<
dolog;
290 fProducer =
new Prod_actor();
291 fProducer->process_initialise(&err);
293 fLog <<
error <<
" in process_initialise for Producer " <<
dolog;
298 Cons_actor::process_config(fPathCons.data(),&err);
300 fLog <<
error <<
" in process_config for Consumer " <<
dolog;
303 fConsumer =
new Cons_actor();
304 fConsumer->process_initialise(&err);
306 fLog <<
error <<
" in process_initialise for Consumer " <<
dolog;
310 fLog <<
dolog;
return true;
313 template <
typename Prod_actor,
typename Cons_actor>
316 printf(
"\n*********** EMULATOR MAIN LOOP : START ... \n\n");
318 UInt_t nb_loop = 0u, err = 0u, nb_try = 0;
319 while ( err == 0u ) {
323 int Prodstatus = fProducer->ProcessBlock(fBProd);
324 int ProdSize = fBProd.GetSize();
330 if ( ProdSize == 0u && Prodstatus ==0) {
341 int ConsStatus = fConsumer->ProcessBlock(fBProd);
345 if(Prodstatus != 0 || ConsStatus != 0u)
break;
348 if ( nb_loop == max_loop )
351 printf(
"\n*********** EMULATOR MAIN LOOP : ... STOP after %d loops (error %d)\n\n",nb_loop,err);
NarvalProducer * GetBaseProducer()
virtual Bool_t Run(UInt_t max_loop=kMaxUInt_t)
loop
printf("******************************************************************** \n")
header file for FrameBlock.cpp
It defines the interface needed to be a narval actor (producer).
LogMessage & error(LogMessage &)
LogMessage & warning(LogMessage &)
It implements an expandable block of Frame.
EmulatorPC(const char *path, UInt_t bsize=aMByte)
Prod_actor * GetProducer()
virtual Bool_t Run(UInt_t max_loop=kMaxUInt_t)
loop
LogMessage & nline(LogMessage &)
virtual Bool_t Init()
It should be overwritten !
Base class for a Log message.
virtual void Print(Option_t *option="") const
virtual Bool_t Init(Int_t which_run, const char *experiment, const char *which_adf_data, const char *run_name_pattern, Option_t *opt_adf_pattern)
NarvalProducer * GetBaseProducer()
Cons_actor * GetConsumer()
header file for ReadMezzAFP.cpp
EmulatorPFC(const char *path, UInt_t bsize=aMByte)
virtual Bool_t Init()
It should be overwritten !
virtual Bool_t Init(const Char_t *rootafp)
Init the emulator using a different root afp file for the producer.
NarvalConsumer * GetBaseConsumer()
It defines the interface needed to be a consumer.
LogMessage & dolog(LogMessage &)
to have a common base class to be able to control the emulator through a TTask
virtual Bool_t Init(Int_t which_run, const char *experiment, const char *which_adf_data, Option_t *opt_adf_pattern)
NarvalConsumer * GetBaseConsumer()
virtual Bool_t Init(const Char_t *rootafp)
Init the emulator using a different root afp file for the producer.
Cons_actor * GetConsumer()
virtual Bool_t Init()
It should be overwritten !
It implements an in-memory block of Frames.