9 #include "AliAnalysisManager.h"
10 #include "AliESDEvent.h"
11 #include "AliAODEvent.h"
12 #include "AliMCEvent.h"
13 #include "AliESDInputHandler.h"
14 #include "AliAODHandler.h"
15 #include "AliMCEventHandler.h"
17 #include "AliESDTrdTrack.h"
19 #include "AliTRDtrackletMCM.h"
20 #include "AliTRDtrackletWord.h"
21 #include "AliVParticle.h"
22 #include "AliMCParticle.h"
24 #include "AliTRDonlineTrackletFilter.h"
26 ClassImp(AliTRDonlineTrackletFilter)
28 AliTRDonlineTrackletFilter::AliTRDonlineTrackletFilter(const char *name) :
29 AliAnalysisTask(name, ""),
35 fTrackletsRaw(new TClonesArray("AliTRDtrackletWord")),
36 fTrackletsSim(new TClonesArray("AliTRDtrackletMCM")),
38 fGeo(new AliTRDgeometry),
45 fTrackletTreeSim(0x0),
50 DefineInput(0, TChain::Class());
52 DefineOutput(0, TTree::Class());
53 DefineOutput(1, TTree::Class());
56 AliTRDonlineTrackletFilter::~AliTRDonlineTrackletFilter()
65 void AliTRDonlineTrackletFilter::ConnectInputData(const Option_t */* option */)
67 fInputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
69 fInputEvent = fInputHandler->GetEvent();
71 AliMCEventHandler *mcH = (AliMCEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler();
73 fMCEvent = mcH->MCEvent();
76 void AliTRDonlineTrackletFilter::CreateOutputObjects()
80 fTrackletTree = new TTree("tracklets", "on-line tracklets");
81 fTrackletTree->Branch("tracklets_sim", fTrackletsSim);
82 fTrackletTree->Branch("tracklets_raw", fTrackletsRaw);
85 Bool_t AliTRDonlineTrackletFilter::Notify()
88 TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());
90 AliInfo(Form("Now reading from %s", filename.Data()));
92 if (filename.Contains("AliAOD.root"))
93 filename.ReplaceAll("AliAOD.root", "");
94 else if (filename.Contains("AliESDs.root"))
95 filename.ReplaceAll("AliESDs.root", "");
96 else if (filename.Contains("galice.root"))
97 filename.ReplaceAll("galice.root", "");
98 else if (filename.BeginsWith("root:"))
99 filename.Append("?ZIP=");
103 fTrackletFile = TFile::Open(Form("%sTRD.Tracklets.root", fPath.Data()));
105 if (!fTrackletFile) {
106 AliError("No tracklet file");
110 fNEventsPerFile = fTrackletFile->GetNkeys() - fTrackletFile->GetNProcessIDs(); //???
119 void AliTRDonlineTrackletFilter::Exec(const Option_t * /* option */)
121 // execute this for each event
126 // ----- simulated tracklets -----
127 if (fTrackletTreeSim) {
128 AliTRDtrackletMCM *trkl = 0x0;
130 TBranch *br = fTrackletTreeSim->GetBranch("mcmtrklbranch");
131 br->SetAddress(&trkl);
133 for (Int_t iTracklet = 0; iTracklet < br->GetEntries(); iTracklet++) {
134 br->GetEntry(iTracklet);
135 new ((*fTrackletsSim)[fTrackletsSim->GetEntriesFast()]) AliTRDtrackletMCM(*trkl);
139 // ----- raw tracklets -----
140 if (fTrackletTreeRaw) {
142 TClonesArray *trklArray = 0x0;
143 fTrackletTreeRaw->SetBranchAddress("hc", &hc);
144 fTrackletTreeRaw->SetBranchAddress("trkl", &trklArray);
145 for (Int_t iHCidx = 0; iHCidx < fTrackletTreeRaw->GetEntries(); iHCidx++) {
146 fTrackletTreeRaw->GetEntry(iHCidx);
147 for (Int_t iTracklet = 0; iTracklet < trklArray->GetEntries(); iTracklet++) {
148 AliTRDtrackletWord *trklWord = (AliTRDtrackletWord*) ((*trklArray)[iTracklet]);
149 trklWord->SetDetector(hc/2);
150 new ((*fTrackletsRaw)[fTrackletsRaw->GetEntriesFast()]) AliTRDtrackletWord(*trklWord);
155 AliInfo(Form("%i tracklets", fTrackletsSim->GetEntriesFast()));
156 fTrackletTree->SetBranchAddress("tracklets_sim", &fTrackletsSim);
157 fTrackletTree->SetBranchAddress("tracklets_raw", &fTrackletsRaw);
158 fTrackletTree->Fill();
159 PostData(1, fTrackletTree);
162 void AliTRDonlineTrackletFilter::LocalInit()
167 void AliTRDonlineTrackletFilter::Terminate(const Option_t * /* option */)
172 Bool_t AliTRDonlineTrackletFilter::LoadEvent()
174 // load tracklets for the current event
176 // ----- cleaning -----
177 fTrackletsSim->Delete();
178 fTrackletsRaw->Delete();
180 // ----- initialization -----
182 AliError("No event found!");
185 fESD = dynamic_cast<AliESDEvent*> (fInputEvent);
188 Int_t inew = fEvent / fNEventsPerFile;
189 if ( inew != fFileNumber) {
192 delete fTrackletFile;
193 fTrackletFile = TFile::Open(Form("%sTRD.Tracklets%d.root", fPath.Data(), fFileNumber));
195 if (!fTrackletFile) {
196 AliError("No tracklet file");
201 if (!fTrackletFile) {
202 AliError("no tracklet file");
206 // tracklets from simulation
208 snprintf(treename, 30, "Event%d/tracklets", fEvent);
210 fTrackletTreeSim = (TTree*) fTrackletFile->Get(treename);
212 // tracklets from raw
213 char treenameRaw[30];
214 snprintf(treenameRaw, 30, "Event%d/tracklets-raw", fEvent);
215 fTrackletTreeRaw = (TTree*) fTrackletFile->Get(treenameRaw);