1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 #ifndef AliHMPIDAnalysisTASK_CXX
17 #define AliHMPIDAnalysisTASK_CXX
19 #include "AliHMPIDAnalysisTask.h"
22 #include "TParticle.h"
23 #include "Riostream.h"
27 #include "AliMCEvent.h"
28 #include "AliAnalysisManager.h"
29 #include "AliESDEvent.h"
31 #include "AliESDtrack.h"
34 ClassImp(AliHMPIDAnalysisTask)
36 //__________________________________________________________________________
37 AliHMPIDAnalysisTask::AliHMPIDAnalysisTask() :
39 fHistEventsProcessed(0x0),
48 //___________________________________________________________________________
49 AliHMPIDAnalysisTask::AliHMPIDAnalysisTask(const Char_t* name) :
50 AliAnalysisTaskSE(name),
52 fHistEventsProcessed(0x0),
58 // Constructor. Initialization of Inputs and Outputs
60 Info("AliHMPIDAnalysisTask","Calling Constructor");
63 DefineInput(0) and DefineOutput(0)
64 are taken care of by AliAnalysisTaskSE constructor
66 DefineOutput(1,TH1I::Class());
67 DefineOutput(2,TList::Class());
70 //___________________________________________________________________________
71 AliHMPIDAnalysisTask& AliHMPIDAnalysisTask::operator=(const AliHMPIDAnalysisTask& c)
74 // Assignment operator
77 AliAnalysisTaskSE::operator=(c) ;
78 fHistList = c.fHistList ;
79 fHistEventsProcessed = c.fHistEventsProcessed;
81 fTrigNevts = c.fTrigNevts;
82 fTrigger = c.fTrigger;
87 //___________________________________________________________________________
88 AliHMPIDAnalysisTask::AliHMPIDAnalysisTask(const AliHMPIDAnalysisTask& c) :
90 fHistList(c.fHistList),
91 fHistEventsProcessed(c.fHistEventsProcessed),
93 fTrigNevts(c.fTrigNevts),
101 //___________________________________________________________________________
102 AliHMPIDAnalysisTask::~AliHMPIDAnalysisTask() {
106 Info("~AliHMPIDAnalysisask","Calling Destructor");
107 if (fHistEventsProcessed) delete fHistEventsProcessed ;
108 if (fHistList) {fHistList->Clear(); delete fHistList;}
111 //_________________________________________________
112 void AliHMPIDAnalysisTask::UserExec(Option_t *)
115 // Main loop function, executed on Event basis
117 Info("UserExec","") ;
119 AliESDEvent* fESD = dynamic_cast<AliESDEvent*>(fInputEvent);
121 Error("UserExec","NO ESD FOUND!");
126 if(fESD->GetTriggerMask()&fTrigger == fTrigger) fTrigNevts++;
129 for (Int_t iTrack = 0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {
131 AliESDtrack* track = fESD->GetTrack(iTrack);
133 Double_t rin[3], rout[3];
134 track->GetInnerXYZ(rin);
135 track->GetOuterXYZ(rout);
137 ((TH2F *)fHistList->At(22))->Fill(rin[0],rin[1]);
138 ((TH2F *)fHistList->At(23))->Fill(rout[0],rout[1]);
141 TH1F *h = ((TH1F*)(fHistList->At(0)));
142 if(track->GetHMPIDsignal() == -20) h->Fill(0);
143 else if(track->GetHMPIDsignal() == -9) h->Fill(1);
144 else if(track->GetHMPIDsignal() == -5) h->Fill(2);
145 else if(track->GetHMPIDsignal() == -11) h->Fill(3);
146 else if(track->GetHMPIDsignal() == -22) h->Fill(4);
149 if(track->GetHMPIDcluIdx() == 99099999) continue;
150 if(track->GetHMPIDcluIdx() < 0) continue;
152 Int_t ch = track->GetHMPIDcluIdx()/1000000;
154 Float_t x, y; Int_t q, nph;
155 track->GetHMPIDmip(x,y,q,nph);
157 if(x==0 && y==0) continue;
158 Float_t xpc, ypc, th, ph;
159 track->GetHMPIDtrk(xpc,ypc,th,ph); //special setting in local cosmic rec!!!
160 //do not use with standard rec
162 Double_t dist = TMath::Sqrt( (xpc-x)*(xpc-x) + (ypc - y)*(ypc - y));
164 if(ch >=0 && ch < 7) {
165 if(dist < 3) ((TH2F *)fHistList->At(ch+1))->Fill(x,y);
166 ((TH1F *)fHistList->At(ch+7+1))->Fill(q);
167 ((TH2F *)fHistList->At(ch+14+1))->Fill(dist,q);
172 fHistEventsProcessed->Fill(0);
174 /* PostData(0) is taken care of by AliAnalysisTaskSE */
175 PostData(1,fHistEventsProcessed) ;
176 PostData(2,fHistList) ;
180 //___________________________________________________________________________
181 void AliHMPIDAnalysisTask::Terminate(Option_t*)
183 // The Terminate() function is the last function to be called during
184 // a query. It always runs on the client, it can be used to present
185 // the results graphically or save the results to file.
187 Info("Terminate","");
188 AliAnalysisTaskSE::Terminate();
193 //___________________________________________________________________________
194 void AliHMPIDAnalysisTask::UserCreateOutputObjects() {
196 //HERE ONE CAN CREATE OUTPUT OBJECTS
197 //TO BE SET BEFORE THE EXECUTION OF THE TASK
199 Info("CreateOutputObjects","CreateOutputObjects of task %s", GetName());
203 fHistEventsProcessed = new TH1I("fHistEventsProcessed","",1,0,1) ;
206 fHistList = new TList();
209 TH1F *trkH = new TH1F("trkH","signal flags in HMPID",6,0,6);
210 TString summary[6] = {"NotPerformed","MipDistCut", "MipQdcCut", "NoPhotAccept", "kNoRad", "other"};
211 for(Int_t ibin = 0; ibin < 6; ibin++) trkH->GetXaxis()->SetBinLabel(ibin+1,Form("%i %s",ibin+1,summary[ibin].Data()));
212 fHistList->Add(trkH);
215 TH2F *mod[7], *dq[7];
219 for(Int_t i=0; i< 7 ; i++) {// to preserve the histo sorting
220 mod[i] = new TH2F(Form("mod%i",i),Form("MIP position in chamber %i",i),180,0,180,180,0,180);
221 mod[i]->SetMarkerStyle(8);
222 mod[i]->SetMarkerColor(2);
223 fHistList->Add(mod[i]);
226 for(Int_t i=0; i< 7 ; i++) {//to reserve the histo sorting
227 q[i] = new TH1F(Form("q%i",i),Form("MIP charge distribution in chamber %i",i),5000,0,5000);
228 q[i]->SetMarkerColor(2);
229 fHistList->Add(q[i]);
232 for(Int_t i=0; i< 7 ; i++) {//to reserve the histo sorting
233 dq[i] = new TH2F(Form("dq%i",i),Form("#Delta(mip-track) vs Q_{mip} in chamber %i",i),1000,0,100,5000,0,5000),
234 dq[i]->SetMarkerStyle(6);
235 fHistList->Add(dq[i]);
238 TH2F *inner = new TH2F("inner","inner track XY",800,-400,400,800,-400,400);
239 inner->SetMarkerStyle(6);
240 inner->SetXTitle("X cm");
241 inner->SetYTitle("Y cm");
242 fHistList->Add(inner);
244 TH2F *outer = new TH2F("outer","outer track XY",800,-400,400,800,-400,400);
245 outer->SetMarkerStyle(6);
246 outer->SetXTitle("X cm");
247 outer->SetYTitle("Y cm");
248 fHistList->Add(outer);