[go: up one dir, main page]

Menu

[5c152e]: / test / tsttrigger.cc  Maximize  Restore  History

Download this file

107 lines (86 with data), 2.8 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
#include <iostream>
#include <string>
#include <csignal>
#include <cstdio>
#include <DAQ++/DAQmanager.h>
#include "MyModule.h"
#include "utils.h"
#include "Trigger.h"
bool DoRun = true;
void quit(int )
{
// signal(SIGINT,SIG_DFL);
std::cout << std::endl << "Run stop forced" << std::endl;
DoRun = false;
}
/**
This is an implementation of a run manager.
It maintains a pointer to a DataLogger that gets activated everytime
a new run starts.
*/
class Rmanager : public DAQpp::RunManager
{
public:
Rmanager(DAQpp::DAQid id, DAQpp::RunCommand *rc = 0)
: DAQpp::RunManager(id, rc)
{}
~Rmanager()
{}
};
int main(int argc, char **argv)
{
Trigger trigger;
DAQpp::GTimer timer;
int nwords = 131;
double run_time = 15.;
std::cout << "Usage: tsttrigger [nwords | freq | run_time]" << std::endl;
if (argc > 1)
nwords = atoi(argv[1]);
if (argc > 2)
{
double freq = atof(argv[2]);
std::cout << "Setting frequency to: " << freq << std::endl;
trigger.set_freq(freq);
}
if ( argc > 3)
{
run_time = atof(argv[3]);
}
std::cout << "Each event will have " << nwords << " words" << std::endl;
std::cout << "Estimated freq. is " << trigger.get_freq() << std::endl;
std::cout << "Will run for " << run_time << " seconds" << std::endl;
// catch control-c
signal(SIGINT, quit);
DAQpp::RunManager *run_manager = new DAQpp::RunManager("main");
run_manager->addModule( new MyModule("100", nwords) );
//---------------------------------------------------------------------
// Start the DAQ
//---------------------------------------------------------------------
DAQpp::DAQmanager *daq_manager = DAQpp::DAQmanager::theDAQmanager();
run_manager->set_max_events(0);
run_manager->Activate();
std::cout << "Enabling interrupts" << std::endl;
trigger.enableInterrupts();
std::cout << "Starting the run" << std::endl;
daq_manager->StartRun(DAQpp::DAQmanager::Threaded);
timer.start();
while ( timer() < run_time && DoRun)
{
DAQpp::wait(0.1);
if ( !daq_manager->isRunning() )
break;
std:: cout << '\r' << run_manager->GetStatus() << std::flush;
}
std::cout << "\n\nDisabling interrupts" << std::endl;
trigger.disableInterrupts();
std::cout << "\n\nStopping the run" << std::endl;
daq_manager->StopRun();
std::cout << "\nWait for end of run" << std::endl;
daq_manager->WaitForEndOfRun(100000);
std::cout << std::endl
<< "--> Run stats. \n"
<< "---------------\n"
<< std::endl;
std::cout << *run_manager << std::endl;
return 0;
}