]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HMPID/AliHMPIDQADataMaker.cxx
First V0 MC Analysis from H.Ricaud
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDQADataMaker.cxx
CommitLineData
b39da4dc 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
17/* $Id$ */
18
19//---
20// Produces the data needed to calculate the quality assurance.
21// All data must be mergeable objects.
22// A. Mastroserio
23//---
24
25// --- ROOT system ---
26#include <TClonesArray.h>
27#include <TFile.h>
28#include <TH1F.h>
29#include <TH2F.h>
30#include <TH1I.h>
31#include <TDirectory.h>
32#include <Riostream.h>
33// --- Standard library ---
34
35// --- AliRoot header files ---
36#include "AliESDCaloCluster.h"
37#include "AliESDEvent.h"
38#include "AliLog.h"
39#include "AliHMPIDDigit.h"
40#include "AliHMPIDHit.h"
41#include "AliHMPIDCluster.h"
b990acb3 42#include "AliHMPIDQADataMaker.h"
b39da4dc 43
b990acb3 44ClassImp(AliHMPIDQADataMaker)
b39da4dc 45
46//____________________________________________________________________________
b990acb3 47 AliHMPIDQADataMaker::AliHMPIDQADataMaker() :
48 AliQADataMaker(AliQA::GetDetName(AliQA::kHMPID), "HMPID Quality Assurance Data Maker"),
b39da4dc 49 fhHitQdc(0x0),
50 fhSDigits(0x0),
51 fhDigPcEvt(0x0),
52 fhDigChEvt(0x0),
53 fhDigQ(0x0),
54 fhCluEvt(0x0),
55 fhCluChi2(0x0),
56 fhCluQ(0x0),
57 fhCluFlg(0x0),
58 fhCluSize(0x0),
59 fhMipCluSize(0x0),
60 fhCkovP(0x0),
61 fhSigP(0x0),
62 fhMipXY(0x0),
63 fhDifXY(0x0)
64{
65 // ctor
66 for(Int_t i=0; i<7; i++) fhHitMap[i]=0x0;
67 for(Int_t j=0; j<5; j++) fhPid[j]=0x0;
a01035e3 68// fDetectorDir = fOutput->GetDirectory(GetName()) ;
69// if (!fDetectorDir)
70// fDetectorDir = fOutput->mkdir(GetName()) ;
b39da4dc 71}
72
73//____________________________________________________________________________
b990acb3 74AliHMPIDQADataMaker::AliHMPIDQADataMaker(const AliHMPIDQADataMaker& qadm) :
75 AliQADataMaker(),
b39da4dc 76 fhHitQdc(qadm.fhHitQdc),
77 fhSDigits(qadm.fhSDigits),
78 fhDigPcEvt(qadm.fhDigPcEvt),
79 fhDigChEvt(qadm.fhDigChEvt),
80 fhDigQ(qadm.fhDigQ),
81 fhCluEvt(qadm.fhCluEvt),
82 fhCluChi2(qadm.fhCluChi2),
83 fhCluQ(qadm.fhCluQ),
84 fhCluFlg(qadm.fhCluFlg),
85 fhCluSize(qadm.fhCluSize),
86 fhMipCluSize(qadm.fhMipCluSize),
87 fhCkovP(qadm.fhCkovP),
88 fhSigP(qadm.fhSigP),
89 fhMipXY(qadm.fhMipXY),
90 fhDifXY(qadm.fhDifXY)
91{
92 //copy ctor
93 for(Int_t i=0; i<7; i++) fhHitMap[i]=qadm.fhHitMap[i];
94 for(Int_t j=0; j<5; j++) fhPid[j]=qadm.fhPid[j];
95
96 SetName((const char*)qadm.GetName()) ;
97 SetTitle((const char*)qadm.GetTitle());
98}
99
100//__________________________________________________________________
b990acb3 101AliHMPIDQADataMaker& AliHMPIDQADataMaker::operator = (const AliHMPIDQADataMaker& qadm )
b39da4dc 102{
103 // Equal operator.
b990acb3 104 this->~AliHMPIDQADataMaker();
105 new(this) AliHMPIDQADataMaker(qadm);
b39da4dc 106 return *this;
107}
108
109//____________________________________________________________________________
b990acb3 110void AliHMPIDQADataMaker::InitHits()
b39da4dc 111{
112 // create Hits histograms in Hits subdir
113 fhHitQdc=new TH1F("HitQdc","HMPID Hit Qdc all chamber;QDC",500,0,4000);
114 for(Int_t iCh=0;iCh<7;iCh++) fhHitMap[iCh]=new TH2F(Form("HMPID HitMap%i",iCh),Form("Ch%i;x_{Hit};y_{Hit}",iCh),162,-1,161,146,-1,145);
115}
116
117//____________________________________________________________________________
b990acb3 118void AliHMPIDQADataMaker::InitDigits()
b39da4dc 119{
120 // create Digits histograms in Digits subdir
121 fhDigPcEvt=new TH1F("hDigPcEvt","PC occupancy",156,-1,77);
122 fhDigChEvt=new TH1F("hDigChEvt","Chamber occupancy",32,-1,7);
123 fhDigQ =new TH1F("Q "," digit charge ",3000,0,3000);
124}
125
126//____________________________________________________________________________
b990acb3 127void AliHMPIDQADataMaker::InitSDigits()
b39da4dc 128{
129 // create SDigits histograms in SDigits subdir
130 fhSDigits = new TH1F("hHmpidSDigits", "SDigits Q distribution in HMPID", 500, 0., 5000.) ;
131}
132
133//____________________________________________________________________________
134
b990acb3 135void AliHMPIDQADataMaker::InitRecPoints()
b39da4dc 136{
137 // create cluster histograms in RecPoint subdir
138 fhCluEvt=new TH1F("CluPerEvt","# clusters per chamber",16,-1,7);
139 fhCluChi2 =new TH1F("CluChi2" ,"Chi2 " ,1000,0,100);
140 fhCluQ =new TH1F("CluQ" ,"Cluster charge" ,3000,0,3000);
141 fhCluFlg =new TH1F("CluFlg" ,"Cluster flag" ,14,-1.5,12.5);
142 fhCluSize =new TH1F("CluSize" ,"Raw cluster size ",100,0,100);
143 fhMipCluSize =new TH1F("MipCluSize" ,"Mip cluster size ",100,0,100);
144}
145//____________________________________________________________________________
b990acb3 146void AliHMPIDQADataMaker::InitESDs()
b39da4dc 147{
148 //create ESDs histograms in ESDs subdir
149 fhCkovP = new TH2F("CkovP" , "#theta_{c}, [rad];P, [GeV]" , 150, 0, 7 ,100, 0, 1) ;
150 fhSigP = new TH2F("SigP" ,"#sigma_{#theta_c} [mrad];[GeV]", 150, 0, 7 ,100, 0, 1) ;
151 fhMipXY = new TH2F("MipXY" ,"mip position" , 260, 0,130 ,252, 0,126) ;
152 fhDifXY = new TH2F("DifXY" ,"diff" , 200, -10, 10 ,200,-10,10) ;
153 fhPid[0] = new TH1F("PidE" ,"PID: e yellow #mu magenta" ,100,0,1) ;
154 fhPid[1] = new TH1F("PidMu","pid of #mu" ,100,0,1) ;
155 fhPid[2] = new TH1F("PidPi","PID: #pi red K green p blue",100,0,1) ;
156 fhPid[3] = new TH1F("PidK" ,"pid of K" ,100,0,1) ;
157 fhPid[4] = new TH1F("PidP" ,"pid of p" ,100,0,1) ;
158}
159
160//____________________________________________________________________________
b990acb3 161void AliHMPIDQADataMaker::MakeHits(TObject * data)
b39da4dc 162{
163 //fills QA histos for Hits
d76c31f4 164 TClonesArray * hits = dynamic_cast<TClonesArray *>(data) ;
165 if (!hits){
166 AliError("Wrong type of hits container") ;
167 } else {
168 TIter next(hits);
169 AliHMPIDHit * hit ;
170 while ( (hit = dynamic_cast<AliHMPIDHit *>(next())) ) {
171 if(hit->Pid()<500000) fhHitQdc->Fill(hit->Q()) ;
172 if(hit->Pid()<500000) fhHitMap[hit->Ch()]->Fill(hit->LorsX(),hit->LorsY());
173 }
174 }
175}
176
b39da4dc 177//____________________________________________________________________________
b990acb3 178void AliHMPIDQADataMaker::MakeDigits( TObject * data)
b39da4dc 179{
180 //fills QA histos for Digits
d76c31f4 181 TObjArray *chambers = dynamic_cast<TObjArray*>(data);
182 if ( !chambers) {
183 AliError("Wrong type of digits container") ;
184 } else {
185 for(Int_t i =0; i< chambers->GetEntries(); i++)
186 {
187 TClonesArray * digits = dynamic_cast<TClonesArray*>(chambers->At(i));
188 fhDigChEvt->Fill(i,digits->GetEntriesFast()/(48.*80.*6.));
189 TIter next(digits);
190 AliHMPIDDigit * digit;
191 while ( (digit = dynamic_cast<AliHMPIDDigit *>(next())) ) {
192 fhDigPcEvt->Fill(10.*i+digit->Pc(),1./(48.*80.));
193 fhDigQ->Fill(digit->Q());
194 }
195 }
196 }
b39da4dc 197}
198
199//____________________________________________________________________________
b990acb3 200void AliHMPIDQADataMaker::MakeSDigits( TObject * data)
b39da4dc 201{
202 //fills QA histos for SDigits
d76c31f4 203 TClonesArray * sdigits = dynamic_cast<TClonesArray *>(data) ;
204 if (!sdigits) {
205 AliError("Wrong type of sdigits container") ;
206 } else {
207 AliHMPIDDigit *ref = (AliHMPIDDigit *)sdigits->At(0);
208 Float_t zero = ref->GetTrack(0);
209 TIter next(sdigits) ;
210 AliHMPIDDigit * sdigit ;
211 while ( (sdigit = dynamic_cast<AliHMPIDDigit *>(next())) ) {
212 fhSDigits->Fill(sdigit->Q()) ;
213 if(zero == sdigit->GetTrack(0)) continue;
214 else zero = sdigit->GetTrack(0);
215 }
216 }
b39da4dc 217}
218
d76c31f4 219//____________________________________________________________________________
b990acb3 220void AliHMPIDQADataMaker::MakeRecPoints(TTree * clustersTree)
b39da4dc 221{
222 //fills QA histos for clusters
b39da4dc 223
d76c31f4 224 TClonesArray *clusters = new TClonesArray("AliHMPIDCluster");
225 for(int i=AliHMPIDParam::kMinCh;i<=AliHMPIDParam::kMaxCh;i++){
226 TBranch *branch = clustersTree->GetBranch(Form("HMPID%d",i));
227 branch->SetAddress(&clusters);
228 branch->GetEntry(0);
229
b39da4dc 230 fhCluEvt->Fill(i,clusters->GetEntries());
231 TIter next(clusters);
232 AliHMPIDCluster *clu;
233 while ( (clu = dynamic_cast<AliHMPIDCluster *>(next())) ) {;
d76c31f4 234 fhCluFlg->Fill(clu->Status()); fhCluChi2->Fill(clu->Chi2()); fhCluSize->Fill(clu->Size());
235 fhCluQ->Fill(clu->Q());
236 Int_t qCut=100;
237 if(clu->Q()>qCut) {
238 fhMipCluSize->SetTitle(Form("Mip cluster size at a Qcut = %i ADC",qCut));
239 fhMipCluSize->Fill(clu->Size());
240 }
b39da4dc 241 }
242 }
d76c31f4 243
244 clusters->Delete();
245 delete clusters;
b39da4dc 246}
247
248//____________________________________________________________________________
b990acb3 249void AliHMPIDQADataMaker::MakeESDs(AliESDEvent * esd)
b39da4dc 250{
251 //fills QA histos for ESD
b39da4dc 252 for(Int_t iTrk = 0 ; iTrk < esd->GetNumberOfTracks() ; iTrk++){
253 AliESDtrack *pTrk = esd->GetTrack(iTrk) ;
254 fhCkovP->Fill(pTrk->GetP(),pTrk->GetHMPIDsignal());
255 fhSigP->Fill( pTrk->GetP(),TMath::Sqrt(pTrk->GetHMPIDchi2()));
256 Float_t xm,ym; Int_t q,np;
257 pTrk->GetHMPIDmip(xm,ym,q,np); //mip info
258 fhMipXY->Fill(xm,ym);
259 Float_t xRad,yRad,th,ph;
260 pTrk->GetHMPIDtrk(xRad,yRad,th,ph); //track info at the middle of the radiator
261 Float_t xPc = xRad+9.25*TMath::Tan(th)*TMath::Cos(ph); // temporar: linear extrapol (B=0!)
262 Float_t yPc = yRad+9.25*TMath::Tan(th)*TMath::Sin(ph); // temporar: "
263 fhDifXY->Fill(xm-xPc,ym-yPc); //track info
264 Double_t pid[5] ; pTrk->GetHMPIDpid(pid) ;
265 for(Int_t i = 0 ; i < 5 ; i++) fhPid[i]->Fill(pid[i]) ;
266 }
267}
268