14 #include "FairMultiLinkedData.h"
15 #include "FairRootManager.h"
16 #include "FairTimeStamp.h"
17 #include "FairRunAna.h"
23 #include "TClonesArray.h"
39 FairRootManager* ioman = FairRootManager::Instance();
41 std::cout <<
"-E- PndTimeStructureAnaTaskT::Init: "
42 <<
"RootManager not instantiated!" << std::endl;
46 if(
fData.size() == 0){
60 for (
size_t i = 0;
i <
fData.size();
i++){
61 fData[
i].fBranch = (TClonesArray*)ioman->GetObject(
fData[
i].fBranchName);
74 std::cout <<
" ------------- Event " << FairRootManager::Instance()->GetEntryNr() <<
" ----------------" << std::endl;
75 bool primaryParticle =
false;
77 for (
size_t i = 0;
i <
fData.size();
i++){
78 for (
int j = 0; j <
fData[
i].fBranch->GetEntries(); j++){
79 FairTimeStamp* data = (FairTimeStamp*)
fData[
i].fBranch->At(j);
80 FairMultiLinkedData links = data->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MCTrack"));
82 Int_t currentEventNr = -1;
83 if (links.GetNLinks() > 0){
84 currentEventNr = links.GetLink(0).GetEntry();
85 mcTrack = (
PndMCTrack*)FairRootManager::Instance()->GetCloneOfLinkData(links.GetLink(0));
88 primaryParticle =
true;
92 if (currentEventNr < 0)
continue;
96 if (
fData[
i].fEventStartStopMap.count(currentEventNr) == 0){
97 fData[
i].fEventStartStopMap[currentEventNr] = std::pair<Double_t, Double_t>(data->GetTimeStamp(), data->GetTimeStamp());
100 fData[
i].fEventStartStopMap[currentEventNr].second = data->GetTimeStamp();
102 if (currentEventNr <
fData[
i].fOldEventNr){
103 if (
fData[
i].fEventMixture == kFALSE){
105 fData[
i].fEventMixture = kTRUE;
106 std::cout <<
"Event Mixture!" << std::endl;
109 else if (currentEventNr ==
fData[
i].fOldEventNr){
110 fData[
i].fEventHisto->Fill(data->GetTimeStamp() -
fData[
i].fOldTimeStamp);
111 fData[
i].fOldTimeStamp = data->GetTimeStamp();
115 fData[
i].fTimeHisto->Fill(data->GetTimeStamp() -
fData[
i].fOldTimeStamp);
116 fData[
i].fOldTimeStamp = data->GetTimeStamp();
117 fData[
i].fOldEventNr = currentEventNr;
118 fData[
i].fEventMixture = kFALSE;
122 if (primaryParticle){
123 if (
fDataPrim[
i].fEventStartStopMap.count(currentEventNr) == 0){
124 fDataPrim[
i].fEventStartStopMap[currentEventNr] = std::pair<Double_t, Double_t>(data->GetTimeStamp(), data->GetTimeStamp());
127 fDataPrim[
i].fEventStartStopMap[currentEventNr].second = data->GetTimeStamp();
129 if (currentEventNr <
fDataPrim[
i].fOldEventNr){
133 std::cout <<
"Event Mixture!" << std::endl;
136 else if (currentEventNr ==
fDataPrim[
i].fOldEventNr){
138 fDataPrim[
i].fOldTimeStamp = data->GetTimeStamp();
143 fDataPrim[
i].fOldTimeStamp = data->GetTimeStamp();
162 for (
size_t i = 0;
i <
fData.size();
i++){
163 fData[
i].fTimeHisto->Write();
164 fData[
i].fEventHisto->Write();
165 for (
std::map<Int_t, std::pair<Double_t, Double_t> >::iterator iter =
fData[
i].fEventStartStopMap.begin(); iter !=
fData[
i].fEventStartStopMap.end(); iter++) {
166 fData[
i].fEventDiffHisto->Fill(iter->second.second - iter->second.first);
168 fData[
i].fEventDiffHisto->Write();
170 fData[
i].fEventGap->Write();
171 fData[
i].fOverlap->Write();
173 fData[
i].fEventGapPerc->Write();
174 fData[
i].fOverlapPerc->Write();
178 for (
std::map<Int_t, std::pair<Double_t, Double_t> >::iterator iter =
fDataPrim[
i].fEventStartStopMap.begin(); iter !=
fDataPrim[
i].fEventStartStopMap.end(); iter++) {
179 fDataPrim[
i].fEventDiffHisto->Fill(iter->second.second - iter->second.first);
std::vector< DataObject > fData
std::vector< DataObject > fDataPrim
virtual void FinishEvent()
TH1D * fHistoMixedEventsPrim
virtual void Exec(Option_t *opt)
virtual void FinishTask()
ClassImp(PndTimeStructureAnaTask)
Int_t GetMotherID() const
virtual InitStatus ReInit()
virtual InitStatus Init()