]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/STRANGENESS/Cascades/AliPPVsMultUtils.cxx
slightly revised calib maps
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliPPVsMultUtils.cxx
1 /*****************************************************************
2  
3  General utility class for doing pp vs multiplicity studies
4  
5  --- Functionality being added on demand.
6  
7  --- Please report any bugs, comments, suggestions to:
8  david.dobrigkeit.chinellato@cern.ch
9  
10  *****************************************************************/
11
12 #include "AliVEvent.h"
13 #include "AliESDEvent.h"
14 #include "AliAODEvent.h"
15 #include "AliVVertex.h"
16 #include "AliLog.h"
17 #include "AliAODVertex.h"
18 #include "AliVTrack.h"
19 #include "AliVEvent.h"
20 #include <TMatrixDSym.h>
21 #include <TMath.h>
22 #include "AliESDUtils.h"
23 #include "AliPPVsMultUtils.h"
24 #include <TFile.h>
25
26
27 ClassImp(AliPPVsMultUtils)
28
29 //______________________________________________________________________
30 AliPPVsMultUtils::AliPPVsMultUtils():TObject(),
31 fRunNumber(0),
32 fBoundaryHisto_V0M(0),
33 fBoundaryHisto_V0A(0),
34 fBoundaryHisto_V0C(0),
35 fBoundaryHisto_V0MEq(0),
36 fBoundaryHisto_V0AEq(0),
37 fBoundaryHisto_V0CEq(0)
38 {
39     // Default contructor
40 }
41
42
43 //_____________________________________________________________________________
44 AliPPVsMultUtils::AliPPVsMultUtils(const AliPPVsMultUtils &c) : TObject(c),
45 fRunNumber(0),
46 fBoundaryHisto_V0M(0),
47 fBoundaryHisto_V0A(0),
48 fBoundaryHisto_V0C(0),
49 fBoundaryHisto_V0MEq(0),
50 fBoundaryHisto_V0AEq(0),
51 fBoundaryHisto_V0CEq(0)
52 {
53     //
54     // copy constructor - untested
55     //
56     ((AliPPVsMultUtils &) c).Copy(*this);
57 }
58
59 //_____________________________________________________________________________
60 AliPPVsMultUtils &AliPPVsMultUtils::operator=(const AliPPVsMultUtils &c)
61 {
62     //
63     // Assignment operator - untested
64     //
65     
66     if (this != &c) ((AliPPVsMultUtils &) c).Copy(*this);
67     return *this;
68 }
69
70 //______________________________________________________________________
71 Float_t AliPPVsMultUtils::GetMultiplicityPercentile(AliESDEvent *event, TString lMethod = "V0M")
72 {
73     Int_t lRequestedRunNumber = event->GetRunNumber();
74     if( lRequestedRunNumber != fRunNumber ) LoadCalibration( lRequestedRunNumber );
75     
76     Float_t lreturnval = -1;
77     
78     //Get VZERO Information for multiplicity later
79     AliVVZERO* esdV0 = event->GetVZEROData();
80     if (!esdV0) {
81         AliError("AliVVZERO not available");
82         return -1;
83     }
84     
85     // VZERO PART
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
92     
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();
98     
99     //Get Z vertex position of SPD vertex (why not Tracking if available?)
100     Float_t zvtx = lPrimarySPDVtx->GetZ();
101     
102     //Acquire Corrected multV0A
103     multV0ACorr = AliESDUtils::GetCorrV0A(multV0A,zvtx);
104     multV0CCorr = AliESDUtils::GetCorrV0C(multV0C,zvtx);
105     
106     // Equalized signals // From AliCentralitySelectionTask // Updated
107     for(Int_t iCh = 32; iCh < 64; ++iCh) {
108         Double_t mult = event->GetVZEROEqMultiplicity(iCh);
109         multV0AEq += mult;
110     }
111     for(Int_t iCh = 0; iCh < 32; ++iCh) {
112         Double_t mult = event->GetVZEROEqMultiplicity(iCh);
113         multV0CEq += mult;
114     }
115     
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) );
122     //equalized
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) );
129     
130     return lreturnval;
131 }
132
133 //______________________________________________________________________
134 Bool_t AliPPVsMultUtils::LoadCalibration(Int_t lLoadThisCalibration)
135 //To be called if starting analysis on a new run
136 {
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; }
144     
145     AliInfo(Form( "Loading calibration file for run %i",lLoadThisCalibration) );
146     TFile *lCalibFile_V0M = 0x0;
147     TFile *lCalibFile_V0A = 0x0;
148     TFile *lCalibFile_V0C = 0x0;
149     TFile *lCalibFile_V0MEq = 0x0;
150     TFile *lCalibFile_V0AEq = 0x0;
151     TFile *lCalibFile_V0CEq = 0x0;
152     
153     //AliInfo("Calling TFile::Open");
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");
160
161     //AliInfo("Casting");
162     //check memory consumption later... 
163     fBoundaryHisto_V0M   = dynamic_cast<TH1F *>(lCalibFile_V0M  -> Get(Form("histocalib%i",lLoadThisCalibration)) );
164     fBoundaryHisto_V0A   = dynamic_cast<TH1F *>(lCalibFile_V0A  -> Get(Form("histocalib%i",lLoadThisCalibration)) );
165     fBoundaryHisto_V0C   = dynamic_cast<TH1F *>(lCalibFile_V0C  -> Get(Form("histocalib%i",lLoadThisCalibration)) );
166     fBoundaryHisto_V0MEq   = dynamic_cast<TH1F *>(lCalibFile_V0MEq  -> Get(Form("histocalib%i",lLoadThisCalibration)) );
167     fBoundaryHisto_V0AEq   = dynamic_cast<TH1F *>(lCalibFile_V0AEq  -> Get(Form("histocalib%i",lLoadThisCalibration)) );
168     fBoundaryHisto_V0CEq   = dynamic_cast<TH1F *>(lCalibFile_V0CEq  -> Get(Form("histocalib%i",lLoadThisCalibration)) );
169     
170     //Careful with manual cleanup if needed: to be implemented
171     fBoundaryHisto_V0M->SetDirectory(0);
172     fBoundaryHisto_V0A->SetDirectory(0);
173     fBoundaryHisto_V0C->SetDirectory(0);
174     fBoundaryHisto_V0MEq->SetDirectory(0);
175     fBoundaryHisto_V0AEq->SetDirectory(0);
176     fBoundaryHisto_V0CEq->SetDirectory(0);
177     
178     if ( !fBoundaryHisto_V0M   || !fBoundaryHisto_V0A   || !fBoundaryHisto_V0C ||
179         !fBoundaryHisto_V0MEq || !fBoundaryHisto_V0AEq || !fBoundaryHisto_V0CEq ){
180         AliFatal(Form("No calibration for run %i exists at the moment!",lLoadThisCalibration));
181         return kFALSE; //return denial
182     }
183     //AliInfo("Closing");
184     
185     if( lCalibFile_V0M ) lCalibFile_V0M->Close();
186     if( lCalibFile_V0A ) lCalibFile_V0A->Close();
187     if( lCalibFile_V0C ) lCalibFile_V0C->Close();
188     if( lCalibFile_V0MEq ) lCalibFile_V0MEq->Close();
189     if( lCalibFile_V0AEq ) lCalibFile_V0AEq->Close();
190     if( lCalibFile_V0CEq ) lCalibFile_V0CEq->Close();
191     
192     fRunNumber = lLoadThisCalibration; //Loaded!
193     AliInfo(Form("Finished loading calibration for run %i",lLoadThisCalibration));
194     return kTRUE;
195 }