]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - MUON/MUONTriggerChamberEfficiency.C
Adding PiKP-only histograms and eliminating a number of switches where histograms...
[u/mrichter/AliRoot.git] / MUON / MUONTriggerChamberEfficiency.C
... / ...
CommitLineData
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 **************************************************************************/
15
16/* $Id$ */
17
18#if !defined(__CINT__) || defined(__MAKECINT__)
19
20#include "Riostream.h"
21
22// ROOT includes
23#include "TGrid.h"
24#include "TString.h"
25#include "TFile.h"
26#include "TH1.h"
27
28// MUON includes
29#include "AliMUONCDB.h"
30#include "AliMUONCalibrationData.h"
31#include "AliMUONTriggerEfficiencyCells.h"
32#include "AliMUONTriggerChamberEfficiency.h"
33#include "AliCDBManager.h"
34#include "AliCDBRunRange.h"
35
36#endif
37
38/// \ingroup macros
39/// \file MUONTriggerChamberEfficiency.C
40/// \brief Macro to view and save the trigger chamber efficiency map
41/// calculated during reconstruction.
42///
43/// Efficiency map can be made available for next simulation.
44///
45/// \author Diego Stocco, Subatech, Nantes
46
47void MUONTriggerChamberEfficiency(TString inputFile = "./MUON.TriggerEfficiencyMap.root",
48 TString outputCDB = "",
49 Int_t firstRun=0, Int_t lastRun = AliCDBRunRange::Infinity()
50)
51{
52/// \param inputFile (default "./MUON.TriggerEfficiencyMaps.root")
53/// File with the numerator and denominator histos for efficiency calculation
54/// (It is the output of the PWG3/muon/AliAnalysisTaskTrigChEff analysis
55/// \param outputCDB (default "")
56/// add the map on the specified CDB
57/// \param firstRun (default 0)
58/// first run of validity for CDB object
59/// \param lastRun (default AliCDBRunRange::Infinity())
60/// last run of validity for CDB Object
61
62 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
63
64 AliMUONTriggerEfficiencyCells* effMap = new AliMUONTriggerEfficiencyCells(inputFile.Data());
65
66 if ( outputCDB.IsNull() ){
67 // Draw the efficiency and exit
68 AliCDBManager::Instance()->SetRun(firstRun);
69 AliMUONTriggerChamberEfficiency* trigChEff = new AliMUONTriggerChamberEfficiency(effMap);
70
71 trigChEff->DisplayEfficiency(kFALSE,kFALSE);
72 return;
73 }
74
75
76 // Write efficiency on OCDB
77
78 AliCDBManager::Instance()->SetSpecificStorage("MUON/Calib/TriggerEfficiency", outputCDB.Data());
79
80 AliMUONCDB::WriteToCDB(effMap, "MUON/Calib/TriggerEfficiency", firstRun, lastRun, "Measured efficiencies");
81}
82
83//____________________________________________________________
84void ShowOCDBmap(Int_t runNumber = 0, TString specificCDB="", TString ocdbPath = "local://$ALICE_ROOT/OCDB", TString runType="Full")
85{
86/// \param runNumber (default 0)
87/// run number
88/// \param specificCDB (default "")
89/// specific CDB for trigger efficiency
90/// \param ocdbPath(default "local://$ALICE_ROOT/OCDB")
91/// path to OCDB
92 if ( ocdbPath.BeginsWith("alien://") || ocdbPath.BeginsWith("raw://"))
93 TGrid::Connect("alien://");
94
95 if (!ocdbPath.CompareTo("MC"))
96 AliCDBManager::Instance()->SetDefaultStorage(ocdbPath.Data(),runType.Data());
97 else
98 AliCDBManager::Instance()->SetDefaultStorage(ocdbPath.Data());
99
100 if ( !specificCDB.IsNull() )
101 AliCDBManager::Instance()->SetSpecificStorage("MUON/Calib/TriggerEfficiency", specificCDB.Data());
102 AliCDBManager::Instance()->SetRun(runNumber);
103 AliMUONCalibrationData calib(runNumber);
104
105 AliMUONTriggerChamberEfficiency* trigChEff = new AliMUONTriggerChamberEfficiency(calib.TriggerEfficiency());
106 trigChEff->DisplayEfficiency(kFALSE,kFALSE);
107}
108
109
110//____________________________________________________________
111void FillHisto(TH1* histo, Int_t nevents)
112{
113 /// Fill histogram with global value
114 for ( Int_t ibin=1; ibin<=histo->GetXaxis()->GetNbins(); ++ibin ) {
115 Double_t binCenter = histo->GetXaxis()->GetBinCenter(ibin);
116 for ( Int_t ievent=0; ievent<nevents; ++ievent ) {
117 histo->Fill(binCenter);
118 }
119 }
120}
121
122//____________________________________________________________
123void BuildDefaultMap(TString outFilename="/tmp/defTrigChEff.root", Double_t globalValue = 1., Int_t nevents = 100000)
124{
125 /// Build default map (all boards with the same chosen value)
126
127 // Create histograms
128 enum { kBendingEff, kNonBendingEff, kBothPlanesEff, kAllTracks, kNcounts};
129 TString countTypeName[kNcounts] = {"bendPlane", "nonBendPlane","bothPlanes", "allTracks"};
130
131 const Char_t* yAxisTitle = "counts";
132
133 const Int_t kNboards = 234; //AliMpConstants::NofLocalBoards();
134 const Int_t kFirstTrigCh = 11;//AliMpConstants::NofTrackingChambers()+1;
135 const Int_t kNchambers = 4;
136 const Int_t kNslats = 18;
137
138 Int_t chamberBins = kNchambers;
139 Float_t chamberLow = kFirstTrigCh-0.5, chamberHigh = kFirstTrigCh+kNchambers-0.5;
140 const Char_t* chamberName = "chamber";
141
142 Int_t slatBins = kNslats;
143 Float_t slatLow = 0-0.5, slatHigh = kNslats-0.5;
144 const Char_t* slatName = "slat";
145
146 Int_t boardBins = kNboards;
147 Float_t boardLow = 1-0.5, boardHigh = kNboards+1.-0.5;
148 const Char_t* boardName = "board";
149
150 TString baseName, histoName, histoTitle;
151 TList* histoList = new TList();
152 histoList->SetOwner();
153
154 TH1F* histo;
155
156 for(Int_t icount=0; icount<kNcounts; icount++){
157 histoName = Form("%sCountChamber", countTypeName[icount].Data());
158 histo = new TH1F(histoName, histoName,
159 chamberBins, chamberLow, chamberHigh);
160 histo->GetXaxis()->SetTitle(chamberName);
161 histo->GetYaxis()->SetTitle(yAxisTitle);
162 Double_t nfills = ( icount == kAllTracks ) ? nevents : globalValue * (Double_t)nevents;
163 FillHisto(histo, (Int_t)nfills);
164 histoList->AddLast(histo);
165 } // loop on counts
166
167 for(Int_t icount=0; icount<kNcounts; icount++){
168 for(Int_t ch=0; ch<kNchambers; ch++){
169 histoName = Form("%sCountSlatCh%i", countTypeName[icount].Data(), kFirstTrigCh+ch);
170 histo = new TH1F(histoName, histoName,
171 slatBins, slatLow, slatHigh);
172 histo->GetXaxis()->SetTitle(slatName);
173 histo->GetYaxis()->SetTitle(yAxisTitle);
174 Double_t nfills = ( icount == kAllTracks ) ? nevents : globalValue * (Double_t)nevents;
175 FillHisto(histo, (Int_t)nfills);
176 histoList->AddLast(histo);
177 } // loop on chamber
178 } // loop on counts
179
180 for(Int_t icount=0; icount<kNcounts; icount++){
181 for(Int_t ch=0; ch<kNchambers; ch++){
182 histoName = Form("%sCountBoardCh%i", countTypeName[icount].Data(), kFirstTrigCh+ch);
183 histo = new TH1F(histoName, histoName,
184 boardBins, boardLow, boardHigh);
185 histo->GetXaxis()->SetTitle(boardName);
186 histo->GetYaxis()->SetTitle(yAxisTitle);
187 Double_t nfills = ( icount == kAllTracks ) ? nevents : globalValue * (Double_t)nevents;
188 FillHisto(histo, (Int_t)nfills);
189 histoList->AddLast(histo);
190 } // loop on chamber
191 } // loop on counts
192
193 TFile* outFile = TFile::Open(outFilename,"create");
194 histoList->Write("triggerChamberEff",TObject::kSingleKey);
195 outFile->Close();
196}