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()