]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/STRANGENESS/Cascades/AliPPVsMultUtils.cxx
Helper class: extra info commit
[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::GetMultiplicityQuantile(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     AliInfo(Form( "Loading calibration file for run %i",lLoadThisCalibration) );
138     TFile *lCalibFile_V0M = 0x0;
139     TFile *lCalibFile_V0A = 0x0;
140     TFile *lCalibFile_V0C = 0x0;
141     TFile *lCalibFile_V0MEq = 0x0;
142     TFile *lCalibFile_V0AEq = 0x0;
143     TFile *lCalibFile_V0CEq = 0x0;
144     
145     lCalibFile_V0M = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0M.root");
146     lCalibFile_V0A = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0A.root");
147     lCalibFile_V0C = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0C.root");
148     lCalibFile_V0MEq = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0MEq.root");
149     lCalibFile_V0AEq = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0AEq.root");
150     lCalibFile_V0CEq = TFile::Open("$ALICE_ROOT/PWGLF/STRANGENESS/Cascades/corrections/calibration_V0CEq.root");
151     
152     fBoundaryHisto_V0M   = (TH1F*)lCalibFile_V0M  -> Get(Form("histocalib%i",fRunNumber));
153     fBoundaryHisto_V0A   = (TH1F*)lCalibFile_V0A  -> Get(Form("histocalib%i",fRunNumber));
154     fBoundaryHisto_V0C   = (TH1F*)lCalibFile_V0C  -> Get(Form("histocalib%i",fRunNumber));
155     fBoundaryHisto_V0MEq   = (TH1F*)lCalibFile_V0MEq  -> Get(Form("histocalib%i",fRunNumber));
156     fBoundaryHisto_V0AEq   = (TH1F*)lCalibFile_V0AEq  -> Get(Form("histocalib%i",fRunNumber));
157     fBoundaryHisto_V0CEq   = (TH1F*)lCalibFile_V0CEq  -> Get(Form("histocalib%i",fRunNumber));
158     
159     if ( !fBoundaryHisto_V0M   || !fBoundaryHisto_V0A   || !fBoundaryHisto_V0C ||
160         !fBoundaryHisto_V0MEq || !fBoundaryHisto_V0AEq || !fBoundaryHisto_V0CEq ){
161         AliFatal(Form("No calibration for run %i exists at the moment!",fRunNumber));
162         return kFALSE; //return denial
163     }
164     
165     if( lCalibFile_V0M ) lCalibFile_V0M->Close();
166     if( lCalibFile_V0A ) lCalibFile_V0A->Close();
167     if( lCalibFile_V0C ) lCalibFile_V0C->Close();
168     if( lCalibFile_V0MEq ) lCalibFile_V0MEq->Close();
169     if( lCalibFile_V0AEq ) lCalibFile_V0AEq->Close();
170     if( lCalibFile_V0CEq ) lCalibFile_V0CEq->Close();
171     
172     fRunNumber = lLoadThisCalibration; //Loaded!
173     return kTRUE;
174 }