]>
Commit | Line | Data |
---|---|---|
1dfe075f | 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 | // An analysis task to check the TOF data in simulated data | |
17 | // | |
18 | //*-- Silvia Arcelli | |
19 | ////////////////////////////////////////////////////////////////////////////// | |
20 | ||
21 | #include <TChain.h> | |
22 | #include <TCanvas.h> | |
23 | #include <TFile.h> | |
24 | ||
25 | #include "AliTOFQATask.h" | |
26 | #include "AliESD.h" | |
27 | #inclued "AliESDtrack.h" | |
28 | #include "AliLog.h" | |
29 | ||
30 | //______________________________________________________________________________ | |
31 | AliTOFQATask::AliTOFQATask(const char *name) : | |
32 | AliAnalysisTask(name,""), | |
33 | fChain(0), | |
34 | fESD(0), | |
35 | fhTOF(0), | |
36 | fhTOFEnergy(0), | |
37 | fhTOFDigits(0), | |
38 | fhTOFRecParticles(0), | |
39 | fhTOFPhotons(0), | |
40 | fhTOFInvariantMass(0), | |
41 | fhTOFDigitsEvent(0) | |
42 | { | |
43 | // Constructor. | |
44 | // Input slot #0 works with an Ntuple | |
45 | DefineInput(0, TChain::Class()); | |
46 | // Output slot #0 writes into a TH1 container | |
47 | DefineOutput(0, TObjArray::Class()) ; | |
48 | } | |
49 | ||
50 | //______________________________________________________________________________ | |
51 | void AliTOFQATask::Init(const Option_t*) | |
52 | { | |
53 | // Initialisation of branch container and histograms | |
54 | ||
55 | AliInfo(Form("*** Initialization of %s", GetName())) ; | |
56 | ||
57 | // Get input data | |
58 | fChain = dynamic_cast<TChain *>(GetInputData(0)) ; | |
59 | if (!fChain) { | |
60 | AliError(Form("Input 0 for %s not found\n", GetName())); | |
61 | return ; | |
62 | } | |
63 | ||
64 | if (!fESD) { | |
65 | // One should first check if the branch address was taken by some other task | |
66 | char ** address = (char **)GetBranchAddress(0, "ESD") ; | |
67 | if (address) | |
68 | fESD = (AliESD *)(*address) ; | |
69 | if (!fESD) | |
70 | fChain->SetBranchAddress("ESD", &fESD) ; | |
71 | } | |
72 | // The output objects will be written to | |
73 | TDirectory * cdir = gDirectory ; | |
74 | // Open a file for output #0 | |
75 | char outputName[1024] ; | |
76 | sprintf(outputName, "%s.root", GetName() ) ; | |
77 | OpenFile(0, outputName , "RECREATE") ; | |
78 | if (cdir) | |
79 | cdir->cd() ; | |
80 | ||
81 | // create histograms | |
82 | fhTOFSector = new TH1F("hSector", " TOF TrackRefs, sector # ", 18, 0., 18.) ; | |
83 | fhTOFSectorM = new TH1F("hSectorM", " TOF Matched, sector # ", 18, 0., 18.) ; | |
84 | fhTOFSectorMF = new TH1F("hSectorMF", " TOF Matched G, sector # ", 18, 0., 18.) ; | |
85 | fhTOFSectorMG = new TH1F("hSectorMG", " TOF Matched F , sector # ", 18, 0., 18.) ; | |
86 | fhTOFprimP = new TH1F("hprimP", " TPC mom tracks", 20, 0., 4.) ; | |
87 | fhTOFprimPpi = new TH1F("hprimPpi", " TPC mom tracks", 20, 0., 4.) ; | |
88 | fhTOFprimPka = new TH1F("hprimPka", " TPC mom tracks", 20, 0., 4.) ; | |
89 | fhTOFprimPpr = new TH1F("hprimPpr", " TPC mom tracks", 20, 0., 4.) ; | |
90 | ||
91 | ||
92 | // Reaching TOF,prim | |
93 | fhTOFprimPTOF = new TH1F("hprimPTOF", " TPC mom tracks", 20, 0., 4.) ; | |
94 | fhTOFprimPTOFpi = new TH1F("hprimPTOFpi", " TPC mom tracks", 20, 0., 4.) ; | |
95 | fhTOFprimPTOFka = new TH1F("hprimPTOFka", " TPC mom tracks", 20, 0., 4.) ; | |
96 | fhTOFprimPTOFpr = new TH1F("hprimPTOFpr", " TPC mom tracks", 20, 0., 4.) ; | |
97 | ||
98 | ||
99 | // Well matched,prim | |
100 | fhTOFprimPTOF3 = new TH1F("hprimPTOF3", " TPC mom tracks", 20, 0., 4.) ; | |
101 | fhTOFprimPTOFpi3 = new TH1F("hprimPTOFpi3", " TPC mom tracks", 20, 0., 4.) ; | |
102 | fhTOFprimPTOFka3 = new TH1F("hprimPTOFka3", " TPC mom tracks", 20, 0., 4.) ; | |
103 | fhTOFprimPTOFpr3 = new TH1F("hprimPTOFpr3", " TPC mom tracks", 20, 0., 4.) ; | |
104 | ||
105 | // bad matched,prim | |
106 | fhTOFprimPTOF4 = new TH1F("hprimPTOF4", " TPC mom tracks", 20, 0., 4.) ; | |
107 | fhTOFprimPTOFpi4 = new TH1F("hprimPTOFpi4", " TPC mom tracks", 20, 0., 4.) ; | |
108 | fhTOFprimPTOFka4 = new TH1F("hprimPTOFka4", " TPC mom tracks", 20, 0., 4.) ; | |
109 | fhTOFprimPTOFpr4 = new TH1F("hprimPTOFpr4", " TPC mom tracks", 20, 0., 4.) ; | |
110 | ||
111 | // matched,prim | |
112 | fhTOFprimPTOF34 = new TH1F("hprimPTOF34", " TPC mom tracks", 20, 0., 4.) ; | |
113 | fhTOFprimPTOFpi34 = new TH1F("hprimPTOFpi34", " TPC mom tracks", 20, 0., 4.) ; | |
114 | fhTOFprimPTOFka34 = new TH1F("hprimPTOFka34", " TPC mom tracks", 20, 0., 4.) ; | |
115 | fhTOFprimPTOFpr34 = new TH1F("hprimPTOFpr34", " TPC mom tracks", 20,0 ., 4.) ; | |
116 | ||
117 | // create output container | |
118 | ||
119 | fOutputContainer = new TObjArray(24) ; | |
120 | fOutputContainer->SetName(GetName()) ; | |
121 | ||
122 | fOutputContainer->AddAt(fhTOFSector, 0) ; | |
123 | fOutputContainer->AddAt(fhTOFSectorM, 1) ; | |
124 | fOutputContainer->AddAt(fhTOFSectorMF, 2) ; | |
125 | fOutputContainer->AddAt(fhTOFSectorMG, 3) ; | |
126 | fOutputContainer->AddAt(fhTOFprimP, 4) ; | |
127 | fOutputContainer->AddAt(fhTOFprimPpi, 5) ; | |
128 | fOutputContainer->AddAt(fhTOFprimPka, 6) ; | |
129 | fOutputContainer->AddAt(fhTOFprimPpr, 7) ; | |
130 | fOutputContainer->AddAt(fhTOFprimPTOF, 8) ; | |
131 | fOutputContainer->AddAt(fhTOFprimPTOFpi, 9) ; | |
132 | fOutputContainer->AddAt(fhTOFprimPTOFka, 10) ; | |
133 | fOutputContainer->AddAt(fhTOFprimPTOFpr, 11) ; | |
134 | fOutputContainer->AddAt(fhTOFprimPTOF3, 12) ; | |
135 | fOutputContainer->AddAt(fhTOFprimPTOFpi3, 13) ; | |
136 | fOutputContainer->AddAt(fhTOFprimPTOFka3, 14) ; | |
137 | fOutputContainer->AddAt(fhTOFprimPTOFpr3, 15) ; | |
138 | fOutputContainer->AddAt(fhTOFprimPTOF4, 16) ; | |
139 | fOutputContainer->AddAt(fhTOFprimPTOFpi4, 17) ; | |
140 | fOutputContainer->AddAt(fhTOFprimPTOFka4, 18) ; | |
141 | fOutputContainer->AddAt(fhTOFprimPTOFpr4, 19) ; | |
142 | fOutputContainer->AddAt(fhTOFprimPTOF34, 20) ; | |
143 | fOutputContainer->AddAt(fhTOFprimPTOFpi34, 21) ; | |
144 | fOutputContainer->AddAt(fhTOFprimPTOFka34, 22) ; | |
145 | fOutputContainer->AddAt(fhTOFprimPTOFpr34, 23) ; | |
146 | ||
147 | } | |
148 | ||
149 | //______________________________________________________________________________ | |
150 | void AliTOFQATask::Exec(Option_t *) | |
151 | { | |
152 | // Processing of one event | |
153 | ||
154 | Long64_t entry = fChain->GetReadEntry() ; | |
155 | ||
156 | if (!fESD) { | |
157 | AliError("fESD is not connected to the input!") ; | |
158 | return ; | |
159 | } | |
160 | ||
161 | if ( !((entry-1)%100) ) | |
162 | AliInfo(Form("%s ----> Processing event # %lld", (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ; | |
163 | ||
164 | // ************************ TOF ************************************* | |
165 | const Int_t knCalinSec = 8736 ; | |
166 | ||
167 | Int_t ntrk = fESD->GetNumberOfTracks() ; | |
168 | while ( ntrk-- ) { | |
169 | AliESDtrack * t = fESD->GetTrack(ntrk) ; | |
170 | if ( (t->GetStatus() & AliESDtrack::kTIME)==0 ) | |
171 | continue; | |
172 | Int_t label = TMath::Abs(t->GetLabel()) ; | |
173 | Double_t p = t->GetP() ; | |
174 | UInt_t assignedTOFcluster = t->GetTOFcluster() ; //index of the assigned TOF cluster, >0 ? | |
175 | Int_t detid = t->GetTOFCalChannel() ; //index of the assigned TOF cluster, >0 ? | |
176 | ||
177 | Int_t sector = detid / knCalinSec ; | |
178 | ||
179 | if(assignedTOFcluster){ //matched | |
180 | hSectorM->Fill(sector); | |
181 | } | |
182 | } | |
183 | ||
184 | PostData(0, fOutputContainer); | |
185 | ||
186 | ||
187 | } | |
188 | ||
189 | //______________________________________________________________________________ | |
190 | void AliTOFQATask::Terminate(Option_t *) | |
191 | { | |
192 | // Processing when the event loop is ended | |
193 | ||
194 | // some plots | |
195 | ||
196 | char line[1024] ; | |
197 | sprintf(line, ".!tar -zcvf %s.tar.gz *.eps", GetName()) ; | |
198 | gROOT->ProcessLine(line); | |
199 | sprintf(line, ".!rm -fR *.eps"); | |
200 | gROOT->ProcessLine(line); | |
201 | ||
202 | AliInfo(Form("!!! All the eps files are in %s.tar.gz !!! \n", GetName())) ; | |
203 | } |