4 #include "AliAnalysisManager.h"
5 #include "AliInputEventHandler.h"
8 #include "AliESDEvent.h"
9 #include "AliESDInputHandler.h"
12 #include "AliTRDgtuParam.h"
13 #include "AliTRDgtuSim.h"
15 #include "AliAnalysisTaskTRDgtuSim.h"
16 #include "AliTRDonlineTrackMatching.h"
18 AliAnalysisTaskTRDgtuSim::AliAnalysisTaskTRDgtuSim(const char *name) :
19 AliAnalysisTaskSE(name),
23 fGtuSim(new AliTRDgtuSim()),
28 fLimitNoTracklets(kTRUE),
33 DefineOutput(1, TList::Class());
36 AliAnalysisTaskTRDgtuSim::~AliAnalysisTaskTRDgtuSim()
43 Bool_t AliAnalysisTaskTRDgtuSim::Notify()
45 // Implemented Notify()
47 return AliAnalysisTaskSE::Notify();
50 void AliAnalysisTaskTRDgtuSim::UserCreateOutputObjects()
52 // create output objects
55 fOutputList = new TList;
56 fOutputList->SetOwner(kTRUE);
58 fHistStat = new TH1F("stat", "stat", 4, .5, 4.5);
59 fHistStat->GetXaxis()->SetBinLabel(1, "identical");
60 fHistStat->GetXaxis()->SetBinLabel(2, "mismatch");
61 fHistStat->GetXaxis()->SetBinLabel(3, "sim only");
62 fHistStat->GetXaxis()->SetBinLabel(4, "raw only");
63 fOutputList->Add(fHistStat);
65 fHistDeltaA = new TH1F("deltaA", "delta A", 100, -100., 100.);
66 fOutputList->Add(fHistDeltaA);
68 PostData(1, fOutputList);
71 void AliAnalysisTaskTRDgtuSim::UserExec(Option_t * /* option */)
73 // perform actual analysis
75 AliESDEvent *esdEvent =
76 dynamic_cast<AliESDEvent*>(this->InputEvent());
81 AliTRDgtuParam::SetDeltaY(fDeltaY);
82 AliTRDgtuParam::SetDeltaAlpha(fDeltaAlpha);
83 AliTRDgtuParam::SetLimitNoTracklets(fLimitNoTracklets);
84 AliTRDgtuParam::SetMaxNoTracklets(fMaxNoTracklets);
86 fGtuSim->RunGTU(0x0, esdEvent, fTrackletLabel, fLabel);
88 AliTRDonlineTrackMatching trdMatch;
89 trdMatch.ProcessEvent(esdEvent, kTRUE, fLabel);
91 // compare to hardware tracks
94 PostData(1, fOutputList);
98 void AliAnalysisTaskTRDgtuSim::Terminate(const Option_t*)
103 void AliAnalysisTaskTRDgtuSim::Check(Int_t label, Int_t labelRef)
105 // compare tracks with label label with tracks with label labelRef
107 AliESDEvent *esdEvent =
108 dynamic_cast<AliESDEvent*>(this->InputEvent());
116 Int_t nTracks = esdEvent->GetNumberOfTrdTracks();
117 for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack) {
118 AliESDTrdTrack *trk = esdEvent->GetTrdTrack(iTrack);
119 if (trk->GetLabel() == label)
120 tracksCheck.Add(trk);
121 if (trk->GetLabel() == labelRef)
125 TIter iterTrack(&tracksCheck);
126 while (AliESDTrdTrack *trk = (AliESDTrdTrack*) iterTrack()) {
127 TIter iterTrackRef(&tracksRef);
128 Bool_t foundMatch = kFALSE;
129 while (AliESDTrdTrack *trkRef = (AliESDTrdTrack*) iterTrackRef()) {
130 // check for common tracklets
131 Bool_t commonTracklet = kFALSE;
132 Bool_t allEqual = kTRUE;
133 for (Int_t iLayer = 0; iLayer < 6; ++iLayer) {
134 if (trk->GetTracklet(iLayer)) {
135 if (trk->GetTracklet(iLayer) == trkRef->GetTracklet(iLayer))
136 commonTracklet = kTRUE;
140 else if (trkRef->GetTracklet(iLayer))
143 if (commonTracklet) {
144 // tracks with a common tracklet should be identical
146 // identical track composition
148 Int_t deltaA = trk->GetA() - trkRef->GetA();
149 fHistDeltaA->Fill(deltaA);
152 // track with different tracklets
155 tracksRef.Remove(trkRef);
161 // unmatched sim track
165 TIter iterTrackRef(&tracksRef);
166 while (iterTrackRef()) {
167 // unmatched raw track