9f616d61 |
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 | **************************************************************************/ |
9f616d61 |
15 | //_________________________________________________________________________ |
16 | // Cheking PHOSHistos procedure of PHOS |
17 | //*-- Author : Gines MARTINEZ SUBATECH january 2000 |
18 | ////////////////////////////////////////////////////////////////////////////// |
19 | |
20 | // --- ROOT system --- |
9f616d61 |
21 | #include "TCanvas.h" |
22 | #include "TFile.h" |
23 | #include "TH1.h" |
24 | #include "TPad.h" |
25 | #include "TTree.h" |
26 | |
27 | // --- Standard library --- |
28 | |
29 | #include <iostream> |
30 | #include <cstdio> |
31 | |
32 | |
33 | // --- AliRoot header files --- |
34 | #include "AliRun.h" |
35 | #include "TFile.h" |
36 | #include "AliPHOSGeometry.h" |
37 | #include "AliPHOSv0.h" |
38 | #include "AliPHOSDigit.h" |
39 | #include "AliPHOSRecPoint.h" |
40 | #include "AliPHOSEmcRecPoint.h" |
41 | #include "AliPHOSPpsdRecPoint.h" |
42 | #include "AliPHOSClusterizerv1.h" |
43 | #include "AliPHOSReconstructioner.h" |
44 | #include "AliPHOSTrackSegment.h" |
45 | #include "AliPHOSTrackSegmentMakerv1.h" |
26d4b141 |
46 | #include "AliPHOSPIDv1.h" |
9f616d61 |
47 | #include "PHOSHistos.h" |
48 | |
49 | |
50 | void PHOSHistos (Text_t* infile, Int_t nevent, Int_t Module) |
51 | { |
52 | //========== Opening galice.root file |
53 | TFile * file = new TFile(infile); |
54 | //========== Get AliRun object from file |
55 | gAlice = (AliRun*) file->Get("gAlice");//=========== Gets the PHOS object and associated geometry from the file |
6ad0bfa0 |
56 | |
9f616d61 |
57 | AliPHOSv0 * PHOS = (AliPHOSv0 *)gAlice->GetDetector("PHOS"); |
58 | AliPHOSGeometry * Geom = AliPHOSGeometry::GetInstance(PHOS->GetGeometry()->GetName(),PHOS->GetGeometry()->GetTitle()); |
9f616d61 |
59 | //========== Creates the track segment maker |
6ad0bfa0 |
60 | AliPHOSTrackSegmentMakerv1 * tracksegmentmaker = new AliPHOSTrackSegmentMakerv1() ; |
26d4b141 |
61 | //========== Creates the particle identifier |
62 | AliPHOSPIDv1 * particleidentifier = new AliPHOSPIDv1 ; |
908558fc |
63 | cout << "AnalyzeOneEvent > using particle identifier " << particleidentifier->GetName() << endl ; |
9f616d61 |
64 | |
6ad0bfa0 |
65 | TH1F * hEmcDigit = new TH1F("hEmcDigit","hEmcDigit",1000,0.,5.); |
9f616d61 |
66 | TH1F * hVetoDigit = new TH1F("hVetoDigit","hVetoDigit",1000,0.,3.e-5); |
67 | TH1F * hConvertorDigit = new TH1F("hConvertorDigit","hConvertorDigit",1000,0.,3.e-5); |
6ad0bfa0 |
68 | TH1F * hEmcCluster = new TH1F("hEmcCluster","hEmcCluster",1000,-5.,5.); |
9f616d61 |
69 | TH1F * hVetoCluster = new TH1F("hVetoCluster","hVetoCluster",1000,0.,3.e-5); |
70 | TH1F * hConvertorCluster = new TH1F("hConvertorCluster","hConvertorCluster",1000,0.,3.e-5); |
6ad0bfa0 |
71 | TH2F * hConvertorEmc = new TH2F("hConvertorEmc","hConvertorEmc",100,2.,3., 100, 0., 1.e-5); |
72 | |
9f616d61 |
73 | AliPHOSDigit * digit ; |
74 | |
75 | //========== Loop on events |
76 | Int_t ievent; |
77 | for(ievent=0;ievent<nevent; ievent++) |
6ad0bfa0 |
78 | { |
79 | //========== Creates the Clusterizer |
80 | AliPHOSClusterizerv1 * clusterizer = new AliPHOSClusterizerv1() ; |
81 | clusterizer->SetEmcEnergyThreshold(0.01) ; |
82 | clusterizer->SetEmcClusteringThreshold(0.1) ; |
83 | clusterizer->SetPpsdEnergyThreshold(0.00000005) ; |
84 | clusterizer->SetPpsdClusteringThreshold(0.00000005) ; |
85 | clusterizer->SetLocalMaxCut(0.03) ; |
86 | clusterizer->SetCalibrationParameters(0., 0.00000001) ; |
87 | |
88 | //========== Creates the Reconstructioner |
26d4b141 |
89 | AliPHOSReconstructioner * Reconstructioner = new AliPHOSReconstructioner(clusterizer, tracksegmentmaker, particleidentifier) ; |
6ad0bfa0 |
90 | |
91 | cout << "Event " << ievent <<endl; |
9f616d61 |
92 | |
93 | Int_t RelId[4] ; |
94 | //=========== Connects the various Tree's for evt |
95 | gAlice->GetEvent(ievent); |
96 | //=========== Gets the Digit TTree |
97 | gAlice->TreeD()->GetEvent(0) ; |
98 | //=========== Gets the number of entries in the Digits array |
99 | // Int_t nId = PHOS->Digits()->GetEntries(); |
100 | TIter next(PHOS->Digits()) ; |
101 | Float_t Etot=0 ; |
102 | Int_t nVeto=0 ; |
103 | Int_t nConvertor=0 ; |
6ad0bfa0 |
104 | |
9f616d61 |
105 | while( ( digit = (AliPHOSDigit *)next() ) ) |
106 | { |
6ad0bfa0 |
107 | Etot+=clusterizer->Calibrate(digit->GetAmp()) ; |
9f616d61 |
108 | Geom->AbsToRelNumbering(digit->GetId(), RelId) ; |
109 | |
6ad0bfa0 |
110 | if (clusterizer->IsInEmc(digit)) |
111 | { hEmcDigit->Fill(clusterizer->Calibrate(digit->GetAmp())) ; } |
9f616d61 |
112 | else |
113 | { |
6ad0bfa0 |
114 | if (RelId[1]==9) {nVeto++; hVetoDigit->Fill(clusterizer->Calibrate(digit->GetAmp()));} |
115 | if (RelId[1]==25) {nConvertor++; hConvertorDigit->Fill(clusterizer->Calibrate(digit->GetAmp()));} |
9f616d61 |
116 | } |
117 | } |
6ad0bfa0 |
118 | |
119 | PHOS->Reconstruction(Reconstructioner); |
120 | |
121 | //=========== Cluster in Module |
122 | TClonesArray * EmcRP = PHOS->EmcClusters() ; |
123 | TIter nextemc(EmcRP) ; |
124 | AliPHOSEmcRecPoint * emc ; |
125 | Float_t Energy; |
126 | while((emc = (AliPHOSEmcRecPoint *)nextemc())) |
127 | { |
128 | if ( emc->GetPHOSMod() == Module ) |
129 | { |
130 | Energy = emc->GetTotalEnergy() ; |
131 | hEmcCluster->Fill(Energy); |
132 | printf("Energy of the EMC cluster is %f \n",Energy); |
133 | TClonesArray * PpsdRP = PHOS->PpsdClusters() ; |
134 | TIter nextPpsd(PpsdRP) ; |
135 | AliPHOSPpsdRecPoint * Ppsd ; |
136 | Float_t Energy2; |
137 | while((Ppsd = (AliPHOSPpsdRecPoint *)nextPpsd())) |
138 | { |
139 | if ( Ppsd->GetPHOSMod() == Module ) |
140 | { |
141 | Energy2 = Ppsd->GetTotalEnergy() ; |
142 | |
143 | if (!Ppsd->GetUp()) hConvertorEmc->Fill(Energy,Energy2) ; |
144 | } |
145 | } |
146 | |
147 | } |
148 | } |
149 | |
150 | //=========== Cluster in Module PPSD Down |
151 | TClonesArray * PpsdRP = PHOS->PpsdClusters() ; |
152 | TIter nextPpsd(PpsdRP) ; |
153 | AliPHOSPpsdRecPoint * Ppsd ; |
154 | while((Ppsd = (AliPHOSPpsdRecPoint *)nextPpsd())) |
155 | { |
156 | if ( Ppsd->GetPHOSMod() == Module ) |
157 | { |
158 | Energy = Ppsd->GetTotalEnergy() ; |
159 | |
160 | if (!Ppsd->GetUp()) hConvertorCluster->Fill(Energy) ; |
161 | if (Ppsd->GetUp()) hVetoCluster->Fill(Energy) ; |
162 | |
163 | } |
164 | } |
9f616d61 |
165 | } |
6ad0bfa0 |
166 | |
9f616d61 |
167 | TCanvas * cVetoDigit = new TCanvas("VetoDigit","VetoDigit"); |
168 | hVetoDigit->Draw(); |
169 | TCanvas * cConvertorDigit = new TCanvas("ConvertorDigit","ConvertorDigit"); |
170 | hConvertorDigit->Draw(); |
171 | TCanvas * cEmcDigit = new TCanvas("EmcDigit","EmcDigit"); |
172 | hEmcDigit->Draw(); |
6ad0bfa0 |
173 | TCanvas * cVetoCluster = new TCanvas("VetoCluster","VetoCluster"); |
174 | hVetoCluster->Draw(); |
175 | TCanvas * cConvertorCluster = new TCanvas("ConvertorCluster","ConvertorCluster"); |
176 | hConvertorCluster->Draw(); |
177 | TCanvas * cEmcCluster = new TCanvas("EmcCluster","EmcCluster"); |
178 | hEmcCluster->Draw(); |
179 | TCanvas * cConvertorEmc = new TCanvas("ConvertorEmc","ConvertorEmc"); |
180 | hConvertorEmc->Draw("col1"); |
181 | |
182 | |
9f616d61 |
183 | } |
184 | |
185 | |