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("TRDtrackletfilter", "on-line tracklets");
93 fTrackletTree->Branch("tracklets_sim", fTrackletsSim);
94 fTrackletTree->Branch("tracklets_raw", fTrackletsRaw);
96 PostData(1, fTrackletTree);
99 Bool_t AliTRDonlineTrackletFilter::Notify()
101 // we use notify to figure out which TRD.Tracklets.root file we have
102 // to use for accessing the tracklets
104 TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());
106 AliDebug(1, Form("Now reading from %s", filename.Data()));
108 if (filename.Contains("AliAOD.root"))
109 filename.ReplaceAll("AliAOD.root", "");
110 else if (filename.Contains("NewAliESDs.root"))
111 filename.ReplaceAll("NewAliESDs.root", "");
112 else if (filename.Contains("AliESDs.root"))
113 filename.ReplaceAll("AliESDs.root", "");
114 else if (filename.Contains("galice.root"))
115 filename.ReplaceAll("galice.root", "");
116 else if (filename.BeginsWith("root:"))
117 filename.Append("?ZIP=");
121 fTrackletFile = TFile::Open(Form("%sTRD.Tracklets.root", fPath.Data()));
123 if (!fTrackletFile) {
124 AliError(Form("No tracklet file in %s", fPath.Data()));
128 fNEventsPerFile = fTrackletFile->GetNkeys() - fTrackletFile->GetNProcessIDs(); //???
137 void AliTRDonlineTrackletFilter::Exec(const Option_t * /* option */)
139 // execute this for each event
144 // ----- simulated tracklets -----
145 if (fTrackletTreeSim) {
146 AliTRDtrackletMCM *trkl = 0x0;
148 TBranch *br = fTrackletTreeSim->GetBranch("mcmtrklbranch");
149 br->SetAddress(&trkl);
151 for (Int_t iTracklet = 0; iTracklet < br->GetEntries(); iTracklet++) {
152 br->GetEntry(iTracklet);
153 new ((*fTrackletsSim)[fTrackletsSim->GetEntriesFast()]) AliTRDtrackletMCM(*trkl);
157 // ----- raw tracklets -----
158 if (fTrackletTreeRaw) {
160 TClonesArray *trklArray = 0x0;
161 fTrackletTreeRaw->SetBranchAddress("hc", &hc);
162 fTrackletTreeRaw->SetBranchAddress("trkl", &trklArray);
163 for (Int_t iHCidx = 0; iHCidx < fTrackletTreeRaw->GetEntries(); iHCidx++) {
164 fTrackletTreeRaw->GetEntry(iHCidx);
166 for (Int_t iTracklet = 0; iTracklet < trklArray->GetEntries(); iTracklet++) {
167 AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) ((*trklArray)[iTracklet]);
168 trklWord->SetDetector(hc/2);
169 new ((*fTrackletsRaw)[fTrackletsRaw->GetEntriesFast()]) AliTRDtrackletWord(*trklWord);
175 AliDebug(1, Form("%i tracklets", fTrackletsSim->GetEntriesFast()));
176 fTrackletTree->SetBranchAddress("tracklets_sim", &fTrackletsSim);
177 fTrackletTree->SetBranchAddress("tracklets_raw", &fTrackletsRaw);
178 fTrackletTree->Fill();
179 PostData(1, fTrackletTree);
182 void AliTRDonlineTrackletFilter::LocalInit()
187 void AliTRDonlineTrackletFilter::Terminate(const Option_t * /* option */)
192 Bool_t AliTRDonlineTrackletFilter::LoadEvent()
194 // load tracklets for the current event
196 // ----- cleaning -----
197 fTrackletsSim->Delete();
198 fTrackletsRaw->Delete();
200 // ----- initialization -----
202 AliError("No event found!");
205 fESD = dynamic_cast<AliESDEvent*> (fInputEvent);
208 Int_t inew = fNEventsPerFile > 0 ? fEvent / fNEventsPerFile : 0;
209 if ( inew != fFileNumber) {
212 delete fTrackletFile;
213 fTrackletFile = TFile::Open(Form("%sTRD.Tracklets%d.root", fPath.Data(), fFileNumber));
215 if (!fTrackletFile) {
216 AliError("No tracklet file");
221 if (!fTrackletFile) {
222 AliError("no tracklet file");
226 // tracklets from simulation
228 snprintf(treename, 30, "Event%d/tracklets", fEvent);
230 fTrackletTreeSim = (TTree*) fTrackletFile->Get(treename);
232 // tracklets from raw
233 char treenameRaw[30];
234 snprintf(treenameRaw, 30, "Event%d/tracklets-raw", fEvent);
235 fTrackletTreeRaw = (TTree*) fTrackletFile->Get(treenameRaw);