write only the complement in the case of hybrid tracks
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskTagCreator.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 #include <Riostream.h>
19
20 #include <TChain.h>
21 #include <TTree.h>
22 #include <TString.h>
23 #include <TFile.h>
24 #include <TSystem.h>
25
26 #include "AliAnalysisTaskTagCreator.h"
27 #include "AliAnalysisManager.h"
28 #include "AliESDEvent.h"
29 #include "AliAODEvent.h"
30 #include "AliESDInputHandler.h"
31 #include "AliAODHandler.h"
32 #include "AliRunTag.h"
33 #include "AliEventTag.h"
34 #include "AliAODTagCreator.h"
35 #include "AliLog.h"
36
37
38 ClassImp(AliAnalysisTaskTagCreator)
39
40 ////////////////////////////////////////////////////////////////////////
41
42 AliAnalysisTaskTagCreator::AliAnalysisTaskTagCreator():
43     AliAnalysisTaskSE(),
44     fCreateTags(kFALSE),
45     fFirstFile(kTRUE),
46     fRunTag(0), 
47     fTreeT(0),
48     fTagCreator(0),
49     fAODFileName(""),
50     fGUID(0)
51 {
52   // Default constructor
53 }
54
55 AliAnalysisTaskTagCreator::AliAnalysisTaskTagCreator(const char* name):
56     AliAnalysisTaskSE(name),
57     fCreateTags(kFALSE),
58     fFirstFile(kTRUE),
59     fRunTag(0), 
60     fTreeT(0),
61     fTagCreator(0),
62     fAODFileName(""),
63     fGUID(0)
64 {
65   // Constructor
66     DefineOutput(1, TTree::Class());    
67 }
68
69 void AliAnalysisTaskTagCreator::UserCreateOutputObjects()
70 {
71 // Create the output container
72     OpenFile(1);
73     fTreeT  = new TTree("T", "AOD Tags");
74     fRunTag = new AliRunTag();
75     TBranch * btag = fTreeT->Branch("AliTAG", "AliRunTag", &fRunTag);
76     btag->SetCompressionLevel(9);
77     fTagCreator = new AliAODTagCreator();
78     PostData(1, fTreeT);
79 }
80
81 void AliAnalysisTaskTagCreator::Init()
82 {
83
84 }
85
86 void AliAnalysisTaskTagCreator::ConnectInputData(Option_t * /*option*/)
87 {
88     // Initialization
89     const char* turl = gSystem->Getenv("ALIEN_JDL_OUTPUTDIR");
90     TString sturl = turl;
91     
92     if (sturl.Length() != 0) {
93       fAODFileName = "alien://";
94       fAODFileName += turl;
95       fAODFileName += "/AliAOD.root";
96     }  
97 }
98
99 void AliAnalysisTaskTagCreator::UserExec(Option_t */*option*/)
100 {
101
102     // Create Tags for the current event
103     AliEventTag* evtTag = new AliEventTag();
104     fTagCreator->FillEventTag(AODEvent(), evtTag);
105     // Reference to the input file
106     TString fturl, fturltemp, guid;
107     
108     TString opt(fInputHandler->GetAnalysisType());
109     opt.ToLower();
110     
111     TFile *file = OutputTree()->GetCurrentFile();
112     const TUrl *url = file->GetEndpointUrl();
113     guid = file->GetUUID().AsString();
114     if (fAODFileName.Length() != 0) {
115         fturl = fAODFileName;
116         guid  = fGUID;
117     } else {
118         fturl = url->GetFile();
119     }
120
121     if (fRunTag->GetFileId(guid) == -1) {
122       AliFileTag *eftag = new AliFileTag();
123
124       eftag->SetGUID(guid);
125       if(fAODFileName.Length() != 0) {
126         eftag->SetMD5("");
127         eftag->SetTURL(fturl);
128         eftag->SetSize(0);
129       }
130       else eftag->SetPath(fturl);
131
132       fRunTag->AddFileTag(eftag);
133     }
134     //
135     // Add the event tag
136     fRunTag->AddEventTag(*evtTag);
137     PostData(1, fTreeT);
138 }
139
140
141 void AliAnalysisTaskTagCreator::FinishTaskOutput()
142 {
143 // Terminate analysis
144 //
145     if (fInputHandler->GetRunTag()) fRunTag->CopyStandardContent(fInputHandler->GetRunTag());       
146     fTreeT->Fill();
147 }
148
149 Bool_t AliAnalysisTaskTagCreator::Notify()
150 {
151     // Notify file change
152     fInputHandler = (AliInputEventHandler*) 
153       ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
154     return kTRUE;
155 }
156
157
158 void AliAnalysisTaskTagCreator::GetGUID(TString &guid) {
159     // Get the guid of the AliAOD.root file
160     ofstream myfile ("guid.txt");
161     if (myfile.is_open()) {
162         TFile *f = TFile::Open("AliAOD.root","read");
163         if(f->IsOpen()) {
164             guid = f->GetUUID().AsString();
165             myfile << "AliAOD.root \t"<<f->GetUUID().AsString();
166             cout<<guid.Data()<<endl;
167             myfile.close();
168         }
169         else cout<<"Input file not found"<<endl;
170         f->Close();
171     }
172     else cout<<"Output file can't be created..."<<endl;
173 }
174
175
176
177 void AliAnalysisTaskTagCreator::Terminate(Option_t */*option*/)
178 {
179 // Terminate analysis
180 //
181     if (fDebug > 1) printf("AnalysisTagCreator: Terminate() \n");
182 }
183
184