26 #include "FairRecoEventHeader.h" 
   27 #include "FairRootManager.h" 
   28 #include "FairRunAna.h" 
   29 #include "FairRuntimeDb.h" 
   31 #include "TClonesArray.h" 
   45 using std::setprecision;
 
   55   : FairEventBuilderManager(),
 
   63   : FairEventBuilderManager(name, iVerbose),
 
   79     cout << 
"PndEventBuilderManager::AnalyzeAndExtractEvents(" << maxEventTimeAllowed << 
")" << endl;
 
   83   FairRecoEventHeader* tempREH = NULL;
 
   87     for ( Int_t ieb = 0 ; ieb < fEventBuilders.size() ; ieb++ ) {
 
   88       for ( Int_t iev = 0 ; iev < fPossibleEvents[ieb].size() ; iev++ ) {
 
   89         tempREH = (FairRecoEventHeader*)fPossibleEvents[ieb][iev].second;
 
   91           cout << 
"    fPossibleEvents[" << fEventBuilders[ieb]->GetName() 
 
   92                << 
"][" << iev << 
"] . " << fPossibleEvents[ieb][iev].first << endl;
 
   93         if ( fPossibleEvents[ieb][iev].second->GetEventTime() < minEventTime ) {
 
   94           minEventTime = fPossibleEvents[ieb][iev].second->GetEventTime();
 
   95           minEventTErr = fPossibleEvents[ieb][iev].second->GetEventTimeError();
 
  100       cout << 
"  minEventTime is now " << minEventTime << 
" with error " << minEventTErr << endl;
 
  103     if ( maxEventTimeAllowed > -0.5 && minEventTime > maxEventTimeAllowed-5 ) {
 
  107     if ( minEventTime > 9.9e6 ) 
break;
 
  115     for ( Int_t ieb = 0 ; ieb < fEventBuilders.size() ; ieb++ ) {
 
  116       for ( Int_t iev = 0 ; iev < fPossibleEvents[ieb].size() ; iev++ ) {
 
  117         tempREH = (FairRecoEventHeader*)fPossibleEvents[ieb][iev].second;
 
  118         if ( 
TMath::Abs(tempREH->GetEventTime()-minEventTime) < minEventTErr+tempREH->GetEventTimeError() )  {
 
  119           if ( tempREH->GetEventTimeError() < 1.e-6 ) {
 
  120             cout << 
"ERROR ALMOST 0!!!! " << tempREH->GetEventTimeError() << endl;
 
  124           sumTW += tempREH->GetEventTime()/tempREH->GetEventTimeError()/tempREH->GetEventTimeError();
 
  125           sumW  +=                      1./tempREH->GetEventTimeError()/tempREH->GetEventTimeError();
 
  126           ident |= tempREH->GetIdentifier();
 
  127           minEventTime = sumTW/sumW;
 
  130             cout << 
"    added event at " << tempREH->GetEventTime() << 
" +- " << tempREH->GetEventTimeError() << endl;
 
  132           fPossibleEvents[ieb][iev] = fPossibleEvents[ieb][fPossibleEvents[ieb].size()-1];
 
  133           fPossibleEvents[ieb].pop_back();
 
  137     if ( nofOfEvents == 0 ) 
continue;
 
  140       cout << 
"  CREATED EVENT AT " << meanEventTime/nofOfEvents << 
" OUT OF "  << nofOfEvents << 
" EVENTS" << endl;
 
  141       cout << 
"  WEIGHTED MEAN AT " << sumTW/sumW << 
" WITH ERROR OF " << 
TMath::Sqrt(1./sumW) << endl;
 
  157   FairRunAna* 
run = FairRunAna::Instance();
 
  158   if ( ! run ) Fatal(
"SetParContainers", 
"No analysis run");
 
  160   FairRuntimeDb* db = run->GetRuntimeDb();
 
  161   if ( ! db ) Fatal(
"SetParContainers", 
"No runtime database");
 
  168   FairRootManager* ioman = FairRootManager::Instance();
 
  169   if ( ! ioman ) Fatal(
"Init", 
"No FairRootManager");
 
  171   cout << 
"*** PndEventBuilderManager. " << fEventBuilders.size() << 
" event builders registered." << endl; 
 
  174   FairRootManager::Instance()->Register(
"RecoEventHeader.", 
"RecoEvent", 
fOutEvent, kTRUE);
 
  176   for ( Int_t ieb = 0 ; ieb < fEventBuilders.size() ; ieb++ ) {
 
  177     fEventBuilders[ieb]->SetIdentifier(TMath::Power(2,ieb));
 
  178     fEventBuilders[ieb]->Init();
 
static T Sqrt(const T &x)
FairRecoEventHeader * fOutEvent
virtual ~PndEventBuilderManager()
virtual InitStatus ReInit()
virtual void AnalyzeAndExtractEvents(Double_t maxEventTimeAllowed)
virtual InitStatus Init()
virtual void SetParContainers()