]>
Commit | Line | Data |
---|---|---|
96390f65 | 1 | #include <TSystem.h> |
2 | #include <TFile.h> | |
e4290ede | 3 | #include <TStyle.h> |
96390f65 | 4 | #include <TTree.h> |
5 | #include <TClonesArray.h> | |
6 | #include <TObjArray.h> | |
7 | #include <TH2F.h> | |
8 | #include <TCanvas.h> | |
9 | ||
10 | #include <AliHMPIDHit.h> | |
11 | #include <AliHMPIDCluster.h> | |
9234c352 | 12 | #include <AliHMPIDDigit.h> |
96390f65 | 13 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
14 | TObjArray *CreateContainer(const char *classname,TTree *pTree) | |
15 | { | |
16 | TObjArray *pOA=new TObjArray(7); pOA->SetOwner(); | |
ae5a42aa | 17 | for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++){ |
96390f65 | 18 | TClonesArray *pCA=new TClonesArray(classname); |
19 | pOA->AddAt(pCA,iCh); | |
20 | pTree->SetBranchAddress(Form("HMPID%i",iCh),&pCA); | |
21 | } | |
96390f65 | 22 | return pOA; |
23 | } | |
24 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
59d9d4b3 | 25 | TH1F *hHitQdc; TH2F *hHitMap[7]; |
26 | void Hits(Int_t mode,TTree *pTree=0x0) | |
27 | { | |
28 | switch(mode){ | |
29 | case 1: | |
30 | hHitQdc=new TH1F("HitQdc","Hit Qdc all chamber;QDC",500,0,4000); | |
31 | for(Int_t iCh=0;iCh<7;iCh++) hHitMap[iCh]=new TH2F(Form("HitMap%i",iCh),Form("Ch%i;x_{Hit};y_{Hit}",iCh),160,0,160,160,0,160); | |
e4290ede | 32 | break; |
59d9d4b3 | 33 | case 2: |
34 | if(pTree==0) return; | |
35 | TClonesArray *pHits=new TClonesArray("AliHMPIDHit"); pTree->SetBranchAddress("HMPID",&pHits); | |
36 | for(Int_t iEnt=0;iEnt<pTree->GetEntriesFast();iEnt++){//entries loop | |
37 | pTree->GetEntry(iEnt); | |
38 | for(Int_t iHit=0;iHit<pHits->GetEntriesFast();iHit++){//hits loop | |
39 | AliHMPIDHit *pHit = (AliHMPIDHit*)pHits->UncheckedAt(iHit); | |
40 | hHitMap[pHit->Ch()]->Fill(pHit->LorsX(),pHit->LorsY()); | |
41 | hHitQdc->Fill(pHit->Q()); | |
42 | }//hits loop | |
43 | }//entries loop | |
44 | delete pHits; | |
e4290ede | 45 | break; |
59d9d4b3 | 46 | case 3: |
47 | TCanvas *c1=new TCanvas("HitCan","Hits",1280,800); c1->Divide(3,3); | |
48 | ||
49 | for(Int_t iCh=0;iCh<7;iCh++){ | |
50 | if(iCh==6) c1->cd(1); if(iCh==5) c1->cd(2); | |
51 | if(iCh==4) c1->cd(4); if(iCh==3) c1->cd(5); if(iCh==2) c1->cd(6); | |
52 | if(iCh==1) c1->cd(8); if(iCh==0) c1->cd(9); | |
e4290ede | 53 | gStyle->SetPalette(1); |
54 | hHitMap[iCh]->Draw("colz"); | |
59d9d4b3 | 55 | } |
e4290ede | 56 | c1->cd(3); gPad->SetLogy(); hHitQdc->SetFillColor(5);hHitQdc->Draw(); |
57 | break; | |
59d9d4b3 | 58 | } |
59 | }//Hits() | |
60 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
96390f65 | 61 | TH1F *hCluEvt,*hCluChi2,*hCluFlg,*hCluSize; |
96390f65 | 62 | void Clus(Int_t mode, TTree *pTree=0x0) |
63 | { | |
64 | switch(mode){ | |
65 | case 1: | |
e4290ede | 66 | hCluEvt=new TH1F("CluPerEvt","# clusters per event",21,-0.5,20.5); |
96390f65 | 67 | hCluChi2 =new TH1F("CluChi2" ,"Chi2 " ,1000,0,100); |
68 | hCluFlg =new TH1F("CluFlg" ,"Cluster flag" ,14,-1.5,12.5); hCluFlg->SetFillColor(5); | |
69 | hCluSize =new TH1F("CluSize" ,"Raw cluster size ",100,0,100); | |
e4290ede | 70 | break; |
96390f65 | 71 | case 2: |
72 | if(pTree==0) return; | |
59d9d4b3 | 73 | TObjArray *pLst=CreateContainer("AliHMPIDCluster",pTree); pTree->GetEntry(0); |
ae5a42aa | 74 | for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++){//chambers loop |
96390f65 | 75 | TClonesArray *pClus=(TClonesArray *)pLst->UncheckedAt(iCh); |
96390f65 | 76 | hCluEvt->Fill(pClus->GetEntriesFast()); |
77 | for(Int_t iClu=0;iClu<pClus->GetEntriesFast();iClu++){//clusters loop | |
78 | AliHMPIDCluster *pClu=(AliHMPIDCluster*)pClus->UncheckedAt(iClu); | |
59d9d4b3 | 79 | hCluFlg->Fill(pClu->Status()); hCluChi2->Fill(pClu->Chi2()); hCluSize->Fill(pClu->Size()); |
96390f65 | 80 | } |
81 | } | |
82 | delete pLst; | |
e4290ede | 83 | break; |
96390f65 | 84 | case 3: |
85 | TCanvas *c1=new TCanvas("CluComCan","Clusters in common",1280,800); c1->Divide(3,3); | |
1c850da7 | 86 | c1->cd(1); hCluEvt->SetFillColor(5); hCluEvt->Draw(); |
e4290ede | 87 | c1->cd(2); hCluChi2->SetFillColor(5); hCluChi2->Draw(); |
88 | c1->cd(3); hCluFlg->SetFillColor(5); hCluFlg->Draw(); | |
89 | c1->cd(4); hCluSize->SetFillColor(5); hCluSize->Draw(); | |
90 | break; | |
96390f65 | 91 | }//switch |
92 | }//Clus() | |
9234c352 | 93 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
94 | TH1F *hDigPcEvt,*hDigQ, *hDigChEvt; | |
95 | void Digs(Int_t mode, TTree *pTree=0x0) | |
96 | { | |
97 | switch(mode){ | |
98 | case 1: | |
e4290ede | 99 | hDigPcEvt=new TH1F("hDigPcEvt","PC occupancy per event",156,-1,77); |
100 | hDigChEvt=new TH1F("hDigChEvt","Chamber occupancy per event",32,-1,7); | |
9234c352 | 101 | hDigQ =new TH1F("Q ","Q ",3000,0,3000); |
e4290ede | 102 | break; |
9234c352 | 103 | case 2: |
104 | if(pTree==0) return; | |
105 | TObjArray *pLst=CreateContainer("AliHMPIDDigit",pTree); pTree->GetEntry(0); | |
106 | for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++){//chambers loop | |
107 | TClonesArray *pDigs=(TClonesArray *)pLst->UncheckedAt(iCh); | |
108 | hDigChEvt->Fill(iCh,pDigs->GetEntriesFast()/(48.*80.*6.)); | |
109 | for(Int_t iDig=0;iDig<pDigs->GetEntriesFast();iDig++){//digits loop | |
110 | AliHMPIDDigit *pDig=(AliHMPIDDigit*)pDigs->UncheckedAt(iDig); | |
111 | hDigPcEvt->Fill(10.*iCh+pDig->Pc(),1./(48.*80.)); | |
112 | hDigQ->Fill(pDig->Q()); | |
113 | } | |
114 | } | |
115 | delete pLst; | |
e4290ede | 116 | break; |
9234c352 | 117 | case 3: |
118 | TCanvas *c1=new TCanvas("DigQa","Digit Check",1280,800); c1->Divide(2,2); | |
119 | c1->cd(1); hDigPcEvt->Draw(); c1->cd(2); hDigQ->Draw(); c1->cd(3); hDigChEvt->Draw(); | |
e4290ede | 120 | break; |
9234c352 | 121 | }//switch |
122 | }//Dig() | |
123 | ||
96390f65 | 124 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
00f49991 | 125 | void Hqa() |
126 | { | |
96390f65 | 127 | |
128 | TFile *fh=0; if(gSystem->IsFileInIncludePath("HMPID.Hits.root")) fh=TFile::Open("HMPID.Hits.root" ,"read");if(fh->IsZombie()) fh=0; | |
129 | TFile *fd=0; if(gSystem->IsFileInIncludePath("HMPID.Digits.root")) fd=TFile::Open("HMPID.Digits.root" ,"read");if(fd->IsZombie()) fd=0; | |
130 | TFile *fc=0; if(gSystem->IsFileInIncludePath("HMPID.RecPoints.root")) fc=TFile::Open("HMPID.RecPoints.root","read");if(fc->IsZombie()) fc=0; | |
96390f65 | 131 | if(fh==0 && fd==0 && fc==0){Printf("Nothing to do!"); return;} |
9234c352 | 132 | if(fh) Hits(1); if(fc) Clus(1); if(fd) Digs(1);//book |
96390f65 | 133 | Int_t iEvt=0; |
134 | while(1){ | |
135 | TTree *th=0; if(fh) th=(TTree*)fh->Get(Form("Event%i/TreeH",iEvt)); | |
136 | TTree *td=0; if(fd) td=(TTree*)fd->Get(Form("Event%i/TreeD",iEvt)); | |
137 | TTree *tc=0; if(fc) tc=(TTree*)fc->Get(Form("Event%i/TreeR",iEvt)); | |
9234c352 | 138 | Hits(2,th); Clus(2,tc); Digs(2,td);//fill |
96390f65 | 139 | if(th==0 && td==0 && tc==0) break; |
140 | iEvt++; | |
141 | Printf("Event %i processed",iEvt); | |
142 | } | |
e4290ede | 143 | if(fh) Hits(3); |
144 | if(fc) Clus(3); | |
145 | if(fd) Digs(3);//plot | |
96390f65 | 146 | } |
147 |