1 // AliTRDonlineTrackletFilter implements an analysis task which reads
2 // the tracklets from the TRD.Tracklets.root file and makes them
3 // available to other analysis tasks. This allows to access the full
4 // tracklet information without repeating the techncicalities in each
5 // analysis task. The tracklets are made available in an exchange
6 // container on the output slot 1.
16 #include "AliAnalysisManager.h"
17 #include "AliESDEvent.h"
18 #include "AliAODEvent.h"
19 #include "AliMCEvent.h"
20 #include "AliESDInputHandler.h"
21 #include "AliAODHandler.h"
22 #include "AliMCEventHandler.h"
24 #include "AliESDTrdTrack.h"
26 #include "AliTRDtrackletMCM.h"
27 #include "AliTRDtrackletWord.h"
28 #include "AliVParticle.h"
29 #include "AliMCParticle.h"
31 #include "AliTRDonlineTrackletFilter.h"
33 ClassImp(AliTRDonlineTrackletFilter)
35 AliTRDonlineTrackletFilter::AliTRDonlineTrackletFilter(const char *name) :
36 AliAnalysisTask(name, ""),
42 fTrackletsRaw(new TClonesArray("AliTRDtrackletWord")),
43 fTrackletsSim(new TClonesArray("AliTRDtrackletMCM")),
45 fGeo(new AliTRDgeometry),
52 fTrackletTreeSim(0x0),
57 DefineInput(0, TChain::Class());
59 DefineOutput(0, TTree::Class());
60 DefineOutput(1, TTree::Class());
63 AliTRDonlineTrackletFilter::~AliTRDonlineTrackletFilter()
72 void AliTRDonlineTrackletFilter::ConnectInputData(const Option_t */* option */)
74 // connect all the input handlers to access the data
76 fInputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
78 fInputEvent = fInputHandler->GetEvent();
80 AliMCEventHandler *mcH = (AliMCEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler();
82 fMCEvent = mcH->MCEvent();
85 void AliTRDonlineTrackletFilter::CreateOutputObjects()
87 // create the output objects used to make the tracklets available to
92 fTrackletTree = new TTree("tracklets", "on-line tracklets");
93 fTrackletTree->Branch("tracklets_sim", fTrackletsSim);
94 fTrackletTree->Branch("tracklets_raw", fTrackletsRaw);
97 Bool_t AliTRDonlineTrackletFilter::Notify()
99 // we use notify to figure out which TRD.Tracklets.root file we have
100 // to use for accessing the tracklets
102 TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());
104 AliInfo(Form("Now reading from %s", filename.Data()));
106 if (filename.Contains("AliAOD.root"))
107 filename.ReplaceAll("AliAOD.root", "");
108 else if (filename.Contains("AliESDs.root"))
109 filename.ReplaceAll("AliESDs.root", "");
110 else if (filename.Contains("galice.root"))
111 filename.ReplaceAll("galice.root", "");
112 else if (filename.BeginsWith("root:"))
113 filename.Append("?ZIP=");
117 fTrackletFile = TFile::Open(Form("%sTRD.Tracklets.root", fPath.Data()));
119 if (!fTrackletFile) {
120 AliError("No tracklet file");
124 fNEventsPerFile = fTrackletFile->GetNkeys() - fTrackletFile->GetNProcessIDs(); //???
133 void AliTRDonlineTrackletFilter::Exec(const Option_t * /* option */)
135 // execute this for each event
140 // ----- simulated tracklets -----
141 if (fTrackletTreeSim) {
142 AliTRDtrackletMCM *trkl = 0x0;
144 TBranch *br = fTrackletTreeSim->GetBranch("mcmtrklbranch");
145 br->SetAddress(&trkl);
147 for (Int_t iTracklet = 0; iTracklet < br->GetEntries(); iTracklet++) {
148 br->GetEntry(iTracklet);
149 new ((*fTrackletsSim)[fTrackletsSim->GetEntriesFast()]) AliTRDtrackletMCM(*trkl);
153 // ----- raw tracklets -----
154 if (fTrackletTreeRaw) {
156 TClonesArray *trklArray = 0x0;
157 fTrackletTreeRaw->SetBranchAddress("hc", &hc);
158 fTrackletTreeRaw->SetBranchAddress("trkl", &trklArray);
159 for (Int_t iHCidx = 0; iHCidx < fTrackletTreeRaw->GetEntries(); iHCidx++) {
160 fTrackletTreeRaw->GetEntry(iHCidx);
161 for (Int_t iTracklet = 0; iTracklet < trklArray->GetEntries(); iTracklet++) {
162 AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) ((*trklArray)[iTracklet]);
163 trklWord->SetDetector(hc/2);
164 new ((*fTrackletsRaw)[fTrackletsRaw->GetEntriesFast()]) AliTRDtrackletWord(*trklWord);
169 AliInfo(Form("%i tracklets", fTrackletsSim->GetEntriesFast()));
170 fTrackletTree->SetBranchAddress("tracklets_sim", &fTrackletsSim);
171 fTrackletTree->SetBranchAddress("tracklets_raw", &fTrackletsRaw);
172 fTrackletTree->Fill();
173 PostData(1, fTrackletTree);
176 void AliTRDonlineTrackletFilter::LocalInit()
181 void AliTRDonlineTrackletFilter::Terminate(const Option_t * /* option */)
186 Bool_t AliTRDonlineTrackletFilter::LoadEvent()
188 // load tracklets for the current event
190 // ----- cleaning -----
191 fTrackletsSim->Delete();
192 fTrackletsRaw->Delete();
194 // ----- initialization -----
196 AliError("No event found!");
199 fESD = dynamic_cast<AliESDEvent*> (fInputEvent);
202 Int_t inew = fEvent / fNEventsPerFile;
203 if ( inew != fFileNumber) {
206 delete fTrackletFile;
207 fTrackletFile = TFile::Open(Form("%sTRD.Tracklets%d.root", fPath.Data(), fFileNumber));
209 if (!fTrackletFile) {
210 AliError("No tracklet file");
215 if (!fTrackletFile) {
216 AliError("no tracklet file");
220 // tracklets from simulation
222 snprintf(treename, 30, "Event%d/tracklets", fEvent);
224 fTrackletTreeSim = (TTree*) fTrackletFile->Get(treename);
226 // tracklets from raw
227 char treenameRaw[30];
228 snprintf(treenameRaw, 30, "Event%d/tracklets-raw", fEvent);
229 fTrackletTreeRaw = (TTree*) fTrackletFile->Get(treenameRaw);