22 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
26 Prod_actor *fProducer;
28 Cons_actor *fConsumer;
35 std::string fPathProd;
36 std::string fPathFilt;
37 std::string fPathCons;
55 virtual Bool_t
Init(
const Char_t *rootafp)
59 virtual Bool_t
Init(Int_t which_run,
const char *experiment,
const char *which_adf_data,
const char *run_pat, Option_t *opt_adf_pattern)
64 virtual Bool_t Init();
65 virtual Bool_t Run(UInt_t max_loop =
kMaxUInt_t);
68 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
82 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
93 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
99 NarvalInterface::process_config(fPathProd.data(),&err);
106 Prod_actor::process_config(fPathProd.data(),&err);
110 fProducer =
new Prod_actor();
111 fProducer->process_initialise(&err);
117 Filt_actor::process_config(fPathFilt.data(),&err);
121 fFilter =
new Filt_actor() ;
122 fFilter->process_initialise(&err);
128 Cons_actor::process_config(fPathCons.data(),&err);
132 fConsumer =
new Cons_actor();
133 fConsumer->process_initialise(&err);
142 template <
typename Prod_actor,
typename Filt_actor,
typename Cons_actor>
145 printf(
"************** EMULATOR MAIN LOOP ************** \n");
148 UInt_t nb_loop = 0u, err = 0u, nb_try = 0;
149 while ( err == 0u ) {
153 int Prodstatus = fProducer->ProcessBlock(fBProd);
154 int ProdSize = fBProd.GetSize();
160 if ( ProdSize == 0u ) {
171 int Filterstatus = fFilter->ProcessBlock(fBProd,fBFilt);
172 int FilterSize = fBFilt.GetSize();
177 if ( FilterSize == 0u )
break;
179 int ConsStatus = fConsumer->ProcessBlock(fBFilt);
183 if(Prodstatus != 0 || Filterstatus !=0 || ConsStatus != 0u)
break;
186 if ( nb_loop == max_loop )
189 printf(
"nb_loop %d error %d\n",nb_loop,err);
190 printf(
"************** EMULATOR MAIN LOOP ************** \n");
195 template <
typename Prod_actor,
typename Cons_actor>
199 Prod_actor *fProducer;
200 Cons_actor *fConsumer;
206 std::string fPathProd;
207 std::string fPathCons;
215 {
return fProducer; }
218 {
return fConsumer; }
221 {
return fConsumer; }
224 {
return fProducer; }
227 virtual Bool_t
Init(
const Char_t *rootafp)
231 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)
235 virtual Bool_t
Init();
239 template <
typename Prod_actor,
typename Cons_actor>
251 template <
typename Prod_actor,
typename Cons_actor>
260 template <
typename Prod_actor,
typename Cons_actor>
266 NarvalInterface::process_config(fPathProd.data(),&err);
273 Prod_actor::process_config(fPathProd.data(),&err);
277 fProducer =
new Prod_actor();
278 fProducer->process_initialise(&err);
284 Cons_actor::process_config(fPathCons.data(),&err);
288 fConsumer =
new Cons_actor();
289 fConsumer->process_initialise(&err);
297 template <
typename Prod_actor,
typename Cons_actor>
300 printf(
"\n*********** EMULATOR MAIN LOOP : START ... \n\n");
302 UInt_t nb_loop = 0u, err = 0u, nb_try = 0;
303 while ( err == 0u ) {
306 if ( fProducer->ProcessBlock(fBProd) != 0u )
308 fConsumer->ProcessBlock(fBProd);
311 if ( fBProd.GetSize() == 0u ) {
325 if ( fConsumer->ProcessBlock(fBProd) != 0u )
329 if ( nb_loop == max_loop )
332 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).
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
virtual Bool_t Init()
It should be overwritten !
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()
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.
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, const char *run_pat, 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.