1 /*****************************************************************
3 General utility class for doing pp vs multiplicity studies
5 --- Functionality being added on demand.
7 --- Please report any bugs, comments, suggestions to:
8 david.dobrigkeit.chinellato@cern.ch
10 *****************************************************************/
12 #include "AliVEvent.h"
13 #include "AliESDEvent.h"
14 #include "AliAODEvent.h"
15 #include "AliVVertex.h"
17 #include "AliAODVertex.h"
18 #include "AliVTrack.h"
19 #include "AliVEvent.h"
20 #include <TMatrixDSym.h>
22 #include "AliESDUtils.h"
23 #include "AliPPVsMultUtils.h"
27 ClassImp(AliPPVsMultUtils)
29 //______________________________________________________________________
30 AliPPVsMultUtils::AliPPVsMultUtils():TObject(),
32 fBoundaryHisto_V0M(0),
33 fBoundaryHisto_V0A(0),
34 fBoundaryHisto_V0C(0),
35 fBoundaryHisto_V0MEq(0),
36 fBoundaryHisto_V0AEq(0),
37 fBoundaryHisto_V0CEq(0)
43 //_____________________________________________________________________________
44 AliPPVsMultUtils::AliPPVsMultUtils(const AliPPVsMultUtils &c) : TObject(c),
46 fBoundaryHisto_V0M(0),
47 fBoundaryHisto_V0A(0),
48 fBoundaryHisto_V0C(0),
49 fBoundaryHisto_V0MEq(0),
50 fBoundaryHisto_V0AEq(0),
51 fBoundaryHisto_V0CEq(0)
54 // copy constructor - untested
56 ((AliPPVsMultUtils &) c).Copy(*this);
59 //_____________________________________________________________________________
60 AliPPVsMultUtils &AliPPVsMultUtils::operator=(const AliPPVsMultUtils &c)
63 // Assignment operator - untested
66 if (this != &c) ((AliPPVsMultUtils &) c).Copy(*this);
70 //______________________________________________________________________
71 Float_t AliPPVsMultUtils::GetMultiplicityPercentile(AliESDEvent *event, TString lMethod = "V0M")
73 Int_t lRequestedRunNumber = event->GetRunNumber();
74 if( lRequestedRunNumber != fRunNumber ) LoadCalibration( lRequestedRunNumber );
76 Float_t lreturnval = -1;
78 //Get VZERO Information for multiplicity later
79 AliVVZERO* esdV0 = event->GetVZEROData();
81 AliError("AliVVZERO not available");
86 Float_t multV0A = 0; // multiplicity from V0 reco side A
87 Float_t multV0C = 0; // multiplicity from V0 reco side C
88 Float_t multV0AEq = 0; // multiplicity from V0 reco side A
89 Float_t multV0CEq = 0; // multiplicity from V0 reco side C
90 Float_t multV0ACorr = 0; // multiplicity from V0 reco side A
91 Float_t multV0CCorr = 0; // multiplicity from V0 reco side C
93 //Non-Equalized Signal: copy of multV0ACorr and multV0CCorr from AliCentralitySelectionTask
94 //Getters for uncorrected multiplicity
95 multV0A=esdV0->GetMTotV0A();
96 multV0C=esdV0->GetMTotV0C();
97 const AliESDVertex *lPrimarySPDVtx = event->GetPrimaryVertexSPD();
99 //Get Z vertex position of SPD vertex (why not Tracking if available?)
100 Float_t zvtx = lPrimarySPDVtx->GetZ();
102 //Acquire Corrected multV0A
103 multV0ACorr = AliESDUtils::GetCorrV0A(multV0A,zvtx);
104 multV0CCorr = AliESDUtils::GetCorrV0C(multV0C,zvtx);
106 // Equalized signals // From AliCentralitySelectionTask // Updated
107 for(Int_t iCh = 32; iCh < 64; ++iCh) {
108 Double_t mult = event->GetVZEROEqMultiplicity(iCh);
111 for(Int_t iCh = 0; iCh < 32; ++iCh) {
112 Double_t mult = event->GetVZEROEqMultiplicity(iCh);
116 if ( lMethod == "V0M" ) lreturnval =
117 fBoundaryHisto_V0M -> GetBinContent( fBoundaryHisto_V0M->FindBin(multV0ACorr+multV0CCorr) );
118 if ( lMethod == "V0A" ) lreturnval =
119 fBoundaryHisto_V0A -> GetBinContent( fBoundaryHisto_V0A->FindBin(multV0ACorr) );
120 if ( lMethod == "V0C" ) lreturnval =
121 fBoundaryHisto_V0C -> GetBinContent( fBoundaryHisto_V0C->FindBin(multV0CCorr) );
123 if ( lMethod == "V0MEq" ) lreturnval =
124 fBoundaryHisto_V0MEq -> GetBinContent( fBoundaryHisto_V0MEq->FindBin(multV0AEq+multV0CEq) );
125 if ( lMethod == "V0AEq" ) lreturnval =
126 fBoundaryHisto_V0AEq -> GetBinContent( fBoundaryHisto_V0AEq->FindBin(multV0AEq) );
127 if ( lMethod == "V0CEq" ) lreturnval =
128 fBoundaryHisto_V0CEq -> GetBinContent( fBoundaryHisto_V0CEq->FindBin(multV0CEq) );
133 //______________________________________________________________________
134 Bool_t AliPPVsMultUtils::LoadCalibration(Int_t lLoadThisCalibration)
135 //To be called if starting analysis on a new run
137 //If Histograms exist, de-allocate to prevent memory leakage
138 if( fBoundaryHisto_V0M ) {fBoundaryHisto_V0M->Delete(); fBoundaryHisto_V0M = 0x0; }
139 if( fBoundaryHisto_V0A ) {fBoundaryHisto_V0A->Delete(); fBoundaryHisto_V0A = 0x0; }
140 if( fBoundaryHisto_V0C ) {fBoundaryHisto_V0C->Delete(); fBoundaryHisto_V0C = 0x0; }
141 if( fBoundaryHisto_V0MEq ) {fBoundaryHisto_V0MEq->Delete(); fBoundaryHisto_V0MEq = 0x0; }
142 if( fBoundaryHisto_V0AEq ) {fBoundaryHisto_V0AEq->Delete(); fBoundaryHisto_V0AEq = 0x0; }
143 if( fBoundaryHisto_V0CEq ) {fBoundaryHisto_V0CEq->Delete(); fBoundaryHisto_V0CEq = 0x0; }
146 AliInfo(Form( "Loading calibration file for run %i",lLoadThisCalibration) );
147 TFile *lCalibFile_V0M = 0x0;
148 TFile *lCalibFile_V0A = 0x0;
149 TFile *lCalibFile_V0C = 0x0;
150 TFile *lCalibFile_V0MEq = 0x0;
151 TFile *lCalibFile_V0AEq = 0x0;
152 TFile *lCalibFile_V0CEq = 0x0;
154 lCalibFile_V0M = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0M.root");
155 lCalibFile_V0A = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0A.root");
156 lCalibFile_V0C = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0C.root");
157 lCalibFile_V0MEq = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0MEq.root");
158 lCalibFile_V0AEq = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0AEq.root");
159 lCalibFile_V0CEq = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0CEq.root");
161 //check memory consumption later...
162 fBoundaryHisto_V0M = (TH1F*)lCalibFile_V0M -> Get(Form("histocalib%i",fRunNumber)) -> Clone("fBoundaryHisto_V0M");
163 fBoundaryHisto_V0A = (TH1F*)lCalibFile_V0A -> Get(Form("histocalib%i",fRunNumber)) -> Clone("fBoundaryHisto_V0A");
164 fBoundaryHisto_V0C = (TH1F*)lCalibFile_V0C -> Get(Form("histocalib%i",fRunNumber)) -> Clone("fBoundaryHisto_V0C");
165 fBoundaryHisto_V0MEq = (TH1F*)lCalibFile_V0MEq -> Get(Form("histocalib%i",fRunNumber)) -> Clone("fBoundaryHisto_V0MEq");
166 fBoundaryHisto_V0AEq = (TH1F*)lCalibFile_V0AEq -> Get(Form("histocalib%i",fRunNumber)) -> Clone("fBoundaryHisto_V0AEq");
167 fBoundaryHisto_V0CEq = (TH1F*)lCalibFile_V0CEq -> Get(Form("histocalib%i",fRunNumber)) -> Clone("fBoundaryHisto_V0CEq");
169 //Careful with manual cleanup if needed: to be implemented
170 fBoundaryHisto_V0M->SetDirectory(0);
171 fBoundaryHisto_V0A->SetDirectory(0);
172 fBoundaryHisto_V0C->SetDirectory(0);
173 fBoundaryHisto_V0MEq->SetDirectory(0);
174 fBoundaryHisto_V0AEq->SetDirectory(0);
175 fBoundaryHisto_V0CEq->SetDirectory(0);
177 if ( !fBoundaryHisto_V0M || !fBoundaryHisto_V0A || !fBoundaryHisto_V0C ||
178 !fBoundaryHisto_V0MEq || !fBoundaryHisto_V0AEq || !fBoundaryHisto_V0CEq ){
179 AliFatal(Form("No calibration for run %i exists at the moment!",fRunNumber));
180 return kFALSE; //return denial
183 if( lCalibFile_V0M ) lCalibFile_V0M->Close();
184 if( lCalibFile_V0A ) lCalibFile_V0A->Close();
185 if( lCalibFile_V0C ) lCalibFile_V0C->Close();
186 if( lCalibFile_V0MEq ) lCalibFile_V0MEq->Close();
187 if( lCalibFile_V0AEq ) lCalibFile_V0AEq->Close();
188 if( lCalibFile_V0CEq ) lCalibFile_V0CEq->Close();
190 fRunNumber = lLoadThisCalibration; //Loaded!