]>
Commit | Line | Data |
---|---|---|
3bb122c7 | 1 | |
2 | #include <TROOT.h> | |
3 | #include <TSystem.h> | |
4 | #include <TInterpreter.h> | |
5 | #include <TChain.h> | |
6 | #include <TFile.h> | |
7 | #include <TList.h> | |
8 | #include <iostream> | |
9 | ||
10 | #include "AliFMDAnalysisTaskSharing.h" | |
11 | #include "AliAnalysisManager.h" | |
12 | #include "AliESDFMD.h" | |
13 | #include "AliESDEvent.h" | |
14 | #include "AliAODEvent.h" | |
15 | #include "AliAODHandler.h" | |
16 | #include "AliMCEventHandler.h" | |
17 | #include "AliStack.h" | |
18 | #include "AliESDVertex.h" | |
19 | #include "AliFMDAnaParameters.h" | |
20 | ||
21 | ClassImp(AliFMDAnalysisTaskSharing) | |
22 | ||
23 | //_____________________________________________________________________ | |
24 | AliFMDAnalysisTaskSharing::AliFMDAnalysisTaskSharing() | |
25 | : fDebug(0), | |
26 | fESD(0x0), | |
27 | fOutputESD(0x0), | |
8dc823cc | 28 | foutputESDFMD(0x0), |
29 | fSharedNext(kFALSE), | |
30 | fSharedPrev(kFALSE) | |
3bb122c7 | 31 | { |
32 | // Default constructor | |
33 | DefineInput (0, AliESDEvent::Class()); | |
34 | DefineOutput(0, AliESDEvent::Class()); | |
35 | } | |
36 | //_____________________________________________________________________ | |
37 | AliFMDAnalysisTaskSharing::AliFMDAnalysisTaskSharing(const char* name): | |
38 | AliAnalysisTask(name, "AnalysisTaskFMD"), | |
39 | fDebug(0), | |
40 | fESD(0x0), | |
41 | fOutputESD(0x0), | |
8dc823cc | 42 | foutputESDFMD(0x0), |
43 | fSharedNext(kFALSE), | |
44 | fSharedPrev(kFALSE) | |
45 | ||
3bb122c7 | 46 | { |
47 | DefineInput (0, AliESDEvent::Class()); | |
48 | DefineOutput(0, AliESDEvent::Class()); | |
49 | } | |
50 | //_____________________________________________________________________ | |
51 | void AliFMDAnalysisTaskSharing::CreateOutputObjects() | |
52 | { | |
53 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); | |
54 | ||
55 | AliESDFMD* outputESDFMD = 0; | |
56 | Int_t nvtxbins = pars->GetNvtxBins(); | |
57 | ||
58 | fOutputESD = new AliESDEvent(); | |
59 | fOutputESD->CreateStdContent(); | |
60 | ||
61 | foutputESDFMD = new AliESDFMD(); | |
62 | } | |
63 | //_____________________________________________________________________ | |
64 | void AliFMDAnalysisTaskSharing::ConnectInputData(Option_t */*option*/) | |
65 | { | |
66 | fESD = (AliESDEvent*)GetInputData(0); | |
67 | } | |
68 | //_____________________________________________________________________ | |
69 | void AliFMDAnalysisTaskSharing::Exec(Option_t */*option*/) | |
70 | { | |
8dc823cc | 71 | |
3bb122c7 | 72 | |
73 | AliESD* old = fESD->GetAliESDOld(); | |
74 | if (old) { | |
75 | fESD->CopyFromOldESD(); | |
76 | } | |
77 | ||
78 | foutputESDFMD->Clear(); | |
79 | ||
80 | fOutputESD->SetPrimaryVertexSPD(fESD->GetPrimaryVertexSPD()); | |
81 | ||
82 | AliESDFMD* fmd = fESD->GetFMDData(); | |
83 | ||
84 | if (!fmd) return; | |
85 | ||
86 | for(UShort_t det=1;det<=3;det++) { | |
87 | Int_t nRings = (det==1 ? 1 : 2); | |
88 | for (UShort_t ir = 0; ir < nRings; ir++) { | |
89 | Char_t ring = (ir == 0 ? 'I' : 'O'); | |
90 | UShort_t nsec = (ir == 0 ? 20 : 40); | |
91 | UShort_t nstr = (ir == 0 ? 512 : 256); | |
92 | for(UShort_t sec =0; sec < nsec; sec++) { | |
93 | for(UShort_t strip = 0; strip < nstr; strip++) { | |
94 | foutputESDFMD->SetMultiplicity(det,ring,sec,strip,0.); | |
95 | Float_t mult = fmd->Multiplicity(det,ring,sec,strip); | |
96 | if(mult == AliESDFMD::kInvalidMult) continue; | |
97 | //Sharing algorithm goes here | |
3bb122c7 | 98 | |
8dc823cc | 99 | Float_t Eprev = 0; |
100 | Float_t Enext = 0; | |
101 | if(strip != 0) | |
102 | if(fmd->Multiplicity(det,ring,sec,strip-1) != AliESDFMD::kInvalidMult) | |
103 | Eprev = fmd->Multiplicity(det,ring,sec,strip-1); | |
104 | if(strip != nstr - 1) | |
105 | if(fmd->Multiplicity(det,ring,sec,strip+1) != AliESDFMD::kInvalidMult) | |
106 | Enext = fmd->Multiplicity(det,ring,sec,strip+1); | |
107 | ||
108 | Float_t nParticles = GetMultiplicityOfStrip(mult,Eprev,Enext,det,ring); | |
109 | //std::cout<<nParticles<<" "<<mult<<" "<<Eprev<<" "<<Enext<<" "<<det<<" "<<ring<<" "<<sec<<" "<<strip<<std::endl; | |
110 | foutputESDFMD->SetMultiplicity(det,ring,sec,strip,nParticles); | |
3bb122c7 | 111 | foutputESDFMD->SetEta(det,ring,sec,strip,fmd->Eta(det,ring,sec,strip)); |
112 | ||
113 | } | |
114 | } | |
115 | } | |
116 | } | |
117 | fOutputESD->SetFMDData(foutputESDFMD); | |
118 | ||
119 | PostData(0, fOutputESD); | |
120 | ||
121 | } | |
8dc823cc | 122 | //_____________________________________________________________________ |
123 | Float_t AliFMDAnalysisTaskSharing::GetMultiplicityOfStrip(Float_t mult, | |
124 | Float_t Eprev, | |
125 | Float_t Enext, | |
126 | Int_t det, | |
127 | Char_t ring) { | |
128 | AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance(); | |
129 | Float_t nParticles = 0; | |
130 | Float_t cutLow = 0.1; | |
131 | Float_t cutHigh = pars->GetMPV(det,ring) - pars->GetSigma(det,ring); | |
132 | Float_t Etotal = mult; | |
133 | ||
134 | if(fSharedNext) { | |
135 | fSharedNext = kFALSE; | |
136 | fSharedPrev = kTRUE; | |
137 | return 0.; | |
138 | } | |
139 | ||
140 | if(Etotal < 0.33*pars->GetMPV(det,ring)) { | |
141 | fSharedNext = kFALSE; | |
142 | ||
143 | return 0.; | |
144 | } | |
145 | ||
146 | if(Eprev > cutLow && Eprev < cutHigh && !fSharedPrev ) { | |
147 | Etotal += Eprev; | |
148 | } | |
149 | ||
150 | if(Enext > cutLow && Enext < cutHigh ) { | |
151 | Etotal += Enext; | |
152 | fSharedNext = kTRUE; | |
153 | } | |
154 | ||
155 | if(fSharedPrev) | |
156 | fSharedPrev = kFALSE; | |
157 | ||
158 | if(Etotal > cutLow) | |
159 | nParticles = 1; | |
160 | ||
161 | ||
162 | ||
163 | return nParticles; | |
164 | } | |
165 | ||
3bb122c7 | 166 | //_____________________________________________________________________ |
167 | // | |
168 | // EOF | |
169 | // |